1<!doctype html> 2<html lang="en"> 3<head > 4 <meta charset="utf-8"/>
4<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1120151136",accountID:"3731713",trustKey:"1322840",xpid:"VwEEUFFSCxABVVBQAQACV1cJ",licenseKey:"NRJS-d3390ca2649c82069a5",applicationID:"1112615138",browserID:"1120151136"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */ 5(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
5e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
5const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
5if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
5o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
5(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
5;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
5{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
5ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
5{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
5null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
5dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
5imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
5return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
5!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
5if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
5);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
5class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
5h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
5 6<meta name="title" content="Products Comparison List - Flooring Inc. The Flooring Superstore Home Page"/> 7<meta name="description" content="Flooring Inc. The Flooring Superstore Home Page"/> 8<meta name="keywords" content="Flooring, Rubber, Garage, Foam, Dance, Carpet, Hardwood, Laminate, Vinyl, Gym Floors, Gymnastic Mats, Mats"/> 9<meta name="robots" content="INDEX,FOLLOW"/> 10<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/> 11<title>Products Comparison List - Flooring Inc. The Flooring Superstore Home Page</title> 12<link type="text/css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/styles.min.css" />
13<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoDataServices/js/storefront-event-collector.min.js"></script>
vendor: 1 bytes, line 13
13
14<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoDataServices/js/storefront-events-sdk.min.js"></script>
vendor: 1 bytes, line 14
14
15<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoProductRecommendations/js/recs-sdk.min.js"></script>
vendor: 1 bytes, line 15
15
16<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoProductRecommendationsLayout/js/recs-sdk.min.js"></script>
16 17<link rel="icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 18<link rel="shortcut icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 19 20<!-- Plausible Script Start --> 21
22<script defer data-domain="flooringinc.com" src="https://plausible.io/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
vendor: 2 bytes, line 22
22
23<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
23 24 25<!-- Plausible Script Ends --> 26 27<!--My8cKJTuUilt2Vvmb0igB9BsOCrMSS2F--> 28 29<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 30<link rel="dns-prefetch" href="https://www.googletagmanager.com"> 31<link rel="preload" href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2" as="font" type="font/woff2" crossorigin="anonymous"/> 32 33<style> 34.needsclick.kl-teaser-UEa7DA { display:none!important; } 35.bg-white.w-full.max-w-\[580px\].text-center.rounded-lg.shadow-lg { 36 max-width: 580px; 37} 38</style> 39
40<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 41 window.getWpGA4Cookie = function(name) { 42 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 43 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 44 }; 45 46 window.ga4AllowServices = false; 47 48 var isCookieRestrictionModeEnabled = 0, 49 currentWebsiteId = 1, 50 cookieRestrictionName = 'user_allowed_save_cookie'; 51 52 if (isCookieRestrictionModeEnabled) { 53 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 54 55 if (allowedCookies !== undefined) { 56 allowedWebsites = JSON.parse(allowedCookies); 57 58 if (allowedWebsites[currentWebsiteId] === 1) { 59 window.ga4AllowServices = true; 60 } 61 } 62 } else { 63 window.ga4AllowServices = true; 64 } 65</script>
65 66
66<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 67 if (window.ga4AllowServices) { 68 window.dataLayer = window.dataLayer || []; 69 var dl4Objects = [{"pageName":"Products Comparison List - Flooring Inc. The Flooring Superstore Home Page","pageType":"other"}]; 70 for (var i in dl4Objects) { 71 window.dataLayer.push({ecommerce: null}); 72 window.dataLayer.push(dl4Objects[i]); 73 } 74 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 75 wpGA4Cookies.map(function (cookieName) { 76 var cookieValue = window.getWpGA4Cookie(cookieName); 77 if (cookieValue) { 78 var dl4Object = {}; 79 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 80 window.dataLayer.push(dl4Object); 81 } 82 }); 83 } 84 </script>
84 85 86 <!-- Google Tag Manager -->
87<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ=" > if (window.ga4AllowServices) { 88 89window.addEventListener('init-external-scripts', () => {
vendor: 335 bytes, lines 89-95
89 90 91(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 92new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 93j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 94'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 95})(window,document,'script','dataLayer','
95GTM-5XR7MB7
vendor: 7 bytes, lines 95-96
95'); 96
97}, {once: true, passive: true}); 98 99} </script>
99 100<!-- End Google Tag Manager --> 101 102
103<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ=">var prCookieService={defaultAttributes:{path:'/'},converter:{write:function(value){return encodeURIComponent(value);},read:function(value){return decodeURIComponent(value)}},decode:function(string){return string.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);},set:function(key,value,attributes){if(typeof document==='undefined'){return;} 104attributes=Object.assign(this.defaultAttributes,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 105attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 106value=this.converter.write(value);key=this.converter.write(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var stringifiedAttributes='';for(var attributeName in attributes){if(!attributes[attributeName]){continue;} 107stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 108stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 109return(document.cookie=key+'='+value+stringifiedAttributes);},remove:function(key,attributes){this.set(key,'',{...attributes,...{expires:-1}});},get:function(key,json=false){if(typeof document==='undefined'){return;} 110var jar={};var cookies=document.cookie?document.cookie.split('; '):[];var i=0;for(;i<cookies.length;i++){var parts=cookies[i].split('=');var cookie=parts.slice(1).join('=');if(!json&&cookie.charAt(0)==='"'){cookie=cookie.slice(1,-1);} 111try{var name=this.converter.write(parts[0]);cookie=this.converter.read(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 112jar[name]=cookie;if(key===name){break;}}catch(e){}} 113return key?jar[key]:jar;}}</script>
113 114
115<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ=">var prGlobalPrivacyControlApi={config:{"canProcessSignal":true,"isGeotargetingEnabled":true,"geotargetingApiEndpoint":"https:\/\/www.flooringinc.com\/rest\/V1\/pr-global-privacy-control\/geo-targeting\/is-applicable"},isApplicableForUser:false,isConfigured:false,configure:function(){const setConfigurationResult=(isApplicable)=>{this.isApplicableForUser=isApplicable;this.isConfigured=true;if(isApplicable){this.signalHandlers.processPendingHandlers();} 116document.dispatchEvent(new Event('pr-global-privacy-control-api:configured'));};if(!this.config.canProcessSignal){setConfigurationResult(false);return;} 117if(this.cache.get('isApplicableForUser')){setConfigurationResult(this.cache.get('isApplicableForUser'));return;} 118if(!navigator.globalPrivacyControl){setConfigurationResult(false);return;} 119if(!this.config.isGeotargetingEnabled){this.cache.set('isApplicableForUser',true);setConfigurationResult(true);return;} 120this.geotargeting.isApplicable().then(result=>{this.cache.set('isApplicableForUser',result);setConfigurationResult(result);}).catch(()=>setConfigurationResult(true));},shouldApply:function(){if(!this.isConfigured){return false;} 121return this.isApplicableForUser;},};prGlobalPrivacyControlApi.geotargeting={isApplicable:async function(){return fetch(prGlobalPrivacyControlApi.config.geotargetingApiEndpoint,{method:'POST',credentials:'include'}).then(r=>r.json());}};prGlobalPrivacyControlApi.signalHandlers={handlers:[],addHandler:function(callback){let handler={callback:callback,executed:false} 122this.handlers.push(handler);if(prGlobalPrivacyControlApi.isConfigured&&prGlobalPrivacyControlApi.shouldApply()){handler.callback();handler.executed=true;}},processPendingHandlers:function(){if(!prGlobalPrivacyControlApi.shouldApply()){return;} 123if(!prCookieService.get('pr-gpc-signal-handled')){prCookieService.set('pr-gpc-signal-handled',true,{expires:null});} 124this.handlers.forEach(function(handler){if(false===handler.executed){handler.callback();handler.executed=true;}}.bind(this));}};prGlobalPrivacyControlApi.cache={storageKey:'pr_global_privacy_control_api_cache',get:function(key){try{let raw=sessionStorage.getItem(this.storageKey);let cacheData=JSON.parse(raw);return cacheData.hasOwnProperty(key)?cacheData[key]:null;}catch(e){return null;}},set:function(key,value){try{let cacheData=JSON.parse(sessionStorage.getItem(this.storageKey)||'{}');cacheData[key]=value;sessionStorage.setItem(this.storageKey,JSON.stringify(cacheData));}catch(e){}},};prGlobalPrivacyControlApi.configure();</script>
vendor: 1 bytes, line 124
124
125<script type="text/javascript" data-routing="commerce=rum" defer="defer" src="https://rum.hlx.page/.rum/@adobe/helix-rum-js@^2/dist/rum-standalone.js"></script>
125 126 127 128
128<script type="text/javascript" nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ=">(()=>{let userAllowedCookies=prCookieService.get('user_allowed_save_cookie');if(!userAllowedCookies){return;} 129let customerConsent=prCookieService.get('pr-cookie-consent');if(!customerConsent){return;} 130try{customerConsent=JSON.parse(customerConsent);}catch(error){return;} 131const categoryKey='marketing';if(customerConsent.includes('all')||customerConsent.includes(categoryKey)){return;} 132let intervalId=setInterval(prCookieService.set.bind(prCookieService,'mg_dnt',true,{expires:null}),500);document.addEventListener('pr-cookie-consent-api:configured',()=>{clearInterval(intervalId);});})();</script>
132 133 134<!-- Critical CSS for <lite-youtube> element to avoid CLS: https://web.dev/cls/ --> 135<style> 136 lite-youtube{background-color:#000;position:relative;display:block;contain:content;background-position:center center;background-size:cover;cursor:pointer}lite-youtube::after{content:"";display:block;padding-bottom:calc(100% / (16 / 9))}</style>
137<script> 138 var BASE_URL = 'https://www.flooringinc.com/'; 139 var THEME_PATH = 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US'; 140 var COOKIE_CONFIG = { 141 "expires": null, 142 "path": "\u002F", 143 "domain": ".www.flooringinc.com", 144 "secure": true, 145 "lifetime": "3600", 146 "cookie_restriction_enabled": false }; 147 var CURRENT_STORE_CODE = 'default'; 148 var CURRENT_WEBSITE_ID = '1'; 149 150 window.hyva = window.hyva || {} 151 152 window.cookie_consent_groups = window.cookie_consent_groups || {} 153 window.cookie_consent_groups['necessary'] = true; 154 155 window.cookie_consent_config = window.cookie_consent_config || {}; 156 window.cookie_consent_config['necessary'] = [].concat( 157 window.cookie_consent_config['necessary'] || [], 158 [ 159 'user_allowed_save_cookie', 160 'form_key', 161 'mage-messages', 162 'private_content_version', 163 'mage-cache-sessid', 164 'last_visited_store', 165 'section_data_ids' 166 ] 167 ); 168</script>
vendor: 1 bytes, line 168
168
169<script> 170 'use strict'; 171 (function( hyva, undefined ) { 172 173 function lifetimeToExpires(options, defaults) { 174 175 const lifetime = options.lifetime || defaults.lifetime; 176 177 if (lifetime) { 178 const date = new Date; 179 date.setTime(date.getTime() + lifetime * 1000); 180 return date; 181 } 182 183 return null; 184 } 185 186 function generateRandomString() { 187 188 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 189 length = 16; 190 191 let formKey = '', 192 charactersLength = allowedCharacters.length; 193 194 for (let i = 0; i < length; i++) { 195 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 196 } 197 198 return formKey; 199 } 200 201 const sessionCookieMarker = {noLifetime: true} 202 203 const cookieTempStorage = {}; 204 205 const internalCookie = { 206 get(name) { 207 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 208 return v ? v[2] : null; 209 }, 210 set(name, value, days, skipSetDomain) { 211 let expires, 212 path, 213 domain, 214 secure, 215 samesite; 216 217 const defaultCookieConfig = { 218 expires: null, 219 path: '/', 220 domain: null, 221 secure: false, 222 lifetime: null, 223 samesite: 'lax' 224 }; 225 226 const cookieConfig = window.COOKIE_CONFIG || {}; 227 228 expires = days && days !== sessionCookieMarker 229 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 230 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 231 232 path = cookieConfig.path || defaultCookieConfig.path; 233 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 234 secure = cookieConfig.secure || defaultCookieConfig.secure; 235 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 236 237 document.cookie = name + "=" + encodeURIComponent(value) + 238 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 239 (path ? '; path=' + path : '') + 240 (domain ? '; domain=' + domain : '') + 241 (secure ? '; secure' : '') + 242 (samesite ? '; samesite=' + samesite : 'lax'); 243 }, 244 isWebsiteAllowedToSaveCookie() { 245 const allowedCookies = this.get('user_allowed_save_cookie'); 246 if (allowedCookies) { 247 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 248 249 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 250 } 251 return false; 252 }, 253 getGroupByCookieName(name) { 254 const cookieConsentConfig = window.cookie_consent_config || {}; 255 let group = null; 256 for (let prop in cookieConsentConfig) { 257 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 258 if (cookieConsentConfig[prop].includes(name)) { 259 group = prop; 260 break; 261 } 262 } 263 return group; 264 }, 265 isCookieAllowed(name) { 266 const cookieGroup = this.getGroupByCookieName(name); 267 return cookieGroup 268 ? window.cookie_consent_groups[cookieGroup] 269 : this.isWebsiteAllowedToSaveCookie(); 270 }, 271 saveTempStorageCookies() { 272 for (const [name, data] of Object.entries(cookieTempStorage)) { 273 if (this.isCookieAllowed(name)) { 274 this.set(name, data['value'], data['days'], data['skipSetDomain']); 275 delete cookieTempStorage[name]; 276 } 277 } 278 } 279 }; 280 281 hyva.getCookie = (name) => { 282 const cookieConfig = window.COOKIE_CONFIG || {}; 283 284 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 285 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 286 } 287 288 return internalCookie.get(name); 289 } 290 291 hyva.setCookie = (name, value, days, skipSetDomain) => { 292 const cookieConfig = window.COOKIE_CONFIG || {}; 293 294 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 295 cookieTempStorage[name] = {value, days, skipSetDomain}; 296 return; 297 } 298 return internalCookie.set(name, value, days, skipSetDomain); 299 } 300 301 302 hyva.setSessionCookie = (name, value, skipSetDomain) => { 303 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 304 } 305 306 hyva.getBrowserStorage = () => { 307 const browserStorage = window.localStorage || window.sessionStorage; 308 if (!browserStorage) { 309 console.warn('Browser Storage is unavailable'); 310 return false;
311 } 312 try { 313 browserStorage.setItem('storage_test', '1'); 314 browserStorage.removeItem('storage_test'); 315 } catch (error) { 316 console.warn('Browser Storage is not accessible', error); 317 return false; 318 } 319 return browserStorage; 320 } 321 322 hyva.postForm = (postParams) => { 323 const form = document.createElement("form"); 324 325 let data = postParams.data; 326 327 if (! postParams.skipUenc && ! data.uenc) { 328 data.uenc = btoa(window.location.href); 329 } 330 form.method = "POST"; 331 form.action = postParams.action; 332 333 Object.keys(postParams.data).map(key => { 334 const field = document.createElement("input"); 335 field.type = 'hidden' 336 field.value = postParams.data[key]; 337 field.name = key; 338 form.appendChild(field); 339 }); 340 341 const form_key = document.createElement("input"); 342 form_key.type = 'hidden'; 343 form_key.value = hyva.getFormKey(); 344 form_key.name="form_key"; 345 form.appendChild(form_key); 346 347 document.body.appendChild(form); 348 349 form.submit(); 350 } 351 352 hyva.getFormKey = function () { 353 let formKey = hyva.getCookie('form_key'); 354 355 if (!formKey) { 356 formKey = generateRandomString(); 357 hyva.setCookie('form_key', formKey); 358 } 359 360 return formKey; 361 } 362 363 hyva.formatPrice = (value, showSign, options = {}) => { 364 const formatter = new Intl.NumberFormat( 365 'en\u002DUS', 366 Object.assign({ 367 style: 'currency', 368 currency: 'USD', 369 signDisplay: showSign ? 'always' : 'auto' 370 }, options) 371 ); 372 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 373 formatter.formatToParts(value).map(({type, value}) => { 374 switch (type) { 375 case 'currency': 376 return '\u0024' || value; 377 case 'minusSign': 378 return '- '; 379 case 'plusSign': 380 return '+ '; 381 default : 382 return value; 383 } 384 }).reduce((string, part) => string + part) : 385 formatter.format(value); 386 } 387 388 const formatStr = function (str, nStart) { 389 const args = Array.from(arguments).slice(2); 390 391 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 392 const idx = parseInt(n) - nStart; 393 394 if (args[idx] === null || args[idx] === void 0) { 395 return m; 396 } 397 return p.length % 2 398 ? p.slice(0, -1).replace('%%', '%') + args[idx] 399 : p.replace('%%', '%') + n; 400 }) 401 } 402 403 hyva.str = function (string) { 404 const args = Array.from(arguments); 405 args.splice(1, 0, 1); 406 407 return formatStr.apply(undefined, args); 408 } 409 410 hyva.strf = function () { 411 const args = Array.from(arguments); 412 args.splice(1, 0, 0); 413 414 return formatStr.apply(undefined, args); 415 } 416 417 /** 418 * Take a html string as `content` parameter and 419 * extract an element from the DOM to replace in 420 * the current page under the same selector, 421 * defined by `targetSelector` 422 */ 423 hyva.replaceDomElement = (targetSelector, content) => { 424 // Parse the content and extract the DOM node using the `targetSelector` 425 const parser = new DOMParser(); 426 const doc = parser.parseFromString(content, 'text/html'); 427 const contentNode = doc.querySelector(targetSelector); 428 429 // Bail if content can't be found 430 if (!contentNode) { 431 return; 432 } 433 434 hyva.activateScripts(contentNode) 435 436 // Replace the old DOM node with the new content
437 document.querySelector(targetSelector).replaceWith(contentNode); 438 439 // Reload customerSectionData and display cookie-messages if present 440 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 441 hyva.initMessages(); 442 } 443 444 hyva.activateScripts = (contentNode) => { 445 // Extract all the script tags from the content. 446 // Script tags won't execute when inserted into a dom-element directly, 447 // therefore we need to inject them to the head of the document. 448 const tmpScripts = contentNode.getElementsByTagName('script'); 449 450 if (tmpScripts.length > 0) { 451 // Push all script tags into an array 452 // (to prevent dom manipulation while iterating over dom nodes) 453 const scripts = []; 454 for (let i = 0; i < tmpScripts.length; i++) { 455 scripts.push(tmpScripts[i]); 456 } 457 458 // Iterate over all script tags and duplicate+inject each into the head 459 for (let i = 0; i < scripts.length; i++) { 460 let script = document.createElement('script'); 461 script.innerHTML = scripts[i].innerHTML; 462 463 document.head.appendChild(script); 464 465 // Remove the original (non-executing) node from the content 466 scripts[i].parentNode.removeChild(scripts[i]); 467 } 468 } 469 return contentNode; 470 } 471 472 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 473 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 474 475 let currentTrap; 476 477 const focusableElements = (rootElement) => { 478 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 479 return Array.from(rootElement.querySelectorAll(selector)) 480 .filter(el => { 481 return el.style.display !== 'none' 482 && !el.disabled 483 && el.tabIndex !== -1 484 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 485 }) 486 } 487 488 const focusTrap = (e) => { 489 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 490 if (!isTabPressed) return; 491 492 const focusable = focusableElements(currentTrap) 493 const firstFocusableElement = focusable[0] 494 const lastFocusableElement = focusable[focusable.length - 1] 495 496 e.shiftKey 497 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 498 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 499 }; 500 501 hyva.releaseFocus = (rootElement) => { 502 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 503 currentTrap.removeEventListener('keydown', focusTrap) 504 currentTrap = null 505 } 506 } 507 hyva.trapFocus = (rootElement) => { 508 if (!rootElement) return; 509 hyva.releaseFocus() 510 currentTrap = rootElement 511 rootElement.addEventListener('keydown', focusTrap) 512 const firstElement = focusableElements(rootElement)[0] 513 firstElement && firstElement.focus() 514 } 515 516 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 517 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 518 519 }( window.hyva = window.hyva || {} )); 520</script>
vendor: 1 bytes, line 520
520
521<script> 522 if (!window.IntersectionObserver) { 523 window.IntersectionObserver = function (callback) { 524 this.observe = el => el && callback(this.takeRecords()); 525 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 526 this.disconnect = () => {}; 527 this.unobserve = () => {}; 528 } 529 } 530</script>
530 531<div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><button id="open-chatbox" aria-label="Open chat"><svg position="right" class="sc-1k07fow-1 cbnSms" width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M10,18 L6,22 L6,18 L10,18 Z M17,6 C19.7614237,6 22,8.23857625 22,11 C22,13.7614237 19.7614237,16 17,16 L17,16 L7,16 C4.23857625,16 2,13.7614237 2,11 C2,8.23857625 4.23857625,6 7,6 L7,6 Z" transform="translate(12.000000, 14.000000) scale(-1, 1) translate(-12.000000, -14.000000) "></path></svg></button>
532<script> 533// Lightweight click handler: if Zendesk is already available, open messenger and hide the button. 534// If Zendesk is not available yet we do nothing here â the DOMContentLoaded handler below is 535// responsible for loading the script (avoids double-loading the Zendesk snippet). 536(function () { 537 const btn = document.getElementById('open-chatbox'); 538 if (!btn) return; 539 540 btn.addEventListener('click', function () { 541 if (typeof zE !== 'undefined') { 542 try { 543 zE('messenger', 'open'); 544 } catch (e) { 545 // ignore if API is not ready yet 546 } 547 this.style.display = 'none'; 548 this.setAttribute('aria-hidden', 'true'); 549 } 550 // If zE is not defined we intentionally don't load the script here to avoid 551 // duplicate loading. The DOMContentLoaded listener below will handle loading. 552 }); 553})(); 554</script>
vendor: 2 bytes, line 554
554
555<script> 556/* ===== Load UserWay on click ===== */ 557document.addEventListener('DOMContentLoaded', function () { 558 559 const userWayButton = document.getElementById('uw-widget-custom-trigger'); 560 const zendeskButton = document.getElementById('open-chatbox'); 561 562 /* ---- UserWay Script Functions ---- */ 563 function initUserWay() { 564 if (window.UserWay) { 565 window.UserWay.widgetToggle(); 566 return; 567 } 568 } 569 570 function loadUserWay() { 571 if (window.UserWay) return; // Skip if already loaded 572 573 const userwayScript = document.createElement('script'); 574 userwayScript.src = 'https://cdn.userway.org/widget.js'; 575 userwayScript.type = 'text/javascript'; 576 userwayScript.async = true; 577 userwayScript.crossOrigin = 'anonymous'; 578 userwayScript.setAttribute('data-account', 'vfvO52o2Kn'); 579 document.head.append(userwayScript); 580 581 /* Hide UserWay accessibility icon when initialized */ 582 document.addEventListener('userway:init_completed', function (event) { 583 const instance = event.detail.userWayInstance; 584 instance.iconVisibilityOff(); 585 586 const userwayIframe = document.getElementById("launcher"); 587 if (userwayIframe) { 588 const userwaySiblings = Array.from(userwayIframe.parentNode.children); 589 const userwaySiblingDiv = userwaySiblings.find(el => el.tagName === 'DIV'); 590 if (userwaySiblingDiv) { 591 userwaySiblingDiv.id = 'userway-live-chat'; 592 } 593 } 594 }, { once: true }); 595 } 596 597 if (userWayButton) { 598 userWayButton.addEventListener('click', initUserWay); 599 } 600 601 /* ---- Load UserWay on Scroll ---- */ 602 let hasLoaded = false; 603 function handleScroll() { 604 if (!hasLoaded) { 605 hasLoaded = true; 606 loadUserWay(); 607 // Remove scroll listener after loading 608 window.removeEventListener('scroll', handleScroll); 609 } 610 } 611 612 window.addEventListener('scroll', handleScroll); 613 614 /* ---- Load Zendesk Script ---- */ 615 function hideChatButton() { 616 try { 617 if (zendeskButton) { 618 zendeskButton.style.display = 'none'; 619 zendeskButton.setAttribute('aria-hidden', 'true'); 620 } 621 } catch (e) { 622 // ignore 623 } 624 } 625 626 function loadZendesk() { 627 // If already loaded, open messenger and hide the button 628 if (window.zE) { 629 try { zE('messenger', 'open'); } catch (e) { } 630 hideChatButton(); 631 return; 632 } 633 634 // If script is already injected, do nothing (we'll open on load) 635 if (document.getElementById('ze-snippet')) return; 636 637 const zendeskScript = document.createElement('script'); 638 zendeskScript.id = 'ze-snippet'; 639 zendeskScript.src = 'https://static.zdassets.com/ekr/snippet.js?key=f007eb69-6b5d-407a-bdff-0706af960a4d'; 640 641 zendeskScript.onload = function () { 642 // Wait a short moment to ensure widget initializes 643 setTimeout(() => { 644 if (typeof zE !== 'undefined') { 645 try { zE('messenger', 'open'); } catch (e) { } 646 hideChatButton(); 647 } 648 }, 300); 649 }; 650 651 document.head.append(zendeskScript); 652 } 653 654 if (zendeskButton) { 655 zendeskButton.addEventListener('click', loadZendesk); 656 } 657 658}); 659</script>
659 660 661<style> 662.checkout-index-index button#open-chatbox{display:none} 663.uw-widget-custom-trigger{background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" style="&%2310; fill: %2374767e;&%2310;"><circle cx="16" cy="16" r="15.5" fill="%23fff" stroke="%2374767e" class="circle-wrapper" style="&%2310; stroke: %2374767e;&%2310;"/><path d="M16 11.583a2.083 2.083 0 1 0 0-4.166 2.083 2.083 0 0 0 0 4.166ZM23.917 12.417H8.083a.834.834 0 0 0 0 1.666H13.5v11.459a1.041 1.041 0 1 0 2.083 0V19.5h.834v6.042a1.041 1.041 0 1 0 2.083 0V14.083h5.417a.833.833 0 0 0 0-1.666Z"/></svg>');} 664</style></div>
665<script> 666 window.addEventListener('load', function () { 667 window.magentoStorefrontEvents = magentoStorefrontEvents; 668 magentoStorefrontEvents.context.setStorefrontInstance( 669 {"storeUrl":"https:\/\/www.flooringinc.com\/","websiteId":1,"websiteCode":"base","storeId":1,"storeCode":"main_website_store","storeViewId":1,"storeViewCode":"default","websiteName":"Flooring Inc.","storeName":"Main Website Store","storeViewName":"Default Store View","baseCurrencyCode":"USD","storeViewCurrencyCode":"USD","catalogExtensionVersion":"103.4.28","environmentId":"a90eb89f-1f93-44b0-81d9-2a9af649b47f","environment":"Production","storefrontTemplate":"Hyva"} ); 670 magentoStorefrontEvents.context.setMagentoExtension({ 671 magentoExtensionVersion: "8.0.1", 672 }); 673 magentoStorefrontEvents.context.setDataServicesExtension({ 674 version: "8.0.1", 675 }); 676 magentoStorefrontEvents.context.setPage({ 677 pageType: "Default" 678 }); 679 magentoStorefrontEvents.context.setContext("pageExtended", { 680 action: "page-view" 681 }); 682 683 684 magentoStorefrontEvents.publish.pageView(); 685 }); 686</script>
686 687</head> 688<body class="pl-thm-dcw pl-thm-dcw-hyvadesktop prgdpr-dcw prgdpr-dcw-hyvadesktop mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-dcw-hyvadesktop catalog-product_compare-index page-layout-1column" id="html-body"> 689<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 689-690
689 690<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
690GTM-5XR7MB7
vendor: 85 bytes, lines 690-691
690" 691height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
692<!-- End Google Tag Manager (noscript) --> 693
694<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 695var prCookieConsentApi = { 696 CUSTOMER_CONSENT: 'pr-cookie-consent', 697 SYSTEM_COOKIES: [ 698 'PHPSESSID', 699 this.CUSTOMER_CONSENT, 700 'user_allowed_save_cookie', 701 ], 702 config: {}, 703 whitelist: {}, 704 isConfigured: false, 705 /** 706 * Contains callbacks that run after all configuration come 707 * 708 * @type {function[]} 709 */ 710 configuredCallbacks: [], 711 initCookieBlocking: function () { 712 var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') 713 || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); 714 if (cookieDesc && cookieDesc.configurable) { 715 var api = this; 716 Object.defineProperty(document, 'cookie', { 717 get: function () { 718 return cookieDesc.get.call(document); 719 }, 720 set: function (cookie) { 721 let cookieName = cookie.substring(0, cookie.indexOf('=')).trim(); 722 document.dispatchEvent(new CustomEvent('pr-cookie-consent-api:cookie-blocking:validation', { 723 detail: {cookieName: cookieName, isAllowed: api.isAllowed(cookieName), cookie: cookie} 724 })); 725 726 if (! api.isAllowed(cookieName)) { 727 api.logger.warn('CookieConsent: blocked cookie "' + cookieName + '"'); 728 return; 729 } 730 cookieDesc.set.call(document, cookie); 731 } 732 }); 733 } 734 }, 735 getCookieValue: function (name) { 736 var values = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 737 return values ? decodeURIComponent(values.pop()) : ''; 738 }, 739 configure: function (configJson) { 740 this.logger.init(); 741 this.userScript.init(); 742 try { 743 this.config = JSON.parse(configJson); 744 if (this.config.canManageCookie === null) { 745 console.error('CookieConsent: restriction config is invalid'); 746 } 747 this.isConfigured = true; 748 749 this.configuredCallbacks.forEach(function (callback) { 750 callback(); 751 }.bind(this)); 752 753 this.clearRejectedCookie(); 754 } catch (e) { 755 console.error('CookieConsent: error has happened during parse JSON'); 756 return false; 757 } 758 759 document.dispatchEvent(new Event('pr-cookie-consent-api:configured')); 760 }, 761 /** 762 * @param {function} callback 763 * @returns {prCookieConsentApi} 764 */ 765 addConfiguredCallback: function (callback) { 766 this.configuredCallbacks.push(callback); 767 return this; 768 }, 769 isAllowedCategory: function (categoryKey) { 770 if (! this.config.canManageCookie) { 771 return true; 772 } 773 if (this.isEssentialCategory(categoryKey)) { 774 return true; 775 } 776 if (this.isOptIn()) { 777 if (this.isAllCategoriesAllowed()) { 778 return true; 779 } 780 return this.consent.get().includes(categoryKey); 781 } 782 return this.config.canUseCookieBeforeOptIn; 783 }, 784 getDomain: function (cookieName) { 785 return this.config.cookies[cookieName] ? this.config.cookies[cookieName].domain : null; 786 }, 787 isAllowed: function (cookieName) { 788 if (this.isSystemCookie(cookieName)) { 789 return true; 790 } 791 if (! this.config.canManageCookie) { 792 return true; 793 } 794 if (this.whitelist[cookieName]) { 795 return true; 796 } 797 cookieName = this.getTrueCookieName(cookieName); 798 if (! this.isOptIn()) { 799 if (this.config.canUseCookieBeforeOptIn) { 800 return true; 801 } 802 if (this.isKnownCookie(cookieName)) { 803 return this.isInEssentialCategory(cookieName); 804 } 805 return false; 806 } 807 if (! this.isKnownCookie(cookieName)) { 808 return ! this.config.canBlockUnknownCookie; 809 } 810 return this.isInAllowedCategory(cookieName); 811 }, 812 isAllCategoriesAllowed: function () { 813 if (null === this.cache.get('allowAllCategories')) { 814 var customerConsent = this.consent.get(); 815 if (customerConsent && customerConsent.includes('all') ) { 816 this.cache.set('allowAllCategories', true); 817 } else { 818 var allowedWebsites = this.websiteRestriction.getAllowed(); 819 this.cache.set('allowAllCategories', allowedWebsites[this.config.mage.website] === 1); 820 } 821 } 822 return this.cache.get('allowAllCategories'); 823 }, 824 isEssentialCategory: function (categoryKey) { 825 return this.config.essentialCategoryKeys.includes(categoryKey); 826 }, 827 isInEssentialCategory: function (cookieName) { 828 return this.isEssentialCategory(this.getCookieCategory(cookieName)); 829 }, 830 isInAllowedCategory: function (cookieName) { 831 return this.isAllowedCategory(this.getCookieCategory(cookieName)); 832 }, 833 getCookieCategory: function (cookieName) {
834 return this.config.cookieToCategoryMapping[cookieName]; 835 }, 836 isOptIn: function () { 837 var allowedWithDefaultCookie = this.websiteRestriction.getAllowed()[this.config.mage.website] === 1; 838 return Boolean(this.consent.get()) || allowedWithDefaultCookie; 839 }, 840 isSystemCookie: function (cookieName) { 841 return this.SYSTEM_COOKIES.includes(cookieName); 842 }, 843 isKnownCookie: function (cookieName) { 844 return this.config.cookieToCategoryMapping.hasOwnProperty(cookieName); 845 }, 846 getTrueCookieName: function (cookieName) { 847 var keys = Object.keys(this.config.dynamicNamesPatterns), key; 848 for (var i = 0, length = keys.length; i < length; i++) { 849 key = keys[i]; 850 if (new RegExp(this.config.dynamicNamesPatterns[key]).test(cookieName)) { 851 return key; 852 } 853 } 854 return cookieName; 855 }, 856 clearRejectedCookie: function () { 857 let cookies = prCookieService.get(); 858 Object.keys(cookies).forEach(function(cookieName) { 859 if (this.isAllowed(cookieName)) { 860 return; 861 } 862 863 var encodedCookieName = cookieName = encodeURIComponent(String(cookieName)) 864 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 865 .replace(/[\(\)]/g, escape); 866 867 this.whitelist[encodedCookieName] = true; 868 if (this.getDomain(cookieName)) { 869 prCookieService.remove(cookieName, {domain: this.getDomain(cookieName)}); 870 } else { 871 prCookieService.remove(cookieName); 872 if (this.config.cookie.parentDomain) { 873 prCookieService.remove(cookieName, {domain: this.config.cookie.parentDomain}); 874 } 875 } 876 this.logger.warn('CookieConsent: remove cookie "' + cookieName + '"'); 877 if (typeof prCookieService.get(cookieName) !== 'undefined') { 878 this.logger.error('CookieConsent: fail to remove cookie "' + cookieName + '"'); 879 } 880 this.whitelist[encodedCookieName] = false; 881 }.bind(this)); 882 } 883}; 884 885prCookieConsentApi.userScript = { 886 /**
887 * List of callbacks and categories they depend on. 888 */ 889 pendingScripts: [], 890 /** 891 * Run script after model is configured or after user provided consent. 892 */ 893 init: function () { 894 prCookieConsentApi.addConfiguredCallback(this.executePendingScripts.bind(this)); 895 prCookieConsentApi.consent.addCallback(this.executePendingScripts.bind(this)); 896 }, 897 /** 898 * Run or delay script. 899 * 900 * @param {function} callback 901 * @param {string} categoryKey 902 */ 903 execute: function (callback, categoryKey) { 904 if (prCookieConsentApi.isConfigured && prCookieConsentApi.isAllowedCategory(categoryKey)) { 905 callback(); 906 return; 907 } 908 909 this.pendingScripts.push({callback: callback, categoryKey: categoryKey, executed: false}); 910 }, 911 /** 912 * Run pending scripts. 913 */ 914 executePendingScripts: function () { 915 this.pendingScripts.forEach(function (script) { 916 if (false === script.executed && prCookieConsentApi.isAllowedCategory(script.categoryKey)) { 917 script.callback(); 918 script.executed = true; 919 } 920 }.bind(this)); 921 }, 922}; 923 924prCookieConsentApi.websiteRestriction = { 925 getAllowed: function () { 926 var allowedWebsites = prCookieConsentApi.getCookieValue(prCookieConsentApi.config.mage.cookieName); 927 return allowedWebsites ? JSON.parse(allowedWebsites) : {}; 928 }, 929 allowCurrent: function () { 930 return this.set(prCookieConsentApi.config.mage.website, true); 931 }, 932 disallowCurrent: function () { 933 return this.set(prCookieConsentApi.config.mage.website, false); 934 }, 935 /** 936 * @param {number} website 937 * @param {boolean} flag 938 * @return {CookieRestriction.websiteRestriction} 939 */ 940 set: function (website, flag) { 941 var allowedWebsites = this.getAllowed(); 942 943 if (flag) { 944 allowedWebsites[website] = 1; 945 } else { 946 delete allowedWebsites[website]; 947 } 948 949 prCookieService.set(prCookieConsentApi.config.mage.cookieName, allowedWebsites, { 950 path: prCookieConsentApi.config.cookie.path, 951 expires: prCookieConsentApi.config.mage.lifetime ? Math.ceil(prCookieConsentApi.config.mage.lifetime / 86400) : 0 952 }); 953 954 return this; 955 } 956}; 957 958prCookieConsentApi.cache = { 959 cacheData: {allowAllCategories: null}, 960 get: function (key) { 961 return this.cacheData[key]; 962 }, 963 set: function (key, value) { 964 this.cacheData[key] = value; 965 }, 966 reset: function () { 967 this.cacheData = {allowAllCategories: null}; 968 } 969}; 970 971prCookieConsentApi.logger = { 972 level: 0, /* disabled */ 973 init: function () { 974 if (window.location.hash === '#pr-enable-cookie-log') { 975 this.level = 1; /* only warnings and errors */ 976 } 977 if (window.location.hash === '#pr-enable-cookie-log-all') { 978 this.level = 2; /* all logs */ 979 } 980 }, 981 log: function () { 982 this.level > 1 && console.log.apply(console, arguments); 983 }, 984 warn: function () { 985 this.level > 0 && console.warn.apply(console, arguments); 986 }, 987 error: function () { 988 this.level > 0 && console.error.apply(console, arguments); 989 } 990}; 991 992prCookieConsentApi.consent = { 993 /** 994 * Contains callbacks that run after user consent. 995 * 996 * @type {function[]} 997 */ 998 callbacks: [], 999 allowAllCategories: function () { 1000 prCookieConsentApi.cache.reset(); 1001 prCookieConsentApi.consent.set(['all']); 1002 return this; 1003 }, 1004 declineAll: function () { 1005 prCookieConsentApi.cache.reset(); 1006 prCookieConsentApi.consent.set([]); 1007 return this; 1008 }, 1009 set: function (allowedCategories) { 1010 prCookieService.set(prCookieConsentApi.CUSTOMER_CONSENT, JSON.stringify(allowedCategories), { 1011 expires: prCookieConsentApi.config.consent.expiry, 1012 path: prCookieConsentApi.config.cookie.path, 1013 domain: prCookieConsentApi.config.cookie.domain 1014 }); 1015 1016 if (allowedCategories.includes('all')) {
1017 prCookieConsentApi.websiteRestriction.allowCurrent(); 1018 } else { 1019 prCookieConsentApi.websiteRestriction.disallowCurrent(); 1020 } 1021 prCookieConsentApi.cache.reset(); 1022 1023 var isAccepting = allowedCategories.length; 1024 1025 this.callbacks.forEach(function (callback) { 1026 callback(allowedCategories) 1027 }); 1028 1029 fetch(prCookieConsentApi.config.consent.logUrl, { 1030 method: 'POST', 1031 headers: { 1032 'Content-Type': 'application/json', 1033 'X-Requested-With': 'XMLHttpRequest' 1034 }, 1035 body: JSON.stringify({acceptedKeys: allowedCategories}) 1036 }) 1037 .then(this.pageReloadAfterAction.bind(this, isAccepting)); 1038 }, 1039 /** 1040 * Reload page by configuration and action 1041 * 1042 * @param isAccepting 1043 */ 1044 pageReloadAfterAction: function (isAccepting) { 1045 if (isAccepting && prCookieConsentApi.config.consent.reloadAfterAccept) { 1046 window.location.reload(); 1047 } 1048 1049 if (! isAccepting && prCookieConsentApi.config.consent.reloadAfterDecline) { 1050 window.location.reload(); 1051 } 1052 }, 1053 get: function () { 1054 var consent = prCookieConsentApi.getCookieValue(prCookieConsentApi.CUSTOMER_CONSENT); 1055 return consent ? JSON.parse(consent) : false; 1056 }, 1057 addCallback: function (callback) { 1058 this.callbacks.push(callback); 1059 return this; 1060 }, 1061}; 1062 1063prCookieConsentApi.configure('\u007B\u0022canManageCookie\u0022\u003Afalse,\u0022canUseCookieBeforeOptIn\u0022\u003Afalse,\u0022canBlockUnknownCookie\u0022\u003Afalse,\u0022consent\u0022\u003A\u007B\u0022isLoggedIn\u0022\u003Atrue,\u0022logUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.flooringinc.com\u005C\u002Fpr\u002Dcookie\u002Dconsent\u005C\u002Fconsent_customer\u005C\u002Fupdate\u005C\u002F\u0022,\u0022reloadAfterAccept\u0022\u003Atrue,\u0022reloadAfterDecline\u0022\u003Afalse,\u0022expiry\u0022\u003A365\u007D,\u0022cookie\u0022\u003A\u007B\u0022path\u0022\u003A\u0022\u005C\u002F\u0022,\u0022domain\u0022\u003A\u0022www.flooringinc.com\u0022,\u0022parentDomain\u0022\u003A\u0022.flooringinc.com\u0022\u007D,\u0022cookies\u0022\u003A\u007B\u0022pr\u002Dcookie\u002Dnotice\u002Dstatus\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022user_allowed_save_cookie\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022guest\u002Dview\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022login_redirect\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dmessages\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022section_data_ids\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022store\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022amz_auth_err\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022amz_auth_logout\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dsessid\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022stf\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_viewed_product\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_viewed_product_previous\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dtranslation\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dtranslation\u002Dfile\u002Dversion\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022product_data_storage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_compared_product\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_compared_product_previous\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dstorage\u002Dsection\u002Dinvalidation\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_ga\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_ga_\u002A\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_gid\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_gat\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_dc_gtm_\u002A\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mg_dnt\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022last_visited_store\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dgpc\u002Dnotification\u002Dshown\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dgpc\u002Dsignal\u002Dhandled\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_clck\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_clsk\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022CLID\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022MR\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022MUID\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dcookie\u002Dconsent\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dcookie\u002Dconsent\u002Did\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022form_key\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022X\u002DMagento\u002DVary\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022private_content_version\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022persistent_shopping_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022add_to_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dbanners\u002Dcache\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022remove_from_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D\u007D,\u0022mage\u0022\u003A\u007B\u0022website\u0022\u003A1,\u0022cookieName\u0022\u003A\u0022user_allowed_save_cookie\u0022,\u0022lifetime\u0022\u003A31536000\u007D,\u0022cookieToCategoryMapping\u0022\u003A\u007B\u0022pr\u002Dcookie\u002Dnotice\u002Dstatus\u0022\u003A\u0022necessary\u0022,\u0022user_allowed_save_cookie\u0022\u003A\u0022necessary\u0022,\u0022guest\u002Dview\u0022\u003A\u0022necessary\u0022,\u0022login_redirect\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dmessages\u0022\u003A\u0022necessary\u0022,\u0022section_data_ids\u0022\u003A\u0022necessary\u0022,\u0022store\u0022\u003A\u0022necessary\u0022,\u0022amz_auth_err\u0022\u003A\u0022necessary\u0022,\u0022amz_auth_logout\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dsessid\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022stf\u0022\u003A\u0022necessary\u0022,\u0022recently_viewed_product\u
10630022\u003A\u0022necessary\u0022,\u0022recently_viewed_product_previous\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dtranslation\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dtranslation\u002Dfile\u002Dversion\u0022\u003A\u0022necessary\u0022,\u0022product_data_storage\u0022\u003A\u0022necessary\u0022,\u0022recently_compared_product\u0022\u003A\u0022necessary\u0022,\u0022recently_compared_product_previous\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dstorage\u002Dsection\u002Dinvalidation\u0022\u003A\u0022necessary\u0022,\u0022_ga\u0022\u003A\u0022statistics\u0022,\u0022_ga_\u002A\u0022\u003A\u0022statistics\u0022,\u0022_gid\u0022\u003A\u0022statistics\u0022,\u0022_gat\u0022\u003A\u0022statistics\u0022,\u0022_dc_gtm_\u002A\u0022\u003A\u0022statistics\u0022,\u0022mg_dnt\u0022\u003A\u0022necessary\u0022,\u0022last_visited_store\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dgpc\u002Dnotification\u002Dshown\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dgpc\u002Dsignal\u002Dhandled\u0022\u003A\u0022necessary\u0022,\u0022_clck\u0022\u003A\u0022statistics\u0022,\u0022_clsk\u0022\u003A\u0022statistics\u0022,\u0022CLID\u0022\u003A\u0022statistics\u0022,\u0022MR\u0022\u003A\u0022statistics\u0022,\u0022MUID\u0022\u003A\u0022statistics\u0022,\u0022pr\u002Dcookie\u002Dconsent\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dcookie\u002Dconsent\u002Did\u0022\u003A\u0022necessary\u0022,\u0022form_key\u0022\u003A\u0022necessary\u0022,\u0022X\u002DMagento\u002DVary\u0022\u003A\u0022necessary\u0022,\u0022private_content_version\u0022\u003A\u0022necessary\u0022,\u0022persistent_shopping_cart\u0022\u003A\u0022necessary\u0022,\u0022add_to_cart\u0022\u003A\u0022statistics\u0022,\u0022mage\u002Dbanners\u002Dcache\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022remove_from_cart\u0022\u003A\u0022statistics\u0022\u007D,\u0022essentialCategoryKeys\u0022\u003A\u005B\u0022necessary\u0022\u005D,\u0022dynamicNamesPatterns\u0022\u003A\u007B\u0022_dc_gtm_\u002A\u0022\u003A\u0022_dc_gtm_.\u002A\u0022,\u0022_ga_\u002A\u0022\u003A\u0022_ga_.\u002A\u0022\u007D\u007D'); 1064prCookieConsentApi.initCookieBlocking(); 1065 1066if (typeof define === 'function') { 1067 define('prCookieService', function () {return prCookieService}); 1068 define('prCookieConsentApi', function () {return prCookieConsentApi;}); 1069} 1070</script>
1070 1071 1072 1073
1073<script type="text/javascript" nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 1074 (() => { 1075 document.addEventListener('pr-cookie-consent-api:cookie-blocking:validation', (event) => { 1076 if ('mg_dnt' !== event.detail.cookieName) { 1077 return; 1078 } 1079 1080 setTimeout(() => { 1081 const categoryKey = 'marketing'; 1082 let cookieValue = (event.detail.cookie.match(/^[^=]+=(.*?)(?:$|;)/) || [])[1]?.trim(); 1083 1084 if (prCookieConsentApi.isAllowedCategory(categoryKey) && cookieValue.length) { 1085 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1086 return; 1087 } 1088 1089 if (! prCookieConsentApi.isAllowedCategory(categoryKey) && ! cookieValue.length) { 1090 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1091 } 1092 }, 100); 1093 }); 1094 1095 let handleCookieConsent = () => { 1096 const categoryKey = 'marketing'; 1097 if (prCookieConsentApi.isAllowedCategory(categoryKey)) { 1098 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1099 } else { 1100 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1101 } 1102 }; 1103 1104 prCookieConsentApi.consent.addCallback(handleCookieConsent); 1105 handleCookieConsent(); 1106 })(); 1107 </script>
1107 1108 1109
1109<script> 1110 (function () { 1111 'use strict'; 1112 1113 window.amRecaptchaModel = { 1114 formsToProtect: "form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D", 1115 isEnabledOnPayments: "", 1116 checkoutRecaptchaValidateUrl: "https://www.flooringinc.com/amcapthca/checkout/validate/", 1117 invisibleCaptchaCustomForm: "\u002D1", 1118 recaptchaConfig: { 1119 lang: "hl\u003Den" || 'hl=en', 1120 theme: "light", 1121 badge: "bottomright", 1122 sitekey: "6Lc6gcYqAAAAADiXHrgCFqC4Sewhxs-nrHYgN4oo", 1123 size: "normal" 1124 }, 1125 url: 'https://www.google.com/recaptcha/api.js', 1126 isCaptchaScriptLoaded: false, 1127 isInvisible: "normal" === 'invisible', 1128 1129 /** 1130 * Submit event 1131 * 1132 * @param {Object} $event 1133 * @return {void} 1134 */ 1135 execute: function ($event) { 1136 const eventTarget = $event?.target; 1137 if (this.isCaptchaScriptLoaded) { 1138 this.executeCaptcha(eventTarget); 1139 } else { 1140 window.addEventListener('amcaptcha-script-loaded', () => { 1141 this.isCaptchaScriptLoaded = true; 1142 this.executeCaptcha(eventTarget); 1143 this.initAmcaptchaBadges(); 1144 }); 1145 1146 this.loadRecaptchaScript(); 1147 } 1148 }, 1149 1150 /** 1151 * Execute original submit 1152 * 1153 * @param {Object} $event 1154 * @param {HTMLElement} $el 1155 * @return {void} 1156 */ 1157 recaptchaCallback: function ($event, $el) { 1158 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1159 }, 1160 1161 /** 1162 * Reset captcha 1163 * 1164 * @param {Object} $event 1165 * @param {HTMLElement} $el 1166 */ 1167 expiredCallback: function($event, $el) { 1168 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1169 }, 1170 1171 /** 1172 * Checks if event is fired on submitted element 1173 * 1174 * @param {Object} $event 1175 * @param {HTMLElement} $el 1176 * @return {boolean} 1177 */ 1178 shouldExecuteCallback: function($event, $el) { 1179 const eventWidgetId = $event.detail.widgetId; 1180 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1181 1182 return eventWidgetId === elementWidgetId; 1183 }, 1184 1185 /** 1186 * Run captcha for widget by id 1187 * 1188 * @param {HTMLElement} eventTarget 1189 * @return {void} 1190 */ 1191 executeCaptcha: function(eventTarget) { 1192 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1193 this.bindCaptchaGlobalCallbacks(eventTarget); 1194 this.renderCaptcha(eventTarget); 1195 eventTarget.dataset.amCaptchaRendered = ''; 1196 } 1197 1198 const widgetId = this.getWidgetId(eventTarget); 1199 1200 if (!widgetId) { 1201 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1202 { 1203 type: "error", 1204 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1205 } 1206 ]); 1207 return; 1208 } 1209 1210 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1211 grecaptcha.reset(widgetId); 1212 1213 if (!this.isInvisible) { 1214 this.stopAmcaptchaLoading(); 1215 return; 1216 } 1217 1218 grecaptcha.execute(widgetId) 1219 .then(() => this.stopAmcaptchaLoading()) 1220 .catch(() => this.stopAmcaptchaLoading()); 1221 }, 1222 1223 /** 1224 * Add recaptcha script to page 1225 * 1226 * @return {void} 1227 */ 1228 loadRecaptchaScript: function () { 1229 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1230 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1231 const script = document.createElement('script'); 1232 1233 script.type = 'text/javascript'; 1234 script.src = url; 1235 script.async = true; 1236 document.head.appendChild(script); 1237 }, 1238 1239 /** 1240 * Stop loader on page 1241 * 1242 * @return {void} 1243 */ 1244 stopAmcaptchaLoading: function () { 1245 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1246 }, 1247 1248 /** 1249 * Add attributes to hide captcha badge 1250 * 1251 * @return {void} 1252 */ 1253 initAmcaptchaBadges: function () { 1254 if (!this.isInvisible) { 1255 return; 1256 } 1257 1258 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1259 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1260 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1261 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1262 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1263 }); 1264 }, 1265 1266 /** 1267 * Get form widgetId 1268 * 1269 * @param {HTMLElement} eventTarget 1270 * @return {string} 1271 */ 1272 getWidgetId: function (eventTarget) { 1273 return eventTarget.dataset.amCaptchaWidgetId 1274 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1275 }, 1276 1277 /** 1278 * Add captcha badge or checkbox to protected form. 1279 * Store widgetId in dataset to pass this info in callbacks 1280 * 1281 * @param {HTMLElement} eventTarget 1282 * @return {void} 1283 */ 1284 renderCaptcha: function (eventTarget) { 1285 const captchaElement = document.createElement('div'); 1286 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1287 ?? eventTarget.closest('form'); 1288 formContent?.appendChild(captchaElement); 1289 1290 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1291 ...window.amRecaptchaModel?.recaptchaConfig, 1292 callback: () => { 1293 window.dispatchEvent(new CustomEvent( 1294 'amrecaptcha-callback', { 1295 detail: this.getCaptchaCallbackDetail(eventTarget) 1296 })); 1297 }, 1298 'expired-callback': () => { 1299 window.dispatchEvent(new CustomEvent( 1300 'amrecaptcha-expired-callback', { 1301 detail: this.getCaptchaCallbackDetail(eventTarget) 1302 })); 1303 } 1304 }); 1305 }, 1306 1307 /** 1308 * Get detail property for callback event 1309 * 1310 * @param {HTMLElement} eventTarget 1311 * @return {object} 1312 */ 1313 getCaptchaCallbackDetail: function (eventTarget) { 1314 return { 1315 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1316 form: eventTarget 1317 } 1318 }, 1319 1320 /** 1321 * Add functions that will be called on the global state 1322 * 1323 * @param {HTMLElement} eventTarget 1324 * @return {void} 1325 */ 1326 bindCaptchaGlobalCallbacks: function (eventTarget) { 1327 eventTarget.setAttribute( 1328 'x-on:amrecaptcha-callback.window', 1329 `amRecaptchaModel.recaptchaCallback($event, $el)` 1330 ); 1331 eventTarget.setAttribute( 1332 'x-on:amrecaptcha-expired-callback.window', 1333 'amRecaptchaModel.expiredCallback($event, $el)' 1334 ); 1335 } 1336 }; 1337 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1338 1339 window.amRecaptchaLoadCallback = function () { 1340 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1341 } 1342 </script>
1342 1343 1344 1345 <!--suppress HtmlUnknownTarget --> 1346 <!-- BV | Magento Extension 9.1.7 --> 1347
1347<script> 1348 window.addEventListener('init-external-scripts', () => { 1349 const bvScript = document.createElement('script'); 1350 bvScript.src = '//apps.bazaarvoice.com/deployments/incstores/main_site/production/en_US/bv.js'; 1351 bvScript.type = 'text/javascript'; 1352 bvScript.async = true; 1353 document.head.append(bvScript); 1354 }, {once: true, passive: true}); 1355 </script>
vendor: 1 bytes, line 1355
1355
1356<script> 1357 function initSocialLoginPost() { 1358 return { 1359 submitForm(form) { 1360 event.preventDefault(); 1361 var loginRefererElement = document.getElementById("sociallogin-login-referer"); 1362 var value = loginRefererElement.value; 1363 fetch(form.action, { 1364 headers: { 1365 contentType: "application/json;charset=utf-8", 1366 }, 1367 body: new URLSearchParams({ 1368 form_key: hyva.getFormKey(), 1369 'refress-redirect-url':value 1370 }), 1371 method: "POST", 1372 mode: "cors", 1373 credentials: "include", 1374 }).then(response => { 1375 if (response.redirected) { 1376 window.location.href = response.url; 1377 } else { 1378 window.dispatchMessages("warning", "Post request failed", 5000); 1379 } 1380 }) 1381 } 1382 } 1383 } 1384</script>
1384 1385<form style="display:none;" class="form" x-data="initSocialLoginPost()" @submit="submitForm($el)" 1386 action="https://www.flooringinc.com/sociallogin/account/loginPost/" 1387 method="post" 1388 id="sociallogin-login-form" 1389> 1390 <input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="" /> 1391 <input id="sociallogin-login-submit" type="submit" value="sociallogin" style="font-size:0"/> 1392</form> 1393 1394<style> 1395 .pr-cookie-setting-bar-overlay, 1396 .pr-cookie-setting-bar-container { 1397 z-index: 999999999999999; 1398 } 1399</style> 1400
1401<script> 1402 'use strict'; 1403 var prCookieSettingBar = { 1404 config: {"categories":[{"key":"necessary","is_essential":true,"is_pre_checked":false,"name":"Strictly necessary cookies","description":"These cookies are essential for you to browse our store and use its features, such as accessing secure areas of the website. Cookies that allow holding your cart items, cookies that keep you logged-in and cookies that save your customized preferences are an example of strictly necessary cookies. These cookies are essential to a website's functionality and cannot be disabled by users.","sort_order":0,"details":[{"name":"First party","is_third_party":false,"cookies":[{"name":"pr-cookie-notice-status","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores close status of cookie notice."},{"name":"user_allowed_save_cookie","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Stores built-in cookie consent per website."},{"name":"guest-view","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores the Order ID that guest shoppers use to retrieve their order status. Guest orders view. Used in \u201cOrders and Returns\u201d widgets."},{"name":"login_redirect","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Preserves the destination page the customer was loading before being directed to log in."},{"name":"mage-messages","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Tracks error messages and other notifications that are shown to the user, such as the cookie consent message, and various error messages. The message is deleted from the cookie after it is shown to the shopper."},{"name":"section_data_ids","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores customer-specific information related to shopper-initiated actions such as display wish list, checkout information, etc."},{"name":"store","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Tracks the specific store view \/ locale selected by the shopper."},{"name":"amz_auth_err","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Used if Enable Login with Amazon is enabled. Value 1 indicates an authorization error."},{"name":"amz_auth_logout","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used if Enable Login with Amazon is enabled. Value 1 indicates that the user should be logged out."},{"name":"mage-cache-sessid","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"The value of this cookie triggers the cleanup of local cache storage. When the cookie is removed by the backend application, the Admin cleans up local storage, and sets the cookie value to true."},{"name":"mage-cache-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Local storage of visitor-specific content that enables ecommerce functions."},{"name":"stf","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Records the time messages are sent by the SendFriend (Email a Friend) module."},{"name":"recently_viewed_product","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently viewed products for easy navigation."},{"name":"recently_viewed_product_previous","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently previously viewed products for easy navigation."},{"name":"mage-translation-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores translated content when requested by the shopper. Used when Translation Strategy is configured as \"Dictionary (Translation on Storefront side)\"."},{"name":"mage-translation-file-version","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Tracks the version of translations in local storage. Used when Translation Strategy is configured as Dictionary (Translation on Storefront side)."},{"name":"product_data_storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores configuration for product data related to Recently Viewed \/ Compared Products."},{"name":"recently_compared_product","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently compared products."},{"name":"recently_compared_product_previous","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of previously compared products for easy navigation."},{"name":"mage-cache-storage-section-invalidation","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Forces local storage of specific content sections that should be invalidated."},{"name":"mg_dnt","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Used to restrict Adobe Commerce data collection functionality if the user has opted out of tracking."},{"name":"last_visited_store","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"last_visited_store"},{"name":"pr-gpc-notification-shown","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores whether the GPC opt-out notification was shown to and closed by the user."},{"name":"pr-gpc-signal-handled","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores whether the Global Privacy Control (GPC) signal has been detected on the front end and the associated handling logic has been executed for the current user."},{"name":"pr-cookie-consent","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":365,"durationLabel":"less than an hour","description":"Keeps your cookie consent."},{"name":"pr-cookie-consent-id","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":365,"durationLabel":"less than an hour","description":"Keeps your cookie consent id."},{"name":"form_key","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"A security measure that appends a random string to all form submissions to protect the data from Cross-Site Request Forgery (CSRF)."},{"name":"X-Magento-Vary","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Configuration setting that improves performance when using Varnish static content caching."},{"name":"private_content_version","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Appends a random, unique number and time to pages with customer content to prevent them from being cached on the server."},{"name":"persistent_shopping_cart","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Stores the key (ID) of persistent cart to make it possible to restore the cart for an anonymous shopper."},{"name":"mage-banners-cache-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Stores banner content locally to improve performance."}]}],"show_details":false},{"key":"preferences","is_essential":false,"is_pre_checked":false,"name":"Preferences cookies","description":"Preferences cookies are also known as \u201cfunctionality cookies\u201d. These cookies allow a website to remember choices you have made in the past, like what language you prefer, your favourite search f
1404ilters, or what your user name and password are so you can automatically log in.","sort_order":0,"details":[],"show_details":false},{"key":"statistics","is_essential":false,"is_pre_checked":false,"name":"Statistics cookies","description":"Statistics cookies are also known as \u201cperformance cookies\u201d. These cookies collect information about how you use a website, like which pages you visited and which links you clicked on. None of this information can be used to identify you. It is all aggregated and, therefore, anonymized. Their sole purpose is to improve website functions. This includes cookies from third-party analytics services, such as visitor analytics, heatmaps and social media analytics.","sort_order":0,"details":[{"name":"First party","is_third_party":false,"cookies":[{"name":"_ga","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":63072000,"durationLabel":"730 days","description":"Used to distinguish users."},{"name":"_ga_*","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":63072000,"durationLabel":"730 days","description":"Used to persist session state."},{"name":"_gid","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used to distinguish users."},{"name":"_gat","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used to throttle request rate."},{"name":"_dc_gtm_*","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":60,"durationLabel":"less than an hour","description":"Used to throttle request rate."},{"name":"_clck","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Persists the Microsoft Clarity User ID and preferences, unique to that site is attributed to the same user ID."},{"name":"_clsk","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Connects multiple page views by a user into a single Microsoft Clarity session recording."},{"name":"add_to_cart","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Used by Google Tag Manager. Captures the product SKU, name, price and quantity removed from the cart, and makes the information available for future integration by third-party scripts."},{"name":"remove_from_cart","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Used by Google Tag Manager. Captures the product SKU, name, price and quantity added to the cart, and makes the information available for future integration by third-party scripts."}]},{"name":"","is_third_party":true,"cookies":[{"name":"CLID","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Identifies the first time Microsoft Clarity saw the current user on any site using the service"},{"name":"MR","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Used by Microsoft to track users for analytics purposes."},{"name":"MUID","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Identifies unique web browsers visiting Microsoft sites. These cookies are used for advertising, site analytics, and other operational purposes."}]}],"show_details":false},{"key":"marketing","is_essential":false,"is_pre_checked":false,"name":"Marketing cookies","description":"The
1404se cookies track your online activity to help advertisers deliver more relevant advertising or to limit how many times you see an ad. These cookies can share that information with other organizations or advertisers. These are persistent cookies and almost always of third-party provenance.","sort_order":0,"details":[],"show_details":false}],"displayStyle":"left_bar","canShowCookieDetails":true,"overview":{"title":"Privacy and Cookies","text":"<p>A cookie is information stored on your computer by a website you visit. Cookies provide a way for the site to recognize you and keep track of your preferences. Ecommerce websites place cookies on visitors' browsers to retain login credentials, identify customers, and provide a customized shopping experience.<\/p>\r\n<p>We respect the privacy of individuals and recognize the importance of personal data entrusted to us by our customers. Any website visitor may choose not to allow some types of cookies. Click on cookie category headings and cookie details to find out more and change our default settings. However, blocking some types of cookies may impact your website experience and prevent you from using all the features on our store.<\/p>"},"consentPreferences":{"header":"Manage Consent Preferences","essential_category_status":"Always Active","cookie_details_link":"Cookie Details"},"design":{"textColor":"inherit","backgroundColor":"inherit"},"acceptButtonConfig":{"label":"Accept All","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"declineButtonConfig":{"enabled":true,"label":"Decline All","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"confirmButtonConfig":{"label":"Confirm My Choices","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"cookieDetailsIsOpen":false}, 1405 show: function () {}, 1406 hide: function () {}, 1407 syncCategoriesDataWithConsent: function () { 1408 this.config.categories = this.config.categories.map(category => { 1409 category.is_allowed = prCookieConsentApi.isAllowedCategory(category.key); 1410 return category; 1411 }); 1412 }, 1413 allowAll: function () { 1414 prCookieConsentApi.consent.allowAllCategories(); 1415 this.syncCategoriesDataWithConsent(); 1416 window.prCookieSettingBar.hide(); 1417 }, 1418 declineAll: function () { 1419 prCookieConsentApi.consent.declineAll(); 1420 this.syncCategoriesDataWithConsent(); 1421 window.prCookieSettingBar.hide(); 1422 }, 1423 confirm: function () { 1424 var allowedCategories = [...prCookieConsentApi.config.essentialCategoryKeys]; 1425 this.config.categories.forEach((category) => { 1426 if (allowedCategories.includes(category.key) || !category.is_allowed) { 1427 return; 1428 } 1429 1430 allowedCategories.push(category.key); 1431 }); 1432 1433 prCookieConsentApi.consent.set(allowedCategories); 1434 this.syncCategoriesDataWithConsent(); 1435 window.prCookieSettingBar.hide(); 1436 } 1437 }; 1438</script>
1438 1439 1440<div x-data="{...hyva.modal(), init() { 1441 window.prCookieSettingBar.show = this.show.bind(this, 'pr-cookie-setting-bar', event); 1442 window.prCookieSettingBar.hide = this.hide.bind(this); 1443 }}" x-init="init()"> 1444 <div x-cloak x-bind="overlay('pr-cookie-setting-bar')" 1445 x-spread="overlay('pr-cookie-setting-bar')" 1446 class="fixed inset-0 bg-black bg-opacity-50 z-50 pr-cookie-setting-bar-overlay"> 1447 <div class="fixed flex justify-center items-center text-left z-40 pr-cookie-setting-bar-container inset-0"> 1448 <div x-ref="pr-cookie-setting-bar" role="dialog" aria-modal="true" 1449 class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain pr-cookie-setting-bar rounded-none px-0 py-0 fixed top-0 bottom-0 left-0 w-[400px] max-w-full"> 1450 <div class="pr-cookie-setting-bar-wrap text-[13px] px-4 pt-2 pb-4 relative" 1451 id="pr-cookie-setting-bar" 1452 :class="config.cookieDetailsIsOpen && 'h-screen overflow-hidden'" 1453 x-data="prCookieSettingBar" 1454 x-init="syncCategoriesDataWithConsent()" 1455> 1456 <button @click="hide" class="ml-auto -mt-2 -mr-4 block top-2 right-2 p-2"> 1457 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 1458 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 1459<title>x</title></svg> 1460 </button> 1461 <h3 class="font-bold text-xl leading-normal mb-3" x-text="config.overview.title"></h3> 1462 <div class="pr-cookie-description" x-html="config.overview.text"></div> 1463 <div class="pr-actions-buttons flex flex-wrap items-center justify-center py-4 mb-6 border-container border-b"> 1464 <button type="button" class="action btn btn-primary m-2" x-text="config.acceptButtonConfig.label" @click="allowAll();"></button> 1465 <button type="button" class="action btn btn-secondary m-2" x-text="config.declineButtonConfig.label" @click="declineAll()"></button> 1466 </div> 1467 <h3 class="pr-cookie-manage-title font-bold text-xl mb-0" x-text="config.consentPreferences.header"></h3> 1468 <ul class="message-system-list mt-8"> 1469 <template x-for="category in config.categories"> 1470 <li class="mt-0 mb-4"> 1471 <div class="accordion-title"> 1472 <div class="pr-cookie-option flex justify-between pb-2 mt-8 text-sm"> 1473 <strong class="option-label mr-4" x-text="category.name"></strong> 1474 <template x-if="category.is_essential"> 1475 <strong class="option-status whitespace-nowrap text-green-700" x-text="config.consentPreferences.essential_category_status"></strong> 1476 </template> 1477 <template x-if="! category.is_essential"> 1478 <div class="pr-cookie-switch"> 1479 <label class="switch-label" aria-label="Switch"> 1480 <input type="checkbox" 1481 class="sr-only" 1482 x-model="category.is_allowed" 1483 x-bind:name="category.key" 1484 > 1485 <span class="switch-area flex items-center w-11 h-6 rounded-3xl border border-container cursor-pointer transition-all" 1486 :class="category.is_allowed ? 'bg-green-500 border-green-700' : 'bg-gray-200 border-gray-300'" 1487 > 1488 <span class="switch-nob block w-5 h-5 rounded-full transition-all" 1489 :class="category.is_allowed ? 'bg-white ml-auto mr-[2px]' : 'bg-gray-500 mr-auto ml-[2px]'" 1490 ></span> 1491 </span> 1492 </label> 1493 </div> 1494 </template> 1495 </div> 1496 <div class="first-details" x-data="{ isOpen: false }"> 1497 <div class="pr-cookie-category-description text-gray-700 mb-4" x-text="category.description"></div> 1498 <template x-if="config.canShowCookieDetails"> 1499 <div> 1500 <div class="lvl1">
1501 <span class="pr-cookie-details text-blue-700 cursor-pointer underline hover:no-underline" 1502 x-on:click="isOpen = true; config.cookieDetailsIsOpen = isOpen" 1503 x-text="config.consentPreferences.cookie_details_link" 1504 x-bind:data-category-key="category.key"></span> 1505 </div> 1506 <div class="second-details absolute bg-white px-4 pt-2 pb-4 inset-0 h-full" 1507 x-show="isOpen" 1508 > 1509 <div class="pr-cookie-view flex flex-col h-full"> 1510 <template x-if="isOpen"> 1511 <button @click="hide" class="ml-auto -mt-2 -mr-2 block top-2 right-2 p-2"> 1512 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 1513 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 1514<title>x</title></svg> 1515 </button> 1516 </template> 1517 <div class="flex justify-between items-center text-sm mb-2"> 1518 <button class="pr-cookie-details-hide px-3 -ml-3 mr-3 flex items-center cursor-pointer hover:text-blue-800" 1519 x-show="isOpen" 1520 x-on:click="isOpen = false; config.cookieDetailsIsOpen = isOpen"> 1521 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-3 h-3 mr-2 flex-shrink-0" width="24" height="24" role="img"> 1522 <path fill-rule="evenodd" d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z" clip-rule="evenodd"/> 1523<title>arrow-left</title></svg> 1524 Back 1525 </button> 1526 <strong class="option-label" x-text="category.name"></strong> 1527 </div> 1528 <div class="pr-cookies-list h-full px-4 -mx-4 mb-3 overflow-auto"> 1529 <h3 class="pr-cookie-view-title mb-2 font-bold text-base">Cookies List</h3> 1530 <template x-if="category.details.length > 0"> 1531 <template x-for="group in category.details"> 1532 <div class="pr-cookie-item text-xs py-2 border-container border-b"> 1533 <h4 class="pr-cookie-details-title font-semibold mb-1" x-text="group.name"></h4> 1534 <details class="pr-cookie-details-info"> 1535 <summary class="cursor-pointer text-blue-600 hover:text-blue-500"> 1536 <h5 class="inline-block font-semibold"> 1537 View Cookies 1538 </h5> 1539 </summary> 1540 <div class="pr-cookie-group-wrp"> 1541 <template x-for="cookie in group.cookies"> 1542 <div class="pr-cookie-group mt-1 mb-4 p-4 bg-gray-100 rounded"> 1543 <div class="pr-cookie-group-row mb-2 flex"> 1544 <sp
1544an class="w-24 flex-shrink-0 mr-4">Name</span> 1545 <span class="truncate" x-text="cookie.name"></span> 1546 </div> 1547 <div class="pr-cookie-group-row mb-2 flex"> 1548 <span class="w-24 flex-shrink-0 mr-4">Domain</span> 1549 <span class="truncate" x-text="cookie.domainLabel"></span> 1550 </div> 1551 <div class="pr-cookie-group-row mb-2 flex"> 1552 <span class="w-24 flex-shrink-0 mr-4">Duration</span> 1553 <span x-text="cookie.durationLabel"></span> 1554 </div> 1555 <div class="pr-cookie-group-row mb-2 flex"> 1556 <span class="w-24 flex-shrink-0 mr-4">Type</span> 1557 <span x-text="cookie.typeLabel"></span> 1558 </div> 1559 <div class="pr-cookie-group-row mb-2 flex"> 1560 <span class="w-24 flex-shrink-0 mr-4">Category</span> 1561 <span x-text="cookie.category_key"></span> 1562 </div> 1563 <div class="pr-cookie-group-row flex"> 1564 <span class="w-24 flex-shrink-0 mr-4">Description</span> 1565 <span x-text="cookie.description"></span> 1566 </div> 1567 </div> 1568 </template> 1569 </div> 1570 </details> 1571 </div> 1572 </template> 1573 </template> 1574 <template x-if="category.details.length === 0"> 1575 <p>There are no cookies.</p> 1576 </template> 1577 </div> 1578 1579 <template x-if="isOpen"> 1580 <div> 1581 <button class="action btn btn-primary" 1582 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1583 x-text="config.confirmButtonConfig.label" 1584 @click="prCookieSettingBar.confirm()"> 1585 </button> 1586 </div> 1587 </template> 1588 </div> 1589 </div> 1590 </div> 1591 </template> 1592 </div> 1593 </div> 1594 </li> 1595 </template> 1596 <button class="action btn btn-primary" 1597 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1598 x-text="config.confirmButtonConfig.label" 1599 @click="prCookieSettingBar.confirm()"> 1600 </button> 1601 </ul> 1602</div> 1603 </div> 1604 </div> 1605 </div> 1606</div>
1607<script type="text/javascript" nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 1608 (() => { 1609 const updateCookieConsentConfig = () => { 1610 const categoryMap = {}; 1611 Object.entries(prCookieConsentApi.config.cookieToCategoryMapping).forEach(([cookieName, categoryName]) => { 1612 if (! categoryMap[categoryName]) { 1613 categoryMap[categoryName] = []; 1614 } 1615 categoryMap[categoryName].push(cookieName); 1616 }); 1617 1618 Object.entries(categoryMap).forEach(([category, cookies]) => { 1619 const existingList = window.cookie_consent_config[category] || []; 1620 window.cookie_consent_config[category] = Array.from(new Set(existingList.concat(cookies))); 1621 }); 1622 1623 let cookieCategories = ["necessary","preferences","statistics","marketing"]; 1624 window.cookie_consent_groups = {}; 1625 cookieCategories.forEach((category) => { 1626 window.cookie_consent_groups[category] = prCookieConsentApi.isAllowedCategory(category); 1627 }); 1628 } 1629 1630 const updateConsent = () => { 1631 window.cookie_consent_groups = window.cookie_consent_groups || {} 1632 Object.keys(window.cookie_consent_groups).forEach(categoryKey => { 1633 window.cookie_consent_groups[categoryKey] = prCookieConsentApi.isAllowedCategory(categoryKey); 1634 }); 1635 window.dispatchEvent(new CustomEvent('user-allowed-save-cookie')); 1636 } 1637 1638 document.addEventListener('pr-cookie-consent-api:configured', () => { 1639 updateCookieConsentConfig(); 1640 prCookieConsentApi.consent.addCallback(updateConsent); 1641 }); 1642 1643 if (prCookieConsentApi.isConfigured) { 1644 updateCookieConsentConfig(); 1645 prCookieConsentApi.consent.addCallback(updateConsent); 1646 } 1647 })(); 1648</script>
1648 1649<div id="prgdpr-consentpopups-container" 1650 x-data="prDataPrivacyConsentPopupsLoadInit()" 1651 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 1652></div>
1653<script> 1654 function prDataPrivacyConsentPopupsLoadInit() { 1655 return { 1656 receiveCustomerData: function (data) { 1657 if (! data.hasOwnProperty('data_privacy')) { 1658 return; 1659 } 1660 1661 if (data.data_privacy.countNotifies !== 0 || data.data_privacy.countPopups !== 0) { 1662 this.loadPopups(); 1663 } 1664 }, 1665 loadPopups: function () { 1666 fetch('https://www.flooringinc.com/data-privacy/consentpopups/load/') 1667 .then((response) => { 1668 if (! response.ok) { 1669 throw new Error('Network response was not ok'); 1670 } 1671 1672 return response.json(); 1673 }) 1674 .then(data => this.$el.innerHTML = data.html) 1675 .catch(error => console.warn(error)); 1676 } 1677 } 1678 } 1679 1680 function prDataPrivacyConsentPopupsInit(popups, notifies) { 1681 return { 1682 popups: popups, 1683 notifies: notifies, 1684 data: null, 1685 isShowModal: true, 1686 init: function () { 1687 for (popup of this.popups) { 1688 popup.isShowModal = true; 1689 } 1690 1691 for (notify of this.notifies) { 1692 notify.isShowModal = true; 1693 } 1694 }, 1695 closeModal(popup) { 1696 popup.isShowModal = false; 1697 }, 1698 sendRequest: function (url, consent) { 1699 if (consent.cms_page) { 1700 consent.checkboxLabel = 'I agree'; 1701 } 1702 1703 fetch(url, { 1704 method: 'POST', 1705 headers: {'X-Requested-With': 'XMLHttpRequest'}, 1706 body: JSON.stringify({'consent': consent}) 1707 }); 1708 }, 1709 print: function (popup) { 1710 let printWindow = window.open('', 'Print', 'height=600,width=800'); 1711 printWindow.document.write( 1712 `<html><head><title>${popup.cms_page.title}</title></head><body>${popup.cms_page.content}</body></html` 1713 ); 1714 printWindow.document.close(); 1715 printWindow.focus(); 1716 printWindow.print(); 1717 printWindow.onafterprint = function () { 1718 printWindow.close(); 1719 }; 1720 1721 return true; 1722 } 1723 } 1724 } 1725</script>
1725 1726
1727<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 1728 (() => { 1729 const updateConsents = () => { 1730 if (! Array.isArray(prCookieConsentApi.consent.get()) || prCookieConsentApi.consent.get().length > 0) { 1731 prCookieConsentApi.consent.declineAll(); 1732 } 1733 } 1734 1735 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateConsents); 1736 })(); 1737</script>
1737 1738<input name="form_key" type="hidden" value="z9YLjMYHjzlsusrC" /> 1739
1739<script> 1740 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1741 </script>
1741 1742<div class="page-wrapper"><div class="container hidden"> 1743 <div class="pt-2 pb-2 flex flex-row items-end justify-end"> 1744 <div class="pl-3"> 1745 <a href="https://www.flooringinc.com/knowledge-base/" class="hover:underline"> 1746 FAQ</a> 1747 </div> 1748 </div> 1749</div> 1750<header class="page-header"><div class="panel wrapper"><div class="header_top flex justify-between items-center" x-data="notificationAjaxCall()" x-init="initNotificationFunc()"> 1751 <div class="header_left_notification text-size14 font-normal" x-html="left_notification_html"></div> 1752 <div class="header_middle_notification flex"> 1753 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="flex items-center"><a href="#" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="29" height="20" viewBox="0 0 29 20" fill="none"> 1754<path d="M18.125 0V9.09091H0V0H18.125ZM19.9375 0H29V9.09091H19.9375V0ZM10.875 20V10.9091H29V20H10.875ZM0 20V10.9091H9.0625V20H0Z" fill="#15324C"/> 1755</svg> 500+ Million Sqft Covered</a></div> 1756 1757<div class="flex items-center"><a href="https://www.flooringinc.com/reviews" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 1758<path d="M8.99984 0.666504L11.5748 5.88317L17.3332 6.72484L13.1665 10.7832L14.1498 16.5165L8.99984 13.8082L3.84984 16.5165L4.83317 10.7832L0.666504 6.72484L6.42484 5.88317L8.99984 0.666504Z" fill="#15324C" stroke="#15324C" stroke-linecap="round" stroke-linejoin="round"/> 1759</svg> 125K+ Verified Reviews</a></div> 1760 1761<div class="flex items-center"><a href="/price-match" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> 1762<path d="M17.1582 11.1748L11.1832 17.1498C11.0284 17.3048 10.8446 17.4277 10.6422 17.5116C10.4399 17.5955 10.223 17.6386 10.004 17.6386C9.78498 17.6386 9.5681 17.5955 9.36577 17.5116C9.16344 17.4277 8.97963 17.3048 8.82484 17.1498L1.6665 9.99984V1.6665H9.99984L17.1582 8.82484C17.4686 9.13711 17.6428 9.55953 17.6428 9.99984C17.6428 10.4401 17.4686 10.8626 17.1582 11.1748Z" fill="#15324C"/> 1763<path d="M5.83317 5.83317H5.8415M17.1582 11.1748L11.1832 17.1498C11.0284 17.3048 10.8446 17.4277 10.6422 17.5116C10.4399 17.5955 10.223 17.6386 10.004 17.6386C9.78498 17.6386 9.5681 17.5955 9.36577 17.5116C9.16344 17.4277 8.97963 17.3048 8.82484 17.1498L1.6665 9.99984V1.6665H9.99984L17.1582 8.82484C17.4686 9.13711 17.6428 9.55953 17.6428 9.99984C17.6428 10.4401 17.4686 10.8626 17.1582 11.1748Z" stroke="#15324C" stroke-linecap="round" stroke-linejoin="round"/> 1764<circle cx="5" cy="5" r="1" fill="white"/> 1765</svg> Price Match Guarantee</a></div> 1766 1767<div class="flex items-center"><a href="/moneybackguarantee" class="flex items-center gap-2"> 1768<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18" fill="none"> 1769<path d="M7 0.75V18.4499M11.1667 3.75H4.91667C4.14312 3.75 3.40125 4.02656 2.85427 4.51884C2.30729 5.01113 2 5.67881 2 6.375C2 7.07119 2.30729 7.73887 2.85427 8.23116C3.40125 8.72344 4.14312 9 4.91667 9H9.08333C9.85688 9 10.5987 9.27656 11.1457 9.76885C11.6927 10.2611 12 10.9288 12 11.625C12 12.3212 11.6927 12.9889 11.1457 13.4812C10.5987 13.9734 9.85688 14.25 9.08333 14.25H2" stroke="#15324C" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/> 1770</svg> Money Back Guarantee</a></div> 1771</div> </div> 1772 <div class="header_right_notifications font-normal"> 1773 <style>#html-body [data-pb-style=GSTQRKU]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="GSTQRKU"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 1774<li><a href="/contact">Contact Us</a></li> 1775<li><a href="/sales/guest/form">Track Order</a></li> 1776</ul></div></div></div> </div> 1777</div> 1778
1779<script> 1780 function notificationAjaxCall() { 1781 return { 1782 availability_notification: '', 1783 left_notification_html: '', 1784 right_notification_html: '', 1785 initNotificationFunc: function () { 1786 fetch(BASE_URL+'notifications/index/show', { 1787 method: "GET", 1788 headers: { 'Content-Type': 'application/json' }, 1789 }) 1790 .then(response => { 1791 if (! response.ok) console.warn('GET request failed'); 1792 return response.json(); 1793 }) 1794 .then(data => { 1795 if (data) { 1796 this.availability_notification = data.availability_notification; 1797 this.left_notification_html = data.left_notification_html; 1798 this.right_notification_html = data.right_notification_html; 1799 } 1800 }); 1801 } 1802 } 1803 } 1804</script>
1804</div><div class="header content">
1804<script> 1805 function initQuoteCartDrawer() { 1806 return { 1807 open: false, 1808 cartData: {}, 1809 getQuoteCartData(data) { 1810 if (data.quotecart) { 1811 this.cartData = data.quotecart 1812 this.setCartItems(); 1813 } 1814 }, 1815 cartItems: [], 1816 setCartItems() { 1817 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 1818 }, 1819 deleteItemFromCart(itemId) { 1820 var formKey = document.querySelector('input[name=form_key]').value; 1821 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 1822 "headers": { 1823 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 1824 }, 1825 "body": "form_key="+ formKey + "&item_id="+itemId, 1826 "method": "POST", 1827 "mode": "cors", 1828 "credentials": "include" 1829 }).then(function (response) { 1830 if (response.redirected) { 1831 window.location.href = response.url; 1832 } else if (response.ok) { 1833 return response.json(); 1834 } else { 1835 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1836 [{ 1837 type: "warning", 1838 text: "Could not remove item from quote." 1839 }], 5000 1840 ); 1841 } 1842 }).then(function (response) { 1843 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1844 [{ 1845 type: response.success ? "success" : "error", 1846 text: response.success 1847 ? "You removed the item." 1848 : response.error_message 1849 }], 5000 1850 ); 1851 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 1852 window.dispatchEvent(reloadCustomerDataEvent); 1853 }); 1854 } 1855 } 1856 } 1857</script>
1857 1858<section id="cart-quote-drawer" 1859 x-data="initQuoteCartDrawer()" 1860 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 1861 @toggle-quote-cart.window="open=true;" 1862 @keydown.window.escape="open=false" 1863> 1864 <template x-if="cartData && cartData.summary_count"> 1865 <div role="dialog" 1866 aria-labelledby="cart-drawer-title" 1867 aria-modal="true" 1868 @click.away="open = false" 1869 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 1870 <div class="backdrop" 1871 x-show="open" 1872 x-transition:enter="ease-in-out duration-500" 1873 x-transition:enter-start="opacity-0" 1874 x-transition:enter-end="opacity-100" 1875 x-transition:leave="ease-in-out duration-500" 1876 x-transition:leave-start="opacity-100" 1877 x-transition:leave-end="opacity-0" 1878 @click="open = false" 1879 aria-label="Close panel"></div> 1880 <div class="relative w-screen max-w-md shadow-2xl" 1881 x-show="open" 1882 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1883 x-transition:enter-start="translate-x-full" 1884 x-transition:enter-end="translate-x-0" 1885 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1886 x-transition:leave-start="translate-x-0" 1887 x-transition:leave-end="translate-x-full" 1888 > 1889 <div 1890 x-show="open" 1891 x-transition:enter="ease-in-out duration-500" 1892 x-transition:enter-start="opacity-0" 1893 x-transition:enter-end="opacity-100" 1894 x-transition:leave="ease-in-out duration-500" 1895 x-transition:leave-start="opacity-100" 1896 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 1897 <button @click="open = false" aria-label="Close panel" 1898 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 1899 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 1900 <path stroke-linecap="round" stroke-linejoin="round" 1901 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 1902 </path> 1903 </svg> 1904 </button> 1905 </div> 1906 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 1907 <header class="px-4 sm:px-6"> 1908 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 1909 My Quote Cart </div> 1910 </header> 1911 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 1912 sm:gap-8 sm:px-6 border-container"> 1913 <template x-for="item in cartItems"> 1914 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 1915 ease-in-out rounded-lg hover:bg-gray-100"> 1916 <a :href="item.product_url" class="w-1/4"> 1917 <img 1918 :src="item.product_image.src" 1919 :width="item.product_image.width" 1920 :height="item.product_image.height" 1921 loading="lazy" 1922 /> 1923 </a> 1924 <div class="w-3/4 relative"> 1925 <div> 1926 <div class="text-xl"> 1927 <a :href="item.product_url" class="hover:underline"> 1928 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 1929 </a> 1930 </div> 1931 <div class="text-sm"><span x-html="item.product_sku"></div> 1932 </div> 1933 <template x-for="option in item.options"> 1934 <div class="pt-2"> 1935 <p class="font-semibold" x-text="option.label + ':'"></p> 1936 <p class="text-secondary" x-html="option.value"></p> 1937 </div> 1938 </template> 1939 <div><span x-html="item.product_price"></span></div> 1940 <div class="pt-4"> 1941 <a :href="item.configure_url" 1942 x-show="item.product_type !== 'grouped'" 1943 class="inline-flex p-2 mr-2 btn btn-primary"> 1944 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1945 size="16" class="w-5 h-5"> 1946 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1947 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 1948 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 1949 </path> 1950 </svg> 1951 </a> 1952 <button class="inline-flex p-2 btn btn-primary" 1953 @click="deleteItemFromCart(item.item_id)" 1954 > 1955 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1956 size="16" class="w-5 h-5"> 1957 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1958 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 1959 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 1960 0 00-1 1v3M4 7h16"> 1961 </path> 1962 </svg> 1963 </button> 1964 </div> 1965 </div> 1966 </div> 1967 </template> 1968 </div> 1969 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 1970 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 1971 hover:bg-gray-100">
1972 <span>Cart Subtotal:</span> 1973 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 1974 </div> 1975 <div class="w-full"> 1976 <a href="https://www.flooringinc.com/amasty_quote/cart/" 1977 class="btn btn-secondary justify-center"> 1978 View and Edit Cart </a> 1979 </div> 1980 </div> 1981 </div> 1982 </div> 1983 </div> 1984 </template> 1985</section> 1986<div class="widget block block-static-block"> 1987 <style>#html-body [data-pb-style=J86NFKS]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="J86NFKS"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div x-data="globalNotificationAjaxCall()" x-init="initGlobalNotificationFunc()"> 1988 <div class="notification4 pt-2 pb-2 text-center text-size13 font-normal text-white bg-custom-green" style="display:none" x-html="global_notification_text"></div> 1989</div> 1990
1991<script> 1992function globalNotificationAjaxCall() { 1993 return { 1994 global_notification_text: '', 1995 initGlobalNotificationFunc: function () { 1996 fetch(BASE_URL+'notifications/index/GlobalNotification?full_action_name=catalog_product_compare_index&cat_prod_id=', { 1997 method: "GET", 1998 headers: { 'Content-Type': 'application/json' }, 1999 }) 2000 .then(response => { 2001 if (! response.ok) console.warn('GET request failed'); 2002 return response.json(); 2003 }) 2004 .then(data => { 2005 if (data) { 2006 if (data.notification_text !='') { 2007 document.querySelector('.notification4.bg-custom-green').style.display = 'block'; 2008 this.global_notification_text = data.notification_text; 2009 } 2010 } 2011 }); 2012 } 2013 } 2014} 2015</script>
2015</div></div></div> 2016</div>
2016<script> 2017 function initHeader () { 2018 return { 2019 searchOpen: false, 2020 cart: {}, 2021 quoteCart: {}, 2022 activeCartType: 'cart', 2023 getData(data) { 2024 if (data.cart) { 2025 this.cart = data.cart; 2026 // this.cart.summary_count=this.cart.items.length; 2027 } 2028 if (data.quotecart) { 2029 this.quoteCart = data.quotecart; 2030 } 2031 if (data.active_cart_icon) { 2032 this.activeCartType = data.active_cart_icon; 2033 } 2034 } 2035 } 2036 } 2037 function initCompareHeader() { 2038 return { 2039 compareProducts: null, 2040 itemCount: 0, 2041 receiveCompareData(data) { 2042 if (data['compare-products']) { 2043 this.compareProducts = data['compare-products']; 2044 this.itemCount = this.compareProducts.count; 2045 } 2046 } 2047 } 2048 } 2049</script>
2049 2050 2051<div id="header" 2052 class="relative z-30 w-full bg-white" 2053 x-data="initHeader()" 2054 @keydown.window.escape="searchOpen = false;" 2055 @private-content-loaded.window="getData(event.detail.data)" 2056> 2057 <div class="content flex flex-wrap items-center justify-between w-full pt-4 pb-4 mx-auto mt-0"> 2058 <!--Logo--> 2059 <div class="logo relative z-20"> 2060 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 2061 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 2062 no-underline hover:no-underline font-title" 2063 href="https://www.flooringinc.com/" 2064 title="Flooring Inc. The Flooring Superstore" 2065 aria-label="store logo"> 2066 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/logo/stores/1/logo.webp"><img src="https://www.flooringinc.com/media/logo/stores/1/logo.jpg" title="Flooring Inc. The Flooring Superstore" alt="Flooring Inc. The Flooring Superstore" fetchpriority="high" width="266" height="31" /></picture> 2067 </a> 2068</div> 2069 </div> 2070 2071 <!--Main Navigation--> 2072 <div x-data="initMenuMobile_6ac15155197cd()" 2073 class="z-50 order-2 sm:order-1 lg:order-2 navigation xl:hidden" 2074> 2075 <!-- mobile --> 2076 <div @load.window="setActiveMenu($root)" 2077 class="mobile-menu bg-lightblue" 2078 :class="{'h-screen fixed top-0 left-0 w-full' : open}" 2079 @toggle-mobile-menu.window="open = !open" 2080 @keydown.window.escape="open=false" 2081 > 2082 <div class="flex items-baseline justify-between ml-0 menu-icon"> 2083 <div class="flex justify-end w-full"> 2084 <a @click="$dispatch('toggle-mobile-menu')" 2085 class="flex items-center justify-center cursor-pointer" 2086 :class="{ 'ml-auto': open }"> 2087 <span class="close-icon px-5 py-2 text-size12 font-normal text-custom-blue rounded-md absolute" :class="{ 'hidden' : !open, 'block': open }">CLOSE</span> 2088 <picture class="menu_icon -mt-0 mr-1"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-icon.webp"><img class="menu_icon -mt-0 mr-1" :class="{ 'block' : !open, 'hidden': open }" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-icon.png" width="25" height="17" alt="menu-icon"></picture> 2089 </a> 2090 </div> 2091 </div> 2092 <div class="menu-overlay hidden" :class="{ 'hidden' : !open }" @click="$dispatch('toggle-mobile-menu')"></div> 2093 <nav 2094 class="hidden w-full h-full duration-150 ease-in-out transform transition-display pt-5 pr-5 pl-12" 2095 :class="{ 'hidden' : !open }" 2096 > 2097 <span class="menu-label text-size28 font-medium text-black pt-1 pb-4" :class="{ 'hidden' : !open, 'block': open }">Menu</span> 2098 <div class="nav-in overflow-y-auto overflow-x-hidden h-5/6"> 2099 <div class="level-0"> 2100 <span class="flex items-center transition-transform duration-150 ease-in-out transform mb-3"> 2101 <a class="flex items-center w-full cursor-pointer level-0 text-size24 font-medium text-black no-underline" 2102 @click="mobilePanelActiveId = 2103 mobilePanelActiveId === 'category-node-1826' ? 2104 0 : 'category-node-1826'" 2105 title="Flooring By Category"> 2106 Flooring By Category </a> 2107 <a class="absolute right-0 cursor-pointer menu_arw1" :class="{ 2108 'active' : mobilePanelActiveId, 2109 '' : !mobilePanelActiveId 2110 }" 2111 @click="mobilePanelActiveId = 2112 mobilePanelActiveId === 'category-node-1826' ? 2113 0 : 'category-node-1826'" 2114 > 2115 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="17" height="10" alt="menu-arw"></picture> 2116 </a> 2117 </span> 2118 <div 2119 class="w-full h-full transition-transform duration-200 ease-in-out block transform" 2120 :class="{ 2121 'block' : mobilePanelActiveId !== 'category-node-1826', 2122 'hidden' : mobilePanelActiveId === 'category-node-1826', 2123 }" 2124 > 2125 2126 2127 2128 <li class="imgcat list-none relative" x-data="{ show: false }" > 2129 <a 2130 @click="show = !show" 2131 2132 title="Rubber Flooring" 2133 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2134 > 2135 <!-- <span class="w-6"></span> -->
2136 <span> 2137 Rubber Flooring </span> 2138 </a> 2139 2140 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2141 <ul class="z-10 w-full" x-show="show"> 2142 <li class="level-2"> 2143 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 2144 title="All Rubber Flooring" 2145 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2146 All Rubber Flooring</a> 2147 </li> 2148 <li class="level-2"> 2149 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 2150 title="Rubber Flooring Rolls" 2151 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2152 Rubber Flooring Rolls</a> 2153 </li> 2154 <li class="level-2"> 2155 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 2156 title="Rubber Floor Tiles" 2157 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2158 Rubber Floor Tiles</a> 2159 </li> 2160 <li class="level-2"> 2161 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 2162 title="Rubber Mats" 2163 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2164 Rubber Mats</a> 2165 </li> 2166 <li class="level-2"> 2167 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 2168 title="Playground Flooring" 2169 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2170 Playground Flooring</a> 2171 </li> 2172 <li class="level-2"> 2173 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 2174 title="Outdoor Rubber Flooring" 2175 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2176 Outdoor Rubber Flooring</a> 2177 </li> 2178 </ul> 2179 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/rubber-flooring.html" x-show="show">View All</a> 2180 2181 2182 2183 2184 <li class="imgcat list-none relative" x-data="{ show: false }" > 2185 <a 2186 @click="show = !show" 2187 2188 title="Garage Flooring" 2189 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2190 > 2191 <!-- <span class="w-6"></span> -->
2192 <span> 2193 Garage Flooring </span> 2194 </a> 2195 2196 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2197 <ul class="z-10 w-full" x-show="show"> 2198 <li class="level-2"> 2199 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 2200 title="All Garage Flooring" 2201 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2202 All Garage Flooring</a> 2203 </li> 2204 <li class="level-2"> 2205 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 2206 title="Garage Flooring Rolls" 2207 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2208 Garage Flooring Rolls</a> 2209 </li> 2210 <li class="level-2"> 2211 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 2212 title="Garage Floor Tiles" 2213 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2214 Garage Floor Tiles</a> 2215 </li> 2216 <li class="level-2"> 2217 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 2218 title="Garage Gym Flooring" 2219 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2220 Garage Gym Flooring</a> 2221 </li> 2222 <li class="level-2"> 2223 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 2224 title="Garage Floor Epoxy" 2225 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2226 Garage Floor Epoxy</a> 2227 </li> 2228 <li class="level-2"> 2229 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 2230 title="Trailer Flooring" 2231 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2232 Trailer Flooring</a> 2233 </li> 2234 </ul> 2235 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/garage-flooring.html" x-show="show">View All</a> 2236 2237 2238 2239 2240 <li class="imgcat list-none relative" x-data="{ show: false }" > 2241 <a 2242 @click="show = !show" 2243 2244 title="Dance Flooring" 2245 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2246 > 2247 <!-- <span class="w-6"></span> -->
2248 <span> 2249 Dance Flooring </span> 2250 </a> 2251 2252 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2253 <ul class="z-10 w-full" x-show="show"> 2254 <li class="level-2"> 2255 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 2256 title="Marley Floor Rolls" 2257 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2258 Marley Floor Rolls</a> 2259 </li> 2260 <li class="level-2"> 2261 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 2262 title="Dance Floor Tiles" 2263 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2264 Dance Floor Tiles</a> 2265 </li> 2266 <li class="level-2"> 2267 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 2268 title="Portable Dance Floors & Kits" 2269 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2270 Portable Dance Floors & Kits</a> 2271 </li> 2272 <li class="level-2"> 2273 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 2274 title="Subflooring" 2275 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2276 Subflooring</a> 2277 </li> 2278 <li class="level-2"> 2279 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 2280 title="Adhesives, Cleaners & Accessories" 2281 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2282 Adhesives, Cleaners & Accessories</a> 2283 </li> 2284 <li class="level-2"> 2285 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 2286 title="All Dance Flooring" 2287 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2288 All Dance Flooring</a> 2289 </li> 2290 </ul> 2291 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/dance-flooring.html" x-show="show">View All</a> 2292 2293 2294 2295 2296 <li class="imgcat list-none relative" x-data="{ show: false }" > 2297 <a 2298 @click="show = !show" 2299 2300 title="Foam Flooring" 2301 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2302 > 2303 <!-- <span class="w-6"></span> -->
2304 <span> 2305 Foam Flooring </span> 2306 </a> 2307 2308 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2309 <ul class="z-10 w-full" x-show="show"> 2310 <li class="level-2"> 2311 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 2312 title="Foam Floor Tiles" 2313 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2314 Foam Floor Tiles</a> 2315 </li> 2316 <li class="level-2"> 2317 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 2318 title="Kids & Baby Play Mats" 2319 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2320 Kids & Baby Play Mats</a> 2321 </li> 2322 <li class="level-2"> 2323 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 2324 title="Gymnastics Mats " 2325 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2326 Gymnastics Mats </a> 2327 </li> 2328 <li class="level-2"> 2329 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 2330 title="Wrestling Mats" 2331 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2332 Wrestling Mats</a> 2333 </li> 2334 <li class="level-2"> 2335 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 2336 title="Martial Arts Mats " 2337 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2338 Martial Arts Mats </a> 2339 </li> 2340 <li class="level-2"> 2341 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 2342 title="Trade Show Flooring" 2343 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2344 Trade Show Flooring</a> 2345 </li> 2346 </ul> 2347 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/foam-flooring.html" x-show="show">View All</a> 2348 2349 2350 2351 2352 <li class="imgcat list-none relative" x-data="{ show: false }" > 2353 <a 2354 @click="show = !show" 2355 2356 title="Outdoor Flooring" 2357 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2358 > 2359 <!-- <span class="w-6"></span> -->
2360 <span> 2361 Outdoor Flooring </span> 2362 </a> 2363 2364 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2365 <ul class="z-10 w-full" x-show="show"> 2366 <li class="level-2"> 2367 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 2368 title="Playground Flooring" 2369 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2370 Playground Flooring</a> 2371 </li> 2372 <li class="level-2"> 2373 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 2374 title="Sports Flooring & Court Tiles" 2375 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2376 Sports Flooring & Court Tiles</a> 2377 </li> 2378 <li class="level-2"> 2379 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 2380 title="Turf & Artificial Grass" 2381 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2382 Turf & Artificial Grass</a> 2383 </li> 2384 <li class="level-2"> 2385 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 2386 title="Composite Decking" 2387 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2388 Composite Decking</a> 2389 </li> 2390 <li class="level-2"> 2391 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 2392 title="Rooftop Deck Flooring" 2393 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2394 Rooftop Deck Flooring</a> 2395 </li> 2396 <li class="level-2"> 2397 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 2398 title="Drainage Tile & Mats" 2399 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2400 Drainage Tile & Mats</a> 2401 </li> 2402 </ul> 2403 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/outdoor-flooring.html" x-show="show">View All</a> 2404 2405 2406 2407 2408 <li class="imgcat list-none relative" x-data="{ show: false }" > 2409 <a 2410 @click="show = !show" 2411 2412 title="Turf & Artificial Grass" 2413 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2414 > 2415 <!-- <span class="w-6"></span> -->
2416 <span> 2417 Turf & Artificial Grass </span> 2418 </a> 2419 2420 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2421 <ul class="z-10 w-full" x-show="show"> 2422 <li class="level-2"> 2423 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 2424 title="Sport & Gym Turf" 2425 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2426 Sport & Gym Turf</a> 2427 </li> 2428 <li class="level-2"> 2429 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 2430 title="Landscape Turf" 2431 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2432 Landscape Turf</a> 2433 </li> 2434 <li class="level-2"> 2435 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 2436 title="Pet Turf" 2437 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2438 Pet Turf</a> 2439 </li> 2440 <li class="level-2"> 2441 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 2442 title="Golf & Putting Green Turf" 2443 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2444 Golf & Putting Green Turf</a> 2445 </li> 2446 <li class="level-2"> 2447 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 2448 title="Turf Accessories" 2449 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2450 Turf Accessories</a> 2451 </li> 2452 <li class="level-2"> 2453 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 2454 title="All Turf & Artificial Grass" 2455 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2456 All Turf & Artificial Grass</a> 2457 </li> 2458 </ul> 2459 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/artificial-grass.html" x-show="show">View All</a> 2460 2461 2462 2463 2464 <li class="imgcat list-none relative" x-data="{ show: false }" > 2465 <a 2466 @click="show = !show" 2467 2468 title="Carpet Tiles & Rolls" 2469 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2470 > 2471 <!-- <span class="w-6"></span> -->
2472 <span> 2473 Carpet Tiles & Rolls </span> 2474 </a> 2475 2476 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2477 <ul class="z-10 w-full" x-show="show"> 2478 <li class="level-2"> 2479 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 2480 title="Carpet Tiles" 2481 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2482 Carpet Tiles</a> 2483 </li> 2484 <li class="level-2"> 2485 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 2486 title="Carpet Rolls" 2487 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2488 Carpet Rolls</a> 2489 </li> 2490 <li class="level-2"> 2491 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 2492 title="Home Theater Carpet" 2493 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2494 Home Theater Carpet</a> 2495 </li> 2496 <li class="level-2"> 2497 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 2498 title="Peel and Stick Carpet Tiles" 2499 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2500 Peel and Stick Carpet Tiles</a> 2501 </li> 2502 <li class="level-2"> 2503 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 2504 title="Outdoor Carpet" 2505 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2506 Outdoor Carpet</a> 2507 </li> 2508 <li class="level-2"> 2509 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 2510 title="Waterproof Carpet" 2511 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2512 Waterproof Carpet</a> 2513 </li> 2514 </ul> 2515 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/carpet.html" x-show="show">View All</a> 2516 2517 2518 2519 2520 <li class="imgcat list-none relative" x-data="{ show: false }" > 2521 <a 2522 @click="show = !show" 2523 2524 title="Vinyl Flooring" 2525 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2526 > 2527 <!-- <span class="w-6"></span> -->
2528 <span> 2529 Vinyl Flooring </span> 2530 </a> 2531 2532 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2533 <ul class="z-10 w-full" x-show="show"> 2534 <li class="level-2"> 2535 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 2536 title="Vinyl Sheet Flooring" 2537 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2538 Vinyl Sheet Flooring</a> 2539 </li> 2540 <li class="level-2"> 2541 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 2542 title="Vinyl Tiles & Planks" 2543 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2544 Vinyl Tiles & Planks</a> 2545 </li> 2546 <li class="level-2"> 2547 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 2548 title="Waterproof Vinyl Flooring" 2549 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2550 Waterproof Vinyl Flooring</a> 2551 </li> 2552 <li class="level-2"> 2553 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 2554 title="Rigid Core Vinyl Flooring" 2555 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2556 Rigid Core Vinyl Flooring</a> 2557 </li> 2558 <li class="level-2"> 2559 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 2560 title="Commercial Vinyl Flooring" 2561 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2562 Commercial Vinyl Flooring</a> 2563 </li> 2564 </ul> 2565 2566 2567 2568 2569 <li class="imgcat list-none relative" x-data="{ show: false }" > 2570 <a 2571 @click="show = !show" 2572 2573 title="Wood & Laminate Flooring" 2574 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2575 > 2576 <!-- <span class="w-6"></span> -->
2577 <span> 2578 Wood & Laminate Flooring </span> 2579 </a> 2580 2581 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2582 <ul class="z-10 w-full" x-show="show"> 2583 <li class="level-2"> 2584 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 2585 title="Waterproof Laminate Flooring" 2586 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2587 Waterproof Laminate Flooring</a> 2588 </li> 2589 <li class="level-2"> 2590 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 2591 title="Laminate Flooring" 2592 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2593 Laminate Flooring</a> 2594 </li> 2595 <li class="level-2"> 2596 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 2597 title="Engineered Hardwood Flooring" 2598 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2599 Engineered Hardwood Flooring</a> 2600 </li> 2601 <li class="level-2"> 2602 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 2603 title="Oak Wood Flooring" 2604 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2605 Oak Wood Flooring</a> 2606 </li> 2607 <li class="level-2"> 2608 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 2609 title="Commercial Wood & Laminate" 2610 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2611 Commercial Wood & Laminate</a> 2612 </li> 2613 </ul> 2614 2615 2616 2617 2618 <li class="imgcat list-none relative" x-data="{ show: false }" > 2619 <a 2620 @click="show = !show" 2621 2622 title="Commercial Flooring" 2623 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2624 > 2625 <!-- <span class="w-6"></span> -->
2626 <span> 2627 Commercial Flooring </span> 2628 </a> 2629 2630 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2631 <ul class="z-10 w-full" x-show="show"> 2632 <li class="level-2"> 2633 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 2634 title="Commercial Rubber Flooring" 2635 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2636 Commercial Rubber Flooring</a> 2637 </li> 2638 <li class="level-2"> 2639 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 2640 title="Commercial Garage Flooring" 2641 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2642 Commercial Garage Flooring</a> 2643 </li> 2644 <li class="level-2"> 2645 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 2646 title="Commercial Carpet Tiles" 2647 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2648 Commercial Carpet Tiles</a> 2649 </li> 2650 <li class="level-2"> 2651 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 2652 title="Commercial Vinyl Flooring" 2653 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2654 Commercial Vinyl Flooring</a> 2655 </li> 2656 <li class="level-2"> 2657 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 2658 title="Commercial Wood & Laminate Flooring" 2659 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2660 Commercial Wood & Laminate Flooring</a> 2661 </li> 2662 <li class="level-2"> 2663 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 2664 title="Gym Floor Covers | Floor Protection" 2665 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2666 Gym Floor Covers | Floor Protection</a> 2667 </li> 2668 </ul> 2669 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/commercial-flooring.html" x-show="show">View All</a> 2670 2671 2672 2673 2674 <li class="imgcat list-none relative" x-data="{ show: false }" > 2675 <a 2676 @click="show = !show" 2677 2678 title="Floors by Activity" 2679 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2680 > 2681 <!-- <span class="w-6"></span> -->
2682 <span> 2683 Floors by Activity </span> 2684 </a> 2685 2686 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2687 <ul class="z-10 w-full" x-show="show"> 2688 <li class="level-2"> 2689 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 2690 title="Fitness Flooring" 2691 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2692 Fitness Flooring</a> 2693 </li> 2694 <li class="level-2"> 2695 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 2696 title="Dance Flooring | Marley Floor" 2697 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2698 Dance Flooring | Marley Floor</a> 2699 </li> 2700 <li class="level-2"> 2701 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 2702 title="Sport & Court Flooring" 2703 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2704 Sport & Court Flooring</a> 2705 </li> 2706 <li class="level-2"> 2707 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 2708 title="Martial Arts Mats " 2709 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2710 Martial Arts Mats </a> 2711 </li> 2712 <li class="level-2"> 2713 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 2714 title="Cheer Mats" 2715 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2716 Cheer Mats</a> 2717 </li> 2718 <li class="level-2"> 2719 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 2720 title="Wrestling Mats" 2721 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2722 Wrestling Mats</a> 2723 </li> 2724 </ul> 2725 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/shop-by-activity.html" x-show="show">View All</a> 2726 2727 2728 2729 2730 <li class="imgcat list-none relative" x-data="{ show: false }" > 2731 <a 2732 @click="show = !show" 2733 2734 title="Floors by Space" 2735 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2736 > 2737 <!-- <span class="w-6"></span> -->
2738 <span> 2739 Floors by Space </span> 2740 </a> 2741 2742 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2743 <ul class="z-10 w-full" x-show="show"> 2744 <li class="level-2"> 2745 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 2746 title="Kitchen Flooring" 2747 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2748 Kitchen Flooring</a> 2749 </li> 2750 <li class="level-2"> 2751 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 2752 title="Bathroom Flooring" 2753 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2754 Bathroom Flooring</a> 2755 </li> 2756 <li class="level-2"> 2757 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 2758 title="Commercial Flooring" 2759 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2760 Commercial Flooring</a> 2761 </li> 2762 <li class="level-2"> 2763 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 2764 title="Gym Flooring" 2765 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2766 Gym Flooring</a> 2767 </li> 2768 <li class="level-2"> 2769 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 2770 title="Garage Flooring" 2771 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2772 Garage Flooring</a> 2773 </li> 2774 <li class="level-2"> 2775 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 2776 title="Outdoor Flooring" 2777 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2778 Outdoor Flooring</a> 2779 </li> 2780 </ul> 2781 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/shop-by-space.html" x-show="show">View All</a> 2782 2783 2784 2785 2786 <li class="imgcat list-none relative" x-data="{ show: false }" > 2787 <a 2788 @click="show = !show" 2789 2790 title="Underlayment & Flooring Accessories" 2791 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2792 > 2793 <!-- <span class="w-6"></span> -->
2794 <span> 2795 Underlayment & Flooring Accessories </span> 2796 </a> 2797 2798 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2799 <ul class="z-10 w-full" x-show="show"> 2800 <li class="level-2"> 2801 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 2802 title="Flooring Adhesives & Glue" 2803 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2804 Flooring Adhesives & Glue</a> 2805 </li> 2806 <li class="level-2"> 2807 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 2808 title="Floor and Mat Tape" 2809 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2810 Floor and Mat Tape</a> 2811 </li> 2812 <li class="level-2"> 2813 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 2814 title="Installation Accessories" 2815 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2816 Installation Accessories</a> 2817 </li> 2818 <li class="level-2"> 2819 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 2820 title="Floor Trims & Moldings" 2821 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2822 Floor Trims & Moldings</a> 2823 </li> 2824 <li class="level-2"> 2825 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 2826 title="Flooring Underlayment" 2827 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2828 Flooring Underlayment</a> 2829 </li> 2830 <li class="level-2"> 2831 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 2832 title="Flooring Cleaners" 2833 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2834 Flooring Cleaners</a> 2835 </li> 2836 </ul> 2837 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/installation-care.html" x-show="show">View All</a> 2838 2839 2840 2841 2842 <li class="imgcat list-none relative" x-data="{ show: false }" > 2843 <a 2844 @click="show = !show" 2845 2846 title="Specials" 2847 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2848 > 2849 <!-- <span class="w-6"></span> -->
2850 <span> 2851 Specials </span> 2852 </a> 2853 2854 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2855 <ul class="z-10 w-full" x-show="show"> 2856 <li class="level-2"> 2857 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 2858 title="Flooring Deals" 2859 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2860 Flooring Deals</a> 2861 </li> 2862 <li class="level-2"> 2863 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 2864 title="American Made" 2865 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2866 American Made</a> 2867 </li> 2868 <li class="level-2"> 2869 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 2870 title="Quick Ship" 2871 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2872 Quick Ship</a> 2873 </li> 2874 <li class="level-2"> 2875 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 2876 title="New Arrivals" 2877 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2878 New Arrivals</a> 2879 </li> 2880 </ul> 2881 2882 2883 </div> 2884 2885 2886 </div> 2887 <div class="menu_static_links"> 2888 <style>#html-body [data-pb-style=QGH21I8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="QGH21I8"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 2889<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 2890<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 2891</ul></div></div></div> </div> 2892 </div> 2893 </nav> 2894 </div> 2895</div>
2896<script> 2897 'use strict'; 2898 2899 const initMenuMobile_6ac15155197cd = () => { 2900 return { 2901 mobilePanelActiveId: null, 2902 open: false, 2903 setActiveMenu(menuNode) { 2904 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2905 return link.href === window.location.href.split('?')[0]; 2906 }).map(item => { 2907 item.classList.add('underline'); 2908 item.closest('div.level-0') && 2909 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 2910 }); 2911 } 2912 } 2913 } 2914 2915 window.addEventListener("scroll", function() { 2916 successMsgSticky2(); 2917 }); 2918 2919 // sticky header 2920 function successMsgSticky2() { 2921 if (window.innerWidth < 767) { 2922 var headerHeight = document.querySelector('.page-header .panel.wrapper').offsetHeight; 2923 var headerMainHeight = document.getElementById('header').offsetHeight; 2924 var scrollTop = window.scrollY; 2925 2926 if (scrollTop >= headerHeight) { 2927 document.body.classList.add('scroll-reached-hHgt'); 2928 document.body.style.paddingTop = headerMainHeight + 'px'; 2929 } else { 2930 document.body.classList.remove('scroll-reached-hHgt'); 2931 document.body.style.paddingTop = '0'; 2932 } 2933 } 2934 } 2935 2936 window.addEventListener("load", function() { 2937 successMsgSticky2(); 2938 }); 2939 2940</script>
2940 2941 2942<div x-data="initMenuDesktop_6ac1515521319()" 2943 class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden xl:flex desktop__menu" 2944> 2945 <!-- desktop --> 2946 <div @load.window="setActiveMenu($root)" 2947 class="justify-between items-center mx-auto w-full max-w-7xl pl-2" 2948 > 2949 <nav 2950 class="flex flex-wrap" 2951 > 2952 <div class="level-0 flex py-2 items-center border-transparent transition transition-colors duration-500 group megamenu_items" :class="{ 'block' : open}" 2953 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 2954 @mouseenter="desktopMegaMenuShow = true" @mouseleave="desktopMegaMenuShow = false" 2955 x-data="{ desktopMegaMenuShow: false }" 2956 > 2957 <!-- <a href="https://www.flooringinc.com/shop.html" --> 2958 <a 2959 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 2960 title="Flooring By Category" 2961 class="level-0 block p-2 text-base font-medium text-black whitespace-nowrap cursor-pointer megamenu_items_link"> 2962 <span>Flooring By Category</span> 2963 <span class="inline items-center releat"> 2964 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 2965 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 2966<title>chevron-down</title></svg> 2967 </span> 2968 </a> 2969 <template x-if="desktopMegaMenuShow"> 2970 <div class="absolute left-0 right-0 top-full z-10 -mt-3 w-3/4 mx-auto bg-white opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto megamenu" 2971 style="display:none;" 2972 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 2973 > 2974 <div class="flex justify-between mt-0 mb-0 sub-megamenu"> 2975 <div class="mx-auto w-full"> 2976 <ul class="grid flex-1 w-full gap-y-0 gap-x-0 py-4 px-5 relative"> 2977 2978 <li :class="{ 'active': show }" class="level-1 level1 display-first" x-data="{ show: true }" 2979 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 2980 > 2981 <a 2982 title="Rubber Flooring" 2983 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 2984 2985 > 2986 Rubber Flooring 2987 <span class="inline items-center rotate-180 absolute"> 2988 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 2989 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 2990<title>chevron-down</title></svg> 2991 </span> 2992 </a> 2993 2994 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 2995 <style>#html-body [data-pb-style=IIM6H46]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=U0GMW4D]{border-style:none}#html-body [data-pb-style=CSIHBUF],#html-body [data-pb-style=HQMCF2E]{max-width:100%;height:auto}#html-body [data-pb-style=D3FJGJ6]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=RR2V2I7]{display:flex;width:100%}#html-body [data-pb-style=PYIYA0A]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=P1TMDVT]{text-align:left}#html-body [data-pb-style=F6SSOOO]{display:inline-block}#html-body [data-pb-style=K11XLVI]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=U0GMW4D]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="IIM6H46"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="U0GMW4D"><a href="/next-day-rubber-rolls-14003.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="HQMCF2E" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="CSIHBUF" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="D3FJGJ6"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="RR2V2I7"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PYIYA0A"><div class="text-size14 font-medium text-custom-black text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><p>Powered By <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/website-logo-powerd-by-color-rfi.webp"><img src="https://www.flooringinc.com/media/wysiwyg/website-logo-powerd-by-color-rfi.png" alt="" width="87" height="15"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-2 pb-4" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Premium Rubber Solutions</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="P1TMDVT" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="F6SSOOO"><a class="pagebuilder-button-primary" href="/next-day-rubber-rolls-14003.html" target="" data-link-type="default" data-element="link" data-pb-style="K11XLVI"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 2996 2997 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
2998 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Rubber Flooring</span> 2999 3000 <li class="level-2 w-4/12 pr-6 pb-6"> 3001 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 3002 title="All Rubber Flooring" 3003 class="level-2 block"> 3004 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/all_rubber_main.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/all_rubber_main.jpg" alt="All Rubber Flooring" title="All Rubber Flooring" /></picture> 3005 3006 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Rubber Flooring</span></a> 3007 </li> 3008 3009 <li class="level-2 w-4/12 pr-6 pb-6"> 3010 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 3011 title="Rubber Flooring Rolls" 3012 class="level-2 block"> 3013 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubber_rolls_category_main_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubber_rolls_category_main_1_.jpg" alt="Rubber Flooring Rolls" title="Rubber Flooring Rolls" /></picture> 3014 3015 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Flooring Rolls</span></a> 3016 </li> 3017 3018 <li class="level-2 w-4/12 pr-6 pb-6"> 3019 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 3020 title="Rubber Floor Tiles" 3021 class="level-2 block"> 3022 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubbertiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubbertiles-main-category_1.jpg" alt="Rubber Floor Tiles" title="Rubber Floor Tiles" /></picture> 3023
3024 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Floor Tiles</span></a> 3025 </li> 3026 3027 <li class="level-2 w-4/12 pr-6 pb-6"> 3028 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 3029 title="Rubber Mats" 3030 class="level-2 block"> 3031 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubbermats-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubbermats-main-category_1.jpg" alt="Rubber Mats" title="Rubber Mats" /></picture> 3032 3033 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Mats</span></a> 3034 </li> 3035 3036 <li class="level-2 w-4/12 pr-6 pb-6"> 3037 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 3038 title="Playground Flooring" 3039 class="level-2 block"> 3040 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category.jpg" alt="Playground Flooring" title="Playground Flooring" /></picture> 3041 3042 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3043 </li> 3044 3045 <li class="level-2 w-4/12 pr-6 pb-6"> 3046 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 3047 title="Outdoor Rubber Flooring" 3048 class="level-2 block"> 3049 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_rubber_flooring_outdoor_rubber_flooing_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_rubber_flooring_outdoor_rubber_flooing_1.jpg" alt="Outdoor Rubber Flooring" title="Outdoor Rubber Flooring" /></picture> 3050
3051 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Rubber Flooring</span></a> 3052 </li> 3053 3054 3055 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/rubber-flooring.html" >View All</a> 3056 3057 3058 </ul> 3059 </li> 3060 3061 3062 3063 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3064 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3065 > 3066 <a 3067 title="Garage Flooring" 3068 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3069 3070 > 3071 Garage Flooring 3072 <span class="inline items-center rotate-180 absolute"> 3073 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3074 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3075<title>chevron-down</title></svg> 3076 </span> 3077 </a> 3078 3079 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3080 <style>#html-body [data-pb-style=H2Q94UM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=C5CAQFQ]{border-style:none}#html-body [data-pb-style=FY780K4],#html-body [data-pb-style=P2NDU5I]{max-width:100%;height:auto}#html-body [data-pb-style=RFW0BPB]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=MX73IJ8]{display:flex;width:100%}#html-body [data-pb-style=YYPRLU8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=TU662D2]{text-align:left}#html-body [data-pb-style=EXLNMTV]{display:inline-block}#html-body [data-pb-style=N31DM3P]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=C5CAQFQ]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="H2Q94UM"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="C5CAQFQ"><a href="https://www.flooringinc.com/shop/flex-nitro-tiles-8985.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="FY780K4" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="P2NDU5I" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="RFW0BPB"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="MX73IJ8"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="YYPRLU8"><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="TU662D2" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="EXLNMTV"><a class="pagebuilder-button-primary" href="https://www.flooringinc.com/shop/flex-nitro-tiles-8985.html" target="" data-link-type="default" data-element="link" data-pb-style="N31DM3P"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3081 3082 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3083 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Garage Flooring</span> 3084 3085 <li class="level-2 w-4/12 pr-6 pb-6"> 3086 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 3087 title="All Garage Flooring" 3088 class="level-2 block"> 3089 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Garage_Flooring.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Garage_Flooring.jpg" alt="All Garage Flooring" title="All Garage Flooring" /></picture> 3090 3091 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Garage Flooring</span></a> 3092 </li> 3093 3094 <li class="level-2 w-4/12 pr-6 pb-6"> 3095 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 3096 title="Garage Flooring Rolls" 3097 class="level-2 block"> 3098 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/garagerools-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/garagerools-main-category_1.jpg" alt="Garage Flooring Rolls" title="Garage Flooring Rolls" /></picture> 3099 3100 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring Rolls</span></a> 3101 </li> 3102 3103 <li class="level-2 w-4/12 pr-6 pb-6"> 3104 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 3105 title="Garage Floor Tiles" 3106 class="level-2 block"> 3107 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/garagetiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/garagetiles-main-category_1.jpg" alt="Garage Floor Tiles" title="Garage Floor Tiles" /></picture> 3108
3109 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Tiles</span></a> 3110 </li> 3111 3112 <li class="level-2 w-4/12 pr-6 pb-6"> 3113 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 3114 title="Garage Gym Flooring" 3115 class="level-2 block"> 3116 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_garage_gym_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_garage_gym_flooring_1.jpg" alt="Garage Gym Flooring" title="Garage Gym Flooring" /></picture> 3117 3118 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Gym Flooring</span></a> 3119 </li> 3120 3121 <li class="level-2 w-4/12 pr-6 pb-6"> 3122 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 3123 title="Garage Floor Epoxy" 3124 class="level-2 block"> 3125 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_coatings_epoxy_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_coatings_epoxy_1_1.jpg" alt="Garage Floor Epoxy" title="Garage Floor Epoxy" /></picture> 3126 3127 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Epoxy</span></a> 3128 </li> 3129 3130 <li class="level-2 w-4/12 pr-6 pb-6"> 3131 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 3132 title="Trailer Flooring" 3133 class="level-2 block"> 3134 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_trailer_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_trailer_flooring_1.jpg" alt="Trailer Flooring" title="Trailer Flooring" /></picture> 3135
3136 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trailer Flooring</span></a> 3137 </li> 3138 3139 3140 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/garage-flooring.html" >View All</a> 3141 3142 3143 </ul> 3144 </li> 3145 3146 3147 3148 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3149 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3150 > 3151 <a 3152 title="Dance Flooring" 3153 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3154 3155 > 3156 Dance Flooring 3157 <span class="inline items-center rotate-180 absolute"> 3158 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3159 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3160<title>chevron-down</title></svg> 3161 </span> 3162 </a> 3163 3164 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3165 <style>#html-body [data-pb-style=DE1KPIK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=I9PHOLE]{border-style:none}#html-body [data-pb-style=PGOIAVD],#html-body [data-pb-style=XRTA8XP]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=I9PHOLE]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="DE1KPIK"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="I9PHOLE"><a href="https://www.flooringinc.com/shop/prostep-dance-floor-rolls-9876.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="XRTA8XP" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="PGOIAVD" loading="lazy"></picture></a></figure></div> </div> 3166 3167 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3168 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Dance Flooring</span> 3169 3170 <li class="level-2 w-4/12 pr-6 pb-6"> 3171 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 3172 title="Marley Floor Rolls" 3173 class="level-2 block"> 3174 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Marley_Dance_Floor_Rolls_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Marley_Dance_Floor_Rolls_Category_1.jpg" alt="Marley Floor Rolls" title="Marley Floor Rolls" /></picture> 3175 3176 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Marley Floor Rolls</span></a> 3177 </li> 3178 3179 <li class="level-2 w-4/12 pr-6 pb-6"> 3180 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 3181 title="Dance Floor Tiles" 3182 class="level-2 block"> 3183 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Tiles_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Tiles_Category_1.jpg" alt="Dance Floor Tiles" title="Dance Floor Tiles" /></picture> 3184 3185 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Floor Tiles</span></a> 3186 </li> 3187 3188 <li class="level-2 w-4/12 pr-6 pb-6"> 3189 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 3190 title="Portable Dance Floors & Kits" 3191 class="level-2 block"> 3192 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Portable_Dance_Floor_Kits_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Portable_Dance_Floor_Kits_Category_1.jpg" alt="Portable Dance Floors & Kits" title="Portable Dance Floors & Kits" /></picture> 3193
3194 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Portable Dance Floors & Kits</span></a> 3195 </li> 3196 3197 <li class="level-2 w-4/12 pr-6 pb-6"> 3198 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 3199 title="Subflooring" 3200 class="level-2 block"> 3201 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Subflooring_Category_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Subflooring_Category_1_1.jpg" alt="Subflooring" title="Subflooring" /></picture> 3202 3203 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Subflooring</span></a> 3204 </li> 3205 3206 <li class="level-2 w-4/12 pr-6 pb-6"> 3207 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 3208 title="Adhesives, Cleaners & Accessories" 3209 class="level-2 block"> 3210 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Accessories.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Accessories.jpg" alt="Adhesives, Cleaners & Accessories" title="Adhesives, Cleaners & Accessories" /></picture> 3211 3212 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Adhesives, Cleaners & Accessories</span></a> 3213 </li> 3214 3215 <li class="level-2 w-4/12 pr-6 pb-6"> 3216 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 3217 title="All Dance Flooring" 3218 class="level-2 block"> 3219 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Dance_Flooring_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Dance_Flooring_Category.jpg" alt="All Dance Flooring" title="All Dance Flooring" /></picture> 3220
3221 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Dance Flooring</span></a> 3222 </li> 3223 3224 3225 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/dance-flooring.html" >View All</a> 3226 3227 3228 </ul> 3229 </li> 3230 3231 3232 3233 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3234 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3235 > 3236 <a 3237 title="Foam Flooring" 3238 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3239 3240 > 3241 Foam Flooring 3242 <span class="inline items-center rotate-180 absolute"> 3243 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3244 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3245<title>chevron-down</title></svg> 3246 </span> 3247 </a> 3248 3249 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3250 <style>#html-body [data-pb-style=V4QEB1B]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=RATJYYQ]{border-style:none}#html-body [data-pb-style=C8AYEH6],#html-body [data-pb-style=K3BTVRB]{max-width:100%;height:auto}#html-body [data-pb-style=C9LYQAD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=WFJJ3YQ]{display:flex;width:100%}#html-body [data-pb-style=IJTR1TW]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=UUFOJKP]{text-align:left}#html-body [data-pb-style=LCUDGB3]{display:inline-block}#html-body [data-pb-style=E91VWL4]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=RATJYYQ]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="V4QEB1B"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="RATJYYQ"><a href="/shop/foam-flooring.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="K3BTVRB" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="C8AYEH6" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="C9LYQAD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="WFJJ3YQ"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IJTR1TW"><div class="text-size14 font-medium text-custom-black text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><p>Powered By <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/6000x2556_FT.webp"><img src="https://www.flooringinc.com/media/wysiwyg/6000x2556_FT.png" alt="" width="100" height="26"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-2 pb-4" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Elite Sports Surfaces</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="UUFOJKP" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="LCUDGB3"><a class="pagebuilder-button-primary" href="/shop/foam-flooring.html" target="" data-link-type="default" data-element="link" data-pb-style="E91VWL4"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3251 3252 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3253 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Foam Flooring</span> 3254 3255 <li class="level-2 w-4/12 pr-6 pb-6"> 3256 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 3257 title="Foam Floor Tiles" 3258 class="level-2 block"> 3259 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/foamtiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/foamtiles-main-category_1.jpg" alt="Foam Floor Tiles" title="Foam Floor Tiles" /></picture> 3260 3261 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Foam Floor Tiles</span></a> 3262 </li> 3263 3264 <li class="level-2 w-4/12 pr-6 pb-6"> 3265 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 3266 title="Kids & Baby Play Mats" 3267 class="level-2 block"> 3268 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Kids_Baby_Play_Mats.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Kids_Baby_Play_Mats.jpg" alt="Kids & Baby Play Mats" title="Kids & Baby Play Mats" /></picture> 3269 3270 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kids & Baby Play Mats</span></a> 3271 </li> 3272 3273 <li class="level-2 w-4/12 pr-6 pb-6"> 3274 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 3275 title="Gymnastics Mats " 3276 class="level-2 block"> 3277 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Gymnastics_Mat_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Gymnastics_Mat_Category_1.jpg" alt="Gymnastics Mats " title="Gymnastics Mats " /></picture> 3278
3279 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gymnastics Mats </span></a> 3280 </li> 3281 3282 <li class="level-2 w-4/12 pr-6 pb-6"> 3283 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 3284 title="Wrestling Mats" 3285 class="level-2 block"> 3286 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_2.jpg" alt="Wrestling Mats" title="Wrestling Mats" /></picture> 3287 3288 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3289 </li> 3290 3291 <li class="level-2 w-4/12 pr-6 pb-6"> 3292 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 3293 title="Martial Arts Mats " 3294 class="level-2 block"> 3295 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Martial_Arts_Mats_Category_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Martial_Arts_Mats_Category_1_.jpg" alt="Martial Arts Mats " title="Martial Arts Mats " /></picture> 3296 3297 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3298 </li> 3299 3300 <li class="level-2 w-4/12 pr-6 pb-6"> 3301 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 3302 title="Trade Show Flooring" 3303 class="level-2 block"> 3304 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Trade_Show_Flooring.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Trade_Show_Flooring.jpg" alt="Trade Show Flooring" title="Trade Show Flooring" /></picture> 3305
3306 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trade Show Flooring</span></a> 3307 </li> 3308 3309 3310 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/foam-flooring.html" >View All</a> 3311 3312 3313 </ul> 3314 </li> 3315 3316 3317 3318 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3319 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3320 > 3321 <a 3322 title="Outdoor Flooring" 3323 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3324 3325 > 3326 Outdoor Flooring 3327 <span class="inline items-center rotate-180 absolute"> 3328 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3329 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3330<title>chevron-down</title></svg> 3331 </span> 3332 </a> 3333 3334 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3335 <style>#html-body [data-pb-style=ALQ4JPY]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TAKV2W6]{border-style:none}#html-body [data-pb-style=HFLT9TD],#html-body [data-pb-style=Q8I554G]{max-width:100%;height:auto}#html-body [data-pb-style=FM097SK]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=P04UNTQ]{display:flex;width:100%}#html-body [data-pb-style=DWKW6WK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=UW72WSA]{text-align:left}#html-body [data-pb-style=GY38RBS]{display:inline-block}#html-body [data-pb-style=W6R7Y9S]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=TAKV2W6]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="ALQ4JPY"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="TAKV2W6"><a href="/helios-deck-tiles-13850.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.
3335webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="Q8I554G" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="HFLT9TD" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="FM097SK"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="P04UNTQ"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="DWKW6WK"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Helios_Color.webp"><img src="https://www.flooringinc.com/media/wysiwyg/Helios_Color.png" alt="" width="100" height="33"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Helios Deck Tiles</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="UW72WSA" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="GY38RBS"><a class="pagebuilder-button-primary" href="/helios-deck-tiles-13850.html" target="" data-link-type="default" data-element="link" data-pb-style="W6R7Y9S"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3336 3337 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3338 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Outdoor Flooring</span> 3339 3340 <li class="level-2 w-4/12 pr-6 pb-6"> 3341 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 3342 title="Playground Flooring" 3343 class="level-2 block"> 3344 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category_1.jpg" alt="Playground Flooring" title="Playground Flooring" /></picture> 3345 3346 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3347 </li> 3348 3349 <li class="level-2 w-4/12 pr-6 pb-6"> 3350 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 3351 title="Sports Flooring & Court Tiles" 3352 class="level-2 block"> 3353 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/court-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/court-main-category_1.jpg" alt="Sports Flooring & Court Tiles" title="Sports Flooring & Court Tiles" /></picture> 3354
3355 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sports Flooring & Court Tiles</span></a> 3356 </li> 3357 3358 <li class="level-2 w-4/12 pr-6 pb-6"> 3359 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 3360 title="Turf & Artificial Grass" 3361 class="level-2 block"> 3362 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_outdoor_flooring_artifical_grass_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_outdoor_flooring_artifical_grass_1.jpg" alt="Turf & Artificial Grass" title="Turf & Artificial Grass" /></picture> 3363 3364 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf & Artificial Grass</span></a> 3365 </li> 3366 3367 <li class="level-2 w-4/12 pr-6 pb-6"> 3368 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 3369 title="Composite Decking" 3370 class="level-2 block"> 3371 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Composite_Decking_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Composite_Decking_Category.jpg" alt="Composite Decking" title="Composite Decking" /></picture> 3372 3373 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Composite Decking</span></a> 3374 </li> 3375 3376 <li class="level-2 w-4/12 pr-6 pb-6"> 3377 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 3378 title="Rooftop Deck Flooring" 3379 class="level-2 block"> 3380 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Rooftop_Deck_Flooring_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Rooftop_Deck_Flooring_Category_1.jpg" alt="Rooftop Deck Flooring" title="Rooftop Deck Flooring" /></picture> 3381
3382 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rooftop Deck Flooring</span></a> 3383 </li> 3384 3385 <li class="level-2 w-4/12 pr-6 pb-6"> 3386 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 3387 title="Drainage Tile & Mats" 3388 class="level-2 block"> 3389 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Drainage_Tiles_Category_01.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Drainage_Tiles_Category_01.jpg" alt="Drainage Tile & Mats" title="Drainage Tile & Mats" /></picture> 3390 3391 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Drainage Tile & Mats</span></a> 3392 </li> 3393 3394 3395 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/outdoor-flooring.html" >View All</a> 3396 3397 3398 </ul> 3399 </li> 3400 3401 3402 3403 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3404 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3405 > 3406 <a 3407 title="Turf & Artificial Grass" 3408 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3409 3410 > 3411 Turf & Artificial Grass 3412 <span class="inline items-center rotate-180 absolute"> 3413 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3414 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3415<title>chevron-down</title></svg> 3416 </span> 3417 </a> 3418 3419 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3420 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Turf & Artificial Grass</span> 3421 3422 <li class="level-2 w-4/12 pr-6 pb-6"> 3423 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 3424 title="Sport & Gym Turf" 3425 class="level-2 block"> 3426 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/10079_0_1_3_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/10079_0_1_3_.jpg" alt="Sport & Gym Turf" title="Sport & Gym Turf" /></picture> 3427 3428 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Gym Turf</span></a> 3429 </li> 3430 3431 <li class="level-2 w-4/12 pr-6 pb-6"> 3432 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 3433 title="Landscape Turf" 3434 class="level-2 block"> 3435 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_landscape_turf_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_landscape_turf_2.jpg" alt="Landscape Turf" title="Landscape Turf" /></picture> 3436 3437 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Landscape Turf</span></a> 3438 </li> 3439 3440 <li class="level-2 w-4/12 pr-6 pb-6"> 3441 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 3442 title="Pet Turf" 3443 class="level-2 block"> 3444 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_pet_turf_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_pet_turf_3.jpg" alt="Pet Turf" title="Pet Turf" /></picture> 3445
3446 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Pet Turf</span></a> 3447 </li> 3448 3449 <li class="level-2 w-4/12 pr-6 pb-6"> 3450 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 3451 title="Golf & Putting Green Turf" 3452 class="level-2 block"> 3453 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_putting_greens_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_putting_greens_1.jpg" alt="Golf & Putting Green Turf" title="Golf & Putting Green Turf" /></picture> 3454 3455 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Golf & Putting Green Turf</span></a> 3456 </li> 3457 3458 <li class="level-2 w-4/12 pr-6 pb-6"> 3459 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 3460 title="Turf Accessories" 3461 class="level-2 block"> 3462 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Untitled_design_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Untitled_design_1_.png" alt="Turf Accessories" title="Turf Accessories" /></picture> 3463 3464 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf Accessories</span></a> 3465 </li> 3466 3467 <li class="level-2 w-4/12 pr-6 pb-6"> 3468 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 3469 title="All Turf & Artificial Grass" 3470 class="level-2 block"> 3471 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Artificial_Grass2_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Artificial_Grass2_1.jpg" alt="All Turf & Artificial Grass" title="All Turf & Artificial Grass" /></picture> 3472
3473 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Turf & Artificial Grass</span></a> 3474 </li> 3475 3476 3477 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/artificial-grass.html" >View All</a> 3478 3479 3480 </ul> 3481 </li> 3482 3483 3484 3485 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3486 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3487 > 3488 <a 3489 title="Carpet Tiles & Rolls" 3490 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3491 3492 > 3493 Carpet Tiles & Rolls 3494 <span class="inline items-center rotate-180 absolute"> 3495 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3496 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3497<title>chevron-down</title></svg> 3498 </span> 3499 </a> 3500 3501 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3502 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Carpet Tiles & Rolls</span> 3503 3504 <li class="level-2 w-4/12 pr-6 pb-6"> 3505 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 3506 title="Carpet Tiles" 3507 class="level-2 block"> 3508 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Carpet_Tiles_Category_01.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Carpet_Tiles_Category_01.jpg" alt="Carpet Tiles" title="Carpet Tiles" /></picture> 3509
3510 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Tiles</span></a> 3511 </li> 3512 3513 <li class="level-2 w-4/12 pr-6 pb-6"> 3514 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 3515 title="Carpet Rolls" 3516 class="level-2 block"> 3517 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_carpet_rolls_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_carpet_rolls_3.jpg" alt="Carpet Rolls" title="Carpet Rolls" /></picture> 3518 3519 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Rolls</span></a> 3520 </li> 3521 3522 <li class="level-2 w-4/12 pr-6 pb-6"> 3523 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 3524 title="Home Theater Carpet" 3525 class="level-2 block"> 3526 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Home_Theater_Carpet_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Home_Theater_Carpet_Category.jpg" alt="Home Theater Carpet" title="Home Theater Carpet" /></picture> 3527 3528 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Home Theater Carpet</span></a> 3529 </li> 3530 3531 <li class="level-2 w-4/12 pr-6 pb-6"> 3532 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 3533 title="Peel and Stick Carpet Tiles" 3534 class="level-2 block"> 3535 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_peel_stick_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_peel_stick_carpet_3.jpg" alt="Peel and Stick Carpet Tiles" title="Peel and Stick Carpet Tiles" /></picture> 3536
3537 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Peel and Stick Carpet Tiles</span></a> 3538 </li> 3539 3540 <li class="level-2 w-4/12 pr-6 pb-6"> 3541 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 3542 title="Outdoor Carpet" 3543 class="level-2 block"> 3544 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_outdoor_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_outdoor_carpet_3.jpg" alt="Outdoor Carpet" title="Outdoor Carpet" /></picture> 3545 3546 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Carpet</span></a> 3547 </li> 3548 3549 <li class="level-2 w-4/12 pr-6 pb-6"> 3550 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 3551 title="Waterproof Carpet" 3552 class="level-2 block"> 3553 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_waterproof_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_waterproof_carpet_3.jpg" alt="Waterproof Carpet" title="Waterproof Carpet" /></picture> 3554 3555 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Carpet</span></a> 3556 </li> 3557 3558 3559 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/carpet.html" >View All</a> 3560 3561 3562 </ul> 3563 </li> 3564 3565 3566 3567 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3568 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3569 > 3570 <a 3571 title="Vinyl Flooring" 3572 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3573 3574 > 3575 Vinyl Flooring 3576 <sp
3576an class="inline items-center rotate-180 absolute"> 3577 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3578 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3579<title>chevron-down</title></svg> 3580 </span> 3581 </a> 3582 3583 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3584 <style>#html-body [data-pb-style=EM115TO]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=IKTB4TW]{border-style:none}#html-body [data-pb-style=GIF1L08],#html-body [data-pb-style=XQRKPTA]{max-width:100%;height:auto}#html-body [data-pb-style=L8H5BBD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=R47C5CN]{display:flex;width:100%}#html-body [data-pb-style=KQ2WCHQ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=DKAF2SH]{text-align:left}#html-body [data-pb-style=PYFOHXW]{display:inline-block}#html-body [data-pb-style=PNB90JW]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=IKTB4TW]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="EM115TO"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IKTB4TW"><a href="/tritoncore-pro-7-rigid-core-vinyl-planks-12596.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="XQRKPTA" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="GIF1L08" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="L8H5BBD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="R47C5CN"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="KQ2WCHQ"><div class="text-size18 text-custom-black font-bold text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">TritonCore Pro 7"</span><br><span style="font-size: 18px;">Rigid Core Vinyl Planks</span></h2></div><div class="text-size14 font-medium text-custom-black text-left pt-1 pb-3" data-content-type="text" data-appearance="default" data-element="main"><p>Functional beauty for busy households.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="DKAF2SH" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="PYFOHXW"><a class="pagebuilder-button-primary" href="/tritoncore-pro-7-rigid-core-vinyl-planks-12596.html" target="" data-link-type="default" data-element="link" data-pb-style="PNB90JW"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3585 3586 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3587 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Vinyl Flooring</span> 3588 3589 <li class="level-2 w-4/12 pr-6 pb-6"> 3590 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 3591 title="Vinyl Sheet Flooring" 3592 class="level-2 block"> 3593 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_vinyl_sheet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_vinyl_sheet_3.jpg" alt="Vinyl Sheet Flooring" title="Vinyl Sheet Flooring" /></picture> 3594 3595 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Sheet Flooring</span></a> 3596 </li> 3597 3598 <li class="level-2 w-4/12 pr-6 pb-6"> 3599 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 3600 title="Vinyl Tiles & Planks" 3601 class="level-2 block"> 3602 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/main-category-vinyl.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/main-category-vinyl.jpg" alt="Vinyl Tiles & Planks" title="Vinyl Tiles & Planks" /></picture> 3603 3604 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Tiles & Planks</span></a> 3605 </li> 3606 3607 <li class="level-2 w-4/12 pr-6 pb-6"> 3608 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 3609 title="Waterproof Vinyl Flooring" 3610 class="level-2 block"> 3611 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_waterproof_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_waterproof_vinyl_1.jpg" alt="Waterproof Vinyl Flooring" title="Waterproof Vinyl Flooring" /></picture> 3612
3613 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Vinyl Flooring</span></a> 3614 </li> 3615 3616 <li class="level-2 w-4/12 pr-6 pb-6"> 3617 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 3618 title="Rigid Core Vinyl Flooring" 3619 class="level-2 block"> 3620 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_rigid_core_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_rigid_core_vinyl_1.jpg" alt="Rigid Core Vinyl Flooring" title="Rigid Core Vinyl Flooring" /></picture> 3621 3622 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rigid Core Vinyl Flooring</span></a> 3623 </li> 3624 3625 <li class="level-2 w-4/12 pr-6 pb-6"> 3626 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 3627 title="Commercial Vinyl Flooring" 3628 class="level-2 block"> 3629 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_commercial_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_commercial_vinyl_1.jpg" alt="Commercial Vinyl Flooring" title="Commercial Vinyl Flooring" /></picture> 3630 3631 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3632 </li> 3633 3634 3635 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/vinyl.html" >View All</a> 3636 3637 3638 </ul> 3639 </li> 3640 3641 3642 3643 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3644 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3645 > 3646 <a 3647 title="Wood & Laminate Flooring" 3648 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3649 3650 > 3651 Wood & Laminate Flooring 3652 <sp
3652an class="inline items-center rotate-180 absolute"> 3653 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3654 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3655<title>chevron-down</title></svg> 3656 </span> 3657 </a> 3658 3659 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3660 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Wood & Laminate Flooring</span> 3661 3662 <li class="level-2 w-4/12 pr-6 pb-6"> 3663 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 3664 title="Waterproof Laminate Flooring" 3665 class="level-2 block"> 3666 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_waterproof_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_waterproof_laminate_1.jpg" alt="Waterproof Laminate Flooring" title="Waterproof Laminate Flooring" /></picture> 3667 3668 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Laminate Flooring</span></a> 3669 </li> 3670 3671 <li class="level-2 w-4/12 pr-6 pb-6"> 3672 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 3673 title="Laminate Flooring" 3674 class="level-2 block"> 3675 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_laminate_1.jpg" alt="Laminate Flooring" title="Laminate Flooring" /></picture> 3676 3677 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Laminate Flooring</span></a> 3678 </li> 3679 3680 <li class="level-2 w-4/12 pr-6 pb-6"> 3681 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 3682 title="Engineered Hardwood Flooring" 3683 class="level-2 block"> 3684 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_hardwood_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_hardwood_1.jpg" alt="Engineered Hardwood Flooring" title="Engineered Hardwood Flooring" /></picture> 3685
3686 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Engineered Hardwood Flooring</span></a> 3687 </li> 3688 3689 <li class="level-2 w-4/12 pr-6 pb-6"> 3690 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 3691 title="Oak Wood Flooring" 3692 class="level-2 block"> 3693 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_oak_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_oak_1.jpg" alt="Oak Wood Flooring" title="Oak Wood Flooring" /></picture> 3694 3695 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Oak Wood Flooring</span></a> 3696 </li> 3697 3698 <li class="level-2 w-4/12 pr-6 pb-6"> 3699 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 3700 title="Commercial Wood & Laminate" 3701 class="level-2 block"> 3702 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_commercial_wood_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_commercial_wood_laminate_1.jpg" alt="Commercial Wood & Laminate" title="Commercial Wood & Laminate" /></picture> 3703 3704 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate</span></a> 3705 </li> 3706 3707 3708 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/wood-laminate.html" >View All</a> 3709 3710 3711 </ul> 3712 </li> 3713 3714 3715 3716 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3717 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3718 > 3719 <a 3720 title="Commercial Flooring" 3721 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3722 3723 > 3724 Commercial Flooring 3725 <sp
3725an class="inline items-center rotate-180 absolute"> 3726 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3727 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3728<title>chevron-down</title></svg> 3729 </span> 3730 </a> 3731 3732 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3733 <style>#html-body [data-pb-style=O02YD59]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=OOE2A60]{border-style:none}#html-body [data-pb-style=GIBTE8V],#html-body [data-pb-style=I3MEDCP]{max-width:100%;height:auto}#html-body [data-pb-style=YUV11TT]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=BOTYRR2]{display:flex;width:100%}#html-body [data-pb-style=Y56PEM0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=AAF7UJB]{text-align:left}#html-body [data-pb-style=MN0A9R6]{display:inline-block}#html-body [data-pb-style=GVKGSEM]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=OOE2A60]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="O02YD59"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="OOE2A60"><a href="/shaw-intellect-carpet-tile-9127.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="I3MEDCP" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="GIBTE8V" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="YUV11TT"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="BOTYRR2"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="Y56PEM0"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/shaw-logo-copy.webp"><img style="width: 100px;" src="https://www.flooringinc.com/media/wysiwyg/shaw-logo-copy.png" alt="" width="100"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Shaw Intellect<br>Carpet Tile</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="AAF7UJB" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="MN0A9R6"><a class="pagebuilder-button-primary" href="/shaw-intellect-carpet-tile-9127.html" target="" data-link-type="default" data-element="link" data-pb-style="GVKGSEM"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3734 3735 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3736 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Commercial Flooring</span> 3737 3738 <li class="level-2 w-4/12 pr-6 pb-6"> 3739 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 3740 title="Commercial Rubber Flooring" 3741 class="level-2 block"> 3742 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/main-category-commercial-rubber.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/main-category-commercial-rubber.jpg" alt="Commercial Rubber Flooring" title="Commercial Rubber Flooring" /></picture> 3743 3744 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Rubber Flooring</span></a> 3745 </li> 3746 3747 <li class="level-2 w-4/12 pr-6 pb-6"> 3748 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 3749 title="Commercial Garage Flooring" 3750 class="level-2 block"> 3751 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_garage_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_garage_flooring_1.jpg" alt="Commercial Garage Flooring" title="Commercial Garage Flooring" /></picture> 3752 3753 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Garage Flooring</span></a> 3754 </li> 3755 3756 <li class="level-2 w-4/12 pr-6 pb-6"> 3757 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 3758 title="Commercial Carpet Tiles" 3759 class="level-2 block"> 3760 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_carpet_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_carpet_1.jpg" alt="Commercial Carpet Tiles" title="Commercial Carpet Tiles" /></picture> 3761
3762 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Carpet Tiles</span></a> 3763 </li> 3764 3765 <li class="level-2 w-4/12 pr-6 pb-6"> 3766 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 3767 title="Commercial Vinyl Flooring" 3768 class="level-2 block"> 3769 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_vinyl_1.jpg" alt="Commercial Vinyl Flooring" title="Commercial Vinyl Flooring" /></picture> 3770 3771 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3772 </li> 3773 3774 <li class="level-2 w-4/12 pr-6 pb-6"> 3775 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 3776 title="Commercial Wood & Laminate Flooring" 3777 class="level-2 block"> 3778 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_wood_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_wood_laminate_1.jpg" alt="Commercial Wood & Laminate Flooring" title="Commercial Wood & Laminate Flooring" /></picture> 3779 3780 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate Flooring</span></a> 3781 </li> 3782 3783 <li class="level-2 w-4/12 pr-6 pb-6"> 3784 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 3785 title="Gym Floor Covers | Floor Protection" 3786 class="level-2 block"> 3787 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Gym_Floor_Covers_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Gym_Floor_Covers_Category.jpg" alt="Gym Floor Covers | Floor Protection" title="Gym Floor Covers | Floor Protection" /></picture> 3788
3789 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Floor Covers | Floor Protection</span></a> 3790 </li> 3791 3792 3793 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/commercial-flooring.html" >View All</a> 3794 3795 3796 </ul> 3797 </li> 3798 3799 3800 3801 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3802 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3803 > 3804 <a 3805 title="Floors by Activity" 3806 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3807 3808 > 3809 Floors by Activity 3810 <span class="inline items-center rotate-180 absolute"> 3811 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3812 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3813<title>chevron-down</title></svg> 3814 </span> 3815 </a> 3816 3817 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3818 <style>#html-body [data-pb-style=KFA34BQ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=SWIWRMK]{border-style:none}#html-body [data-pb-style=CW1JEO7],#html-body [data-pb-style=YR16OUN]{max-width:100%;height:auto}#html-body [data-pb-style=JE5OVK0]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=KFIHXY2]{display:flex;width:100%}#html-body [data-pb-style=PAOFWTU]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=GGMYAMB]{text-align:left}#html-body [data-pb-style=H9XX0T5]{display:inline-block}#html-body [data-pb-style=VQK95N0]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=SWIWRMK]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="KFA34BQ"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="SWIWRMK"><a href="/progame-sports-tiles-13636.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="CW1JEO7" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="YR16OUN" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="JE5OVK0"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="KFIHXY2"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PAOFWTU"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Progame_Color.webp"><img id="BEVL1A7" style="width: 100px; height: 33px;" src="https://www.flooringinc.com/media/wysiwyg/Progame_Color.png" alt="" width="100" height="17"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">ProGame Sports Tiles</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="GGMYAMB" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="H9XX0T5"><a class="pagebuilder-button-primary" href="/progame-sports-tiles-13636.html" target="" data-link-type="default" data-element="link" data-pb-style="VQK95N0"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3819 3820 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3821 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Activity</span> 3822 3823 <li class="level-2 w-4/12 pr-6 pb-6"> 3824 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 3825 title="Fitness Flooring" 3826 class="level-2 block"> 3827 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_fitness_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_fitness_flooring_1.jpg" alt="Fitness Flooring" title="Fitness Flooring" /></picture> 3828 3829 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Fitness Flooring</span></a> 3830 </li> 3831 3832 <li class="level-2 w-4/12 pr-6 pb-6"> 3833 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 3834 title="Dance Flooring | Marley Floor" 3835 class="level-2 block"> 3836 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/dance-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/dance-main-category.jpg" alt="Dance Flooring | Marley Floor" title="Dance Flooring | Marley Floor" /></picture> 3837 3838 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Flooring | Marley Floor</span></a> 3839 </li> 3840 3841 <li class="level-2 w-4/12 pr-6 pb-6"> 3842 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 3843 title="Sport & Court Flooring" 3844 class="level-2 block"> 3845 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Sport_Court_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Sport_Court_Category.jpg" alt="Sport & Court Flooring" title="Sport & Court Flooring" /></picture> 3846
3847 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Court Flooring</span></a> 3848 </li> 3849 3850 <li class="level-2 w-4/12 pr-6 pb-6"> 3851 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 3852 title="Martial Arts Mats " 3853 class="level-2 block"> 3854 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_martial_arts_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_martial_arts_flooring_1.jpg" alt="Martial Arts Mats " title="Martial Arts Mats " /></picture> 3855 3856 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3857 </li> 3858 3859 <li class="level-2 w-4/12 pr-6 pb-6"> 3860 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 3861 title="Cheer Mats" 3862 class="level-2 block"> 3863 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Cheer_Mats_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Cheer_Mats_Category.jpg" alt="Cheer Mats" title="Cheer Mats" /></picture> 3864 3865 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Cheer Mats</span></a> 3866 </li> 3867 3868 <li class="level-2 w-4/12 pr-6 pb-6"> 3869 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 3870 title="Wrestling Mats" 3871 class="level-2 block"> 3872 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_1.jpg" alt="Wrestling Mats" title="Wrestling Mats" /></picture> 3873
3874 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3875 </li> 3876 3877 3878 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/shop-by-activity.html" >View All</a> 3879 3880 3881 </ul> 3882 </li> 3883 3884 3885 3886 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3887 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3888 > 3889 <a 3890 title="Floors by Space" 3891 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3892 3893 > 3894 Floors by Space 3895 <span class="inline items-center rotate-180 absolute"> 3896 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3897 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3898<title>chevron-down</title></svg> 3899 </span> 3900 </a> 3901 3902 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3903 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Space</span> 3904 3905 <li class="level-2 w-4/12 pr-6 pb-6"> 3906 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 3907 title="Kitchen Flooring" 3908 class="level-2 block"> 3909 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/kitchen-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/kitchen-main-category.jpg" alt="Kitchen Flooring" title="Kitchen Flooring" /></picture> 3910 3911 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kitchen Flooring</span></a> 3912 </li> 3913 3914 <li class="level-2 w-4/12 pr-6 pb-6"> 3915 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 3916 title="Bathroom Flooring" 3917 class="level-2 block"> 3918 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/bathroom-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/bathroom-main-category.jpg" alt="Bathroom Flooring" title="Bathroom Flooring" /></picture> 3919
3920 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Bathroom Flooring</span></a> 3921 </li> 3922 3923 <li class="level-2 w-4/12 pr-6 pb-6"> 3924 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 3925 title="Commercial Flooring" 3926 class="level-2 block"> 3927 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_commercial_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_commercial_flooring_1.jpg" alt="Commercial Flooring" title="Commercial Flooring" /></picture> 3928 3929 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Flooring</span></a> 3930 </li> 3931 3932 <li class="level-2 w-4/12 pr-6 pb-6"> 3933 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 3934 title="Gym Flooring" 3935 class="level-2 block"> 3936 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/gym-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/gym-main-category_1.jpg" alt="Gym Flooring" title="Gym Flooring" /></picture> 3937 3938 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Flooring</span></a> 3939 </li> 3940 3941 <li class="level-2 w-4/12 pr-6 pb-6"> 3942 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 3943 title="Garage Flooring" 3944 class="level-2 block"> 3945 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_garage_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_garage_flooring_1.jpg" alt="Garage Flooring" title="Garage Flooring" /></picture> 3946
3947 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring</span></a> 3948 </li> 3949 3950 <li class="level-2 w-4/12 pr-6 pb-6"> 3951 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 3952 title="Outdoor Flooring" 3953 class="level-2 block"> 3954 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_outdoor_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_outdoor_flooring_1.jpg" alt="Outdoor Flooring" title="Outdoor Flooring" /></picture> 3955 3956 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Flooring</span></a> 3957 </li> 3958 3959 3960 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/shop-by-space.html" >View All</a> 3961 3962 3963 </ul> 3964 </li> 3965 3966 3967 3968 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3969 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3970 > 3971 <a 3972 title="Underlayment & Flooring Accessories" 3973 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3974 3975 > 3976 Underlayment & Flooring Accessories 3977 <span class="inline items-center rotate-180 absolute"> 3978 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3979 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3980<title>chevron-down</title></svg> 3981 </span> 3982 </a> 3983 3984 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3985 <style>#html-body [data-pb-style=LTPNQ8C]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=R2I2333]{border-style:none}#html-body [data-pb-style=K97631E],#html-body [data-pb-style=WX0AV4C]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=R2I2333]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="LTPNQ8C"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="R2I2333"><a href="https://www.flooringinc.com/pro-advantage" target="" data-link-type="page" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="WX0AV4C" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="K97631E" loading="lazy"></picture></a></figure></div> </div> 3986 3987 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3988 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Underlayment & Flooring Accessories</span> 3989 3990 <li class="level-2 w-4/12 pr-6 pb-6"> 3991 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 3992 title="Flooring Adhesives & Glue" 3993 class="level-2 block"> 3994 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_adhesives_glue_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_adhesives_glue_1.jpg" alt="Flooring Adhesives & Glue" title="Flooring Adhesives & Glue" /></picture> 3995 3996 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Adhesives & Glue</span></a> 3997 </li> 3998 3999 <li class="level-2 w-4/12 pr-6 pb-6"> 4000 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 4001 title="Floor and Mat Tape" 4002 class="level-2 block"> 4003 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_tape_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_tape_1.jpg" alt="Floor and Mat Tape" title="Floor and Mat Tape" /></picture> 4004 4005 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor and Mat Tape</span></a> 4006 </li> 4007 4008 <li class="level-2 w-4/12 pr-6 pb-6"> 4009 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 4010 title="Installation Accessories" 4011 class="level-2 block"> 4012 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_accessories_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_accessories_1.jpg" alt="Installation Accessories" title="Installation Accessories" /></picture> 4013
4014 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Installation Accessories</span></a> 4015 </li> 4016 4017 <li class="level-2 w-4/12 pr-6 pb-6"> 4018 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 4019 title="Floor Trims & Moldings" 4020 class="level-2 block"> 4021 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_trims_moldings_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_trims_moldings_1.jpg" alt="Floor Trims & Moldings" title="Floor Trims & Moldings" /></picture> 4022 4023 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor Trims & Moldings</span></a> 4024 </li> 4025 4026 <li class="level-2 w-4/12 pr-6 pb-6"> 4027 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 4028 title="Flooring Underlayment" 4029 class="level-2 block"> 4030 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_underlayment_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_underlayment_1.jpg" alt="Flooring Underlayment" title="Flooring Underlayment" /></picture> 4031 4032 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Underlayment</span></a> 4033 </li> 4034 4035 <li class="level-2 w-4/12 pr-6 pb-6"> 4036 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 4037 title="Flooring Cleaners" 4038 class="level-2 block"> 4039 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_cleaners_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_cleaners_1.jpg" alt="Flooring Cleaners" title="Flooring Cleaners" /></picture> 4040
4041 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Cleaners</span></a> 4042 </li> 4043 4044 4045 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/installation-care.html" >View All</a> 4046 4047 4048 </ul> 4049 </li> 4050 4051 4052 4053 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 4054 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 4055 > 4056 <a 4057 title="Specials" 4058 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 4059 4060 > 4061 Specials 4062 <span class="inline items-center rotate-180 absolute"> 4063 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 4064 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4065<title>chevron-down</title></svg> 4066 </span> 4067 </a> 4068 4069 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 4070 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Specials</span> 4071 4072 <li class="level-2 w-4/12 pr-6 pb-6"> 4073 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 4074 title="Flooring Deals" 4075 class="level-2 block"> 4076 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Hot_Buys_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Hot_Buys_2.jpg" alt="Flooring Deals" title="Flooring Deals" /></picture> 4077 4078 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Deals</span></a> 4079 </li> 4080 4081 <li class="level-2 w-4/12 pr-6 pb-6"> 4082 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 4083 title="American Made" 4084 class="level-2 block"> 4085 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Made_in_the_USA_2_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Made_in_the_USA_2_1.jpg" alt="American Made" title="American Made" /></picture> 4086
4087 <span class="block text-sm font-medium no-underline text-darkblack pr-4">American Made</span></a> 4088 </li> 4089 4090 <li class="level-2 w-4/12 pr-6 pb-6"> 4091 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 4092 title="Quick Ship" 4093 class="level-2 block"> 4094 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Quick_Ship_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Quick_Ship_1.jpg" alt="Quick Ship" title="Quick Ship" /></picture> 4095 4096 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Quick Ship</span></a> 4097 </li> 4098 4099 <li class="level-2 w-4/12 pr-6 pb-6"> 4100 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 4101 title="New Arrivals" 4102 class="level-2 block"> 4103 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/New_Arrivals_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/New_Arrivals_1_1.jpg" alt="New Arrivals" title="New Arrivals" /></picture> 4104 4105 <span class="block text-sm font-medium no-underline text-darkblack pr-4">New Arrivals</span></a> 4106 </li> 4107 4108 4109 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/specials.html" >View All</a> 4110 4111 4112 </ul> 4113 </li> 4114 4115 4116 4117 4118 <!--<a class="view-all main-cats mt-2 underline px-6 text-size12 font-medium text-darkblack" href="https://www.flooringinc.com/all-categories.html" >View All</a>-->
4118 4119 4120 </ul> 4121 </div> 4122 4123 </div> 4124 </div> 4125 </template> 4126 </div> 4127 <div class="menu_static_links"> 4128 <style>#html-body [data-pb-style=QGH21I8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="QGH21I8"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 4129<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 4130<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 4131</ul></div></div></div> </div> 4132 </nav> 4133 </div> 4134 4135</div>
4136<script> 4137 'use strict'; 4138 4139 const initMenuDesktop_6ac1515521319 = () => { 4140 return { 4141 hoverTopPosition: '100%', 4142 setActiveMenu(menuNode) { 4143 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4144 return link.href === window.location.href.split('?')[0]; 4145 }).map(item => { 4146 if (!item.classList.contains('level-0')) { 4147 item.classList.add('underline'); 4148 } 4149 item.closest('div.level-0') && 4150 item.closest('div.level-0').classList.add('border-secondary'); 4151 }); 4152 } 4153 } 4154 } 4155</script>
vendor: 1 bytes, line 4155
4155
4156<script> 4157 // Function to remove 'display-first' class from other list items 4158 function removeDisplayFirst() { 4159 var listItems = document.querySelectorAll('.level1'); 4160 listItems.forEach(function(item) { 4161 if (item.id !== this.id) { 4162 item.classList.remove('display-first'); 4163 } 4164 }); 4165 } 4166</script>
4166 4167 <!--Search--> 4168 <div class="w-full" 4169 id="search-content" 4170 :class="{ 'block': searchOpen}" 4171 @click.outside="searchOpen = false" 4172 > 4173 4174<div class="py-0 px-0 pl-5 mx-auto text-black" x-data="initMirasvitSearch()" @click.away="closeSearch"> 4175 <form class="form minisearch relative" id="search_mini_form" action="https://www.flooringinc.com/catalogsearch/result/" method="get" autocomplete="off"> 4176 <label class="hidden" for="search" data-role="minisearch-label"> 4177 <span>Search</span> 4178 </label> 4179 <input id="search" x-ref="searchInput" type="search" name="q" value="" placeholder="Find it here…" maxlength="128" class="w-full px-5 py-0 text-sm leading-normal transition appearance-none rounded-md 4180 focus:outline-none focus:border-transparent font-normal" x-on:keyup.debounce.300="doSearch($refs.searchInput.value)" x-on:click.debounce.150="openSearch" x-on:keydown.debounce.100="startSearch($refs.searchInput.value)"/> 4181 <button class="action search absolute">btn</button> 4182 </form> 4183 4184 <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="search_box transition appearance-none absolute"> 4185 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 4186 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 4187 x-show="isLoading" 4188 x-transition:enter="ease-out duration-200" 4189 x-transition:enter-start="opacity-0" 4190 x-transition:enter-end="opacity-100" 4191 x-transition:leave="ease-in duration-200" 4192 x-transition:leave-start="opacity-100" 4193 x-transition:leave-end="opacity-0"> 4194 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 4195<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 4196 <g fill="none" fill-rule="evenodd"> 4197 <g transform="translate(1 1)" stroke-width="2"> 4198 <circle cx="5" cy="50" r="5"> 4199 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 4200 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 4201 </circle> 4202 <circle cx="27" cy="5" r="5"> 4203 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 4204 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 4205 </circle> 4206 <circle cx="49" cy="50" r="5"> 4207 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 4208 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 4209 </circle> 4210 </g> 4211 </g> 4212<title>loader</title></svg> 4213 <div class="ml-10 text-primary text-xl"> 4214 Loading... </div> 4215</div> 4216 4217 <template x-if="hotSearch"> 4218 <div class="hotSearch"> 4219 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4220 Hot Searches </p> 4221 <div class="my-3 flex flex-wrap"> 4222 </div> 4223 </div> 4224 </template> 4225 4226 <template x-if="searchResults"> 4227 <div class="search_box_content w-full flex flex-wrap "> 4228 <div class="search_box_left relative"> 4229 <p class="product_title text-size20 font-medium text-black"> 4230 Top Results <template x-if="searchProducts != ''"> 4231 <small class="text-size16 font-medium text-black hidden">(<span x-html="searchProductsTotal"></span>)</small> 4232 </template> 4233 </p> 4234 <div class="viewAll absolute right-0"> 4235 <div> 4236 <a x-bind:href="numberResultsUrl"> 4237 <p class="text-size14 font-normal text-black underline number-results" x-html="numberResults"></p> 4238 </a> 4239 </div> 4240 </div> 4241 <div class="search_box_left_content lg:grid-cols-6"> 4242 <template x-for="item in searchProducts"> 4243 <div class="search_products flex"> 4244 <a x-bind:href="`${item.url}`" class=""> 4245 <div class="w-full product-image"> 4246 <img x-bind:src="`${item.imageUrl}`" width="275" height="182" class="w-full"/> 4247 </div> 4248 </a> 4249 <div class="w-full product-content"> 4250 <a x-bind:href="`${item.url}`" class=""><h4 class="product-name text-size14 font-medium text-black" x-html="item.name"></h4></a> 4251 <template x-if="item.rating > 0"> 4252 <div class="ratings flex item-center"> 4253 <div x-html="item.rating"></div>(<span x-html="item.reviews"></span>) 4254 </div> 4255 </template> 4256 <template x-if="item.orderFreeSample > 0"> 4257 <div x-cloak x-data="{showModal: false, htmlContent: '',pid: item.proId }"> 4258 <button type="button" class="order-sample-link text-size14 font-medium text-blacck mb-1" x-on:click="showModal = true,fetchHtmlContent(pid)">Order Free Sample</button> 4259 <div class="modal order-free-sample-popup z-50" x-show="showModal"> 4260 <div class="modal-overlay" x-on:click="showModal = false"></div> 4261 <button class="closemodal" type="button" x-on:click="showModal = false">Close X</button> 4262 <div class="modal-content"> 4263 <div x-html="htmlContent" :class="'htmlcontent' + item.proId"></div> 4264 </div> 4265 </div> 4266 </div> 4267 </template> 4268 <!-- <p class="mt-2 text-gray-600 text-xs truncate" x-html="item.description"></p> --> 4269 <template x-if="item.colorCount > 0"> 4270 <p class="text-size13 font-normal text-black truncate"> 4271 Available in <span x-html="item.colorCount"></span> colors 4272 </p> 4273 </template> 4274 <!--<div class="truncate-content"> 4275 <p class="text-size13 font-normal text-black truncate" x-html="item.dealOfTheMonth"></p> 4276 <p class="text-size13 font-normal text-black truncate" x-html="item.freeShipping"></p> 4277 <p class="text-size13 font-normal text-black truncate" x-html="item.shipNextDay"></p> 4278 </div>--> 4279 <div class="price_container flex item-center justify-between">
4280 <span class="text-size14 font-semibold text-black" x-html="item.price"></span> 4281 </div> 4282 </div> 4283 4284 </div> 4285 </template> 4286 <template x-if="searchProducts == ''"> 4287 <p>No results found.</p> 4288 </template> 4289 </div> 4290 </div> 4291 <div class="results-rightside"> 4292 <template x-if="searchCategories != ''"> 4293 <div class="mb-6 category-rest"> 4294 <p class="categorie-title text-size20 font-medium text-black pb-2"> 4295 In Categories <small class="text-size16 font-medium text-black hidden">(<span x-html="searchCategoriesTotal"></span>)</small> 4296 </p> 4297 <div class="catgry-list"> 4298 <template x-for="category in searchCategories"> 4299 <a x-bind:href="`${category.url}`"> 4300 <div class="text-size14 font-normal text-black"> 4301 <span class="text-size14 font-normal text-black cursor-pointer" x-html="category.name.split('>').pop().trim()"></span> 4302 </div> 4303 </a> 4304 </template> 4305 </div> 4306 </div> 4307 </template> 4308 4309 <!-- <template x-if="searchPages != ''"> 4310 <div class="mb-6"> 4311 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4312 Pages <small class="text-size16 font-medium text-black">(<span x-html="searchPagesTotal"></span>)</small> 4313 </p> 4314 <div class="px-2"> 4315 <template x-for="page in searchPages"> 4316 <a x-bind:href="`${page.url}`"> 4317 <div class="my-2 flex flex-wrap"> 4318 <span class="text-size14 font-normal text-black cursor-pointer" x-html="page.name"></span> 4319 </div> 4320 </a> 4321 </template> 4322 </div> 4323 </div> 4324 </template> --> 4325 4326 <template x-if="searchPosts != ''"> 4327 <div class="search_box_right"> 4328 <p class="blog-title text-size20 font-medium text-black"> 4329 In Blogs <!-- <small class="<//?= $titleNumberCSS ?>">(<span x-html="searchPostsTotal"></span>)</small> --> 4330 </p> 4331 <div class="search_box_right_content"> 4332 <template x-for="item in searchPosts"> 4333 <div> 4334 <a x-bind:href="`${item.url}`" class="blog-items block"> 4335 <div> 4336 <span class="blog-name text-size14 font-normal text-black" x-html="item.name"></span> 4337 </div> 4338 </a> 4339 <span class="item_description text-size14 font-normal text-black opacity-50 mb-4 block" x-html="item.description"></span> 4340 </div> 4341 </template> 4342 </div> 4343 </div> 4344 </template> 4345 </div> 4346 4347 </div> 4348 </template> 4349 4350 <template x-if="noResults"> 4351 <div class="p-2 text-size20 font-medium text-black overflow-hidden"> 4352 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl" x-html="noResultsText"></p> 4353 </div> 4354 </template> 4355 </div> 4356</div> 4357
4358<script> 4359 function initMirasvitSearch() { 4360 return { 4361 //initialize Variables 4362 hotSearch: false, 4363 searchResults: false, 4364 noResults: false, 4365 isLoading: false, 4366 isOpen: false, 4367 blockConfig: {"query":"","priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"minSearchLength":3,"url":"https:\/\/www.flooringinc.com\/searchautocomplete\/ajax\/suggest\/","storeId":"1","delay":100,"isAjaxCartButton":false,"isShowCartButton":false,"isShowImage":true,"isShowPrice":true,"isShowSku":false,"isShowRating":true,"isShowDescription":true,"isShowStockStatus":false,"layout":"in-page","popularTitle":"Popular Suggestions","popularSearches":[],"isTypeaheadEnabled":false,"typeaheadUrl":"https:\/\/www.flooringinc.com\/searchautocomplete\/ajax\/typeahead\/","minSuggestLength":2,"currency":"USD","limit":24,"customerGroupId":0,"filterPosition":"filters_sidebar"}, 4368 xhttp: false, 4369 noResultsText: '', 4370 numberResults: '', 4371 numberResultsUrl: '', 4372 searchProductsTotal: '', 4373 searchCategoriesTotal: '', 4374 searchPagesTotal: '', 4375 4376 searchProducts: [], 4377 searchCategories: [], 4378 searchPages: [], 4379 searchPosts: [], 4380 4381 searchMap: { 4382 'magento_cms_page': 'Pages', 4383 'magento_catalog_category': 'Categories', 4384 'magento_catalog_product': 'Products', 4385 'magefan_blog_post': 'Posts' 4386 }, 4387 4388 hotSearchClickEvent: function (ev) { 4389 var hotSearchClick = event.currentTarget.innerText; 4390 document.getElementById("search").value = hotSearchClick; 4391 4392 this.doSearch(hotSearchClick); 4393 }, 4394 4395 openSearch: function () { 4396 //this.isOpen = true; 4397 searchValue = document.getElementById("search").value.length; 4398 4399 if (searchValue >= this.blockConfig.minSearchLength) { 4400 this.hideHotSearch(); 4401 } else { 4402 this.showHotSearch(); 4403 this.hideSearchResults(); 4404 } 4405 }, 4406 4407 startSearch: function (e) { 4408 if (e) { 4409 //this.isOpen = true; 4410 } 4411 }, 4412 4413 getSearchresult: function () { 4414 this.isOpen = true; 4415 }, 4416 4417 closeSearch: function () { 4418 this.isOpen = false; 4419 }, 4420 4421 showHotSearch: function () { 4422 this.hotSearch = true; 4423 }, 4424 4425 hideHotSearch: function () { 4426 this.hotSearch = false; 4427 4428 }, 4429 4430 showSearchResults: function () { 4431 this.searchResults = true; 4432 // this.isOpen = true; 4433 }, 4434 4435 hideSearchResults: function () { 4436 this.searchResults = false; 4437 // this.isOpen = false; 4438 }, 4439 4440 showNoResults: function () { 4441 this.noResults = true; 4442 }, 4443 4444 hideNoResults: function () { 4445 this.noResults = false; 4446 }, 4447 4448 setNoResultsText(text) { 4449 if (!text) { 4450 return; 4451 } 4452 console.log(text); 4453 this.noResultsText = text; 4454 this.isOpen = true; 4455 }, 4456 4457 setNumberResults(text) { 4458 this.numberResults = text; 4459 }, 4460 4461 setNumberResultsUrl(text) { 4462 this.numberResultsUrl = text; 4463 }, 4464 4465 resetSearchData: function () { 4466 // Reinitialize Variables to avoid wrong search results. 4467 this.searchPages = []; 4468 this.searchPagesTotal = 0; 4469 this.searchCategories = []; 4470 this.searchCategoriesTotal = 0; 4471 this.searchProducts = []; 4472 this.searchProductsTotal = 0; 4473 }, 4474 4475 doSearch: function (query) { 4476 this.isOpen = false;
4477 var self = this; 4478 // Min search length 4479 if (query.length < this.blockConfig.minSearchLength) { 4480 this.showHotSearch(); 4481 this.isLoading = false; 4482 this.hideSearchResults(); 4483 this.hideNoResults(); 4484 4485 return; 4486 } else { 4487 this.hideHotSearch(); 4488 this.isLoading = true; 4489 this.showSearchResults(); 4490 this.hideNoResults(); 4491 } 4492 4493 // AJAX for searchautocomplete/ajax/suggest/ 4494 if (this.xhttp) { 4495 try { 4496 this.xhttp.abort(); 4497 } catch { 4498 4499 } 4500 } 4501 this.xhttp = new XMLHttpRequest(); 4502 var xhttp = this.xhttp; 4503 4504 var queryEncoded = encodeURIComponent(query); 4505 var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; 4506 4507 xhttp.open("GET", url, true); 4508 xhttp.setRequestHeader("Content-Type", "application/json"); 4509 4510 xhttp.onreadystatechange = function () { 4511 if (this.readyState === 4 && this.status === 200) { 4512 4513 4514 // Response from ajax call in JSON. 4515 var response = JSON.parse(this.responseText); 4516 console.log(response); 4517 self.resetSearchData(); 4518 4519 // Product Search Results 4520 for (index in response.indexes) { 4521 4522 if (response.indexes[index].items.length > 0) { 4523 self.getSearchresult(); 4524 var res = response.indexes[index]; 4525 var map = null; 4526 4527 if (self.searchMap[res.identifier]) { 4528 map = self.searchMap[res.identifier]; 4529 self['search' + map] = res.items; 4530 self['search' + map + 'Total'] = res.totalItems; 4531 } 4532 } 4533 } 4534 4535 // Extract totalItems from response.textAll and format if > 999 4536 let textAll = response.textAll; 4537 if (response.textAll) { 4538 // Remove the â symbol (or any trailing characters you'd like to remove) 4539 textAll = textAll.replace(/â$/, '').trim(); 4540 // Find number within textAll using regex 4541 let totalItemsMatch = textAll.match(/\d+/); // Extracts the first number found 4542 if (totalItemsMatch) { 4543 let totalItemsFromTextAll = parseInt(totalItemsMatch[0], 10); 4544 if (totalItemsFromTextAll > 999) { 4545 // Format with comma if > 999 4546 textAll = textAll.replace(totalItemsMatch[0], totalItemsFromTextAll.toLocaleString()); 4547 } 4548 } 4549 console.log("Formatted textAll:", textAll); 4550 self.setNumberResults(textAll); // Update the UI with the formatted textAll 4551 } 4552 4553 self.isLoading = false; 4554 self.hideNoResults(); 4555 self.setNumberResults(textAll); 4556 self.setNumberResultsUrl(response.urlAll); 4557 4558 if (response.noResults) {console.log(response.textEmpty); 4559 self.showNoResults(); 4560 self.setNoResultsText(response.textEmpty); 4561 self.hideSearchResults(); 4562 4563 } 4564 }else{ 4565 this.isOpen = false; 4566 } 4567 }; 4568 4569 xhttp.send(); 4570 } 4571 } 4572 } 4573</script>
4573 </div> 4574 4575 <div class="flex items-center order-3"> 4576 <!--Compare Icon--> 4577 <a id="compare-link" 4578 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black" 4579 :class="{ 'invisible': !(itemCount > 0) }" 4580 href="https://www.flooringinc.com/catalog/product_compare/index/" 4581 title="Compare Products" 4582 x-data="initCompareHeader()" 4583 @private-content-loaded.window="receiveCompareData($event.detail.data)" 4584 > 4585 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4586 <path stroke-linecap="round" stroke-linejoin="round" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"/> 4587<title>scale</title></svg> 4588 4589 <span class="sr-only label"> 4590 Compare Products </span> 4591 4592 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4593 leading-none text-center text-white uppercase transform -translate-x-1 4594 translate-y-1/2 bg-yellow-500 rounded-full" 4595 > 4596 <span x-text="itemCount"></span> 4597 <span x-show="itemCount === 1" class="sr-only"> 4598 item </span> 4599 <span x-show="itemCount > 1" class="sr-only"> 4600 items </span> 4601 </span> 4602 </a> 4603 4604 <!--Search Icon--> 4605 <button id="menu-search-icon" 4606 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black hidden" 4607 @click.prevent=" 4608 searchOpen = !searchOpen; 4609 $nextTick(function () { document.querySelector('#search').select(); }); 4610 " 4611 > 4612 <span class="sr-only label"> 4613 Search </span> 4614 4615 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4616 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 4617<title>search</title></svg> 4618 </button> 4619 4620 <!--Customer Icon & Dropdown--> 4621
4621<script> 4622"use strict"; 4623 4624function initComponent() { 4625 return { 4626 cart: false, 4627 customer: false, 4628 receiveCustomerData(data) { 4629 if (data.cart) { 4630 this.cart = data.cart; 4631 } 4632 if (data.customer) { 4633 this.customer = data.customer; 4634 } 4635 } 4636 } 4637} 4638</script>
4638 4639 4640 4641<div x-data="{ open: false }" class="relative inline-block acc-dropdown"> 4642 <div class="arrow-cus"> 4643 <a 4644 href="https://www.flooringinc.com/customer/account/" 4645 id="customer-menu" 4646 class="block hover:text-black " 4647 @click.prevent="$dispatch('popup-register', 4648 { open: true,openRegister : false,openLogin : true,openCreate :true, 4649 openButtonLogin :true, 4650 openButtonRegister :false, 4651 })" 4652 :aria-expanded="open ? 'true' : 'false'" 4653 aria-label="My Account" 4654 > 4655 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" 4656 class="w-8 h-8 md:h-6 md:w-6" aria-hidden="true"> 4657 <circle fill="none" cx="12" cy="7" r="3"></circle> 4658 <path d="M12 2C9.243 2 7 4.243 7 7s2.243 5 5 5 5-2.243 5-5S14.757 2 12 2zM12 10c-1.654 4659 0-3-1.346-3-3s1.346-3 3-3 3 1.346 3 3S13.654 10 12 10zM21 21v-1c0-3.859-3.141-7-7-7h-4c-3.86 4660 0-7 3.141-7 7v1h2v-1c0-2.757 2.243-5 5-5h4c2.757 0 5 2.243 5 5v1H21z"> 4661 </path> 4662 </svg> 4663 4664 </a> 4665 </div> 4666 <nav class="absolute right-0 z-20 hidden w-40 pt-3 pb-4 mt-2 -mr-4 pl-4 pr-4 overflow-auto origin-top-right rounded-sm 4667 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter" 4668 :class="{ 'hidden' : !open }" 4669 @click.outside="open = false" 4670 x-cloak x-show="open" 4671 aria-labelledby="customer-menu" 4672 > 4673 4674<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4675 onclick="hyva.setCookie && hyva.setCookie( 4676 'login_redirect', 4677 window.location.href, 4678 1 4679 )" 4680 href="https://www.flooringinc.com/customer/account/index/"> 4681 Sign In </a> 4682<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4683 href="https://www.flooringinc.com/customer/account/create/" 4684 title="" 4685 > 4686 Create an Account </a> 4687 </nav> 4688</div> 4689 <!--Quote Cart Icon (show when activeCartType is 'quote' and quote has items)--> 4690 <template x-if="activeCartType === 'quote' && quoteCart.summary_count"> 4691 <a id="menu-cart-quote-icon" 4692 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black pl-3" 4693 :class="{ 4694 'hidden': !(activeCartType === 'quote' && quoteCart.summary_count), 4695 'block': activeCartType === 'quote' && quoteCart.summary_count }" 4696 href="https://www.flooringinc.com/amasty_quote/cart/" 4697 > 4698 <span class="checkout-icon"> 4699 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4700 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 4701<title>shopping-cart</title></svg> 4702 </span> 4703 <span x-text="quoteCart.summary_count" 4704 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4705 leading-none text-center text-white uppercase transform -translate-x-1 4706 translate-y-1/2 rounded-full bg-primary" 4707 :class="{ 4708 'hidden': !quoteCart.summary_count, 4709 'block': quoteCart.summary_count }" 4710 ></span> 4711 </a> 4712 </template> 4713 <!--Regular Cart Icon (show when activeCartType is 'cart' or when quote mode but quote empty - always show an icon)-->
4713 4714 <a id="menu-cart-icon" 4715 x-show="activeCartType === 'cart' || (activeCartType === 'quote' && !quoteCart.summary_count)" 4716 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block ml-6 no-underline hover:text-black" 4717 href="https://www.flooringinc.com/checkout/cart/index/" 4718 > 4719 <span class="sr-only label"> 4720 Cart </span> 4721 4722 <span class="cart-icon"> 4723 <img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/cart-icon.svg" alt="cart-icon" width="24" height="24"> 4724 <picture class="icon"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/arrow.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/arrow.png" alt="arrow" width="8" height="6" class="icon"></picture> 4725 </span> 4726 4727 <span x-text="cart.summary_count" 4728 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4729 leading-none text-center text-white uppercase transform -translate-x-1 4730 translate-y-1/2 rounded-full bg-primary" 4731 :class="{ 4732 'hidden': !cart.summary_count, 4733 'block': cart.summary_count }" 4734 ></span> 4735 </a> 4736 4737 </div> 4738 </div> 4739
4740 <!--Cart Drawer--> 4741
4741<script> 4742 function initCartDrawer() { 4743 return { 4744 open: false, 4745 isLoading: false, 4746 cart: {}, 4747 maxItemsToDisplay: 10, 4748 itemsCount: 0, 4749 totalCartAmount: 0, 4750 getData(data) { 4751 if (data.cart) { 4752 this.cart = data.cart; 4753 this.itemsCount = data.cart.items && data.cart.items.length || 0; 4754 this.totalCartAmount = this.cart.summary_count; 4755 //this.cart.summary_count = this.itemsCount; 4756 this.setCartItems(); 4757 } 4758 this.isLoading = false; 4759 }, 4760 cartItems: [], 4761 getItemCountTitle() { 4762 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.totalCartAmount) 4763 }, 4764 setCartItems() { 4765 if(this.cart.items){ 4766 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 4767 } else { 4768 this.cartItems = []; 4769 } 4770 if (this.maxItemsToDisplay > 0) { 4771 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 4772 } 4773 getCustomerData(['customer'], function(data) { 4774 if(data.messages.messages[0]){ 4775 var messagesType = data.messages.messages[0].type; 4776 var messagesText = data.messages.messages[0].text; 4777 if(messagesType === "success"){ 4778 dispatchMessages([ 4779 { 4780 type: messagesType, 4781 text: messagesText 4782 } 4783 ]); 4784 this.openCartDrawer(); 4785 } else { 4786 dispatchMessages([ 4787 { 4788 type: messagesType, 4789 text: messagesText 4790 } 4791 ]); 4792 } 4793 } 4794 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 4795 }); 4796 4797 if(document.querySelectorAll('.btn_cart')) { 4798 var addtocartnew = document.querySelectorAll('.btn_cart'); 4799 4800 addtocartnew.forEach(addtocartnew => { 4801 addtocartnew.addEventListener('click', () => { 4802 setTimeout(() => { 4803 }, 2500); 4804 }); 4805 }); 4806 } 4807 if(document.getElementById('product-addtocart-button')) { 4808 var addtocartnew2 = document.getElementById('product-addtocart-button'); 4809 4810 addtocartnew2.addEventListener('click', () => { 4811 setTimeout(() => { 4812 }, 2500); 4813 }); 4814 } 4815 4816 4817 }, 4818 deleteItemFromCart(itemId) { 4819 this.isLoading = true; 4820 4821 const formKey = hyva.getFormKey(); 4822 const postUrl = BASE_URL + 'amasty_quote/quote/removeFromMinicart'; 4823 fetch(postUrl, { 4824 "headers": { 4825 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4826 }, 4827 "body": "form_key=" + formKey + "&item_id=" + itemId, 4828 "method": "POST", 4829 "mode": "cors", 4830 "credentials": "include" 4831 }).then(response => { 4832 window.location.href = window.location.pathname; // Reload the page after item remove 4833 if (response.redirected) { 4834 window.location.href = response.url; 4835 } else if (response.ok) { 4836 return response.json(); 4837 } else { 4838 window.dispatchMessages && window.dispatchMessages([{ 4839 type: 'warning',
4840 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 4841 }]); 4842 this.isLoading = false; 4843 } 4844 }).then(result => { 4845 window.dispatchMessages && window.dispatchMessages([{ 4846 type: result.success ? 'success' : 'error', 4847 text: result.success 4848 ? 'You\u0020removed\u0020the\u0020item.' 4849 : result.error_message 4850 }], result.success ? 5000 : 0) 4851 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4852 }); 4853 }, 4854 toggleCartDrawer(event) { 4855 if (event.detail && event.detail.isOpen !== undefined) { 4856 if (event.detail.isOpen) { 4857 this.openCartDrawer() 4858 } else { 4859 this.open = false 4860 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 4861 } 4862 } else { 4863 this.openCartDrawer() 4864 } 4865 }, 4866 openCartDrawer() { 4867 this.open = true; 4868 this.$nextTick(() => { 4869 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 4870 }) 4871 }, 4872 closeCartDrawer() { 4873 this.$dispatch('toggle-cart', { isOpen: false }) 4874 } 4875 } 4876 } 4877 function getCustomerData(sections, callback) { 4878 fetch('/customer/section/load/?sections=') 4879 .then(response => response.json()) 4880 .then(data => callback(data)) 4881 .catch(error => console.error('Error fetching customer data:', error)); 4882 } 4883</script>
4883 4884<section x-cloak 4885 x-show="cart" 4886 id="cart-drawer" 4887 x-data="initCartDrawer()" 4888 @private-content-loaded.window="getData($event.detail.data)" 4889 @toggle-cart.window="toggleCartDrawer($event)" 4890 @keydown.window.escape="closeCartDrawer" 4891> 4892 <div role="dialog" 4893 aria-labelledby="cart-drawer-title" 4894 aria-modal="true" 4895 @click.outside="open=false" 4896 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4897 <div class="backdrop" 4898 x-show="open" 4899 x-transition:enter="ease-in-out duration-500" 4900 x-transition:enter-start="opacity-0" 4901 x-transition:enter-end="opacity-100" 4902 x-transition:leave="ease-in-out duration-500" 4903 x-transition:leave-start="opacity-100" 4904 x-transition:leave-end="opacity-0" 4905 role="button" 4906 @click="closeCartDrawer" 4907 aria-label="Close minicart"></div> 4908 <div class="relative w-screen max-w-md shadow-2xl" 4909 x-show="open" 4910 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4911 x-transition:enter-start="translate-x-full" 4912 x-transition:enter-end="translate-x-0" 4913 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4914 x-transition:leave-start="translate-x-0" 4915 x-transition:leave-end="translate-x-full" 4916 > 4917 <div 4918 x-show="open" 4919 x-transition:enter="ease-in-out duration-500" 4920 x-transition:enter-start="opacity-0" 4921 x-transition:enter-end="opacity-100" 4922 x-transition:leave="ease-in-out duration-500" 4923 x-transition:leave-start="opacity-100" 4924 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex pr-6 pt-19"> 4925 <button @click="open=false" aria-label="Close panel" 4926 class="p-0 text-black transition duration-150 ease-in-out hover:text-black"> 4927 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 4928 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4929<title>x</title></svg> 4930 </button> 4931 </div> 4932 <div class="flex flex-col h-full bg-lightblue"> 4933 4934 <header class="px-4 pt-19 pb-6"> 4935 <h2 id="cart-drawer-title" class="text-size18 font-medium text-black"> 4936 <template x-if="!itemsCount"> 4937 <div>My Cart</div></template> 4938<template x-if="itemsCount"> 4939 <div class="minicart-item-count"><span class="minicart-total-cart-amount" x-html="totalCartAmount"></span> <span x-show="totalCartAmount > 1">items</span><span x-show="totalCartAmount == 1">item</span> in cart</div> 4940</template> 4941 <span class="items-total text-xs text-black" 4942 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 4943 x-text="getItemCountTitle()"> 4944 </span> 4945 </h2> 4946 </header> 4947 4948 4949<template x-if="!itemsCount"> 4950 <div class="relative px-4 py-6 border-bs sm:px-6 border-container"> 4951 Cart is empty </div> 4952 </template> 4953 <div class="relative grid overflow-y-auto overflow-x-hidden bg-lightblue cart-items"> 4954 <template x-for="item in cartItems"> 4955 <div class="flex items-start cart-item px-4 pt-5 pb-6 transition duration-150 4956 ease-in-out"> 4957 <template x-if="!item.product_has_url"> 4958 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4959 <img 4960 :src="item.product_image.src" 4961 :width="item.product_image.width" 4962 :height="item.product_image.height" 4963 loading="lazy" 4964 /> 4965 </a> 4966 </template> 4967 <template x-if="item.product_has_url == 1"> 4968 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4969 <img 4970 :src="item.product_image.src" 4971 :width="item.product_image.width" 4972 :height="item.product_image.height" 4973 loading="lazy" 4974 /> 4975 </a> 4976 </template> 4977 <div class="w-3/4"> 4978 <div> 4979 <template x-if="!item.product_has_url"> 4980 <a :href="item.product_url" class="prosku"> 4981 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4982 </a> 4983 </template> 4984 <template x-if="item.product_has_url == 1"> 4985 <a :href="item.product_url" class="prosku"> 4986 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4987 </a> 4988 </template> 4989 </div> 4990 <template x-for="option in item.options"> 4991 <div class="flex pt-2 pb-1 item-options w-full" 4992 x-show="option.label !== '' && !['Weight', 'Configurable Product SKU', 'Configurable Product Name', 'Configurable Product Category', 'Main Configurable Product Image Url', 'Main Configurable Product Image', 'Configurable Product Image', 'Color Display Name'].includes(option.label)"> 4993 <div class="flex w-full"> 4994 <p class="text-size14 font-medium text-black" x-show="option.label == 'Custom Length' || option.label == 'Roll Width' || option.label == 'Roll Length'" x-text="option.label + ':'"></p> 4995 <template x-if="!item.product_has_url"> 4996 <a :href="item.product_url" 4997 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 4998 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 4999 </template> 5000 <template x-if="item.product_has_url == 1"> 5001 <a :href="item.product_url" 5002 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 5003 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5004 </template> 5005 </div> 5006 </div> 5007 </template> 5008 <p class="pb-4 pt-1"><span x-html="item.product_price" class="text-size20 font-bold text-custom-blue pricebox"></span></p> 5009 <div class="text-xl flex qty-fields items-center"> 5010 <p><span class="qty text-size14 font-semibold text-darkblack mr-1">QTY</span><span x-html="item.qty" class="qty-label text-center text-size16 font-semibold text-darkblack inline-block"></span></p> 5011 <div class="ml-auto"> 5012 <button 5013 @click="deleteItemFromCart(item.item_id)" 5014 > 5015 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Delete.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Delete.png" alt="Delete" width="12" height="16"></picture> 5016 </button> 5017 </div> 5018 </div> 5019 5020 </div> 5021 </div> 5022 </template> 5023 </div> 5024<template x-if="itemsCount"> 5025 5026 <div class="relative bg-lightblue grid pt-3 pb-4"> 5027 <div class="w-full transition duration-150 ease-in-out sub-total"> 5028 <p class="text-darkgray text-size16 font-normal flex items-center pb-2">Subtotal: <span x-html="cart.subtotal" class="font-bold text-size22 text-custom-blue"></span></p> 5029 </div> 5030 5031 <div class="w-full transition duration-150 ease-in-out 5032 chekout-btn"> 5033 <a href="https://www.flooringinc.com/checkout/cart/" 5034 class="no-underline block relative font-medium text-size16 text-custom-white bg-custom-blue"> 5035 Proceed to Cart </a> 5036 </div> 5037 </div> 5038</template> 5039 </div> 5040 </div> 5041 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 5042 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 5043 x-show="isLoading" 5044 x-transition:enter="ease-out duration-200" 5045 x-transition:enter-start="opacity-0" 5046 x-transition:enter-end="opacity-100" 5047 x-transition:leave="ease-in duration-200" 5048 x-transition:leave-start="opacity-100" 5049 x-transition:leave-end="opacity-0"> 5050 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 5051<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 5052 <g fill="none" fill-rule="evenodd"> 5053 <g transform="translate(1 1)" stroke-width="2"> 5054 <circle cx="5" cy="50" r="5">
5055 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 5056 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 5057 </circle> 5058 <circle cx="27" cy="5" r="5"> 5059 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 5060 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 5061 </circle> 5062 <circle cx="49" cy="50" r="5"> 5063 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 5064 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 5065 </circle> 5066 </g> 5067 </g> 5068<title>loader</title></svg> 5069 <div class="ml-10 text-primary text-xl"> 5070 Loading... </div> 5071</div> 5072 </div> 5073 </template> 5074</section> 5075 5076 <!--Authentication Pop-Up--> 5077
5077<script> 5078 function initAuthentication() { 5079 return { 5080 open: false, 5081 forceAuthentication: false, 5082 checkoutUrl: 'https://www.flooringinc.com/checkout/index/', 5083 errors: 0, 5084 hasCaptchaToken: 0, 5085 displayErrorMessage: false, 5086 errorMessages: [], 5087 setErrorMessages: function setErrorMessages(messages) { 5088 this.errorMessages = [messages]; 5089 this.displayErrorMessage = this.errorMessages.length; 5090 }, 5091 submitForm: function () { 5092 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5093 const $form = document.querySelector('#login-form-new'); 5094 5095 if (this.errors === 0) { 5096 this.dispatchLoginRequest($form); 5097 } 5098 }, 5099 onPrivateContentLoaded: function (data) { 5100 const isLoggedIn = data.customer && data.customer.firstname; 5101 if (data.cart && !isLoggedIn) { 5102 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 5103 } 5104 }, 5105 redirectIfAuthenticated: function (event) { 5106 if (event.detail && event.detail.url) { 5107 this.checkoutUrl = event.detail.url; 5108 } 5109 if (!this.forceAuthentication) { 5110 window.location.href = this.checkoutUrl; 5111 } 5112 }, 5113 dispatchLoginRequest: function(form) { 5114 this.isLoading = true; 5115 const username = this.$refs['customer-email'].value; 5116 const password = this.$refs['customer-password'].value; 5117 const formKey = hyva.getFormKey(); 5118 const bodyFields = { 5119 'username': username, 5120 'password': password, 5121 'formKey': formKey 5122 }; 5123 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 5124 const recaptchaField = fieldName && form[fieldName]; 5125 if (recaptchaField) { 5126 bodyFields[fieldName] = recaptchaField.value; 5127 } 5128 fetch('https://www.flooringinc.com/customer/ajax/login/', { 5129 method: 'POST', 5130 headers: { 5131 'Content-Type': 'application/json', 5132 'X-Requested-With': 'XMLHttpRequest' 5133 }, 5134 body: JSON.stringify(bodyFields) 5135 } 5136 ).then(response => { 5137 return response.json() 5138 } 5139 ).then(data=> { 5140 this.isLoading = false; 5141 if (data.errors) { 5142 dispatchMessages([{ 5143 type: 'error', 5144 text: data.message 5145 }], 5000); 5146 this.errors = 1; 5147 this.hasCaptchaToken = 0; 5148 } else { 5149 window.location.href = this.checkoutUrl; 5150 } 5151 }); 5152 } 5153 } 5154 } 5155</script>
5155 5156<section id="authentication-popup" 5157 x-data="initAuthentication()" 5158 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 5159 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 5160 @keydown.window.escape="open = false" 5161> 5162 <div role="dialog" 5163 aria-modal="true" 5164 @click.outside="open = false" 5165 class="inset-y-0 right-0 z-30 flex max-w-full" 5166 :class="{'fixed': open }" x-cloak x-show="open" 5167 > 5168 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 5169 x-show="open" 5170 x-cloak="" 5171 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5172 x-transition:enter-start="translate-x-full" 5173 x-transition:enter-end="translate-x-0" 5174 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5175 x-transition:leave-start="translate-x-0" 5176 x-transition:leave-end="translate-x-full" 5177 > 5178 <div 5179 x-show="open" 5180 x-cloak="" 5181 x-transition:enter="ease-in-out duration-500" 5182 x-transition:enter-start="opacity-0" 5183 x-transition:enter-end="opacity-100" 5184 x-transition:leave="ease-in-out duration-500" 5185 x-transition:leave-start="opacity-100" 5186 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> 5187 <button @click="open = false;" aria-label="Close panel" 5188 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5189 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 5190 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5191<title>x</title></svg> 5192 </button> 5193 </div> 5194 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 5195 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 5196 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 5197 <strong class="font-medium">Checkout using your account</strong> 5198 </p> 5199 5200 <form class="form form-login" 5201 method="post" 5202 @submit.prevent="submitForm();" 5203 id="login-form-new" 5204 > 5205 <div class="fieldset login"> 5206 <div class="field email required"> 5207 <label class="label" for="form-login-username" form="login-form" > 5208 <span>Email Address</span> 5209 </label> 5210 <div class="control"> 5211 <input name="username" 5212 id="form-login-username" 5213 x-ref="customer-email" 5214 @change="errors = 0" 5215 type="email" 5216 required 5217 class="form-input input-text" 5218 > 5219 </div> 5220 </div> 5221 <div class="field password required"> 5222 <label for="form-login-password" class="label" form="login-form"> 5223 <span>Password</span> 5224 </label> 5225 <div class="control"> 5226 <input name="password" 5227 id="form-login-password" 5228 type="password" 5229 class="form-input input-text" 5230 required 5231 x-ref="customer-password" 5232 @change="errors = 0" 5233 > 5234 </div> 5235 </div> 5236 5237 <input name="context" type="hidden" value="checkout" /> 5238 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 5239 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 5240 > 5241 Sign In </button> 5242 <a href="https://www.flooringinc.com/customer/account/forgotpassword/" 5243 > 5244 Forgot Your Password? </a> 5245 </div> 5246 5247 </div> 5248 </form> 5249 </div> 5250 <div class="mx-4"> 5251 </div> 5252 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
5253 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 5254 <strong class="font-medium">Checkout as a new customer</strong> 5255 </p> 5256 5257 <div class="block-content"> 5258 <p class="mb-1"> 5259 Creating an account has many benefits: </p> 5260 <ul class="list-disc pl-5"> 5261 <li> See order and shipping status</li> 5262 <li> Track order history</li> 5263 <li> Check out faster</li> 5264 </ul> 5265 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 5266 <a href="https://www.flooringinc.com/customer/account/create/" 5267 class="inline-flex btn btn-primary"> 5268 Create an Account </a> 5269 </div> 5270 </div> 5271 </div> 5272 </div> 5273 </div> 5274 </div> 5275</section> 5276 5277 <!--Cart Quote Drawer--> 5278
5278<script> 5279 function initQuoteCartDrawer() { 5280 return { 5281 open: false, 5282 cartData: {}, 5283 getQuoteCartData(data) { 5284 if (data.quotecart) { 5285 this.cartData = data.quotecart 5286 this.setCartItems(); 5287 } 5288 }, 5289 cartItems: [], 5290 setCartItems() { 5291 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 5292 }, 5293 deleteItemFromCart(itemId) { 5294 var formKey = document.querySelector('input[name=form_key]').value; 5295 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 5296 "headers": { 5297 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5298 }, 5299 "body": "form_key="+ formKey + "&item_id="+itemId, 5300 "method": "POST", 5301 "mode": "cors", 5302 "credentials": "include" 5303 }).then(function (response) { 5304 if (response.redirected) { 5305 window.location.href = response.url; 5306 } else if (response.ok) { 5307 return response.json(); 5308 } else { 5309 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5310 [{ 5311 type: "warning", 5312 text: "Could not remove item from quote." 5313 }], 5000 5314 ); 5315 } 5316 }).then(function (response) { 5317 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5318 [{ 5319 type: response.success ? "success" : "error", 5320 text: response.success 5321 ? "You removed the item." 5322 : response.error_message 5323 }], 5000 5324 ); 5325 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5326 window.dispatchEvent(reloadCustomerDataEvent); 5327 }); 5328 } 5329 } 5330 } 5331</script>
5331 5332<section id="cart-quote-drawer" 5333 x-data="initQuoteCartDrawer()" 5334 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 5335 @toggle-quote-cart.window="open=true;" 5336 @keydown.window.escape="open=false" 5337> 5338 <template x-if="cartData && cartData.summary_count"> 5339 <div role="dialog" 5340 aria-labelledby="cart-drawer-title" 5341 aria-modal="true" 5342 @click.away="open = false" 5343 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 5344 <div class="backdrop" 5345 x-show="open" 5346 x-transition:enter="ease-in-out duration-500" 5347 x-transition:enter-start="opacity-0" 5348 x-transition:enter-end="opacity-100" 5349 x-transition:leave="ease-in-out duration-500" 5350 x-transition:leave-start="opacity-100" 5351 x-transition:leave-end="opacity-0" 5352 @click="open = false" 5353 aria-label="Close panel"></div> 5354 <div class="relative w-screen max-w-md shadow-2xl" 5355 x-show="open" 5356 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5357 x-transition:enter-start="translate-x-full" 5358 x-transition:enter-end="translate-x-0" 5359 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5360 x-transition:leave-start="translate-x-0" 5361 x-transition:leave-end="translate-x-full" 5362 > 5363 <div 5364 x-show="open" 5365 x-transition:enter="ease-in-out duration-500" 5366 x-transition:enter-start="opacity-0" 5367 x-transition:enter-end="opacity-100" 5368 x-transition:leave="ease-in-out duration-500" 5369 x-transition:leave-start="opacity-100" 5370 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 5371 <button @click="open = false" aria-label="Close panel" 5372 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5373 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 5374 <path stroke-linecap="round" stroke-linejoin="round" 5375 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 5376 </path> 5377 </svg> 5378 </button> 5379 </div> 5380 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 5381 <header class="px-4 sm:px-6"> 5382 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 5383 My Quote Cart </div> 5384 </header> 5385 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 5386 sm:gap-8 sm:px-6 border-container"> 5387 <template x-for="item in cartItems"> 5388 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 5389 ease-in-out rounded-lg hover:bg-gray-100"> 5390 <a :href="item.product_url" class="w-1/4"> 5391 <img 5392 :src="item.product_image.src" 5393 :width="item.product_image.width" 5394 :height="item.product_image.height" 5395 loading="lazy" 5396 /> 5397 </a> 5398 <div class="w-3/4 relative"> 5399 <div> 5400 <div class="text-xl"> 5401 <a :href="item.product_url" class="hover:underline"> 5402 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 5403 </a> 5404 </div> 5405 <div class="text-sm"><span x-html="item.product_sku"></div> 5406 </div> 5407 <template x-for="option in item.options"> 5408 <div class="pt-2"> 5409 <p class="font-semibold" x-text="option.label + ':'"></p> 5410 <p class="text-secondary" x-html="option.value"></p> 5411 </div> 5412 </template> 5413 <div><span x-html="item.product_price"></span></div> 5414 <div class="pt-4"> 5415 <a :href="item.configure_url" 5416 x-show="item.product_type !== 'grouped'" 5417 class="inline-flex p-2 mr-2 btn btn-primary"> 5418 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5419 size="16" class="w-5 h-5"> 5420 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5421 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 5422 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 5423 </path> 5424 </svg> 5425 </a> 5426 <button class="inline-flex p-2 btn btn-primary" 5427 @click="deleteItemFromCart(item.item_id)" 5428 > 5429 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5430 size="16" class="w-5 h-5"> 5431 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5432 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 5433 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 5434 0 00-1 1v3M4 7h16"> 5435 </path> 5436 </svg> 5437 </button> 5438 </div> 5439 </div> 5440 </div> 5441 </template> 5442 </div> 5443 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 5444 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 5445 hover:bg-gray-100">
5446 <span>Cart Subtotal:</span> 5447 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 5448 </div> 5449 <div class="w-full"> 5450 <a href="https://www.flooringinc.com/amasty_quote/cart/" 5451 class="btn btn-secondary justify-center"> 5452 View and Edit Cart </a> 5453 </div> 5454 </div> 5455 </div> 5456 </div> 5457 </div> 5458 </template> 5459</section> 5460 5461</div> 5462 5463<div x-data="initKlaviyoCustomerTracking()" 5464 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 5465
5465<script> 5466 function initKlaviyoCustomerTracking() { 5467 return { 5468 sendCustomerDataToKlaviyo(data) { 5469 window.addEventListener('init-external-scripts', () => { 5470 const _learnq = window._learnq || []; 5471 const customer = data.customer; 5472 var resource = document.createElement('script'); 5473 resource.async = "true"; 5474 resource.src = "https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg"; 5475 var script = document.getElementsByTagName('script')[0]; 5476 script.parentNode.insertBefore(resource, script); 5477 5478 if (customer && customer.email) { 5479 script.addEventListener('load', function() { 5480 _learnq.push(['identify', { 5481 $email: customer.email, 5482 $first_name: customer.firstname ? customer.firstname : '', 5483 $last_name: customer.lastname ? customer.lastname : '' 5484 }]); 5485 }); 5486 } 5487 }, {once: true, passive: true}); 5488 } 5489 } 5490 } 5491 </script>
5491 5492<a class="action skip sr-only contentarea" 5493 href="#contentarea"> 5494 <span> 5495 Skip to Content </span> 5496</a> 5497<div class="widget block block-static-block"> 5498 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="notification5 text-center text-size13 font-normal text-white bg-[#15324C]"> 5499 <style>#html-body [data-pb-style=W9O5WD4]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="W9O5WD4"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><center> 5500<p style="font-size: medium;">ð Game Day Ready - Save Up to 35% Off - Sale Ends Sunday 10/4 </p> 5501 5502</center> 5503</div></div></div></div></div></div> 5504</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 5505<div class="page messages">
5505<script> 5506 function initMessages() { 5507 "use strict"; 5508 return { 5509 messages: window.mageMessages || [], 5510 isEmpty() { 5511 return this.messages.reduce( 5512 function (isEmpty, message) { 5513 return isEmpty && message === undefined 5514 }, true 5515 ) 5516 }, 5517 removeMessage(messageIndex) { 5518 this.messages[messageIndex] = undefined; 5519 }, 5520 addMessages(messages, hideAfter) { 5521 messages.map((message) => { 5522 /* Code to avoid multiple messages on the page */ 5523 5524 if (message.text.includes("A customer with the same email address already exists")) { 5525 message.text = 'A customer with the same email address already exists in an associated website. If you would like to upgrade your account to a Pro Account - please <a href='+BASE_URL+'contact>contact customer service</a>.'; 5526 } 5527 if(this.messages!="") { 5528 this.messages=[]; 5529 } 5530 this.messages = this.messages.concat(message); 5531 if (hideAfter) { 5532 this.setHideTimeOut(this.messages.length -1, hideAfter); 5533 } 5534 }); 5535 }, 5536 setHideTimeOut(messageIndex, hideAfter) { 5537 setTimeout((messageIndex) => { 5538 this.removeMessage(messageIndex); 5539 }, hideAfter, messageIndex); 5540 }, 5541 eventListeners: { 5542 ['@messages-loaded.window']() { 5543 this.addMessages(event.detail.messages, event.detail.hideAfter) 5544 }, 5545 ['@private-content-loaded.window'](event) { 5546 const data = event.detail.data; 5547 if ( 5548 data.messages && 5549 data.messages.messages && 5550 data.messages.messages.length 5551 ) { 5552 this.addMessages(data.messages.messages); 5553 } 5554 }, 5555 ['@clear-messages.window']() { 5556 this.messages = []; 5557 } 5558 } 5559 } 5560 } 5561</script>
5561 5562<section id="messages" 5563 x-data="initMessages()" 5564 x-bind="eventListeners" 5565> 5566 <template x-if="!isEmpty()"> 5567 <div class="w-full"> 5568 <div role="alert" class="messages container"> 5569 <template x-for="(message, index) in messages" :key="index"> 5570 <div> 5571 <template x-if="message"> 5572 <div class="message" :class="message.type" 5573 :ui-id="'message-' + message.type" 5574 > 5575 <span x-html="message.text"></span> 5576 <a href="#" class="close cursor-pointer" title="close" 5577 @click.prevent="removeMessage(index)"> 5578 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-white" width="18" height="18" role="img"> 5579 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5580<title>x</title></svg> 5581 </a> 5582 </div> 5583 </template> 5584 </div> 5585 </template> 5586 </div> 5587 </div> 5588 </template> 5589</section></div><div class="container flex flex-col md:flex-row flex-wrap font-bold"> 5590 <h1 class="text-gray-900 page-title title-font" 5591 > 5592 <span class="base" data-ui-id="page-title-wrapper" >Compare Products</span> </h1> 5593 </div> 5594<div class="widget block block-static-block"> 5595 <style>#html-body [data-pb-style=UYH2DF7]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div class="notification2 bg-custom-blue" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="UYH2DF7"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"></div></div></div> 5596<div class="widget block block-static-block"> 5597 <style>#html-body [data-pb-style=A9GJREG]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="A9GJREG"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"></div></div></div></div> 5598<div class="columns"><div class="column main">
5598<script> 5599 5600 5601</script>
vendor: 2 bytes, line 5601
5601
5602<script> 5603 function samplesubmit(mainproduct,inputValue,productids,colors,spidsColors,confproname,confproid,childproids) { 5604 this.isLoading = true; 5605 const formKey = hyva.getFormKey(); 5606 const postUrl = BASE_URL + 'sampleproduct/Sample/Products/'; 5607 fetch(postUrl, { 5608 "headers": { 5609 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5610 }, 5611 "body": "form_key=" + formKey + "&action_type=" + inputValue+ "&pids=" + productids+ "&colors=" + colors+ "&spidsColors=" + spidsColors+ "&confproname=" + confproname+ "&confproid=" + confproid +"&childproid=" + childproids, 5612 "method": "POST", 5613 "mode": "cors", 5614 "credentials": "include" 5615 }).then(response => { 5616 //this.isLoading = false; 5617 //window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5618 //fetchHtmlContent(mainproduct); 5619 if (! response.ok) console.warn('GET request failed'); 5620 return response.json(); 5621 }).then(result => { 5622 this.isLoading = false; 5623 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5624 fetchHtmlContent(mainproduct,result.is_sample_added); 5625 }); 5626 } 5627 </script>
5627 5628
5628<script> 5629 function fetchHtmlContent(pid,is_sample_added) { 5630 console.log('Fetching HTML content for PID:', pid); 5631 const formKey = hyva.getFormKey(); 5632 const randomString = Math.random().toString(36).substring(2, 15); 5633 const postUrl = BASE_URL + 'sampleproduct/sample/popup/?pid='+pid; 5634 fetch(postUrl) 5635 .then(response => response.text()) 5636 .then(html => { 5637 console.log('Response received:', html); 5638 let myDivelements = document.getElementsByClassName('htmlcontent'+pid); 5639 var numberofelements=myDivelements.length; 5640 for(var i=0;i<numberofelements;++i){ 5641 myDivelements[i].innerHTML = html; 5642 } 5643 if(is_sample_added == 1 ){ //&& window.innerWidth <= 767 5644 document.querySelector(".order-free-sample-popup .closemodal").dispatchEvent(new Event('click')); 5645 document.querySelector("#menu-cart-icon").dispatchEvent(new Event('click')); 5646 } 5647 }) 5648 .catch(error => { 5649 console.error(error); 5650 }); 5651 } 5652</script>
5652 5653
5653<script> 5654 if (window.require) { 5655 require(['jquery', 'domReady!'], function($){ 5656 if ($('.mfblogunveil').length) { 5657 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 5658 $('.mfblogunveil').mfblogunveil(); 5659 }); 5660 } 5661 }); 5662 } else { 5663 /* e.g. hyva theme */ 5664 document.addEventListener("DOMContentLoaded", function(){ 5665 var items = document.getElementsByClassName('mfblogunveil'); 5666 var el, url; 5667 if (items.length) { 5668 for (var i=0; i<items.length;i++) { 5669 el = items[i]; 5670 url = el.getAttribute('data-original'); 5671 if (!url) { 5672 continue; 5673 } 5674 if ('IMG' == el.tagName) { 5675 el.src = url; 5676 } else { 5677 el.style.backgroundImage = "url('" + url + "')"; 5678 } 5679 } 5680 } 5681 }); 5682 } 5683 </script>
5683 5684 5685<section> 5686 <div class="container">You have no items to compare.</div> 5687</section> 5688
5689<script> 5690function makeMessagesSticky() { 5691 const header = document.querySelector('#header'); 5692 const messages = document.querySelector('.page.messages #messages'); 5693 const page = document.querySelector('.page.messages'); 5694 //const breadcrumbs = document.querySelector('.breadcrumbs'); 5695 5696 const headerRect = header.getBoundingClientRect(); 5697 const messagesRect = messages.getBoundingClientRect(); 5698 const pageRect = page.getBoundingClientRect(); 5699 //const breadcrumbsRect = breadcrumbs.getBoundingClientRect(); 5700 5701 const bodyElement = document.querySelector('body'); 5702 const isSticky = bodyElement.classList.contains('sticki'); 5703 5704 if (isSticky) { 5705 if (pageRect.top <= headerRect.bottom) { 5706 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.position = 'fixed'; 5707 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.top = `${headerRect.bottom}px`; 5708 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.width = '100%'; 5709 } 5710 else { 5711 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.position = 'static'; 5712 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.top = 'auto'; 5713 } 5714 } 5715 else { 5716 if (breadcrumbsRect.bottom <= 0) { 5717 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.position = 'fixed'; 5718 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.top = '0'; 5719 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.width = '100%'; 5720 } else { 5721 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.position = 'static'; 5722 document.querySelector('.catalog-product_compare-index .page.messages #messages').style.top = 'auto'; 5723 } 5724 } 5725 5726} 5727window.addEventListener("scroll", function() { 5728 makeMessagesSticky(); 5729}); 5730</script>
5730 5731<style> 5732 @media(max-width:1024px){ 5733 .catalog-product_compare-index .page.messages .messages.container{position: static !important;} 5734 } 5735</style>
5736<script> 5737 function initCompareOnCompareList() { 5738 return { 5739 removeFromCompare(productId, productName) { 5740 const formKey = hyva.getFormKey(); 5741 const postUrl = BASE_URL + 'catalog/product_compare/remove/'; 5742 document.getElementById("compareLoading").style.display = "block"; 5743 fetch(postUrl, { 5744 "headers": { 5745 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5746 }, 5747 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 5748 "method": "POST", 5749 "mode": "cors", 5750 "credentials": "include" 5751 }).then(function (response) { 5752 document.getElementById("compareLoading").style.display = "none"; 5753 var catUrl = document.getElementById("catUrl").value; 5754 if (response.redirected) { 5755 var length = document.getElementById('compare-item-table').rows[0].cells.length; 5756 if(length === 3){ 5757 window.location.href = catUrl; 5758 }else{ 5759 window.location.href = response.url; 5760 } 5761 } else if (response.ok) { 5762 return response.json(); 5763 } else { 5764 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5765 [{ 5766 type: "warning", 5767 text: "Could not remove item from compare." 5768 }], 5000 5769 ); 5770 } 5771 }).then(function (response) { 5772 if (!response) { return; } 5773 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5774 [{ 5775 type: (response.success) ? "success" : "error", 5776 text: (response.success) 5777 ? "You removed product %1 from the comparison list".replace('%1', productName) 5778 : response.error_message 5779 }], 5000 5780 ); 5781 let reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5782 window.dispatchEvent(reloadCustomerDataEvent); 5783 }).catch(function (error) { 5784 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5785 [{ 5786 type: "error", 5787 text: error 5788 }], 5000 5789 ); 5790 }); 5791 } 5792 }; 5793} 5794</script>
5794
5794<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 5795 function hasWebP() { 5796 var elem = document.createElement('canvas'); 5797 5798 if (!!(elem.getContext && elem.getContext('2d'))) { 5799 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 5800 } 5801 return false; 5802 } 5803 5804 if (hasWebP()) { 5805 document.body.classList.add("webp"); 5806 } else { 5807 document.body.classList.add("no-webp"); 5808 }</script>
5808</div></div></main><footer class="page-footer"><div class="footer content"> 5809<style>#html-body [data-pb-style=MQRPJ36],#html-body [data-pb-style=TCILD21]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TCILD21]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=MQRPJ36]{align-self:stretch}#html-body [data-pb-style=L8W4GF3]{display:flex;width:100%}#html-body [data-pb-style=P3M9UW9]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:66.6667%;align-self:stretch}#html-body [data-pb-style=CJ8VT2Q]{border-style:none}#html-body [data-pb-style=CMMU4DK],#html-body [data-pb-style=SD11GJS]{max-width:100%;height:auto}#html-body [data-pb-style=PQE5PAT]{justify-content:flex-start;display:flex;flex-direction:column;width:33.3333%;align-self:stretch}#html-body [data-pb-style=O5JDDOV],#html-body [data-pb-style=PQE5PAT],#html-body [data-pb-style=S30DD27]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=S30DD27]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=O5JDDOV]{align-self:stretch}#html-body [data-pb-style=E1QMNND]{display:flex;width:100%}#html-body [data-pb-style=AGQGWH8],#html-body [data-pb-style=B6GEF9I]{justify-content:flex-start;display:flex;flex-direction:column;align-self:stretch}#html-body [data-pb-style=B6GEF9I]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%}#html-body [data-pb-style=AGQGWH8]{width:41.6667%}#html-body [data-pb-style=AGQGWH8],#html-body [data-pb-style=AWDS0W8],#html-body [data-pb-style=W8FW3EE]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=W8FW3EE]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=AWDS0W8]{align-self:stretch}#html-body [data-pb-style=PHW76I9]{display:flex;width:100%}#html-body [data-pb-style=HVOCS1N],#html-body [data-pb-style=TPKYLUC]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;align-self:stretch}@media only screen and (max-width: 768px) { #html-body [data-pb-style=CJ8VT2Q]{border-style:none} }</style><div class="footer_top bg-white pb-2" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="TCILD21"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="MQRPJ36"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="L8W4GF3"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="P3M9UW9"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="CJ8VT2Q"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/flooring_logo.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/flooring_logo.png" alt="Logo" title="Logo" width="266" height="80" loading="lazy" data-element="desktop_image" data-pb-style="SD11GJS" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/flooring_logo.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/flooring_logo.png" alt="Logo" title="Logo" width="189" height="56" loading="lazy" data-element="mobile_image" data-pb-style="CMMU4DK" loading="lazy"></picture></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PQE5PAT"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5810<li><a tabindex="0" href="https://www.facebook.com/rubberflooringinc" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon1.webp"><img id="BTPM32X" style="width: 10px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon1.png" alt="Facebook" width="10" height="20" loading="lazy" loading="lazy"></picture></a></li> 5811<li><a tabindex="0" href="https://www.instagram.com/flooring_inc/" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon2.webp"><img id="PXIY4FF" style="width: 21px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon2.png" alt="Twitter" width="21" height="20" loading="lazy" loading="lazy"></picture></a></li> 5812<li><a tabindex="0" href="https://www.pinterest.com/flooringinc/" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon3.webp">
5812<img style="width: 20px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon3.png" alt="print" width="20" height="20" loading="lazy" loading="lazy"></picture></a></li> 5813<li><a tabindex="0" href="https://www.youtube.com/user/flooringincvideos" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/youtube-icon.webp"><img id="I49QFU6" style="width: 25px; height: 18px;" src="https://www.flooringinc.com/media/wysiwyg/youtube-icon.png" alt="Youtube" width="25" height="18" loading="lazy" loading="lazy"></picture></a></li> 5814</ul></div></div></div></div></div><div class="footer_middle bg-white pb-2" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="S30DD27"><div class="pagebuilder-column-group footer-wrap" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="O5JDDOV"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="E1QMNND"><div class="pagebuilder-column footer_middle_lft" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="B6GEF9I"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5815 <style>#html-body [data-pb-style=CISRX33],#html-body [data-pb-style=K247IQ3]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=K247IQ3]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=CISRX33]{align-self:stretch}#html-body [data-pb-style=GV5A1RW]{display:flex;width:100%}#html-body [data-pb-style=IE3QT2M],#html-body [data-pb-style=K294VVH],#html-body [data-pb-style=N7Q79IV]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.3333%;align-self:stretch}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="K247IQ3"><div class="pagebuilder-column-group footer_middle_left" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="CISRX33"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="GV5A1RW"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="N7Q79IV"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Company info</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5816<li style="line-height: 10px;"><a id="T6SH02B" tabindex="0" href="/contact">Contact Us</a></li> 5817<li style="line-height: 10px;"><a tabindex="0" href="/about">About Us</a></li> 5818<li style="line-height: 10px;"><a id="EHRBRCU" tabindex="0" href="/careers">Careers</a></li> 5819<li style="line-height: 10px;"><a tabindex="0" href="/privacy-policy">Privacy Policy</a></li> 5820<li style="line-height: 10px;"><a tabindex="0" href="/affirm">Affirm</a></li> 5821<li style="line-height: 10px;"><a tabindex="0" href="/our-commitment-accessibility">Accessibility</a></li> 5822<li style="line-height: 10px;"><a tabindex="0" href="/terms-and-conditions">Terms & Conditions</a></li> 5823</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="K294VVH"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Customer Service</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5824<li><a tabindex="0" href="/shipping-info">Shipping</a></li> 5825<li><a id="ER5IYQ2" tabindex="0" href="/sales/guest/form">Track Order</a></li> 5826<li><a tabindex="0" href="/returns-exchanges">Returns & Exchanges</a></li> 5827<li><a tabindex="0" href="/moneybackguarantee">Money Back Guarantee</a></li> 5828<li id="W8TRHHE"><a tabindex="0" href="/pro-advantage">Pro Advantage</a></li> 5829<li><a href="/dor-sites">Sales & Use Tax</a></li> 5830</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IE3QT2M"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Quick Links</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5831<li><a tabindex="0" href="/knowledge-base">FAQs</a></li> 5832<li><a tabindex="0" href="/sample-request">Samples</a></li> 5833<li><a tabindex="0" href="https://flooringinc.cashstar.com/store/recipient?locale=en-us">Gift Cards</a></li> 5834<li><a href="/promotions-disclaimer">Promotions</a></li> 5835</ul></div></div></div></div></div></div></div> 5836</div></div><div class="pagebuilder-column pl-6 footer_middle_rgt" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="AGQGWH8"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5837 <style>#html-body [data-pb-style=KSEJOAX]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=H19I5XA]{display:flex;width:100%}#html-body [data-pb-style=F8YKO2R],#html-body [data-pb-style=L0EMJM5]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:41.6667%;align-self:stretch}#html-body [data-pb-style=L0EMJM5]{width:58.3333%}#html-body [data-pb-style=K1G3B6J]{text-align:right}</style><div class="pagebuilder-column-group footer_middle_right" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="KSEJOAX"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="H19I5XA"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="F8YKO2R"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="w-full"> 5838 <form class="form subscribe" action="https://www.flooringinc.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm(
5838)" id="newsletter-validate-detail"> 5839 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font"> 5840 <h4 class="text-lg font-medium text-black mb-1 capitalize">Get Ready To Be Floored!</h4> 5841 <p calss="sub_heading capitalize">Join our insider's club</p> 5842 </div> 5843 <div class="flex flex-wrap justify-center gap-2 md:justify-start"> 5844 <label for="newsletter-subscribe" class="sr-only"> 5845 Email Address </label> 5846 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full" placeholder="Enter email address"> 5847 <input name="form_key" type="hidden" value="z9YLjMYHjzlsusrC"> <button class="btn btn-primary"> 5848 Subscribe Now </button> 5849 </div> 5850 <div> 5851 <template x-if="displayErrorMessage"> 5852 <p class="flex items-center text-red"> 5853 <span class="inline-block w-8 h-8 mr-3"> 5854 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 5855 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 5856<title>exclamation-circle</title></svg> 5857 </span> 5858 <template x-for="errorMessage in errorMessages"> 5859 <span x-html="errorMessage"></span> 5860 </template> 5861 </p> 5862 </template> 5863 </div> 5864 </form> 5865 <div class="w-full"> 5866 </div> 5867
5867<script> 5868 function initNewsletterForm() { 5869 return { 5870 errors: 0, 5871 hasCaptchaToken: 0, 5872 displayErrorMessage: false, 5873 errorMessages: [], 5874 setErrorMessages(messages) { 5875 this.errorMessages = [messages] 5876 this.displayErrorMessage = this.errorMessages.length 5877 }, 5878 submitForm() { 5879 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5880 const $form = document.querySelector('#newsletter-validate-detail'); 5881 5882 if (this.errors === 0) { 5883 $form.submit(); 5884 } 5885 } 5886 } 5887 } 5888 </script>
5888 5889</div> 5890 5891<div class="pr-4 lg:w-1/4 md:w-1/2"> 5892 5893</div> </div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="L0EMJM5"><h4 class="text-lg font-medium text-black mb-6" data-content-type="heading" data-appearance="default" data-element="main" data-pb-style="K1G3B6J">Flooring Inc.</h4><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">1958 Almaville Road Suite #110</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p id="JM1KPUH" style="text-align: right;">Smyrna, TN 37167</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">p. <a tabindex="0" href="tel:8664166388">(866) 416-6388</a></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">e. <a id="H0FVHR7" tabindex="0" href="/contact">[email protected]</a></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;"><strong>Hours (All times ET)</strong></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">Mon - Fri 9 am - 6 pm</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">Saturday 9 am - 5 pm <strong>(Sales Chat Only)</strong></p></div></div></div></div></div> 5894</div></div></div></div></div><div class="footer_bottom bg-white" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="W8FW3EE"><div class="pagebuilder-column-group footer-wrap" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="AWDS0W8"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="PHW76I9"><div class="pagebuilder-column footer_bottom_lft" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="TPKYLUC"><div data-content-type="text" data-appearance="default" data-element="main"><p>© Copyright 2010-2026 IncStores LLC. | All rights reserved.</p></div></div><div class="pagebuilder-column footer_bottom_rgt" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="HVOCS1N"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5895 <style>#html-body [data-pb-style=UD4KGT3]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=QSS87SS]{display:flex;width:100%}#html-body [data-pb-style=IC77K1S],#html-body [data-pb-style=O5JWPM0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;align-self:stretch}</style><div class="pagebuilder-column-group footer_bottom_right" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="UD4KGT3"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="QSS87SS"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IC77K1S"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5896<li><a title="Better Business Bureau - Flooring Inc." href="https://www.bbb.org/us/az/phoenix/profile/retail-floor-materials/flooringinccom-1126-97031168" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-bbb.webp"><img id="BQMJYDJ" style="width: 129px; height: 35px;" src="https://www.flooringinc.com/media/wysiwyg/footer-bbb.png" alt="" width="125" height="34" loading="lazy" loading="lazy"></picture></a></li> 5897<li>Checks <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon5.webp"><img style="width: 12px; height: 12px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon5.png" alt="" width="12" height="12" loading="lazy" loading="lazy"></picture> accepted by mail</li> 5898</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="O5JWPM0"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5899<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon6.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon6.png" alt="" width="33" height="25" loading="lazy" loading="lazy"></picture></li> 5900<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon7.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon7.png" alt="" width="30" height="19" loading="lazy" loading="lazy"></picture></li> 5901<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon8.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon8.png" alt="" width="34" height="26" loading="lazy" loading="lazy"></picture></li> 5902<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon9.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon9.png" alt="" width="33" height="21" loading="lazy" loading="lazy"></picture></li> 5903<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon10.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon10.png" alt="" width="39" height="26" loading="lazy" loading="lazy"></picture></li> 5904<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon11.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon11.png" alt="" width="39" height="26" loading="lazy" loading="lazy"></picture></li> 5905<li><button id="uw-widget-custom-trigger" class="uw-widget-custom-trigger" aria-label="Accessibility Widget" data-uw-ignore-s25="true" data-uw-trigger="true" aria-haspopup="dialog"></button></li> 5906</ul></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 5907.checkout-cart-index .summary-cart .cart-discount{display:block;} 5908.page-with-filter .products.wrapper.mode-list.products-list .item.product .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;} 5909.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label{display:block;}.catalog-product-view .youMayAlso.products_slider a.priceBlock, .catalog-product-view .youMayAlso.products_slider .price-box{min-height: 95px;align-items: flex-start;} 5910@media(min-width:1280px){.mega_menu_banner img{max-width: 239px !important;}} 5911.cms-home .catergory_slider_content .product-item-link{font-size: .875rem;line-height: 1.313rem;} 5912@media(min-width: 768px){ 5913.catergory_slider_content .compare-buttons .qty_fields{width:auto;order: 2;}.catergory_slider_content .compare-buttons .ship-fax-plp{width:100%;order: 1;border-bottom:1px solid rgb(178,178,178);}
5913.catergory_slider_content .compare-buttons .orderSampleContent{order:3;} 5914.catergory_slider_content .compare-buttons .ship-fax-plp .ship-iconsada{display: block;} 5915.page-products #maincontent .products.mode-grid .catergory_slider_content .compare-buttons .orderSampleContent{order: 3;} 5916 .category_banner .pagebuilder-column-group .pagebuilder-column-line .pagebuilder-column figure picture{height: 100% !important;object-fit:cover;} 5917[data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product{min-width: 370px;width: 370px;max-width: 370px;}[data-content-type=products][data-appearance=carousel] [data-role=glider-content]{display: flex;flex-wrap: nowrap;overflow-x: auto;} 5918.cms-home [data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product:not(.glider-slide){min-width: 370px;} 5919[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar{width: 10px;} 5920[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-track {background: #ffffff !important;} 5921[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-thumb {background: #ffffff !important;} 5922} 5923@media(min-width: 768px){ 5924 .featured_partners .swiper-container:not(.swiper-initialized){display: flex;overflow-x: auto;flex-wrap: nowrap;width: 100%;max-width: 100%;min-width: 100%;transform: inherit;} 5925 .featured_partners .swiper-container:not(.swiper-initialized) .swiper-slide{width: 16%;} 5926 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar{width: 10px;} 5927 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-track {background: #ffffff !important;} 5928 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb {background: #ffffff !important;} 5929 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb:hover {background: #ffffff !important;} 5930} 5931@media(max-width:767px){.page-products #maincontent .toolbar.toolbar-products .pages-items{justify-content: center;gap: 10px;box-shadow: none;}} 5932</style></div></div> 5933</div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
5933<script> 5934 document.addEventListener('DOMContentLoaded', function () { 5935 const gallery = document.querySelector('#gallery'); 5936 const header = document.querySelector('#header'); 5937 if (!gallery || !header) return; 5938 const stickyTop = header.offsetHeight; 5939 // parent/container where sticky should stop 5940 const parent = gallery.parentElement; 5941 function checkSticky() { 5942 const rect = gallery.getBoundingClientRect(); 5943 const parentRect = parent.getBoundingClientRect(); 5944 // sticky active only while parent still has space 5945 const isSticky = 5946 rect.top <= stickyTop && 5947 parentRect.bottom > rect.height + stickyTop; 5948 document.body.classList.toggle('gallery-sticky', isSticky); 5949 } 5950 checkSticky(); 5951 window.addEventListener('scroll', checkSticky); 5952 window.addEventListener('resize', checkSticky); 5953 }); 5954</script>
5954 5955<style> 5956@media (min-width: 1200px) { 5957 .megamenu_items:hover>.megamenu { 5958 max-width: 1440px; 5959 } 5960} 5961.products__recommendations .products_slider .catergory_slider_content .color_counts{margin-bottom: 15px;} 5962html.order_active .page-header #header{z-index: -1;} 5963html.order_active{overflow: hidden !important;} 5964@media(min-width: 768px){.checkout-cart-index #shopping-cart-table .cart.item .item-info td{flex-wrap: nowrap;}} 5965</style> 5966<style> 5967.cms-home .order-free-sample-popup{display: none;} 5968.cms-home.order_active .order-free-sample-popup{display: flex;} 5969@media(min-width:768px){ 5970.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 5971.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;} 5972.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{width: 100%;order: 2;display: flex;justify-content: space-between;} 5973.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent .order_btn{margin-top: 10px;} 5974.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{border-top: 0px;padding-top:0px;margin-top: 0px;} 5975.catalog-product-view .products_slider .compare-buttons .qty_fields .btn_cart{width:110px} 5976} 5977@media(max-width:767px){ 5978.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 5979.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;width: 100%;} 5980.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compareBtn{order:2;justify-content: flex-start;width: auto;margin-top: 10px;} 5981.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent{order:3;margin-top: 10px;} 5982.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;width: 100%;display: flex;justify-content: space-between;} 5983} 5984#related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 5985@media (min-width: 1024px) { 5986.container { 5987 max-width: 1440px !important; 5988} 5989} 5990.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 20px !important;color: #1e1e1e !important;} 5991.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper{font-size: 20px !important;line-height: 20px !important} 5992.brand_logo_listpage img, div.brand_logo_listpage img{max-width:100px} 5993.catalog-product-view .product-item .product-info .price-box .price-container .price-wrapper{color: rgb(52 174 74 / var(--tw-text-opacity)) !important;line-height: 19px !important;} 5994 5995.catalog-product-view .product-info-main .quickship_swatch_option.incstores_pim_color_axis .color_swatches .swatch-attribute-options .selectOptionColor .select-none.swatch-option{display: none;} 5996 5997@media(max-width: 767px){ 5998 .related_products_list_view .glider-track{width: 100% !important;flex-wrap: nowrap;align-items: flex-start;} 5999 .related_products_list_view .related_products_list_view_content{width: 100% !important;min-width: 280px;max-width: 280px;} 6000} 6001 6002.dcw-share-cart .space-y-4>:not([hidden])~:not([hidden]) { 6003 --tw-space-y-reverse: 0; 6004 margin-top: calc(1rem * (1 - var(--tw-space-y-reverse))); 6005 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 6006} 6007.dcw-share-cart .bg-black\/50 { 6008 background-color: #00000080; 6009} 6010.dcw-share-cart .z-\[999\] { 6011 z-index: 999; 6012} 6013</style></div></div>
6014<script> 6015 window.addEventListener('init-external-scripts', () => { 6016 const klaviyoScript = document.createElement('script'); 6017 klaviyoScript.src = '//static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg'; 6018 klaviyoScript.type = 'text/javascript'; 6019 klaviyoScript.async = true; 6020 document.head.append(klaviyoScript); 6021 }, {once: true, passive: true}); 6022</script>
vendor: 1 bytes, line 6022
6022
6023<script> 6024 document.addEventListener('DOMContentLoaded', function() { 6025 const buttons = document.querySelectorAll('.cms-home .order_btn'); 6026 buttons.forEach(button => { 6027 button.addEventListener('click', function() { 6028 const modal = this.closest('.orderSampleContent').querySelector('.order-free-sample-popup'); 6029 if (modal) { 6030 modal.style.display = 'block'; 6031 } 6032 }); 6033 }); 6034 6035 // Handle closing the modal 6036 document.querySelectorAll('.cms-home .order-free-sample-popup .closemodal').forEach(closeBtn => { 6037 closeBtn.addEventListener('click', function() { 6038 const modal = this.closest('.order-free-sample-popup'); 6039 if (modal) { 6040 modal.style.display = 'none'; 6041 } 6042 }); 6043 }); 6044 }); 6045</script>
6045 6046
6047<script> 6048 document.addEventListener('DOMContentLoaded', function () { 6049 function updateRatingsClass(ratingEl) { 6050 const hasReviews = ratingEl.querySelector('.bv_numReviews_component_container'); 6051 ratingEl.classList.toggle('no-reviews', !hasReviews); 6052 } 6053 document.querySelectorAll('.ratings').forEach(ratingEl => { 6054 updateRatingsClass(ratingEl); 6055 const observer = new MutationObserver(() => { 6056 updateRatingsClass(ratingEl); 6057 }); 6058 observer.observe(ratingEl, { 6059 childList: true, 6060 subtree: true 6061 }); 6062 }); 6063 }); 6064</script>
6064 6065 6066<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/poppins.min.css" media="print" onload="this.media='all'"/> 6067<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/print.min.css" media="print" onload="this.media='all'"/> 6068<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/admin.min.css" media="print" onload="this.media='all'"/> 6069<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Bss_SocialLogin/css/jquery.fancybox.min.css" media="print" onload="this.media='all'"/> 6070<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MirasvitLayeredNavigation/css/lib/nouislider.min.css" media="print" onload="this.media='all'"/> 6071<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Astound_Affirm/affirm-promo.min.css" media="print" onload="this.media='all'"/> 6072<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Dcw_CircularDesignerTool/css/base-global-header-footer.min.css" media="print" onload="this.media='all'"/> 6073<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Dcw_CircularDesignerTool/css/matdesigner.min.css" media="print" onload="this.media='all'"/> 6074<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_Blog/css/comments.min.css" media="print" onload="this.media='all'"/> 6075<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/css/gpc.min.css" media="print" onload="this.media='all'"/></div></footer>
6076<script> 6077 function dataServicesShoppingCartContextData() 6078 { 6079 return { 6080 initContext(cartData) { 6081 let contextCartItems = []; 6082 6083 cartData.items.forEach(function (item){ 6084 contextCartItems.push({ 6085 id: item.item_id, 6086 formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), 6087 quantity: item.qty, 6088 product: { 6089 productType: item.product_type, 6090 productId: item.product_id, 6091 name: item.product_name, 6092 sku: item.product_sku, 6093 mainImageUrl : item.product_image.src 6094 }, 6095 prices: { 6096 price: { 6097 value: parseFloat(item.product_price_value ? item.product_price_value : 0) 6098 } 6099 } 6100 }) 6101 }); 6102 6103 magentoStorefrontEvents.context.setShoppingCart({ 6104 id: cartData.dsCartId, 6105 totalQuantity: cartData.summary_count, 6106 prices: { 6107 subtotalExcludingTax: { 6108 value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) 6109 }, 6110 subtotalIncludingTax: { 6111 value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) 6112 } 6113 }, 6114 items: contextCartItems, 6115 possibleOnepageCheckout: cartData.possible_onepage_checkout, 6116 giftMessageSelected : false, 6117 giftWrappingSelected : false 6118 }); 6119 6120 window.dispatchEvent(new Event("shoppingCartContextSet")); 6121 } 6122 } 6123 } 6124</script>
6124 6125<div x-data="dataServicesShoppingCartContextData()" 6126 @private-content-loaded.window="initContext($event.detail.data.cart)"></div> 6127 6128
6129<script> 6130 (function () { 6131 'use strict'; 6132 6133 /** 6134 * Config to determine which element is responsible for the form submission 6135 * 6136 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 6137 */ 6138 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 6139 6140 /** 6141 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 6142 * Call original submit on amrecaptcha-callback event after successful captcha validation. 6143 * 6144 * @return {void} 6145 */ 6146 const wrapFormSubmit = function () { 6147 document.addEventListener("DOMContentLoaded", function () { 6148 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6149 if (formsSelector.length === 0) { 6150 return; 6151 } 6152 6153 document.querySelectorAll(formsSelector)?.forEach(formElement => { 6154 if (!formElement) { 6155 return; 6156 } 6157 6158 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 6159 if (!elementToWrap || !attributeNameToWrap) { 6160 return; 6161 } 6162 6163 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 6164 }); 6165 }); 6166 }; 6167 6168 /** 6169 * Find submit event and DOM element that has this event using formWrapperConfig. 6170 * 6171 * @param {HTMLElement} formElement 6172 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 6173 */ 6174 const resolveElementWrapping = function (formElement) { 6175 let result = { 6176 elementToWrap: undefined, 6177 attributeNameToWrap: undefined 6178 }; 6179 6180 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 6181 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 6182 if (!elementToWrap) { 6183 return; 6184 } 6185 6186 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 6187 (elementAttribute) => { 6188 /** @type {string[]} */ 6189 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 6190 6191 return submitAttributeVariations.some( 6192 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 6193 ) 6194 } 6195 ); 6196 if (!attributeNameToWrap) { 6197 return; 6198 } 6199 6200 result.elementToWrap = elementToWrap; 6201 result.attributeNameToWrap = attributeNameToWrap; 6202 }); 6203 6204 return result; 6205 } 6206 6207 /** 6208 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 6209 * 6210 * @param {HTMLElement} formElement 6211 * @param {HTMLElement} elementToWrap 6212 * @param {string} attributeNameToWrap 6213 */ 6214 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 6215 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 6216 elementToWrap.removeAttribute(attributeNameToWrap); 6217 6218 /** 6219 * To properly set submit attribute - we need to replace '@' with 'x-on:' 6220 * and add preventDefault behaviour 6221 */ 6222 elementToWrap.setAttribute( 6223 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 6224 'amRecaptchaModel.execute($event)' 6225 ); 6226 elementToWrap.setAttribute( 6227 'x-on:amrecaptcha-executable-callback', 6228 originalSubmit 6229 ); 6230 } 6231 6232 wrapFormSubmit(); 6233 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 6234</script>
6234 6235
6236<script> 6237 function initAuthenticationBss() { 6238 return { 6239 open: false, 6240 openLogin : false, 6241 openRegister : false, 6242 openForgot : false, 6243 openCreate : true, 6244 passwordsMatching: true, 6245 openMessage: false, 6246 errors: 0, 6247 message: "", 6248 hasCaptchaToken: 0, 6249 openButtonLogin : false, 6250 openButtonRegister : false, 6251 openSuccessMessage : false, 6252 checkUseReCaptcha: 1, 6253 recaptchaLoading: null, 6254 initSocial() { 6255 if (!this.checkUseReCaptcha) { 6256 return Promise.resolve(); 6257 } 6258 if (this.recaptchaLoading) { 6259 return this.recaptchaLoading; 6260 } 6261 if (typeof window.grecaptcha !== 'undefined') { 6262 this.recaptchaLoading = Promise.resolve(); 6263 return this.recaptchaLoading; 6264 } 6265 this.recaptchaLoading = new Promise((resolve, reject) => { 6266 const recaptchaUrl = `https://www.google.com/recaptcha/api.js?render=6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO&hl=en`; 6267 const script = document.createElement('script'); 6268 script.setAttribute('type', 'text/javascript'); 6269 script.setAttribute('src', recaptchaUrl); 6270 script.onload = () => resolve(); 6271 script.onerror = () => reject(new Error('Failed to load reCAPTCHA')); 6272 document.head.appendChild(script); 6273 }); 6274 return this.recaptchaLoading; 6275 }, 6276 loadRecaptchaOnInteraction() { 6277 if (!this.checkUseReCaptcha) { 6278 return; 6279 } 6280 // Avoid scroll/mousemove/wheel â they fire on load / DevTools / trackpads. 6281 const events = ['pointerdown', 'keydown', 'touchstart']; 6282 const load = () => { 6283 events.forEach((eventName) => { 6284 window.removeEventListener(eventName, load, { capture: true }); 6285 }); 6286 this.initSocial(); 6287 }; 6288 events.forEach((eventName) => { 6289 window.addEventListener(eventName, load, { once: true, passive: true, capture: true }); 6290 }); 6291 }, 6292 checkPasswordsMatch() { 6293 if (document.getElementById('password').value === 6294 document.getElementById('password-confirmation').value) { 6295 this.passwordsMatching = true; 6296 return true; 6297 } 6298 this.passwordsMatching = false; 6299 return false; 6300 }, 6301 submitForm: function () { 6302 const $form = document.querySelector('#login-form'); 6303 if (this.errors === 0) { 6304 this.dispatchLoginRequest($form); 6305 } 6306 }, 6307 submitForgotForm : function () { 6308 const $form = document.querySelector('#fotgot-form'); 6309 if (this.errors === 0) { 6310 this.dispatchForgotRequest($form); 6311 } 6312 }, 6313 submitRegisterForm : function () { 6314 const $form = document.querySelector('#create-form'); 6315 if (this.errors === 0) { 6316 this.dispatchRegisterRequest($form); 6317 } 6318 }, 6319 validateCaptcha : async function () { 6320 await this.initSocial(); 6321 return new Promise((resolve, reject) => { 6322 if (typeof window.grecaptcha === 'undefined') { 6323 return reject(new Error('reCAPTCHA is not available')); 6324 } 6325 grecaptcha.ready(function () { 6326 grecaptcha.execute('6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO', {action: 'submit'}).then(function (token) { 6327 return resolve(token); 6328 }).catch(reject); 6329 }); 6330 }); 6331 }, 6332 dispatchLoginRequest:async function (form) { 6333 if (this.checkUseReCaptcha) { 6334 let token = await this.validateCaptcha(); 6335 if(token) 6336 { 6337 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6338 } 6339 } 6340 const username = this.$refs['customer-email'].value; 6341 const password = this.$refs['customer-password'].value; 6342 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6343 const postUrl = "https://www.flooringinc.com/sociallogin/popup/login/"; 6344 fetch(postUrl, { 6345 headers: { 6346 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6347 }, 6348 body: new URLSearchParams({ 6349 username: username, 6350 password: password, 6351 ['g-recaptcha-response']: recaptchaValue, 6352 form_key: hyva.getFormKey(), 6353 }), 6354 method: "POST", 6355 mode: "cors", 6356 credentials: "include", 6357 }).then(response => { 6358 return response.json() 6359 } 6360 ).then(data => { 6361 this.isLoading = false;
6362 if (data.error) { 6363 this.message = data.message; 6364 this.openMessage = true; 6365 this.errors = 1; 6366 this.hasCaptchaToken = 0; 6367 } else { 6368 this.message = data.message; 6369 this.openMessage = false; 6370 this.openSuccessMessage = true; 6371 if (data.redirect !== '' && data.redirect != null) { 6372 window.location.href = data.redirect; 6373 } else { 6374 location.reload(true); 6375 } 6376 } 6377 }); 6378 }, 6379 dispatchForgotRequest:async function (form) { 6380 if (this.checkUseReCaptcha) { 6381 let token = await this.validateCaptcha(); 6382 if(token) 6383 { 6384 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6385 } 6386 } 6387 const email = form.querySelector("#email_address").value; 6388 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6389 const postUrl = "https://www.flooringinc.com/sociallogin/popup/forgot/"; 6390 fetch(postUrl, { 6391 headers: { 6392 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6393 }, 6394 body: new URLSearchParams({ 6395 email: email, 6396 ['g-recaptcha-response']: recaptchaValue, 6397 form_key: hyva.getFormKey(), 6398 }), 6399 method: "POST", 6400 mode: "cors", 6401 credentials: "include", 6402 }).then(response => { 6403 return response.json() 6404 } 6405 ).then(data => { 6406 this.isLoading = false; 6407 if (data.error) { 6408 this.message = data.message; 6409 this.openMessage = true; 6410 this.errors = 1; 6411 this.hasCaptchaToken = 0; 6412 } else { 6413 if (data.redirect !== '' && data.redirect != null) { 6414 window.location.href = data.redirect; 6415 } else { 6416 location.reload(true); 6417 } 6418 } 6419 }); 6420 }, 6421 dispatchRegisterRequest:async function (form) { 6422 if (this.checkUseReCaptcha) { 6423 let token = await this.validateCaptcha(); 6424 if(token) 6425 { 6426 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6427 } 6428 } 6429 const firstname = form.querySelector("#firstname").value; 6430 const lastname = form.querySelector("#lastname").value; 6431 const email = form.querySelector("#email_address").value; 6432 const password = form.querySelector("#password").value; 6433 const passwordConfirmation = form.querySelector("#password-confirmation").value; 6434 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6435 const postUrl = "https://www.flooringinc.com/sociallogin/popup/create/"; 6436 fetch(postUrl, { 6437 headers: { 6438 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6439 }, 6440 body: new URLSearchParams({ 6441 ['g-recaptcha-response']: recaptchaValue, 6442 firstname: firstname, 6443 lastname: lastname, 6444 email: email, 6445 password: password, 6446 password_confirmation: passwordConfirmation, 6447 form_key: hyva.getFormKey(), 6448 }), 6449 method: "POST", 6450 mode: "cors", 6451 credentials: "include", 6452 }).then(response => { 6453 return response.json() 6454 } 6455 ).then(data => { 6456 this.isLoading = false;
6457 if (data.error) { 6458 this.message = data.message; 6459 this.openMessage = true; 6460 this.hasCaptchaToken = 0; 6461 } else { 6462 this.message = data.message; 6463 this.openMessage = false; 6464 this.openSuccessMessage = true; 6465 if (data.redirect !== '' && data.redirect != null) { 6466 window.location.href = data.redirect; 6467 } else { 6468 location.reload(true); 6469 } 6470 } 6471 }); 6472 }, 6473 eventListeners: { 6474 ['@popup-register.window']($event) { 6475 this.open = true; 6476 this.openRegister = $event.detail.openRegister; 6477 this.openLogin = $event.detail.openLogin; 6478 this.openCreate = $event.detail.openCreate; 6479 this.openButtonLogin = $event.detail.openButtonLogin; 6480 this.openButtonRegister = $event.detail.openButtonRegister; 6481 this.initSocial(); 6482 } 6483 } 6484 } 6485 } 6486</script>
6486 6487 6488<section id="authentication-popup-bss" 6489 x-data="initAuthenticationBss()" x-init="loadRecaptchaOnInteraction()" 6490 @keydown.window.escape="open = false" 6491<div role="dialog" 6492 aria-modal="true" 6493 class="hidden inset-y-0 right-0 z-30 flex max-w-full" 6494 :class="{ 'hidden': !open, 'fixed': open }" 6495 x-bind="eventListeners" 6496> 6497 <div class="relative bg-container-lighter bss_login_popup" 6498 x-show="open" 6499 @click.outside="open = false" 6500 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 6501 x-transition:enter-start="translate-x-full" 6502 x-transition:enter-end="translate-x-0" 6503 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 6504 x-transition:leave-start="translate-x-0" 6505 x-transition:leave-end="translate-x-full" 6506 > 6507 <div 6508 x-show="open" 6509 x-transition:enter="ease-in-out duration-500" 6510 x-transition:enter-start="opacity-0" 6511 x-transition:enter-end="opacity-100" 6512 x-transition:leave="ease-in-out duration-500" 6513 x-transition:leave-start="opacity-100" 6514 x-transition:leave-end="opacity-0" class="absolute flex close_icon" style="width: 11px;height: 11px;background: transparent;"> 6515 <button @click="open = false;" aria-label="Close panel" 6516 class="transition duration-150 ease-in-out text-black cursor-pointer"> 6517 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Close--icon.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Close--icon.png" alt="Close--icon" width="11" height="11" /></picture> 6518 </button> 6519 </div> 6520 <div class="flex h-full flex-col bss_login_popup_in overflow-y-auto" > 6521 <div class="message mx-4 message-error" x-show="openMessage"> 6522 <div> 6523 <span x-html="message"></span> 6524 </div> 6525 <div class="cursor-pointer" title="close" @click="openMessage = false"> 6526 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 6527 <path d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 6528 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 6529 </path> 6530 </svg> 6531 </div> 6532 </div> 6533 <div class="message mx-4 message-error success" x-show="openSuccessMessage"> 6534 <div> 6535 <span x-html="message"></span> 6536 </div> 6537 <div class="cursor-pointer" title="close" @click="openSuccessMessage = false"> 6538 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 6539 <path d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 6540 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 6541 </path> 6542 </svg> 6543 </div> 6544 </div> 6545 <div class="block-customer-login for_got" x-show="openForgot"> 6546 <h2 id="authenticate-customer-login" class="text-size18 font-medium text-darkblack"> 6547 Forgot Password </h2> 6548 <form class="form form-fotgotpassword" 6549 method="post" 6550 @submit.prevent="submitForgotForm();" 6551 id="fotgot-form"> 6552 <fieldset class="fieldset"> 6553 <div class="text-size14 font-normal text-black mb-4">Please enter your email address below to receive a password reset link.</div> 6554 <div class="field email required"> 6555 <label for="email_address" class="label"><span>Email</span></label> 6556 <div class="control"> 6557 <input type="email" name="email" alt="email" id="email_address" class="form-input" required 6558 value=""> 6559 </div> 6560 </div> 6561 </fieldset> 6562 <div class="actions-toolbar"> 6563 <div class="primary"> 6564 <button type="submit" class="action submit primary"><span>Reset My Password</span></button> 6565 </div> 6566 <div class="secondary ml-4 self-center"> 6567 <a class="action back cursor-pointer" 6568 @click ="openForgot = false,openLogin = true, 6569 openButtonLogin = true" 6570 >
6571 <span class="text-size14 font-medium text-black"> 6572 Back </span> 6573 </a> 6574 </div> 6575 </div> 6576 </form> 6577</div> 6578 6579 6580 6581 <div class="w-full"> 6582 <input id="g-recaptcha-response" type="hidden" value=""/> 6583 </div> 6584 <div class="block-new-customer social_login" 6585 x-show="openButtonLogin"> 6586 <h2 id="authenticate-new-customer" class="text-size18 font-semibold text-darkblack"> 6587 Log In </h2> 6588 <div class="block-content"> 6589 <div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 6590 <div class=""> 6591 <div class="sociallogin-buttons" x-ref="loginSocialButton"> 6592 <ul class="sociallogin-clearfix flex flex-wrap"> 6593 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button 6594 googleplus" title="Login with Google"> 6595 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 6596 href="javascript:void(0);" data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwww.flooringinc.com%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=900046866587-mph1s7dsg2dcau694j9ukb0m26hukidu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto" 6597 data-width="630" 6598 data-height="650" 6599 x-ref="googleplus" 6600 @click="popupSocial($refs.googleplus)"> 6601 <span class="sociallogin-button-auto"> 6602 <span class="sociallogin-button-icon"> 6603 </span> 6604 <span class="sociallogin-button-text">Login with Google</span> 6605 </span> 6606 </a> 6607 </li> 6608 </ul> 6609 </div> 6610 6611 </div> 6612 <div style="clear: both;"></div> 6613 </div> 6614 </div> 6615 </div> 6616 <div class="block-customer-login" x-show="openLogin" x-data="{ show: false }"> 6617 <span class="or-label text-size14 font-normal text-darkblack"> Or</span> 6618 6619 <form class="form form-login" 6620 method="post" 6621 @submit.prevent="submitForm();" 6622 id="login-form" 6623 > 6624 <div class="fieldset login"> 6625 <div class="field email required"> 6626 <label class="label hidden" for="customer-email"> 6627 <span>Email Address</span> 6628 </label> 6629 <div class="control"> 6630 <input name="username" 6631 x-ref="customer-email" 6632 @change="errors = 0" 6633 type="email" 6634 required 6635 class="form-input input-text" id="customer-email" placeholder="Email address" 6636 > 6637 </div> 6638 </div> 6639 <div class="field password required" > 6640 <label for="pass" class="label hidden">
6641 <span>Password</span> 6642 </label> 6643 <div class="control"> 6644 <input name="password" 6645 type="password" 6646 class="form-input input-text" id="pass" placeholder="Password" 6647 required 6648 x-ref="customer-password" 6649 @change="errors = 0" 6650 > 6651 </div> 6652 </div> 6653 6654 <input name="context" type="hidden" value="checkout"/> 6655 6656 <div class="actions-toolbar flex justify-between items-center" > 6657 <div class="flex items-center"> 6658 <input type="checkbox" name="show-password" @click="showPassword()" id="show-password" value="" class="checkbox"> 6659 <label class="cursor-pointer text-size12 font-normal text-darkblack" style="margin:0;" for="show-password">Show password</label> 6660 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showPasswordForLable()" id="show-password-label" > 6661 Show Password 6662 </span> --> 6663 </div> 6664 <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="openForgot = true,openLogin = false,openButtonLogin = false"> 6665 Forgot Your Password? </span> 6666 6667 6668 </div> 6669 <div class="actions-toolbar flex justify-between items-center"> 6670 <button type="submit" class="inline-flex btn btn-primary login_btn"> 6671 Log In </button> 6672 </div> 6673 </div> 6674 </form> 6675</div> 6676
6677<script> 6678 function showPassword(){ 6679 var showPwd=document.getElementById("show-password"); 6680 var password=document.getElementById("pass"); 6681 if(showPwd.checked==true) { 6682 password.type="text"; 6683 } else { 6684 password.type="password"; 6685 } 6686 } 6687 function showPasswordForLable(){ 6688 var password=document.getElementById("pass"); 6689 if (password.type === "password") { 6690 password.type = "text"; 6691 } else { 6692 password.type = "password"; 6693 } 6694 } 6695</script>
6695 6696 <div class="block-new-customer new_customer text-center" x-show ="openCreate"> 6697 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 6698 New Customer? </h2> 6699 <div class="block-content"> 6700 <div class="actions-toolbar"> 6701 <a class="block btn btn-primary cursor-pointer text-size18 font-semibold text-custom-blue" 6702 href="https://www.flooringinc.com/customer/account/create/" > 6703 Sign Up Now </a> 6704 </div> 6705 <div class="block-new-customer"> 6706 <h3 class="text-size16 font-normal text-black"> 6707 <a class="block underline" 6708 href="https://www.flooringinc.com/pro-advantage/" 6709 > 6710 Become a Pro </a> 6711 </h3> 6712 </div> 6713 </div> 6714 </div> 6715 <div class="block-new-customer social_login margin" x-show="openButtonRegister"> 6716 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 6717 Social Register </h2> 6718 <div class="block-content"> 6719 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 6720 <div class=""> 6721 <div class="sociallogin-buttons"> 6722 <ul class="sociallogin-clearfix flex flex-wrap"> 6723 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 6724 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 6725 href="javascript:void(0);" data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwww.flooringinc.com%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=900046866587-mph1s7dsg2dcau694j9ukb0m26hukidu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto" 6726 data-width="630" 6727 data-height="650" 6728 x-ref="googleplus" 6729 @click="popupSocial($refs.googleplus)"> 6730 <span class="sociallogin-button-auto"> 6731 <span class="sociallogin-button-icon"> 6732 </span> 6733 <span class="sociallogin-button-text">Register with Google</span> 6734 </span> 6735 </a> 6736 </li> 6737 </ul> 6738 </div> 6739 </div> 6740 <div style="clear: both;"></div> 6741 </div> 6742 </div> 6743 </div> 6744 </div> 6745 </div> 6746</div> 6747</section>
6748<script> 6749 var classLogin = [".checkout-container .opc-wrapper"]; 6750 var classRegister = [""]; 6751 classLogin = classLogin[0].trim().split(/\s+/); 6752 classRegister = classRegister[0].trim().split(/\s+/); 6753 if(classLogin && classLogin.length > 0 && classLogin[0]){ 6754 classLogin.forEach(element => { 6755 var classLoginElement = document.querySelector(element); 6756 var loginSocialButton = document.getElementById('add_button_login_byclass'); 6757 if (classLoginElement && loginSocialButton) { 6758 const cloneLoginSocialButton = loginSocialButton.cloneNode(true); 6759 classLoginElement.appendChild(cloneLoginSocialButton); 6760 cloneLoginSocialButton.style.display='block'; 6761 } 6762 }); 6763 } 6764 6765 if(classRegister && classRegister.length > 0 && classRegister[0]){ 6766 classRegister.forEach(element => { 6767 var classRegisterElement = document.querySelector(element); 6768 var registerSocialButton = document.getElementById('add_button_register_byclass'); 6769 if (classRegisterElement && registerSocialButton) { 6770 const cloneRegisterSocialButton = registerSocialButton.cloneNode(true); 6771 classRegisterElement.appendChild(cloneRegisterSocialButton); 6772 cloneRegisterSocialButton.style.display='block'; 6773 } 6774 }); 6775 } 6776 6777 function bssButtonSocial() { 6778 return { 6779 renderShowmore : function (element) { 6780 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 6781 for (let i = 0; i <= socialButton.length - 1; i++) { 6782 socialButton[i].style.display = 'block'; 6783 } 6784 element.querySelector('.sociallogin-showmore').style.display = 'none'; 6785 }, 6786 popupSocial: function (element) { 6787 var href = element.getAttribute('data-href'); 6788 var width = element.getAttribute('data-width'); 6789 var height = element.getAttribute('data-height'); 6790 var popup_window = null; 6791 if (!width) { 6792 width = 650; 6793 } 6794 6795 if(!height) { 6796 height = 350; 6797 } 6798 6799 var left = parseInt((window.innerWidth- width) / 2); 6800 var top = parseInt((window.innerHeight - height) / 2); 6801 6802 var params = [ 6803 'resizable=yes', 6804 'scrollbars=no', 6805 'toolbar=no', 6806 'menubar=no', 6807 'location=no', 6808 'directories=no', 6809 'status=yes', 6810 'width='+ width, 6811 'height='+ height, 6812 'left='+ left, 6813 'top='+ top 6814 ]; 6815 6816 if(popup_window) { 6817 popup_window.close(); 6818 } 6819 6820 if(href) { 6821 popup_window = window.open(href,'',params.join(',')); 6822 popup_window.focus(); 6823 6824 }else{ 6825 alert('This Login Application was not configured correctly. Please contact our customer support.'); 6826 } 6827 return false; 6828 } 6829 } 6830 } 6831 6832</script>
6832 6833 6834 6835 6836
6836<script> 6837 (() => { 6838 function changeNoCookieDomain() { 6839 const categoryKey = "marketing"; 6840 if (! prCookieConsentApi.isAllowedCategory(categoryKey)) { 6841 return; 6842 } 6843 6844 let iframes = document.querySelectorAll('iframe'), 6845 youtubeNoCookieIframes = Array.from(iframes) 6846 .filter((iframe) => iframe.src.indexOf('youtube-nocookie.com') !== -1); 6847 6848 youtubeNoCookieIframes.forEach((iframe) => { 6849 iframe.src = iframe.src.replace('youtube-nocookie.com', 'youtube.com'); 6850 }); 6851 } 6852 6853 if (prCookieConsentApi) { 6854 changeNoCookieDomain(); 6855 return; 6856 } 6857 6858 document.addEventListener('pr-cookie-consent-api:configured', changeNoCookieDomain); 6859 })(); 6860 </script>
6860 6861
6862<script> 6863 'use strict'; 6864 6865 (() => { 6866 window.addEventListener('DOMContentLoaded', () => { 6867 if (document.querySelectorAll('lite-youtube').length > 0) { 6868 const link = document.createElement('link'), 6869 script = document.createElement('script'); 6870 6871 link.rel = 'stylesheet'; 6872 link.type = 'text/css'; 6873 link.href = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fcss\u002Flite\u002Dyt\u002Dembed.min.css'; 6874 document.head.appendChild(link); 6875 6876 script.type = 'text/javascript'; 6877 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fjs\u002Flite\u002Dyt\u002Dembed.min.js'; 6878 document.head.appendChild(script); 6879 } 6880 }); 6881 })(); 6882</script>
vendor: 1 bytes, line 6882
6882
6883<script data-mfmofile="true"> 6884 document.addEventListener("DOMContentLoaded", function() { 6885 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 6886 !function (f, b, e, v, t, s) { 6887 if(f.mfytwcss)return; 6888 f.mfytwcss=1; 6889 t = b.createElement(e); 6890 t.rel = 'stylesheet'; 6891 t.type = 'text/css'; 6892 t.href = v; 6893 s = b.getElementsByTagName('HEAD')[0]; 6894 s.appendChild(t) 6895 }(window, document, 'link', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/css/youtubewidget.min.css'); 6896 } 6897 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 6898 !function (f, b, e, v, t, s) { 6899 if(f.mfytwjs)return; 6900 f.mfytwjs=1; 6901 t = b.createElement(e); 6902 t.type = 'text/javascript'; 6903 t.src = v; 6904 s = b.getElementsByTagName('HEAD')[0]; 6905 s.appendChild(t) 6906 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/iframe.min.js'); 6907 } 6908 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 6909 !function (f, b, e, v, t) { 6910 if(f.mflinkjs)return; 6911 f.mflinkjs=1; 6912 t = b.createElement(e); 6913 t.type = 'text/javascript'; 6914 t.src = v; 6915 s = b.getElementsByTagName('HEAD')[0]; 6916 s.appendChild(t) 6917 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/link.min.js'); 6918 } 6919 }); 6920</script>
6920 6921 6922 <div id="pr-gpc-notification-modal" style="display: none;"> 6923 <div class="pr-gpc-notification-wrap"> 6924 <h2>Your Opt-Out Preferences Honored</h2> 6925<p>Your browser's privacy preference (GPC) has been detected.</p> 6926<p class="pr-gpc-text-with-icon"><picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/images/check_circle.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/images/check_circle.png" alt="GPC Icon" width="18" height="18"></picture> Non-essential cookies have been disabled on our website.</p> 6927</div> </div> 6928 6929
6929<script type="text/x-magento-init" nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 6930 { 6931 "#pr-gpc-notification-modal": { 6932 "Plumrocket_GlobalPrivacyControl/js/opt-out-notification": {} 6933 } 6934 } 6935 </script>
6935 6936 6937
6938<script> 6939 (() => { 6940 function src_default(Alpine) { 6941 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 6942 let evaluate = evaluateLater(expression); 6943 let options = { 6944 rootMargin: getRootMargin(modifiers), 6945 threshold: getThreshhold(modifiers) 6946 }; 6947 let observer = new IntersectionObserver((entries) => { 6948 entries.forEach((entry) => { 6949 if (entry.isIntersecting === (value === "leave")) 6950 return; 6951 evaluate(); 6952 modifiers.includes("once") && observer.disconnect(); 6953 }); 6954 }, options); 6955 observer.observe(el); 6956 cleanup(() => { 6957 observer.disconnect(); 6958 }); 6959 }); 6960 } 6961 function getThreshhold(modifiers) { 6962 if (modifiers.includes("full")) 6963 return 0.99; 6964 if (modifiers.includes("half")) 6965 return 0.5; 6966 if (!modifiers.includes("threshold")) 6967 return 0; 6968 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 6969 if (threshold === "100") 6970 return 1; 6971 if (threshold === "0") 6972 return 0; 6973 return Number(`.${threshold}`); 6974 } 6975 function getLengthValue(rawValue) { 6976 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 6977 return match ? match[1] + (match[2] || "px") : void 0; 6978 } 6979 function getRootMargin(modifiers) { 6980 const key = "margin"; 6981 const fallback = "0px 0px 0px 0px"; 6982 const index = modifiers.indexOf(key); 6983 if (index === -1) 6984 return fallback; 6985 let values = []; 6986 for (let i = 1; i < 5; i++) { 6987 values.push(getLengthValue(modifiers[index + i] || "")); 6988 } 6989 values = values.filter((v) => v !== void 0); 6990 return values.length ? values.join(" ").trim() : fallback; 6991 } 6992 6993 document.addEventListener("alpine:init", () => { 6994 window.Alpine.plugin(src_default); 6995 }); 6996 })(); 6997</script>
vendor: 1 bytes, line 6997
6997
6998<script> 6999 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { 7000 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 7001 } 7002</script>
vendor: 1 bytes, line 7002
7002
7003<script> 7004 (function () { 7005 "use strict"; 7006 7007 const hasAlpine = new Promise(resolve => { 7008 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 7009 }); 7010 7011 const hasInteract = new Promise(resolve => { 7012 (events => { 7013 const onInteract = () => { 7014 resolve(); 7015 events.forEach(type => window.removeEventListener(type, onInteract)); 7016 } 7017 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 7018 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7019 }); 7020 7021 const onIntersect = (el) => { 7022 return new Promise(resolve => { 7023 const observer = new IntersectionObserver(entries => { 7024 for (const entry of entries) { 7025 if (entry.isIntersecting) { 7026 observer.disconnect() 7027 resolve(); 7028 } 7029 } 7030 }, {}); 7031 observer.observe(el); 7032 }); 7033 } 7034 7035 function runComponent(el) { 7036 hasAlpine.then(() => { 7037 el.removeAttribute('x-ignore'); 7038 queueMicrotask(() => Alpine.initTree(el)); 7039 }); 7040 } 7041 7042 function initDeferredComponents() { 7043 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 7044 el.setAttribute('x-ignore', ''); 7045 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 7046 switch (deferUntil) { 7047 case 'interact': 7048 hasInteract.then(() => runComponent(el)); 7049 break; 7050 case 'intersect': 7051 onIntersect(el).then(() => runComponent(el)) 7052 break; 7053 case 'idle': 7054 window.requestIdleCallback 7055 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 7056 : setTimeout(() => runComponent(el), 4000); 7057 break; 7058 case 'eager': 7059 runComponent(el); 7060 break; 7061 default: 7062 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 7063 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 7064 } 7065 } 7066 }); 7067 } 7068 7069 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 7070 })() 7071</script>
7071 7072
7073<script type="module" 7074 src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_Theme/js/alpine3.min.js" 7075 defer 7076 crossorigin 7077></script>
vendor: 1 bytes, line 7077
7077
7078<script> 7079 'use strict'; 7080 function dispatchMessages(messages, hideAfter) { 7081 const messagesEvent = new CustomEvent("messages-loaded", { 7082 detail: { 7083 messages: messages, 7084 hideAfter: hideAfter 7085 } 7086 }); 7087 window.dispatchEvent(messagesEvent); 7088 } 7089 7090 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7091 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7092 } 7093 7094 (function( hyva, undefined ) { 7095 7096 hyva.initFormKey = () => { 7097 const inputSelector = 'input[name="form_key"]', 7098 formKey = hyva.getFormKey(); 7099 7100 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 7101 input.value = formKey 7102 }); 7103 } 7104 7105 hyva.initMessages = () => { 7106 try { 7107 const messages = hyva.getCookie('mage-messages'); 7108 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 7109 7110 dispatchMessages(window.mageMessages); 7111 7112 // empty `mage-messages` cookie 7113 const skipSetDomain = true; 7114 hyva.setCookie('mage-messages','', -1, skipSetDomain); 7115 7116 } catch (error) { 7117 console.warn('Error parsing Cookie Messages:', error); 7118 } 7119 } 7120 7121 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 7122 hyva.alpineInitialized(hyva.initMessages) 7123 7124 }( window.hyva = window.hyva || {} )); 7125</script>
vendor: 1 bytes, line 7125
7125
7126<script> 7127 'use strict'; 7128 { 7129 const private_content_key = 'mage-cache-storage'; 7130 const private_content_expire_key = 'mage-cache-timeout'; 7131 const private_content_version_key = 'private_content_version'; 7132 const section_data_ids_key = 'section_data_ids'; 7133 const mage_cache_session_id_key = 'mage-cache-sessid'; 7134 const last_visited_store_key = 'last_visited_store'; 7135 7136 const ttl = 3600; 7137 7138 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7139 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7140 } 7141 7142 function loadSectionData () { 7143 const browserStorage = hyva.getBrowserStorage(); 7144 if (!browserStorage) { 7145 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7146 [{ 7147 type: "warning", 7148 text: "Please enable LocalStorage in your browser." 7149 }] 7150 ); 7151 return; 7152 } 7153 try { 7154 let isInvalid = false; 7155 7156 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 7157 isInvalid = true; 7158 } 7159 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 7160 7161 if (!hyva.getCookie(mage_cache_session_id_key)) { 7162 isInvalid = true; 7163 browserStorage.removeItem(private_content_key); 7164 const skipSetDomain = true; 7165 const days = false; 7166 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 7167 } 7168 7169 const cookieVersion = hyva.getCookie(private_content_version_key); 7170 const storageVersion = browserStorage.getItem(private_content_version_key); 7171 7172 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 7173 isInvalid = true; 7174 } 7175 7176 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 7177 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 7178 browserStorage.removeItem(private_content_key); 7179 } 7180 7181 if (isInvalid && cookieVersion) { 7182 fetchPrivateContent([]); 7183 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 7184 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 7185 if ( 7186 privateContent && 7187 privateContentExpires && 7188 privateContent.cart && 7189 privateContent.customer 7190 ) { 7191 dispatchPrivateContent(privateContent); 7192 } else { 7193 fetchPrivateContent([]); 7194 } 7195 } else { 7196 if (document.getElementById('default-section-data')) { 7197 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 7198 dispatchPrivateContent(privateContent); 7199 } else { 7200 dispatchPrivateContent({}); 7201 } 7202 } 7203 7204 } catch (error) { 7205 console.warn('Error retrieving Private Content:', error); 7206 } 7207 } 7208 7209 hyva.alpineInitialized(loadSectionData) 7210 window.addEventListener('reload-customer-section-data', loadSectionData); 7211 7212 function dispatchPrivateContent(data) { 7213 const privateContentEvent = new CustomEvent("private-content-loaded", { 7214 detail: { 7215 data: data 7216 } 7217 }); 7218 window.dispatchEvent(privateContentEvent); 7219 } 7220 7221 function fetchPrivateContent(sections) { 7222 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 7223 method: 'GET', 7224 headers: { 7225 'Content-Type': 'application/json', 7226 'X-Requested-With': 'XMLHttpRequest' 7227 } 7228 }) 7229 .then(response => response.json()) 7230 .then( 7231 data => { 7232 if (data) { 7233 try { 7234 const browserStorage = hyva.getBrowserStorage(); 7235 7236 // merge new data preserving non-invalidated sections 7237 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 7238 7239 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 7240 delete oldSectionData['checkout-data']; 7241 } 7242 const newSectionData = Object.assign(oldSectionData, data); 7243 7244 dispatchPrivateContent(newSectionData); 7245 7246 // don't persist messages, they've been dispatched already 7247 if (newSectionData.messages && newSectionData.messages.messages ) { 7248 newSectionData.messages.messages = []; 7249 } 7250 7251 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 7252 7253 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 7254 browserStorage.setItem(private_content_expire_key, expiresAt); 7255 7256 const newCookieVersion = hyva.getCookie(private_content_version_key); 7257 browserStorage.setItem(private_content_version_key, newCookieVersion); 7258 7259 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 7260 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 7261 hyva.setCookie( 7262 section_data_ids_key, 7263 JSON.stringify( 7264 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 7265 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 7266 return sectionDataIds; 7267 }, {}) 7268 ), 7269 false, 7270 true 7271 ); 7272 } catch (error) { 7273 console.warn("Couldn't store privateContent", error); 7274 } 7275 } 7276 } 7277 ); 7278 } 7279 } 7280</script>
vendor: 1 bytes, line 7280
7280
7281<script> 7282 (() => { 7283 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 7284 })() 7285</script>
vendor: 1 bytes, line 7285
7285
7286<script> 7287 (events => { 7288 const dispatchUserInteractionEvent = () => { 7289 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 7290 window.dispatchEvent(new Event('init-external-scripts')) 7291 }; 7292 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 7293 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7294</script>
7294 7295<style> 7296[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: -2px 0 0 0 !important;display: flex !important;} 7297@media(max-width: 767px){ 7298[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: 4px 0 0 0 !important;} 7299} 7300@media screen and (min-width: 768px) and (max-width: 1440px) { 7301 .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 18px !important;} 7302 .product-item .product-info .price-box .price-container .price-wrapper{font-size: 18px;} 7303} 7304@media(max-width: 1550px){ 7305.products__recommendations .product-slider .glider-track .recommended-slider-item{min-width:auto;} 7306} 7307.page-products .spot-light .catergory_slider_content{border-radius: 10px;} 7308.page-header .panel.wrapper .header_top .header_left_notification a.email_icon:before{background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="%2315324c" version="1.1" id="Capa_1" width="800px" height="800px" viewBox="0 0 388.424 388.424" xml:space="preserve"><g><path d="M384.202,59.111H4.209C1.888,59.111,0,61,0,63.33v261.766c0,2.33,1.888,4.217,4.209,4.217h379.993 c2.317,0,4.222-1.887,4.222-4.217V63.33C388.424,61,386.52,59.111,384.202,59.111z M319.937,92.888L194.212,185.09L68.485,92.888 H319.937z M354.647,295.535H33.779V109.328l157.935,115.82c1.494,1.089,3.508,1.089,5.004,0l157.934-115.82v186.207H354.647z"/></g></svg>');background-size: 22px 22px;} 7309@media(max-width: 767px){ 7310.page-products .spot-light .catergory_slider_content .product-info{padding-left: 0 !important;padding-right: 0px !important;} 7311} 7312.page-products .spot-light .spot-bottom .order_btn{height: 35px;width: auto;color: rgb(255 255 255 / var(--tw-text-opacity)) !important;background: #296497 !important;border-radius: .375rem;padding: 0 1.25rem !important;text-align: center;text-decoration: none !important; vertical-align: middle;font-size: .75rem;line-height: 1rem;font-weight: 400;transition-duration: .15s;line-height: 35px;display: block; 7313} 7314.page-products .spot-light .spot-bottom .order_btn:hover{background: #15324c !important;transition-duration: .15s;} 7315.page-products .spot-light .catergory_slider_content .color_counts .color_count{font-size: 12px;color: rgb(127 127 127 / var(--tw-text-opacity)} 7316 7317 7318.category-top-filter .pagebuilder-column h3 span, .category-top-filter .pagebuilder-column h3 span a, .category-top-filter .pagebuilder-column h3 a{display: block;} 7319.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label {display: block;} 7320.catalog-product-view .product-info-main .color_swatches .swatch-attribute-options .select_none.swatch-option{display: none;} 7321@media(min-width: 768px){ 7322 .checkout-cart-index #shopping-cart-table .cart.item .item-info td.col.item{flex-wrap: nowrap;} 7323} 7324@media(min-width: 1500px){ 7325 .checkout-cart-index #shopping-cart-table .col.qty{min-width: 169px;max-width: 169px;width: 169px;} 7326} 7327@media only screen and (max-width: 1340px) and (min-width: 1000px){ 7328 .checkout-cart-index #maincontent #shopping-cart-table .product-item-details{max-width: 40%;} 7329} 7330</style>
7331<script> 7332document.addEventListener('DOMContentLoaded', function() { 7333 if (window.innerWidth <= 767) { 7334 document.querySelectorAll('.page-with-filter.page-products .sidebar .filter-content .card .filter-options-title').forEach(function(title) { 7335 const span = title.querySelector('span'); 7336 if (span && span.textContent.trim().includes('Revenue Ranking')) { 7337 const parentCard = title.closest('.card'); 7338 if (parentCard && !parentCard.id) { 7339 parentCard.id = 'filter-id-revenue_ranking'; 7340 } 7341 } 7342 }); 7343 } 7344}); 7345</script>
7345 7346<style> 7347.page-with-filter.page-products .sidebar .filter-content .card#filter-id-revenue_ranking{display: none;} 7348.checkout-index-index .kl_sms_phone_number-field{margin-bottom: 20px;} 7349@media(min-width: 768px){ 7350 .catalog-product-view .modal.order-free-sample-popup .right .order-free-sample-prod-info .product-info:after{right: -10px;top: -10px;} 7351} 7352@media(max-width: 767px){ 7353 .catalog-product-view .order-free-sample-popup .border .product-info:after{left: 35px;} 7354} 7355.checkout-index-index .notification4 {display: none} 7356 #related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 7357</style>
7358<script> 7359 function initConfigurableOptions(productId, optionConfig) { 7360 7361 function findPathParam(key) { 7362 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 7363 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 7364 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 7365 for (let i = 0; i < pathParts.length; i += 2) { 7366 if (pathParts[i] === key && pathParts.length > i) { 7367 return pathParts[i + 1]; 7368 } 7369 } 7370 } 7371 7372 return { 7373 optionConfig, 7374 productId, 7375 attributeCode:'', 7376 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 7377 ssrGalleryChildId: 0, 7378 allowedAttributeOptions: [], 7379 selectedValues: [], 7380 init() { 7381 this.checkIsFirst(); 7382 this.findAllowedAttributeOptions(); 7383 this.$nextTick(() => { 7384 if (typeof this.optionConfig.defaultValues === 'object') { 7385 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 7386 this.changeOption(optionId, value + ''); 7387 } 7388 } 7389 }); 7390 }, 7391 checkIsFirst() { 7392 this.isLoadedFirst = true; 7393 setTimeout(() => { 7394 this.isLoadedFirst = false; 7395 }, "3000"); 7396 }, 7397 findSimpleIndex() { 7398 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 7399 }, 7400 calculateSimpleIndexForPartialSelection(selectedValues) { 7401 if (selectedValues.length === 0) return 0; 7402 let productIndexIds = Object.keys(this.optionConfig.index); 7403 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 7404 const productsWithAttributeMatch = selectedValues[attribute] 7405 ? productIndexIds.filter((productIndex) => { 7406 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 7407 }) 7408 : []; 7409 7410 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 7411 }) 7412 return productIndexIds[0]; 7413 }, 7414 calculateSimpleIndexForFullSelection(selectedValues) { 7415 const productIndexes = this.optionConfig.index; 7416 return Object.keys(productIndexes).find(productIndex => { 7417 const productCandidateOptions = productIndexes[productIndex]; 7418 7419 for (const productOption in productCandidateOptions) { 7420 if ( 7421 ! selectedValues[productOption] || 7422 selectedValues[productOption] !== productCandidateOptions[productOption] 7423 ) { 7424 return false; 7425 } 7426 } 7427 return productIndex; 7428 }); 7429 }, 7430 productIndex: 0, 7431 findAllowedAttributeOptions() { 7432 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 7433 }, 7434 calculateAllowedAttributeOptions(selectedValues) { 7435 const allAttributes = this.optionConfig.attributes; 7436 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 7437 return a.position - b.position 7438 }); 7439 7440 const selectionWithoutAttr = attrId => { 7441 return Object.keys(selectedValues).reduce((acc, id) => { 7442 if (id !== attrId) acc[id] = selectedValues[id]; 7443 return acc; 7444 }, {}) 7445 } 7446 7447 const newAllowedAttributeOptions = []; 7448 7449 allAttributesSorted.forEach(attribute => { 7450 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr(attribute.id)); 7451 if (attribute?.code === 'incstores_pim_color_axis') { 7452 newAllowedAttributeOptions[attribute.id] = 7453 allAttributes[attribute.id].options 7454 .filter(option => { 7455 return !!option.products.find(product => availableIndexes.includes(product)); 7456 }) 7457 .sort((a, b) => {
7458 const cheapestA = this.findCheapestProductForPartialSelectionForSort({ 7459 ...selectedValues, 7460 [attribute.id]: a.id 7461 }); 7462 7463 const cheapestB = this.findCheapestProductForPartialSelectionForSort({ 7464 ...selectedValues, 7465 [attribute.id]: b.id 7466 }); 7467 7468 if (!cheapestA && !cheapestB) return 0; 7469 if (!cheapestA) return 1; 7470 if (!cheapestB) return -1; 7471 7472 const priceA = this.optionConfig.optionPrices[cheapestA].customPrice.amount; 7473 const priceB = this.optionConfig.optionPrices[cheapestB].customPrice.amount; 7474 7475 return priceA - priceB; 7476 }); 7477 } else { 7478 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 7479 return !!option.products.find(product => { 7480 //====== For Custom Design link - fetch child product id on page load START ====== 7481 if(document.querySelector('input[name="selected_option_child_id"]')){ 7482 if(document.querySelector('input[name="selected_option_child_id"]').value == ''){ 7483 document.querySelector('input[name="selected_option_child_id"]').value = product; 7484 } 7485 } 7486 //====== For Custom Design link - fetch child product id on page load END ====== 7487 return availableIndexes.includes(product); 7488 }) 7489 }); 7490 } 7491 }); 7492 return newAllowedAttributeOptions; 7493 }, 7494 calculateAvailableProductIndexes(selectedOptions) { 7495 if (Object.keys(selectedOptions).length === 0) { 7496 return Object.keys(this.optionConfig.index); 7497 } 7498 7499 const selectedIds = Object.keys(selectedOptions); 7500 if (Object.values(this.optionConfig.salable || {}).length) { 7501 const selectedOptionIndexes = selectedIds.map(attrId => { 7502 const optionValue = selectedOptions[attrId]; 7503 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 7504 }) 7505 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 7506 return acc.filter(index => optionIndexes.includes(index)); 7507 }); 7508 } else { 7509 const productIndexes = this.optionConfig.index; 7510 return Object.keys(productIndexes).filter(index => { 7511 return selectedIds.find( 7512 attrId => productIndexes[index][attrId] === `${selectedOptions[attrId]}` 7513 ) 7514 }); 7515 } 7516 }, 7517 findAttributeByOptionId(optionId) { 7518 for (const attributeId in this.optionConfig.attributes) { 7519 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 7520 if (attributeOptions.find(option => option.id === optionId)) { 7521 return attributeId; 7522 } 7523 } 7524 }, 7525 getAllowedAttributeOptions(attributeId) { 7526 return this.allowedAttributeOptions[attributeId] || [] 7527 }, 7528 getProductIdsForOption(option) { 7529 const attributeId = this.findAttributeByOptionId(option.id); 7530 const allOptions = this.optionConfig.attributes[attributeId]; 7531 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 7532 return opt && opt.products 7533 ? opt.products 7534 : []; 7535 }, 7536 findProductIdsForPartialSelection(optionSelection) { 7537 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 7538 const newCandidates = this.getProductIdsForOption({id: optionId}); 7539 return candidates === null 7540 ? newCandidates 7541 : candidates.filter(productId => newCandidates.includes(productId)); 7542 }, null); 7543 return candidateProducts || []; 7544 },
7545 findCheapestProductForPartialSelection(optionSelection) { 7546 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 7547 return candidateProducts.reduce((cheapest, simpleIdx) => { 7548 // in the first iteration we start with simpleIdx as the currently cheapest product 7549 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 7550 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 7551 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 7552 ? simpleIdx 7553 : cheapest; 7554 }, 0) 7555 }, 7556 findCheapestProductForPartialSelectionForSort(optionSelection) { 7557 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 7558 return candidateProducts.reduce((cheapest, simpleIdx) => { 7559 // in the first iteration we start with simpleIdx as the currently cheapest product 7560 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 7561 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].customPrice.amount; 7562 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].customPrice.amount 7563 ? simpleIdx 7564 : cheapest; 7565 }, 0) 7566 }, 7567 findProductIdToUseForOptionPrice(option) { 7568 // try to find a product for a complete selection 7569 const attributeId = this.findAttributeByOptionId(option.id); 7570 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 7571 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 7572 // if there is no complete selection, use the cheapest product for the option 7573 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 7574 }, 7575 getAttributeOptionLabel(option) { 7576 const optionProduct = this.findProductIdToUseForOptionPrice(option); 7577 if ((! optionProduct) || (optionProduct === this.productIndex)) { 7578 return option.label; 7579 } 7580 7581 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 7582 7583 if (this.optionConfig.optionPrices[optionProduct]) { 7584 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 7585 if (optionPrice !== currentPrice){ 7586 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 7587 } 7588 } 7589 return option.label; 7590 }, 7591 getOptionPriceAdjustmentBasePrice() { 7592 if (this.optionConfig.optionPrices[this.productIndex]) { 7593 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 7594 } 7595 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 7596 return this.optionConfig.optionPrices[cheapestForSelection] 7597 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 7598 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 7599 }, 7600 changeOption(optionId, value) { 7601 if (value !== '' 7602 && typeof this.optionIsEnabled === 'function' 7603 && !this.optionIsEnabled(optionId, value)) { 7604 return; 7605 } 7606 var checkbox = document.getElementById('overage_percent'); 7607 if(checkbox){ 7608 checkbox.checked = true; // Check the checkbox 7609 } 7610 var galleryImgOpacity = document.querySelector('#gallery .prod_slider img.first-image'); 7611 if (galleryImgOpacity) { 7612 galleryImgOpacity.classList.add('opacity-0'); 7613 } 7614 if (value === '') { 7615 // create new array so the length property is reset if no option is selected (avoiding delete) 7616 this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => { 7617 if (opt !== optionId) { 7618 newSelection[opt] = val; 7619 } 7620 return newSelection; 7621 }, []); 7622 } else { 7623 const currentUrl = window.location.href; 7624 // Create a URL object 7625 const url = new URL(currentUrl); 7626 // Use searchParams to get the color option 7627 const colorOption = url.searchParams.get('color-option'); 7628 const variantOption = url.searchParams.get('variant-option'); 7629 if(colorOption!==null && variantOption!==null){ 7630 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7631 { 7632 this.selectedValues[optionId] = colorOption; 7633 } 7634 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 7635 { 7636 this.selectedValues[optionId] = variantOption; 7637 } 7638 } 7639 else if(colorOption!==null){ 7640 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7641 { 7642 this.selectedValues[optionId] = colorOption; 7643 } 7644 7645 } 7646 else if(this.isLoadedFirst == true && (0 > 0 || 0 > 0)) 7647 { 7648 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7649 { 7650 this.selectedValues[optionId] = '0'; 7651 } 7652 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 7653 { 7654 this.selectedValues[optionId] = '0'; 7655 } 7656 } 7657 else 7658 { 7659 this.selectedValues[optionId] = value; 7660 } 7661 7662 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 7663 if (addToCartButton) { 7664 if (!addToCartButton.classList.contains('pointer-events-none')) { 7665 addToCartButton.classList.add('pointer-events-none'); 7666 addToCartButton.classList.add('opacity-50'); 7667 } 7668 } 7669 7670 var productId = this.findProductIdsForPartialSelection(this.selectedValues)[0]; 7671 var baseUrl = "https://www.flooringinc.com/"; 7672 7673 if (typeof productId === 'undefined') { 7674 let attributeCode = this.optionConfig.attributes[optionId]['code']; 7675 setTimeout(() => { 7676 if (attributeCode == 'incstores_pim_color_axis') { 7677 if (typeof this.autoSelectCompatibleOtherOption === 'function') { 7678 this.autoSelectCompatibleOtherOption(optionId); 7679 } 7680 } else if (attributeCode == 'incstores_pim_variant_axis' 7681 || attributeCode == 'product_option') { 7682 if (typeof this.autoSelectCompatibleColorOption === 'function') { 7683 this.autoSelectCompatibleColorOption(optionId); 7684 } 7685 } 7686 }, 300); 7687 } else { 7688 var fetchUrl = baseUrl+'customattribute/index/index/productId/'+productId; 7689 7690 fetch(fetchUrl) 7691 .then(response => response.json()) 7692 .then(data => { 7693 7694 if (document.getElementById('dimensions-attributes')) { 7695 document.getElementById('dimensions-attributes').innerHTML= data.detailsHtml.dimensionsHtml; 7696 } 7697 7698 if (document.getElementById('details-attributes')) { 7699 document.getElementById('details-attributes').innerHTML= data.detailsHtml.productDetails; 7700 } 7701 7702 if (document.getElementById('ship-to-text')) { 7703 document.getElementById('ship-to-text').value= data.shipToText; 7704 } 7705 7706 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 7707 if (addToCartButton) { 7708 addToCartButton.classList.remove('pointer-events-none'); 7709 addToCartButton.classList.remove('opacity-50'); 7710 } 7711 }) 7712 .catch(error => { 7713 console.log(error); 7714 }); 7715 } 7716 7717 } 7718 this.findSimpleIndex(); 7719 this.findAllowedAttributeOptions(); 7720 this.updateCalculatorType();// custom coding 7721 this.updateMinRollcut();// custom coding 7722 this.updateMaxRollLengthRestriction();// custom coding 7723 this.updateTileSizeArea(); // custom coding 7724 this.updateExactWidth(); // custom coding 7725 this.updateExactLength(); // custom coding 7726 this.updateExactHeight(); // custom coding 7727 this.updateCoveragePerCase(); // custom coding 7728 this.updateTileMinQty(); // custom coding 7729 this.updateShippingDetails(); // custom coding 7730 this.updatePrices(); 7731 this.updateSquareFootage(); 7732 7733 //If the page loads first time it will stop the gallery change, so configurable product image will display 7734 if (!this.isLoadedFirst) { 7735 this.updateGallery(); 7736 } 7737 7738 //====== For Custom Design link - fetch child product id when option clicked START ====== 7739 if(document.querySelector('input[name="selected_option_child_id"]')){ 7740 document.querySelector('input[name="selected_option_child_id"]').value = this.productIndex; 7741 } 7742 if(document.querySelector('input[name="custom_length"]') && document.getElementById('roll_length')){ 7743 document.querySelector('input[name="custom_length"]').value = document.getElementById('roll_length').value; 7744 } 7745 //====== For Custom Design link - fetch child product id when option clicked END ====== 7746 window.dispatchEvent( 7747 new CustomEvent( 7748 'configurable-selection-changed', 7749 { 7750 detail: { 7751 productId: this.productId, 7752 optionId: optionId, 7753 value: value, 7754 productIndex: this.productIndex, 7755 selectedValues: this.selectedValues, 7756 attributeCode: this.optionConfig.attributes[optionId]['code'], 7757 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 7758 } 7759 } 7760 ) 7761 ); 7762 7763 /* =============================== disabled product option checking & remove START =============== */ 7764 if (!this.optionConfig?.ship_region_enabled 7765 && document.querySelector('.swatch-attribute .selectOptionColor') 7766 ) { 7767 var quickship_lebel_should_show; 7768 var quickship_active_color_option_exist = 0; 7769 setTimeout(() => { 7770 document.querySelectorAll('.swatch-attribute .selectOptionColor').forEach(function(option_box) { 7771 if (!option_box.querySelector('div, label')) { 7772 option_box.remove(); 7773 } 7774 }); 7775 7776 }, 300); 7777 } 7778 /* =============================== disabled product option checking & remove END =============== */ 7779 7780 /* ========== remove validation when click on available color start =============== */ 7781 if(document.querySelector('.normal_color_swatch_option .selectOptionColor') ){ 7782 setTimeout(() => { 7783 const colorBoxes = document.querySelectorAll( 7784 '.normal_color_swatch_option .selectOptionColor' 7785 ); 7786 var colorNotAvailable = 0; 7787 const colorerrorDiv = document.getElementById('normal-color-swatch-option-error-msg'); 7788
7789 colorBoxes.forEach((colorBox) => { 7790 if (colorBox.querySelector('.select_none label.checked')) { 7791 colorNotAvailable = 1; 7792 } 7793 }); 7794 if (!colorNotAvailable){ 7795 colorerrorDiv.textContent = ''; 7796 colorerrorDiv.style.display = 'none'; 7797 } 7798 7799 }, 300); 7800 } 7801 /* ========== remove validation when click on available color end =============== */ 7802 7803 /* =============================== color label show / hide if color option not showing END =============== */ 7804 7805 /* =============================== other label show / hide if the option not showing START =============== */ 7806 if (typeof this.syncOtherSwatchOptionVisibility === 'function') { 7807 this.syncOtherSwatchOptionVisibility(); 7808 } else { 7809 const swatchAttribute = document.querySelector('.swatch-attribute.other_swatch_option'); 7810 if (swatchAttribute) { 7811 setTimeout(() => { 7812 const selectOptionColors = swatchAttribute.querySelectorAll('.selectOptionColor'); 7813 if (selectOptionColors.length > 1) { 7814 swatchAttribute.style.display = 'block'; 7815 } else { 7816 swatchAttribute.style.display = 'none'; 7817 } 7818 }, 300); 7819 } 7820 } 7821 /* =============================== other label show / hide if the option not showing END =============== */ 7822 7823 }, 7824 calculateIsMinimalPrice() { 7825 return ( 7826 this.selectedValues.filter(value => !!value).length < 7827 Object.keys(this.optionConfig.attributes).length 7828 ); 7829 }, 7830 updatePrices() { 7831 const value = this.productIndex ? 7832 this.optionConfig.optionPrices[this.productIndex] : 7833 this.optionConfig.prices; 7834 7835 window.dispatchEvent( 7836 new CustomEvent( 7837 "update-prices-" + this.productId, 7838 { 7839 detail: Object.assign( 7840 value, 7841 { 7842 isMinimalPrice: this.calculateIsMinimalPrice(), 7843 calculatorType: this.optionConfig?.calculator_type?.[this.productIndex] ?? '', 7844 getIncstoresPimCoverage: this.optionConfig?.coverage_per_case?.[this.productIndex] ?? '', 7845 unitOfMeasure: this.optionConfig?.unit_of_measure?.[this.productIndex] ?? '', 7846 altUnitOfMeasure: this.optionConfig?.alt_unit_of_measure?.[this.productIndex] ?? 'sqft', 7847 availableQuantity: this.optionConfig?.available_quantity?.[this.productIndex] ?? '', 7848 } 7849 ) 7850 } 7851 ) 7852 ); 7853 setTimeout(() => { 7854 var calculatorType = this.optionConfig.calculator_type[this.productIndex]; 7855 var priceElement = document.querySelector('div.items-baseline .final-price .price'); 7856 7857 if (priceElement && calculatorType != 'none' && calculatorType != 'pre_cut_roll') { 7858 var customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7859 let priceLabelElement = document.querySelector('.final-price .price-label'); 7860 var priceLabel = ""; 7861 7862 if (priceLabelElement) { 7863 priceLabel = priceLabelElement.textContent.trim(); 7864 } 7865 7866 document.querySelectorAll('.display-option-price').forEach(el => { 7867 el.textContent = "("+customOptionPrice+priceLabel+")"; 7868 }); 7869 } else if (calculatorType == 'none') { 7870 //None type 7871 var priceElement = document.querySelector('.none .final-price .price'); 7872 var customOptionPrice = ""; 7873 7874 if (priceElement) { 7875 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7876 } 7877 document.querySelectorAll('.display-option-price').forEach(el => { 7878 el.textContent = "("+customOptionPrice+")"; 7879 }); 7880 } else if (calculatorType == 'pre_cut_roll') { 7881 let priceLabelElement = document.querySelector('.final-price .price-label'); 7882 var priceLabel = ""; 7883 7884 if (priceLabelElement) { 7885 priceLabel = priceLabelElement.textContent.trim(); 7886 } 7887 var priceElement = document.querySelector('.pre_cut_roll .final-price .price'); 7888 var customOptionPrice = ""; 7889 7890 if (priceElement) { 7891 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7892 } 7893 document.querySelectorAll('.display-option-price').forEach(el => { 7894 el.textContent = "("+customOptionPrice+priceLabel+")"; 7895 }); 7896 } 7897 }, "500"); 7898 }, 7899 updateTileSizeArea() { 7900 const overage_percent = this.optionConfig.overage_percent[this.productIndex]; 7901 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 7902 const exact_width = this.optionConfig.exact_width[this.productIndex]; 7903 const exact_length = this.optionConfig.exact_length[this.productIndex]; 7904 window.dispatchEvent( 7905 new CustomEvent( 7906 "update-tile-size-area-" + this.productId, 7907 { 7908 detail: { 7909 overage_percent: overage_percent, 7910 coverage_per_case: coverage_per_case, 7911 exact_width: exact_width, 7912 exact_length: exact_length, 7913 calculator_type: this.optionConfig.calculator_type[this.productIndex], 7914 } 7915 } 7916 ) 7917 ); 7918 }, 7919 updateExactWidth() { 7920 const exact_width = this.optionConfig.exact_width[this.productIndex]; 7921 window.dispatchEvent( 7922 new CustomEvent( 7923 "update-exact-width-" + this.productId, 7924 {detail: exact_width} 7925 ) 7926 ); 7927 }, 7928 updateExactLength() { 7929 const exact_length = this.optionConfig.exact_length[this.productIndex]; 7930 window.dispatchEvent( 7931 new CustomEvent(
7932 "update-exact-length-" + this.productId, 7933 {detail: exact_length} 7934 ) 7935 ); 7936 }, 7937 updateExactHeight() { 7938 const exact_height = this.optionConfig.exact_height[this.productIndex]; 7939 window.dispatchEvent( 7940 new CustomEvent( 7941 "update-exact-height-" + this.productId, 7942 {detail: exact_height} 7943 ) 7944 ); 7945 }, 7946 updateCoveragePerCase() { 7947 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 7948 //const tile_size_area = ""; 7949 window.dispatchEvent( 7950 new CustomEvent( 7951 "update-coverage-per-case-" + this.productId, 7952 {detail: coverage_per_case} 7953 ) 7954 ); 7955 }, 7956 updateTileMinQty() { 7957 const min_tile_quantity = this.optionConfig.min_tile_quantity[this.productIndex]; 7958 window.dispatchEvent( 7959 new CustomEvent( 7960 "update-min-tile-quantity-" + this.productId, 7961 {detail: min_tile_quantity} 7962 ) 7963 ); 7964 }, 7965 getAttributeIdByCode(attributeCode) { 7966 let attributes = this.optionConfig.attributes; 7967 7968 for (let id in attributes) { 7969 if (attributes[id].code === attributeCode) { 7970 return id; 7971 } 7972 } 7973 7974 return null; 7975 }, 7976 updateCalculatorType() { 7977 const has_corner_border_center = this.optionConfig.has_corner_border_center[this.productIndex]; 7978 const calculator_type = this.optionConfig.calculator_type[this.productIndex]; 7979 if(calculator_type == 'sqft' && has_corner_border_center !=1){ 7980 var cbcelements = document.querySelectorAll('.cbc'); 7981 cbcelements.forEach(function(element) { 7982 element.style.display = 'none'; 7983 }); 7984 var noneelements = document.querySelectorAll('.none'); 7985 noneelements.forEach(function(element) { 7986 element.style.display = 'none'; 7987 }); 7988 var rollelements = document.querySelectorAll('.roll'); 7989 rollelements.forEach(function(element) { 7990 element.style.display = 'none'; 7991 }); 7992 var cbcelements = document.querySelectorAll('.case'); 7993 cbcelements.forEach(function(element) { 7994 element.style.display = 'none'; 7995 }); 7996 var elements = document.querySelectorAll('.sqft'); 7997 elements.forEach(function(element) { 7998 element.style.display = 'block'; 7999 }); 8000 8001 var elements = document.querySelectorAll('.pre_cut_roll'); 8002 elements.forEach(function(element) { 8003 element.style.display = 'none'; 8004 }); 8005 const button = document.getElementById("product-addtocart-button-fake"); 8006 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8007 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8008 } 8009 } else if(calculator_type == 'sqft' && has_corner_border_center ==1){ 8010 var sqftelements = document.querySelectorAll('.sqft'); 8011 sqftelements.forEach(function(element) { 8012 element.style.display = 'none'; 8013 }); 8014 var caseelements = document.querySelectorAll('.case'); 8015 caseelements.forEach(function(element) { 8016 element.style.display = 'none'; 8017 }); 8018 var rollelements = document.querySelectorAll('.roll');
8019 rollelements.forEach(function(element) { 8020 element.style.display = 'none'; 8021 }); 8022 var noneelements = document.querySelectorAll('.none'); 8023 noneelements.forEach(function(element) { 8024 element.style.display = 'none'; 8025 }); 8026 var elements = document.querySelectorAll('.cbc'); 8027 elements.forEach(function(element) { 8028 element.style.display = 'block'; 8029 }); 8030 var elements = document.querySelectorAll('.price-details .sqft'); 8031 elements.forEach(function(element) { 8032 element.style.display = 'none'; 8033 }); 8034 8035 var elements = document.querySelectorAll('.pre_cut_roll'); 8036 elements.forEach(function(element) { 8037 element.style.display = 'none'; 8038 }); 8039 const button = document.getElementById("product-addtocart-button-fake"); 8040 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8041 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8042 } 8043 }else if(calculator_type == 'case'){ 8044 var sqftelements = document.querySelectorAll('.sqft'); 8045 sqftelements.forEach(function(element) { 8046 element.style.display = 'none'; 8047 }); 8048 var cbcelements = document.querySelectorAll('.cbc'); 8049 cbcelements.forEach(function(element) { 8050 element.style.display = 'none'; 8051 }); 8052 var noneelements = document.querySelectorAll('.none'); 8053 noneelements.forEach(function(element) { 8054 element.style.display = 'none'; 8055 }); 8056 var rollelements = document.querySelectorAll('.roll'); 8057 rollelements.forEach(function(element) { 8058 element.style.display = 'none'; 8059 }); 8060 var elements = document.querySelectorAll('.case'); 8061 elements.forEach(function(element) { 8062 element.style.display = 'block'; 8063 }); 8064 8065 var elements = document.querySelectorAll('.pre_cut_roll'); 8066 elements.forEach(function(element) { 8067 element.style.display = 'none'; 8068 }); 8069 const button = document.getElementById("product-addtocart-button-fake"); 8070 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8071 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8072 } 8073 } else if(calculator_type == 'roll'){ 8074 var sqftelements = document.querySelectorAll('.sqft'); 8075 sqftelements.forEach(function(element) { 8076 element.style.display = 'none'; 8077 }); 8078 var cbcelements = document.querySelectorAll('.cbc'); 8079 cbcelements.forEach(function(element) { 8080 element.style.display = 'none'; 8081 }); 8082 var caseelements = document.querySelectorAll('.case'); 8083 caseelements.forEach(function(element) { 8084 element.style.display = 'none'; 8085 }); 8086 var noneelements = document.querySelectorAll('.none'); 8087 noneelements.forEach(function(element) { 8088 element.style.display = 'none'; 8089 }); 8090 var elements = document.querySelectorAll('.roll'); 8091 elements.forEach(function(element) { 8092 element.style.display = 'block'; 8093 }); 8094 const button = document.getElementById("product-addtocart-button-fake"); 8095 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8096 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8097 } 8098 8099 var elements = document.querySelectorAll('.pre_cut_roll');
8100 elements.forEach(function(element) { 8101 element.style.display = 'none'; 8102 }); 8103 } else if(calculator_type == 'pre_cut_roll'){ 8104 var sqftelements = document.querySelectorAll('.sqft'); 8105 sqftelements.forEach(function(element) { 8106 element.style.display = 'none'; 8107 }); 8108 var cbcelements = document.querySelectorAll('.cbc'); 8109 cbcelements.forEach(function(element) { 8110 element.style.display = 'none'; 8111 }); 8112 var caseelements = document.querySelectorAll('.case'); 8113 caseelements.forEach(function(element) { 8114 element.style.display = 'none'; 8115 }); 8116 var noneelements = document.querySelectorAll('.none'); 8117 noneelements.forEach(function(element) { 8118 element.style.display = 'none'; 8119 }); 8120 var elements = document.querySelectorAll('.roll'); 8121 elements.forEach(function(element) { 8122 element.style.display = 'none'; 8123 }); 8124 var elements = document.querySelectorAll('.pre_cut_roll'); 8125 elements.forEach(function(element) { 8126 element.style.display = 'block'; 8127 }); 8128 const button = document.getElementById("product-addtocart-button-fake"); 8129 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickforPreCutRoll") { 8130 button.setAttribute("data-flooring-handler", "addToCartClickforPreCutRoll"); 8131 } 8132 } else { 8133 var sqftelements = document.querySelectorAll('.sqft'); 8134 sqftelements.forEach(function(element) { 8135 element.style.display = 'none'; 8136 }); 8137 var cbcelements = document.querySelectorAll('.cbc'); 8138 cbcelements.forEach(function(element) { 8139 element.style.display = 'none'; 8140 }); 8141 var caseelements = document.querySelectorAll('.case'); 8142 caseelements.forEach(function(element) { 8143 element.style.display = 'none'; 8144 }); 8145 var rollelements = document.querySelectorAll('.roll'); 8146 rollelements.forEach(function(element) { 8147 element.style.display = 'none'; 8148 }); 8149 var cbcelements = document.querySelectorAll('.case'); 8150 cbcelements.forEach(function(element) { 8151 element.style.display = 'none'; 8152 }); 8153 var elements = document.querySelectorAll('.none'); 8154 elements.forEach(function(element) { 8155 element.style.display = 'block'; 8156 }); 8157 const noneButton = document.getElementById("product-addtocart-button-fake"); 8158 if (noneButton && noneButton.getAttribute("data-flooring-handler") !== "addToCartClickforNone") { 8159 noneButton.setAttribute("data-flooring-handler", "addToCartClickforNone"); 8160 } 8161 8162 var elements = document.querySelectorAll('.pre_cut_roll'); 8163 elements.forEach(function(element) { 8164 element.style.display = 'none'; 8165 }); 8166 } 8167 }, 8168 updateMinRollcut() { 8169 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 8170 var exactlength = ''; 8171 window.dispatchEvent( 8172 new CustomEvent( 8173 "update-min-rollcut-" + this.productId, 8174 {detail: min_rollcut} 8175 ) 8176 ); 8177 }, 8178 8179 updateMaxRollLengthRestriction() { 8180 const max_roll_length_restriction = this.optionConfig.max_roll_length_restriction[this.productIndex]; 8181 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8182 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8183 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 8184 8185 window.dispatchEvent( 8186 new CustomEvent( 8187 "update-max-roll-length-restriction-" + this.productId, 8188 { 8189 detail: { 8190 max_roll_length_restriction: max_roll_length_restriction, 8191 min_rollcut: min_rollcut, 8192 exact_width: exact_width, 8193 exact_length: exact_length, 8194 } 8195 } 8196 ) 8197 ); 8198 }, 8199 updateShippingDetails() { 8200 const pdp_shipping_text = this.optionConfig.pdp_shipping_text[this.productIndex]; 8201 const expected_days_ship = this.optionConfig.expected_days_ship[this.productIndex]; 8202 window.dispatchEvent( 8203 new CustomEvent( 8204 "update-shipping-details-" + this.productId, 8205 { 8206 detail: { 8207 pdp_shipping_text: pdp_shipping_text, 8208 expected_days_ship: expected_days_ship, 8209 } 8210 } 8211 ) 8212 ); 8213 }, 8214 updateGallery () { 8215 if (this.isLoadedFirst && this.ssrGalleryChildId > 0) { 8216 return; 8217 } 8218 8219 if (this.productIndex) { 8220 const images = this.optionConfig.images[this.productIndex]; 8221 images && window.dispatchEvent(new CustomEvent( 8222 "update-gallery", 8223 { detail: this.sortImagesByPosition(images) } 8224 )); 8225 } else { 8226 window.dispatchEvent(new Event("reset-gallery")); 8227 } 8228 }, 8229 updateSquareFootage () { 8230 let squareFootageElement = document.getElementsByName('square_footage'); 8231 8232 if (squareFootageElement.length > 0) { 8233 var squareFootage = squareFootageElement[0].value; 8234 8235 if (squareFootage) { 8236 // Trigger the 'keyup' event 8237 var event = new KeyboardEvent('keyup', { 8238 'key': 'Enter', // You can set this to any key, like 'Enter' 8239 'bubbles': true, 8240 'cancelable': true 8241 }); 8242 8243 squareFootageElement[0].dispatchEvent(event); 8244 } 8245 } 8246 }, 8247 sortImagesByPosition(images) { 8248 return images.sort((x, y) => { 8249 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 8250 }); 8251 }, 8252 onGetCartData(data) { 8253 this.preselectCartItems(data); 8254 this.preselectQuerystringItems(); 8255 this.preselectLocationHashItems(); 8256 }, 8257 preselectCartItems(data) { 8258 // pre-select options based on cart data for current (quote) itemId 8259 const cart = data && data.cart; 8260 if (cart && cart.items) { 8261 const cartItem = cart.items.find((item) => { 8262 return ( 8263 item.item_id === this.itemId 8264 && item.product_id === this.productId 8265 ) 8266 }); 8267 if (cartItem && cartItem.options && cartItem.options.length) { 8268 cartItem.options.map(option => { 8269 this.changeOption(option.option_id, option.option_value); 8270 }) 8271 } 8272 } 8273 }, 8274 preselectQuerystringItems() { 8275 // pre-select option like ?size=167 8276 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 8277 Object.values(this.optionConfig.attributes).map(attribute => { 8278 urlQueryParams.get(attribute.code) && 8279 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 8280 }); 8281 }, 8282 preselectLocationHashItems() { 8283 // pre-select option like #144=167 8284 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 8285 Object.values(this.optionConfig.attributes).map(attribute => { 8286 urlHashParams.get(attribute.id) && 8287 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 8288 }); 8289 } 8290 } 8291 } 8292 8293 function isOptionVisible(element) { 8294 const computedStyle = window.getComputedStyle(element); 8295 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden'; 8296 } 8297</script>
vendor: 1 bytes, line 8297
8297
8298<script> 8299 function initCompareOnProductList() { 8300 return { 8301 addToCompare(productId) { 8302 const formKey = hyva.getFormKey(); 8303 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 8304 8305 fetch(postUrl, { 8306 "headers": { 8307 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 8308 }, 8309 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 8310 "method": "POST", 8311 "mode": "cors", 8312 "credentials": "include" 8313 }).then(function (response) { 8314 if (response.redirected) { 8315 window.location.href = response.url; 8316 } 8317 }).catch(function (error) { 8318 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8319 [{ 8320 type: "error", 8321 text: error 8322 }], 5000 8323 ); 8324 }); 8325 } 8326 }; 8327 } 8328</script>
vendor: 1 bytes, line 8328
8328
8329<script> 8330 function initWishlist() { 8331 return { 8332 addToWishlist(productId) { 8333 const formKey = hyva.getFormKey(); 8334 const postUrl = BASE_URL + 'wishlist/index/add/'; 8335 8336 fetch(postUrl, { 8337 "headers": { 8338 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 8339 }, 8340 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 8341 "method": "POST", 8342 "mode": "cors", 8343 "credentials": "include" 8344 }).then(function (response) { 8345 if (response.redirected) { 8346 window.location.href = response.url; 8347 } else if (response.ok) { 8348 return response.json(); 8349 } else { 8350 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8351 [{ 8352 type: "warning", 8353 text: "Could not add item to wishlist." 8354 }], 5000 8355 ); 8356 } 8357 }).then(function (response) { 8358 if (!response) { return } 8359 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8360 [{ 8361 type: (response.success) ? "success" : "error", 8362 text: (response.success) 8363 ? "Product has been added to your Wish List." 8364 : response.error_message 8365 }], 5000 8366 ); 8367 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 8368 window.dispatchEvent(reloadCustomerDataEvent); 8369 }).catch(function (error) { 8370 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8371 [{ 8372 type: "error", 8373 text: error 8374 }], 5000 8375 ); 8376 }); 8377 } 8378 } 8379 } 8380</script>
vendor: 1 bytes, line 8380
8380
8381<script> 8382 function initSwatchOptions(swatchConfig, swatchLabelValues = null) { 8383 const normalizedSwatchLabelValues = ( 8384 swatchLabelValues 8385 && typeof swatchLabelValues === 'object' 8386 && !Array.isArray(swatchLabelValues) 8387 ) ? swatchLabelValues : {}; 8388 8389 return { 8390 swatchConfig, 8391 swatchLabelValues: normalizedSwatchLabelValues, 8392 resolveSwatchLabel(attributeId, optionId) { 8393 if (optionId === undefined || optionId === null || optionId === '') { 8394 return ''; 8395 } 8396 8397 const optionKey = String(optionId); 8398 const labels = ( 8399 this.swatchLabelValues 8400 && typeof this.swatchLabelValues === 'object' 8401 && !Array.isArray(this.swatchLabelValues) 8402 ) ? this.swatchLabelValues : {}; 8403 const flatLabel = labels[optionKey] ?? labels[optionId]; 8404 if (flatLabel !== undefined && flatLabel !== null && flatLabel !== '') { 8405 return String(flatLabel); 8406 } 8407 8408 const attrConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[String(attributeId)]; 8409 const attrLabels = attrConfig?.swatchLabelValues; 8410 if (attrLabels) { 8411 const attrLabel = attrLabels[optionKey] ?? attrLabels[optionId]; 8412 if (attrLabel !== undefined && attrLabel !== null && attrLabel !== '') { 8413 return String(attrLabel); 8414 } 8415 } 8416 8417 const swatchOption = attrConfig?.[optionKey] ?? attrConfig?.[optionId]; 8418 if (swatchOption?.label) { 8419 return String(swatchOption.label); 8420 } 8421 8422 return this.getOptionLabelFromOptionConfig(attributeId, optionId) || ''; 8423 }, 8424 getAttributeSwatchData(attributeId) { 8425 const attributeKey = String(attributeId); 8426 const rawConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[attributeKey]; 8427 const labels = ( 8428 this.swatchLabelValues 8429 && typeof this.swatchLabelValues === 'object' 8430 && !Array.isArray(this.swatchLabelValues) 8431 ) ? this.swatchLabelValues : {}; 8432 if (!rawConfig) { 8433 return {details: {}, swatchLabelValues: labels}; 8434 } 8435 const swatchConfig = Object.assign({}, rawConfig); 8436 if (swatchConfig['additional_data']) { 8437 try { 8438 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 8439 } catch (error) { 8440 swatchConfig['details'] = {}; 8441 } 8442 } else { 8443 swatchConfig['details'] = swatchConfig['details'] ?? {}; 8444 } 8445 swatchConfig['swatchLabelValues'] = labels; 8446 8447 return swatchConfig; 8448 }, 8449 getAllAttributeOptions(attributeId) { 8450 return ( 8451 this.optionConfig.attributes[attributeId] && 8452 this.optionConfig.attributes[attributeId].options 8453 ) || [] 8454 }, 8455 optionIsActive(attributeId, optionId) { 8456 const optionKey = String(optionId); 8457 return !!this.getAllowedAttributeOptions(attributeId).find( 8458 option => String(option.id) === optionKey 8459 ); 8460 }, 8461 optionIsEnabled(attributeId, optionId) { 8462 const attributeKey = String(attributeId); 8463 const optionKey = String(optionId); 8464 const index = this.optionConfig?.index || {}; 8465 for (const productId in index) { 8466 const productOptions = index[productId] || {}; 8467 if ( 8468 String(productOptions[attributeKey]) === optionKey 8469 || String(productOptions[attributeId]) === optionKey 8470 ) { 8471 return true; 8472 } 8473 } 8474 const attributeOptions = ( 8475 this.optionConfig?.attributes?.[attributeId]?.options 8476 || this.optionConfig?.attributes?.[attributeKey]?.options 8477 || [] 8478 ); 8479 const match = attributeOptions.find((option) => String(option.id) === optionKey); 8480 if (!match?.products?.length) { 8481 return false;
8482 } 8483 return match.products.some((childId) => { 8484 const key = String(childId); 8485 return Object.prototype.hasOwnProperty.call(index, key) 8486 || Object.prototype.hasOwnProperty.call(index, childId); 8487 }); 8488 }, 8489 mapSwatchTypeNumberToTypeCode(typeNumber) { 8490 switch ("" + typeNumber) { 8491 case "1": 8492 return "color" 8493 case "2": 8494 return "image" 8495 case "3": 8496 return "empty" 8497 case "0": 8498 default: 8499 return "text" 8500 } 8501 }, 8502 getTypeOfFirstOption(attributeId) { 8503 for (const optionId in this.swatchConfig[attributeId]) { 8504 const option = this.swatchConfig[attributeId][optionId]; 8505 if (typeof option.type !== 'undefined') { 8506 return this.mapSwatchTypeNumberToTypeCode(option.type); 8507 } 8508 } 8509 }, 8510 getVisualSwatchType(attributeId, targetOptionId) { 8511 // If a type configuration is present for the given option id, use it 8512 const config = this.swatchConfig[attributeId]; 8513 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 8514 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 8515 } 8516 8517 // Otherwise - if no config is present for the target option - use the type of the first option 8518 // with a type property from the attribute, thus assuming its the same type as the target option. 8519 // (This edge case condition can occur on single swatch products if some options are not salable) 8520 return this.getTypeOfFirstOption(attributeId); 8521 }, 8522 getSwatchType(attributeId, optionId) { 8523 // Deserialize the attribute details the first time they are used 8524 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 8525 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 8526 } 8527 const type = this.swatchConfig[attributeId] && 8528 this.swatchConfig[attributeId].details && 8529 this.swatchConfig[attributeId].details.swatch_input_type || 8530 "empty"; 8531 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 8532 }, 8533 isTextSwatch(attributeId, optionId) { 8534 return this.getSwatchType(attributeId, optionId) === 'text'; 8535 }, 8536 isVisualSwatch(attributeId, optionId) { 8537 const type = this.getSwatchType(attributeId, optionId); 8538 8539 return ['image', 'color'].includes(type); 8540 }, 8541 getSwatchBackgroundStyle(attributeId, optionId) { 8542 const config = this.getSwatchConfig(attributeId, optionId); 8543 const type = this.getSwatchType(attributeId, optionId); 8544 8545 if (type === "color") { 8546 return 'background-color:' + config.value; 8547 } else if (type === "image") { 8548 return "background: #ffffff url('" + config.value + "') no-repeat center"; 8549 } else { 8550 return ''; 8551 } 8552 }, 8553 getSwatchText(attributeId, optionId) { 8554 return this.resolveSwatchLabel(attributeId, optionId); 8555 }, 8556 getLegacyColorSwatchImageHtml(attributeId, optionId) { 8557 const map = this._legacyColorSwatchImages || {}; 8558 return this.getSwatchTextUrl(attributeId, optionId, map); 8559 }, 8560 getSwatchTextUrl(attributeId, optionId, childSwatch) { 8561 const config = this.getSwatchConfig(attributeId, optionId); 8562 const optionKey = String(optionId); 8563 const swatchMap = ( 8564 childSwatch 8565 && typeof childSwatch === 'object' 8566 && !Array.isArray(childSwatch) 8567 ) ? childSwatch : {}; 8568 const swatchUrl = swatchMap[optionKey] ?? swatchMap[optionId]; 8569 if(swatchUrl != "" && swatchUrl != null && isValidURL(swatchUrl)){ 8570 return "<img loading='lazy' src="+swatchUrl+" title="+swatchUrl+" alt="+swatchUrl+"/>"; 8571 } else if(config && config.value!="" && config.value!= null && isValidURL(config.value)){ 8572 return "<img loading='lazy' src="+config.value+" title="+config.value+" alt="+config.value+"/>"; 8573 } else { 8574 var placeHoldernew = BASE_URL+'media/catalog/product/placeholder/default/swatch_placeholder.png'; 8575 8576 return "<img width= '60px' height='60px' src="+placeHoldernew+" title="+placeHoldernew+" alt="+placeHoldernew+"/>"; 8577 } 8578 }, 8579 getOptionLabelFromOptionConfig(attributeId, optionId) { 8580 const optionKey = String(optionId); 8581 const option = this.getAllAttributeOptions(attributeId).find( 8582 (entry) => String(entry.id) === optionKey 8583 ); 8584 return option?.label || ''; 8585 }, 8586 getSwatchConfig(attributeId, optionId) { 8587 const attrConfig = this.swatchConfig[attributeId] ?? this.swatchConfig[String(attributeId)]; 8588 if (!attrConfig) { 8589 return false;
8590 } 8591 return attrConfig[optionId] ?? attrConfig[String(optionId)] ?? false; 8592 }, 8593 activeTooltipItem: false, 8594 tooltipPositionElement: false, 8595 isTooltipVisible() { 8596 return this.activeTooltipItem && 8597 this.getSwatchConfig( 8598 this.activeTooltipItem.attribute, 8599 this.activeTooltipItem.item 8600 ); 8601 }, 8602 getTooltipImageStyle(attributeId, optionId) { 8603 const config = this.getSwatchConfig(attributeId, optionId); 8604 const type = this.getSwatchType(attributeId, optionId); 8605 8606 if (type === "color") { 8607 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 8608 } else if (type === "image") { 8609 return "background: #ffffff url('" + config.thumb + 8610 "') center center no-repeat; width: 110px; height: 90px;"; 8611 } else { 8612 return 'display:none'; 8613 } 8614 }, 8615 getTooltipPosition() { 8616 if (!this.tooltipPositionElement) { 8617 return ''; 8618 } 8619 const rect = this.tooltipPositionElement.getBoundingClientRect(); 8620 const elementWidth = rect.width; 8621 const elementHeight = rect.height; 8622 const container = document.querySelector('.swatch___render'); 8623 if (!container) { 8624 return ''; 8625 } 8626 const containerRect = container.getBoundingClientRect(); 8627 const topPosition = rect.top - containerRect.top + 10; 8628 const leftPosition = rect.left - containerRect.left; 8629 8630 return ` 8631 top: ${topPosition}px; 8632 left: ${leftPosition}px; 8633 `; 8634 }, 8635 getSwatchConfigLabel(attributeId, optionId) { 8636 const label = this.resolveSwatchLabel(attributeId, optionId); 8637 return label !== '' ? label : false; 8638 }, 8639 getTooltipLabel() { 8640 return this.getSwatchConfigLabel(this.activeTooltipItem.attribute, this.activeTooltipItem.item); 8641 //return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 8642 }, 8643 focusedLabel: false, 8644 focusLabel(optionId) { 8645 this.focusedLabel = optionId; 8646 }, 8647 blurLabel() { 8648 this.focusedLabel = false; 8649 }, 8650 showSwatches: true, 8651 initShowSwatchesIntersect() { 8652 this.showSwatches = true; 8653 }, 8654 8655 quickShipValidation(attributeCode, attributeId, optionId){ 8656 if (optionId === undefined || optionId === null || optionId === '') { 8657 return 0; 8658 } 8659 var is_quick_ship_color = 0; 8660 var optionConfigObj = this.optionConfig; 8661 if (!optionConfigObj || typeof optionConfigObj !== 'object') { 8662 return 0; 8663 } 8664 if(attributeCode == 'incstores_pim_color_axis'){ 8665 var attributes = optionConfigObj.attributes; 8666 if (!attributes || !attributes[attributeId] || !attributes[attributeId]['options']) { 8667 return 0; 8668 } 8669 var quickShipColorIds = optionConfigObj.quick_ship_color_ids || []; 8670 if (quickShipColorIds.length) { 8671 return quickShipColorIds.some(function (id) { 8672 return String(id) === String(optionId); 8673 }) ? 1 : 0; 8674 } 8675 var quickShipMap = optionConfigObj.quick_ship; 8676 if (!quickShipMap) { 8677 return 0; 8678 } 8679 var attributes_options = attributes[attributeId]['options']; 8680 8681 attributes_options.forEach(function(option_details) { 8682 if(option_details['id'] == optionId){ 8683 option_details['products'].forEach(function(child_product_id) { 8684 if(quickShipMap[String(child_product_id)] == 1 || quickShipMap[child_product_id] == 1){ 8685 is_quick_ship_color = 1; 8686 return false;
8687 } 8688 }); 8689 } 8690 }); 8691 } 8692 return is_quick_ship_color; 8693 }, 8694 8695 hasQuickShipColorOptions(attributeCode, attributeId) { 8696 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 8697 return false; 8698 } 8699 if (this.selectedValues) { 8700 Object.keys(this.selectedValues).forEach(function (key) { 8701 void this.selectedValues[key]; 8702 }.bind(this)); 8703 } 8704 var colorIds = this.optionConfig.quick_ship_color_ids || []; 8705 var options = this.optionConfig.attributes[attributeId].options; 8706 for (var i = 0; i < options.length; i++) { 8707 var optionId = options[i].id; 8708 var isQuick = colorIds.length 8709 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 8710 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 8711 if (!isQuick) { 8712 continue; 8713 } 8714 if (!this.optionIsEnabled(attributeId, optionId)) { 8715 continue; 8716 } 8717 if (!this.optionIsActive(attributeId, optionId)) { 8718 continue; 8719 } 8720 return true; 8721 } 8722 return false; 8723 }, 8724 8725 hasNormalColorOptions(attributeCode, attributeId) { 8726 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 8727 return false; 8728 } 8729 if (this.shipRegionZipActive && this.customerRegionCode) { 8730 return false; 8731 } 8732 var colorIds = this.optionConfig.quick_ship_color_ids || []; 8733 var options = this.optionConfig.attributes[attributeId].options; 8734 for (var i = 0; i < options.length; i++) { 8735 var optionId = options[i].id; 8736 var isQuick = colorIds.length 8737 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 8738 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 8739 if (!isQuick) { 8740 if (!this.optionIsEnabled(attributeId, optionId)) { 8741 continue; 8742 } 8743 if (!this.optionIsActive(attributeId, optionId)) { 8744 continue; 8745 } 8746 return true; 8747 } 8748 } 8749 return false; 8750 }, 8751 8752 shouldShowQuickShipSection(attributeCode, attributeId) { 8753 if (this.shipRegionZipActive && this.customerRegionCode) { 8754 return false; 8755 } 8756 return this.hasQuickShipColorOptions(attributeCode, attributeId); 8757 }, 8758 8759 getOtherSwatchAttributeId(section = null) { 8760 const target = section || document.querySelector('.swatch-attribute.other_swatch_option'); 8761 if (!target || !this.optionConfig?.attributes) { 8762 return null; 8763 } 8764 for (const key in this.optionConfig.attributes) { 8765 const code = this.optionConfig.attributes[key]?.code;
8766 if (code && code !== 'incstores_pim_color_axis' && target.classList.contains(code)) { 8767 return parseInt(key, 10); 8768 } 8769 } 8770 for (const key in this.optionConfig.attributes) { 8771 const code = this.optionConfig.attributes[key]?.code; 8772 if (code && code !== 'incstores_pim_color_axis') { 8773 return parseInt(key, 10); 8774 } 8775 } 8776 return null; 8777 }, 8778 8779 /** 8780 * Count salable/enabled options only. Disabled Magento variants stay out of the UI. 8781 * Hide "Select An Option" when fewer than two enabled options remain. 8782 */ 8783 countEnabledOtherSwatchOptions(attrId) { 8784 if (!attrId) { 8785 return 0; 8786 } 8787 const options = this.optionConfig?.attributes?.[attrId]?.options || []; 8788 return options.filter((option) => this.optionIsEnabled(attrId, option.id)).length; 8789 }, 8790 8791 countVisibleOtherSwatchOptions() { 8792 return this.countEnabledOtherSwatchOptions(this.getOtherSwatchAttributeId()); 8793 }, 8794 8795 syncOtherSwatchOptionVisibility() { 8796 const sections = document.querySelectorAll('.swatch-attribute.other_swatch_option'); 8797 if (!sections.length) { 8798 return; 8799 } 8800 const self = this; 8801 const applyVisibility = () => { 8802 sections.forEach((variantSection) => { 8803 const attrId = self.getOtherSwatchAttributeId(variantSection); 8804 if (!attrId) { 8805 return; 8806 } 8807 const optionCount = self.countEnabledOtherSwatchOptions(attrId); 8808 const shouldShow = optionCount > 1; 8809 variantSection.classList.toggle('dcw-single-option-hidden', !shouldShow); 8810 // Theme CSS defaults other_swatch_option to display:none â force block/none. 8811 variantSection.style.setProperty( 8812 'display', 8813 shouldShow ? 'block' : 'none', 8814 'important' 8815 ); 8816 if (!shouldShow && optionCount === 1) { 8817 const options = self.optionConfig?.attributes?.[attrId]?.options || []; 8818 const enabledOption = options.find((option) => self.optionIsEnabled(attrId, option.id)); 8819 const optionId = enabledOption?.id; 8820 if (optionId !== undefined 8821 && String(self.selectedValues[attrId]) !== String(optionId) 8822 && typeof self.changeOption === 'function') { 8823 self.changeOption(attrId, optionId); 8824 } 8825 } 8826 }); 8827 }; 8828 applyVisibility(); 8829 window.setTimeout(applyVisibility, 300); 8830 }, 8831 8832 /** 8833 * After color selection only (including disabled colors): if current variant/option 8834 * is incompatible, auto-select the cheapest compatible one. Never run on variant clicks.
8835 */ 8836 autoSelectCompatibleOtherOption(colorAttrId) { 8837 if (!colorAttrId || !this.optionConfig?.attributes) { 8838 return; 8839 } 8840 const selectedColor = this.selectedValues[colorAttrId]; 8841 if (!selectedColor) { 8842 return; 8843 } 8844 8845 let otherAttrId = null; 8846 if (typeof this.getAttributeIdByCode === 'function') { 8847 otherAttrId = this.getAttributeIdByCode('incstores_pim_variant_axis') 8848 || this.getAttributeIdByCode('product_option'); 8849 } 8850 if (!otherAttrId) { 8851 const section = document.querySelector('.swatch-attribute.other_swatch_option'); 8852 otherAttrId = this.getOtherSwatchAttributeId(section); 8853 } 8854 if (!otherAttrId || !this.optionConfig.attributes[otherAttrId]) { 8855 return; 8856 } 8857 8858 const currentOther = this.selectedValues[otherAttrId]; 8859 const isCurrentCompatible = currentOther 8860 && typeof this.optionIsActive === 'function' 8861 && this.optionIsActive(otherAttrId, currentOther); 8862 8863 if (isCurrentCompatible) { 8864 return; 8865 } 8866 8867 const options = this.optionConfig.attributes[otherAttrId].options || []; 8868 let lowestPrice = null; 8869 let lowestOptionId = null; 8870 8871 options.forEach((option) => { 8872 if (typeof this.optionIsEnabled === 'function' 8873 && !this.optionIsEnabled(otherAttrId, option.id)) { 8874 return; 8875 } 8876 const productIds = option.products || []; 8877 productIds.forEach((productId) => { 8878 const product = this.optionConfig.index[productId] 8879 || this.optionConfig.index[String(productId)]; 8880 if (!product || String(product[colorAttrId]) !== String(selectedColor)) { 8881 return; 8882 } 8883 const priceData = this.optionConfig.optionPrices[productId] 8884 || this.optionConfig.optionPrices[String(productId)]; 8885 if (!priceData) { 8886 return; 8887 } 8888 const price = priceData.finalPrice.amount; 8889 if (lowestPrice === null || price < lowestPrice) { 8890 lowestPrice = price; 8891 lowestOptionId = option.id; 8892 } 8893 }); 8894 }); 8895 8896 if (lowestOptionId === null 8897 || String(this.selectedValues[otherAttrId]) === String(lowestOptionId)) { 8898 return; 8899 } 8900 8901 if (typeof this.changeOption === 'function') { 8902 this.changeOption(otherAttrId, lowestOptionId); 8903 return; 8904 } 8905 8906 const el = document.querySelector( 8907 'input[name="super_attribute[' + otherAttrId + ']"][value="' + lowestOptionId + '"]' 8908 ); 8909 if (el) { 8910 el.click(); 8911 } 8912 }, 8913 8914 /** 8915 * After variant / Select An Option change: if current color is unavailable, 8916 * auto-select the cheapest compatible color. Never run on color clicks. 8917 */ 8918 autoSelectCompatibleColorOption(otherAttrId) { 8919 if (!otherAttrId || !this.optionConfig?.attributes) { 8920 return; 8921 } 8922 const selectedOther = this.selectedValues[otherAttrId]; 8923 if (!selectedOther) { 8924 return; 8925 } 8926 8927 let colorAttrId = null; 8928 if (typeof this.getAttributeIdByCode === 'function') { 8929 colorAttrId = this.getAttributeIdByCode('incstores_pim_color_axis'); 8930 }
8931 if (!colorAttrId && typeof this.getShipRegionColorAttributeId === 'function') { 8932 colorAttrId = this.getShipRegionColorAttributeId(); 8933 } 8934 if (!colorAttrId || !this.optionConfig.attributes[colorAttrId]) { 8935 return; 8936 } 8937 8938 const currentColor = this.selectedValues[colorAttrId]; 8939 const isCurrentCompatible = currentColor 8940 && typeof this.optionIsActive === 'function' 8941 && this.optionIsActive(colorAttrId, currentColor); 8942 8943 if (isCurrentCompatible) { 8944 return; 8945 } 8946 8947 const options = this.optionConfig.attributes[colorAttrId].options || []; 8948 let lowestPrice = null; 8949 let lowestOptionId = null; 8950 8951 options.forEach((option) => { 8952 if (typeof this.optionIsEnabled === 'function' 8953 && !this.optionIsEnabled(colorAttrId, option.id)) { 8954 return; 8955 } 8956 const productIds = option.products || []; 8957 productIds.forEach((productId) => { 8958 const product = this.optionConfig.index[productId] 8959 || this.optionConfig.index[String(productId)]; 8960 if (!product || String(product[otherAttrId]) !== String(selectedOther)) { 8961 return; 8962 } 8963 const priceData = this.optionConfig.optionPrices[productId] 8964 || this.optionConfig.optionPrices[String(productId)]; 8965 if (!priceData) { 8966 return; 8967 } 8968 const price = priceData.finalPrice.amount; 8969 if (lowestPrice === null || price < lowestPrice) { 8970 lowestPrice = price; 8971 lowestOptionId = option.id; 8972 } 8973 }); 8974 }); 8975 8976 if (lowestOptionId === null 8977 || String(this.selectedValues[colorAttrId]) === String(lowestOptionId)) { 8978 return; 8979 } 8980 8981 if (typeof this.changeOption === 'function') { 8982 this.changeOption(colorAttrId, lowestOptionId); 8983 return; 8984 } 8985 8986 const el = document.querySelector( 8987 'input[name="super_attribute[' + colorAttrId + ']"][value="' + lowestOptionId + '"]' 8988 ); 8989 if (el) { 8990 el.click(); 8991 } 8992 }, 8993 8994 syncNormalColorSwatchQuickShipVisibility() { 8995 if (this.shipRegionZipActive && this.customerRegionCode) { 8996 return; 8997 } 8998 if (typeof this.quickShipValidation !== 'function') { 8999 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9000 this.syncNormalColorSwatchSectionVisibility(); 9001 } 9002 return; 9003 } 9004 const self = this; 9005 document.querySelectorAll('.normal_color_swatch_option .selectOptionColor').forEach(function (el) { 9006 const input = el.querySelector('input.product-option-value-input[name^="super_attribute"]'); 9007 if (!input) { 9008 return; 9009 } 9010 const nameMatch = input.name.match(/super_attribute\[(\d+)\]/); 9011 if (!nameMatch) { 9012 return; 9013 } 9014 const attributeId = parseInt(nameMatch[1], 10); 9015 const optionId = input.value; 9016 const attributeCode = input.getAttribute('data-attributecode') || 'incstores_pim_color_axis'; 9017 if (self.quickShipValidation(attributeCode, attributeId, optionId) === 1) { 9018 el.classList.add('hidden'); 9019 el.style.display = 'none'; 9020 } else { 9021 el.classList.remove('hidden'); 9022 el.style.display = ''; 9023 } 9024 }); 9025 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9026 this.syncNormalColorSwatchSectionVisibility(); 9027 } 9028 }, 9029 9030 getColorAttributeId() { 9031 if (typeof this.getAttributeIdByCode === 'function') { 9032 const id = this.getAttributeIdByCode('incstores_pim_color_axis'); 9033 return id ? parseInt(String(id), 10) : null; 9034 } 9035 if (!this.optionConfig?.attributes) { 9036 return null; 9037 } 9038 for (const key in this.optionConfig.attributes) { 9039 if (this.optionConfig.attributes[key]?.code === 'incstores_pim_color_axis') { 9040 return parseInt(key, 10); 9041 } 9042 } 9043 return null; 9044 }, 9045 9046 /** 9047 * Hide entire "Select A Color" block when every color is Quick Ship (or none left). 9048 */ 9049 syncNormalColorSwatchSectionVisibility() { 9050 const sections = document.querySelectorAll('.normal_color_swatch_option'); 9051 if (!sections.length) { 9052 return; 9053 } 9054 const colorAttrId = this.getColorAttributeId(); 9055 const shouldShow = colorAttrId 9056 && typeof this.hasNormalColorOptions === 'function' 9057 && this.hasNormalColorOptions('incstores_pim_color_axis', colorAttrId); 9058 9059 sections.forEach((section) => { 9060 if (!shouldShow) { 9061 section.classList.add('hidden'); 9062 section.style.setProperty('display', 'none', 'important'); 9063 } else { 9064 section.classList.remove('hidden', 'sr-only'); 9065 section.style.setProperty('display', 'block', 'important'); 9066 } 9067 }); 9068 } 9069 } 9070 } 9071 9072 function isValidURL(url) { 9073 // Regular expression for URL validation 9074 var pattern = /^(https?:\/\/)?([\w.]+)\.([a-z]{2,})(\/[\w\.-]*)*\/?$/i; 9075 return pattern.test(url); 9076} 9077</script>
vendor: 1 bytes, line 9077
9077
9078<script> 9079 'use strict'; 9080 9081 (function () { 9082 const modals = []; 9083 const excludedFromFocusTrapping = new Set(); 9084 9085 function trapFocusInNextModalWithOverlay() { 9086 for (let idx = modals.length -1; idx >= 0; idx--) { 9087 const nextOnStack = modals[idx]; 9088 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 9089 if (! isOverlayDisabled(nextDialogElement)) { 9090 hyva.trapFocus(nextDialogElement); 9091 break; 9092 } 9093 } 9094 } 9095 9096 function focusables(dialogElement) { 9097 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 9098 return Array.from(dialogElement.querySelectorAll(selector)) 9099 .filter(el => !el.hasAttribute('disabled')); 9100 } 9101 9102 function firstVisible(elements) { 9103 const a = Array.from(elements); 9104 for (let i = 0; i < a.length; i++) { 9105 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 9106 } 9107 return null; 9108 } 9109 9110 function isInViewport(element) { 9111 const rect = element && element.getBoundingClientRect(); 9112 return rect && 9113 rect.top >= 0 && 9114 rect.left >= 0 && 9115 rect.right <= window.innerWidth && 9116 rect.bottom <= window.innerHeight; 9117 } 9118 9119 function setFocusAfterTransition(dialogElement, duration) { 9120 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 9121 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 9122 next: for (let candidate of candidates) { 9123 for (let child of nested) { 9124 if (child.contains(candidate)) continue next; 9125 } 9126 setTimeout(() => candidate.focus(), 50); 9127 break; 9128 } 9129 window.setTimeout(() => { 9130 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 9131 focusables(dialogElement)[0] || 9132 null; 9133 focusElement && isInViewport(focusElement) && focusElement.focus(); 9134 }, Math.max(1, duration)); 9135 } 9136 9137 function determineTrigger($refs, dialog, trigger) { 9138 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 9139 return dialog.target; 9140 } 9141 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 9142 return trigger.target; 9143 } 9144 if (typeof trigger === 'string') { 9145 try { 9146 return $refs[trigger] || document.querySelector(trigger) 9147 } catch (e) {} 9148 } 9149 if (trigger instanceof Element) { 9150 return trigger; 9151 } 9152 9153 return null; 9154 } 9155 9156 function isOverlayDisabled(dialog) { 9157 return dialog && dialog.hasAttribute('x-no-overlay') 9158 } 9159 9160 function areRemainingModalsWithoutOverlay(modals) 9161 { 9162 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 9163 9164 return overflowDisabled.length === modals.length; 9165 } 9166 9167 window.hyva.modal = function(options) { 9168 9169 const config = Object.assign({ 9170 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 9171 transitionEnterStart: 'opacity-0', 9172 transitionEnterEnd: 'opacity-100', 9173 transitionLeave: 'transition ease-in duration-300', 9174 transitionLeaveStart: 'opacity-100', 9175 transitionLeaveEnd: 'opacity-0', 9176 }, options); 9177 let lastHide = 0; 9178 9179 return { 9180 opened: {}, 9181 show(dialog, trigger) { 9182 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 9183 const name = typeof dialog === 'string' ? dialog : config.dialog; 9184 const dialogElement = this.$refs[name]; 9185 if (! dialogElement) { 9186 return; 9187 } 9188 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 9189 9190 dialogElement.scrollTop = 0; 9191 9192 if (this.opened[name]) { 9193 return; 9194 } 9195 9196 if (focusTargetAfterHide) { 9197 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 9198 } 9199 9200 this.opened[name] = true; 9201 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 9202 setFocusAfterTransition(dialogElement, config.duration); 9203 9204 const frame = {name, instance: this, focusTarget: focu
9204sTargetAfterHide, time: Date.now()}; 9205 9206 modals.push(frame); 9207 if (useOverlay) { 9208 document.body.classList.add('overflow-hidden'); 9209 } 9210 return new Promise(resolve => frame.resolve = resolve); 9211 }, 9212 cancel() { 9213 this.hide(false); 9214 }, 9215 ok() { 9216 this.hide(true); 9217 }, 9218 hide(value) { 9219 if (Date.now() - lastHide < config.duration) { 9220 return; 9221 } 9222 lastHide = Date.now(); 9223 9224 const modal = modals.pop() || {}; 9225 const name = modal.name; 9226 this.opened[name] = false; 9227 hyva.releaseFocus(modal.instance.$refs[modal.name]) 9228 trapFocusInNextModalWithOverlay(); 9229 9230 const nextFocusAfterHide = modal.focusTarget; 9231 nextFocusAfterHide && setTimeout(() => { 9232 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 9233 nextFocusAfterHide.focus() 9234 }, config.duration); 9235 9236 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 9237 document.body.classList.remove('overflow-hidden'); 9238 } 9239 9240 modal.resolve(value); 9241 }, 9242 overlay(dialog) { 9243 const name = typeof dialog === 'string' ? dialog : config.dialog; 9244 return { 9245 ['x-show']() { 9246 return this.opened[name] 9247 }, 9248 ['x-transition:enter']: config.transitionEnter, 9249 ['x-transition:enter-start']: config.transitionEnterStart, 9250 ['x-transition:enter-end']: config.transitionEnterEnd, 9251 ['x-transition:leave']: config.transitionLeave, 9252 ['x-transition:leave-start']: config.transitionLeaveStart, 9253 ['x-transition:leave-end']: config.transitionLeaveEnd, 9254 ['@hyva-modal-show.window'](event) { 9255 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 9256 } 9257 }; 9258 } 9259 }; 9260 } 9261 9262 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 9263 9264 window.hyva.modal.pop = function () { 9265 if (modals.length > 0) { 9266 const modal = modals[modals.length -1]; 9267 modal.instance.hide(); 9268 } 9269 } 9270 9271 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 9272 typeof selectors === 'string' || selectors instanceof String 9273 ? excludedFromFocusTrapping.add(selectors) 9274 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 9275 } 9276 9277 window.hyva.modal.eventListeners = { 9278 keydown: event => { 9279 if (event.key === 'Escape') { 9280 window.hyva.modal.pop(); 9281 } 9282 }, 9283 click: event => { 9284 if (modals.length > 0) { 9285 const modal = modals[modals.length -1]; 9286 const dialog = modal.instance.$refs[modal.name]; 9287 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 9288 ! isOverlayDisabled(dialog) && // if dialog has overlay 9289 ! dialog.contains(event.target)) { // if click is outside of dialog 9290 modal.instance.hide(); 9291 } 9292 } 9293 } 9294 }; 9295 9296 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 9297 9298 document.addEventListener('click', window.hyva.modal.eventListeners.click); 9299 })(); 9300</script>
vendor: 1 bytes, line 9300
9300
9301<script> 9302 'use strict'; 9303 9304 (() => { 9305 const equalizeButtonWidths = (buttons) => { 9306 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 9307 let buttonMinWidth = 0; 9308 9309 buttonList.forEach(button => { 9310 const buttonWidth = button.offsetWidth; 9311 9312 if (buttonWidth > buttonMinWidth) { 9313 buttonMinWidth = buttonWidth; 9314 } 9315 }); 9316 9317 buttonList.forEach(button => { 9318 button.style.minWidth = `${buttonMinWidth}px`; 9319 }); 9320 }; 9321 9322 window.addEventListener('DOMContentLoaded', () => { 9323 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 9324 equalizeButtonWidths(buttons); 9325 }); 9326 }); 9327 })(); 9328</script>
vendor: 1 bytes, line 9328
9328
9329<script> 9330 'use strict'; 9331 9332 (() => { 9333 const initCarousels = (elements) => { 9334 if (!Glider) { 9335 return; 9336 } 9337 9338 const initProductCarousel = (carousel) => { 9339 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 9340 9341 if (!gliderElement) { 9342 return; 9343 } 9344 9345 const gliderDots = carousel.querySelector('.glider-dots'); 9346 const gliderPrev = carousel.querySelector('.glider-prev'); 9347 const gliderNext = carousel.querySelector('.glider-next'); 9348 9349 const glider = new Glider(gliderElement, { 9350 slidesToShow: 1.2, 9351 slidesToScroll: 2, 9352 scrollLock: true, 9353 draggable: true, 9354 dragVelocity: 2.5, 9355 dots: gliderDots, 9356 arrows: { 9357 prev: gliderPrev, 9358 next: gliderNext, 9359 }, 9360 responsive: [ 9361 { 9362 breakpoint: 768, 9363 settings: { 9364 slidesToShow: 3, 9365 slidesToScroll: 3, 9366 } 9367 }, 9368 { 9369 breakpoint: 1024, 9370 settings: { 9371 slidesToShow: 4, 9372 slidesToScroll: 4, 9373 } 9374 }, 9375 { 9376 breakpoint: 1200, 9377 settings: { 9378 slidesToShow: 5, 9379 slidesToScroll: 5, 9380 } 9381 } 9382 ], 9383 }); 9384 9385 carousel.classList.remove('overflow-x-scroll'); 9386 gliderPrev.classList.remove('hidden'); 9387 gliderNext.classList.remove('hidden'); 9388 9389 if (carousel.dataset.autoplay !== 'false') { 9390 gliderAutoplay( 9391 glider, 9392 carousel.dataset.autoplaySpeed, 9393 carousel.dataset.infiniteLoop 9394 ); 9395 } 9396 }; 9397 9398 const initSliderCarousel = (slider) => { 9399 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 9400 slider.classList.add('glider-contain'); 9401 9402 slider.insertAdjacentHTML( 9403 'beforeend', 9404 '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Previous\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
9404003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M15\u002019l\u002D7\u002D7\u00207\u002D7\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dleft\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022navigation\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Next\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
9404003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M9\u00205l7\u00207\u002D7\u00207\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dright\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' 9405 ); 9406 9407 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 9408 const gliderDots = slider.querySelector('.glider-dots'); 9409 const gliderPrev = slider.querySelector('.glider-prev'); 9410 const gliderNext = slider.querySelector('.glider-next'); 9411 9412 const glider = new Glider(gliderElement, { 9413 slidesToShow: 1, 9414 slidesToScroll: 1, 9415 scrollLock: true, 9416 scrollLockDelay: 250, 9417 draggable: true, 9418 dragVelocity: 2.5, 9419 dots: gliderDots, 9420 arrows: { 9421 prev: gliderPrev, 9422 next: gliderNext, 9423 }, 9424 }); 9425 9426 slider.classList.add('glider-initialized'); 9427 if (slider.dataset.showArrows === 'true') { 9428 gliderPrev.classList.remove('hidden'); 9429 gliderNext.classList.remove('hidden'); 9430 } 9431 9432 if (slider.dataset.autoplay !== 'false') { 9433 gliderAutoplay( 9434 glider, 9435 slider.dataset.autoplaySpeed, 9436 slider.dataset.infiniteLoop 9437 ); 9438 } 9439 }; 9440 9441 const gliderAutoplay = (glider, milliseconds, loop) => { 9442 const pagesCount = glider.track.childElementCount; 9443 let slideTimeout = null; 9444 let nextIndex = 1; 9445 let paused = false; 9446 9447 const slide = () => { 9448 slideTimeout = setTimeout( 9449 () => { 9450 if (loop && nextIndex >= pagesCount) { 9451 nextIndex = 0; 9452 } 9453 glider.scrollItem(nextIndex); 9454 }, 9455 parseInt(milliseconds) 9456 ); 9457 }; 9458 9459 glider.ele.addEventListener('glider-animated', () => { 9460 nextIndex = glider.slide + glider.opt.slidesToScroll; 9461 window.clearInterval(slideTimeout); 9462 if (!paused && (loop || nextIndex < pagesCount)) { 9463 slide(); 9464 } 9465 }); 9466 9467 const pause = () => { 9468 if (!paused) { 9469 clearInterval(slideTimeout); 9470 paused = true; 9471 } 9472 }; 9473 9474 const unpause = () => { 9475 if (paused) { 9476 slide(); 9477 paused = false; 9478 } 9479 }; 9480 9481 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 9482 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 9483 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 9484 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 9485 9486 slide(); 9487 }; 9488 9489 elements.forEach(element => { 9490 if (element.dataset.contentType === 'products') { 9491 initProductCarousel(element); 9492 } 9493 if (element.dataset.contentType === 'slider') { 9494 initSliderCarousel(element); 9495 } 9496 }); 9497 }; 9498 9499 window.addEventListener('DOMContentLoaded', () => { 9500 const carouselElements = document.querySelectorAll( 9501 `[data-content-type="products"][data-appearance="carousel"], 9502 [data-content-type="slider"]` 9503 ); 9504 9505 if (carouselElements.length > 0) { 9506 const script = document.createElement('script'); 9507 script.type = 'text/javascript'; 9508 9509 script.addEventListener('load', () => { 9510 initCarousels(carouselElements); 9511 }); 9512 9513 window.addEventListener('init-external-scripts', () => { 9514 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 9515 }, {once: true, passive: true}); 9516 document.head.appendChild(script); 9517 } 9518 }); 9519 })(); 9520</script>
vendor: 1 bytes, line 9520
9520
9521<script> 9522 'use strict'; 9523 9524 (() => { 9525 const initMaps = (elements) => { 9526 const renderMap = (element) => { 9527 const dataLocations = element.dataset.locations; 9528 9529 // Hide map if no locations set 9530 if (!dataLocations || dataLocations === '[]') { 9531 element.classList.add('hidden'); 9532 return; 9533 } 9534 9535 const map = new google.maps.Map( 9536 element, 9537 getMapOptions( 9538 element.dataset.showControls !== 'true', 9539 element.dataset.showControls === 'true' 9540 ) 9541 ); 9542 const locations = JSON.parse(dataLocations); 9543 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 9544 const bounds = []; 9545 9546 locations.forEach(location => { 9547 const position = { 9548 lat: parseFloat(location.position.latitude), 9549 lng: parseFloat(location.position.longitude), 9550 }; 9551 bounds.push(position); 9552 9553 const infowindow = new google.maps.InfoWindow({ 9554 content: getInfoWindowContent(location), 9555 }); 9556 const marker = new google.maps.Marker({ 9557 position: position, 9558 map, 9559 title: location.location_name, 9560 }); 9561 9562 marker.addListener('click', () => { 9563 infowindow.open(map, marker); 9564 }); 9565 }); 9566 9567 // Set bounds if multiple locations 9568 if (bounds.length > 1) { 9569 bounds.forEach(function (bound) { 9570 latitudeLongitudeBounds.extend(bound); 9571 }); 9572 map.fitBounds(latitudeLongitudeBounds); 9573 } 9574 9575 // Center if single location 9576 if (bounds.length === 1) { 9577 map.setCenter(bounds[0]); 9578 } 9579 }; 9580 9581 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 9582 const style = ''; 9583 return { 9584 zoom: 8, 9585 scrollwheel: false, 9586 disableDoubleClickZoom: false, 9587 mapTypeControlOptions: { 9588 style: google.maps.MapTypeControlStyle.DEFAULT, 9589 }, 9590 styles: style ? JSON.parse(style) : [], 9591 disableDefaultUI: disableDefaultUI, 9592 mapTypeControl: mapTypeControl, 9593 }; 9594 }; 9595 9596 const getInfoWindowContent = (location) => { 9597 const title = location.location_name ? 9598 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 9599 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 9600 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 9601 const street = location.address ? `${location.address}<br/>` : ''; 9602 const city = location.city ? `${location.city}<br/>` : ''; 9603 const state = location.state ? `${location.state}<br/>` : ''; 9604 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 9605 const country = location.country ? location.country : ''; 9606 9607 return `<div> 9608 ${title} 9609 ${comment} 9610 ${phone} 9611 <p class="px-1 pt-3 text-primary"> 9612 ${street} 9613 ${city} 9614 ${state} 9615 ${zipCode} 9616 ${country} 9617 </p> 9618 </div>`; 9619 }; 9620 9621 const hideAllMaps = () => { 9622 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 9623 element.classList.add('hidden'); 9624 }); 9625 }; 9626 9627 window.gm_authFailure = () => { 9628 hideAllMaps(); 9629 }; 9630 9631 if (typeof google.maps === 'undefined') { 9632 hideAllMaps(); 9633 return; 9634 } 9635
9636 elements.forEach(element => { 9637 if (element.dataset.contentType === 'map') { 9638 renderMap(element); 9639 } 9640 }); 9641 }; 9642 9643 window.addEventListener('DOMContentLoaded', () => { 9644 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 9645 9646 if (mapElements.length > 0) { 9647 const script = document.createElement('script'); 9648 script.type = 'text/javascript'; 9649 9650 script.addEventListener('load', () => { 9651 initMaps(mapElements); 9652 }); 9653 9654 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 9655 document.head.appendChild(script); 9656 } 9657 }); 9658 })(); 9659</script>
vendor: 1 bytes, line 9659
9659
9660<script> 9661 'use strict'; 9662 9663 (() => { 9664 const initParallaxImage = (element) => { 9665 if (!window.jarallax) { 9666 return; 9667 } 9668 9669 element.classList.add('jarallax'); 9670 element.dataset.jarallax = ''; 9671 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 9672 const elementStyle = window.getComputedStyle(element); 9673 9674 window.jarallax(element, { 9675 imgPosition: elementStyle.backgroundPosition || '50% 50%', 9676 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 9677 imgSize: elementStyle.backgroundSize || 'cover', 9678 speed: parallaxSpeed, 9679 }); 9680 }; 9681 9682 const initVideoBackground = (element) => { 9683 if (!window.jarallax) { 9684 return; 9685 } 9686 9687 let slider = null; 9688 9689 if (element.classList.contains('pagebuilder-slide-wrapper')) { 9690 const viewportElement = document.createElement('div'); 9691 slider = element.closest('[data-content-type=slider]'); 9692 viewportElement.classList.add('jarallax-viewport-element'); 9693 element.dataset.elementInViewport = '.jarallax-viewport-element'; 9694 element.appendChild(viewportElement); 9695 } 9696 9697 element.classList.add('jarallax'); 9698 element.dataset.jarallax = ''; 9699 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 9700 9701 window.jarallax(element, { 9702 imgSrc: element.dataset.videoFallbackSrc, 9703 speed: parallaxSpeed, 9704 videoLoop: element.dataset.videoLoop, 9705 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 9706 videoLazyLoading: element.dataset.videoLazyLoad, 9707 disableVideo: false, 9708 elementInViewport: element.dataset.elementInViewport && 9709 element.querySelector(element.dataset.elementInViewport), 9710 }); 9711 9712 if (slider) { 9713 if (slider.dataset.afterChangeIsSet) { 9714 return; 9715 } 9716 9717 slider.addEventListener('glider-loaded', () => { 9718 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 9719 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 9720 }); 9721 }); 9722 9723 slider.addEventListener('glider-animated', () => { 9724 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 9725 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 9726 }); 9727 }); 9728 9729 slider.dataset.afterChangeIsSet = true; 9730 } 9731 }; 9732 9733 window.addEventListener('DOMContentLoaded', () => { 9734 const parallaxImageElements = document.querySelectorAll( 9735 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 9736 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 9737 ); 9738 9739 const videoBackgroundsElements = document.querySelectorAll( 9740 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 9741 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 9742 [data-content-type="banner"] [data-background-type="video"], 9743 [data-content-type="slide"] [data-background-type="video"]` 9744 ); 9745 9746 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 9747 const jarallaxScript = document.createElement('script'); 9748 jarallaxScript.type = 'text/javascript'; 9749 9750 jarallaxScript.addEventListener('load', () => { 9751 parallaxImageElements.forEach(row => { 9752 initParallaxImage(row); 9753 }); 9754 9755 const jarallaxVideoScript = document.createElement('script'); 9756 jarallaxVideoScript.type = 'text/javascript'; 9757 9758 jarallaxVideoScript.addEventListener('load', () => {
9759 videoBackgroundsElements.forEach(element => { 9760 initVideoBackground(element); 9761 }); 9762 }); 9763 9764 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 9765 document.head.appendChild(jarallaxVideoScript); 9766 }); 9767 9768 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 9769 document.head.appendChild(jarallaxScript); 9770 } 9771 }); 9772 })(); 9773</script>
vendor: 1 bytes, line 9773
9773
9774<script> 9775 'use strict'; 9776 9777 (() => { 9778 const applyShowOnHover = (element) => { 9779 const showOverlayOnHover = (element) => { 9780 const overlay = element.querySelector('.pagebuilder-overlay'); 9781 const color = overlay.dataset.overlayColor; 9782 9783 element.addEventListener('mouseover', () => { 9784 overlay.style.backgroundColor = color; 9785 }); 9786 element.addEventListener('mouseout', () => { 9787 overlay.style.backgroundColor = 'transparent'; 9788 }); 9789 }; 9790 9791 const showButtonOnHover = (element) => { 9792 const button = element.querySelector('.pagebuilder-banner-button'); 9793 9794 element.addEventListener('mouseover', () => { 9795 button.style.opacity = '1'; 9796 button.style.visibility = 'visible'; 9797 }); 9798 element.addEventListener('mouseout', () => { 9799 button.style.opacity = '0'; 9800 button.style.visibility = 'hidden'; 9801 }); 9802 }; 9803 9804 if (element.dataset.showOverlay === 'hover') { 9805 showOverlayOnHover(element); 9806 } 9807 if (element.dataset.showButton === 'hover') { 9808 showButtonOnHover(element); 9809 } 9810 }; 9811 9812 window.addEventListener('DOMContentLoaded', () => { 9813 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 9814 applyShowOnHover(element); 9815 }); 9816 }); 9817 })(); 9818</script>
vendor: 1 bytes, line 9818
9818
9819<script> 9820 'use strict'; 9821 9822 (() => { 9823 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 9824 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 9825 }); 9826 9827 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 9828 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 9829 9830 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 9831 const tabLink = tabHeader.querySelector('a'); 9832 const tabId = tabLink.getAttribute('href').replace('#', ''); 9833 9834 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 9835 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 9836 9837 if (index === defaultActiveTab) { 9838 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 9839 } 9840 }); 9841 }); 9842 })(); 9843</script>
vendor: 1 bytes, line 9843
9843
9844<script> 9845 'use strict'; 9846 9847 const grecaptchaV2LoadCallbacks = []; 9848 9849 function executeRecaptchaLoadCallbacks () { 9850 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 9851 const callback = grecaptchaV2LoadCallbacks.pop(); 9852 typeof callback === 'string' ? window[callback]() : callback(); 9853 } 9854 } 9855 9856 (function() { 9857 const loadRecaptchaScript = (event) => { 9858 9859 if (window.grecaptcha || !event.target.form) { 9860 return; 9861 } 9862 9863 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 9864 const siteKey = '6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO'; 9865 const script = document.createElement('script'); 9866 script.type = 'text/javascript'; 9867 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 9868 script.async = true; 9869 document.head.appendChild(script); 9870 9871 script.addEventListener('load', () => { 9872 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 9873 }); 9874 } 9875 9876 window.forceLoadRecaptchaScript = (form) => { 9877 loadRecaptchaScript({target: {form: form || 'dummy'}}); 9878 executeRecaptchaLoadCallbacks(); 9879 }; 9880 9881 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 9882 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 9883 9884 }()); 9885 9886</script>
vendor: 1 bytes, line 9886
9886
9887<script> 9888 window.addEventListener("scroll", function() { 9889 var header = document.querySelector('header.page-header'); 9890 var body = document.querySelector("body"); 9891 const header_top = document.querySelector('.header_top'); 9892 const notification4 = document.querySelector('.notification4'); 9893 var top_1 = document.querySelector("header.page-header > .panel.wrapper"); 9894 var content = document.getElementById("textContent"); 9895 9896 9897 if(header_top && notification4){ 9898 if ((header_top.textContent.length > 10) && (notification4.textContent.length > 10)) { 9899 if (window.pageYOffset > 76) { 9900 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9901 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9902 document.querySelector('body').classList.add('sticki'); 9903 } else { 9904 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9905 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9906 document.querySelector('body').classList.remove('sticki'); 9907 } 9908 } 9909 } 9910 9911 if(header_top && notification4){ 9912 if ((header_top.textContent.length > 10) && (notification4.textContent.length < 10)) { 9913 if (window.pageYOffset > 36) { 9914 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9915 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9916 document.querySelector('body').classList.add('sticki'); 9917 } else { 9918 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9919 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9920 document.querySelector('body').classList.remove('sticki'); 9921 } 9922 } 9923 } 9924 9925 if(header_top && !notification4){ 9926 if (header_top.textContent.length > 10) { 9927 if (window.pageYOffset > 36) { 9928 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9929 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9930 document.querySelector('body').classList.add('sticki'); 9931 } else { 9932 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9933 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9934 document.querySelector('body').classList.remove('sticki'); 9935 } 9936 } 9937 } 9938 }); 9939 9940 window.addEventListener("DOMContentLoaded", function() { 9941 window.addEventListener("scroll", function() { 9942 // scroll for plp content sticky 9943 anchor_scroll(); 9944 }); 9945 function anchor_scroll() { 9946 var anchor_scroll = document.querySelector('.anchor-scroll'); 9947 if (!anchor_scroll) { 9948 return; // Exit if the element is not found 9949 } 9950 let sticky = anchor_scroll.offsetTop; 9951 9952 if (window.pageYOffset > sticky) { 9953 anchor_scroll.classList.add("scroll-fixed"); 9954 } else { 9955 anchor_scroll.classList.remove("scroll-fixed"); 9956 } 9957 } 9958 9959 document.querySelectorAll('.anchor-scroll a[href^="."], .at-glance-content a[href^="."]').forEach(anchor => { 9960 anchor.addEventListener('click', function (e) { 9961 e.preventDefault(); 9962 9963 const targetClass = this.getAttribute('href').substring(1); 9964 const targetElement = document.querySelector(`.${targetClass}`); 9965 let anchor_scroll = document.querySelector('.anchor-scroll > div'); 9966 var header_off = document.querySelector('#header').offsetHeight; 9967 if (anchor_scroll) { 9968 var header_off = document.querySelector('#header').offsetHeight + anchor_scroll.offsetHeight; 9969 } else { 9970 var header_off = document.querySelector('#header').offsetHeight; 9971 } 9972 9973 if (targetElement) { 9974 const offset = header_off; 9975 const bodyRect = document.body.getBoundingClientRect().top; 9976 const elementRect = targetElement.getBoundingClientRect().top; 9977 const elementPosition = elementRect - bodyRect; 9978 const offsetPosition = elementPosition - offset; 9979 9980 window.scrollTo({ 9981 top: offsetPosition, 9982 behavior: 'smooth' 9983 }); 9984 } 9985 }); 9986 }); 9987 }); 9988</script>
9988 9989 9990 <section x-cloak x-data="{isLoading: false}" 9991 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 9992 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 9993 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 9994 x-show="isLoading" 9995 x-transition:enter="ease-out duration-200" 9996 x-transition:enter-start="opacity-0" 9997 x-transition:enter-end="opacity-100" 9998 x-transition:leave="ease-in duration-200" 9999 x-transition:leave-start="opacity-100" 10000 x-transition:leave-end="opacity-0"> 10001 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10002<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10003 <g fill="none" fill-rule="evenodd"> 10004 <g transform="translate(1 1)" stroke-width="2"> 10005 <circle cx="5" cy="50" r="5"> 10006 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10007 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10008 </circle> 10009 <circle cx="27" cy="5" r="5"> 10010 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10011 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10012 </circle> 10013 <circle cx="49" cy="50" r="5"> 10014 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10015 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10016 </circle> 10017 </g> 10018 </g> 10019<title>loader</title></svg> 10020 <div class="ml-10 text-primary text-xl"> 10021 Loading... </div> 10022</div> 10023 </section> 10024
10025<script> 10026 'use strict'; 10027 10028 function responseSerialize(response) { 10029 if (response.redirected) { 10030 window.location.href = response.url; 10031 } else if (response.ok) { 10032 return response.json(); 10033 } else { 10034 // Check if result is Promise then throw to new Error 10035 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 10036 result; 10037 result = response.text(); 10038 if (typeof result?.then === 'function') { 10039 result.then(res => { 10040 let errorMessage; 10041 try { 10042 errorMessage = JSON.parse(res); 10043 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 10044 } catch (e) { 10045 errorMessage = defaultErrMsg; 10046 } 10047 window.dispatchMessages([ 10048 { 10049 type: 'error', 10050 text: errorMessage 10051 } 10052 ], 3000); 10053 }); 10054 } else { 10055 throw new Error(defaultErrMsg); 10056 } 10057 } 10058 } 10059 10060 if (typeof window.buildRestAPIUrl !== 'function') { 10061 window.buildRestAPIUrl = function (url, params = {}) { 10062 const method = 'rest', 10063 storeCode = 'default', 10064 version = 'V1', 10065 serviceUrl = ':method/:storeCode/:version'; 10066 10067 let urlParts; 10068 10069 params.method = method; 10070 params.storeCode = storeCode; 10071 params.version = version; 10072 10073 url = serviceUrl + url; 10074 10075 urlParts = url.split('/'); 10076 urlParts = urlParts.filter(Boolean); 10077 10078 Object.entries(urlParts).forEach (entry => { 10079 let [key, part] = entry; 10080 part = part.replace(':', ''); 10081 10082 if (params[part] !== undefined) { 10083 urlParts[key] = params[part]; 10084 } 10085 }); 10086 10087 return urlParts.join('/'); 10088 } 10089 } 10090 10091 if (typeof window.isObjectEmpty !== 'function') { 10092 window.isObjectEmpty = function (obj) { 10093 return ( 10094 Object.prototype.toString.call(obj) === '[object Object]' && 10095 JSON.stringify(obj) === '{}' 10096 ); 10097 } 10098 } 10099 10100 if (typeof window.mergeDeep !== 'function') { 10101 /** 10102 * Deep merge two objects. 10103 * 10104 * @param target 10105 * @param sources 10106 * @returns {*} 10107 */ 10108 window.mergeDeep = (target, ...sources) => { 10109 /** 10110 * Simple object check. 10111 * 10112 * @param item 10113 * @returns {boolean} 10114 */ 10115 const isObject = (item) => { 10116 return (item && typeof item === 'object' && !Array.isArray(item)); 10117 }; 10118 10119 if (!sources.length) return target; 10120 const source = sources.shift(); 10121 10122 if (isObject(target) && isObject(source)) { 10123 for (const key in source) { 10124 if (isObject(source[key])) { 10125 if (!target[key]) Object.assign(target, { [key]: {} }); 10126 mergeDeep(target[key], source[key]); 10127 } else { 10128 Object.assign(target, { [key]: source[key] }); 10129 } 10130 } 10131 } 10132 10133 return mergeDeep(target, ...sources); 10134 } 10135 } 10136</script>
10136 10137 10138<div x-data="{...hyva.modal(), ...initAmcartDialogPopup()}" 10139 x-init="initDialogPopup($dispatch)" 10140 x-spread="eventListeners" 10141 x-bind="eventListeners"> 10142 <div x-cloak x-spread="overlay('amcart-dialog-popup')" x-bind="overlay('amcart-dialog-popup')" 10143 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-30"> 10144 <div x-ref="amcart-dialog-popup" role="dialog" aria-labelledby="amcart-dialog-popup-content" 10145 class="flex flex-col max-h-screen max-w-4xl overflow-auto bg-amcart-background shadow-xl rounded-lg p-4"> 10146 <div class="flex justify-between pb-4 border-b"> 10147 <div x-text="title" class="text-2xl font-extrabold text-amcart-text"></div> 10148 <button @click="$dispatch('amcart-close-dialog-popup')" 10149 aria-label="Close" 10150 class="text-gray-300 transition hover:text-black hover:drop-shadow-md"> 10151 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-6 w-6" width="24" height="24" role="img"> 10152 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10153<title>x</title></svg> 10154 </button> 10155 </div> 10156 <div id="amcart-dialog-popup-content" class="amcart-dialog-popup-content"></div> 10157 <div class="flex flex-row pt-3 border-t"> 10158 <template x-for="(button, index) in buttons" :key="index"> 10159 <button class="btn mr-4 last:mr-0 text-amcart-button hover:brightness-105 hover:shadow-lg" 10160 :class="{ 10161 'bg-amcart-continue-btn hover:bg-amcart-continue-btn': index === 0, 10162 'bg-amcart-view-cart-btn hover:bg-amcart-view-cart-btn': index === 1 10163 }" 10164 :aria-label="button.name" 10165 x-html="button.name" 10166 @click="dispatchButtonAction(button.action.name, button.action.payload)"></button> 10167 </template> 10168 </div> 10169 </div> 10170 </div> 10171</div> 10172
10173<script> 10174 'use strict'; 10175 10176 function initAmcartDialogPopup() { 10177 const dialogPopupName = 'amcart-dialog-popup'; 10178 const selectors = { 10179 addToCartForm: '.amcart-product-info #amcart_product_addtocart_form', 10180 ratingSummarySelector: '.amcart-product-info .rating-summary' 10181 } 10182 10183 return { 10184 eventListeners: { 10185 ['@amcart-open-dialog-popup.window']({detail: popupData}) { 10186 // Close any existing modal before opening 10187 window.hyva.modal.pop(); 10188 10189 this.initPopupWithData(popupData); 10190 this.$nextTick(() => { 10191 this.show(dialogPopupName); 10192 }); 10193 }, 10194 ['@amcart-close-dialog-popup']() { 10195 this.hide(dialogPopupName); 10196 }, 10197 ['@amcart-dialog-submit']({ detail: actionToDispatch }) { 10198 const form = document.querySelector(selectors.addToCartForm); 10199 10200 if (form.checkValidity()) { 10201 this.dispatch(actionToDispatch, form); 10202 this.hide(dialogPopupName); 10203 } else { 10204 form.reportValidity(); 10205 } 10206 }, 10207 ['@amcart-hide-popup']() { 10208 this.hide(dialogPopupName); 10209 } 10210 }, 10211 title: '', 10212 buttons: [], 10213 message: '', 10214 selected_options: null, 10215 dispatch: null, 10216 10217 /** 10218 * @param {Object} $dispatch 10219 * @return {void} 10220 */ 10221 initDialogPopup: function ($dispatch) { 10222 this.dispatch = $dispatch; 10223 }, 10224 10225 /** 10226 * @param {CartResponse} popupData 10227 * @return {void} 10228 */ 10229 initPopupWithData: function (popupData) { 10230 this.title = popupData.title; 10231 this.buttons = popupData.buttons; 10232 this.selected_options = popupData.selected_options; 10233 hyva.replaceDomElement('#amcart-dialog-popup-content', this.preprocessMessage(popupData.message)); 10234 this.$nextTick(() => { 10235 this.postProcessPopupContent(); 10236 }); 10237 }, 10238 10239 /** 10240 * @param {string} message 10241 * @return {string} 10242 */ 10243 preprocessMessage: function (message) { 10244 /** 10245 * Disable labels for input inside popup due to the possibility of their duplication on the page. 10246 * Because this can lead to unexpected behaviour. 10247 * 10248 * Make form id unique for popup 10249 */ 10250 return message 10251 .replaceAll(':for=', 'for-data=') 10252 .replaceAll('product_addtocart_form', 'amcart_product_addtocart_form'); 10253 }, 10254 10255 /** 10256 * @return {void} 10257 */ 10258 postProcessPopupContent: function () { 10259 this.disableRatingSummary(); 10260 this.clickSelectedOptions(); 10261 }, 10262 10263 /** 10264 * @return {void} 10265 */ 10266 disableRatingSummary: function () { 10267 const ratingSummaryElement = document.querySelector(selectors.ratingSummarySelector); 10268 10269 if (!!ratingSummaryElement) { 10270 ratingSummaryElement.removeAttribute('onClick'); 10271 ratingSummaryElement.classList.remove('cursor-pointer'); 10272 } 10273 }, 10274 10275 /** 10276 * @return {void} 10277 */ 10278 clickSelectedOptions: function () { 10279 if (!this.selected_options) { 10280 return; 10281 } 10282 10283 for(const [attributeId, attributeValue] of Object.entries(this.selected_options)) { 10284 const swatchOptionTemplate = document.querySelector( 10285 `.amcart-product-info template[x-for*="attributes[${attributeId}]"]` 10286 ); 10287 10288 if (!!swatchOptionTemplate && !!swatchOptionTemplate.parentElement) { 10289 const swatchInput = swatchOptionTemplate.parentElement 10290 .querySelector(`input[value="${attributeValue}"]`); 10291 swatchInput && swatchInput.click(); 10292 } 10293 } 10294 }, 10295 10296 /** 10297 * @param {string} name 10298 * @param {string|undefined} payload 10299 * @return {void} 10300 */ 10301 dispatchButtonAction: function (name, payload) { 10302 this.dispatch(name, payload); 10303 } 10304 }; 10305 } 10306</script>
10306 10307
10308<script> 10309 (function () { 10310 'use strict'; 10311 10312 const addToCartProductListFormSelector = '.product_addtocart_form'; 10313 const addToCartProductPageFormSelector = '#product_addtocart_form'; 10314 const setFormsEvent = function () { 10315 const productListForms = document.querySelectorAll(addToCartProductListFormSelector); 10316 const productPageForm = document.querySelector(addToCartProductPageFormSelector); 10317 10318 productPageForm && addDispatcher(productPageForm); 10319 productListForms.forEach((form) => { 10320 // disable html5 validation 10321 form.setAttribute('novalidate', ''); 10322 addDispatcher(form); 10323 }); 10324 } 10325 10326 const addDispatcher = function(form) { 10327 form.removeAttribute('@submit'); 10328 form.removeAttribute('@submit.prevent'); 10329 form.setAttribute('x-data', ''); 10330 form.setAttribute('x-on:submit.prevent', '$dispatch(\'amcart-add-to-cart-action\', $el)'); 10331 } 10332 10333 setFormsEvent(); 10334 10335 window.addEventListener('amcart-set-forms-event', setFormsEvent); 10336 })(); 10337</script>
10337 10338
10339<script> 10340 (function () { 10341 'use strict'; 10342 10343 /** 10344 * @typedef {Object} CartResponse 10345 * 10346 * Popup common props 10347 * @property {[ 10348 * name: string, 10349 * action: { 10350 * name: string, 10351 * payload: string|undefined 10352 * } 10353 * ]|undefined} buttons 10354 * @property {string|undefined} popup_action 10355 * @property {string|undefined} message 10356 * @property {string|undefined} title 10357 * 10358 * DialogPopup props 10359 * @property {string|null|undefined} selected_options 10360 * 10361 * ConfirmationPopup props 10362 * @property {string|undefined} align 10363 * @property {string|undefined} checkout 10364 * @property {string|undefined} product_id 10365 * @property {string|undefined} product_sku 10366 * @property {string|undefined} related 10367 * @property {number|undefined} timer 10368 * 10369 * Redirect props 10370 * @property {string|undefined} redirect url to redirect 10371 */ 10372 10373 let globalActionName; 10374 10375 const addToCartAction = ({detail: form}) => { 10376 const isProductForm = form.id === 'product_addtocart_form'; 10377 10378 globalActionName = getCartAction(form); 10379 10380 if (isProductForm) { 10381 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 10382 10383 if (form.checkValidity()) { 10384 performRequest(form, isProductForm); 10385 } 10386 } else { 10387 performRequest(form, isProductForm) 10388 } 10389 }; 10390 10391 const performRequest = function (form, isProductForm) { 10392 const cartUrl = `${BASE_URL}amasty_cart/cart/${getCartAction(form)}`; 10393 const isProductPage = document.body.classList.contains('catalog-product-view'); 10394 const headers = { 10395 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 10396 }; 10397 const formData = new FormData(form); 10398 formData.set('product_page', isProductPage && isProductForm); 10399 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 10400 formData.set('form_key', hyva.getFormKey()); 10401 !formData.get('id') && formData.get('item') && formData.set('id', formData.get('item')); 10402 10403 const body = new URLSearchParams(formData); 10404 10405 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 10406 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: form })); 10407 10408 fetch(cartUrl, {headers: {...headers}, body: body, method: 'POST'}) 10409 .then(response => response.json()) 10410 .then((result) => { 10411 resultActionResolver.resolve(result); 10412 const relatedProductDialog = document.querySelector('.related-product-dialog-wrapper'); 10413 const cartLink = document.getElementById('menu-cart-icon'); 10414 const isRelatedProductForm = form.closest('.related-products-pdp-section'); 10415 if (relatedProductDialog && !isRelatedProductForm) { 10416 setTimeout(() => { 10417 window.dispatchEvent( 10418 new CustomEvent('hyva-modal-show', { detail: { dialog: 'related-product-slider-dialog' } }) 10419 ); 10420 }, 2000); 10421 } else if (cartLink) { 10422 cartLink.click(); 10423 } 10424 }).catch((error) => { 10425 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10426 [{ 10427 type: "error", 10428 text: error 10429 }], 5000 10430 ); 10431 }).finally(() => { 10432 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 10433 }); 10434 }; 10435 10436 const getCartAction = function(formNode) { 10437 return formNode.action.includes('updateItemOptions') 10438 ? `UpdateItemOptions` 10439 : 'add'; 10440 }; 10441 10442 const resultActionResolver = { 10443 /** 10444 * @param {CartResponse} result 10445 */ 10446 resolve: function (result) { 10447 10448 if(typeof result.is_add_to_cart != "undefined"){ 10449 var msg = result.message; 10450 /*if($($.parseHTML(result.message)).filter(".message.error").text()){ 10451 msg = $($.parseHTML(result.message)).filter(".message.error").text(); 10452 }*/ 10453 10454 var parser = new DOMParser(); 10455 var doc = parser.parseFromString(result.message, 'text/html'); 10456 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 10457 10458 if (errorMsg) { 10459 msg = errorMsg; 10460 } 10461 10462 window.dispatchMessages && window.dispatchMessages([{ 10463 type: 'error', 10464 text: msg 10465 }]); 10466 10467 } 10468 switch (true) { 10469 case !!result.popup_action: 10470 var parser = new DOMParser(); 10471 var doc = parser.parseFromString(result.message, 'text/html'); 10472 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 10473 if (errorMsg) { 10474 msg = errorMsg; 10475 window.dispatchMessages && window.dispatchMessages([{ 10476 type: 'error', 10477 text: msg 10478 }]); 10479 } else { 10480 window.dispatchEvent(new CustomEvent(result.popup_action, {detail: result})); 10481 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10482 10483 if (globalActionName == 'UpdateItemOptions') { 10484 window.location.href = `${BASE_URL}checkout/cart`; 10485 } 10486 } 10487 break; 10488 case !!result.redirect: 10489 window.location.href = result.redirect; 10490 break; 10491 } 10492 } 10493 } 10494 10495 if (document.body.classList.contains('catalog-category-view')) { 10496 hyva.getBrowserStorage().setItem( 10497 'last_category_id', 10498 '' 10499 ); 10500 } 10501 10502 const groupedOptions = document.querySelector('div[x-data^=initGroupedOptions]'); 10503 10504 if (!!groupedOptions) { 10505 groupedOptions.setAttribute('x-on:amcart-trigger-grouped-form-validate.window', 'validateForm()'); 10506 } 10507 10508 window.addEventListener('amcart-add-to-cart-action', addToCartAction); 10509 })(); 10510</script>
10510<script> 10511 (function () { 10512 'use strict'; 10513 10514 const addToQuoteButtonSelector = '.amquote-addto-button:not(.amasty-quote-login):not(.amasty-quote-link)'; 10515 document.querySelectorAll(addToQuoteButtonSelector).forEach((button) => { 10516 if (!button.hasAttribute('x-data')) { 10517 button.setAttribute('x-data', ''); 10518 } 10519 10520 button.removeAttribute('@click.prevent'); 10521 button.setAttribute( 10522 'x-on:click.prevent', 10523 '$dispatch(\'amcart-add-to-quote-action\', $el)'); 10524 }); 10525 })(); 10526</script>
vendor: 1 bytes, line 10526
10526
10527<script> 10528 (function () { 10529 'use strict'; 10530 10531 const addToQuoteAction = ({ detail: element }) => { 10532 const formNode = element.nodeName === 'FORM' 10533 ? element 10534 : element.form ?? element.closest('form'); 10535 10536 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 10537 if (!formNode || !formNode.checkValidity()) { 10538 return formNode?.reportValidity(); 10539 } 10540 10541 performRequest(formNode); 10542 } 10543 10544 const performRequest = (formNode) => { 10545 const url = `${BASE_URL}amasty_cart/quote/${getAction(formNode)}`; 10546 const headers = { 10547 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 10548 }; 10549 const formData = new FormData(formNode); 10550 const isProductPage = formNode.id === 'product_addtocart_form' 10551 && document.body.classList.contains('catalog-product-view'); 10552 formData.set('product_page', isProductPage); 10553 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 10554 formData.set('id', formData.get('item')); 10555 10556 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 10557 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: formNode })); 10558 10559 fetch(url, { headers: { ...headers }, body: new URLSearchParams(formData), method: 'POST' }) 10560 .then(response => response.json()) 10561 .then((result) => { 10562 switch (true) { 10563 case !!result.popup_action: 10564 window.dispatchEvent(new CustomEvent(result.popup_action, { detail: result })); 10565 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10566 break; 10567 case !!result.redirect: 10568 window.location.href = result.redirect; 10569 break; 10570 } 10571 }).catch((error) => { 10572 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10573 [{ 10574 type: "error", 10575 text: error 10576 }], 5000 10577 ); 10578 }).finally(() => { 10579 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 10580 }); 10581 }; 10582 10583 const getAction = (formNode) => { 10584 return (formNode.action.includes('amasty_quote') && formNode.action.includes('updateItemOptions')) 10585 ? 'updateItemOptions' 10586 : 'add'; 10587 }; 10588 10589 window.addEventListener('amcart-add-to-quote-action', addToQuoteAction); 10590 })(); 10591</script>
10591 10592 10593 10594
10594<script> 10595 'use strict'; 10596 10597 (function () { 10598 const initCompareFunctions = ['initCompareOnProductList', 'initCompareOnProductView']; 10599 10600 initCompareFunctions.forEach(compareFunction => { 10601 window[compareFunction] = function () { 10602 return { 10603 addToCompare: function (productId) { 10604 var loader=document.getElementById('loading'); 10605 console.log("11111111"); 10606 loader.style.display='block'; 10607 console.log("Add To compare amasty ajax cart qqqqq"); 10608 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 10609 const headers = { 10610 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 10611 }; 10612 const body = new URLSearchParams({ 10613 form_key: hyva.getFormKey(), 10614 product: productId, 10615 is_ajax: true 10616 }); 10617 10618 fetch(postUrl, {headers: headers, body: body, method: 'POST'}).then((response) => { 10619 if (response.redirected) { 10620 window.location.href = response.url; 10621 } else if (response.ok) { 10622 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10623 } else { 10624 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10625 [{ 10626 type: "warning", 10627 text: "Could not add item to the comparison list." 10628 }], 10629 1000 10630 ); 10631 } 10632 }).catch((error) => { 10633 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10634 [{ 10635 type: 'error', 10636 text: error 10637 }], 10638 1000 10639 ); 10640 }); 10641 } 10642 }; 10643 }; 10644 }); 10645 })(); 10646 </script>
10646 10647 10648 10649 10650 10651 10652<section x-data="{isLoading: false}" x-cloak 10653 @amcart-loading-start.window="isLoading = true" 10654 @amcart-loading-stop.window="isLoading = false"> 10655 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 10656 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 10657 x-show="isLoading" 10658 x-transition:enter="ease-out duration-200" 10659 x-transition:enter-start="opacity-0" 10660 x-transition:enter-end="opacity-100" 10661 x-transition:leave="ease-in duration-200" 10662 x-transition:leave-start="opacity-100" 10663 x-transition:leave-end="opacity-0"> 10664 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10665<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10666 <g fill="none" fill-rule="evenodd"> 10667 <g transform="translate(1 1)" stroke-width="2"> 10668 <circle cx="5" cy="50" r="5"> 10669 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10670 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10671 </circle> 10672 <circle cx="27" cy="5" r="5"> 10673 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10674 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10675 </circle> 10676 <circle cx="49" cy="50" r="5"> 10677 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10678 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10679 </circle> 10680 </g> 10681 </g> 10682<title>loader</title></svg> 10683 <div class="ml-10 text-primary text-xl"> 10684 Loading... </div> 10685</div> 10686</section> 10687 10688<div x-data="prDataPrivacyCheckboxDetailModalComponent.create()" 10689 @set-is-show-modal.window="isShowModal = $event.detail" 10690 @keydown.escape="closeModal" 10691> 10692 <div x-ref="pr-data-privacy-checkbox-detail" x-show="isShowModal" x-cloak> 10693 <div class="inset-0 fixed z-50"> 10694 <div class="relative z-10 max-w-3xl sm:my-10 ml-10 sm:mx-auto bg-white p-7 h-full max-h-full sm:h-auto sm:max-h-[90%] flex rounded shadow-md" 10695 x-show="isShowModal" x-transition 10696 > 10697 <span class="absolute top-3 right-3 cursor-pointer hover:text-gray-700 p-1" @click="closeModal"> 10698 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" role="img"> 10699 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10700<title>x</title></svg> 10701 </span> 10702 <template x-if="data.checkbox"> 10703 <div id="prgdpr-consent-checkboxes-modal" class="flex flex-col"> 10704 <div class="modal-header flex flex-col flex-shrink-0 flex-grow-0 mb-5"> 10705 <h2 class="text-xl lg:text-2lx pb-3 mb-1 border-container border-b" x-html="data.checkbox.policy.title"></h2> 10706 <a data-contentid="prgdpr-print-content" 10707 class="ml-auto text-sm text-blue-600 hover:underline" 10708 href="#" 10709 @click.prevent="print()" 10710 > 10711 Print </a> 10712 </div> 10713 <div class="prgdpr-consent-checkboxes-item-content overflow-y-auto mb-5" id="prgdpr-print-content"> 10714 <div class="prose max-w-none" x-html="data.checkbox.policy.content"></div> 10715 </div> 10716 <div class="modal-footer flex-shrink-0 flex-grow-0 pt-5 mt-auto border-container border-t"> 10717 <button type="button" 10718 class="action iagree btn btn-primary" 10719 @click="data.checkbox.checked = data.checkbox.isAlreadyChecked = true;
10719 $dispatch('prgdpr-checkbox-agree', 'checkbox' + data.checkbox.consentId); closeModal();" 10720 > 10721 I agree </button> 10722 </div> 10723 </div> 10724</template> 10725 </div> 10726 10727 <div class="bg-gray-800 opacity-50 absolute inset-0" @click="closeModal"></div> 10728 </div> 10729 </div> 10730</div> 10731
10732<script> 10733 const prDataPrivacyCheckboxDetailModalComponent = { 10734 data: null, 10735 isShowModal: false, 10736 create: function () { 10737 this.data = Alpine.reactive({checkbox: null}); 10738 return this; 10739 }, 10740 setCheckbox: function (checkbox) { 10741 this.data.checkbox = checkbox; 10742 }, 10743 showModal: function () { 10744 this.isShowModal = true; 10745 }, 10746 closeModal() { 10747 this.isShowModal = false; 10748 }, 10749 print: function () { 10750 let printWindow = window.open('', 'Print', 'height=600,width=800'); 10751 printWindow.document.write( 10752 `<html><head><title>${this.data.checkbox.policy.title}</title></head><body>${this.data.checkbox.policy.content}</body></html` 10753 ); 10754 printWindow.document.close(); 10755 printWindow.focus(); 10756 printWindow.print(); 10757 printWindow.onafterprint = function () { 10758 printWindow.close(); 10759 }; 10760 10761 return true; 10762 } 10763 }; 10764</script>
vendor: 1 bytes, line 10764
10764
10765<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.flooringinc.com\/","name":"flooringinc","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.flooringinc.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
10765<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/www.flooringinc.com\/","name":"Flooring Inc","logo":" https:\/\/www.flooringinc.com\/media\/logo\/stores\/1\/logo.webp","description":"FlooringInc is your online flooring superstore. We offer wood, laminate, carpet, vinyl, specialty flooring and more.","contactPoint":[{"@type":"ContactPoint","telephone":"(866) 416-6388","contactType":"customer service"}],"address":{"addressCountry":"US","postalCode":"85043","addressRegion":"Arizona","addressLocality":"Phoenix","streetAddress":"2429 S. 51st Ave. Ste 10"},"sameAs":["https:\/\/www.facebook.com\/FlooringInc","https:\/\/www.instagram.com\/flooringinccom\/","https:\/\/www.youtube.com\/user\/flooringincvideos","https:\/\/www.pinterest.com\/flooringinc\/"]}</script>
10765
10765<script defer src="https://www.dwin1.com/94345.js"></script>
10765 10766
10767<script nonce="aTE3cXdxdHVzeHVsc3J3aWdpaHdhNHZ0MW4zbWg2OGQ="> 10768 (() => { 10769 const updateSettingBar = () => { 10770 const intervalId = setInterval(() => { 10771 const bar = document.getElementById('pr-cookie-setting-bar'); 10772 if (! bar) { 10773 return; 10774 } 10775 10776 clearInterval(intervalId); 10777 bar.querySelectorAll('input[type="checkbox"], button.action') 10778 .forEach(el => el.disabled = true); 10779 10780 let notification = '\u003Cdiv\u0020class\u003D\u0022pr\u002Dgpc\u002Dnotification\u002Dwrap\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Ch2\u003EYour\u0020Opt\u002DOut\u0020Preferences\u0020Honored\u003C\u002Fh2\u003E\u000D\u000A\u003Cp\u003EYour\u0020browser\u0027s\u0020privacy\u0020preference\u0020\u0028GPC\u0029\u0020has\u0020been\u0020detected.\u003C\u002Fp\u003E\u000D\u000A\u003Cp\u0020class\u003D\u0022pr\u002Dgpc\u002Dtext\u002Dwith\u002Dicon\u0022\u003E\u003Cimg\u0020src\u003D\u0022https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FPlumrocket_GlobalPrivacyControl\u002Fimages\u002Fcheck_circle.png\u0022\u0020alt\u003D\u0022GPC\u0020Icon\u0022\u0020width\u003D\u002218\u0022\u0020height\u003D\u002218\u0022\u003E\u0020Non\u002Dessential\u0020cookies\u0020have\u0020been\u0020disabled\u0020on\u0020our\u0020website.\u003C\u002Fp\u003E\u000A\u003C\u002Fdiv\u003E'; 10781 bar.querySelector('.pr-cookie-description') 10782 .insertAdjacentHTML('beforebegin', notification); 10783 }, 400); 10784 } 10785 10786 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateSettingBar); 10787 })(); 10788</script>
vendor: 1 bytes, line 10788
10788
10789<script type="application/json" id="default-section-data"> 10790 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"US":{"name":"United States","regions":{"3":{"code":"AL","name":"Alabama"},"6":{"code":"AK","name":"Alaska"},"9":{"code":"AS","name":"American Samoa"},"12":{"code":"AZ","name":"Arizona"},"15":{"code":"AR","name":"Arkansas"},"18":{"code":"AE","name":"Armed Forces Africa"},"21":{"code":"AA","name":"Armed Forces Americas"},"24":{"code":"AE","name":"Armed Forces Canada"},"27":{"code":"AE","name":"Armed Forces Europe"},"30":{"code":"AE","name":"Armed Forces Middle East"},"33":{"code":"AP","name":"Armed Forces Pacific"},"36":{"code":"CA","name":"California"},"39":{"code":"CO","name":"Colorado"},"42":{"code":"CT","name":"Connecticut"},"45":{"code":"DE","name":"Delaware"},"48":{"code":"DC","name":"District of Columbia"},"51":{"code":"FM","name":"Federated States Of Micronesia"},"54":{"code":"FL","name":"Florida"},"57":{"code":"GA","name":"Georgia"},"60":{"code":"GU","name":"Guam"},"63":{"code":"HI","name":"Hawaii"},"66":{"code":"ID","name":"Idaho"},"69":{"code":"IL","name":"Illinois"},"72":{"code":"IN","name":"Indiana"},"75":{"code":"IA","name":"Iowa"},"78":{"code":"KS","name":"Kansas"},"81":{"code":"KY","name":"Kentucky"},"84":{"code":"LA","name":"Louisiana"},"87":{"code":"ME","name":"Maine"},"90":{"code":"MH","name":"Marshall Islands"},"93":{"code":"MD","name":"Maryland"},"96":{"code":"MA","name":"Massachusetts"},"99":{"code":"MI","name":"Michigan"},"102":{"code":"MN","name":"Minnesota"},"105":{"code":"MS","name":"Mississippi"},"108":{"code":"MO","name":"Missouri"},"111":{"code":"MT","name":"Montana"},"114":{"code":"NE","name":"Nebraska"},"117":{"code":"NV","name":"Nevada"},"120":{"code":"NH","name":"New Hampshire"},"123":{"code":"NJ","name":"New Jersey"},"126":{"code":"NM","name":"New Mexico"},"129":{"code":"NY","name":"New York"},"132":{"code":"NC","name":"North Carolina"},"135":{"code":"ND","name":"North Dakota"},"138":{"code":"MP","name":"Northern Mariana Islands"},"141":{"code":"OH","name":"Ohio"},"144":{"code":"OK","name":"Oklahoma"},"147":{"code":"OR","name":"Oregon"},"150":{"code":"PW","name":"Palau"},"153":{"code":"PA","name":"Pennsylvania"},"156":{"code":"PR","name":"Puerto Rico"},"159":{"code":"RI","name":"Rhode Island"},"162":{"code":"SC","name":"South Carolina"},"165":{"code":"SD","name":"South Dakota"},"168":{"code":"TN","name":"Tennessee"},"171":{"code":"TX","name":"Texas"},"174":{"code":"UT","name":"Utah"},"177":{"code":"VT","name":"Vermont"},"180":{"code":"VI","name":"Virgin Islands"},"183":{"code":"VA","name":"Virginia"},"186":{"code":"WA","name":"Washington"},"189":{"code":"WV","name":"West Virginia"},"192":{"code":"WI","name":"Wisconsin"},"195":{"code":"WY","name":"Wyoming"}}},"data_id":1791055632},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"negotiable_quote":[],"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"purchase_order":[],"persistent":[],"review":[],"amfacebook-pixel":[],"faq":[],"quotecart":[],"sociallogin":[],"data_privacy":[],"ccpa_data":[],"wp_ga4":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
10790 10791</div><div x-data="fpcTracking()" x-init="sendRequest()"></div>
10792<script> 10793 function fpcTracking() { 10794 return { 10795 url: 'https://www.flooringinc.com/amasty_fpc/reports/', 10796 sendRequest() { 10797 const ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart; 10798 fetch(`${this.url}?` + new URLSearchParams({ ttfb }), { 10799 method: 'GET', 10800 headers: { 10801 'Content-Type': 'application/json', 10802 'X-Requested-With': 'XMLHttpRequest', 10803 } 10804 }) 10805 } 10806 } 10807 } 10808</script>
10808 10809<!-- amasty-fpc-status -->
10809<script> 10810 const wpGA4ServerSide = { 10811 pushClick: function(productId, listId, listName, index, elm) { 10812 if (elm && elm.hasAttribute('onclick')) { 10813 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/productclick/'; 10814 if (productId && listId && listName) { 10815 fetch(requestUrl, { 10816 method: 'POST', 10817 headers: { 10818 'Content-Type': 'application/x-www-form-urlencoded', 10819 'X-Requested-With': 'XMLHttpRequest' 10820 }, 10821 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 10822 }) 10823 .then(res => res.json()) 10824 .then(data => { 10825 }); 10826 } 10827 } 10828 }, 10829 10830 pushViewItemList: function(hashId) { 10831 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 10832 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/viewitemlist/'; 10833 fetch(requestUrl, { 10834 method: 'POST', 10835 headers: { 10836 'Content-Type': 'application/x-www-form-urlencoded', 10837 'X-Requested-With': 'XMLHttpRequest' 10838 }, 10839 10840 body: 'hash_id='+hashId 10841 }) 10842 .then(res => res.json()) 10843 .then(data => { 10844 }); 10845 } 10846 } 10847 }; 10848 10849 window.wpGA4ServerSide = wpGA4ServerSide; 10850 10851 let allowGa4Services = window.ga4AllowServices ?? true; 10852 10853 if (allowGa4Services) { 10854 const {fetch: originalFetch} = window; 10855 window.fetch = async (...args) => { 10856 let [resource, config] = args; 10857 let response = await originalFetch(resource, config); 10858 10859 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 10860 response.clone().json().then(data => { 10861 if (data.wp_ga4.datalayer) { 10862 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 10863 dataLayerData.forEach((dataLayerItem) => { 10864 window.dataLayer.push({ecommerce: null}); 10865 window.dataLayer.push(dataLayerItem); 10866 }); 10867 } 10868 }); 10869 } 10870 return response; 10871 }; 10872 } 10873 10874 </script>
10874 10875
10875<script> 10876 let allowGa4ServicesMeta = window.ga4AllowServices ?? true; 10877 if (allowGa4ServicesMeta) { 10878 const {fetch: originalFetchMeta} = window; 10879 window.fetch = async (...args) => { 10880 let [resource, config] = args; 10881 let response = await originalFetchMeta(resource, config); 10882 10883 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 10884 response.clone().json().then(data => { 10885 if (data.wp_ga4 && data.wp_ga4.metapixel) { 10886 const metaPixel = JSON.parse(data.wp_ga4.metapixel); 10887 for (index in metaPixel) { 10888 fbq(metaPixel[index].track, metaPixel[index].eventName, metaPixel[index].eventData); 10889 } 10890 } 10891 }); 10892 } 10893 return response; 10894 }; 10895 } 10896 </script>
vendor: 1 bytes, line 10896
10896
10897<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-d3390ca2649c82069a5","applicationID":"1112615138","transactionName":"YwMDN0NXChZSVRBZWlpJIABFXwsLHFUFRFRYCQZMQUQLAUZVEG9WWwsRAkNTSwxdUgFI","queueTime":0,"applicationTime":557,"atts":"T0QAQQtNGRg=","errorBeacon":"bam.nr-data.net","agent":""}</script>
10897</body> 10898</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.