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="FlooringInc Blog - Learn About All Things Flooring Related Here"/> 7<meta name="description" content="FlooringInc has been one of the top sources for flooring content for years now. We hope you find these flooring related articles helpful and informative."/> 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>FlooringInc Blog - Learn About All Things Flooring Related Here</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="canonical" href="https://www.flooringinc.com/blog" /> 18<link rel="icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 19<link rel="shortcut icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 20 21<!-- Plausible Script Start --> 22
23<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 23
23
24<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
24 25 26<!-- Plausible Script Ends --> 27 28<!--My8cKJTuUilt2Vvmb0igB9BsOCrMSS2F--> 29 30<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 31<link rel="dns-prefetch" href="https://www.googletagmanager.com"> 32<link rel="preload" href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2" as="font" type="font/woff2" crossorigin="anonymous"/> 33 34<style> 35.needsclick.kl-teaser-UEa7DA { display:none!important; } 36.bg-white.w-full.max-w-\[580px\].text-center.rounded-lg.shadow-lg { 37 max-width: 580px; 38} 39</style> 40
41<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 42 window.getWpGA4Cookie = function(name) { 43 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 44 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 45 }; 46 47 window.ga4AllowServices = false; 48 49 var isCookieRestrictionModeEnabled = 0, 50 currentWebsiteId = 1, 51 cookieRestrictionName = 'user_allowed_save_cookie'; 52 53 if (isCookieRestrictionModeEnabled) { 54 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 55 56 if (allowedCookies !== undefined) { 57 allowedWebsites = JSON.parse(allowedCookies); 58 59 if (allowedWebsites[currentWebsiteId] === 1) { 60 window.ga4AllowServices = true; 61 } 62 } 63 } else { 64 window.ga4AllowServices = true; 65 } 66</script>
66 67
67<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 68 if (window.ga4AllowServices) { 69 window.dataLayer = window.dataLayer || []; 70 var dl4Objects = [{"pageName":"FlooringInc Blog - Learn About All Things Flooring Related Here","pageType":"other"}]; 71 for (var i in dl4Objects) { 72 window.dataLayer.push({ecommerce: null}); 73 window.dataLayer.push(dl4Objects[i]); 74 } 75 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 76 wpGA4Cookies.map(function (cookieName) { 77 var cookieValue = window.getWpGA4Cookie(cookieName); 78 if (cookieValue) { 79 var dl4Object = {}; 80 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 81 window.dataLayer.push(dl4Object); 82 } 83 }); 84 } 85 </script>
85 86 87 <!-- Google Tag Manager -->
88<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0=" > if (window.ga4AllowServices) { 89 90window.addEventListener('init-external-scripts', () => {
vendor: 335 bytes, lines 90-96
90 91 92(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 93new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 94j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 95'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 96})(window,document,'script','dataLayer','
96GTM-5XR7MB7
vendor: 7 bytes, lines 96-97
96'); 97
98}, {once: true, passive: true}); 99 100} </script>
100 101<!-- End Google Tag Manager --> 102 103
104<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0=">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;} 105attributes=Object.assign(this.defaultAttributes,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 106attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 107value=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;} 108stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 109stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 110return(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;} 111var 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);} 112try{var name=this.converter.write(parts[0]);cookie=this.converter.read(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 113jar[name]=cookie;if(key===name){break;}}catch(e){}} 114return key?jar[key]:jar;}}</script>
114 115
116<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0=">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();} 117document.dispatchEvent(new Event('pr-global-privacy-control-api:configured'));};if(!this.config.canProcessSignal){setConfigurationResult(false);return;} 118if(this.cache.get('isApplicableForUser')){setConfigurationResult(this.cache.get('isApplicableForUser'));return;} 119if(!navigator.globalPrivacyControl){setConfigurationResult(false);return;} 120if(!this.config.isGeotargetingEnabled){this.cache.set('isApplicableForUser',true);setConfigurationResult(true);return;} 121this.geotargeting.isApplicable().then(result=>{this.cache.set('isApplicableForUser',result);setConfigurationResult(result);}).catch(()=>setConfigurationResult(true));},shouldApply:function(){if(!this.isConfigured){return false;} 122return 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} 123this.handlers.push(handler);if(prGlobalPrivacyControlApi.isConfigured&&prGlobalPrivacyControlApi.shouldApply()){handler.callback();handler.executed=true;}},processPendingHandlers:function(){if(!prGlobalPrivacyControlApi.shouldApply()){return;} 124if(!prCookieService.get('pr-gpc-signal-handled')){prCookieService.set('pr-gpc-signal-handled',true,{expires:null});} 125this.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 125
125
126<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>
126 127 128 129
129<script type="text/javascript" nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0=">(()=>{let userAllowedCookies=prCookieService.get('user_allowed_save_cookie');if(!userAllowedCookies){return;} 130let customerConsent=prCookieService.get('pr-cookie-consent');if(!customerConsent){return;} 131try{customerConsent=JSON.parse(customerConsent);}catch(error){return;} 132const categoryKey='marketing';if(customerConsent.includes('all')||customerConsent.includes(categoryKey)){return;} 133let intervalId=setInterval(prCookieService.set.bind(prCookieService,'mg_dnt',true,{expires:null}),500);document.addEventListener('pr-cookie-consent-api:configured',()=>{clearInterval(intervalId);});})();</script>
133 134 135<!-- Critical CSS for <lite-youtube> element to avoid CLS: https://web.dev/cls/ --> 136<style> 137 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>
138<script> 139 var BASE_URL = 'https://www.flooringinc.com/'; 140 var THEME_PATH = 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US'; 141 var COOKIE_CONFIG = { 142 "expires": null, 143 "path": "\u002F", 144 "domain": ".www.flooringinc.com", 145 "secure": true, 146 "lifetime": "3600", 147 "cookie_restriction_enabled": false }; 148 var CURRENT_STORE_CODE = 'default'; 149 var CURRENT_WEBSITE_ID = '1'; 150 151 window.hyva = window.hyva || {} 152 153 window.cookie_consent_groups = window.cookie_consent_groups || {} 154 window.cookie_consent_groups['necessary'] = true; 155 156 window.cookie_consent_config = window.cookie_consent_config || {}; 157 window.cookie_consent_config['necessary'] = [].concat( 158 window.cookie_consent_config['necessary'] || [], 159 [ 160 'user_allowed_save_cookie', 161 'form_key', 162 'mage-messages', 163 'private_content_version', 164 'mage-cache-sessid', 165 'last_visited_store', 166 'section_data_ids' 167 ] 168 ); 169</script>
vendor: 1 bytes, line 169
169
170<script> 171 'use strict'; 172 (function( hyva, undefined ) { 173 174 function lifetimeToExpires(options, defaults) { 175 176 const lifetime = options.lifetime || defaults.lifetime; 177 178 if (lifetime) { 179 const date = new Date; 180 date.setTime(date.getTime() + lifetime * 1000); 181 return date; 182 } 183 184 return null; 185 } 186 187 function generateRandomString() { 188 189 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 190 length = 16; 191 192 let formKey = '', 193 charactersLength = allowedCharacters.length; 194 195 for (let i = 0; i < length; i++) { 196 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 197 } 198 199 return formKey; 200 } 201 202 const sessionCookieMarker = {noLifetime: true} 203 204 const cookieTempStorage = {}; 205 206 const internalCookie = { 207 get(name) { 208 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 209 return v ? v[2] : null; 210 }, 211 set(name, value, days, skipSetDomain) { 212 let expires, 213 path, 214 domain, 215 secure, 216 samesite; 217 218 const defaultCookieConfig = { 219 expires: null, 220 path: '/', 221 domain: null, 222 secure: false, 223 lifetime: null, 224 samesite: 'lax' 225 }; 226 227 const cookieConfig = window.COOKIE_CONFIG || {}; 228 229 expires = days && days !== sessionCookieMarker 230 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 231 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 232 233 path = cookieConfig.path || defaultCookieConfig.path; 234 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 235 secure = cookieConfig.secure || defaultCookieConfig.secure; 236 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 237 238 document.cookie = name + "=" + encodeURIComponent(value) + 239 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 240 (path ? '; path=' + path : '') + 241 (domain ? '; domain=' + domain : '') + 242 (secure ? '; secure' : '') + 243 (samesite ? '; samesite=' + samesite : 'lax'); 244 }, 245 isWebsiteAllowedToSaveCookie() { 246 const allowedCookies = this.get('user_allowed_save_cookie'); 247 if (allowedCookies) { 248 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 249 250 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 251 } 252 return false; 253 }, 254 getGroupByCookieName(name) { 255 const cookieConsentConfig = window.cookie_consent_config || {}; 256 let group = null; 257 for (let prop in cookieConsentConfig) { 258 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 259 if (cookieConsentConfig[prop].includes(name)) { 260 group = prop; 261 break; 262 } 263 } 264 return group; 265 }, 266 isCookieAllowed(name) { 267 const cookieGroup = this.getGroupByCookieName(name); 268 return cookieGroup 269 ? window.cookie_consent_groups[cookieGroup] 270 : this.isWebsiteAllowedToSaveCookie(); 271 }, 272 saveTempStorageCookies() { 273 for (const [name, data] of Object.entries(cookieTempStorage)) { 274 if (this.isCookieAllowed(name)) { 275 this.set(name, data['value'], data['days'], data['skipSetDomain']); 276 delete cookieTempStorage[name]; 277 } 278 } 279 } 280 }; 281 282 hyva.getCookie = (name) => { 283 const cookieConfig = window.COOKIE_CONFIG || {}; 284 285 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 286 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 287 } 288 289 return internalCookie.get(name); 290 } 291 292 hyva.setCookie = (name, value, days, skipSetDomain) => { 293 const cookieConfig = window.COOKIE_CONFIG || {}; 294 295 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 296 cookieTempStorage[name] = {value, days, skipSetDomain}; 297 return; 298 } 299 return internalCookie.set(name, value, days, skipSetDomain); 300 } 301 302 303 hyva.setSessionCookie = (name, value, skipSetDomain) => { 304 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 305 } 306 307 hyva.getBrowserStorage = () => { 308 const browserStorage = window.localStorage || window.sessionStorage; 309 if (!browserStorage) { 310 console.warn('Browser Storage is unavailable'); 311 return false;
312 } 313 try { 314 browserStorage.setItem('storage_test', '1'); 315 browserStorage.removeItem('storage_test'); 316 } catch (error) { 317 console.warn('Browser Storage is not accessible', error); 318 return false; 319 } 320 return browserStorage; 321 } 322 323 hyva.postForm = (postParams) => { 324 const form = document.createElement("form"); 325 326 let data = postParams.data; 327 328 if (! postParams.skipUenc && ! data.uenc) { 329 data.uenc = btoa(window.location.href); 330 } 331 form.method = "POST"; 332 form.action = postParams.action; 333 334 Object.keys(postParams.data).map(key => { 335 const field = document.createElement("input"); 336 field.type = 'hidden' 337 field.value = postParams.data[key]; 338 field.name = key; 339 form.appendChild(field); 340 }); 341 342 const form_key = document.createElement("input"); 343 form_key.type = 'hidden'; 344 form_key.value = hyva.getFormKey(); 345 form_key.name="form_key"; 346 form.appendChild(form_key); 347 348 document.body.appendChild(form); 349 350 form.submit(); 351 } 352 353 hyva.getFormKey = function () { 354 let formKey = hyva.getCookie('form_key'); 355 356 if (!formKey) { 357 formKey = generateRandomString(); 358 hyva.setCookie('form_key', formKey); 359 } 360 361 return formKey; 362 } 363 364 hyva.formatPrice = (value, showSign, options = {}) => { 365 const formatter = new Intl.NumberFormat( 366 'en\u002DUS', 367 Object.assign({ 368 style: 'currency', 369 currency: 'USD', 370 signDisplay: showSign ? 'always' : 'auto' 371 }, options) 372 ); 373 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 374 formatter.formatToParts(value).map(({type, value}) => { 375 switch (type) { 376 case 'currency': 377 return '\u0024' || value; 378 case 'minusSign': 379 return '- '; 380 case 'plusSign': 381 return '+ '; 382 default : 383 return value; 384 } 385 }).reduce((string, part) => string + part) : 386 formatter.format(value); 387 } 388 389 const formatStr = function (str, nStart) { 390 const args = Array.from(arguments).slice(2); 391 392 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 393 const idx = parseInt(n) - nStart; 394 395 if (args[idx] === null || args[idx] === void 0) { 396 return m; 397 } 398 return p.length % 2 399 ? p.slice(0, -1).replace('%%', '%') + args[idx] 400 : p.replace('%%', '%') + n; 401 }) 402 } 403 404 hyva.str = function (string) { 405 const args = Array.from(arguments); 406 args.splice(1, 0, 1); 407 408 return formatStr.apply(undefined, args); 409 } 410 411 hyva.strf = function () { 412 const args = Array.from(arguments); 413 args.splice(1, 0, 0); 414 415 return formatStr.apply(undefined, args); 416 } 417 418 /** 419 * Take a html string as `content` parameter and 420 * extract an element from the DOM to replace in 421 * the current page under the same selector, 422 * defined by `targetSelector` 423 */ 424 hyva.replaceDomElement = (targetSelector, content) => { 425 // Parse the content and extract the DOM node using the `targetSelector` 426 const parser = new DOMParser(); 427 const doc = parser.parseFromString(content, 'text/html'); 428 const contentNode = doc.querySelector(targetSelector); 429 430 // Bail if content can't be found 431 if (!contentNode) { 432 return; 433 } 434 435 hyva.activateScripts(contentNode) 436 437 // Replace the old DOM node with the new content
438 document.querySelector(targetSelector).replaceWith(contentNode); 439 440 // Reload customerSectionData and display cookie-messages if present 441 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 442 hyva.initMessages(); 443 } 444 445 hyva.activateScripts = (contentNode) => { 446 // Extract all the script tags from the content. 447 // Script tags won't execute when inserted into a dom-element directly, 448 // therefore we need to inject them to the head of the document. 449 const tmpScripts = contentNode.getElementsByTagName('script'); 450 451 if (tmpScripts.length > 0) { 452 // Push all script tags into an array 453 // (to prevent dom manipulation while iterating over dom nodes) 454 const scripts = []; 455 for (let i = 0; i < tmpScripts.length; i++) { 456 scripts.push(tmpScripts[i]); 457 } 458 459 // Iterate over all script tags and duplicate+inject each into the head 460 for (let i = 0; i < scripts.length; i++) { 461 let script = document.createElement('script'); 462 script.innerHTML = scripts[i].innerHTML; 463 464 document.head.appendChild(script); 465 466 // Remove the original (non-executing) node from the content 467 scripts[i].parentNode.removeChild(scripts[i]); 468 } 469 } 470 return contentNode; 471 } 472 473 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 474 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 475 476 let currentTrap; 477 478 const focusableElements = (rootElement) => { 479 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 480 return Array.from(rootElement.querySelectorAll(selector)) 481 .filter(el => { 482 return el.style.display !== 'none' 483 && !el.disabled 484 && el.tabIndex !== -1 485 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 486 }) 487 } 488 489 const focusTrap = (e) => { 490 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 491 if (!isTabPressed) return; 492 493 const focusable = focusableElements(currentTrap) 494 const firstFocusableElement = focusable[0] 495 const lastFocusableElement = focusable[focusable.length - 1] 496 497 e.shiftKey 498 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 499 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 500 }; 501 502 hyva.releaseFocus = (rootElement) => { 503 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 504 currentTrap.removeEventListener('keydown', focusTrap) 505 currentTrap = null 506 } 507 } 508 hyva.trapFocus = (rootElement) => { 509 if (!rootElement) return; 510 hyva.releaseFocus() 511 currentTrap = rootElement 512 rootElement.addEventListener('keydown', focusTrap) 513 const firstElement = focusableElements(rootElement)[0] 514 firstElement && firstElement.focus() 515 } 516 517 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 518 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 519 520 }( window.hyva = window.hyva || {} )); 521</script>
vendor: 1 bytes, line 521
521
522<script> 523 if (!window.IntersectionObserver) { 524 window.IntersectionObserver = function (callback) { 525 this.observe = el => el && callback(this.takeRecords()); 526 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 527 this.disconnect = () => {}; 528 this.unobserve = () => {}; 529 } 530 } 531</script>
531 532<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>
533<script> 534// Lightweight click handler: if Zendesk is already available, open messenger and hide the button. 535// If Zendesk is not available yet we do nothing here â the DOMContentLoaded handler below is 536// responsible for loading the script (avoids double-loading the Zendesk snippet). 537(function () { 538 const btn = document.getElementById('open-chatbox'); 539 if (!btn) return; 540 541 btn.addEventListener('click', function () { 542 if (typeof zE !== 'undefined') { 543 try { 544 zE('messenger', 'open'); 545 } catch (e) { 546 // ignore if API is not ready yet 547 } 548 this.style.display = 'none'; 549 this.setAttribute('aria-hidden', 'true'); 550 } 551 // If zE is not defined we intentionally don't load the script here to avoid 552 // duplicate loading. The DOMContentLoaded listener below will handle loading. 553 }); 554})(); 555</script>
vendor: 2 bytes, line 555
555
556<script> 557/* ===== Load UserWay on click ===== */ 558document.addEventListener('DOMContentLoaded', function () { 559 560 const userWayButton = document.getElementById('uw-widget-custom-trigger'); 561 const zendeskButton = document.getElementById('open-chatbox'); 562 563 /* ---- UserWay Script Functions ---- */ 564 function initUserWay() { 565 if (window.UserWay) { 566 window.UserWay.widgetToggle(); 567 return; 568 } 569 } 570 571 function loadUserWay() { 572 if (window.UserWay) return; // Skip if already loaded 573 574 const userwayScript = document.createElement('script'); 575 userwayScript.src = 'https://cdn.userway.org/widget.js'; 576 userwayScript.type = 'text/javascript'; 577 userwayScript.async = true; 578 userwayScript.crossOrigin = 'anonymous'; 579 userwayScript.setAttribute('data-account', 'vfvO52o2Kn'); 580 document.head.append(userwayScript); 581 582 /* Hide UserWay accessibility icon when initialized */ 583 document.addEventListener('userway:init_completed', function (event) { 584 const instance = event.detail.userWayInstance; 585 instance.iconVisibilityOff(); 586 587 const userwayIframe = document.getElementById("launcher"); 588 if (userwayIframe) { 589 const userwaySiblings = Array.from(userwayIframe.parentNode.children); 590 const userwaySiblingDiv = userwaySiblings.find(el => el.tagName === 'DIV'); 591 if (userwaySiblingDiv) { 592 userwaySiblingDiv.id = 'userway-live-chat'; 593 } 594 } 595 }, { once: true }); 596 } 597 598 if (userWayButton) { 599 userWayButton.addEventListener('click', initUserWay); 600 } 601 602 /* ---- Load UserWay on Scroll ---- */ 603 let hasLoaded = false; 604 function handleScroll() { 605 if (!hasLoaded) { 606 hasLoaded = true; 607 loadUserWay(); 608 // Remove scroll listener after loading 609 window.removeEventListener('scroll', handleScroll); 610 } 611 } 612 613 window.addEventListener('scroll', handleScroll); 614 615 /* ---- Load Zendesk Script ---- */ 616 function hideChatButton() { 617 try { 618 if (zendeskButton) { 619 zendeskButton.style.display = 'none'; 620 zendeskButton.setAttribute('aria-hidden', 'true'); 621 } 622 } catch (e) { 623 // ignore 624 } 625 } 626 627 function loadZendesk() { 628 // If already loaded, open messenger and hide the button 629 if (window.zE) { 630 try { zE('messenger', 'open'); } catch (e) { } 631 hideChatButton(); 632 return; 633 } 634 635 // If script is already injected, do nothing (we'll open on load) 636 if (document.getElementById('ze-snippet')) return; 637 638 const zendeskScript = document.createElement('script'); 639 zendeskScript.id = 'ze-snippet'; 640 zendeskScript.src = 'https://static.zdassets.com/ekr/snippet.js?key=f007eb69-6b5d-407a-bdff-0706af960a4d'; 641 642 zendeskScript.onload = function () { 643 // Wait a short moment to ensure widget initializes 644 setTimeout(() => { 645 if (typeof zE !== 'undefined') { 646 try { zE('messenger', 'open'); } catch (e) { } 647 hideChatButton(); 648 } 649 }, 300); 650 }; 651 652 document.head.append(zendeskScript); 653 } 654 655 if (zendeskButton) { 656 zendeskButton.addEventListener('click', loadZendesk); 657 } 658 659}); 660</script>
660 661 662<style> 663.checkout-index-index button#open-chatbox{display:none} 664.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>');} 665</style></div>
666<script> 667 window.addEventListener('load', function () { 668 window.magentoStorefrontEvents = magentoStorefrontEvents; 669 magentoStorefrontEvents.context.setStorefrontInstance( 670 {"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"} ); 671 magentoStorefrontEvents.context.setMagentoExtension({ 672 magentoExtensionVersion: "8.0.1", 673 }); 674 magentoStorefrontEvents.context.setDataServicesExtension({ 675 version: "8.0.1", 676 }); 677 magentoStorefrontEvents.context.setPage({ 678 pageType: "Default" 679 }); 680 magentoStorefrontEvents.context.setContext("pageExtended", { 681 action: "page-view" 682 }); 683 684 685 magentoStorefrontEvents.publish.pageView(); 686 }); 687</script>
687 688</head> 689<body class="pl-thm-dcw pl-thm-dcw-hyvadesktop prgdpr-dcw prgdpr-dcw-hyvadesktop blog-page blog-page-list mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-dcw-hyvadesktop blog-index-index page-layout-2columns-right" id="html-body"> 690<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 690-691
690 691<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
691GTM-5XR7MB7
vendor: 85 bytes, lines 691-692
691" 692height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
693<!-- End Google Tag Manager (noscript) --> 694
695<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 696var prCookieConsentApi = { 697 CUSTOMER_CONSENT: 'pr-cookie-consent', 698 SYSTEM_COOKIES: [ 699 'PHPSESSID', 700 this.CUSTOMER_CONSENT, 701 'user_allowed_save_cookie', 702 ], 703 config: {}, 704 whitelist: {}, 705 isConfigured: false, 706 /** 707 * Contains callbacks that run after all configuration come 708 * 709 * @type {function[]} 710 */ 711 configuredCallbacks: [], 712 initCookieBlocking: function () { 713 var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') 714 || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); 715 if (cookieDesc && cookieDesc.configurable) { 716 var api = this; 717 Object.defineProperty(document, 'cookie', { 718 get: function () { 719 return cookieDesc.get.call(document); 720 }, 721 set: function (cookie) { 722 let cookieName = cookie.substring(0, cookie.indexOf('=')).trim(); 723 document.dispatchEvent(new CustomEvent('pr-cookie-consent-api:cookie-blocking:validation', { 724 detail: {cookieName: cookieName, isAllowed: api.isAllowed(cookieName), cookie: cookie} 725 })); 726 727 if (! api.isAllowed(cookieName)) { 728 api.logger.warn('CookieConsent: blocked cookie "' + cookieName + '"'); 729 return; 730 } 731 cookieDesc.set.call(document, cookie); 732 } 733 }); 734 } 735 }, 736 getCookieValue: function (name) { 737 var values = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 738 return values ? decodeURIComponent(values.pop()) : ''; 739 }, 740 configure: function (configJson) { 741 this.logger.init(); 742 this.userScript.init(); 743 try { 744 this.config = JSON.parse(configJson); 745 if (this.config.canManageCookie === null) { 746 console.error('CookieConsent: restriction config is invalid'); 747 } 748 this.isConfigured = true; 749 750 this.configuredCallbacks.forEach(function (callback) { 751 callback(); 752 }.bind(this)); 753 754 this.clearRejectedCookie(); 755 } catch (e) { 756 console.error('CookieConsent: error has happened during parse JSON'); 757 return false; 758 } 759 760 document.dispatchEvent(new Event('pr-cookie-consent-api:configured')); 761 }, 762 /** 763 * @param {function} callback 764 * @returns {prCookieConsentApi} 765 */ 766 addConfiguredCallback: function (callback) { 767 this.configuredCallbacks.push(callback); 768 return this; 769 }, 770 isAllowedCategory: function (categoryKey) { 771 if (! this.config.canManageCookie) { 772 return true; 773 } 774 if (this.isEssentialCategory(categoryKey)) { 775 return true; 776 } 777 if (this.isOptIn()) { 778 if (this.isAllCategoriesAllowed()) { 779 return true; 780 } 781 return this.consent.get().includes(categoryKey); 782 } 783 return this.config.canUseCookieBeforeOptIn; 784 }, 785 getDomain: function (cookieName) { 786 return this.config.cookies[cookieName] ? this.config.cookies[cookieName].domain : null; 787 }, 788 isAllowed: function (cookieName) { 789 if (this.isSystemCookie(cookieName)) { 790 return true; 791 } 792 if (! this.config.canManageCookie) { 793 return true; 794 } 795 if (this.whitelist[cookieName]) { 796 return true; 797 } 798 cookieName = this.getTrueCookieName(cookieName); 799 if (! this.isOptIn()) { 800 if (this.config.canUseCookieBeforeOptIn) { 801 return true; 802 } 803 if (this.isKnownCookie(cookieName)) { 804 return this.isInEssentialCategory(cookieName); 805 } 806 return false; 807 } 808 if (! this.isKnownCookie(cookieName)) { 809 return ! this.config.canBlockUnknownCookie; 810 } 811 return this.isInAllowedCategory(cookieName); 812 }, 813 isAllCategoriesAllowed: function () { 814 if (null === this.cache.get('allowAllCategories')) { 815 var customerConsent = this.consent.get(); 816 if (customerConsent && customerConsent.includes('all') ) { 817 this.cache.set('allowAllCategories', true); 818 } else { 819 var allowedWebsites = this.websiteRestriction.getAllowed(); 820 this.cache.set('allowAllCategories', allowedWebsites[this.config.mage.website] === 1); 821 } 822 } 823 return this.cache.get('allowAllCategories'); 824 }, 825 isEssentialCategory: function (categoryKey) { 826 return this.config.essentialCategoryKeys.includes(categoryKey); 827 }, 828 isInEssentialCategory: function (cookieName) { 829 return this.isEssentialCategory(this.getCookieCategory(cookieName)); 830 }, 831 isInAllowedCategory: function (cookieName) { 832 return this.isAllowedCategory(this.getCookieCategory(cookieName)); 833 }, 834 getCookieCategory: function (cookieName) {
835 return this.config.cookieToCategoryMapping[cookieName]; 836 }, 837 isOptIn: function () { 838 var allowedWithDefaultCookie = this.websiteRestriction.getAllowed()[this.config.mage.website] === 1; 839 return Boolean(this.consent.get()) || allowedWithDefaultCookie; 840 }, 841 isSystemCookie: function (cookieName) { 842 return this.SYSTEM_COOKIES.includes(cookieName); 843 }, 844 isKnownCookie: function (cookieName) { 845 return this.config.cookieToCategoryMapping.hasOwnProperty(cookieName); 846 }, 847 getTrueCookieName: function (cookieName) { 848 var keys = Object.keys(this.config.dynamicNamesPatterns), key; 849 for (var i = 0, length = keys.length; i < length; i++) { 850 key = keys[i]; 851 if (new RegExp(this.config.dynamicNamesPatterns[key]).test(cookieName)) { 852 return key; 853 } 854 } 855 return cookieName; 856 }, 857 clearRejectedCookie: function () { 858 let cookies = prCookieService.get(); 859 Object.keys(cookies).forEach(function(cookieName) { 860 if (this.isAllowed(cookieName)) { 861 return; 862 } 863 864 var encodedCookieName = cookieName = encodeURIComponent(String(cookieName)) 865 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 866 .replace(/[\(\)]/g, escape); 867 868 this.whitelist[encodedCookieName] = true; 869 if (this.getDomain(cookieName)) { 870 prCookieService.remove(cookieName, {domain: this.getDomain(cookieName)}); 871 } else { 872 prCookieService.remove(cookieName); 873 if (this.config.cookie.parentDomain) { 874 prCookieService.remove(cookieName, {domain: this.config.cookie.parentDomain}); 875 } 876 } 877 this.logger.warn('CookieConsent: remove cookie "' + cookieName + '"'); 878 if (typeof prCookieService.get(cookieName) !== 'undefined') { 879 this.logger.error('CookieConsent: fail to remove cookie "' + cookieName + '"'); 880 } 881 this.whitelist[encodedCookieName] = false; 882 }.bind(this)); 883 } 884}; 885 886prCookieConsentApi.userScript = { 887 /**
888 * List of callbacks and categories they depend on. 889 */ 890 pendingScripts: [], 891 /** 892 * Run script after model is configured or after user provided consent. 893 */ 894 init: function () { 895 prCookieConsentApi.addConfiguredCallback(this.executePendingScripts.bind(this)); 896 prCookieConsentApi.consent.addCallback(this.executePendingScripts.bind(this)); 897 }, 898 /** 899 * Run or delay script. 900 * 901 * @param {function} callback 902 * @param {string} categoryKey 903 */ 904 execute: function (callback, categoryKey) { 905 if (prCookieConsentApi.isConfigured && prCookieConsentApi.isAllowedCategory(categoryKey)) { 906 callback(); 907 return; 908 } 909 910 this.pendingScripts.push({callback: callback, categoryKey: categoryKey, executed: false}); 911 }, 912 /** 913 * Run pending scripts. 914 */ 915 executePendingScripts: function () { 916 this.pendingScripts.forEach(function (script) { 917 if (false === script.executed && prCookieConsentApi.isAllowedCategory(script.categoryKey)) { 918 script.callback(); 919 script.executed = true; 920 } 921 }.bind(this)); 922 }, 923}; 924 925prCookieConsentApi.websiteRestriction = { 926 getAllowed: function () { 927 var allowedWebsites = prCookieConsentApi.getCookieValue(prCookieConsentApi.config.mage.cookieName); 928 return allowedWebsites ? JSON.parse(allowedWebsites) : {}; 929 }, 930 allowCurrent: function () { 931 return this.set(prCookieConsentApi.config.mage.website, true); 932 }, 933 disallowCurrent: function () { 934 return this.set(prCookieConsentApi.config.mage.website, false); 935 }, 936 /** 937 * @param {number} website 938 * @param {boolean} flag 939 * @return {CookieRestriction.websiteRestriction} 940 */ 941 set: function (website, flag) { 942 var allowedWebsites = this.getAllowed(); 943 944 if (flag) { 945 allowedWebsites[website] = 1; 946 } else { 947 delete allowedWebsites[website]; 948 } 949 950 prCookieService.set(prCookieConsentApi.config.mage.cookieName, allowedWebsites, { 951 path: prCookieConsentApi.config.cookie.path, 952 expires: prCookieConsentApi.config.mage.lifetime ? Math.ceil(prCookieConsentApi.config.mage.lifetime / 86400) : 0 953 }); 954 955 return this; 956 } 957}; 958 959prCookieConsentApi.cache = { 960 cacheData: {allowAllCategories: null}, 961 get: function (key) { 962 return this.cacheData[key]; 963 }, 964 set: function (key, value) { 965 this.cacheData[key] = value; 966 }, 967 reset: function () { 968 this.cacheData = {allowAllCategories: null}; 969 } 970}; 971 972prCookieConsentApi.logger = { 973 level: 0, /* disabled */ 974 init: function () { 975 if (window.location.hash === '#pr-enable-cookie-log') { 976 this.level = 1; /* only warnings and errors */ 977 } 978 if (window.location.hash === '#pr-enable-cookie-log-all') { 979 this.level = 2; /* all logs */ 980 } 981 }, 982 log: function () { 983 this.level > 1 && console.log.apply(console, arguments); 984 }, 985 warn: function () { 986 this.level > 0 && console.warn.apply(console, arguments); 987 }, 988 error: function () { 989 this.level > 0 && console.error.apply(console, arguments); 990 } 991}; 992 993prCookieConsentApi.consent = { 994 /** 995 * Contains callbacks that run after user consent. 996 * 997 * @type {function[]} 998 */ 999 callbacks: [], 1000 allowAllCategories: function () { 1001 prCookieConsentApi.cache.reset(); 1002 prCookieConsentApi.consent.set(['all']); 1003 return this; 1004 }, 1005 declineAll: function () { 1006 prCookieConsentApi.cache.reset(); 1007 prCookieConsentApi.consent.set([]); 1008 return this; 1009 }, 1010 set: function (allowedCategories) { 1011 prCookieService.set(prCookieConsentApi.CUSTOMER_CONSENT, JSON.stringify(allowedCategories), { 1012 expires: prCookieConsentApi.config.consent.expiry, 1013 path: prCookieConsentApi.config.cookie.path, 1014 domain: prCookieConsentApi.config.cookie.domain 1015 }); 1016 1017 if (allowedCategories.includes('all')) {
1018 prCookieConsentApi.websiteRestriction.allowCurrent(); 1019 } else { 1020 prCookieConsentApi.websiteRestriction.disallowCurrent(); 1021 } 1022 prCookieConsentApi.cache.reset(); 1023 1024 var isAccepting = allowedCategories.length; 1025 1026 this.callbacks.forEach(function (callback) { 1027 callback(allowedCategories) 1028 }); 1029 1030 fetch(prCookieConsentApi.config.consent.logUrl, { 1031 method: 'POST', 1032 headers: { 1033 'Content-Type': 'application/json', 1034 'X-Requested-With': 'XMLHttpRequest' 1035 }, 1036 body: JSON.stringify({acceptedKeys: allowedCategories}) 1037 }) 1038 .then(this.pageReloadAfterAction.bind(this, isAccepting)); 1039 }, 1040 /** 1041 * Reload page by configuration and action 1042 * 1043 * @param isAccepting 1044 */ 1045 pageReloadAfterAction: function (isAccepting) { 1046 if (isAccepting && prCookieConsentApi.config.consent.reloadAfterAccept) { 1047 window.location.reload(); 1048 } 1049 1050 if (! isAccepting && prCookieConsentApi.config.consent.reloadAfterDecline) { 1051 window.location.reload(); 1052 } 1053 }, 1054 get: function () { 1055 var consent = prCookieConsentApi.getCookieValue(prCookieConsentApi.CUSTOMER_CONSENT); 1056 return consent ? JSON.parse(consent) : false; 1057 }, 1058 addCallback: function (callback) { 1059 this.callbacks.push(callback); 1060 return this; 1061 }, 1062}; 1063 1064prCookieConsentApi.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
10640022\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'); 1065prCookieConsentApi.initCookieBlocking(); 1066 1067if (typeof define === 'function') { 1068 define('prCookieService', function () {return prCookieService}); 1069 define('prCookieConsentApi', function () {return prCookieConsentApi;}); 1070} 1071</script>
1071 1072 1073 1074
1074<script type="text/javascript" nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 1075 (() => { 1076 document.addEventListener('pr-cookie-consent-api:cookie-blocking:validation', (event) => { 1077 if ('mg_dnt' !== event.detail.cookieName) { 1078 return; 1079 } 1080 1081 setTimeout(() => { 1082 const categoryKey = 'marketing'; 1083 let cookieValue = (event.detail.cookie.match(/^[^=]+=(.*?)(?:$|;)/) || [])[1]?.trim(); 1084 1085 if (prCookieConsentApi.isAllowedCategory(categoryKey) && cookieValue.length) { 1086 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1087 return; 1088 } 1089 1090 if (! prCookieConsentApi.isAllowedCategory(categoryKey) && ! cookieValue.length) { 1091 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1092 } 1093 }, 100); 1094 }); 1095 1096 let handleCookieConsent = () => { 1097 const categoryKey = 'marketing'; 1098 if (prCookieConsentApi.isAllowedCategory(categoryKey)) { 1099 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1100 } else { 1101 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1102 } 1103 }; 1104 1105 prCookieConsentApi.consent.addCallback(handleCookieConsent); 1106 handleCookieConsent(); 1107 })(); 1108 </script>
1108 1109 1110
1110<script> 1111 (function () { 1112 'use strict'; 1113 1114 window.amRecaptchaModel = { 1115 formsToProtect: "form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D", 1116 isEnabledOnPayments: "", 1117 checkoutRecaptchaValidateUrl: "https://www.flooringinc.com/amcapthca/checkout/validate/", 1118 invisibleCaptchaCustomForm: "\u002D1", 1119 recaptchaConfig: { 1120 lang: "hl\u003Den" || 'hl=en', 1121 theme: "light", 1122 badge: "bottomright", 1123 sitekey: "6Lc6gcYqAAAAADiXHrgCFqC4Sewhxs-nrHYgN4oo", 1124 size: "normal" 1125 }, 1126 url: 'https://www.google.com/recaptcha/api.js', 1127 isCaptchaScriptLoaded: false, 1128 isInvisible: "normal" === 'invisible', 1129 1130 /** 1131 * Submit event 1132 * 1133 * @param {Object} $event 1134 * @return {void} 1135 */ 1136 execute: function ($event) { 1137 const eventTarget = $event?.target; 1138 if (this.isCaptchaScriptLoaded) { 1139 this.executeCaptcha(eventTarget); 1140 } else { 1141 window.addEventListener('amcaptcha-script-loaded', () => { 1142 this.isCaptchaScriptLoaded = true; 1143 this.executeCaptcha(eventTarget); 1144 this.initAmcaptchaBadges(); 1145 }); 1146 1147 this.loadRecaptchaScript(); 1148 } 1149 }, 1150 1151 /** 1152 * Execute original submit 1153 * 1154 * @param {Object} $event 1155 * @param {HTMLElement} $el 1156 * @return {void} 1157 */ 1158 recaptchaCallback: function ($event, $el) { 1159 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1160 }, 1161 1162 /** 1163 * Reset captcha 1164 * 1165 * @param {Object} $event 1166 * @param {HTMLElement} $el 1167 */ 1168 expiredCallback: function($event, $el) { 1169 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1170 }, 1171 1172 /** 1173 * Checks if event is fired on submitted element 1174 * 1175 * @param {Object} $event 1176 * @param {HTMLElement} $el 1177 * @return {boolean} 1178 */ 1179 shouldExecuteCallback: function($event, $el) { 1180 const eventWidgetId = $event.detail.widgetId; 1181 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1182 1183 return eventWidgetId === elementWidgetId; 1184 }, 1185 1186 /** 1187 * Run captcha for widget by id 1188 * 1189 * @param {HTMLElement} eventTarget 1190 * @return {void} 1191 */ 1192 executeCaptcha: function(eventTarget) { 1193 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1194 this.bindCaptchaGlobalCallbacks(eventTarget); 1195 this.renderCaptcha(eventTarget); 1196 eventTarget.dataset.amCaptchaRendered = ''; 1197 } 1198 1199 const widgetId = this.getWidgetId(eventTarget); 1200 1201 if (!widgetId) { 1202 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1203 { 1204 type: "error", 1205 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1206 } 1207 ]); 1208 return; 1209 } 1210 1211 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1212 grecaptcha.reset(widgetId); 1213 1214 if (!this.isInvisible) { 1215 this.stopAmcaptchaLoading(); 1216 return; 1217 } 1218 1219 grecaptcha.execute(widgetId) 1220 .then(() => this.stopAmcaptchaLoading()) 1221 .catch(() => this.stopAmcaptchaLoading()); 1222 }, 1223 1224 /** 1225 * Add recaptcha script to page 1226 * 1227 * @return {void} 1228 */ 1229 loadRecaptchaScript: function () { 1230 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1231 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1232 const script = document.createElement('script'); 1233 1234 script.type = 'text/javascript'; 1235 script.src = url; 1236 script.async = true; 1237 document.head.appendChild(script); 1238 }, 1239 1240 /** 1241 * Stop loader on page 1242 * 1243 * @return {void} 1244 */ 1245 stopAmcaptchaLoading: function () { 1246 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1247 }, 1248 1249 /** 1250 * Add attributes to hide captcha badge 1251 * 1252 * @return {void} 1253 */ 1254 initAmcaptchaBadges: function () { 1255 if (!this.isInvisible) { 1256 return; 1257 } 1258 1259 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1260 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1261 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1262 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1263 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1264 }); 1265 }, 1266 1267 /** 1268 * Get form widgetId 1269 * 1270 * @param {HTMLElement} eventTarget 1271 * @return {string} 1272 */ 1273 getWidgetId: function (eventTarget) { 1274 return eventTarget.dataset.amCaptchaWidgetId 1275 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1276 }, 1277 1278 /** 1279 * Add captcha badge or checkbox to protected form. 1280 * Store widgetId in dataset to pass this info in callbacks 1281 * 1282 * @param {HTMLElement} eventTarget 1283 * @return {void} 1284 */ 1285 renderCaptcha: function (eventTarget) { 1286 const captchaElement = document.createElement('div'); 1287 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1288 ?? eventTarget.closest('form'); 1289 formContent?.appendChild(captchaElement); 1290 1291 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1292 ...window.amRecaptchaModel?.recaptchaConfig, 1293 callback: () => { 1294 window.dispatchEvent(new CustomEvent( 1295 'amrecaptcha-callback', { 1296 detail: this.getCaptchaCallbackDetail(eventTarget) 1297 })); 1298 }, 1299 'expired-callback': () => { 1300 window.dispatchEvent(new CustomEvent( 1301 'amrecaptcha-expired-callback', { 1302 detail: this.getCaptchaCallbackDetail(eventTarget) 1303 })); 1304 } 1305 }); 1306 }, 1307 1308 /** 1309 * Get detail property for callback event 1310 * 1311 * @param {HTMLElement} eventTarget 1312 * @return {object} 1313 */ 1314 getCaptchaCallbackDetail: function (eventTarget) { 1315 return { 1316 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1317 form: eventTarget 1318 } 1319 }, 1320 1321 /** 1322 * Add functions that will be called on the global state 1323 * 1324 * @param {HTMLElement} eventTarget 1325 * @return {void} 1326 */ 1327 bindCaptchaGlobalCallbacks: function (eventTarget) { 1328 eventTarget.setAttribute( 1329 'x-on:amrecaptcha-callback.window', 1330 `amRecaptchaModel.recaptchaCallback($event, $el)` 1331 ); 1332 eventTarget.setAttribute( 1333 'x-on:amrecaptcha-expired-callback.window', 1334 'amRecaptchaModel.expiredCallback($event, $el)' 1335 ); 1336 } 1337 }; 1338 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1339 1340 window.amRecaptchaLoadCallback = function () { 1341 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1342 } 1343 </script>
1343 1344 1345 1346 <!--suppress HtmlUnknownTarget --> 1347 <!-- BV | Magento Extension 9.1.7 --> 1348
1348<script> 1349 window.addEventListener('init-external-scripts', () => { 1350 const bvScript = document.createElement('script'); 1351 bvScript.src = '//apps.bazaarvoice.com/deployments/incstores/main_site/production/en_US/bv.js'; 1352 bvScript.type = 'text/javascript'; 1353 bvScript.async = true; 1354 document.head.append(bvScript); 1355 }, {once: true, passive: true}); 1356 </script>
vendor: 1 bytes, line 1356
1356
1357<script> 1358 function initSocialLoginPost() { 1359 return { 1360 submitForm(form) { 1361 event.preventDefault(); 1362 var loginRefererElement = document.getElementById("sociallogin-login-referer"); 1363 var value = loginRefererElement.value; 1364 fetch(form.action, { 1365 headers: { 1366 contentType: "application/json;charset=utf-8", 1367 }, 1368 body: new URLSearchParams({ 1369 form_key: hyva.getFormKey(), 1370 'refress-redirect-url':value 1371 }), 1372 method: "POST", 1373 mode: "cors", 1374 credentials: "include", 1375 }).then(response => { 1376 if (response.redirected) { 1377 window.location.href = response.url; 1378 } else { 1379 window.dispatchMessages("warning", "Post request failed", 5000); 1380 } 1381 }) 1382 } 1383 } 1384 } 1385</script>
1385 1386<form style="display:none;" class="form" x-data="initSocialLoginPost()" @submit="submitForm($el)" 1387 action="https://www.flooringinc.com/sociallogin/account/loginPost/" 1388 method="post" 1389 id="sociallogin-login-form" 1390> 1391 <input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="" /> 1392 <input id="sociallogin-login-submit" type="submit" value="sociallogin" style="font-size:0"/> 1393</form> 1394 1395<style> 1396 .pr-cookie-setting-bar-overlay, 1397 .pr-cookie-setting-bar-container { 1398 z-index: 999999999999999; 1399 } 1400</style> 1401
1402<script> 1403 'use strict'; 1404 var prCookieSettingBar = { 1405 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
1405ilters, 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
1405se 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}, 1406 show: function () {}, 1407 hide: function () {}, 1408 syncCategoriesDataWithConsent: function () { 1409 this.config.categories = this.config.categories.map(category => { 1410 category.is_allowed = prCookieConsentApi.isAllowedCategory(category.key); 1411 return category; 1412 }); 1413 }, 1414 allowAll: function () { 1415 prCookieConsentApi.consent.allowAllCategories(); 1416 this.syncCategoriesDataWithConsent(); 1417 window.prCookieSettingBar.hide(); 1418 }, 1419 declineAll: function () { 1420 prCookieConsentApi.consent.declineAll(); 1421 this.syncCategoriesDataWithConsent(); 1422 window.prCookieSettingBar.hide(); 1423 }, 1424 confirm: function () { 1425 var allowedCategories = [...prCookieConsentApi.config.essentialCategoryKeys]; 1426 this.config.categories.forEach((category) => { 1427 if (allowedCategories.includes(category.key) || !category.is_allowed) { 1428 return; 1429 } 1430 1431 allowedCategories.push(category.key); 1432 }); 1433 1434 prCookieConsentApi.consent.set(allowedCategories); 1435 this.syncCategoriesDataWithConsent(); 1436 window.prCookieSettingBar.hide(); 1437 } 1438 }; 1439</script>
1439 1440 1441<div x-data="{...hyva.modal(), init() { 1442 window.prCookieSettingBar.show = this.show.bind(this, 'pr-cookie-setting-bar', event); 1443 window.prCookieSettingBar.hide = this.hide.bind(this); 1444 }}" x-init="init()"> 1445 <div x-cloak x-bind="overlay('pr-cookie-setting-bar')" 1446 x-spread="overlay('pr-cookie-setting-bar')" 1447 class="fixed inset-0 bg-black bg-opacity-50 z-50 pr-cookie-setting-bar-overlay"> 1448 <div class="fixed flex justify-center items-center text-left z-40 pr-cookie-setting-bar-container inset-0"> 1449 <div x-ref="pr-cookie-setting-bar" role="dialog" aria-modal="true" 1450 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"> 1451 <div class="pr-cookie-setting-bar-wrap text-[13px] px-4 pt-2 pb-4 relative" 1452 id="pr-cookie-setting-bar" 1453 :class="config.cookieDetailsIsOpen && 'h-screen overflow-hidden'" 1454 x-data="prCookieSettingBar" 1455 x-init="syncCategoriesDataWithConsent()" 1456> 1457 <button @click="hide" class="ml-auto -mt-2 -mr-4 block top-2 right-2 p-2"> 1458 <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"> 1459 <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"/> 1460<title>x</title></svg> 1461 </button> 1462 <h3 class="font-bold text-xl leading-normal mb-3" x-text="config.overview.title"></h3> 1463 <div class="pr-cookie-description" x-html="config.overview.text"></div> 1464 <div class="pr-actions-buttons flex flex-wrap items-center justify-center py-4 mb-6 border-container border-b"> 1465 <button type="button" class="action btn btn-primary m-2" x-text="config.acceptButtonConfig.label" @click="allowAll();"></button> 1466 <button type="button" class="action btn btn-secondary m-2" x-text="config.declineButtonConfig.label" @click="declineAll()"></button> 1467 </div> 1468 <h3 class="pr-cookie-manage-title font-bold text-xl mb-0" x-text="config.consentPreferences.header"></h3> 1469 <ul class="message-system-list mt-8"> 1470 <template x-for="category in config.categories"> 1471 <li class="mt-0 mb-4"> 1472 <div class="accordion-title"> 1473 <div class="pr-cookie-option flex justify-between pb-2 mt-8 text-sm"> 1474 <strong class="option-label mr-4" x-text="category.name"></strong> 1475 <template x-if="category.is_essential"> 1476 <strong class="option-status whitespace-nowrap text-green-700" x-text="config.consentPreferences.essential_category_status"></strong> 1477 </template> 1478 <template x-if="! category.is_essential"> 1479 <div class="pr-cookie-switch"> 1480 <label class="switch-label" aria-label="Switch"> 1481 <input type="checkbox" 1482 class="sr-only" 1483 x-model="category.is_allowed" 1484 x-bind:name="category.key" 1485 > 1486 <span class="switch-area flex items-center w-11 h-6 rounded-3xl border border-container cursor-pointer transition-all" 1487 :class="category.is_allowed ? 'bg-green-500 border-green-700' : 'bg-gray-200 border-gray-300'" 1488 > 1489 <span class="switch-nob block w-5 h-5 rounded-full transition-all" 1490 :class="category.is_allowed ? 'bg-white ml-auto mr-[2px]' : 'bg-gray-500 mr-auto ml-[2px]'" 1491 ></span> 1492 </span> 1493 </label> 1494 </div> 1495 </template> 1496 </div> 1497 <div class="first-details" x-data="{ isOpen: false }"> 1498 <div class="pr-cookie-category-description text-gray-700 mb-4" x-text="category.description"></div> 1499 <template x-if="config.canShowCookieDetails"> 1500 <div> 1501 <div class="lvl1">
1502 <span class="pr-cookie-details text-blue-700 cursor-pointer underline hover:no-underline" 1503 x-on:click="isOpen = true; config.cookieDetailsIsOpen = isOpen" 1504 x-text="config.consentPreferences.cookie_details_link" 1505 x-bind:data-category-key="category.key"></span> 1506 </div> 1507 <div class="second-details absolute bg-white px-4 pt-2 pb-4 inset-0 h-full" 1508 x-show="isOpen" 1509 > 1510 <div class="pr-cookie-view flex flex-col h-full"> 1511 <template x-if="isOpen"> 1512 <button @click="hide" class="ml-auto -mt-2 -mr-2 block top-2 right-2 p-2"> 1513 <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"> 1514 <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"/> 1515<title>x</title></svg> 1516 </button> 1517 </template> 1518 <div class="flex justify-between items-center text-sm mb-2"> 1519 <button class="pr-cookie-details-hide px-3 -ml-3 mr-3 flex items-center cursor-pointer hover:text-blue-800" 1520 x-show="isOpen" 1521 x-on:click="isOpen = false; config.cookieDetailsIsOpen = isOpen"> 1522 <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"> 1523 <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"/> 1524<title>arrow-left</title></svg> 1525 Back 1526 </button> 1527 <strong class="option-label" x-text="category.name"></strong> 1528 </div> 1529 <div class="pr-cookies-list h-full px-4 -mx-4 mb-3 overflow-auto"> 1530 <h3 class="pr-cookie-view-title mb-2 font-bold text-base">Cookies List</h3> 1531 <template x-if="category.details.length > 0"> 1532 <template x-for="group in category.details"> 1533 <div class="pr-cookie-item text-xs py-2 border-container border-b"> 1534 <h4 class="pr-cookie-details-title font-semibold mb-1" x-text="group.name"></h4> 1535 <details class="pr-cookie-details-info"> 1536 <summary class="cursor-pointer text-blue-600 hover:text-blue-500"> 1537 <h5 class="inline-block font-semibold"> 1538 View Cookies 1539 </h5> 1540 </summary> 1541 <div class="pr-cookie-group-wrp"> 1542 <template x-for="cookie in group.cookies"> 1543 <div class="pr-cookie-group mt-1 mb-4 p-4 bg-gray-100 rounded"> 1544 <div class="pr-cookie-group-row mb-2 flex"> 1545 <sp
1545an class="w-24 flex-shrink-0 mr-4">Name</span> 1546 <span class="truncate" x-text="cookie.name"></span> 1547 </div> 1548 <div class="pr-cookie-group-row mb-2 flex"> 1549 <span class="w-24 flex-shrink-0 mr-4">Domain</span> 1550 <span class="truncate" x-text="cookie.domainLabel"></span> 1551 </div> 1552 <div class="pr-cookie-group-row mb-2 flex"> 1553 <span class="w-24 flex-shrink-0 mr-4">Duration</span> 1554 <span x-text="cookie.durationLabel"></span> 1555 </div> 1556 <div class="pr-cookie-group-row mb-2 flex"> 1557 <span class="w-24 flex-shrink-0 mr-4">Type</span> 1558 <span x-text="cookie.typeLabel"></span> 1559 </div> 1560 <div class="pr-cookie-group-row mb-2 flex"> 1561 <span class="w-24 flex-shrink-0 mr-4">Category</span> 1562 <span x-text="cookie.category_key"></span> 1563 </div> 1564 <div class="pr-cookie-group-row flex"> 1565 <span class="w-24 flex-shrink-0 mr-4">Description</span> 1566 <span x-text="cookie.description"></span> 1567 </div> 1568 </div> 1569 </template> 1570 </div> 1571 </details> 1572 </div> 1573 </template> 1574 </template> 1575 <template x-if="category.details.length === 0"> 1576 <p>There are no cookies.</p> 1577 </template> 1578 </div> 1579 1580 <template x-if="isOpen"> 1581 <div> 1582 <button class="action btn btn-primary" 1583 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1584 x-text="config.confirmButtonConfig.label" 1585 @click="prCookieSettingBar.confirm()"> 1586 </button> 1587 </div> 1588 </template> 1589 </div> 1590 </div> 1591 </div> 1592 </template> 1593 </div> 1594 </div> 1595 </li> 1596 </template> 1597 <button class="action btn btn-primary" 1598 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1599 x-text="config.confirmButtonConfig.label" 1600 @click="prCookieSettingBar.confirm()"> 1601 </button> 1602 </ul> 1603</div> 1604 </div> 1605 </div> 1606 </div> 1607</div>
1608<script type="text/javascript" nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 1609 (() => { 1610 const updateCookieConsentConfig = () => { 1611 const categoryMap = {}; 1612 Object.entries(prCookieConsentApi.config.cookieToCategoryMapping).forEach(([cookieName, categoryName]) => { 1613 if (! categoryMap[categoryName]) { 1614 categoryMap[categoryName] = []; 1615 } 1616 categoryMap[categoryName].push(cookieName); 1617 }); 1618 1619 Object.entries(categoryMap).forEach(([category, cookies]) => { 1620 const existingList = window.cookie_consent_config[category] || []; 1621 window.cookie_consent_config[category] = Array.from(new Set(existingList.concat(cookies))); 1622 }); 1623 1624 let cookieCategories = ["necessary","preferences","statistics","marketing"]; 1625 window.cookie_consent_groups = {}; 1626 cookieCategories.forEach((category) => { 1627 window.cookie_consent_groups[category] = prCookieConsentApi.isAllowedCategory(category); 1628 }); 1629 } 1630 1631 const updateConsent = () => { 1632 window.cookie_consent_groups = window.cookie_consent_groups || {} 1633 Object.keys(window.cookie_consent_groups).forEach(categoryKey => { 1634 window.cookie_consent_groups[categoryKey] = prCookieConsentApi.isAllowedCategory(categoryKey); 1635 }); 1636 window.dispatchEvent(new CustomEvent('user-allowed-save-cookie')); 1637 } 1638 1639 document.addEventListener('pr-cookie-consent-api:configured', () => { 1640 updateCookieConsentConfig(); 1641 prCookieConsentApi.consent.addCallback(updateConsent); 1642 }); 1643 1644 if (prCookieConsentApi.isConfigured) { 1645 updateCookieConsentConfig(); 1646 prCookieConsentApi.consent.addCallback(updateConsent); 1647 } 1648 })(); 1649</script>
1649 1650<div id="prgdpr-consentpopups-container" 1651 x-data="prDataPrivacyConsentPopupsLoadInit()" 1652 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 1653></div>
1654<script> 1655 function prDataPrivacyConsentPopupsLoadInit() { 1656 return { 1657 receiveCustomerData: function (data) { 1658 if (! data.hasOwnProperty('data_privacy')) { 1659 return; 1660 } 1661 1662 if (data.data_privacy.countNotifies !== 0 || data.data_privacy.countPopups !== 0) { 1663 this.loadPopups(); 1664 } 1665 }, 1666 loadPopups: function () { 1667 fetch('https://www.flooringinc.com/data-privacy/consentpopups/load/') 1668 .then((response) => { 1669 if (! response.ok) { 1670 throw new Error('Network response was not ok'); 1671 } 1672 1673 return response.json(); 1674 }) 1675 .then(data => this.$el.innerHTML = data.html) 1676 .catch(error => console.warn(error)); 1677 } 1678 } 1679 } 1680 1681 function prDataPrivacyConsentPopupsInit(popups, notifies) { 1682 return { 1683 popups: popups, 1684 notifies: notifies, 1685 data: null, 1686 isShowModal: true, 1687 init: function () { 1688 for (popup of this.popups) { 1689 popup.isShowModal = true; 1690 } 1691 1692 for (notify of this.notifies) { 1693 notify.isShowModal = true; 1694 } 1695 }, 1696 closeModal(popup) { 1697 popup.isShowModal = false; 1698 }, 1699 sendRequest: function (url, consent) { 1700 if (consent.cms_page) { 1701 consent.checkboxLabel = 'I agree'; 1702 } 1703 1704 fetch(url, { 1705 method: 'POST', 1706 headers: {'X-Requested-With': 'XMLHttpRequest'}, 1707 body: JSON.stringify({'consent': consent}) 1708 }); 1709 }, 1710 print: function (popup) { 1711 let printWindow = window.open('', 'Print', 'height=600,width=800'); 1712 printWindow.document.write( 1713 `<html><head><title>${popup.cms_page.title}</title></head><body>${popup.cms_page.content}</body></html` 1714 ); 1715 printWindow.document.close(); 1716 printWindow.focus(); 1717 printWindow.print(); 1718 printWindow.onafterprint = function () { 1719 printWindow.close(); 1720 }; 1721 1722 return true; 1723 } 1724 } 1725 } 1726</script>
1726 1727
1728<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 1729 (() => { 1730 const updateConsents = () => { 1731 if (! Array.isArray(prCookieConsentApi.consent.get()) || prCookieConsentApi.consent.get().length > 0) { 1732 prCookieConsentApi.consent.declineAll(); 1733 } 1734 } 1735 1736 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateConsents); 1737 })(); 1738</script>
1738 1739<input name="form_key" type="hidden" value="3V4WQKnndHMXSDau" /> 1740
1740<script> 1741 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1742 </script>
1742 1743<div class="page-wrapper"><div class="container hidden"> 1744 <div class="pt-2 pb-2 flex flex-row items-end justify-end"> 1745 <div class="pl-3"> 1746 <a href="https://www.flooringinc.com/knowledge-base/" class="hover:underline"> 1747 FAQ</a> 1748 </div> 1749 </div> 1750</div> 1751<header class="page-header"><div class="panel wrapper"><div class="header_top flex justify-between items-center" x-data="notificationAjaxCall()" x-init="initNotificationFunc()"> 1752 <div class="header_left_notification text-size14 font-normal" x-html="left_notification_html"></div> 1753 <div class="header_middle_notification flex"> 1754 <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"> 1755<path d="M18.125 0V9.09091H0V0H18.125ZM19.9375 0H29V9.09091H19.9375V0ZM10.875 20V10.9091H29V20H10.875ZM0 20V10.9091H9.0625V20H0Z" fill="#15324C"/> 1756</svg> 500+ Million Sqft Covered</a></div> 1757 1758<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"> 1759<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"/> 1760</svg> 125K+ Verified Reviews</a></div> 1761 1762<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"> 1763<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"/> 1764<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"/> 1765<circle cx="5" cy="5" r="1" fill="white"/> 1766</svg> Price Match Guarantee</a></div> 1767 1768<div class="flex items-center"><a href="/moneybackguarantee" class="flex items-center gap-2"> 1769<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18" fill="none"> 1770<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"/> 1771</svg> Money Back Guarantee</a></div> 1772</div> </div> 1773 <div class="header_right_notifications font-normal"> 1774 <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> 1775<li><a href="/contact">Contact Us</a></li> 1776<li><a href="/sales/guest/form">Track Order</a></li> 1777</ul></div></div></div> </div> 1778</div> 1779
1780<script> 1781 function notificationAjaxCall() { 1782 return { 1783 availability_notification: '', 1784 left_notification_html: '', 1785 right_notification_html: '', 1786 initNotificationFunc: function () { 1787 fetch(BASE_URL+'notifications/index/show', { 1788 method: "GET", 1789 headers: { 'Content-Type': 'application/json' }, 1790 }) 1791 .then(response => { 1792 if (! response.ok) console.warn('GET request failed'); 1793 return response.json(); 1794 }) 1795 .then(data => { 1796 if (data) { 1797 this.availability_notification = data.availability_notification; 1798 this.left_notification_html = data.left_notification_html; 1799 this.right_notification_html = data.right_notification_html; 1800 } 1801 }); 1802 } 1803 } 1804 } 1805</script>
1805</div><div class="header content">
1805<script> 1806 function initQuoteCartDrawer() { 1807 return { 1808 open: false, 1809 cartData: {}, 1810 getQuoteCartData(data) { 1811 if (data.quotecart) { 1812 this.cartData = data.quotecart 1813 this.setCartItems(); 1814 } 1815 }, 1816 cartItems: [], 1817 setCartItems() { 1818 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 1819 }, 1820 deleteItemFromCart(itemId) { 1821 var formKey = document.querySelector('input[name=form_key]').value; 1822 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 1823 "headers": { 1824 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 1825 }, 1826 "body": "form_key="+ formKey + "&item_id="+itemId, 1827 "method": "POST", 1828 "mode": "cors", 1829 "credentials": "include" 1830 }).then(function (response) { 1831 if (response.redirected) { 1832 window.location.href = response.url; 1833 } else if (response.ok) { 1834 return response.json(); 1835 } else { 1836 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1837 [{ 1838 type: "warning", 1839 text: "Could not remove item from quote." 1840 }], 5000 1841 ); 1842 } 1843 }).then(function (response) { 1844 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1845 [{ 1846 type: response.success ? "success" : "error", 1847 text: response.success 1848 ? "You removed the item." 1849 : response.error_message 1850 }], 5000 1851 ); 1852 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 1853 window.dispatchEvent(reloadCustomerDataEvent); 1854 }); 1855 } 1856 } 1857 } 1858</script>
1858 1859<section id="cart-quote-drawer" 1860 x-data="initQuoteCartDrawer()" 1861 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 1862 @toggle-quote-cart.window="open=true;" 1863 @keydown.window.escape="open=false" 1864> 1865 <template x-if="cartData && cartData.summary_count"> 1866 <div role="dialog" 1867 aria-labelledby="cart-drawer-title" 1868 aria-modal="true" 1869 @click.away="open = false" 1870 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 1871 <div class="backdrop" 1872 x-show="open" 1873 x-transition:enter="ease-in-out duration-500" 1874 x-transition:enter-start="opacity-0" 1875 x-transition:enter-end="opacity-100" 1876 x-transition:leave="ease-in-out duration-500" 1877 x-transition:leave-start="opacity-100" 1878 x-transition:leave-end="opacity-0" 1879 @click="open = false" 1880 aria-label="Close panel"></div> 1881 <div class="relative w-screen max-w-md shadow-2xl" 1882 x-show="open" 1883 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1884 x-transition:enter-start="translate-x-full" 1885 x-transition:enter-end="translate-x-0" 1886 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1887 x-transition:leave-start="translate-x-0" 1888 x-transition:leave-end="translate-x-full" 1889 > 1890 <div 1891 x-show="open" 1892 x-transition:enter="ease-in-out duration-500" 1893 x-transition:enter-start="opacity-0" 1894 x-transition:enter-end="opacity-100" 1895 x-transition:leave="ease-in-out duration-500" 1896 x-transition:leave-start="opacity-100" 1897 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 1898 <button @click="open = false" aria-label="Close panel" 1899 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 1900 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 1901 <path stroke-linecap="round" stroke-linejoin="round" 1902 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 1903 </path> 1904 </svg> 1905 </button> 1906 </div> 1907 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 1908 <header class="px-4 sm:px-6"> 1909 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 1910 My Quote Cart </div> 1911 </header> 1912 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 1913 sm:gap-8 sm:px-6 border-container"> 1914 <template x-for="item in cartItems"> 1915 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 1916 ease-in-out rounded-lg hover:bg-gray-100"> 1917 <a :href="item.product_url" class="w-1/4"> 1918 <img 1919 :src="item.product_image.src" 1920 :width="item.product_image.width" 1921 :height="item.product_image.height" 1922 loading="lazy" 1923 /> 1924 </a> 1925 <div class="w-3/4 relative"> 1926 <div> 1927 <div class="text-xl"> 1928 <a :href="item.product_url" class="hover:underline"> 1929 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 1930 </a> 1931 </div> 1932 <div class="text-sm"><span x-html="item.product_sku"></div> 1933 </div> 1934 <template x-for="option in item.options"> 1935 <div class="pt-2"> 1936 <p class="font-semibold" x-text="option.label + ':'"></p> 1937 <p class="text-secondary" x-html="option.value"></p> 1938 </div> 1939 </template> 1940 <div><span x-html="item.product_price"></span></div> 1941 <div class="pt-4"> 1942 <a :href="item.configure_url" 1943 x-show="item.product_type !== 'grouped'" 1944 class="inline-flex p-2 mr-2 btn btn-primary"> 1945 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1946 size="16" class="w-5 h-5"> 1947 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1948 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 1949 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 1950 </path> 1951 </svg> 1952 </a> 1953 <button class="inline-flex p-2 btn btn-primary" 1954 @click="deleteItemFromCart(item.item_id)" 1955 > 1956 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1957 size="16" class="w-5 h-5"> 1958 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1959 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 1960 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 1961 0 00-1 1v3M4 7h16"> 1962 </path> 1963 </svg> 1964 </button> 1965 </div> 1966 </div> 1967 </div> 1968 </template> 1969 </div> 1970 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 1971 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 1972 hover:bg-gray-100">
1973 <span>Cart Subtotal:</span> 1974 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 1975 </div> 1976 <div class="w-full"> 1977 <a href="https://www.flooringinc.com/amasty_quote/cart/" 1978 class="btn btn-secondary justify-center"> 1979 View and Edit Cart </a> 1980 </div> 1981 </div> 1982 </div> 1983 </div> 1984 </div> 1985 </template> 1986</section> 1987<div class="widget block block-static-block"> 1988 <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()"> 1989 <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> 1990</div> 1991
1992<script> 1993function globalNotificationAjaxCall() { 1994 return { 1995 global_notification_text: '', 1996 initGlobalNotificationFunc: function () { 1997 fetch(BASE_URL+'notifications/index/GlobalNotification?full_action_name=blog_index_index&cat_prod_id=', { 1998 method: "GET", 1999 headers: { 'Content-Type': 'application/json' }, 2000 }) 2001 .then(response => { 2002 if (! response.ok) console.warn('GET request failed'); 2003 return response.json(); 2004 }) 2005 .then(data => { 2006 if (data) { 2007 if (data.notification_text !='') { 2008 document.querySelector('.notification4.bg-custom-green').style.display = 'block'; 2009 this.global_notification_text = data.notification_text; 2010 } 2011 } 2012 }); 2013 } 2014 } 2015} 2016</script>
2016</div></div></div> 2017</div>
2017<script> 2018 function initHeader () { 2019 return { 2020 searchOpen: false, 2021 cart: {}, 2022 quoteCart: {}, 2023 activeCartType: 'cart', 2024 getData(data) { 2025 if (data.cart) { 2026 this.cart = data.cart; 2027 // this.cart.summary_count=this.cart.items.length; 2028 } 2029 if (data.quotecart) { 2030 this.quoteCart = data.quotecart; 2031 } 2032 if (data.active_cart_icon) { 2033 this.activeCartType = data.active_cart_icon; 2034 } 2035 } 2036 } 2037 } 2038 function initCompareHeader() { 2039 return { 2040 compareProducts: null, 2041 itemCount: 0, 2042 receiveCompareData(data) { 2043 if (data['compare-products']) { 2044 this.compareProducts = data['compare-products']; 2045 this.itemCount = this.compareProducts.count; 2046 } 2047 } 2048 } 2049 } 2050</script>
2050 2051 2052<div id="header" 2053 class="relative z-30 w-full bg-white" 2054 x-data="initHeader()" 2055 @keydown.window.escape="searchOpen = false;" 2056 @private-content-loaded.window="getData(event.detail.data)" 2057> 2058 <div class="content flex flex-wrap items-center justify-between w-full pt-4 pb-4 mx-auto mt-0"> 2059 <!--Logo--> 2060 <div class="logo relative z-20"> 2061 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 2062 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 2063 no-underline hover:no-underline font-title" 2064 href="https://www.flooringinc.com/" 2065 title="Flooring Inc. The Flooring Superstore" 2066 aria-label="store logo"> 2067 <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> 2068 </a> 2069</div> 2070 </div> 2071 2072 <!--Main Navigation--> 2073 <div x-data="initMenuMobile_6ac15155197cd()" 2074 class="z-50 order-2 sm:order-1 lg:order-2 navigation xl:hidden" 2075> 2076 <!-- mobile --> 2077 <div @load.window="setActiveMenu($root)" 2078 class="mobile-menu bg-lightblue" 2079 :class="{'h-screen fixed top-0 left-0 w-full' : open}" 2080 @toggle-mobile-menu.window="open = !open" 2081 @keydown.window.escape="open=false" 2082 > 2083 <div class="flex items-baseline justify-between ml-0 menu-icon"> 2084 <div class="flex justify-end w-full"> 2085 <a @click="$dispatch('toggle-mobile-menu')" 2086 class="flex items-center justify-center cursor-pointer" 2087 :class="{ 'ml-auto': open }"> 2088 <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> 2089 <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> 2090 </a> 2091 </div> 2092 </div> 2093 <div class="menu-overlay hidden" :class="{ 'hidden' : !open }" @click="$dispatch('toggle-mobile-menu')"></div> 2094 <nav 2095 class="hidden w-full h-full duration-150 ease-in-out transform transition-display pt-5 pr-5 pl-12" 2096 :class="{ 'hidden' : !open }" 2097 > 2098 <span class="menu-label text-size28 font-medium text-black pt-1 pb-4" :class="{ 'hidden' : !open, 'block': open }">Menu</span> 2099 <div class="nav-in overflow-y-auto overflow-x-hidden h-5/6"> 2100 <div class="level-0"> 2101 <span class="flex items-center transition-transform duration-150 ease-in-out transform mb-3"> 2102 <a class="flex items-center w-full cursor-pointer level-0 text-size24 font-medium text-black no-underline" 2103 @click="mobilePanelActiveId = 2104 mobilePanelActiveId === 'category-node-1826' ? 2105 0 : 'category-node-1826'" 2106 title="Flooring By Category"> 2107 Flooring By Category </a> 2108 <a class="absolute right-0 cursor-pointer menu_arw1" :class="{ 2109 'active' : mobilePanelActiveId, 2110 '' : !mobilePanelActiveId 2111 }" 2112 @click="mobilePanelActiveId = 2113 mobilePanelActiveId === 'category-node-1826' ? 2114 0 : 'category-node-1826'" 2115 > 2116 <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> 2117 </a> 2118 </span> 2119 <div 2120 class="w-full h-full transition-transform duration-200 ease-in-out block transform" 2121 :class="{ 2122 'block' : mobilePanelActiveId !== 'category-node-1826', 2123 'hidden' : mobilePanelActiveId === 'category-node-1826', 2124 }" 2125 > 2126 2127 2128 2129 <li class="imgcat list-none relative" x-data="{ show: false }" > 2130 <a 2131 @click="show = !show" 2132 2133 title="Rubber Flooring" 2134 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2135 > 2136 <!-- <span class="w-6"></span> -->
2137 <span> 2138 Rubber Flooring </span> 2139 </a> 2140 2141 <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> 2142 <ul class="z-10 w-full" x-show="show"> 2143 <li class="level-2"> 2144 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 2145 title="All Rubber Flooring" 2146 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2147 All Rubber Flooring</a> 2148 </li> 2149 <li class="level-2"> 2150 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 2151 title="Rubber Flooring Rolls" 2152 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2153 Rubber Flooring Rolls</a> 2154 </li> 2155 <li class="level-2"> 2156 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 2157 title="Rubber Floor Tiles" 2158 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2159 Rubber Floor Tiles</a> 2160 </li> 2161 <li class="level-2"> 2162 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 2163 title="Rubber Mats" 2164 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2165 Rubber Mats</a> 2166 </li> 2167 <li class="level-2"> 2168 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 2169 title="Playground Flooring" 2170 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2171 Playground Flooring</a> 2172 </li> 2173 <li class="level-2"> 2174 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 2175 title="Outdoor Rubber Flooring" 2176 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2177 Outdoor Rubber Flooring</a> 2178 </li> 2179 </ul> 2180 <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> 2181 2182 2183 2184 2185 <li class="imgcat list-none relative" x-data="{ show: false }" > 2186 <a 2187 @click="show = !show" 2188 2189 title="Garage Flooring" 2190 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2191 > 2192 <!-- <span class="w-6"></span> -->
2193 <span> 2194 Garage Flooring </span> 2195 </a> 2196 2197 <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> 2198 <ul class="z-10 w-full" x-show="show"> 2199 <li class="level-2"> 2200 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 2201 title="All Garage Flooring" 2202 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2203 All Garage Flooring</a> 2204 </li> 2205 <li class="level-2"> 2206 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 2207 title="Garage Flooring Rolls" 2208 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2209 Garage Flooring Rolls</a> 2210 </li> 2211 <li class="level-2"> 2212 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 2213 title="Garage Floor Tiles" 2214 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2215 Garage Floor Tiles</a> 2216 </li> 2217 <li class="level-2"> 2218 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 2219 title="Garage Gym Flooring" 2220 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2221 Garage Gym Flooring</a> 2222 </li> 2223 <li class="level-2"> 2224 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 2225 title="Garage Floor Epoxy" 2226 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2227 Garage Floor Epoxy</a> 2228 </li> 2229 <li class="level-2"> 2230 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 2231 title="Trailer Flooring" 2232 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2233 Trailer Flooring</a> 2234 </li> 2235 </ul> 2236 <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> 2237 2238 2239 2240 2241 <li class="imgcat list-none relative" x-data="{ show: false }" > 2242 <a 2243 @click="show = !show" 2244 2245 title="Dance Flooring" 2246 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2247 > 2248 <!-- <span class="w-6"></span> -->
2249 <span> 2250 Dance Flooring </span> 2251 </a> 2252 2253 <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> 2254 <ul class="z-10 w-full" x-show="show"> 2255 <li class="level-2"> 2256 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 2257 title="Marley Floor Rolls" 2258 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2259 Marley Floor Rolls</a> 2260 </li> 2261 <li class="level-2"> 2262 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 2263 title="Dance Floor Tiles" 2264 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2265 Dance Floor Tiles</a> 2266 </li> 2267 <li class="level-2"> 2268 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 2269 title="Portable Dance Floors & Kits" 2270 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2271 Portable Dance Floors & Kits</a> 2272 </li> 2273 <li class="level-2"> 2274 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 2275 title="Subflooring" 2276 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2277 Subflooring</a> 2278 </li> 2279 <li class="level-2"> 2280 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 2281 title="Adhesives, Cleaners & Accessories" 2282 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2283 Adhesives, Cleaners & Accessories</a> 2284 </li> 2285 <li class="level-2"> 2286 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 2287 title="All Dance Flooring" 2288 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2289 All Dance Flooring</a> 2290 </li> 2291 </ul> 2292 <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> 2293 2294 2295 2296 2297 <li class="imgcat list-none relative" x-data="{ show: false }" > 2298 <a 2299 @click="show = !show" 2300 2301 title="Foam Flooring" 2302 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2303 > 2304 <!-- <span class="w-6"></span> -->
2305 <span> 2306 Foam Flooring </span> 2307 </a> 2308 2309 <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> 2310 <ul class="z-10 w-full" x-show="show"> 2311 <li class="level-2"> 2312 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 2313 title="Foam Floor Tiles" 2314 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2315 Foam Floor Tiles</a> 2316 </li> 2317 <li class="level-2"> 2318 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 2319 title="Kids & Baby Play Mats" 2320 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2321 Kids & Baby Play Mats</a> 2322 </li> 2323 <li class="level-2"> 2324 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 2325 title="Gymnastics Mats " 2326 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2327 Gymnastics Mats </a> 2328 </li> 2329 <li class="level-2"> 2330 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 2331 title="Wrestling Mats" 2332 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2333 Wrestling Mats</a> 2334 </li> 2335 <li class="level-2"> 2336 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 2337 title="Martial Arts Mats " 2338 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2339 Martial Arts Mats </a> 2340 </li> 2341 <li class="level-2"> 2342 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 2343 title="Trade Show Flooring" 2344 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2345 Trade Show Flooring</a> 2346 </li> 2347 </ul> 2348 <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> 2349 2350 2351 2352 2353 <li class="imgcat list-none relative" x-data="{ show: false }" > 2354 <a 2355 @click="show = !show" 2356 2357 title="Outdoor Flooring" 2358 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2359 > 2360 <!-- <span class="w-6"></span> -->
2361 <span> 2362 Outdoor Flooring </span> 2363 </a> 2364 2365 <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> 2366 <ul class="z-10 w-full" x-show="show"> 2367 <li class="level-2"> 2368 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 2369 title="Playground Flooring" 2370 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2371 Playground Flooring</a> 2372 </li> 2373 <li class="level-2"> 2374 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 2375 title="Sports Flooring & Court Tiles" 2376 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2377 Sports Flooring & Court Tiles</a> 2378 </li> 2379 <li class="level-2"> 2380 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 2381 title="Turf & Artificial Grass" 2382 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2383 Turf & Artificial Grass</a> 2384 </li> 2385 <li class="level-2"> 2386 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 2387 title="Composite Decking" 2388 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2389 Composite Decking</a> 2390 </li> 2391 <li class="level-2"> 2392 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 2393 title="Rooftop Deck Flooring" 2394 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2395 Rooftop Deck Flooring</a> 2396 </li> 2397 <li class="level-2"> 2398 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 2399 title="Drainage Tile & Mats" 2400 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2401 Drainage Tile & Mats</a> 2402 </li> 2403 </ul> 2404 <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> 2405 2406 2407 2408 2409 <li class="imgcat list-none relative" x-data="{ show: false }" > 2410 <a 2411 @click="show = !show" 2412 2413 title="Turf & Artificial Grass" 2414 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2415 > 2416 <!-- <span class="w-6"></span> -->
2417 <span> 2418 Turf & Artificial Grass </span> 2419 </a> 2420 2421 <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> 2422 <ul class="z-10 w-full" x-show="show"> 2423 <li class="level-2"> 2424 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 2425 title="Sport & Gym Turf" 2426 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2427 Sport & Gym Turf</a> 2428 </li> 2429 <li class="level-2"> 2430 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 2431 title="Landscape Turf" 2432 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2433 Landscape Turf</a> 2434 </li> 2435 <li class="level-2"> 2436 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 2437 title="Pet Turf" 2438 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2439 Pet Turf</a> 2440 </li> 2441 <li class="level-2"> 2442 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 2443 title="Golf & Putting Green Turf" 2444 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2445 Golf & Putting Green Turf</a> 2446 </li> 2447 <li class="level-2"> 2448 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 2449 title="Turf Accessories" 2450 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2451 Turf Accessories</a> 2452 </li> 2453 <li class="level-2"> 2454 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 2455 title="All Turf & Artificial Grass" 2456 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2457 All Turf & Artificial Grass</a> 2458 </li> 2459 </ul> 2460 <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> 2461 2462 2463 2464 2465 <li class="imgcat list-none relative" x-data="{ show: false }" > 2466 <a 2467 @click="show = !show" 2468 2469 title="Carpet Tiles & Rolls" 2470 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2471 > 2472 <!-- <span class="w-6"></span> -->
2473 <span> 2474 Carpet Tiles & Rolls </span> 2475 </a> 2476 2477 <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> 2478 <ul class="z-10 w-full" x-show="show"> 2479 <li class="level-2"> 2480 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 2481 title="Carpet Tiles" 2482 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2483 Carpet Tiles</a> 2484 </li> 2485 <li class="level-2"> 2486 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 2487 title="Carpet Rolls" 2488 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2489 Carpet Rolls</a> 2490 </li> 2491 <li class="level-2"> 2492 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 2493 title="Home Theater Carpet" 2494 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2495 Home Theater Carpet</a> 2496 </li> 2497 <li class="level-2"> 2498 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 2499 title="Peel and Stick Carpet Tiles" 2500 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2501 Peel and Stick Carpet Tiles</a> 2502 </li> 2503 <li class="level-2"> 2504 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 2505 title="Outdoor Carpet" 2506 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2507 Outdoor Carpet</a> 2508 </li> 2509 <li class="level-2"> 2510 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 2511 title="Waterproof Carpet" 2512 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2513 Waterproof Carpet</a> 2514 </li> 2515 </ul> 2516 <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> 2517 2518 2519 2520 2521 <li class="imgcat list-none relative" x-data="{ show: false }" > 2522 <a 2523 @click="show = !show" 2524 2525 title="Vinyl Flooring" 2526 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2527 > 2528 <!-- <span class="w-6"></span> -->
2529 <span> 2530 Vinyl Flooring </span> 2531 </a> 2532 2533 <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> 2534 <ul class="z-10 w-full" x-show="show"> 2535 <li class="level-2"> 2536 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 2537 title="Vinyl Sheet Flooring" 2538 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2539 Vinyl Sheet Flooring</a> 2540 </li> 2541 <li class="level-2"> 2542 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 2543 title="Vinyl Tiles & Planks" 2544 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2545 Vinyl Tiles & Planks</a> 2546 </li> 2547 <li class="level-2"> 2548 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 2549 title="Waterproof Vinyl Flooring" 2550 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2551 Waterproof Vinyl Flooring</a> 2552 </li> 2553 <li class="level-2"> 2554 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 2555 title="Rigid Core Vinyl Flooring" 2556 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2557 Rigid Core Vinyl Flooring</a> 2558 </li> 2559 <li class="level-2"> 2560 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 2561 title="Commercial Vinyl Flooring" 2562 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2563 Commercial Vinyl Flooring</a> 2564 </li> 2565 </ul> 2566 2567 2568 2569 2570 <li class="imgcat list-none relative" x-data="{ show: false }" > 2571 <a 2572 @click="show = !show" 2573 2574 title="Wood & Laminate Flooring" 2575 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2576 > 2577 <!-- <span class="w-6"></span> -->
2578 <span> 2579 Wood & Laminate Flooring </span> 2580 </a> 2581 2582 <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> 2583 <ul class="z-10 w-full" x-show="show"> 2584 <li class="level-2"> 2585 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 2586 title="Waterproof Laminate Flooring" 2587 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2588 Waterproof Laminate Flooring</a> 2589 </li> 2590 <li class="level-2"> 2591 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 2592 title="Laminate Flooring" 2593 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2594 Laminate Flooring</a> 2595 </li> 2596 <li class="level-2"> 2597 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 2598 title="Engineered Hardwood Flooring" 2599 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2600 Engineered Hardwood Flooring</a> 2601 </li> 2602 <li class="level-2"> 2603 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 2604 title="Oak Wood Flooring" 2605 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2606 Oak Wood Flooring</a> 2607 </li> 2608 <li class="level-2"> 2609 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 2610 title="Commercial Wood & Laminate" 2611 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2612 Commercial Wood & Laminate</a> 2613 </li> 2614 </ul> 2615 2616 2617 2618 2619 <li class="imgcat list-none relative" x-data="{ show: false }" > 2620 <a 2621 @click="show = !show" 2622 2623 title="Commercial Flooring" 2624 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2625 > 2626 <!-- <span class="w-6"></span> -->
2627 <span> 2628 Commercial Flooring </span> 2629 </a> 2630 2631 <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> 2632 <ul class="z-10 w-full" x-show="show"> 2633 <li class="level-2"> 2634 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 2635 title="Commercial Rubber Flooring" 2636 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2637 Commercial Rubber Flooring</a> 2638 </li> 2639 <li class="level-2"> 2640 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 2641 title="Commercial Garage Flooring" 2642 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2643 Commercial Garage Flooring</a> 2644 </li> 2645 <li class="level-2"> 2646 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 2647 title="Commercial Carpet Tiles" 2648 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2649 Commercial Carpet Tiles</a> 2650 </li> 2651 <li class="level-2"> 2652 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 2653 title="Commercial Vinyl Flooring" 2654 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2655 Commercial Vinyl Flooring</a> 2656 </li> 2657 <li class="level-2"> 2658 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 2659 title="Commercial Wood & Laminate Flooring" 2660 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2661 Commercial Wood & Laminate Flooring</a> 2662 </li> 2663 <li class="level-2"> 2664 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 2665 title="Gym Floor Covers | Floor Protection" 2666 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2667 Gym Floor Covers | Floor Protection</a> 2668 </li> 2669 </ul> 2670 <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> 2671 2672 2673 2674 2675 <li class="imgcat list-none relative" x-data="{ show: false }" > 2676 <a 2677 @click="show = !show" 2678 2679 title="Floors by Activity" 2680 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2681 > 2682 <!-- <span class="w-6"></span> -->
2683 <span> 2684 Floors by Activity </span> 2685 </a> 2686 2687 <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> 2688 <ul class="z-10 w-full" x-show="show"> 2689 <li class="level-2"> 2690 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 2691 title="Fitness Flooring" 2692 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2693 Fitness Flooring</a> 2694 </li> 2695 <li class="level-2"> 2696 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 2697 title="Dance Flooring | Marley Floor" 2698 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2699 Dance Flooring | Marley Floor</a> 2700 </li> 2701 <li class="level-2"> 2702 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 2703 title="Sport & Court Flooring" 2704 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2705 Sport & Court Flooring</a> 2706 </li> 2707 <li class="level-2"> 2708 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 2709 title="Martial Arts Mats " 2710 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2711 Martial Arts Mats </a> 2712 </li> 2713 <li class="level-2"> 2714 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 2715 title="Cheer Mats" 2716 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2717 Cheer Mats</a> 2718 </li> 2719 <li class="level-2"> 2720 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 2721 title="Wrestling Mats" 2722 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2723 Wrestling Mats</a> 2724 </li> 2725 </ul> 2726 <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> 2727 2728 2729 2730 2731 <li class="imgcat list-none relative" x-data="{ show: false }" > 2732 <a 2733 @click="show = !show" 2734 2735 title="Floors by Space" 2736 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2737 > 2738 <!-- <span class="w-6"></span> -->
2739 <span> 2740 Floors by Space </span> 2741 </a> 2742 2743 <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> 2744 <ul class="z-10 w-full" x-show="show"> 2745 <li class="level-2"> 2746 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 2747 title="Kitchen Flooring" 2748 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2749 Kitchen Flooring</a> 2750 </li> 2751 <li class="level-2"> 2752 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 2753 title="Bathroom Flooring" 2754 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2755 Bathroom Flooring</a> 2756 </li> 2757 <li class="level-2"> 2758 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 2759 title="Commercial Flooring" 2760 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2761 Commercial Flooring</a> 2762 </li> 2763 <li class="level-2"> 2764 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 2765 title="Gym Flooring" 2766 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2767 Gym Flooring</a> 2768 </li> 2769 <li class="level-2"> 2770 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 2771 title="Garage Flooring" 2772 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2773 Garage Flooring</a> 2774 </li> 2775 <li class="level-2"> 2776 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 2777 title="Outdoor Flooring" 2778 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2779 Outdoor Flooring</a> 2780 </li> 2781 </ul> 2782 <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> 2783 2784 2785 2786 2787 <li class="imgcat list-none relative" x-data="{ show: false }" > 2788 <a 2789 @click="show = !show" 2790 2791 title="Underlayment & Flooring Accessories" 2792 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2793 > 2794 <!-- <span class="w-6"></span> -->
2795 <span> 2796 Underlayment & Flooring Accessories </span> 2797 </a> 2798 2799 <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> 2800 <ul class="z-10 w-full" x-show="show"> 2801 <li class="level-2"> 2802 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 2803 title="Flooring Adhesives & Glue" 2804 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2805 Flooring Adhesives & Glue</a> 2806 </li> 2807 <li class="level-2"> 2808 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 2809 title="Floor and Mat Tape" 2810 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2811 Floor and Mat Tape</a> 2812 </li> 2813 <li class="level-2"> 2814 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 2815 title="Installation Accessories" 2816 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2817 Installation Accessories</a> 2818 </li> 2819 <li class="level-2"> 2820 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 2821 title="Floor Trims & Moldings" 2822 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2823 Floor Trims & Moldings</a> 2824 </li> 2825 <li class="level-2"> 2826 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 2827 title="Flooring Underlayment" 2828 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2829 Flooring Underlayment</a> 2830 </li> 2831 <li class="level-2"> 2832 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 2833 title="Flooring Cleaners" 2834 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2835 Flooring Cleaners</a> 2836 </li> 2837 </ul> 2838 <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> 2839 2840 2841 2842 2843 <li class="imgcat list-none relative" x-data="{ show: false }" > 2844 <a 2845 @click="show = !show" 2846 2847 title="Specials" 2848 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2849 > 2850 <!-- <span class="w-6"></span> -->
2851 <span> 2852 Specials </span> 2853 </a> 2854 2855 <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> 2856 <ul class="z-10 w-full" x-show="show"> 2857 <li class="level-2"> 2858 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 2859 title="Flooring Deals" 2860 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2861 Flooring Deals</a> 2862 </li> 2863 <li class="level-2"> 2864 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 2865 title="American Made" 2866 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2867 American Made</a> 2868 </li> 2869 <li class="level-2"> 2870 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 2871 title="Quick Ship" 2872 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2873 Quick Ship</a> 2874 </li> 2875 <li class="level-2"> 2876 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 2877 title="New Arrivals" 2878 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2879 New Arrivals</a> 2880 </li> 2881 </ul> 2882 2883 2884 </div> 2885 2886 2887 </div> 2888 <div class="menu_static_links"> 2889 <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> 2890<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 2891<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 2892</ul></div></div></div> </div> 2893 </div> 2894 </nav> 2895 </div> 2896</div>
2897<script> 2898 'use strict'; 2899 2900 const initMenuMobile_6ac15155197cd = () => { 2901 return { 2902 mobilePanelActiveId: null, 2903 open: false, 2904 setActiveMenu(menuNode) { 2905 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2906 return link.href === window.location.href.split('?')[0]; 2907 }).map(item => { 2908 item.classList.add('underline'); 2909 item.closest('div.level-0') && 2910 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 2911 }); 2912 } 2913 } 2914 } 2915 2916 window.addEventListener("scroll", function() { 2917 successMsgSticky2(); 2918 }); 2919 2920 // sticky header 2921 function successMsgSticky2() { 2922 if (window.innerWidth < 767) { 2923 var headerHeight = document.querySelector('.page-header .panel.wrapper').offsetHeight; 2924 var headerMainHeight = document.getElementById('header').offsetHeight; 2925 var scrollTop = window.scrollY; 2926 2927 if (scrollTop >= headerHeight) { 2928 document.body.classList.add('scroll-reached-hHgt'); 2929 document.body.style.paddingTop = headerMainHeight + 'px'; 2930 } else { 2931 document.body.classList.remove('scroll-reached-hHgt'); 2932 document.body.style.paddingTop = '0'; 2933 } 2934 } 2935 } 2936 2937 window.addEventListener("load", function() { 2938 successMsgSticky2(); 2939 }); 2940 2941</script>
2941 2942 2943<div x-data="initMenuDesktop_6ac1515521319()" 2944 class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden xl:flex desktop__menu" 2945> 2946 <!-- desktop --> 2947 <div @load.window="setActiveMenu($root)" 2948 class="justify-between items-center mx-auto w-full max-w-7xl pl-2" 2949 > 2950 <nav 2951 class="flex flex-wrap" 2952 > 2953 <div class="level-0 flex py-2 items-center border-transparent transition transition-colors duration-500 group megamenu_items" :class="{ 'block' : open}" 2954 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 2955 @mouseenter="desktopMegaMenuShow = true" @mouseleave="desktopMegaMenuShow = false" 2956 x-data="{ desktopMegaMenuShow: false }" 2957 > 2958 <!-- <a href="https://www.flooringinc.com/shop.html" --> 2959 <a 2960 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 2961 title="Flooring By Category" 2962 class="level-0 block p-2 text-base font-medium text-black whitespace-nowrap cursor-pointer megamenu_items_link"> 2963 <span>Flooring By Category</span> 2964 <span class="inline items-center releat"> 2965 <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"> 2966 <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"/> 2967<title>chevron-down</title></svg> 2968 </span> 2969 </a> 2970 <template x-if="desktopMegaMenuShow"> 2971 <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" 2972 style="display:none;" 2973 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 2974 > 2975 <div class="flex justify-between mt-0 mb-0 sub-megamenu"> 2976 <div class="mx-auto w-full"> 2977 <ul class="grid flex-1 w-full gap-y-0 gap-x-0 py-4 px-5 relative"> 2978 2979 <li :class="{ 'active': show }" class="level-1 level1 display-first" x-data="{ show: true }" 2980 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 2981 > 2982 <a 2983 title="Rubber Flooring" 2984 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 2985 2986 > 2987 Rubber Flooring 2988 <span class="inline items-center rotate-180 absolute"> 2989 <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"> 2990 <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"/> 2991<title>chevron-down</title></svg> 2992 </span> 2993 </a> 2994 2995 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 2996 <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> 2997 2998 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
2999 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Rubber Flooring</span> 3000 3001 <li class="level-2 w-4/12 pr-6 pb-6"> 3002 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 3003 title="All Rubber Flooring" 3004 class="level-2 block"> 3005 <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> 3006 3007 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Rubber Flooring</span></a> 3008 </li> 3009 3010 <li class="level-2 w-4/12 pr-6 pb-6"> 3011 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 3012 title="Rubber Flooring Rolls" 3013 class="level-2 block"> 3014 <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> 3015 3016 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Flooring Rolls</span></a> 3017 </li> 3018 3019 <li class="level-2 w-4/12 pr-6 pb-6"> 3020 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 3021 title="Rubber Floor Tiles" 3022 class="level-2 block"> 3023 <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> 3024
3025 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Floor Tiles</span></a> 3026 </li> 3027 3028 <li class="level-2 w-4/12 pr-6 pb-6"> 3029 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 3030 title="Rubber Mats" 3031 class="level-2 block"> 3032 <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> 3033 3034 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Mats</span></a> 3035 </li> 3036 3037 <li class="level-2 w-4/12 pr-6 pb-6"> 3038 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 3039 title="Playground Flooring" 3040 class="level-2 block"> 3041 <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> 3042 3043 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3044 </li> 3045 3046 <li class="level-2 w-4/12 pr-6 pb-6"> 3047 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 3048 title="Outdoor Rubber Flooring" 3049 class="level-2 block"> 3050 <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> 3051
3052 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Rubber Flooring</span></a> 3053 </li> 3054 3055 3056 <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> 3057 3058 3059 </ul> 3060 </li> 3061 3062 3063 3064 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3065 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3066 > 3067 <a 3068 title="Garage Flooring" 3069 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3070 3071 > 3072 Garage Flooring 3073 <span class="inline items-center rotate-180 absolute"> 3074 <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"> 3075 <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"/> 3076<title>chevron-down</title></svg> 3077 </span> 3078 </a> 3079 3080 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3081 <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> 3082 3083 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3084 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Garage Flooring</span> 3085 3086 <li class="level-2 w-4/12 pr-6 pb-6"> 3087 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 3088 title="All Garage Flooring" 3089 class="level-2 block"> 3090 <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> 3091 3092 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Garage Flooring</span></a> 3093 </li> 3094 3095 <li class="level-2 w-4/12 pr-6 pb-6"> 3096 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 3097 title="Garage Flooring Rolls" 3098 class="level-2 block"> 3099 <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> 3100 3101 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring Rolls</span></a> 3102 </li> 3103 3104 <li class="level-2 w-4/12 pr-6 pb-6"> 3105 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 3106 title="Garage Floor Tiles" 3107 class="level-2 block"> 3108 <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> 3109
3110 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Tiles</span></a> 3111 </li> 3112 3113 <li class="level-2 w-4/12 pr-6 pb-6"> 3114 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 3115 title="Garage Gym Flooring" 3116 class="level-2 block"> 3117 <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> 3118 3119 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Gym Flooring</span></a> 3120 </li> 3121 3122 <li class="level-2 w-4/12 pr-6 pb-6"> 3123 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 3124 title="Garage Floor Epoxy" 3125 class="level-2 block"> 3126 <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> 3127 3128 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Epoxy</span></a> 3129 </li> 3130 3131 <li class="level-2 w-4/12 pr-6 pb-6"> 3132 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 3133 title="Trailer Flooring" 3134 class="level-2 block"> 3135 <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> 3136
3137 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trailer Flooring</span></a> 3138 </li> 3139 3140 3141 <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> 3142 3143 3144 </ul> 3145 </li> 3146 3147 3148 3149 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3150 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3151 > 3152 <a 3153 title="Dance Flooring" 3154 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3155 3156 > 3157 Dance Flooring 3158 <span class="inline items-center rotate-180 absolute"> 3159 <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"> 3160 <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"/> 3161<title>chevron-down</title></svg> 3162 </span> 3163 </a> 3164 3165 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3166 <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> 3167 3168 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3169 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Dance Flooring</span> 3170 3171 <li class="level-2 w-4/12 pr-6 pb-6"> 3172 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 3173 title="Marley Floor Rolls" 3174 class="level-2 block"> 3175 <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> 3176 3177 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Marley Floor Rolls</span></a> 3178 </li> 3179 3180 <li class="level-2 w-4/12 pr-6 pb-6"> 3181 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 3182 title="Dance Floor Tiles" 3183 class="level-2 block"> 3184 <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> 3185 3186 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Floor Tiles</span></a> 3187 </li> 3188 3189 <li class="level-2 w-4/12 pr-6 pb-6"> 3190 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 3191 title="Portable Dance Floors & Kits" 3192 class="level-2 block"> 3193 <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> 3194
3195 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Portable Dance Floors & Kits</span></a> 3196 </li> 3197 3198 <li class="level-2 w-4/12 pr-6 pb-6"> 3199 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 3200 title="Subflooring" 3201 class="level-2 block"> 3202 <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> 3203 3204 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Subflooring</span></a> 3205 </li> 3206 3207 <li class="level-2 w-4/12 pr-6 pb-6"> 3208 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 3209 title="Adhesives, Cleaners & Accessories" 3210 class="level-2 block"> 3211 <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> 3212 3213 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Adhesives, Cleaners & Accessories</span></a> 3214 </li> 3215 3216 <li class="level-2 w-4/12 pr-6 pb-6"> 3217 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 3218 title="All Dance Flooring" 3219 class="level-2 block"> 3220 <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> 3221
3222 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Dance Flooring</span></a> 3223 </li> 3224 3225 3226 <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> 3227 3228 3229 </ul> 3230 </li> 3231 3232 3233 3234 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3235 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3236 > 3237 <a 3238 title="Foam Flooring" 3239 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3240 3241 > 3242 Foam Flooring 3243 <span class="inline items-center rotate-180 absolute"> 3244 <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"> 3245 <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"/> 3246<title>chevron-down</title></svg> 3247 </span> 3248 </a> 3249 3250 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3251 <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> 3252 3253 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3254 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Foam Flooring</span> 3255 3256 <li class="level-2 w-4/12 pr-6 pb-6"> 3257 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 3258 title="Foam Floor Tiles" 3259 class="level-2 block"> 3260 <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> 3261 3262 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Foam Floor Tiles</span></a> 3263 </li> 3264 3265 <li class="level-2 w-4/12 pr-6 pb-6"> 3266 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 3267 title="Kids & Baby Play Mats" 3268 class="level-2 block"> 3269 <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> 3270 3271 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kids & Baby Play Mats</span></a> 3272 </li> 3273 3274 <li class="level-2 w-4/12 pr-6 pb-6"> 3275 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 3276 title="Gymnastics Mats " 3277 class="level-2 block"> 3278 <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> 3279
3280 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gymnastics Mats </span></a> 3281 </li> 3282 3283 <li class="level-2 w-4/12 pr-6 pb-6"> 3284 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 3285 title="Wrestling Mats" 3286 class="level-2 block"> 3287 <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> 3288 3289 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3290 </li> 3291 3292 <li class="level-2 w-4/12 pr-6 pb-6"> 3293 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 3294 title="Martial Arts Mats " 3295 class="level-2 block"> 3296 <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> 3297 3298 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3299 </li> 3300 3301 <li class="level-2 w-4/12 pr-6 pb-6"> 3302 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 3303 title="Trade Show Flooring" 3304 class="level-2 block"> 3305 <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> 3306
3307 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trade Show Flooring</span></a> 3308 </li> 3309 3310 3311 <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> 3312 3313 3314 </ul> 3315 </li> 3316 3317 3318 3319 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3320 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3321 > 3322 <a 3323 title="Outdoor Flooring" 3324 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3325 3326 > 3327 Outdoor Flooring 3328 <span class="inline items-center rotate-180 absolute"> 3329 <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"> 3330 <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"/> 3331<title>chevron-down</title></svg> 3332 </span> 3333 </a> 3334 3335 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3336 <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.
3336webp"><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> 3337 3338 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3339 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Outdoor Flooring</span> 3340 3341 <li class="level-2 w-4/12 pr-6 pb-6"> 3342 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 3343 title="Playground Flooring" 3344 class="level-2 block"> 3345 <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> 3346 3347 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3348 </li> 3349 3350 <li class="level-2 w-4/12 pr-6 pb-6"> 3351 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 3352 title="Sports Flooring & Court Tiles" 3353 class="level-2 block"> 3354 <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> 3355
3356 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sports Flooring & Court Tiles</span></a> 3357 </li> 3358 3359 <li class="level-2 w-4/12 pr-6 pb-6"> 3360 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 3361 title="Turf & Artificial Grass" 3362 class="level-2 block"> 3363 <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> 3364 3365 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf & Artificial Grass</span></a> 3366 </li> 3367 3368 <li class="level-2 w-4/12 pr-6 pb-6"> 3369 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 3370 title="Composite Decking" 3371 class="level-2 block"> 3372 <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> 3373 3374 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Composite Decking</span></a> 3375 </li> 3376 3377 <li class="level-2 w-4/12 pr-6 pb-6"> 3378 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 3379 title="Rooftop Deck Flooring" 3380 class="level-2 block"> 3381 <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> 3382
3383 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rooftop Deck Flooring</span></a> 3384 </li> 3385 3386 <li class="level-2 w-4/12 pr-6 pb-6"> 3387 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 3388 title="Drainage Tile & Mats" 3389 class="level-2 block"> 3390 <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> 3391 3392 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Drainage Tile & Mats</span></a> 3393 </li> 3394 3395 3396 <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> 3397 3398 3399 </ul> 3400 </li> 3401 3402 3403 3404 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3405 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3406 > 3407 <a 3408 title="Turf & Artificial Grass" 3409 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3410 3411 > 3412 Turf & Artificial Grass 3413 <span class="inline items-center rotate-180 absolute"> 3414 <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"> 3415 <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"/> 3416<title>chevron-down</title></svg> 3417 </span> 3418 </a> 3419 3420 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3421 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Turf & Artificial Grass</span> 3422 3423 <li class="level-2 w-4/12 pr-6 pb-6"> 3424 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 3425 title="Sport & Gym Turf" 3426 class="level-2 block"> 3427 <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> 3428 3429 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Gym Turf</span></a> 3430 </li> 3431 3432 <li class="level-2 w-4/12 pr-6 pb-6"> 3433 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 3434 title="Landscape Turf" 3435 class="level-2 block"> 3436 <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> 3437 3438 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Landscape Turf</span></a> 3439 </li> 3440 3441 <li class="level-2 w-4/12 pr-6 pb-6"> 3442 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 3443 title="Pet Turf" 3444 class="level-2 block"> 3445 <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> 3446
3447 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Pet Turf</span></a> 3448 </li> 3449 3450 <li class="level-2 w-4/12 pr-6 pb-6"> 3451 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 3452 title="Golf & Putting Green Turf" 3453 class="level-2 block"> 3454 <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> 3455 3456 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Golf & Putting Green Turf</span></a> 3457 </li> 3458 3459 <li class="level-2 w-4/12 pr-6 pb-6"> 3460 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 3461 title="Turf Accessories" 3462 class="level-2 block"> 3463 <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> 3464 3465 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf Accessories</span></a> 3466 </li> 3467 3468 <li class="level-2 w-4/12 pr-6 pb-6"> 3469 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 3470 title="All Turf & Artificial Grass" 3471 class="level-2 block"> 3472 <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> 3473
3474 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Turf & Artificial Grass</span></a> 3475 </li> 3476 3477 3478 <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> 3479 3480 3481 </ul> 3482 </li> 3483 3484 3485 3486 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3487 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3488 > 3489 <a 3490 title="Carpet Tiles & Rolls" 3491 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3492 3493 > 3494 Carpet Tiles & Rolls 3495 <span class="inline items-center rotate-180 absolute"> 3496 <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"> 3497 <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"/> 3498<title>chevron-down</title></svg> 3499 </span> 3500 </a> 3501 3502 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3503 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Carpet Tiles & Rolls</span> 3504 3505 <li class="level-2 w-4/12 pr-6 pb-6"> 3506 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 3507 title="Carpet Tiles" 3508 class="level-2 block"> 3509 <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> 3510
3511 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Tiles</span></a> 3512 </li> 3513 3514 <li class="level-2 w-4/12 pr-6 pb-6"> 3515 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 3516 title="Carpet Rolls" 3517 class="level-2 block"> 3518 <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> 3519 3520 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Rolls</span></a> 3521 </li> 3522 3523 <li class="level-2 w-4/12 pr-6 pb-6"> 3524 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 3525 title="Home Theater Carpet" 3526 class="level-2 block"> 3527 <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> 3528 3529 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Home Theater Carpet</span></a> 3530 </li> 3531 3532 <li class="level-2 w-4/12 pr-6 pb-6"> 3533 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 3534 title="Peel and Stick Carpet Tiles" 3535 class="level-2 block"> 3536 <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> 3537
3538 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Peel and Stick Carpet Tiles</span></a> 3539 </li> 3540 3541 <li class="level-2 w-4/12 pr-6 pb-6"> 3542 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 3543 title="Outdoor Carpet" 3544 class="level-2 block"> 3545 <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> 3546 3547 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Carpet</span></a> 3548 </li> 3549 3550 <li class="level-2 w-4/12 pr-6 pb-6"> 3551 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 3552 title="Waterproof Carpet" 3553 class="level-2 block"> 3554 <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> 3555 3556 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Carpet</span></a> 3557 </li> 3558 3559 3560 <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> 3561 3562 3563 </ul> 3564 </li> 3565 3566 3567 3568 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3569 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3570 > 3571 <a 3572 title="Vinyl Flooring" 3573 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3574 3575 > 3576 Vinyl Flooring 3577 <sp
3577an class="inline items-center rotate-180 absolute"> 3578 <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"> 3579 <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"/> 3580<title>chevron-down</title></svg> 3581 </span> 3582 </a> 3583 3584 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3585 <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> 3586 3587 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3588 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Vinyl Flooring</span> 3589 3590 <li class="level-2 w-4/12 pr-6 pb-6"> 3591 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 3592 title="Vinyl Sheet Flooring" 3593 class="level-2 block"> 3594 <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> 3595 3596 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Sheet Flooring</span></a> 3597 </li> 3598 3599 <li class="level-2 w-4/12 pr-6 pb-6"> 3600 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 3601 title="Vinyl Tiles & Planks" 3602 class="level-2 block"> 3603 <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> 3604 3605 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Tiles & Planks</span></a> 3606 </li> 3607 3608 <li class="level-2 w-4/12 pr-6 pb-6"> 3609 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 3610 title="Waterproof Vinyl Flooring" 3611 class="level-2 block"> 3612 <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> 3613
3614 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Vinyl Flooring</span></a> 3615 </li> 3616 3617 <li class="level-2 w-4/12 pr-6 pb-6"> 3618 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 3619 title="Rigid Core Vinyl Flooring" 3620 class="level-2 block"> 3621 <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> 3622 3623 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rigid Core Vinyl Flooring</span></a> 3624 </li> 3625 3626 <li class="level-2 w-4/12 pr-6 pb-6"> 3627 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 3628 title="Commercial Vinyl Flooring" 3629 class="level-2 block"> 3630 <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> 3631 3632 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3633 </li> 3634 3635 3636 <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> 3637 3638 3639 </ul> 3640 </li> 3641 3642 3643 3644 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3645 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3646 > 3647 <a 3648 title="Wood & Laminate Flooring" 3649 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3650 3651 > 3652 Wood & Laminate Flooring 3653 <sp
3653an class="inline items-center rotate-180 absolute"> 3654 <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"> 3655 <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"/> 3656<title>chevron-down</title></svg> 3657 </span> 3658 </a> 3659 3660 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3661 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Wood & Laminate Flooring</span> 3662 3663 <li class="level-2 w-4/12 pr-6 pb-6"> 3664 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 3665 title="Waterproof Laminate Flooring" 3666 class="level-2 block"> 3667 <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> 3668 3669 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Laminate Flooring</span></a> 3670 </li> 3671 3672 <li class="level-2 w-4/12 pr-6 pb-6"> 3673 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 3674 title="Laminate Flooring" 3675 class="level-2 block"> 3676 <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> 3677 3678 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Laminate Flooring</span></a> 3679 </li> 3680 3681 <li class="level-2 w-4/12 pr-6 pb-6"> 3682 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 3683 title="Engineered Hardwood Flooring" 3684 class="level-2 block"> 3685 <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> 3686
3687 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Engineered Hardwood Flooring</span></a> 3688 </li> 3689 3690 <li class="level-2 w-4/12 pr-6 pb-6"> 3691 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 3692 title="Oak Wood Flooring" 3693 class="level-2 block"> 3694 <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> 3695 3696 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Oak Wood Flooring</span></a> 3697 </li> 3698 3699 <li class="level-2 w-4/12 pr-6 pb-6"> 3700 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 3701 title="Commercial Wood & Laminate" 3702 class="level-2 block"> 3703 <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> 3704 3705 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate</span></a> 3706 </li> 3707 3708 3709 <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> 3710 3711 3712 </ul> 3713 </li> 3714 3715 3716 3717 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3718 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3719 > 3720 <a 3721 title="Commercial Flooring" 3722 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3723 3724 > 3725 Commercial Flooring 3726 <sp
3726an class="inline items-center rotate-180 absolute"> 3727 <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"> 3728 <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"/> 3729<title>chevron-down</title></svg> 3730 </span> 3731 </a> 3732 3733 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3734 <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> 3735 3736 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3737 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Commercial Flooring</span> 3738 3739 <li class="level-2 w-4/12 pr-6 pb-6"> 3740 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 3741 title="Commercial Rubber Flooring" 3742 class="level-2 block"> 3743 <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> 3744 3745 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Rubber Flooring</span></a> 3746 </li> 3747 3748 <li class="level-2 w-4/12 pr-6 pb-6"> 3749 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 3750 title="Commercial Garage Flooring" 3751 class="level-2 block"> 3752 <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> 3753 3754 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Garage Flooring</span></a> 3755 </li> 3756 3757 <li class="level-2 w-4/12 pr-6 pb-6"> 3758 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 3759 title="Commercial Carpet Tiles" 3760 class="level-2 block"> 3761 <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> 3762
3763 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Carpet Tiles</span></a> 3764 </li> 3765 3766 <li class="level-2 w-4/12 pr-6 pb-6"> 3767 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 3768 title="Commercial Vinyl Flooring" 3769 class="level-2 block"> 3770 <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> 3771 3772 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3773 </li> 3774 3775 <li class="level-2 w-4/12 pr-6 pb-6"> 3776 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 3777 title="Commercial Wood & Laminate Flooring" 3778 class="level-2 block"> 3779 <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> 3780 3781 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate Flooring</span></a> 3782 </li> 3783 3784 <li class="level-2 w-4/12 pr-6 pb-6"> 3785 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 3786 title="Gym Floor Covers | Floor Protection" 3787 class="level-2 block"> 3788 <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> 3789
3790 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Floor Covers | Floor Protection</span></a> 3791 </li> 3792 3793 3794 <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> 3795 3796 3797 </ul> 3798 </li> 3799 3800 3801 3802 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3803 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3804 > 3805 <a 3806 title="Floors by Activity" 3807 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3808 3809 > 3810 Floors by Activity 3811 <span class="inline items-center rotate-180 absolute"> 3812 <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"> 3813 <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"/> 3814<title>chevron-down</title></svg> 3815 </span> 3816 </a> 3817 3818 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3819 <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> 3820 3821 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3822 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Activity</span> 3823 3824 <li class="level-2 w-4/12 pr-6 pb-6"> 3825 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 3826 title="Fitness Flooring" 3827 class="level-2 block"> 3828 <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> 3829 3830 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Fitness Flooring</span></a> 3831 </li> 3832 3833 <li class="level-2 w-4/12 pr-6 pb-6"> 3834 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 3835 title="Dance Flooring | Marley Floor" 3836 class="level-2 block"> 3837 <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> 3838 3839 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Flooring | Marley Floor</span></a> 3840 </li> 3841 3842 <li class="level-2 w-4/12 pr-6 pb-6"> 3843 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 3844 title="Sport & Court Flooring" 3845 class="level-2 block"> 3846 <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> 3847
3848 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Court Flooring</span></a> 3849 </li> 3850 3851 <li class="level-2 w-4/12 pr-6 pb-6"> 3852 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 3853 title="Martial Arts Mats " 3854 class="level-2 block"> 3855 <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> 3856 3857 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3858 </li> 3859 3860 <li class="level-2 w-4/12 pr-6 pb-6"> 3861 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 3862 title="Cheer Mats" 3863 class="level-2 block"> 3864 <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> 3865 3866 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Cheer Mats</span></a> 3867 </li> 3868 3869 <li class="level-2 w-4/12 pr-6 pb-6"> 3870 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 3871 title="Wrestling Mats" 3872 class="level-2 block"> 3873 <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> 3874
3875 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3876 </li> 3877 3878 3879 <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> 3880 3881 3882 </ul> 3883 </li> 3884 3885 3886 3887 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3888 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3889 > 3890 <a 3891 title="Floors by Space" 3892 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3893 3894 > 3895 Floors by Space 3896 <span class="inline items-center rotate-180 absolute"> 3897 <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"> 3898 <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"/> 3899<title>chevron-down</title></svg> 3900 </span> 3901 </a> 3902 3903 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3904 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Space</span> 3905 3906 <li class="level-2 w-4/12 pr-6 pb-6"> 3907 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 3908 title="Kitchen Flooring" 3909 class="level-2 block"> 3910 <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> 3911 3912 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kitchen Flooring</span></a> 3913 </li> 3914 3915 <li class="level-2 w-4/12 pr-6 pb-6"> 3916 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 3917 title="Bathroom Flooring" 3918 class="level-2 block"> 3919 <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> 3920
3921 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Bathroom Flooring</span></a> 3922 </li> 3923 3924 <li class="level-2 w-4/12 pr-6 pb-6"> 3925 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 3926 title="Commercial Flooring" 3927 class="level-2 block"> 3928 <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> 3929 3930 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Flooring</span></a> 3931 </li> 3932 3933 <li class="level-2 w-4/12 pr-6 pb-6"> 3934 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 3935 title="Gym Flooring" 3936 class="level-2 block"> 3937 <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> 3938 3939 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Flooring</span></a> 3940 </li> 3941 3942 <li class="level-2 w-4/12 pr-6 pb-6"> 3943 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 3944 title="Garage Flooring" 3945 class="level-2 block"> 3946 <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> 3947
3948 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring</span></a> 3949 </li> 3950 3951 <li class="level-2 w-4/12 pr-6 pb-6"> 3952 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 3953 title="Outdoor Flooring" 3954 class="level-2 block"> 3955 <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> 3956 3957 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Flooring</span></a> 3958 </li> 3959 3960 3961 <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> 3962 3963 3964 </ul> 3965 </li> 3966 3967 3968 3969 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3970 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3971 > 3972 <a 3973 title="Underlayment & Flooring Accessories" 3974 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3975 3976 > 3977 Underlayment & Flooring Accessories 3978 <span class="inline items-center rotate-180 absolute"> 3979 <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"> 3980 <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"/> 3981<title>chevron-down</title></svg> 3982 </span> 3983 </a> 3984 3985 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3986 <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> 3987 3988 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3989 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Underlayment & Flooring Accessories</span> 3990 3991 <li class="level-2 w-4/12 pr-6 pb-6"> 3992 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 3993 title="Flooring Adhesives & Glue" 3994 class="level-2 block"> 3995 <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> 3996 3997 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Adhesives & Glue</span></a> 3998 </li> 3999 4000 <li class="level-2 w-4/12 pr-6 pb-6"> 4001 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 4002 title="Floor and Mat Tape" 4003 class="level-2 block"> 4004 <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> 4005 4006 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor and Mat Tape</span></a> 4007 </li> 4008 4009 <li class="level-2 w-4/12 pr-6 pb-6"> 4010 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 4011 title="Installation Accessories" 4012 class="level-2 block"> 4013 <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> 4014
4015 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Installation Accessories</span></a> 4016 </li> 4017 4018 <li class="level-2 w-4/12 pr-6 pb-6"> 4019 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 4020 title="Floor Trims & Moldings" 4021 class="level-2 block"> 4022 <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> 4023 4024 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor Trims & Moldings</span></a> 4025 </li> 4026 4027 <li class="level-2 w-4/12 pr-6 pb-6"> 4028 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 4029 title="Flooring Underlayment" 4030 class="level-2 block"> 4031 <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> 4032 4033 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Underlayment</span></a> 4034 </li> 4035 4036 <li class="level-2 w-4/12 pr-6 pb-6"> 4037 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 4038 title="Flooring Cleaners" 4039 class="level-2 block"> 4040 <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> 4041
4042 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Cleaners</span></a> 4043 </li> 4044 4045 4046 <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> 4047 4048 4049 </ul> 4050 </li> 4051 4052 4053 4054 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 4055 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 4056 > 4057 <a 4058 title="Specials" 4059 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 4060 4061 > 4062 Specials 4063 <span class="inline items-center rotate-180 absolute"> 4064 <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"> 4065 <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"/> 4066<title>chevron-down</title></svg> 4067 </span> 4068 </a> 4069 4070 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 4071 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Specials</span> 4072 4073 <li class="level-2 w-4/12 pr-6 pb-6"> 4074 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 4075 title="Flooring Deals" 4076 class="level-2 block"> 4077 <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> 4078 4079 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Deals</span></a> 4080 </li> 4081 4082 <li class="level-2 w-4/12 pr-6 pb-6"> 4083 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 4084 title="American Made" 4085 class="level-2 block"> 4086 <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> 4087
4088 <span class="block text-sm font-medium no-underline text-darkblack pr-4">American Made</span></a> 4089 </li> 4090 4091 <li class="level-2 w-4/12 pr-6 pb-6"> 4092 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 4093 title="Quick Ship" 4094 class="level-2 block"> 4095 <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> 4096 4097 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Quick Ship</span></a> 4098 </li> 4099 4100 <li class="level-2 w-4/12 pr-6 pb-6"> 4101 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 4102 title="New Arrivals" 4103 class="level-2 block"> 4104 <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> 4105 4106 <span class="block text-sm font-medium no-underline text-darkblack pr-4">New Arrivals</span></a> 4107 </li> 4108 4109 4110 <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> 4111 4112 4113 </ul> 4114 </li> 4115 4116 4117 4118 4119 <!--<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>-->
4119 4120 4121 </ul> 4122 </div> 4123 4124 </div> 4125 </div> 4126 </template> 4127 </div> 4128 <div class="menu_static_links"> 4129 <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> 4130<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 4131<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 4132</ul></div></div></div> </div> 4133 </nav> 4134 </div> 4135 4136</div>
4137<script> 4138 'use strict'; 4139 4140 const initMenuDesktop_6ac1515521319 = () => { 4141 return { 4142 hoverTopPosition: '100%', 4143 setActiveMenu(menuNode) { 4144 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4145 return link.href === window.location.href.split('?')[0]; 4146 }).map(item => { 4147 if (!item.classList.contains('level-0')) { 4148 item.classList.add('underline'); 4149 } 4150 item.closest('div.level-0') && 4151 item.closest('div.level-0').classList.add('border-secondary'); 4152 }); 4153 } 4154 } 4155 } 4156</script>
vendor: 1 bytes, line 4156
4156
4157<script> 4158 // Function to remove 'display-first' class from other list items 4159 function removeDisplayFirst() { 4160 var listItems = document.querySelectorAll('.level1'); 4161 listItems.forEach(function(item) { 4162 if (item.id !== this.id) { 4163 item.classList.remove('display-first'); 4164 } 4165 }); 4166 } 4167</script>
4167 4168 <!--Search--> 4169 <div class="w-full" 4170 id="search-content" 4171 :class="{ 'block': searchOpen}" 4172 @click.outside="searchOpen = false" 4173 > 4174 4175<div class="py-0 px-0 pl-5 mx-auto text-black" x-data="initMirasvitSearch()" @click.away="closeSearch"> 4176 <form class="form minisearch relative" id="search_mini_form" action="https://www.flooringinc.com/catalogsearch/result/" method="get" autocomplete="off"> 4177 <label class="hidden" for="search" data-role="minisearch-label"> 4178 <span>Search</span> 4179 </label> 4180 <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 4181 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)"/> 4182 <button class="action search absolute">btn</button> 4183 </form> 4184 4185 <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="search_box transition appearance-none absolute"> 4186 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 4187 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 4188 x-show="isLoading" 4189 x-transition:enter="ease-out duration-200" 4190 x-transition:enter-start="opacity-0" 4191 x-transition:enter-end="opacity-100" 4192 x-transition:leave="ease-in duration-200" 4193 x-transition:leave-start="opacity-100" 4194 x-transition:leave-end="opacity-0"> 4195 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 4196<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 4197 <g fill="none" fill-rule="evenodd"> 4198 <g transform="translate(1 1)" stroke-width="2"> 4199 <circle cx="5" cy="50" r="5"> 4200 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 4201 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 4202 </circle> 4203 <circle cx="27" cy="5" r="5"> 4204 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 4205 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 4206 </circle> 4207 <circle cx="49" cy="50" r="5"> 4208 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 4209 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 4210 </circle> 4211 </g> 4212 </g> 4213<title>loader</title></svg> 4214 <div class="ml-10 text-primary text-xl"> 4215 Loading... </div> 4216</div> 4217 4218 <template x-if="hotSearch"> 4219 <div class="hotSearch"> 4220 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4221 Hot Searches </p> 4222 <div class="my-3 flex flex-wrap"> 4223 </div> 4224 </div> 4225 </template> 4226 4227 <template x-if="searchResults"> 4228 <div class="search_box_content w-full flex flex-wrap "> 4229 <div class="search_box_left relative"> 4230 <p class="product_title text-size20 font-medium text-black"> 4231 Top Results <template x-if="searchProducts != ''"> 4232 <small class="text-size16 font-medium text-black hidden">(<span x-html="searchProductsTotal"></span>)</small> 4233 </template> 4234 </p> 4235 <div class="viewAll absolute right-0"> 4236 <div> 4237 <a x-bind:href="numberResultsUrl"> 4238 <p class="text-size14 font-normal text-black underline number-results" x-html="numberResults"></p> 4239 </a> 4240 </div> 4241 </div> 4242 <div class="search_box_left_content lg:grid-cols-6"> 4243 <template x-for="item in searchProducts"> 4244 <div class="search_products flex"> 4245 <a x-bind:href="`${item.url}`" class=""> 4246 <div class="w-full product-image"> 4247 <img x-bind:src="`${item.imageUrl}`" width="275" height="182" class="w-full"/> 4248 </div> 4249 </a> 4250 <div class="w-full product-content"> 4251 <a x-bind:href="`${item.url}`" class=""><h4 class="product-name text-size14 font-medium text-black" x-html="item.name"></h4></a> 4252 <template x-if="item.rating > 0"> 4253 <div class="ratings flex item-center"> 4254 <div x-html="item.rating"></div>(<span x-html="item.reviews"></span>) 4255 </div> 4256 </template> 4257 <template x-if="item.orderFreeSample > 0"> 4258 <div x-cloak x-data="{showModal: false, htmlContent: '',pid: item.proId }"> 4259 <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> 4260 <div class="modal order-free-sample-popup z-50" x-show="showModal"> 4261 <div class="modal-overlay" x-on:click="showModal = false"></div> 4262 <button class="closemodal" type="button" x-on:click="showModal = false">Close X</button> 4263 <div class="modal-content"> 4264 <div x-html="htmlContent" :class="'htmlcontent' + item.proId"></div> 4265 </div> 4266 </div> 4267 </div> 4268 </template> 4269 <!-- <p class="mt-2 text-gray-600 text-xs truncate" x-html="item.description"></p> --> 4270 <template x-if="item.colorCount > 0"> 4271 <p class="text-size13 font-normal text-black truncate"> 4272 Available in <span x-html="item.colorCount"></span> colors 4273 </p> 4274 </template> 4275 <!--<div class="truncate-content"> 4276 <p class="text-size13 font-normal text-black truncate" x-html="item.dealOfTheMonth"></p> 4277 <p class="text-size13 font-normal text-black truncate" x-html="item.freeShipping"></p> 4278 <p class="text-size13 font-normal text-black truncate" x-html="item.shipNextDay"></p> 4279 </div>--> 4280 <div class="price_container flex item-center justify-between">
4281 <span class="text-size14 font-semibold text-black" x-html="item.price"></span> 4282 </div> 4283 </div> 4284 4285 </div> 4286 </template> 4287 <template x-if="searchProducts == ''"> 4288 <p>No results found.</p> 4289 </template> 4290 </div> 4291 </div> 4292 <div class="results-rightside"> 4293 <template x-if="searchCategories != ''"> 4294 <div class="mb-6 category-rest"> 4295 <p class="categorie-title text-size20 font-medium text-black pb-2"> 4296 In Categories <small class="text-size16 font-medium text-black hidden">(<span x-html="searchCategoriesTotal"></span>)</small> 4297 </p> 4298 <div class="catgry-list"> 4299 <template x-for="category in searchCategories"> 4300 <a x-bind:href="`${category.url}`"> 4301 <div class="text-size14 font-normal text-black"> 4302 <span class="text-size14 font-normal text-black cursor-pointer" x-html="category.name.split('>').pop().trim()"></span> 4303 </div> 4304 </a> 4305 </template> 4306 </div> 4307 </div> 4308 </template> 4309 4310 <!-- <template x-if="searchPages != ''"> 4311 <div class="mb-6"> 4312 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4313 Pages <small class="text-size16 font-medium text-black">(<span x-html="searchPagesTotal"></span>)</small> 4314 </p> 4315 <div class="px-2"> 4316 <template x-for="page in searchPages"> 4317 <a x-bind:href="`${page.url}`"> 4318 <div class="my-2 flex flex-wrap"> 4319 <span class="text-size14 font-normal text-black cursor-pointer" x-html="page.name"></span> 4320 </div> 4321 </a> 4322 </template> 4323 </div> 4324 </div> 4325 </template> --> 4326 4327 <template x-if="searchPosts != ''"> 4328 <div class="search_box_right"> 4329 <p class="blog-title text-size20 font-medium text-black"> 4330 In Blogs <!-- <small class="<//?= $titleNumberCSS ?>">(<span x-html="searchPostsTotal"></span>)</small> --> 4331 </p> 4332 <div class="search_box_right_content"> 4333 <template x-for="item in searchPosts"> 4334 <div> 4335 <a x-bind:href="`${item.url}`" class="blog-items block"> 4336 <div> 4337 <span class="blog-name text-size14 font-normal text-black" x-html="item.name"></span> 4338 </div> 4339 </a> 4340 <span class="item_description text-size14 font-normal text-black opacity-50 mb-4 block" x-html="item.description"></span> 4341 </div> 4342 </template> 4343 </div> 4344 </div> 4345 </template> 4346 </div> 4347 4348 </div> 4349 </template> 4350 4351 <template x-if="noResults"> 4352 <div class="p-2 text-size20 font-medium text-black overflow-hidden"> 4353 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl" x-html="noResultsText"></p> 4354 </div> 4355 </template> 4356 </div> 4357</div> 4358
4359<script> 4360 function initMirasvitSearch() { 4361 return { 4362 //initialize Variables 4363 hotSearch: false, 4364 searchResults: false, 4365 noResults: false, 4366 isLoading: false, 4367 isOpen: false, 4368 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"}, 4369 xhttp: false, 4370 noResultsText: '', 4371 numberResults: '', 4372 numberResultsUrl: '', 4373 searchProductsTotal: '', 4374 searchCategoriesTotal: '', 4375 searchPagesTotal: '', 4376 4377 searchProducts: [], 4378 searchCategories: [], 4379 searchPages: [], 4380 searchPosts: [], 4381 4382 searchMap: { 4383 'magento_cms_page': 'Pages', 4384 'magento_catalog_category': 'Categories', 4385 'magento_catalog_product': 'Products', 4386 'magefan_blog_post': 'Posts' 4387 }, 4388 4389 hotSearchClickEvent: function (ev) { 4390 var hotSearchClick = event.currentTarget.innerText; 4391 document.getElementById("search").value = hotSearchClick; 4392 4393 this.doSearch(hotSearchClick); 4394 }, 4395 4396 openSearch: function () { 4397 //this.isOpen = true; 4398 searchValue = document.getElementById("search").value.length; 4399 4400 if (searchValue >= this.blockConfig.minSearchLength) { 4401 this.hideHotSearch(); 4402 } else { 4403 this.showHotSearch(); 4404 this.hideSearchResults(); 4405 } 4406 }, 4407 4408 startSearch: function (e) { 4409 if (e) { 4410 //this.isOpen = true; 4411 } 4412 }, 4413 4414 getSearchresult: function () { 4415 this.isOpen = true; 4416 }, 4417 4418 closeSearch: function () { 4419 this.isOpen = false; 4420 }, 4421 4422 showHotSearch: function () { 4423 this.hotSearch = true; 4424 }, 4425 4426 hideHotSearch: function () { 4427 this.hotSearch = false; 4428 4429 }, 4430 4431 showSearchResults: function () { 4432 this.searchResults = true; 4433 // this.isOpen = true; 4434 }, 4435 4436 hideSearchResults: function () { 4437 this.searchResults = false; 4438 // this.isOpen = false; 4439 }, 4440 4441 showNoResults: function () { 4442 this.noResults = true; 4443 }, 4444 4445 hideNoResults: function () { 4446 this.noResults = false; 4447 }, 4448 4449 setNoResultsText(text) { 4450 if (!text) { 4451 return; 4452 } 4453 console.log(text); 4454 this.noResultsText = text; 4455 this.isOpen = true; 4456 }, 4457 4458 setNumberResults(text) { 4459 this.numberResults = text; 4460 }, 4461 4462 setNumberResultsUrl(text) { 4463 this.numberResultsUrl = text; 4464 }, 4465 4466 resetSearchData: function () { 4467 // Reinitialize Variables to avoid wrong search results. 4468 this.searchPages = []; 4469 this.searchPagesTotal = 0; 4470 this.searchCategories = []; 4471 this.searchCategoriesTotal = 0; 4472 this.searchProducts = []; 4473 this.searchProductsTotal = 0; 4474 }, 4475 4476 doSearch: function (query) { 4477 this.isOpen = false;
4478 var self = this; 4479 // Min search length 4480 if (query.length < this.blockConfig.minSearchLength) { 4481 this.showHotSearch(); 4482 this.isLoading = false; 4483 this.hideSearchResults(); 4484 this.hideNoResults(); 4485 4486 return; 4487 } else { 4488 this.hideHotSearch(); 4489 this.isLoading = true; 4490 this.showSearchResults(); 4491 this.hideNoResults(); 4492 } 4493 4494 // AJAX for searchautocomplete/ajax/suggest/ 4495 if (this.xhttp) { 4496 try { 4497 this.xhttp.abort(); 4498 } catch { 4499 4500 } 4501 } 4502 this.xhttp = new XMLHttpRequest(); 4503 var xhttp = this.xhttp; 4504 4505 var queryEncoded = encodeURIComponent(query); 4506 var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; 4507 4508 xhttp.open("GET", url, true); 4509 xhttp.setRequestHeader("Content-Type", "application/json"); 4510 4511 xhttp.onreadystatechange = function () { 4512 if (this.readyState === 4 && this.status === 200) { 4513 4514 4515 // Response from ajax call in JSON. 4516 var response = JSON.parse(this.responseText); 4517 console.log(response); 4518 self.resetSearchData(); 4519 4520 // Product Search Results 4521 for (index in response.indexes) { 4522 4523 if (response.indexes[index].items.length > 0) { 4524 self.getSearchresult(); 4525 var res = response.indexes[index]; 4526 var map = null; 4527 4528 if (self.searchMap[res.identifier]) { 4529 map = self.searchMap[res.identifier]; 4530 self['search' + map] = res.items; 4531 self['search' + map + 'Total'] = res.totalItems; 4532 } 4533 } 4534 } 4535 4536 // Extract totalItems from response.textAll and format if > 999 4537 let textAll = response.textAll; 4538 if (response.textAll) { 4539 // Remove the â symbol (or any trailing characters you'd like to remove) 4540 textAll = textAll.replace(/â$/, '').trim(); 4541 // Find number within textAll using regex 4542 let totalItemsMatch = textAll.match(/\d+/); // Extracts the first number found 4543 if (totalItemsMatch) { 4544 let totalItemsFromTextAll = parseInt(totalItemsMatch[0], 10); 4545 if (totalItemsFromTextAll > 999) { 4546 // Format with comma if > 999 4547 textAll = textAll.replace(totalItemsMatch[0], totalItemsFromTextAll.toLocaleString()); 4548 } 4549 } 4550 console.log("Formatted textAll:", textAll); 4551 self.setNumberResults(textAll); // Update the UI with the formatted textAll 4552 } 4553 4554 self.isLoading = false; 4555 self.hideNoResults(); 4556 self.setNumberResults(textAll); 4557 self.setNumberResultsUrl(response.urlAll); 4558 4559 if (response.noResults) {console.log(response.textEmpty); 4560 self.showNoResults(); 4561 self.setNoResultsText(response.textEmpty); 4562 self.hideSearchResults(); 4563 4564 } 4565 }else{ 4566 this.isOpen = false; 4567 } 4568 }; 4569 4570 xhttp.send(); 4571 } 4572 } 4573 } 4574</script>
4574 </div> 4575 4576 <div class="flex items-center order-3"> 4577 <!--Compare Icon--> 4578 <a id="compare-link" 4579 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black" 4580 :class="{ 'invisible': !(itemCount > 0) }" 4581 href="https://www.flooringinc.com/catalog/product_compare/index/" 4582 title="Compare Products" 4583 x-data="initCompareHeader()" 4584 @private-content-loaded.window="receiveCompareData($event.detail.data)" 4585 > 4586 <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"> 4587 <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"/> 4588<title>scale</title></svg> 4589 4590 <span class="sr-only label"> 4591 Compare Products </span> 4592 4593 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4594 leading-none text-center text-white uppercase transform -translate-x-1 4595 translate-y-1/2 bg-yellow-500 rounded-full" 4596 > 4597 <span x-text="itemCount"></span> 4598 <span x-show="itemCount === 1" class="sr-only"> 4599 item </span> 4600 <span x-show="itemCount > 1" class="sr-only"> 4601 items </span> 4602 </span> 4603 </a> 4604 4605 <!--Search Icon--> 4606 <button id="menu-search-icon" 4607 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black hidden" 4608 @click.prevent=" 4609 searchOpen = !searchOpen; 4610 $nextTick(function () { document.querySelector('#search').select(); }); 4611 " 4612 > 4613 <span class="sr-only label"> 4614 Search </span> 4615 4616 <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"> 4617 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 4618<title>search</title></svg> 4619 </button> 4620 4621 <!--Customer Icon & Dropdown--> 4622
4622<script> 4623"use strict"; 4624 4625function initComponent() { 4626 return { 4627 cart: false, 4628 customer: false, 4629 receiveCustomerData(data) { 4630 if (data.cart) { 4631 this.cart = data.cart; 4632 } 4633 if (data.customer) { 4634 this.customer = data.customer; 4635 } 4636 } 4637 } 4638} 4639</script>
4639 4640 4641 4642<div x-data="{ open: false }" class="relative inline-block acc-dropdown"> 4643 <div class="arrow-cus"> 4644 <a 4645 href="https://www.flooringinc.com/customer/account/" 4646 id="customer-menu" 4647 class="block hover:text-black " 4648 @click.prevent="$dispatch('popup-register', 4649 { open: true,openRegister : false,openLogin : true,openCreate :true, 4650 openButtonLogin :true, 4651 openButtonRegister :false, 4652 })" 4653 :aria-expanded="open ? 'true' : 'false'" 4654 aria-label="My Account" 4655 > 4656 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" 4657 class="w-8 h-8 md:h-6 md:w-6" aria-hidden="true"> 4658 <circle fill="none" cx="12" cy="7" r="3"></circle> 4659 <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 4660 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 4661 0-7 3.141-7 7v1h2v-1c0-2.757 2.243-5 5-5h4c2.757 0 5 2.243 5 5v1H21z"> 4662 </path> 4663 </svg> 4664 4665 </a> 4666 </div> 4667 <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 4668 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter" 4669 :class="{ 'hidden' : !open }" 4670 @click.outside="open = false" 4671 x-cloak x-show="open" 4672 aria-labelledby="customer-menu" 4673 > 4674 4675<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4676 onclick="hyva.setCookie && hyva.setCookie( 4677 'login_redirect', 4678 window.location.href, 4679 1 4680 )" 4681 href="https://www.flooringinc.com/customer/account/index/"> 4682 Sign In </a> 4683<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4684 href="https://www.flooringinc.com/customer/account/create/" 4685 title="" 4686 > 4687 Create an Account </a> 4688 </nav> 4689</div> 4690 <!--Quote Cart Icon (show when activeCartType is 'quote' and quote has items)--> 4691 <template x-if="activeCartType === 'quote' && quoteCart.summary_count"> 4692 <a id="menu-cart-quote-icon" 4693 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black pl-3" 4694 :class="{ 4695 'hidden': !(activeCartType === 'quote' && quoteCart.summary_count), 4696 'block': activeCartType === 'quote' && quoteCart.summary_count }" 4697 href="https://www.flooringinc.com/amasty_quote/cart/" 4698 > 4699 <span class="checkout-icon"> 4700 <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"> 4701 <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"/> 4702<title>shopping-cart</title></svg> 4703 </span> 4704 <span x-text="quoteCart.summary_count" 4705 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4706 leading-none text-center text-white uppercase transform -translate-x-1 4707 translate-y-1/2 rounded-full bg-primary" 4708 :class="{ 4709 'hidden': !quoteCart.summary_count, 4710 'block': quoteCart.summary_count }" 4711 ></span> 4712 </a> 4713 </template> 4714 <!--Regular Cart Icon (show when activeCartType is 'cart' or when quote mode but quote empty - always show an icon)-->
4714 4715 <a id="menu-cart-icon" 4716 x-show="activeCartType === 'cart' || (activeCartType === 'quote' && !quoteCart.summary_count)" 4717 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block ml-6 no-underline hover:text-black" 4718 href="https://www.flooringinc.com/checkout/cart/index/" 4719 > 4720 <span class="sr-only label"> 4721 Cart </span> 4722 4723 <span class="cart-icon"> 4724 <img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/cart-icon.svg" alt="cart-icon" width="24" height="24"> 4725 <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> 4726 </span> 4727 4728 <span x-text="cart.summary_count" 4729 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4730 leading-none text-center text-white uppercase transform -translate-x-1 4731 translate-y-1/2 rounded-full bg-primary" 4732 :class="{ 4733 'hidden': !cart.summary_count, 4734 'block': cart.summary_count }" 4735 ></span> 4736 </a> 4737 4738 </div> 4739 </div> 4740
4741 <!--Cart Drawer--> 4742
4742<script> 4743 function initCartDrawer() { 4744 return { 4745 open: false, 4746 isLoading: false, 4747 cart: {}, 4748 maxItemsToDisplay: 10, 4749 itemsCount: 0, 4750 totalCartAmount: 0, 4751 getData(data) { 4752 if (data.cart) { 4753 this.cart = data.cart; 4754 this.itemsCount = data.cart.items && data.cart.items.length || 0; 4755 this.totalCartAmount = this.cart.summary_count; 4756 //this.cart.summary_count = this.itemsCount; 4757 this.setCartItems(); 4758 } 4759 this.isLoading = false; 4760 }, 4761 cartItems: [], 4762 getItemCountTitle() { 4763 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.totalCartAmount) 4764 }, 4765 setCartItems() { 4766 if(this.cart.items){ 4767 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 4768 } else { 4769 this.cartItems = []; 4770 } 4771 if (this.maxItemsToDisplay > 0) { 4772 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 4773 } 4774 getCustomerData(['customer'], function(data) { 4775 if(data.messages.messages[0]){ 4776 var messagesType = data.messages.messages[0].type; 4777 var messagesText = data.messages.messages[0].text; 4778 if(messagesType === "success"){ 4779 dispatchMessages([ 4780 { 4781 type: messagesType, 4782 text: messagesText 4783 } 4784 ]); 4785 this.openCartDrawer(); 4786 } else { 4787 dispatchMessages([ 4788 { 4789 type: messagesType, 4790 text: messagesText 4791 } 4792 ]); 4793 } 4794 } 4795 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 4796 }); 4797 4798 if(document.querySelectorAll('.btn_cart')) { 4799 var addtocartnew = document.querySelectorAll('.btn_cart'); 4800 4801 addtocartnew.forEach(addtocartnew => { 4802 addtocartnew.addEventListener('click', () => { 4803 setTimeout(() => { 4804 }, 2500); 4805 }); 4806 }); 4807 } 4808 if(document.getElementById('product-addtocart-button')) { 4809 var addtocartnew2 = document.getElementById('product-addtocart-button'); 4810 4811 addtocartnew2.addEventListener('click', () => { 4812 setTimeout(() => { 4813 }, 2500); 4814 }); 4815 } 4816 4817 4818 }, 4819 deleteItemFromCart(itemId) { 4820 this.isLoading = true; 4821 4822 const formKey = hyva.getFormKey(); 4823 const postUrl = BASE_URL + 'amasty_quote/quote/removeFromMinicart'; 4824 fetch(postUrl, { 4825 "headers": { 4826 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4827 }, 4828 "body": "form_key=" + formKey + "&item_id=" + itemId, 4829 "method": "POST", 4830 "mode": "cors", 4831 "credentials": "include" 4832 }).then(response => { 4833 window.location.href = window.location.pathname; // Reload the page after item remove 4834 if (response.redirected) { 4835 window.location.href = response.url; 4836 } else if (response.ok) { 4837 return response.json(); 4838 } else { 4839 window.dispatchMessages && window.dispatchMessages([{ 4840 type: 'warning',
4841 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 4842 }]); 4843 this.isLoading = false; 4844 } 4845 }).then(result => { 4846 window.dispatchMessages && window.dispatchMessages([{ 4847 type: result.success ? 'success' : 'error', 4848 text: result.success 4849 ? 'You\u0020removed\u0020the\u0020item.' 4850 : result.error_message 4851 }], result.success ? 5000 : 0) 4852 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4853 }); 4854 }, 4855 toggleCartDrawer(event) { 4856 if (event.detail && event.detail.isOpen !== undefined) { 4857 if (event.detail.isOpen) { 4858 this.openCartDrawer() 4859 } else { 4860 this.open = false 4861 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 4862 } 4863 } else { 4864 this.openCartDrawer() 4865 } 4866 }, 4867 openCartDrawer() { 4868 this.open = true; 4869 this.$nextTick(() => { 4870 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 4871 }) 4872 }, 4873 closeCartDrawer() { 4874 this.$dispatch('toggle-cart', { isOpen: false }) 4875 } 4876 } 4877 } 4878 function getCustomerData(sections, callback) { 4879 fetch('/customer/section/load/?sections=') 4880 .then(response => response.json()) 4881 .then(data => callback(data)) 4882 .catch(error => console.error('Error fetching customer data:', error)); 4883 } 4884</script>
4884 4885<section x-cloak 4886 x-show="cart" 4887 id="cart-drawer" 4888 x-data="initCartDrawer()" 4889 @private-content-loaded.window="getData($event.detail.data)" 4890 @toggle-cart.window="toggleCartDrawer($event)" 4891 @keydown.window.escape="closeCartDrawer" 4892> 4893 <div role="dialog" 4894 aria-labelledby="cart-drawer-title" 4895 aria-modal="true" 4896 @click.outside="open=false" 4897 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4898 <div class="backdrop" 4899 x-show="open" 4900 x-transition:enter="ease-in-out duration-500" 4901 x-transition:enter-start="opacity-0" 4902 x-transition:enter-end="opacity-100" 4903 x-transition:leave="ease-in-out duration-500" 4904 x-transition:leave-start="opacity-100" 4905 x-transition:leave-end="opacity-0" 4906 role="button" 4907 @click="closeCartDrawer" 4908 aria-label="Close minicart"></div> 4909 <div class="relative w-screen max-w-md shadow-2xl" 4910 x-show="open" 4911 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4912 x-transition:enter-start="translate-x-full" 4913 x-transition:enter-end="translate-x-0" 4914 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4915 x-transition:leave-start="translate-x-0" 4916 x-transition:leave-end="translate-x-full" 4917 > 4918 <div 4919 x-show="open" 4920 x-transition:enter="ease-in-out duration-500" 4921 x-transition:enter-start="opacity-0" 4922 x-transition:enter-end="opacity-100" 4923 x-transition:leave="ease-in-out duration-500" 4924 x-transition:leave-start="opacity-100" 4925 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex pr-6 pt-19"> 4926 <button @click="open=false" aria-label="Close panel" 4927 class="p-0 text-black transition duration-150 ease-in-out hover:text-black"> 4928 <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"> 4929 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4930<title>x</title></svg> 4931 </button> 4932 </div> 4933 <div class="flex flex-col h-full bg-lightblue"> 4934 4935 <header class="px-4 pt-19 pb-6"> 4936 <h2 id="cart-drawer-title" class="text-size18 font-medium text-black"> 4937 <template x-if="!itemsCount"> 4938 <div>My Cart</div></template> 4939<template x-if="itemsCount"> 4940 <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> 4941</template> 4942 <span class="items-total text-xs text-black" 4943 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 4944 x-text="getItemCountTitle()"> 4945 </span> 4946 </h2> 4947 </header> 4948 4949 4950<template x-if="!itemsCount"> 4951 <div class="relative px-4 py-6 border-bs sm:px-6 border-container"> 4952 Cart is empty </div> 4953 </template> 4954 <div class="relative grid overflow-y-auto overflow-x-hidden bg-lightblue cart-items"> 4955 <template x-for="item in cartItems"> 4956 <div class="flex items-start cart-item px-4 pt-5 pb-6 transition duration-150 4957 ease-in-out"> 4958 <template x-if="!item.product_has_url"> 4959 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4960 <img 4961 :src="item.product_image.src" 4962 :width="item.product_image.width" 4963 :height="item.product_image.height" 4964 loading="lazy" 4965 /> 4966 </a> 4967 </template> 4968 <template x-if="item.product_has_url == 1"> 4969 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4970 <img 4971 :src="item.product_image.src" 4972 :width="item.product_image.width" 4973 :height="item.product_image.height" 4974 loading="lazy" 4975 /> 4976 </a> 4977 </template> 4978 <div class="w-3/4"> 4979 <div> 4980 <template x-if="!item.product_has_url"> 4981 <a :href="item.product_url" class="prosku"> 4982 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4983 </a> 4984 </template> 4985 <template x-if="item.product_has_url == 1"> 4986 <a :href="item.product_url" class="prosku"> 4987 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4988 </a> 4989 </template> 4990 </div> 4991 <template x-for="option in item.options"> 4992 <div class="flex pt-2 pb-1 item-options w-full" 4993 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)"> 4994 <div class="flex w-full"> 4995 <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> 4996 <template x-if="!item.product_has_url"> 4997 <a :href="item.product_url" 4998 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 4999 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5000 </template> 5001 <template x-if="item.product_has_url == 1"> 5002 <a :href="item.product_url" 5003 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 5004 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5005 </template> 5006 </div> 5007 </div> 5008 </template> 5009 <p class="pb-4 pt-1"><span x-html="item.product_price" class="text-size20 font-bold text-custom-blue pricebox"></span></p> 5010 <div class="text-xl flex qty-fields items-center"> 5011 <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> 5012 <div class="ml-auto"> 5013 <button 5014 @click="deleteItemFromCart(item.item_id)" 5015 > 5016 <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> 5017 </button> 5018 </div> 5019 </div> 5020 5021 </div> 5022 </div> 5023 </template> 5024 </div> 5025<template x-if="itemsCount"> 5026 5027 <div class="relative bg-lightblue grid pt-3 pb-4"> 5028 <div class="w-full transition duration-150 ease-in-out sub-total"> 5029 <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> 5030 </div> 5031 5032 <div class="w-full transition duration-150 ease-in-out 5033 chekout-btn"> 5034 <a href="https://www.flooringinc.com/checkout/cart/" 5035 class="no-underline block relative font-medium text-size16 text-custom-white bg-custom-blue"> 5036 Proceed to Cart </a> 5037 </div> 5038 </div> 5039</template> 5040 </div> 5041 </div> 5042 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 5043 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 5044 x-show="isLoading" 5045 x-transition:enter="ease-out duration-200" 5046 x-transition:enter-start="opacity-0" 5047 x-transition:enter-end="opacity-100" 5048 x-transition:leave="ease-in duration-200" 5049 x-transition:leave-start="opacity-100" 5050 x-transition:leave-end="opacity-0"> 5051 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 5052<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 5053 <g fill="none" fill-rule="evenodd"> 5054 <g transform="translate(1 1)" stroke-width="2"> 5055 <circle cx="5" cy="50" r="5">
5056 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 5057 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 5058 </circle> 5059 <circle cx="27" cy="5" r="5"> 5060 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 5061 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 5062 </circle> 5063 <circle cx="49" cy="50" r="5"> 5064 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 5065 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 5066 </circle> 5067 </g> 5068 </g> 5069<title>loader</title></svg> 5070 <div class="ml-10 text-primary text-xl"> 5071 Loading... </div> 5072</div> 5073 </div> 5074 </template> 5075</section> 5076 5077 <!--Authentication Pop-Up--> 5078
5078<script> 5079 function initAuthentication() { 5080 return { 5081 open: false, 5082 forceAuthentication: false, 5083 checkoutUrl: 'https://www.flooringinc.com/checkout/index/', 5084 errors: 0, 5085 hasCaptchaToken: 0, 5086 displayErrorMessage: false, 5087 errorMessages: [], 5088 setErrorMessages: function setErrorMessages(messages) { 5089 this.errorMessages = [messages]; 5090 this.displayErrorMessage = this.errorMessages.length; 5091 }, 5092 submitForm: function () { 5093 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5094 const $form = document.querySelector('#login-form-new'); 5095 5096 if (this.errors === 0) { 5097 this.dispatchLoginRequest($form); 5098 } 5099 }, 5100 onPrivateContentLoaded: function (data) { 5101 const isLoggedIn = data.customer && data.customer.firstname; 5102 if (data.cart && !isLoggedIn) { 5103 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 5104 } 5105 }, 5106 redirectIfAuthenticated: function (event) { 5107 if (event.detail && event.detail.url) { 5108 this.checkoutUrl = event.detail.url; 5109 } 5110 if (!this.forceAuthentication) { 5111 window.location.href = this.checkoutUrl; 5112 } 5113 }, 5114 dispatchLoginRequest: function(form) { 5115 this.isLoading = true; 5116 const username = this.$refs['customer-email'].value; 5117 const password = this.$refs['customer-password'].value; 5118 const formKey = hyva.getFormKey(); 5119 const bodyFields = { 5120 'username': username, 5121 'password': password, 5122 'formKey': formKey 5123 }; 5124 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 5125 const recaptchaField = fieldName && form[fieldName]; 5126 if (recaptchaField) { 5127 bodyFields[fieldName] = recaptchaField.value; 5128 } 5129 fetch('https://www.flooringinc.com/customer/ajax/login/', { 5130 method: 'POST', 5131 headers: { 5132 'Content-Type': 'application/json', 5133 'X-Requested-With': 'XMLHttpRequest' 5134 }, 5135 body: JSON.stringify(bodyFields) 5136 } 5137 ).then(response => { 5138 return response.json() 5139 } 5140 ).then(data=> { 5141 this.isLoading = false; 5142 if (data.errors) { 5143 dispatchMessages([{ 5144 type: 'error', 5145 text: data.message 5146 }], 5000); 5147 this.errors = 1; 5148 this.hasCaptchaToken = 0; 5149 } else { 5150 window.location.href = this.checkoutUrl; 5151 } 5152 }); 5153 } 5154 } 5155 } 5156</script>
5156 5157<section id="authentication-popup" 5158 x-data="initAuthentication()" 5159 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 5160 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 5161 @keydown.window.escape="open = false" 5162> 5163 <div role="dialog" 5164 aria-modal="true" 5165 @click.outside="open = false" 5166 class="inset-y-0 right-0 z-30 flex max-w-full" 5167 :class="{'fixed': open }" x-cloak x-show="open" 5168 > 5169 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 5170 x-show="open" 5171 x-cloak="" 5172 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5173 x-transition:enter-start="translate-x-full" 5174 x-transition:enter-end="translate-x-0" 5175 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5176 x-transition:leave-start="translate-x-0" 5177 x-transition:leave-end="translate-x-full" 5178 > 5179 <div 5180 x-show="open" 5181 x-cloak="" 5182 x-transition:enter="ease-in-out duration-500" 5183 x-transition:enter-start="opacity-0" 5184 x-transition:enter-end="opacity-100" 5185 x-transition:leave="ease-in-out duration-500" 5186 x-transition:leave-start="opacity-100" 5187 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> 5188 <button @click="open = false;" aria-label="Close panel" 5189 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5190 <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"> 5191 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5192<title>x</title></svg> 5193 </button> 5194 </div> 5195 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 5196 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 5197 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 5198 <strong class="font-medium">Checkout using your account</strong> 5199 </p> 5200 5201 <form class="form form-login" 5202 method="post" 5203 @submit.prevent="submitForm();" 5204 id="login-form-new" 5205 > 5206 <div class="fieldset login"> 5207 <div class="field email required"> 5208 <label class="label" for="form-login-username" form="login-form" > 5209 <span>Email Address</span> 5210 </label> 5211 <div class="control"> 5212 <input name="username" 5213 id="form-login-username" 5214 x-ref="customer-email" 5215 @change="errors = 0" 5216 type="email" 5217 required 5218 class="form-input input-text" 5219 > 5220 </div> 5221 </div> 5222 <div class="field password required"> 5223 <label for="form-login-password" class="label" form="login-form"> 5224 <span>Password</span> 5225 </label> 5226 <div class="control"> 5227 <input name="password" 5228 id="form-login-password" 5229 type="password" 5230 class="form-input input-text" 5231 required 5232 x-ref="customer-password" 5233 @change="errors = 0" 5234 > 5235 </div> 5236 </div> 5237 5238 <input name="context" type="hidden" value="checkout" /> 5239 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 5240 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 5241 > 5242 Sign In </button> 5243 <a href="https://www.flooringinc.com/customer/account/forgotpassword/" 5244 > 5245 Forgot Your Password? </a> 5246 </div> 5247 5248 </div> 5249 </form> 5250 </div> 5251 <div class="mx-4"> 5252 </div> 5253 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
5254 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 5255 <strong class="font-medium">Checkout as a new customer</strong> 5256 </p> 5257 5258 <div class="block-content"> 5259 <p class="mb-1"> 5260 Creating an account has many benefits: </p> 5261 <ul class="list-disc pl-5"> 5262 <li> See order and shipping status</li> 5263 <li> Track order history</li> 5264 <li> Check out faster</li> 5265 </ul> 5266 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 5267 <a href="https://www.flooringinc.com/customer/account/create/" 5268 class="inline-flex btn btn-primary"> 5269 Create an Account </a> 5270 </div> 5271 </div> 5272 </div> 5273 </div> 5274 </div> 5275 </div> 5276</section> 5277 5278 <!--Cart Quote Drawer--> 5279
5279<script> 5280 function initQuoteCartDrawer() { 5281 return { 5282 open: false, 5283 cartData: {}, 5284 getQuoteCartData(data) { 5285 if (data.quotecart) { 5286 this.cartData = data.quotecart 5287 this.setCartItems(); 5288 } 5289 }, 5290 cartItems: [], 5291 setCartItems() { 5292 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 5293 }, 5294 deleteItemFromCart(itemId) { 5295 var formKey = document.querySelector('input[name=form_key]').value; 5296 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 5297 "headers": { 5298 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5299 }, 5300 "body": "form_key="+ formKey + "&item_id="+itemId, 5301 "method": "POST", 5302 "mode": "cors", 5303 "credentials": "include" 5304 }).then(function (response) { 5305 if (response.redirected) { 5306 window.location.href = response.url; 5307 } else if (response.ok) { 5308 return response.json(); 5309 } else { 5310 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5311 [{ 5312 type: "warning", 5313 text: "Could not remove item from quote." 5314 }], 5000 5315 ); 5316 } 5317 }).then(function (response) { 5318 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5319 [{ 5320 type: response.success ? "success" : "error", 5321 text: response.success 5322 ? "You removed the item." 5323 : response.error_message 5324 }], 5000 5325 ); 5326 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5327 window.dispatchEvent(reloadCustomerDataEvent); 5328 }); 5329 } 5330 } 5331 } 5332</script>
5332 5333<section id="cart-quote-drawer" 5334 x-data="initQuoteCartDrawer()" 5335 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 5336 @toggle-quote-cart.window="open=true;" 5337 @keydown.window.escape="open=false" 5338> 5339 <template x-if="cartData && cartData.summary_count"> 5340 <div role="dialog" 5341 aria-labelledby="cart-drawer-title" 5342 aria-modal="true" 5343 @click.away="open = false" 5344 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 5345 <div class="backdrop" 5346 x-show="open" 5347 x-transition:enter="ease-in-out duration-500" 5348 x-transition:enter-start="opacity-0" 5349 x-transition:enter-end="opacity-100" 5350 x-transition:leave="ease-in-out duration-500" 5351 x-transition:leave-start="opacity-100" 5352 x-transition:leave-end="opacity-0" 5353 @click="open = false" 5354 aria-label="Close panel"></div> 5355 <div class="relative w-screen max-w-md shadow-2xl" 5356 x-show="open" 5357 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5358 x-transition:enter-start="translate-x-full" 5359 x-transition:enter-end="translate-x-0" 5360 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5361 x-transition:leave-start="translate-x-0" 5362 x-transition:leave-end="translate-x-full" 5363 > 5364 <div 5365 x-show="open" 5366 x-transition:enter="ease-in-out duration-500" 5367 x-transition:enter-start="opacity-0" 5368 x-transition:enter-end="opacity-100" 5369 x-transition:leave="ease-in-out duration-500" 5370 x-transition:leave-start="opacity-100" 5371 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 5372 <button @click="open = false" aria-label="Close panel" 5373 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5374 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 5375 <path stroke-linecap="round" stroke-linejoin="round" 5376 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 5377 </path> 5378 </svg> 5379 </button> 5380 </div> 5381 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 5382 <header class="px-4 sm:px-6"> 5383 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 5384 My Quote Cart </div> 5385 </header> 5386 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 5387 sm:gap-8 sm:px-6 border-container"> 5388 <template x-for="item in cartItems"> 5389 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 5390 ease-in-out rounded-lg hover:bg-gray-100"> 5391 <a :href="item.product_url" class="w-1/4"> 5392 <img 5393 :src="item.product_image.src" 5394 :width="item.product_image.width" 5395 :height="item.product_image.height" 5396 loading="lazy" 5397 /> 5398 </a> 5399 <div class="w-3/4 relative"> 5400 <div> 5401 <div class="text-xl"> 5402 <a :href="item.product_url" class="hover:underline"> 5403 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 5404 </a> 5405 </div> 5406 <div class="text-sm"><span x-html="item.product_sku"></div> 5407 </div> 5408 <template x-for="option in item.options"> 5409 <div class="pt-2"> 5410 <p class="font-semibold" x-text="option.label + ':'"></p> 5411 <p class="text-secondary" x-html="option.value"></p> 5412 </div> 5413 </template> 5414 <div><span x-html="item.product_price"></span></div> 5415 <div class="pt-4"> 5416 <a :href="item.configure_url" 5417 x-show="item.product_type !== 'grouped'" 5418 class="inline-flex p-2 mr-2 btn btn-primary"> 5419 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5420 size="16" class="w-5 h-5"> 5421 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5422 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 5423 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 5424 </path> 5425 </svg> 5426 </a> 5427 <button class="inline-flex p-2 btn btn-primary" 5428 @click="deleteItemFromCart(item.item_id)" 5429 > 5430 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5431 size="16" class="w-5 h-5"> 5432 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5433 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 5434 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 5435 0 00-1 1v3M4 7h16"> 5436 </path> 5437 </svg> 5438 </button> 5439 </div> 5440 </div> 5441 </div> 5442 </template> 5443 </div> 5444 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 5445 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 5446 hover:bg-gray-100">
5447 <span>Cart Subtotal:</span> 5448 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 5449 </div> 5450 <div class="w-full"> 5451 <a href="https://www.flooringinc.com/amasty_quote/cart/" 5452 class="btn btn-secondary justify-center"> 5453 View and Edit Cart </a> 5454 </div> 5455 </div> 5456 </div> 5457 </div> 5458 </div> 5459 </template> 5460</section> 5461 5462</div> 5463 5464<div x-data="initKlaviyoCustomerTracking()" 5465 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 5466
5466<script> 5467 function initKlaviyoCustomerTracking() { 5468 return { 5469 sendCustomerDataToKlaviyo(data) { 5470 window.addEventListener('init-external-scripts', () => { 5471 const _learnq = window._learnq || []; 5472 const customer = data.customer; 5473 var resource = document.createElement('script'); 5474 resource.async = "true"; 5475 resource.src = "https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg"; 5476 var script = document.getElementsByTagName('script')[0]; 5477 script.parentNode.insertBefore(resource, script); 5478 5479 if (customer && customer.email) { 5480 script.addEventListener('load', function() { 5481 _learnq.push(['identify', { 5482 $email: customer.email, 5483 $first_name: customer.firstname ? customer.firstname : '', 5484 $last_name: customer.lastname ? customer.lastname : '' 5485 }]); 5486 }); 5487 } 5488 }, {once: true, passive: true}); 5489 } 5490 } 5491 } 5492 </script>
5492 5493<a class="action skip sr-only contentarea" 5494 href="#contentarea"> 5495 <span> 5496 Skip to Content </span> 5497</a> 5498<div class="widget block block-static-block"> 5499 <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]"> 5500 <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> 5501<p style="font-size: medium;">ð Game Day Ready - Save Up to 35% Off - Sale Ends Sunday 10/4 </p> 5502 5503</center> 5504</div></div></div></div></div></div> 5505</header><div class="top-container"><nav class="breadcrumbs order-2 w-full" aria-label="Breadcrumb"> 5506 <div class="breadcrumbs-in py-8"> 5507 <ol class="items list-reset rounded flex flex-wrap text-grey text-sm"> 5508 <li class="item flex home"> 5509 <a href="https://www.flooringinc.com/" 5510 class="no-underline text-sm font-normal" 5511 title="Go to Home Page" 5512 >Home</a> 5513 </li> 5514 <li class="item flex blog"> 5515 <span aria-hidden="true" class="separator text-primary-lighter px-2 text-sm font-normal">/</span> 5516 <a href="" 5517 class="text-sm font-semibold current" 5518 aria-current="page" 5519 >Flooring Articles</a> 5520 </li> 5521 </ol> 5522 </div> 5523</nav> 5524</div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 5525<div class="page messages">
5525<script> 5526 function initMessages() { 5527 "use strict"; 5528 return { 5529 messages: window.mageMessages || [], 5530 isEmpty() { 5531 return this.messages.reduce( 5532 function (isEmpty, message) { 5533 return isEmpty && message === undefined 5534 }, true 5535 ) 5536 }, 5537 removeMessage(messageIndex) { 5538 this.messages[messageIndex] = undefined; 5539 }, 5540 addMessages(messages, hideAfter) { 5541 messages.map((message) => { 5542 /* Code to avoid multiple messages on the page */ 5543 5544 if (message.text.includes("A customer with the same email address already exists")) { 5545 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>.'; 5546 } 5547 if(this.messages!="") { 5548 this.messages=[]; 5549 } 5550 this.messages = this.messages.concat(message); 5551 if (hideAfter) { 5552 this.setHideTimeOut(this.messages.length -1, hideAfter); 5553 } 5554 }); 5555 }, 5556 setHideTimeOut(messageIndex, hideAfter) { 5557 setTimeout((messageIndex) => { 5558 this.removeMessage(messageIndex); 5559 }, hideAfter, messageIndex); 5560 }, 5561 eventListeners: { 5562 ['@messages-loaded.window']() { 5563 this.addMessages(event.detail.messages, event.detail.hideAfter) 5564 }, 5565 ['@private-content-loaded.window'](event) { 5566 const data = event.detail.data; 5567 if ( 5568 data.messages && 5569 data.messages.messages && 5570 data.messages.messages.length 5571 ) { 5572 this.addMessages(data.messages.messages); 5573 } 5574 }, 5575 ['@clear-messages.window']() { 5576 this.messages = []; 5577 } 5578 } 5579 } 5580 } 5581</script>
5581 5582<section id="messages" 5583 x-data="initMessages()" 5584 x-bind="eventListeners" 5585> 5586 <template x-if="!isEmpty()"> 5587 <div class="w-full"> 5588 <div role="alert" class="messages container"> 5589 <template x-for="(message, index) in messages" :key="index"> 5590 <div> 5591 <template x-if="message"> 5592 <div class="message" :class="message.type" 5593 :ui-id="'message-' + message.type" 5594 > 5595 <span x-html="message.text"></span> 5596 <a href="#" class="close cursor-pointer" title="close" 5597 @click.prevent="removeMessage(index)"> 5598 <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"> 5599 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5600<title>x</title></svg> 5601 </a> 5602 </div> 5603 </template> 5604 </div> 5605 </template> 5606 </div> 5607 </div> 5608 </template> 5609</section></div><div class="container flex flex-col md:flex-row flex-wrap font-bold"> 5610 <h1 class="text-gray-900 page-title title-font" 5611 > 5612 <span class="base" data-ui-id="page-title-wrapper" >Flooring Articles</span> </h1> 5613 </div> 5614<div class="widget block block-static-block"> 5615 <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> 5616<div class="widget block block-static-block"> 5617 <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> 5618<div class="columns"><div class="column main">
5618<script> 5619 5620 5621</script>
vendor: 2 bytes, line 5621
5621
5622<script> 5623 function samplesubmit(mainproduct,inputValue,productids,colors,spidsColors,confproname,confproid,childproids) { 5624 this.isLoading = true; 5625 const formKey = hyva.getFormKey(); 5626 const postUrl = BASE_URL + 'sampleproduct/Sample/Products/'; 5627 fetch(postUrl, { 5628 "headers": { 5629 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5630 }, 5631 "body": "form_key=" + formKey + "&action_type=" + inputValue+ "&pids=" + productids+ "&colors=" + colors+ "&spidsColors=" + spidsColors+ "&confproname=" + confproname+ "&confproid=" + confproid +"&childproid=" + childproids, 5632 "method": "POST", 5633 "mode": "cors", 5634 "credentials": "include" 5635 }).then(response => { 5636 //this.isLoading = false; 5637 //window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5638 //fetchHtmlContent(mainproduct); 5639 if (! response.ok) console.warn('GET request failed'); 5640 return response.json(); 5641 }).then(result => { 5642 this.isLoading = false; 5643 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5644 fetchHtmlContent(mainproduct,result.is_sample_added); 5645 }); 5646 } 5647 </script>
5647 5648
5648<script> 5649 function fetchHtmlContent(pid,is_sample_added) { 5650 console.log('Fetching HTML content for PID:', pid); 5651 const formKey = hyva.getFormKey(); 5652 const randomString = Math.random().toString(36).substring(2, 15); 5653 const postUrl = BASE_URL + 'sampleproduct/sample/popup/?pid='+pid; 5654 fetch(postUrl) 5655 .then(response => response.text()) 5656 .then(html => { 5657 console.log('Response received:', html); 5658 let myDivelements = document.getElementsByClassName('htmlcontent'+pid); 5659 var numberofelements=myDivelements.length; 5660 for(var i=0;i<numberofelements;++i){ 5661 myDivelements[i].innerHTML = html; 5662 } 5663 if(is_sample_added == 1 ){ //&& window.innerWidth <= 767 5664 document.querySelector(".order-free-sample-popup .closemodal").dispatchEvent(new Event('click')); 5665 document.querySelector("#menu-cart-icon").dispatchEvent(new Event('click')); 5666 } 5667 }) 5668 .catch(error => { 5669 console.error(error); 5670 }); 5671 } 5672</script>
5672 5673
5673<script> 5674 if (window.require) { 5675 require(['jquery', 'domReady!'], function($){ 5676 if ($('.mfblogunveil').length) { 5677 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 5678 $('.mfblogunveil').mfblogunveil(); 5679 }); 5680 } 5681 }); 5682 } else { 5683 /* e.g. hyva theme */ 5684 document.addEventListener("DOMContentLoaded", function(){ 5685 var items = document.getElementsByClassName('mfblogunveil'); 5686 var el, url; 5687 if (items.length) { 5688 for (var i=0; i<items.length;i++) { 5689 el = items[i]; 5690 url = el.getAttribute('data-original'); 5691 if (!url) { 5692 continue; 5693 } 5694 if ('IMG' == el.tagName) { 5695 el.src = url; 5696 } else { 5697 el.style.backgroundImage = "url('" + url + "')"; 5698 } 5699 } 5700 } 5701 }); 5702 } 5703 </script>
5703 5704 5705 5706 5707 5708 5709 <!-- Start CSS Magefan_Blog::css/bootstrap-4.4.1-custom-min.css 3Kb --> 5710 <style>.p-0{padding:0 !important}.p-2{padding:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.p-3{padding:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.p-4{padding:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}@media (min-width:768px){.pr-md-3,.px-md-3{padding-right:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}}.m-0{margin:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.mt-3,.my-3{margin-top:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.mt-5,.my-5{margin-top:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}@media (min-width:768px){.mb-md-0{margin-bottom:0 !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.d-none{display:none !important}.d-block{display:block !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-flex{display:-ms-flexbox !important;display:flex !important}.flex-row{-ms-flex-direction:row !important;flex-direction:row !important}.flex-column{-ms-flex-direction:column !important;flex-direction:column !important}.flex-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-grow-1{-ms-flex-positive:1 !important;flex-grow:1 !important}.w-100{width:100% !important}.w-50{width:50% !important}.w-25{width:25% !important}.h-100{height:100% !important}.h-50{height:50% !important}@media (min-width:1200px){.d-xl-block{display:block !important}}@media (min-width:768px){.d-md-block{display:block !important}}@media (min-width:992px){.d-lg-block{display:block !important}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row !important;flex-direction:row !important}.flex-md-column{-ms-flex-direction:column !important;flex-direction:column !important}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}}</style> <div class="post-list-wrapper"> 5711 <ol class="post-list modern"> 5712 <li class="post-item post-holder post-holder-413 block mb-4 pb-4 border-gray-300 border-b-2"> 5713 5714 <div class="post-container flex gap-6"> 5715 <!-- post image --> 5716 <div class="post-image grow-0 shrink-0 basis-4/12 w-2/6 order-none"> 5717 <!-- img container --> 5718 <div class="image-container relative"> 5719 <a class="image-wrap block overflow-hidden relative" 5720 style="line-height:0;padding-bottom:70%;" 5721 href="https://www.flooringinc.com/blog/backyard-gym-ideas" 5722 title="8 Backyard Gym Ideas for Transforming Your Outdoor Workout Space" 5723 > 5724 <div class="animation-type-zoom bg-img mfblogunveil absolute block w-full h-full bg-cover bg-center overflow-hidden hover:scale-110 duration-300" data-original="https://www.flooringinc.com/media/blog/cache/350x_0/magefan_blog/Screenshot_2025-01-16_134029.png"></div> 5725 </a> 5726 5727 <!-- post category--> 5728 <sp
5728an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block"> 5729 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/outdoor" 5730 title="Outdoor"> 5731 Outdoor </a> 5732 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/rubber-flooring" 5733 title="Rubber Flooring Articles"> 5734 Rubber Flooring Articles </a> 5735 </span> 5736 <!-- end post category--> 5737 </div> 5738 </div> 5739 5740 <!-- block info --> 5741 <div class="post-info grow-0 shrink-0 basis-2/3 max-w-[70%] w-[70%] order-1 box-border"> 5742 <!-- post title --> 5743 <div class="post-title-wrap mb-2"> 5744 <h3 class="post-title"> 5745 <a class="inline-block text-lg md:text-xl font-medium font-sans hover:text-red duration-300" href="https://www.flooringinc.com/blog/backyard-gym-ideas">8 Backyard Gym Ideas for Transforming Your Outdoor Workout Space</a> 5746 </h3> 5747 </div> 5748 5749 <!-- block data --> 5750 <div class="post-data-wrap text-xs mb-3"> 5751 <!-- post author --> 5752 <span class="post-author-name"> 5753 <a class="font-medium hover:text-red duration-300" title="Ciana Gitre " 5754 href="https://www.flooringinc.com/blog/author/Ciana">Ciana Gitre </a> 5755 5756 <span>-</span> 5757 </span> 5758 5759 <!-- post date --> 5760 <span class="post-date text-gray-400">January 16, 2025</span> 5761 5762 <!-- post view --> 5763 </div> 5764 5765 <!-- post description --> 5766 <div class="post-description mb-4 hidden md:block"> 5767 <style>#html-body [data-pb-style=QOROHKG]{display:flex;flex-direction:column}</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="QOROHKG"><div data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-weight: 400;">Welcome to the era of backyard fitness, where the convenience of an outdoor workout space replaces the traditional gym. In this guide, we'll explore innovative ideas to transform your backyard into a functional and inviting gym, embracing the trend of creating personalized fitness havens at home. Get ready to break a sweat in the fresh air as we navigate the essentials of planning, selecting equipment, ensuring safety, and personalizing your outdoor gym experience. </span></p> 5768<p><span style="font-weight: 400;">Discover the </span><a tabindex="0" href="/blog/what-is-rubber-flooring" target="_blank" rel="noopener"><span style="font-weight: 400;">benefits of rubber flooring</span></a><span style="font-weight: 400;"> as a foundation that enhances our fitness space's functionality and safety</span></p> 5769<h2><span style="font-weight: 400;">What to Consider Before Building an Outdoor Home Gym</span></h2> 5770<p></mcprod.flooringinc.com/media/magefan_blog/2024/04/AdobeStock_188153075.jpeg"></p></div></div></div> 5771 </div> 5772 5773 <!-- read more --> 5774 <div class="post-read-more hidden md:block"> 5775 <a class="post-read btn-white inline-block py-2.5 px-4 text-[#7d7d7d] hover:text-white bg-white hover:bg-blue-400 border border-gray-300 duration-300" href="https://www.flooringinc.com/blog/backyard-gym-ideas" title="8 Backyard Gym Ideas for Transforming Your Outdoor Workout Space"> 5776 Read more </a> 5777 </div> 5778 </div> 5779 </div> 5780 </li> 5781 <li class="post-item post-holder post-holder-423 block mb-4 pb-4 border-gray-300 border-b-2"> 5782 5783 <div class="post-container flex gap-6"> 5784 <!-- post image --> 5785 <div class="post-image grow-0 shrink-0 basis-4/12 w-2/6 order-none"> 5786 <!-- img container --> 5787 <div class="image-container relative"> 5788 <a class="image-wrap block overflow-hidden relative" 5789 style="line-height:0;padding-bottom:70%;" 5790 href="https://www.flooringinc.com/blog/garage-conversion-ideas" 5791 title="8 Creative Garage Conversion Ideas to Transform Your Space" 5792 > 5793 <div class="animation-type-zoom bg-img mfblogunveil absolute block w-full h-full bg-cover bg-center overflow-hidden hover:scale-110 duration-300" data-original="https://www.flooringinc.com/media/blog/cache/350x_0/magefan_blog/2024/06/3666.jpg"></div> 5794 </a> 5795 5796 <!-- post category--> 5797 <sp
5797an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block"> 5798 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/garage" 5799 title="Garage Flooring Guides"> 5800 Garage Flooring Guides </a> 5801 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/rubber-flooring" 5802 title="Rubber Flooring Articles"> 5803 Rubber Flooring Articles </a> 5804 </span> 5805 <!-- end post category--> 5806 </div> 5807 </div> 5808 5809 <!-- block info --> 5810 <div class="post-info grow-0 shrink-0 basis-2/3 max-w-[70%] w-[70%] order-1 box-border"> 5811 <!-- post title --> 5812 <div class="post-title-wrap mb-2"> 5813 <h3 class="post-title"> 5814 <a class="inline-block text-lg md:text-xl font-medium font-sans hover:text-red duration-300" href="https://www.flooringinc.com/blog/garage-conversion-ideas">8 Creative Garage Conversion Ideas to Transform Your Space</a> 5815 </h3> 5816 </div> 5817 5818 <!-- block data --> 5819 <div class="post-data-wrap text-xs mb-3"> 5820 <!-- post author --> 5821 <span class="post-author-name"> 5822 <a class="font-medium hover:text-red duration-300" title="Ciana Gitre " 5823 href="https://www.flooringinc.com/blog/author/Ciana">Ciana Gitre </a> 5824 5825 <span>-</span> 5826 </span> 5827 5828 <!-- post date --> 5829 <span class="post-date text-gray-400">January 16, 2025</span> 5830 5831 <!-- post view --> 5832 </div> 5833 5834 <!-- post description --> 5835 <div class="post-description mb-4 hidden md:block"> 5836 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">Garages are no longer just for parking cars or storing old junk. In recent years, more homeowners have discovered the immense potential of this extra space. Choosing to do a garage remodel can add value to your home and expand your living space without the hefty price tag of full-scale home remodeling or home additions. Here are some exciting and practical garage conversion ideas that can transform your space into something truly special!</div> 5837 </div> 5838 5839 <!-- read more --> 5840 <div class="post-read-more hidden md:block"> 5841 <a class="post-read btn-white inline-block py-2.5 px-4 text-[#7d7d7d] hover:text-white bg-white hover:bg-blue-400 border border-gray-300 duration-300" href="https://www.flooringinc.com/blog/garage-conversion-ideas" title="8 Creative Garage Conversion Ideas to Transform Your Space"> 5842 Read more </a> 5843 </div> 5844 </div> 5845 </div> 5846 </li> 5847 <li class="post-item post-holder post-holder-408 block mb-4 pb-4 border-gray-300 border-b-2"> 5848 5849 <div class="post-container flex gap-6"> 5850 <!-- post image --> 5851 <div class="post-image grow-0 shrink-0 basis-4/12 w-2/6 order-none"> 5852 <!-- img container --> 5853 <div class="image-container relative"> 5854 <a class="image-wrap block overflow-hidden relative" 5855 style="line-height:0;padding-bottom:70%;" 5856 href="https://www.flooringinc.com/blog/what-is-rubber-flooring" 5857 title="What is Rubber Flooring: Exploring the Versatility and Benefits"
5858 > 5859 <div class="animation-type-zoom bg-img mfblogunveil absolute block w-full h-full bg-cover bg-center overflow-hidden hover:scale-110 duration-300" data-original="https://www.flooringinc.com/media/blog/cache/350x_0/magefan_blog/Screenshot_2025-01-14_141730.png"></div> 5860 </a> 5861 5862 <!-- post category--> 5863 <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block"> 5864 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/rubber-flooring" 5865 title="Rubber Flooring Articles"> 5866 Rubber Flooring Articles </a> 5867 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/buying-guide" 5868 title="Buying Guide"> 5869 Buying Guide </a> 5870 </span> 5871 <!-- end post category--> 5872 </div> 5873 </div> 5874 5875 <!-- block info --> 5876 <div class="post-info grow-0 shrink-0 basis-2/3 max-w-[70%] w-[70%] order-1 box-border"> 5877 <!-- post title --> 5878 <div class="post-title-wrap mb-2"> 5879 <h3 class="post-title"> 5880 <a class="inline-block text-lg md:text-xl font-medium font-sans hover:text-red duration-300" href="https://www.flooringinc.com/blog/what-is-rubber-flooring">What is Rubber Flooring: Exploring the Versatility and Benefits</a> 5881 </h3> 5882 </div> 5883 5884 <!-- block data --> 5885 <div class="post-data-wrap text-xs mb-3"> 5886 <!-- post author --> 5887 <span class="post-author-name"> 5888 <a class="font-medium hover:text-red duration-300" title="Ciana Gitre " 5889 href="https://www.flooringinc.com/blog/author/Ciana">Ciana Gitre </a> 5890 5891 <span>-</span> 5892 </span> 5893 5894 <!-- post date --> 5895 <span class="post-date text-gray-400">January 14, 2025</span> 5896 5897 <!-- post view --> 5898 </div> 5899 5900 <!-- post description --> 5901 <div class="post-description mb-4 hidden md:block"> 5902 <style>#html-body [data-pb-style=RQMOUJ5]{display:flex;flex-direction:column}</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="RQMOUJ5"><div data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-weight: 400;">Rubber flooring is a versatile and stylish option for various settings, from your home gym to contemporary office spaces. Before you learn about how to install rubber flooring, this guide will c
5902over its durability, versatility, and eco-friendliness. As the demand for innovative and sustainable flooring solutions grows, rubber floors meets and exceeds expectations, offering a seamless blend of functionality and aesthetic appeal for our customers' diverse needs.</span></p> 5903<p><a tabindex="0" href="/blog/rubber-flooring-5-myths-busted" target="_blank" rel="noopener"><span style="font-weight: 400;">Rubber flooring myths</span></a><span style="font-weight: 400;"> often circulate, creating misconceptions about its properties and benefits. It’s important to see through these myths to understand the true value and capabilities. We aim to provide accurate information and clarify any misunderstandings about this versatile flooring option.</span></p> 5904<p><span style="font-weight: 400;">Gain insights</span></p></div></div></div> 5905 </div> 5906 5907 <!-- read more --> 5908 <div class="post-read-more hidden md:block"> 5909 <a class="post-read btn-white inline-block py-2.5 px-4 text-[#7d7d7d] hover:text-white bg-white hover:bg-blue-400 border border-gray-300 duration-300" href="https://www.flooringinc.com/blog/what-is-rubber-flooring" title="What is Rubber Flooring: Exploring the Versatility and Benefits"> 5910 Read more </a> 5911 </div> 5912 </div> 5913 </div> 5914 </li> 5915 <li class="post-item post-holder post-holder-409 block mb-4 pb-4 border-gray-300 border-b-2"> 5916 5917 <div class="post-container flex gap-6"> 5918 <!-- post image --> 5919 <div class="post-image grow-0 shrink-0 basis-4/12 w-2/6 order-none"> 5920 <!-- img container --> 5921 <div class="image-container relative"> 5922 <a class="image-wrap block overflow-hidden relative" 5923 style="line-height:0;padding-bottom:70%;" 5924 href="https://www.flooringinc.com/blog/best-garage-flooring-ideas" 5925 title="Garage Flooring Ideas: Tiles, Rolls, Epoxy & More" 5926 > 5927 <div class="animation-type-zoom bg-img mfblogunveil absolute block w-full h-full bg-cover bg-center overflow-hidden hover:scale-110 duration-300" data-original="https://www.flooringinc.com/media/blog/cache/350x_0/magefan_blog/Main_Image_37_.jpg"></div> 5928 </a> 5929 5930 <!-- post category--> 5931 <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block"> 5932 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/carpet" 5933 title="Carpet"> 5934 Carpet </a> 5935 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/garage" 5936 title="Garage Flooring Guides"> 5937 Garage Flooring Guides </a> 5938 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/rubber-flooring" 5939 title="Rubber Flooring Articles"> 5940 Rubber Flooring Articles </a> 5941 <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.flooringinc.com/blog/category/best-of" 5942 title="Best of"> 5943 Best of </a> 5944 </span> 5945 <!-- end post category--> 5946 </div> 5947 </div> 5948 5949 <!-- block info --> 5950 <div class="post-info grow-0 shrink-0 basis-2/3 max-w-[70%] w-[70%] order-1 box-border"> 5951 <!-- post title --> 5952 <div class="post-title-wrap mb-2"> 5953 <h3 class="post-title"> 5954 <a class="inline-block text-lg md:text-xl font-medium font-sans hover:text-red duration-300" href="https://www.flooringinc.com/blog/best-garage-flooring-ideas">Garage Flooring Ideas: Tiles, Rolls, Epoxy & More</a> 5955 </h3> 5956 </div> 5957 5958 <!-- block data --> 5959 <div class="post-data-wrap text-xs mb-3"> 5960 <!-- post author --> 5961 <sp
5961an class="post-author-name"> 5962 <a class="font-medium hover:text-red duration-300" title="Ciana Gitre " 5963 href="https://www.flooringinc.com/blog/author/Ciana">Ciana Gitre </a> 5964 5965 and <a title="Sarah Boyce " 5966 href="https://www.flooringinc.com/blog/author/sarahboyce">Sarah Boyce </a> <span>-</span> 5967 </span> 5968 5969 <!-- post date --> 5970 <span class="post-date text-gray-400">January 06, 2025</span> 5971 5972 <!-- post view --> 5973 </div> 5974 5975 <!-- post description --> 5976 <div class="post-description mb-4 hidden md:block"> 5977 <style>#html-body [data-pb-style=MA1QYPV]{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=FBPG4RQ]{border-style:none}#html-body [data-pb-style=W7OQIIE],#html-body [data-pb-style=YGE28KC]{max-width:100%;height:auto}#html-body [data-pb-style=TOL8QBQ]{border-style:none}#html-body [data-pb-style=B73Y8JK],#html-body [data-pb-style=LU8QJ45]{max-width:100%;height:auto}#html-body [data-pb-style=REYF00D]{border-style:none}#html-body [data-pb-style=KW0ML14],#html-body [data-pb-style=XPLOV38]{max-width:100%;height:auto}#html-body [data-pb-style=FC3EWN3]{border-style:none}#html-body [data-pb-style=DP40TX3],#html-body [data-pb-style=M9HSE8O]{max-width:100%;height:auto}#html-body [data-pb-style=OCA5PDR]{border-style:none}#html-body [data-pb-style=F46RURF],#html-body [data-pb-style=UTNDFJF]{max-width:100%;height:auto}#html-body [data-pb-style=VPLOX0G]{border-style:none}#html-body [data-pb-style=EYQG7GE],#html-body [data-pb-style=X5FD8CS]{max-width:100%;height:auto}#html-body [data-pb-style=UBIHAYT]{border-style:none}#html-body [data-pb-style=BN8DXQL],#html-body [data-pb-style=BXTXVN0]{max-width:100%;height:auto}#html-body [data-pb-style=DH8FL9U]{border-style:none}#html-body [data-pb-style=VSGIH3T],#html-body [data-pb-style=X9GTFK2]{max-width:100%;height:auto}#html-body [data-pb-style=LO2OAGS]{border-style:none}#html-body [data-pb-style=DP812IH],#html-body [data-pb-style=KCWCTRQ]{max-width:100%;height:auto}#html-body [data-pb-style=PU6B2I9]{border-style:none}#html-body [data-pb-style=DU7ALEO],#html-body [data-pb-style=RRFXEH3]{max-width:100%;height:auto}#html-body [data-pb-style=FQR3AN2]{display:inline-block}#html-body [data-pb-style=HF2H5AD]{text-align:center}#html-body [data-pb-style=VDVIQ9D]{display:inline-block}#html-body [data-pb-style=HSQB7IJ]{text-align:center}#html-body [data-pb-style=HYHUBKR]{display:inline-block}#html-body [data-pb-style=LL4UNQV]{text-align:center}#html-body [data-pb-style=Q06AD38]{display:inline-block}#html-body [data-pb-style=OQC99L8]{text-align:center}#html-body [data-pb-style=HVCEQOY]{display:inline-block}#html-body [data-pb-style=VNKT9ID]{text-align:center}#html-body [data-pb-style=PWFTNN7]{display:inline-block}#html-body [data-pb-style=NIIVHFU]{text-align:center}#html-body [data-pb-style=EB9C3II]{display:inline-block}#html-body [data-pb-style=DT9BUP0]{text-align:center}#html-body [data-pb-style=KA0I4KO]{display:inline-block}#html-body [data-pb-style=SSLKHWC]{text-align:center}#html-body [data-pb-style=YNJ6DQ8]{display:inline-block}#html-body [data-pb-style=BO8XK11]{text-align:center}#html-body [data-pb-style=N7I62GH]{display:inline-block}#html-body [data-pb-style=GXUFH5N]{text-align:center}#html-body [data-pb-style=DYIDF0T]{display:inline-block}#html-body [data-pb-style=CHG4INX]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=DH8FL9U],#html-body [data-pb-style=FBPG4RQ],#html-body [data-pb-style=FC3EWN3],#html-body [data-pb-style=LO2OAGS],#html-body [data-pb-style=OCA5PDR],#html-body [data-pb-style=PU6B2I9],#html-body [data-pb-style=REYF00D],#html-body [data-pb-style=TOL8QBQ],#html-body [data-pb-style=UBIHAYT],#html-body [data-pb-style=VPLOX0G]{border-style:none} }</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="MA1QYPV"><div data-content-type="text" data-appearance="default" data-element="main"><p>Welcome to the era of the <strong>lifestyle garage. </strong>In 2026 the garage is no longer just a graveyard for cardboard boxes and old lawnmowers, it's a high-end tech workshop, a home gym, and a seamless extension of your living space. Choosing the right foundation is the first step in this transformation.</p> 5978<p>At FlooringInc, we've traced the latest shifts in home design to bring you the most durable and stylish solutions available this year. Whether you're looking for the industrial strength of <strong><a tabindex="0" href="/shop/garage-flooring/coatings-epoxy.html" target="_blank" rel="noopener">professional-grade epoxy,</a> </strong>the DIY simplicity of<a tabindex="0" href="/shop/garage-flooring/garage-tiles.html" target="_blank" rel="noopener"> </a><strong><a tabindex="0" href="/shop/garage-flooring/garage-tiles.html" target="_blank" rel="noopener">interlocking garage tiles,</a> </strong>or the ergonomic comfort of <strong><a tabindex="0"></a></strong></p></div></div></div> 5979 </div> 5980 5981 <!-- read more --> 5982 <div class="post-read-more hidden md:block"> 5983 <a class="post-read btn-white inline-block py-2.5 px-4 text-[#7d7d7d] hover:text-white bg-white hover:bg-blue-400 border border-gray-300 duration-300" href="https://www.flooringinc.com/blog/best-garage-flooring-ideas" title="Garage Flooring Ideas: Tiles, Rolls, Epoxy & More"> 5984 Read more </a> 5985 </div> 5986 </div> 5987 </div> 5988 </li> 5989 </ol> 5990 </div> 5991 5992 <div class="toolbar toolbar-blog-posts"> 5993 5994 5995 5996 <div class="flex justify-center order-2 col-span-4"> 5997 </div> 5998 5999 6000 6001 </div> 6002
6003<script> 6004 function mfShareWindowOpen(url, type) { 6005 function reverse(s){ 6006 return s.split("").reverse().join(""); 6007 } 6008 6009 var u; 6010 switch (type) { 6011 case 'facebook': 6012 u = reverse('=u?php.rerahs/rerahs/moc.koobecaf.www//:sptth') + url; 6013 break; 6014 case 'pinterest': 6015 u = reverse('=lru?/nottub/etaerc/nip/moc.tseretnip//:sptth') + url; 6016 break; 6017 case 'twitter': 6018 u =reverse('=lru?erahs/moc.rettiwt//:ptth') + url; 6019 break; 6020 } 6021 if (u) { 6022 window.open (u, null, "width=600,height=400"); 6023 } 6024 } 6025</script>
6025 6026 6027<style> 6028 .post-view { 6029 display: block; 6030 background: #000; 6031 color: #fff; 6032 font-size: 10px; 6033 font-weight: 600; 6034 text-align: center; 6035 line-height: 11px; 6036 position: relative; 6037 top: -5px; 6038 padding: 4px 6px; 6039 } 6040 .post-view:after { 6041 position: absolute; 6042 bottom: -3px; 6043 left: 0; 6044 content: ''; 6045 width: 0; 6046 height: 0; 6047 border-style: solid; 6048 border-width: 3px 3px 0 0; 6049 border-color: #000 transparent transparent; 6050 } 6051</style> 6052
6052<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 6053 function hasWebP() { 6054 var elem = document.createElement('canvas'); 6055 6056 if (!!(elem.getContext && elem.getContext('2d'))) { 6057 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 6058 } 6059 return false; 6060 } 6061 6062 if (hasWebP()) { 6063 document.body.classList.add("webp"); 6064 } else { 6065 document.body.classList.add("no-webp"); 6066 }</script>
6066<div class="instagram_feed_container1"><div class="instagram_content_slider blog_insta_feed"> 6067 </div> 6068
6069<script> 6070 document.addEventListener('DOMContentLoaded', function() { 6071 var instagramFeedContainer = document.querySelector('.blog-page .instagram_feed_container1'); 6072 if (instagramFeedContainer) { 6073 var columns = document.querySelector('.columns'); 6074 if (columns) { 6075 columns.parentNode.insertBefore(instagramFeedContainer, columns.nextSibling); 6076 } 6077 } 6078 var blogCon = document.querySelector('.blog-page .column.main'); 6079 var blockSearch = document.querySelector('.sidebar-additional .blog-search'); 6080 if (blogCon && blockSearch) { 6081 blogCon.parentNode.insertBefore(blockSearch, blogCon); 6082 } 6083 }); 6084</script>
6084</div></div><aside class="sidebar sidebar-additional"> 6085 6086<div class="blog-search flex items-center w-full gap-2 mb-3"> 6087 <h2>Search All Articles</h2> 6088 <form class="form blog-search relative" id="blog_search_mini_form" 6089 action="https://www.flooringinc.com/blog/search/" 6090 method="get" 6091 > 6092 <input id="blog_search" 6093 type="text" 6094 name="q" 6095 value="" 6096 placeholder="Search posts here..." 6097 class="w-full field m-0 pr-10" 6098 style="margin: 0;" 6099 maxlength="128" role="combobox" 6100 aria-haspopup="false" 6101 aria-autocomplete="both" 6102 autocomplete="off"> 6103 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-5 h-5 absolute top-3 right-3 hidden" width="24" height="24" role="img"> 6104 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 6105<title>search</title></svg> 6106 </form> 6107</div>
6108<script> 6109 document.addEventListener('DOMContentLoaded', function() { 6110 var form = document.getElementById('blog_search_mini_form'); 6111 form.addEventListener('submit', function(event) { 6112 event.preventDefault(); 6113 var value = document.getElementById('blog_search').value; 6114 if (value) { 6115 var a = form.action; 6116 window.location = a + ( ('/' != a.charAt(a.length - 1)) ? '/' : '' ) + encodeURI(value) + '/'; 6117 } 6118 return false; 6119 }); 6120 }); 6121</script>
6121 6122<style> 6123 .blog-search .action.search:before { 6124 -webkit-font-smoothing: antialiased; 6125 content: ''; 6126 margin: 0; 6127 vertical-align: top; 6128 display: inline-block; 6129 overflow: hidden; 6130 speak: none; 6131 width: 16px; 6132 height: 32px; 6133 background: url(../../frontend/Magento/luma/en_US/Magefan_Blog/images/search-icon-white.svg) no-repeat -10px -7px; 6134 background-size: 35px; 6135 opacity: 1; 6136 } 6137</style> 6138 6139 <div class="block-categories mb-10"> 6140 <div class="title text-xl md:text-2xl font-semibold py-2"> 6141 Categories </div> 6142 6143 <ul class="accordion font-semibold pl-4"> 6144 <li class="pt-1"> 6145 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/how-to"> 6146 How To Articles <span>42</span> 6147 </a> 6148 6149 6150 </li> <li class="pt-1"> 6151 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/installation"> 6152 Flooring Installation Articles <span>28</span> 6153 </a> 6154 6155 6156 </li> <li class="pt-1"> 6157 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/maintenance"> 6158 Flooring Maintenance <span>8</span> 6159 </a> 6160 6161 6162 </li> <li class="pt-1"> 6163 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/laminate"> 6164 Laminate Flooring Articles <span>40</span> 6165 </a> 6166 6167 6168 </li> <li class="pt-1"> 6169 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/underlayment"> 6170 Underlayment for Floors <span>2</span> 6171 </a> 6172 6173 6174 6175 6176 </li> <li class="pt-1"> 6177 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/reviews"> 6178 Reviews <span>3</span> 6179 </a> 6180 6181 6182 6183 6184 </li> <li class="pt-1"> 6185 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/round-up"> 6186 Round Up <span>4</span> 6187 </a> 6188 6189 6190 </li> <li class="pt-1"> 6191 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/kitchen"> 6192 Kitchen Decor Tips <span>4</span> 6193 </a> 6194 6195 6196 </li> <li class="pt-1"> 6197 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/carpet"> 6198 Carpet <span>57</span> 6199 </a> 6200 6201 6202 </li> <li class="pt-1"> 6203 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/vinyl"> 6204 Vinyl <span>78</span> 6205 </a> 6206 6207 6208 </li> <li class="pt-1"> 6209 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/basement"> 6210 Basement <sp
6210an>3</span> 6211 </a> 6212 6213 6214 </li> <li class="pt-1"> 6215 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/general"> 6216 General <span>1</span> 6217 </a> 6218 6219 6220 </li> <li class="pt-1"> 6221 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/foam-tiles"> 6222 Foam Tiles <span>16</span> 6223 </a> 6224 6225 6226 6227 6228 </li> <li class="pt-1"> 6229 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/garage"> 6230 Garage Flooring Guides <span>38</span> 6231 </a> 6232 6233 6234 </li> <li class="pt-1"> 6235 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/outdoor"> 6236 Outdoor <span>29</span> 6237 </a> 6238 6239 6240 6241 6242 </li> <li class="pt-1"> 6243 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/rubber-flooring"> 6244 Rubber Flooring Articles <span>75</span> 6245 </a> 6246 6247 6248 </li> <li class="pt-1"> 6249 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/cork"> 6250 Cork <span>2</span> 6251 </a> 6252 6253 6254 6255 6256 6257 6258 6259 6260 </li> <li class="pt-1"> 6261 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/real-estate"> 6262 Real Estate <span>2</span> 6263 </a> 6264 6265 6266 </li> <li class="pt-1"> 6267 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/gift-guides"> 6268 Gift Guides <span>5</span> 6269 </a> 6270 6271 6272 </li> <li class="pt-1"> 6273 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/dance-flooring"> 6274 Dance Flooring Articles <span>18</span> 6275 </a> 6276 6277 6278 </li> <li class="pt-1"> 6279 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/gym-flooring"> 6280 Gym Flooring <span>31</span> 6281 </a> 6282 6283 6284 </li> <li class="pt-1"> 6285 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/turf"> 6286 Turf <span>22</span> 6287 </a> 6288 6289 6290 </li> <li class="pt-1"> 6291 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/gymnastics"> 6292 Gymnastics <sp
6292an>10</span> 6293 </a> 6294 6295 6296 </li> <li class="pt-1"> 6297 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/flooring-trends"> 6298 Flooring Trends <span>27</span> 6299 </a> 6300 6301 6302 6303 6304 </li> <li class="pt-1"> 6305 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/bathroom"> 6306 Bathroom <span>3</span> 6307 </a> 6308 6309 6310 </li> <li class="pt-1"> 6311 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/buying-guide"> 6312 Buying Guide <span>139</span> 6313 </a> 6314 6315 6316 </li> <li class="pt-1"> 6317 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/engineered-hardwood"> 6318 Engineered Hardwood <span>14</span> 6319 </a> 6320 6321 6322 </li> <li class="pt-1"> 6323 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/grout"> 6324 Grout <span>4</span> 6325 </a> 6326 6327 6328 </li> <li class="pt-1"> 6329 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/epoxy"> 6330 Epoxy <span>4</span> 6331 </a> 6332 6333 6334 </li> <li class="pt-1"> 6335 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/wrestling"> 6336 Wrestling <span>2</span> 6337 </a> 6338 6339 6340 6341 6342 </li> <li class="pt-1"> 6343 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/peel-and-stick"> 6344 Peel and Stick <span>2</span> 6345 </a> 6346 6347 6348 </li> <li class="pt-1"> 6349 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/court-flooring"> 6350 Court Flooring <span>5</span> 6351 </a> 6352 6353 6354 6355 6356 </li> <li class="pt-1"> 6357 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/how-to-clean"> 6358 How to Clean <span>26</span> 6359 </a> 6360 6361 6362 <ul> <li class="pl-2.5"> 6363 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/how-to-clean/hard-tile"> 6364 Hard Tile <span>14</span> 6365 </a> 6366 6367 6368 </ul></li> <li class="pt-1"> 6369 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/best-of"> 6370 Best of <sp
6370an>32</span> 6371 </a> 6372 6373 6374 </li> <li class="pt-1"> 6375 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/faq"> 6376 FAQ <span>13</span> 6377 </a> 6378 6379 6380 6381 6382 </li> <li class="pt-1"> 6383 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/bedroom"> 6384 Bedroom <span>3</span> 6385 </a> 6386 6387 6388 </li> <li class="pt-1"> 6389 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/trade-show-flooring"> 6390 Trade Show Flooring <span>2</span> 6391 </a> 6392 6393 6394 </li> <li class="pt-1"> 6395 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/playground"> 6396 Playground <span>8</span> 6397 </a> 6398 6399 6400 </li> <li class="pt-1"> 6401 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/composite-decking"> 6402 Composite Decking <span>16</span> 6403 </a> 6404 6405 6406 </li> <li class="pt-1"> 6407 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/pet-friendly"> 6408 Pet Friendly <span>13</span> 6409 </a> 6410 6411 6412 6413 6414 </li> <li class="pt-1"> 6415 <a class="hover:text-red duration-300" href="https://www.flooringinc.com/blog/category/commercial-flooring-3"> 6416 Commercial Flooring <span>5</span> 6417 </a> 6418 6419 6420 </ul> 6421 </div> 6422
6423<script> 6424 document.addEventListener('DOMContentLoaded', function () { 6425 const currentUrl = window.location.href; 6426 const categoryLinks = document.querySelectorAll('.block-categories .accordion li a'); 6427 categoryLinks.forEach(link => { 6428 if (link.href === currentUrl) { 6429 link.classList.add('active'); 6430 } else { 6431 link.classList.remove('active'); 6432 } 6433 }); 6434 }); 6435</script>
6435 6436<div class="block-recent-posts block-list-posts mb-10" > 6437 <div class="title text-xl md:text-2xl font-semibold py-2"> 6438 Recent Posts </div> 6439 <div class="block-content flex flex-col gap-6 mt-3"> 6440 <div class="item flex gap-4"> 6441 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6442 <a class="post-item-link" title="Living.Fit Reviews: How Their Rubber Gym Flooring Compares to FlooringInc" href="https://www.flooringinc.com/blog/living-fit-reviews"> 6443 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/livingfit-cover.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/livingfit-cover.jpg" alt="Man standing in a high-end home gym with black rubber roll flooring, thought bubble asking who to trust with the floor, beside a comparison of 3 Living.Fit Trustpilot reviews against 1,631 for FlooringInc" /></picture> 6444 </a> 6445 </div> 6446 6447 <div class="post-info flex-grow-1"> 6448 <a class="post-item-link font-medium hover:text-red duration-300" title="Living.Fit Reviews: How Their Rubber Gym Flooring Compares to FlooringInc" href="https://www.flooringinc.com/blog/living-fit-reviews">Living.Fit Reviews: How Their Rubber Gym Flooring Compares to FlooringInc</a> 6449 6450 <div class="post-item-date text-gray-400"> 6451 <span class="value">September 15, 2026</span> 6452 </div> 6453 </div> 6454 </div> 6455 <div class="item flex gap-4"> 6456 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6457 <a class="post-item-link" title="Nitro Garage Flooring: From a Bedroom Office to 28 Million Square Feet" href="https://www.flooringinc.com/blog/why-nitro-garage-tiles"> 6458 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/hero_1200x630.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/hero_1200x630.png" alt="Every garage floor Nitro makes: the Coin, Diamond and Vented tile patterns drawn at 12 by 12 by 3/8 inches, with the full color range by line - 8 colors for Nitro Tiles, 14 for Nitro Pro including six two-tone, 6 for Flex Nitro XL and 2 for Slate Flex Nit" /></picture> 6459 </a> 6460 </div> 6461 6462 <div class="post-info flex-grow-1"> 6463 <a class="post-item-link font-medium hover:text-red duration-300" title="Nitro Garage Flooring: From a Bedroom Office to 28 Million Square Feet" href="https://www.flooringinc.com/blog/why-nitro-garage-tiles">Nitro Garage Flooring: From a Bedroom Office to 28 Million Square Feet</a> 6464 6465 <div class="post-item-date text-gray-400"> 6466 <span class="value">August 23, 2026</span> 6467 </div> 6468 </div> 6469 </div> 6470 <div class="item flex gap-4"> 6471 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6472 <a class="post-item-link" title="Dog Kennel Flooring: A Commercial Buyer's Guide for Boarding, Breeding, and Shelter Operators" href="https://www.flooringinc.com/blog/commercial-kennel-flooring"> 6473 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/dog-kennel-flooring-hero.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/dog-kennel-flooring-hero.jpg" alt="Commercial dog kennel flooring with sealed vinyl-surface rolls sloped to a trench drain in a boarding facility run." /></picture> 6474 </a> 6475 </div> 6476 6477 <div class="post-info flex-grow-1"> 6478 <a class="post-item-link font-medium hover:text-red duration-300" title="Dog Kennel Flooring: A Commercial Buyer's Guide for Boarding, Breeding, and Shelter Operators" href="https://www.flooringinc.com/blog/commercial-kennel-flooring">Dog Kennel Flooring: A Commercial Buyer's Guide for Boarding, Breeding, and Shelter Operators</a> 6479 6480 <div class="post-item-date text-gray-400">
6481 <span class="value">August 07, 2026</span> 6482 </div> 6483 </div> 6484 </div> 6485 <div class="item flex gap-4"> 6486 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6487 <a class="post-item-link" title="What Trade Show Flooring Costs: Shipping, Drayage, and the Cheap Way In" href="https://www.flooringinc.com/blog/trade-show-flooring-cost"> 6488 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/best-trade-show-flooring-booth-foam-wood-tile.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/best-trade-show-flooring-booth-foam-wood-tile.jpg" alt="Trade show booth with wood-look interlocking foam floor tiles beside a bare concrete convention hall aisle" /></picture> 6489 </a> 6490 </div> 6491 6492 <div class="post-info flex-grow-1"> 6493 <a class="post-item-link font-medium hover:text-red duration-300" title="What Trade Show Flooring Costs: Shipping, Drayage, and the Cheap Way In" href="https://www.flooringinc.com/blog/trade-show-flooring-cost">What Trade Show Flooring Costs: Shipping, Drayage, and the Cheap Way In</a> 6494 6495 <div class="post-item-date text-gray-400"> 6496 <span class="value">August 03, 2026</span> 6497 </div> 6498 </div> 6499 </div> 6500 <div class="item flex gap-4"> 6501 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6502 <a class="post-item-link" title="Best Flooring for a Veterinary Clinic: A Spec Guide by Zone" href="https://www.flooringinc.com/blog/veterinary-clinic-flooring"> 6503 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/vet-clinic-hero-rubber-floor_2.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/vet-clinic-hero-rubber-floor_2.jpg" alt="Veterinary clinic treatment area with a dark commercial rubber floor and a stainless steel exam table" /></picture> 6504 </a> 6505 </div> 6506 6507 <div class="post-info flex-grow-1"> 6508 <a class="post-item-link font-medium hover:text-red duration-300" title="Best Flooring for a Veterinary Clinic: A Spec Guide by Zone" href="https://www.flooringinc.com/blog/veterinary-clinic-flooring">Best Flooring for a Veterinary Clinic: A Spec Guide by Zone</a> 6509 6510 <div class="post-item-date text-gray-400"> 6511 <span class="value">July 28, 2026</span> 6512 </div> 6513 </div> 6514 </div> 6515 </div> 6516</div> 6517 6518 6519<div class="block-featured-posts block-list-posts mb-10" > 6520 <div class="title text-xl md:text-2xl font-semibold py-2"> 6521 Featured Posts </div> 6522 <div class="block-content flex flex-col gap-6 mt-3"> 6523 <div class="item flex gap-4"> 6524 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6525 <a class="post-item-link" title="How to Install Rubber Flooring: 11 Tips to Know" href="https://www.flooringinc.com/blog/how-to-install-rubber-flooring"> 6526 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2024/02/14003-1.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2024/02/14003-1.jpg" alt="How to Install Rubber Flooring: 11 Tips to Know" /></picture> 6527 </a> 6528 </div> 6529 6530 <div class="post-info flex-grow-1"> 6531 <a class="post-item-link font-medium hover:text-red duration-300" title="How to Install Rubber Flooring: 11 Tips to Know" href="https://www.flooringinc.com/blog/how-to-install-rubber-flooring">How to Install Rubber Flooring: 11 Tips to Know</a> 6532 6533 <div class="post-item-date text-gray-400">
6534 <span class="value">December 31, 2024</span> 6535 </div> 6536 </div> 6537 </div> 6538 <div class="item flex gap-4"> 6539 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6540 <a class="post-item-link" title="What is Rubber Flooring: Exploring the Versatility and Benefits" href="https://www.flooringinc.com/blog/what-is-rubber-flooring"> 6541 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2025-01-14_141730.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2025-01-14_141730.png" alt="Next Day Rubber Rolls" /></picture> 6542 </a> 6543 </div> 6544 6545 <div class="post-info flex-grow-1"> 6546 <a class="post-item-link font-medium hover:text-red duration-300" title="What is Rubber Flooring: Exploring the Versatility and Benefits" href="https://www.flooringinc.com/blog/what-is-rubber-flooring">What is Rubber Flooring: Exploring the Versatility and Benefits</a> 6547 6548 <div class="post-item-date text-gray-400"> 6549 <span class="value">January 14, 2025</span> 6550 </div> 6551 </div> 6552 </div> 6553 <div class="item flex gap-4"> 6554 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6555 <a class="post-item-link" title="Expert's Guide to Rubber Flooring Rolls for Gyms" href="https://www.flooringinc.com/blog/rubber-flooring-rolls-buying-guide"> 6556 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2024-12-31_113915.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2024-12-31_113915.png" alt="8mm Pre Cut rubber Rolls" /></picture> 6557 </a> 6558 </div> 6559 6560 <div class="post-info flex-grow-1"> 6561 <a class="post-item-link font-medium hover:text-red duration-300" title="Expert's Guide to Rubber Flooring Rolls for Gyms" href="https://www.flooringinc.com/blog/rubber-flooring-rolls-buying-guide">Expert's Guide to Rubber Flooring Rolls for Gyms</a> 6562 6563 <div class="post-item-date text-gray-400"> 6564 <span class="value">January 15, 2026</span> 6565 </div> 6566 </div> 6567 </div> 6568 </div> 6569</div> 6570 6571 6572<div class="block-popular-posts block-list-posts mb-10" > 6573 <div class="title text-xl md:text-2xl font-semibold py-2"> 6574 Popular Posts </div> 6575 <div class="block-content flex flex-col gap-6 mt-3"> 6576 <div class="item flex gap-4"> 6577 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6578 <a class="post-item-link" title="Home Gym Flooring Guide: Rubber, Foam, Vinyl & Carpet Compared" href="https://www.flooringinc.com/blog/4-options-for-home-gym-flooring"> 6579 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2021/01/7225.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2021/01/7225.jpg" alt="Premium HD Soft Foam Tiles" /></picture> 6580 </a> 6581 </div> 6582 6583 <div class="post-info flex-grow-1"> 6584 <a class="post-item-link font-medium hover:text-red duration-300" title="Home Gym Flooring Guide: Rubber, Foam, Vinyl &
6584 Carpet Compared" href="https://www.flooringinc.com/blog/4-options-for-home-gym-flooring">Home Gym Flooring Guide: Rubber, Foam, Vinyl & Carpet Compared</a> 6585 6586 <div class="post-item-date text-gray-400"> 6587 <span class="value">October 22, 2025</span> 6588 </div> 6589 </div> 6590 </div> 6591 <div class="item flex gap-4"> 6592 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6593 <a class="post-item-link" title="Outdoor Flooring Trends: Decking, Turf & Patio Ideas" href="https://www.flooringinc.com/blog/outdoor-flooring-trends"> 6594 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/-B779_9.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/-B779_9.png" alt="Interlocking Deck Top Roof Tiles" /></picture> 6595 </a> 6596 </div> 6597 6598 <div class="post-info flex-grow-1"> 6599 <a class="post-item-link font-medium hover:text-red duration-300" title="Outdoor Flooring Trends: Decking, Turf & Patio Ideas" href="https://www.flooringinc.com/blog/outdoor-flooring-trends">Outdoor Flooring Trends: Decking, Turf & Patio Ideas</a> 6600 6601 <div class="post-item-date text-gray-400"> 6602 <span class="value">November 12, 2024</span> 6603 </div> 6604 </div> 6605 </div> 6606 <div class="item flex gap-4"> 6607 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6608 <a class="post-item-link" title="How to Install Cork Flooring" href="https://www.flooringinc.com/blog/how-to-install-cork-flooring"> 6609 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2018/09/cork.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2018/09/cork.jpg" alt="How to Install Cork Flooring" /></picture> 6610 </a> 6611 </div> 6612 6613 <div class="post-info flex-grow-1"> 6614 <a class="post-item-link font-medium hover:text-red duration-300" title="How to Install Cork Flooring" href="https://www.flooringinc.com/blog/how-to-install-cork-flooring">How to Install Cork Flooring</a> 6615 6616 <div class="post-item-date text-gray-400"> 6617 <span class="value">January 02, 2025</span> 6618 </div> 6619 </div> 6620 </div> 6621 <div class="item flex gap-4"> 6622 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6623 <a class="post-item-link" title="Home Gym: Foam vs Rubber" href="https://www.flooringinc.com/blog/home-gym-foam-vs-rubber"> 6624 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2015/04/Home-Gym.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/2015/04/Home-Gym.jpg" alt="Home Gym: Foam vs Rubber" /></picture> 6625 </a> 6626 </div> 6627 6628 <div class="post-info flex-grow-1"> 6629 <a class="post-item-link font-medium hover:text-red duration-300" title="Home Gym: Foam vs Rubber" href="https://www.flooringinc.com/blog/home-gym-foam-vs-rubber">Home Gym: Foam vs Rubber</a> 6630 6631 <div class="post-item-date text-gray-400">
6632 <span class="value">January 14, 2025</span> 6633 </div> 6634 </div> 6635 </div> 6636 <div class="item flex gap-4"> 6637 <div class="post-image flex-grow-0 flex-shrink-0 self-start w-4/12"> 6638 <a class="post-item-link" title="How to Install Carpet Tiles" href="https://www.flooringinc.com/blog/how-to-install-carpet-tiles"> 6639 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2025-03-19_125424.webp"><img data-width-amp="300" data-height-amp="200" layout="responsive" src="https://www.flooringinc.com/media/blog/cache/300x200/magefan_blog/Screenshot_2025-03-19_125424.png" alt="Heritage Carpet Tile" /></picture> 6640 </a> 6641 </div> 6642 6643 <div class="post-info flex-grow-1"> 6644 <a class="post-item-link font-medium hover:text-red duration-300" title="How to Install Carpet Tiles" href="https://www.flooringinc.com/blog/how-to-install-carpet-tiles">How to Install Carpet Tiles</a> 6645 6646 <div class="post-item-date text-gray-400"> 6647 <span class="value">March 19, 2025</span> 6648 </div> 6649 </div> 6650 </div> 6651 </div> 6652</div> 6653 6654</aside></div></main><footer class="page-footer"><div class="footer content"> 6655<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> 6656<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> 6657<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> 6658<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">
6658<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> 6659<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> 6660</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"> 6661 <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> 6662<li style="line-height: 10px;"><a id="T6SH02B" tabindex="0" href="/contact">Contact Us</a></li> 6663<li style="line-height: 10px;"><a tabindex="0" href="/about">About Us</a></li> 6664<li style="line-height: 10px;"><a id="EHRBRCU" tabindex="0" href="/careers">Careers</a></li> 6665<li style="line-height: 10px;"><a tabindex="0" href="/privacy-policy">Privacy Policy</a></li> 6666<li style="line-height: 10px;"><a tabindex="0" href="/affirm">Affirm</a></li> 6667<li style="line-height: 10px;"><a tabindex="0" href="/our-commitment-accessibility">Accessibility</a></li> 6668<li style="line-height: 10px;"><a tabindex="0" href="/terms-and-conditions">Terms & Conditions</a></li> 6669</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> 6670<li><a tabindex="0" href="/shipping-info">Shipping</a></li> 6671<li><a id="ER5IYQ2" tabindex="0" href="/sales/guest/form">Track Order</a></li> 6672<li><a tabindex="0" href="/returns-exchanges">Returns & Exchanges</a></li> 6673<li><a tabindex="0" href="/moneybackguarantee">Money Back Guarantee</a></li> 6674<li id="W8TRHHE"><a tabindex="0" href="/pro-advantage">Pro Advantage</a></li> 6675<li><a href="/dor-sites">Sales & Use Tax</a></li> 6676</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> 6677<li><a tabindex="0" href="/knowledge-base">FAQs</a></li> 6678<li><a tabindex="0" href="/sample-request">Samples</a></li> 6679<li><a tabindex="0" href="https://flooringinc.cashstar.com/store/recipient?locale=en-us">Gift Cards</a></li> 6680<li><a href="/promotions-disclaimer">Promotions</a></li> 6681</ul></div></div></div></div></div></div></div> 6682</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"> 6683 <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"> 6684 <form class="form subscribe" action="https://www.flooringinc.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm(
6684)" id="newsletter-validate-detail"> 6685 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font"> 6686 <h4 class="text-lg font-medium text-black mb-1 capitalize">Get Ready To Be Floored!</h4> 6687 <p calss="sub_heading capitalize">Join our insider's club</p> 6688 </div> 6689 <div class="flex flex-wrap justify-center gap-2 md:justify-start"> 6690 <label for="newsletter-subscribe" class="sr-only"> 6691 Email Address </label> 6692 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full" placeholder="Enter email address"> 6693 <input name="form_key" type="hidden" value="3V4WQKnndHMXSDau"> <button class="btn btn-primary"> 6694 Subscribe Now </button> 6695 </div> 6696 <div> 6697 <template x-if="displayErrorMessage"> 6698 <p class="flex items-center text-red"> 6699 <span class="inline-block w-8 h-8 mr-3"> 6700 <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"> 6701 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 6702<title>exclamation-circle</title></svg> 6703 </span> 6704 <template x-for="errorMessage in errorMessages"> 6705 <span x-html="errorMessage"></span> 6706 </template> 6707 </p> 6708 </template> 6709 </div> 6710 </form> 6711 <div class="w-full"> 6712 </div> 6713
6713<script> 6714 function initNewsletterForm() { 6715 return { 6716 errors: 0, 6717 hasCaptchaToken: 0, 6718 displayErrorMessage: false, 6719 errorMessages: [], 6720 setErrorMessages(messages) { 6721 this.errorMessages = [messages] 6722 this.displayErrorMessage = this.errorMessages.length 6723 }, 6724 submitForm() { 6725 // Do not rename $form, the variable is expected to be declared in the recaptcha output 6726 const $form = document.querySelector('#newsletter-validate-detail'); 6727 6728 if (this.errors === 0) { 6729 $form.submit(); 6730 } 6731 } 6732 } 6733 } 6734 </script>
6734 6735</div> 6736 6737<div class="pr-4 lg:w-1/4 md:w-1/2"> 6738 6739</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> 6740</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"> 6741 <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> 6742<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> 6743<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> 6744</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> 6745<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> 6746<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> 6747<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> 6748<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> 6749<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> 6750<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> 6751<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> 6752</ul></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 6753.checkout-cart-index .summary-cart .cart-discount{display:block;} 6754.page-with-filter .products.wrapper.mode-list.products-list .item.product .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;} 6755.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;} 6756@media(min-width:1280px){.mega_menu_banner img{max-width: 239px !important;}} 6757.cms-home .catergory_slider_content .product-item-link{font-size: .875rem;line-height: 1.313rem;} 6758@media(min-width: 768px){ 6759.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);}
6759.catergory_slider_content .compare-buttons .orderSampleContent{order:3;} 6760.catergory_slider_content .compare-buttons .ship-fax-plp .ship-iconsada{display: block;} 6761.page-products #maincontent .products.mode-grid .catergory_slider_content .compare-buttons .orderSampleContent{order: 3;} 6762 .category_banner .pagebuilder-column-group .pagebuilder-column-line .pagebuilder-column figure picture{height: 100% !important;object-fit:cover;} 6763[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;} 6764.cms-home [data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product:not(.glider-slide){min-width: 370px;} 6765[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar{width: 10px;} 6766[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-track {background: #ffffff !important;} 6767[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-thumb {background: #ffffff !important;} 6768} 6769@media(min-width: 768px){ 6770 .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;} 6771 .featured_partners .swiper-container:not(.swiper-initialized) .swiper-slide{width: 16%;} 6772 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar{width: 10px;} 6773 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-track {background: #ffffff !important;} 6774 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb {background: #ffffff !important;} 6775 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb:hover {background: #ffffff !important;} 6776} 6777@media(max-width:767px){.page-products #maincontent .toolbar.toolbar-products .pages-items{justify-content: center;gap: 10px;box-shadow: none;}} 6778</style></div></div> 6779</div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
6779<script> 6780 document.addEventListener('DOMContentLoaded', function () { 6781 const gallery = document.querySelector('#gallery'); 6782 const header = document.querySelector('#header'); 6783 if (!gallery || !header) return; 6784 const stickyTop = header.offsetHeight; 6785 // parent/container where sticky should stop 6786 const parent = gallery.parentElement; 6787 function checkSticky() { 6788 const rect = gallery.getBoundingClientRect(); 6789 const parentRect = parent.getBoundingClientRect(); 6790 // sticky active only while parent still has space 6791 const isSticky = 6792 rect.top <= stickyTop && 6793 parentRect.bottom > rect.height + stickyTop; 6794 document.body.classList.toggle('gallery-sticky', isSticky); 6795 } 6796 checkSticky(); 6797 window.addEventListener('scroll', checkSticky); 6798 window.addEventListener('resize', checkSticky); 6799 }); 6800</script>
6800 6801<style> 6802@media (min-width: 1200px) { 6803 .megamenu_items:hover>.megamenu { 6804 max-width: 1440px; 6805 } 6806} 6807.products__recommendations .products_slider .catergory_slider_content .color_counts{margin-bottom: 15px;} 6808html.order_active .page-header #header{z-index: -1;} 6809html.order_active{overflow: hidden !important;} 6810@media(min-width: 768px){.checkout-cart-index #shopping-cart-table .cart.item .item-info td{flex-wrap: nowrap;}} 6811</style> 6812<style> 6813.cms-home .order-free-sample-popup{display: none;} 6814.cms-home.order_active .order-free-sample-popup{display: flex;} 6815@media(min-width:768px){ 6816.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6817.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;} 6818.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{width: 100%;order: 2;display: flex;justify-content: space-between;} 6819.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent .order_btn{margin-top: 10px;} 6820.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{border-top: 0px;padding-top:0px;margin-top: 0px;} 6821.catalog-product-view .products_slider .compare-buttons .qty_fields .btn_cart{width:110px} 6822} 6823@media(max-width:767px){ 6824.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6825.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;width: 100%;} 6826.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compareBtn{order:2;justify-content: flex-start;width: auto;margin-top: 10px;} 6827.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent{order:3;margin-top: 10px;} 6828.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;width: 100%;display: flex;justify-content: space-between;} 6829} 6830#related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 6831@media (min-width: 1024px) { 6832.container { 6833 max-width: 1440px !important; 6834} 6835} 6836.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 20px !important;color: #1e1e1e !important;} 6837.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper{font-size: 20px !important;line-height: 20px !important} 6838.brand_logo_listpage img, div.brand_logo_listpage img{max-width:100px} 6839.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;} 6840 6841.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;} 6842 6843@media(max-width: 767px){ 6844 .related_products_list_view .glider-track{width: 100% !important;flex-wrap: nowrap;align-items: flex-start;} 6845 .related_products_list_view .related_products_list_view_content{width: 100% !important;min-width: 280px;max-width: 280px;} 6846} 6847 6848.dcw-share-cart .space-y-4>:not([hidden])~:not([hidden]) { 6849 --tw-space-y-reverse: 0; 6850 margin-top: calc(1rem * (1 - var(--tw-space-y-reverse))); 6851 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 6852} 6853.dcw-share-cart .bg-black\/50 { 6854 background-color: #00000080; 6855} 6856.dcw-share-cart .z-\[999\] { 6857 z-index: 999; 6858} 6859</style></div></div>
6860<script> 6861 window.addEventListener('init-external-scripts', () => { 6862 const klaviyoScript = document.createElement('script'); 6863 klaviyoScript.src = '//static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg'; 6864 klaviyoScript.type = 'text/javascript'; 6865 klaviyoScript.async = true; 6866 document.head.append(klaviyoScript); 6867 }, {once: true, passive: true}); 6868</script>
vendor: 1 bytes, line 6868
6868
6869<script> 6870 document.addEventListener('DOMContentLoaded', function() { 6871 const buttons = document.querySelectorAll('.cms-home .order_btn'); 6872 buttons.forEach(button => { 6873 button.addEventListener('click', function() { 6874 const modal = this.closest('.orderSampleContent').querySelector('.order-free-sample-popup'); 6875 if (modal) { 6876 modal.style.display = 'block'; 6877 } 6878 }); 6879 }); 6880 6881 // Handle closing the modal 6882 document.querySelectorAll('.cms-home .order-free-sample-popup .closemodal').forEach(closeBtn => { 6883 closeBtn.addEventListener('click', function() { 6884 const modal = this.closest('.order-free-sample-popup'); 6885 if (modal) { 6886 modal.style.display = 'none'; 6887 } 6888 }); 6889 }); 6890 }); 6891</script>
6891 6892
6893<script> 6894 document.addEventListener('DOMContentLoaded', function () { 6895 function updateRatingsClass(ratingEl) { 6896 const hasReviews = ratingEl.querySelector('.bv_numReviews_component_container'); 6897 ratingEl.classList.toggle('no-reviews', !hasReviews); 6898 } 6899 document.querySelectorAll('.ratings').forEach(ratingEl => { 6900 updateRatingsClass(ratingEl); 6901 const observer = new MutationObserver(() => { 6902 updateRatingsClass(ratingEl); 6903 }); 6904 observer.observe(ratingEl, { 6905 childList: true, 6906 subtree: true 6907 }); 6908 }); 6909 }); 6910</script>
6910 6911 6912<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'"/> 6913<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'"/> 6914<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'"/> 6915<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'"/> 6916<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'"/> 6917<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'"/> 6918<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'"/> 6919<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'"/> 6920<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'"/> 6921<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>
6922<script> 6923 function dataServicesShoppingCartContextData() 6924 { 6925 return { 6926 initContext(cartData) { 6927 let contextCartItems = []; 6928 6929 cartData.items.forEach(function (item){ 6930 contextCartItems.push({ 6931 id: item.item_id, 6932 formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), 6933 quantity: item.qty, 6934 product: { 6935 productType: item.product_type, 6936 productId: item.product_id, 6937 name: item.product_name, 6938 sku: item.product_sku, 6939 mainImageUrl : item.product_image.src 6940 }, 6941 prices: { 6942 price: { 6943 value: parseFloat(item.product_price_value ? item.product_price_value : 0) 6944 } 6945 } 6946 }) 6947 }); 6948 6949 magentoStorefrontEvents.context.setShoppingCart({ 6950 id: cartData.dsCartId, 6951 totalQuantity: cartData.summary_count, 6952 prices: { 6953 subtotalExcludingTax: { 6954 value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) 6955 }, 6956 subtotalIncludingTax: { 6957 value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) 6958 } 6959 }, 6960 items: contextCartItems, 6961 possibleOnepageCheckout: cartData.possible_onepage_checkout, 6962 giftMessageSelected : false, 6963 giftWrappingSelected : false 6964 }); 6965 6966 window.dispatchEvent(new Event("shoppingCartContextSet")); 6967 } 6968 } 6969 } 6970</script>
6970 6971<div x-data="dataServicesShoppingCartContextData()" 6972 @private-content-loaded.window="initContext($event.detail.data.cart)"></div> 6973 6974
6975<script> 6976 (function () { 6977 'use strict'; 6978 6979 /** 6980 * Config to determine which element is responsible for the form submission 6981 * 6982 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 6983 */ 6984 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 6985 6986 /** 6987 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 6988 * Call original submit on amrecaptcha-callback event after successful captcha validation. 6989 * 6990 * @return {void} 6991 */ 6992 const wrapFormSubmit = function () { 6993 document.addEventListener("DOMContentLoaded", function () { 6994 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6995 if (formsSelector.length === 0) { 6996 return; 6997 } 6998 6999 document.querySelectorAll(formsSelector)?.forEach(formElement => { 7000 if (!formElement) { 7001 return; 7002 } 7003 7004 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 7005 if (!elementToWrap || !attributeNameToWrap) { 7006 return; 7007 } 7008 7009 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 7010 }); 7011 }); 7012 }; 7013 7014 /** 7015 * Find submit event and DOM element that has this event using formWrapperConfig. 7016 * 7017 * @param {HTMLElement} formElement 7018 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 7019 */ 7020 const resolveElementWrapping = function (formElement) { 7021 let result = { 7022 elementToWrap: undefined, 7023 attributeNameToWrap: undefined 7024 }; 7025 7026 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 7027 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 7028 if (!elementToWrap) { 7029 return; 7030 } 7031 7032 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 7033 (elementAttribute) => { 7034 /** @type {string[]} */ 7035 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 7036 7037 return submitAttributeVariations.some( 7038 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 7039 ) 7040 } 7041 ); 7042 if (!attributeNameToWrap) { 7043 return; 7044 } 7045 7046 result.elementToWrap = elementToWrap; 7047 result.attributeNameToWrap = attributeNameToWrap; 7048 }); 7049 7050 return result; 7051 } 7052 7053 /** 7054 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 7055 * 7056 * @param {HTMLElement} formElement 7057 * @param {HTMLElement} elementToWrap 7058 * @param {string} attributeNameToWrap 7059 */ 7060 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 7061 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 7062 elementToWrap.removeAttribute(attributeNameToWrap); 7063 7064 /** 7065 * To properly set submit attribute - we need to replace '@' with 'x-on:' 7066 * and add preventDefault behaviour 7067 */ 7068 elementToWrap.setAttribute( 7069 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 7070 'amRecaptchaModel.execute($event)' 7071 ); 7072 elementToWrap.setAttribute( 7073 'x-on:amrecaptcha-executable-callback', 7074 originalSubmit 7075 ); 7076 } 7077 7078 wrapFormSubmit(); 7079 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 7080</script>
7080 7081
7082<script> 7083 function initAuthenticationBss() { 7084 return { 7085 open: false, 7086 openLogin : false, 7087 openRegister : false, 7088 openForgot : false, 7089 openCreate : true, 7090 passwordsMatching: true, 7091 openMessage: false, 7092 errors: 0, 7093 message: "", 7094 hasCaptchaToken: 0, 7095 openButtonLogin : false, 7096 openButtonRegister : false, 7097 openSuccessMessage : false, 7098 checkUseReCaptcha: 1, 7099 recaptchaLoading: null, 7100 initSocial() { 7101 if (!this.checkUseReCaptcha) { 7102 return Promise.resolve(); 7103 } 7104 if (this.recaptchaLoading) { 7105 return this.recaptchaLoading; 7106 } 7107 if (typeof window.grecaptcha !== 'undefined') { 7108 this.recaptchaLoading = Promise.resolve(); 7109 return this.recaptchaLoading; 7110 } 7111 this.recaptchaLoading = new Promise((resolve, reject) => { 7112 const recaptchaUrl = `https://www.google.com/recaptcha/api.js?render=6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO&hl=en`; 7113 const script = document.createElement('script'); 7114 script.setAttribute('type', 'text/javascript'); 7115 script.setAttribute('src', recaptchaUrl); 7116 script.onload = () => resolve(); 7117 script.onerror = () => reject(new Error('Failed to load reCAPTCHA')); 7118 document.head.appendChild(script); 7119 }); 7120 return this.recaptchaLoading; 7121 }, 7122 loadRecaptchaOnInteraction() { 7123 if (!this.checkUseReCaptcha) { 7124 return; 7125 } 7126 // Avoid scroll/mousemove/wheel â they fire on load / DevTools / trackpads. 7127 const events = ['pointerdown', 'keydown', 'touchstart']; 7128 const load = () => { 7129 events.forEach((eventName) => { 7130 window.removeEventListener(eventName, load, { capture: true }); 7131 }); 7132 this.initSocial(); 7133 }; 7134 events.forEach((eventName) => { 7135 window.addEventListener(eventName, load, { once: true, passive: true, capture: true }); 7136 }); 7137 }, 7138 checkPasswordsMatch() { 7139 if (document.getElementById('password').value === 7140 document.getElementById('password-confirmation').value) { 7141 this.passwordsMatching = true; 7142 return true; 7143 } 7144 this.passwordsMatching = false; 7145 return false; 7146 }, 7147 submitForm: function () { 7148 const $form = document.querySelector('#login-form'); 7149 if (this.errors === 0) { 7150 this.dispatchLoginRequest($form); 7151 } 7152 }, 7153 submitForgotForm : function () { 7154 const $form = document.querySelector('#fotgot-form'); 7155 if (this.errors === 0) { 7156 this.dispatchForgotRequest($form); 7157 } 7158 }, 7159 submitRegisterForm : function () { 7160 const $form = document.querySelector('#create-form'); 7161 if (this.errors === 0) { 7162 this.dispatchRegisterRequest($form); 7163 } 7164 }, 7165 validateCaptcha : async function () { 7166 await this.initSocial(); 7167 return new Promise((resolve, reject) => { 7168 if (typeof window.grecaptcha === 'undefined') { 7169 return reject(new Error('reCAPTCHA is not available')); 7170 } 7171 grecaptcha.ready(function () { 7172 grecaptcha.execute('6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO', {action: 'submit'}).then(function (token) { 7173 return resolve(token); 7174 }).catch(reject); 7175 }); 7176 }); 7177 }, 7178 dispatchLoginRequest:async function (form) { 7179 if (this.checkUseReCaptcha) { 7180 let token = await this.validateCaptcha(); 7181 if(token) 7182 { 7183 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7184 } 7185 } 7186 const username = this.$refs['customer-email'].value; 7187 const password = this.$refs['customer-password'].value; 7188 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7189 const postUrl = "https://www.flooringinc.com/sociallogin/popup/login/"; 7190 fetch(postUrl, { 7191 headers: { 7192 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7193 }, 7194 body: new URLSearchParams({ 7195 username: username, 7196 password: password, 7197 ['g-recaptcha-response']: recaptchaValue, 7198 form_key: hyva.getFormKey(), 7199 }), 7200 method: "POST", 7201 mode: "cors", 7202 credentials: "include", 7203 }).then(response => { 7204 return response.json() 7205 } 7206 ).then(data => { 7207 this.isLoading = false;
7208 if (data.error) { 7209 this.message = data.message; 7210 this.openMessage = true; 7211 this.errors = 1; 7212 this.hasCaptchaToken = 0; 7213 } else { 7214 this.message = data.message; 7215 this.openMessage = false; 7216 this.openSuccessMessage = true; 7217 if (data.redirect !== '' && data.redirect != null) { 7218 window.location.href = data.redirect; 7219 } else { 7220 location.reload(true); 7221 } 7222 } 7223 }); 7224 }, 7225 dispatchForgotRequest:async function (form) { 7226 if (this.checkUseReCaptcha) { 7227 let token = await this.validateCaptcha(); 7228 if(token) 7229 { 7230 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7231 } 7232 } 7233 const email = form.querySelector("#email_address").value; 7234 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7235 const postUrl = "https://www.flooringinc.com/sociallogin/popup/forgot/"; 7236 fetch(postUrl, { 7237 headers: { 7238 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7239 }, 7240 body: new URLSearchParams({ 7241 email: email, 7242 ['g-recaptcha-response']: recaptchaValue, 7243 form_key: hyva.getFormKey(), 7244 }), 7245 method: "POST", 7246 mode: "cors", 7247 credentials: "include", 7248 }).then(response => { 7249 return response.json() 7250 } 7251 ).then(data => { 7252 this.isLoading = false; 7253 if (data.error) { 7254 this.message = data.message; 7255 this.openMessage = true; 7256 this.errors = 1; 7257 this.hasCaptchaToken = 0; 7258 } else { 7259 if (data.redirect !== '' && data.redirect != null) { 7260 window.location.href = data.redirect; 7261 } else { 7262 location.reload(true); 7263 } 7264 } 7265 }); 7266 }, 7267 dispatchRegisterRequest:async function (form) { 7268 if (this.checkUseReCaptcha) { 7269 let token = await this.validateCaptcha(); 7270 if(token) 7271 { 7272 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7273 } 7274 } 7275 const firstname = form.querySelector("#firstname").value; 7276 const lastname = form.querySelector("#lastname").value; 7277 const email = form.querySelector("#email_address").value; 7278 const password = form.querySelector("#password").value; 7279 const passwordConfirmation = form.querySelector("#password-confirmation").value; 7280 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7281 const postUrl = "https://www.flooringinc.com/sociallogin/popup/create/"; 7282 fetch(postUrl, { 7283 headers: { 7284 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7285 }, 7286 body: new URLSearchParams({ 7287 ['g-recaptcha-response']: recaptchaValue, 7288 firstname: firstname, 7289 lastname: lastname, 7290 email: email, 7291 password: password, 7292 password_confirmation: passwordConfirmation, 7293 form_key: hyva.getFormKey(), 7294 }), 7295 method: "POST", 7296 mode: "cors", 7297 credentials: "include", 7298 }).then(response => { 7299 return response.json() 7300 } 7301 ).then(data => { 7302 this.isLoading = false;
7303 if (data.error) { 7304 this.message = data.message; 7305 this.openMessage = true; 7306 this.hasCaptchaToken = 0; 7307 } else { 7308 this.message = data.message; 7309 this.openMessage = false; 7310 this.openSuccessMessage = true; 7311 if (data.redirect !== '' && data.redirect != null) { 7312 window.location.href = data.redirect; 7313 } else { 7314 location.reload(true); 7315 } 7316 } 7317 }); 7318 }, 7319 eventListeners: { 7320 ['@popup-register.window']($event) { 7321 this.open = true; 7322 this.openRegister = $event.detail.openRegister; 7323 this.openLogin = $event.detail.openLogin; 7324 this.openCreate = $event.detail.openCreate; 7325 this.openButtonLogin = $event.detail.openButtonLogin; 7326 this.openButtonRegister = $event.detail.openButtonRegister; 7327 this.initSocial(); 7328 } 7329 } 7330 } 7331 } 7332</script>
7332 7333 7334<section id="authentication-popup-bss" 7335 x-data="initAuthenticationBss()" x-init="loadRecaptchaOnInteraction()" 7336 @keydown.window.escape="open = false" 7337<div role="dialog" 7338 aria-modal="true" 7339 class="hidden inset-y-0 right-0 z-30 flex max-w-full" 7340 :class="{ 'hidden': !open, 'fixed': open }" 7341 x-bind="eventListeners" 7342> 7343 <div class="relative bg-container-lighter bss_login_popup" 7344 x-show="open" 7345 @click.outside="open = false" 7346 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 7347 x-transition:enter-start="translate-x-full" 7348 x-transition:enter-end="translate-x-0" 7349 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 7350 x-transition:leave-start="translate-x-0" 7351 x-transition:leave-end="translate-x-full" 7352 > 7353 <div 7354 x-show="open" 7355 x-transition:enter="ease-in-out duration-500" 7356 x-transition:enter-start="opacity-0" 7357 x-transition:enter-end="opacity-100" 7358 x-transition:leave="ease-in-out duration-500" 7359 x-transition:leave-start="opacity-100" 7360 x-transition:leave-end="opacity-0" class="absolute flex close_icon" style="width: 11px;height: 11px;background: transparent;"> 7361 <button @click="open = false;" aria-label="Close panel" 7362 class="transition duration-150 ease-in-out text-black cursor-pointer"> 7363 <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> 7364 </button> 7365 </div> 7366 <div class="flex h-full flex-col bss_login_popup_in overflow-y-auto" > 7367 <div class="message mx-4 message-error" x-show="openMessage"> 7368 <div> 7369 <span x-html="message"></span> 7370 </div> 7371 <div class="cursor-pointer" title="close" @click="openMessage = false"> 7372 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 7373 <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 7374 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 7375 </path> 7376 </svg> 7377 </div> 7378 </div> 7379 <div class="message mx-4 message-error success" x-show="openSuccessMessage"> 7380 <div> 7381 <span x-html="message"></span> 7382 </div> 7383 <div class="cursor-pointer" title="close" @click="openSuccessMessage = false"> 7384 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 7385 <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 7386 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 7387 </path> 7388 </svg> 7389 </div> 7390 </div> 7391 <div class="block-customer-login for_got" x-show="openForgot"> 7392 <h2 id="authenticate-customer-login" class="text-size18 font-medium text-darkblack"> 7393 Forgot Password </h2> 7394 <form class="form form-fotgotpassword" 7395 method="post" 7396 @submit.prevent="submitForgotForm();" 7397 id="fotgot-form"> 7398 <fieldset class="fieldset"> 7399 <div class="text-size14 font-normal text-black mb-4">Please enter your email address below to receive a password reset link.</div> 7400 <div class="field email required"> 7401 <label for="email_address" class="label"><span>Email</span></label> 7402 <div class="control"> 7403 <input type="email" name="email" alt="email" id="email_address" class="form-input" required 7404 value=""> 7405 </div> 7406 </div> 7407 </fieldset> 7408 <div class="actions-toolbar"> 7409 <div class="primary"> 7410 <button type="submit" class="action submit primary"><span>Reset My Password</span></button> 7411 </div> 7412 <div class="secondary ml-4 self-center"> 7413 <a class="action back cursor-pointer" 7414 @click ="openForgot = false,openLogin = true, 7415 openButtonLogin = true" 7416 >
7417 <span class="text-size14 font-medium text-black"> 7418 Back </span> 7419 </a> 7420 </div> 7421 </div> 7422 </form> 7423</div> 7424 7425 7426 7427 <div class="w-full"> 7428 <input id="g-recaptcha-response" type="hidden" value=""/> 7429 </div> 7430 <div class="block-new-customer social_login" 7431 x-show="openButtonLogin"> 7432 <h2 id="authenticate-new-customer" class="text-size18 font-semibold text-darkblack"> 7433 Log In </h2> 7434 <div class="block-content"> 7435 <div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 7436 <div class=""> 7437 <div class="sociallogin-buttons" x-ref="loginSocialButton"> 7438 <ul class="sociallogin-clearfix flex flex-wrap"> 7439 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button 7440 googleplus" title="Login with Google"> 7441 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 7442 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" 7443 data-width="630" 7444 data-height="650" 7445 x-ref="googleplus" 7446 @click="popupSocial($refs.googleplus)"> 7447 <span class="sociallogin-button-auto"> 7448 <span class="sociallogin-button-icon"> 7449 </span> 7450 <span class="sociallogin-button-text">Login with Google</span> 7451 </span> 7452 </a> 7453 </li> 7454 </ul> 7455 </div> 7456 7457 </div> 7458 <div style="clear: both;"></div> 7459 </div> 7460 </div> 7461 </div> 7462 <div class="block-customer-login" x-show="openLogin" x-data="{ show: false }"> 7463 <span class="or-label text-size14 font-normal text-darkblack"> Or</span> 7464 7465 <form class="form form-login" 7466 method="post" 7467 @submit.prevent="submitForm();" 7468 id="login-form" 7469 > 7470 <div class="fieldset login"> 7471 <div class="field email required"> 7472 <label class="label hidden" for="customer-email"> 7473 <span>Email Address</span> 7474 </label> 7475 <div class="control"> 7476 <input name="username" 7477 x-ref="customer-email" 7478 @change="errors = 0" 7479 type="email" 7480 required 7481 class="form-input input-text" id="customer-email" placeholder="Email address" 7482 > 7483 </div> 7484 </div> 7485 <div class="field password required" > 7486 <label for="pass" class="label hidden">
7487 <span>Password</span> 7488 </label> 7489 <div class="control"> 7490 <input name="password" 7491 type="password" 7492 class="form-input input-text" id="pass" placeholder="Password" 7493 required 7494 x-ref="customer-password" 7495 @change="errors = 0" 7496 > 7497 </div> 7498 </div> 7499 7500 <input name="context" type="hidden" value="checkout"/> 7501 7502 <div class="actions-toolbar flex justify-between items-center" > 7503 <div class="flex items-center"> 7504 <input type="checkbox" name="show-password" @click="showPassword()" id="show-password" value="" class="checkbox"> 7505 <label class="cursor-pointer text-size12 font-normal text-darkblack" style="margin:0;" for="show-password">Show password</label> 7506 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showPasswordForLable()" id="show-password-label" > 7507 Show Password 7508 </span> --> 7509 </div> 7510 <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="openForgot = true,openLogin = false,openButtonLogin = false"> 7511 Forgot Your Password? </span> 7512 7513 7514 </div> 7515 <div class="actions-toolbar flex justify-between items-center"> 7516 <button type="submit" class="inline-flex btn btn-primary login_btn"> 7517 Log In </button> 7518 </div> 7519 </div> 7520 </form> 7521</div> 7522
7523<script> 7524 function showPassword(){ 7525 var showPwd=document.getElementById("show-password"); 7526 var password=document.getElementById("pass"); 7527 if(showPwd.checked==true) { 7528 password.type="text"; 7529 } else { 7530 password.type="password"; 7531 } 7532 } 7533 function showPasswordForLable(){ 7534 var password=document.getElementById("pass"); 7535 if (password.type === "password") { 7536 password.type = "text"; 7537 } else { 7538 password.type = "password"; 7539 } 7540 } 7541</script>
7541 7542 <div class="block-new-customer new_customer text-center" x-show ="openCreate"> 7543 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 7544 New Customer? </h2> 7545 <div class="block-content"> 7546 <div class="actions-toolbar"> 7547 <a class="block btn btn-primary cursor-pointer text-size18 font-semibold text-custom-blue" 7548 href="https://www.flooringinc.com/customer/account/create/" > 7549 Sign Up Now </a> 7550 </div> 7551 <div class="block-new-customer"> 7552 <h3 class="text-size16 font-normal text-black"> 7553 <a class="block underline" 7554 href="https://www.flooringinc.com/pro-advantage/" 7555 > 7556 Become a Pro </a> 7557 </h3> 7558 </div> 7559 </div> 7560 </div> 7561 <div class="block-new-customer social_login margin" x-show="openButtonRegister"> 7562 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 7563 Social Register </h2> 7564 <div class="block-content"> 7565 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 7566 <div class=""> 7567 <div class="sociallogin-buttons"> 7568 <ul class="sociallogin-clearfix flex flex-wrap"> 7569 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 7570 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 7571 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" 7572 data-width="630" 7573 data-height="650" 7574 x-ref="googleplus" 7575 @click="popupSocial($refs.googleplus)"> 7576 <span class="sociallogin-button-auto"> 7577 <span class="sociallogin-button-icon"> 7578 </span> 7579 <span class="sociallogin-button-text">Register with Google</span> 7580 </span> 7581 </a> 7582 </li> 7583 </ul> 7584 </div> 7585 </div> 7586 <div style="clear: both;"></div> 7587 </div> 7588 </div> 7589 </div> 7590 </div> 7591 </div> 7592</div> 7593</section>
7594<script> 7595 var classLogin = [".checkout-container .opc-wrapper"]; 7596 var classRegister = [""]; 7597 classLogin = classLogin[0].trim().split(/\s+/); 7598 classRegister = classRegister[0].trim().split(/\s+/); 7599 if(classLogin && classLogin.length > 0 && classLogin[0]){ 7600 classLogin.forEach(element => { 7601 var classLoginElement = document.querySelector(element); 7602 var loginSocialButton = document.getElementById('add_button_login_byclass'); 7603 if (classLoginElement && loginSocialButton) { 7604 const cloneLoginSocialButton = loginSocialButton.cloneNode(true); 7605 classLoginElement.appendChild(cloneLoginSocialButton); 7606 cloneLoginSocialButton.style.display='block'; 7607 } 7608 }); 7609 } 7610 7611 if(classRegister && classRegister.length > 0 && classRegister[0]){ 7612 classRegister.forEach(element => { 7613 var classRegisterElement = document.querySelector(element); 7614 var registerSocialButton = document.getElementById('add_button_register_byclass'); 7615 if (classRegisterElement && registerSocialButton) { 7616 const cloneRegisterSocialButton = registerSocialButton.cloneNode(true); 7617 classRegisterElement.appendChild(cloneRegisterSocialButton); 7618 cloneRegisterSocialButton.style.display='block'; 7619 } 7620 }); 7621 } 7622 7623 function bssButtonSocial() { 7624 return { 7625 renderShowmore : function (element) { 7626 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 7627 for (let i = 0; i <= socialButton.length - 1; i++) { 7628 socialButton[i].style.display = 'block'; 7629 } 7630 element.querySelector('.sociallogin-showmore').style.display = 'none'; 7631 }, 7632 popupSocial: function (element) { 7633 var href = element.getAttribute('data-href'); 7634 var width = element.getAttribute('data-width'); 7635 var height = element.getAttribute('data-height'); 7636 var popup_window = null; 7637 if (!width) { 7638 width = 650; 7639 } 7640 7641 if(!height) { 7642 height = 350; 7643 } 7644 7645 var left = parseInt((window.innerWidth- width) / 2); 7646 var top = parseInt((window.innerHeight - height) / 2); 7647 7648 var params = [ 7649 'resizable=yes', 7650 'scrollbars=no', 7651 'toolbar=no', 7652 'menubar=no', 7653 'location=no', 7654 'directories=no', 7655 'status=yes', 7656 'width='+ width, 7657 'height='+ height, 7658 'left='+ left, 7659 'top='+ top 7660 ]; 7661 7662 if(popup_window) { 7663 popup_window.close(); 7664 } 7665 7666 if(href) { 7667 popup_window = window.open(href,'',params.join(',')); 7668 popup_window.focus(); 7669 7670 }else{ 7671 alert('This Login Application was not configured correctly. Please contact our customer support.'); 7672 } 7673 return false; 7674 } 7675 } 7676 } 7677 7678</script>
7678 7679 7680 7681 7682
7682<script> 7683 (() => { 7684 function changeNoCookieDomain() { 7685 const categoryKey = "marketing"; 7686 if (! prCookieConsentApi.isAllowedCategory(categoryKey)) { 7687 return; 7688 } 7689 7690 let iframes = document.querySelectorAll('iframe'), 7691 youtubeNoCookieIframes = Array.from(iframes) 7692 .filter((iframe) => iframe.src.indexOf('youtube-nocookie.com') !== -1); 7693 7694 youtubeNoCookieIframes.forEach((iframe) => { 7695 iframe.src = iframe.src.replace('youtube-nocookie.com', 'youtube.com'); 7696 }); 7697 } 7698 7699 if (prCookieConsentApi) { 7700 changeNoCookieDomain(); 7701 return; 7702 } 7703 7704 document.addEventListener('pr-cookie-consent-api:configured', changeNoCookieDomain); 7705 })(); 7706 </script>
7706 7707
7708<script> 7709 'use strict'; 7710 7711 (() => { 7712 window.addEventListener('DOMContentLoaded', () => { 7713 if (document.querySelectorAll('lite-youtube').length > 0) { 7714 const link = document.createElement('link'), 7715 script = document.createElement('script'); 7716 7717 link.rel = 'stylesheet'; 7718 link.type = 'text/css'; 7719 link.href = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fcss\u002Flite\u002Dyt\u002Dembed.min.css'; 7720 document.head.appendChild(link); 7721 7722 script.type = 'text/javascript'; 7723 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fjs\u002Flite\u002Dyt\u002Dembed.min.js'; 7724 document.head.appendChild(script); 7725 } 7726 }); 7727 })(); 7728</script>
vendor: 1 bytes, line 7728
7728
7729<script data-mfmofile="true"> 7730 document.addEventListener("DOMContentLoaded", function() { 7731 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 7732 !function (f, b, e, v, t, s) { 7733 if(f.mfytwcss)return; 7734 f.mfytwcss=1; 7735 t = b.createElement(e); 7736 t.rel = 'stylesheet'; 7737 t.type = 'text/css'; 7738 t.href = v; 7739 s = b.getElementsByTagName('HEAD')[0]; 7740 s.appendChild(t) 7741 }(window, document, 'link', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/css/youtubewidget.min.css'); 7742 } 7743 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 7744 !function (f, b, e, v, t, s) { 7745 if(f.mfytwjs)return; 7746 f.mfytwjs=1; 7747 t = b.createElement(e); 7748 t.type = 'text/javascript'; 7749 t.src = v; 7750 s = b.getElementsByTagName('HEAD')[0]; 7751 s.appendChild(t) 7752 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/iframe.min.js'); 7753 } 7754 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 7755 !function (f, b, e, v, t) { 7756 if(f.mflinkjs)return; 7757 f.mflinkjs=1; 7758 t = b.createElement(e); 7759 t.type = 'text/javascript'; 7760 t.src = v; 7761 s = b.getElementsByTagName('HEAD')[0]; 7762 s.appendChild(t) 7763 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/link.min.js'); 7764 } 7765 }); 7766</script>
7766 7767 7768 <div id="pr-gpc-notification-modal" style="display: none;"> 7769 <div class="pr-gpc-notification-wrap"> 7770 <h2>Your Opt-Out Preferences Honored</h2> 7771<p>Your browser's privacy preference (GPC) has been detected.</p> 7772<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> 7773</div> </div> 7774 7775
7775<script type="text/x-magento-init" nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 7776 { 7777 "#pr-gpc-notification-modal": { 7778 "Plumrocket_GlobalPrivacyControl/js/opt-out-notification": {} 7779 } 7780 } 7781 </script>
7781 7782 7783
7784<script> 7785 (() => { 7786 function src_default(Alpine) { 7787 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 7788 let evaluate = evaluateLater(expression); 7789 let options = { 7790 rootMargin: getRootMargin(modifiers), 7791 threshold: getThreshhold(modifiers) 7792 }; 7793 let observer = new IntersectionObserver((entries) => { 7794 entries.forEach((entry) => { 7795 if (entry.isIntersecting === (value === "leave")) 7796 return; 7797 evaluate(); 7798 modifiers.includes("once") && observer.disconnect(); 7799 }); 7800 }, options); 7801 observer.observe(el); 7802 cleanup(() => { 7803 observer.disconnect(); 7804 }); 7805 }); 7806 } 7807 function getThreshhold(modifiers) { 7808 if (modifiers.includes("full")) 7809 return 0.99; 7810 if (modifiers.includes("half")) 7811 return 0.5; 7812 if (!modifiers.includes("threshold")) 7813 return 0; 7814 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 7815 if (threshold === "100") 7816 return 1; 7817 if (threshold === "0") 7818 return 0; 7819 return Number(`.${threshold}`); 7820 } 7821 function getLengthValue(rawValue) { 7822 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 7823 return match ? match[1] + (match[2] || "px") : void 0; 7824 } 7825 function getRootMargin(modifiers) { 7826 const key = "margin"; 7827 const fallback = "0px 0px 0px 0px"; 7828 const index = modifiers.indexOf(key); 7829 if (index === -1) 7830 return fallback; 7831 let values = []; 7832 for (let i = 1; i < 5; i++) { 7833 values.push(getLengthValue(modifiers[index + i] || "")); 7834 } 7835 values = values.filter((v) => v !== void 0); 7836 return values.length ? values.join(" ").trim() : fallback; 7837 } 7838 7839 document.addEventListener("alpine:init", () => { 7840 window.Alpine.plugin(src_default); 7841 }); 7842 })(); 7843</script>
vendor: 1 bytes, line 7843
7843
7844<script> 7845 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"})) { 7846 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 7847 } 7848</script>
vendor: 1 bytes, line 7848
7848
7849<script> 7850 (function () { 7851 "use strict"; 7852 7853 const hasAlpine = new Promise(resolve => { 7854 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 7855 }); 7856 7857 const hasInteract = new Promise(resolve => { 7858 (events => { 7859 const onInteract = () => { 7860 resolve(); 7861 events.forEach(type => window.removeEventListener(type, onInteract)); 7862 } 7863 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 7864 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7865 }); 7866 7867 const onIntersect = (el) => { 7868 return new Promise(resolve => { 7869 const observer = new IntersectionObserver(entries => { 7870 for (const entry of entries) { 7871 if (entry.isIntersecting) { 7872 observer.disconnect() 7873 resolve(); 7874 } 7875 } 7876 }, {}); 7877 observer.observe(el); 7878 }); 7879 } 7880 7881 function runComponent(el) { 7882 hasAlpine.then(() => { 7883 el.removeAttribute('x-ignore'); 7884 queueMicrotask(() => Alpine.initTree(el)); 7885 }); 7886 } 7887 7888 function initDeferredComponents() { 7889 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 7890 el.setAttribute('x-ignore', ''); 7891 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 7892 switch (deferUntil) { 7893 case 'interact': 7894 hasInteract.then(() => runComponent(el)); 7895 break; 7896 case 'intersect': 7897 onIntersect(el).then(() => runComponent(el)) 7898 break; 7899 case 'idle': 7900 window.requestIdleCallback 7901 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 7902 : setTimeout(() => runComponent(el), 4000); 7903 break; 7904 case 'eager': 7905 runComponent(el); 7906 break; 7907 default: 7908 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 7909 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 7910 } 7911 } 7912 }); 7913 } 7914 7915 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 7916 })() 7917</script>
7917 7918
7919<script type="module" 7920 src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_Theme/js/alpine3.min.js" 7921 defer 7922 crossorigin 7923></script>
vendor: 1 bytes, line 7923
7923
7924<script> 7925 'use strict'; 7926 function dispatchMessages(messages, hideAfter) { 7927 const messagesEvent = new CustomEvent("messages-loaded", { 7928 detail: { 7929 messages: messages, 7930 hideAfter: hideAfter 7931 } 7932 }); 7933 window.dispatchEvent(messagesEvent); 7934 } 7935 7936 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7937 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7938 } 7939 7940 (function( hyva, undefined ) { 7941 7942 hyva.initFormKey = () => { 7943 const inputSelector = 'input[name="form_key"]', 7944 formKey = hyva.getFormKey(); 7945 7946 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 7947 input.value = formKey 7948 }); 7949 } 7950 7951 hyva.initMessages = () => { 7952 try { 7953 const messages = hyva.getCookie('mage-messages'); 7954 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 7955 7956 dispatchMessages(window.mageMessages); 7957 7958 // empty `mage-messages` cookie 7959 const skipSetDomain = true; 7960 hyva.setCookie('mage-messages','', -1, skipSetDomain); 7961 7962 } catch (error) { 7963 console.warn('Error parsing Cookie Messages:', error); 7964 } 7965 } 7966 7967 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 7968 hyva.alpineInitialized(hyva.initMessages) 7969 7970 }( window.hyva = window.hyva || {} )); 7971</script>
vendor: 1 bytes, line 7971
7971
7972<script> 7973 'use strict'; 7974 { 7975 const private_content_key = 'mage-cache-storage'; 7976 const private_content_expire_key = 'mage-cache-timeout'; 7977 const private_content_version_key = 'private_content_version'; 7978 const section_data_ids_key = 'section_data_ids'; 7979 const mage_cache_session_id_key = 'mage-cache-sessid'; 7980 const last_visited_store_key = 'last_visited_store'; 7981 7982 const ttl = 3600; 7983 7984 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7985 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7986 } 7987 7988 function loadSectionData () { 7989 const browserStorage = hyva.getBrowserStorage(); 7990 if (!browserStorage) { 7991 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7992 [{ 7993 type: "warning", 7994 text: "Please enable LocalStorage in your browser." 7995 }] 7996 ); 7997 return; 7998 } 7999 try { 8000 let isInvalid = false; 8001 8002 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 8003 isInvalid = true; 8004 } 8005 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 8006 8007 if (!hyva.getCookie(mage_cache_session_id_key)) { 8008 isInvalid = true; 8009 browserStorage.removeItem(private_content_key); 8010 const skipSetDomain = true; 8011 const days = false; 8012 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 8013 } 8014 8015 const cookieVersion = hyva.getCookie(private_content_version_key); 8016 const storageVersion = browserStorage.getItem(private_content_version_key); 8017 8018 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 8019 isInvalid = true; 8020 } 8021 8022 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 8023 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 8024 browserStorage.removeItem(private_content_key); 8025 } 8026 8027 if (isInvalid && cookieVersion) { 8028 fetchPrivateContent([]); 8029 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 8030 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 8031 if ( 8032 privateContent && 8033 privateContentExpires && 8034 privateContent.cart && 8035 privateContent.customer 8036 ) { 8037 dispatchPrivateContent(privateContent); 8038 } else { 8039 fetchPrivateContent([]); 8040 } 8041 } else { 8042 if (document.getElementById('default-section-data')) { 8043 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 8044 dispatchPrivateContent(privateContent); 8045 } else { 8046 dispatchPrivateContent({}); 8047 } 8048 } 8049 8050 } catch (error) { 8051 console.warn('Error retrieving Private Content:', error); 8052 } 8053 } 8054 8055 hyva.alpineInitialized(loadSectionData) 8056 window.addEventListener('reload-customer-section-data', loadSectionData); 8057 8058 function dispatchPrivateContent(data) { 8059 const privateContentEvent = new CustomEvent("private-content-loaded", { 8060 detail: { 8061 data: data 8062 } 8063 }); 8064 window.dispatchEvent(privateContentEvent); 8065 } 8066 8067 function fetchPrivateContent(sections) { 8068 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 8069 method: 'GET', 8070 headers: { 8071 'Content-Type': 'application/json', 8072 'X-Requested-With': 'XMLHttpRequest' 8073 } 8074 }) 8075 .then(response => response.json()) 8076 .then( 8077 data => { 8078 if (data) { 8079 try { 8080 const browserStorage = hyva.getBrowserStorage(); 8081 8082 // merge new data preserving non-invalidated sections 8083 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 8084 8085 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 8086 delete oldSectionData['checkout-data']; 8087 } 8088 const newSectionData = Object.assign(oldSectionData, data); 8089 8090 dispatchPrivateContent(newSectionData); 8091 8092 // don't persist messages, they've been dispatched already 8093 if (newSectionData.messages && newSectionData.messages.messages ) { 8094 newSectionData.messages.messages = []; 8095 } 8096 8097 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 8098 8099 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 8100 browserStorage.setItem(private_content_expire_key, expiresAt); 8101 8102 const newCookieVersion = hyva.getCookie(private_content_version_key); 8103 browserStorage.setItem(private_content_version_key, newCookieVersion); 8104 8105 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 8106 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 8107 hyva.setCookie( 8108 section_data_ids_key, 8109 JSON.stringify( 8110 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 8111 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 8112 return sectionDataIds; 8113 }, {}) 8114 ), 8115 false, 8116 true 8117 ); 8118 } catch (error) { 8119 console.warn("Couldn't store privateContent", error); 8120 } 8121 } 8122 } 8123 ); 8124 } 8125 } 8126</script>
vendor: 1 bytes, line 8126
8126
8127<script> 8128 (() => { 8129 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 8130 })() 8131</script>
vendor: 1 bytes, line 8131
8131
8132<script> 8133 (events => { 8134 const dispatchUserInteractionEvent = () => { 8135 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 8136 window.dispatchEvent(new Event('init-external-scripts')) 8137 }; 8138 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 8139 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 8140</script>
8140 8141<style> 8142[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: -2px 0 0 0 !important;display: flex !important;} 8143@media(max-width: 767px){ 8144[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: 4px 0 0 0 !important;} 8145} 8146@media screen and (min-width: 768px) and (max-width: 1440px) { 8147 .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 18px !important;} 8148 .product-item .product-info .price-box .price-container .price-wrapper{font-size: 18px;} 8149} 8150@media(max-width: 1550px){ 8151.products__recommendations .product-slider .glider-track .recommended-slider-item{min-width:auto;} 8152} 8153.page-products .spot-light .catergory_slider_content{border-radius: 10px;} 8154.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;} 8155@media(max-width: 767px){ 8156.page-products .spot-light .catergory_slider_content .product-info{padding-left: 0 !important;padding-right: 0px !important;} 8157} 8158.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; 8159} 8160.page-products .spot-light .spot-bottom .order_btn:hover{background: #15324c !important;transition-duration: .15s;} 8161.page-products .spot-light .catergory_slider_content .color_counts .color_count{font-size: 12px;color: rgb(127 127 127 / var(--tw-text-opacity)} 8162 8163 8164.category-top-filter .pagebuilder-column h3 span, .category-top-filter .pagebuilder-column h3 span a, .category-top-filter .pagebuilder-column h3 a{display: block;} 8165.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label {display: block;} 8166.catalog-product-view .product-info-main .color_swatches .swatch-attribute-options .select_none.swatch-option{display: none;} 8167@media(min-width: 768px){ 8168 .checkout-cart-index #shopping-cart-table .cart.item .item-info td.col.item{flex-wrap: nowrap;} 8169} 8170@media(min-width: 1500px){ 8171 .checkout-cart-index #shopping-cart-table .col.qty{min-width: 169px;max-width: 169px;width: 169px;} 8172} 8173@media only screen and (max-width: 1340px) and (min-width: 1000px){ 8174 .checkout-cart-index #maincontent #shopping-cart-table .product-item-details{max-width: 40%;} 8175} 8176</style>
8177<script> 8178document.addEventListener('DOMContentLoaded', function() { 8179 if (window.innerWidth <= 767) { 8180 document.querySelectorAll('.page-with-filter.page-products .sidebar .filter-content .card .filter-options-title').forEach(function(title) { 8181 const span = title.querySelector('span'); 8182 if (span && span.textContent.trim().includes('Revenue Ranking')) { 8183 const parentCard = title.closest('.card'); 8184 if (parentCard && !parentCard.id) { 8185 parentCard.id = 'filter-id-revenue_ranking'; 8186 } 8187 } 8188 }); 8189 } 8190}); 8191</script>
8191 8192<style> 8193.page-with-filter.page-products .sidebar .filter-content .card#filter-id-revenue_ranking{display: none;} 8194.checkout-index-index .kl_sms_phone_number-field{margin-bottom: 20px;} 8195@media(min-width: 768px){ 8196 .catalog-product-view .modal.order-free-sample-popup .right .order-free-sample-prod-info .product-info:after{right: -10px;top: -10px;} 8197} 8198@media(max-width: 767px){ 8199 .catalog-product-view .order-free-sample-popup .border .product-info:after{left: 35px;} 8200} 8201.checkout-index-index .notification4 {display: none} 8202 #related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 8203</style>
8204<script> 8205 function initConfigurableOptions(productId, optionConfig) { 8206 8207 function findPathParam(key) { 8208 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 8209 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 8210 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 8211 for (let i = 0; i < pathParts.length; i += 2) { 8212 if (pathParts[i] === key && pathParts.length > i) { 8213 return pathParts[i + 1]; 8214 } 8215 } 8216 } 8217 8218 return { 8219 optionConfig, 8220 productId, 8221 attributeCode:'', 8222 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 8223 ssrGalleryChildId: 0, 8224 allowedAttributeOptions: [], 8225 selectedValues: [], 8226 init() { 8227 this.checkIsFirst(); 8228 this.findAllowedAttributeOptions(); 8229 this.$nextTick(() => { 8230 if (typeof this.optionConfig.defaultValues === 'object') { 8231 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 8232 this.changeOption(optionId, value + ''); 8233 } 8234 } 8235 }); 8236 }, 8237 checkIsFirst() { 8238 this.isLoadedFirst = true; 8239 setTimeout(() => { 8240 this.isLoadedFirst = false; 8241 }, "3000"); 8242 }, 8243 findSimpleIndex() { 8244 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 8245 }, 8246 calculateSimpleIndexForPartialSelection(selectedValues) { 8247 if (selectedValues.length === 0) return 0; 8248 let productIndexIds = Object.keys(this.optionConfig.index); 8249 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 8250 const productsWithAttributeMatch = selectedValues[attribute] 8251 ? productIndexIds.filter((productIndex) => { 8252 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 8253 }) 8254 : []; 8255 8256 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 8257 }) 8258 return productIndexIds[0]; 8259 }, 8260 calculateSimpleIndexForFullSelection(selectedValues) { 8261 const productIndexes = this.optionConfig.index; 8262 return Object.keys(productIndexes).find(productIndex => { 8263 const productCandidateOptions = productIndexes[productIndex]; 8264 8265 for (const productOption in productCandidateOptions) { 8266 if ( 8267 ! selectedValues[productOption] || 8268 selectedValues[productOption] !== productCandidateOptions[productOption] 8269 ) { 8270 return false; 8271 } 8272 } 8273 return productIndex; 8274 }); 8275 }, 8276 productIndex: 0, 8277 findAllowedAttributeOptions() { 8278 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 8279 }, 8280 calculateAllowedAttributeOptions(selectedValues) { 8281 const allAttributes = this.optionConfig.attributes; 8282 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 8283 return a.position - b.position 8284 }); 8285 8286 const selectionWithoutAttr = attrId => { 8287 return Object.keys(selectedValues).reduce((acc, id) => { 8288 if (id !== attrId) acc[id] = selectedValues[id]; 8289 return acc; 8290 }, {}) 8291 } 8292 8293 const newAllowedAttributeOptions = []; 8294 8295 allAttributesSorted.forEach(attribute => { 8296 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr(attribute.id)); 8297 if (attribute?.code === 'incstores_pim_color_axis') { 8298 newAllowedAttributeOptions[attribute.id] = 8299 allAttributes[attribute.id].options 8300 .filter(option => { 8301 return !!option.products.find(product => availableIndexes.includes(product)); 8302 }) 8303 .sort((a, b) => {
8304 const cheapestA = this.findCheapestProductForPartialSelectionForSort({ 8305 ...selectedValues, 8306 [attribute.id]: a.id 8307 }); 8308 8309 const cheapestB = this.findCheapestProductForPartialSelectionForSort({ 8310 ...selectedValues, 8311 [attribute.id]: b.id 8312 }); 8313 8314 if (!cheapestA && !cheapestB) return 0; 8315 if (!cheapestA) return 1; 8316 if (!cheapestB) return -1; 8317 8318 const priceA = this.optionConfig.optionPrices[cheapestA].customPrice.amount; 8319 const priceB = this.optionConfig.optionPrices[cheapestB].customPrice.amount; 8320 8321 return priceA - priceB; 8322 }); 8323 } else { 8324 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 8325 return !!option.products.find(product => { 8326 //====== For Custom Design link - fetch child product id on page load START ====== 8327 if(document.querySelector('input[name="selected_option_child_id"]')){ 8328 if(document.querySelector('input[name="selected_option_child_id"]').value == ''){ 8329 document.querySelector('input[name="selected_option_child_id"]').value = product; 8330 } 8331 } 8332 //====== For Custom Design link - fetch child product id on page load END ====== 8333 return availableIndexes.includes(product); 8334 }) 8335 }); 8336 } 8337 }); 8338 return newAllowedAttributeOptions; 8339 }, 8340 calculateAvailableProductIndexes(selectedOptions) { 8341 if (Object.keys(selectedOptions).length === 0) { 8342 return Object.keys(this.optionConfig.index); 8343 } 8344 8345 const selectedIds = Object.keys(selectedOptions); 8346 if (Object.values(this.optionConfig.salable || {}).length) { 8347 const selectedOptionIndexes = selectedIds.map(attrId => { 8348 const optionValue = selectedOptions[attrId]; 8349 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 8350 }) 8351 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 8352 return acc.filter(index => optionIndexes.includes(index)); 8353 }); 8354 } else { 8355 const productIndexes = this.optionConfig.index; 8356 return Object.keys(productIndexes).filter(index => { 8357 return selectedIds.find( 8358 attrId => productIndexes[index][attrId] === `${selectedOptions[attrId]}` 8359 ) 8360 }); 8361 } 8362 }, 8363 findAttributeByOptionId(optionId) { 8364 for (const attributeId in this.optionConfig.attributes) { 8365 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 8366 if (attributeOptions.find(option => option.id === optionId)) { 8367 return attributeId; 8368 } 8369 } 8370 }, 8371 getAllowedAttributeOptions(attributeId) { 8372 return this.allowedAttributeOptions[attributeId] || [] 8373 }, 8374 getProductIdsForOption(option) { 8375 const attributeId = this.findAttributeByOptionId(option.id); 8376 const allOptions = this.optionConfig.attributes[attributeId]; 8377 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 8378 return opt && opt.products 8379 ? opt.products 8380 : []; 8381 }, 8382 findProductIdsForPartialSelection(optionSelection) { 8383 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 8384 const newCandidates = this.getProductIdsForOption({id: optionId}); 8385 return candidates === null 8386 ? newCandidates 8387 : candidates.filter(productId => newCandidates.includes(productId)); 8388 }, null); 8389 return candidateProducts || []; 8390 },
8391 findCheapestProductForPartialSelection(optionSelection) { 8392 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 8393 return candidateProducts.reduce((cheapest, simpleIdx) => { 8394 // in the first iteration we start with simpleIdx as the currently cheapest product 8395 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 8396 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 8397 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 8398 ? simpleIdx 8399 : cheapest; 8400 }, 0) 8401 }, 8402 findCheapestProductForPartialSelectionForSort(optionSelection) { 8403 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 8404 return candidateProducts.reduce((cheapest, simpleIdx) => { 8405 // in the first iteration we start with simpleIdx as the currently cheapest product 8406 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 8407 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].customPrice.amount; 8408 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].customPrice.amount 8409 ? simpleIdx 8410 : cheapest; 8411 }, 0) 8412 }, 8413 findProductIdToUseForOptionPrice(option) { 8414 // try to find a product for a complete selection 8415 const attributeId = this.findAttributeByOptionId(option.id); 8416 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 8417 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 8418 // if there is no complete selection, use the cheapest product for the option 8419 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 8420 }, 8421 getAttributeOptionLabel(option) { 8422 const optionProduct = this.findProductIdToUseForOptionPrice(option); 8423 if ((! optionProduct) || (optionProduct === this.productIndex)) { 8424 return option.label; 8425 } 8426 8427 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 8428 8429 if (this.optionConfig.optionPrices[optionProduct]) { 8430 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 8431 if (optionPrice !== currentPrice){ 8432 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 8433 } 8434 } 8435 return option.label; 8436 }, 8437 getOptionPriceAdjustmentBasePrice() { 8438 if (this.optionConfig.optionPrices[this.productIndex]) { 8439 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 8440 } 8441 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 8442 return this.optionConfig.optionPrices[cheapestForSelection] 8443 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 8444 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 8445 }, 8446 changeOption(optionId, value) { 8447 if (value !== '' 8448 && typeof this.optionIsEnabled === 'function' 8449 && !this.optionIsEnabled(optionId, value)) { 8450 return; 8451 } 8452 var checkbox = document.getElementById('overage_percent'); 8453 if(checkbox){ 8454 checkbox.checked = true; // Check the checkbox 8455 } 8456 var galleryImgOpacity = document.querySelector('#gallery .prod_slider img.first-image'); 8457 if (galleryImgOpacity) { 8458 galleryImgOpacity.classList.add('opacity-0'); 8459 } 8460 if (value === '') { 8461 // create new array so the length property is reset if no option is selected (avoiding delete) 8462 this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => { 8463 if (opt !== optionId) { 8464 newSelection[opt] = val; 8465 } 8466 return newSelection; 8467 }, []); 8468 } else { 8469 const currentUrl = window.location.href; 8470 // Create a URL object 8471 const url = new URL(currentUrl); 8472 // Use searchParams to get the color option 8473 const colorOption = url.searchParams.get('color-option'); 8474 const variantOption = url.searchParams.get('variant-option'); 8475 if(colorOption!==null && variantOption!==null){ 8476 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8477 { 8478 this.selectedValues[optionId] = colorOption; 8479 } 8480 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 8481 { 8482 this.selectedValues[optionId] = variantOption; 8483 } 8484 } 8485 else if(colorOption!==null){ 8486 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8487 { 8488 this.selectedValues[optionId] = colorOption; 8489 } 8490 8491 } 8492 else if(this.isLoadedFirst == true && (0 > 0 || 0 > 0)) 8493 { 8494 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8495 { 8496 this.selectedValues[optionId] = '0'; 8497 } 8498 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 8499 { 8500 this.selectedValues[optionId] = '0'; 8501 } 8502 } 8503 else 8504 { 8505 this.selectedValues[optionId] = value; 8506 } 8507 8508 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 8509 if (addToCartButton) { 8510 if (!addToCartButton.classList.contains('pointer-events-none')) { 8511 addToCartButton.classList.add('pointer-events-none'); 8512 addToCartButton.classList.add('opacity-50'); 8513 } 8514 } 8515 8516 var productId = this.findProductIdsForPartialSelection(this.selectedValues)[0]; 8517 var baseUrl = "https://www.flooringinc.com/"; 8518 8519 if (typeof productId === 'undefined') { 8520 let attributeCode = this.optionConfig.attributes[optionId]['code']; 8521 setTimeout(() => { 8522 if (attributeCode == 'incstores_pim_color_axis') { 8523 if (typeof this.autoSelectCompatibleOtherOption === 'function') { 8524 this.autoSelectCompatibleOtherOption(optionId); 8525 } 8526 } else if (attributeCode == 'incstores_pim_variant_axis' 8527 || attributeCode == 'product_option') { 8528 if (typeof this.autoSelectCompatibleColorOption === 'function') { 8529 this.autoSelectCompatibleColorOption(optionId); 8530 } 8531 } 8532 }, 300); 8533 } else { 8534 var fetchUrl = baseUrl+'customattribute/index/index/productId/'+productId; 8535 8536 fetch(fetchUrl) 8537 .then(response => response.json()) 8538 .then(data => { 8539 8540 if (document.getElementById('dimensions-attributes')) { 8541 document.getElementById('dimensions-attributes').innerHTML= data.detailsHtml.dimensionsHtml; 8542 } 8543 8544 if (document.getElementById('details-attributes')) { 8545 document.getElementById('details-attributes').innerHTML= data.detailsHtml.productDetails; 8546 } 8547 8548 if (document.getElementById('ship-to-text')) { 8549 document.getElementById('ship-to-text').value= data.shipToText; 8550 } 8551 8552 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 8553 if (addToCartButton) { 8554 addToCartButton.classList.remove('pointer-events-none'); 8555 addToCartButton.classList.remove('opacity-50'); 8556 } 8557 }) 8558 .catch(error => { 8559 console.log(error); 8560 }); 8561 } 8562 8563 } 8564 this.findSimpleIndex(); 8565 this.findAllowedAttributeOptions(); 8566 this.updateCalculatorType();// custom coding 8567 this.updateMinRollcut();// custom coding 8568 this.updateMaxRollLengthRestriction();// custom coding 8569 this.updateTileSizeArea(); // custom coding 8570 this.updateExactWidth(); // custom coding 8571 this.updateExactLength(); // custom coding 8572 this.updateExactHeight(); // custom coding 8573 this.updateCoveragePerCase(); // custom coding 8574 this.updateTileMinQty(); // custom coding 8575 this.updateShippingDetails(); // custom coding 8576 this.updatePrices(); 8577 this.updateSquareFootage(); 8578 8579 //If the page loads first time it will stop the gallery change, so configurable product image will display 8580 if (!this.isLoadedFirst) { 8581 this.updateGallery(); 8582 } 8583 8584 //====== For Custom Design link - fetch child product id when option clicked START ====== 8585 if(document.querySelector('input[name="selected_option_child_id"]')){ 8586 document.querySelector('input[name="selected_option_child_id"]').value = this.productIndex; 8587 } 8588 if(document.querySelector('input[name="custom_length"]') && document.getElementById('roll_length')){ 8589 document.querySelector('input[name="custom_length"]').value = document.getElementById('roll_length').value; 8590 } 8591 //====== For Custom Design link - fetch child product id when option clicked END ====== 8592 window.dispatchEvent( 8593 new CustomEvent( 8594 'configurable-selection-changed', 8595 { 8596 detail: { 8597 productId: this.productId, 8598 optionId: optionId, 8599 value: value, 8600 productIndex: this.productIndex, 8601 selectedValues: this.selectedValues, 8602 attributeCode: this.optionConfig.attributes[optionId]['code'], 8603 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 8604 } 8605 } 8606 ) 8607 ); 8608 8609 /* =============================== disabled product option checking & remove START =============== */ 8610 if (!this.optionConfig?.ship_region_enabled 8611 && document.querySelector('.swatch-attribute .selectOptionColor') 8612 ) { 8613 var quickship_lebel_should_show; 8614 var quickship_active_color_option_exist = 0; 8615 setTimeout(() => { 8616 document.querySelectorAll('.swatch-attribute .selectOptionColor').forEach(function(option_box) { 8617 if (!option_box.querySelector('div, label')) { 8618 option_box.remove(); 8619 } 8620 }); 8621 8622 }, 300); 8623 } 8624 /* =============================== disabled product option checking & remove END =============== */ 8625 8626 /* ========== remove validation when click on available color start =============== */ 8627 if(document.querySelector('.normal_color_swatch_option .selectOptionColor') ){ 8628 setTimeout(() => { 8629 const colorBoxes = document.querySelectorAll( 8630 '.normal_color_swatch_option .selectOptionColor' 8631 ); 8632 var colorNotAvailable = 0; 8633 const colorerrorDiv = document.getElementById('normal-color-swatch-option-error-msg'); 8634
8635 colorBoxes.forEach((colorBox) => { 8636 if (colorBox.querySelector('.select_none label.checked')) { 8637 colorNotAvailable = 1; 8638 } 8639 }); 8640 if (!colorNotAvailable){ 8641 colorerrorDiv.textContent = ''; 8642 colorerrorDiv.style.display = 'none'; 8643 } 8644 8645 }, 300); 8646 } 8647 /* ========== remove validation when click on available color end =============== */ 8648 8649 /* =============================== color label show / hide if color option not showing END =============== */ 8650 8651 /* =============================== other label show / hide if the option not showing START =============== */ 8652 if (typeof this.syncOtherSwatchOptionVisibility === 'function') { 8653 this.syncOtherSwatchOptionVisibility(); 8654 } else { 8655 const swatchAttribute = document.querySelector('.swatch-attribute.other_swatch_option'); 8656 if (swatchAttribute) { 8657 setTimeout(() => { 8658 const selectOptionColors = swatchAttribute.querySelectorAll('.selectOptionColor'); 8659 if (selectOptionColors.length > 1) { 8660 swatchAttribute.style.display = 'block'; 8661 } else { 8662 swatchAttribute.style.display = 'none'; 8663 } 8664 }, 300); 8665 } 8666 } 8667 /* =============================== other label show / hide if the option not showing END =============== */ 8668 8669 }, 8670 calculateIsMinimalPrice() { 8671 return ( 8672 this.selectedValues.filter(value => !!value).length < 8673 Object.keys(this.optionConfig.attributes).length 8674 ); 8675 }, 8676 updatePrices() { 8677 const value = this.productIndex ? 8678 this.optionConfig.optionPrices[this.productIndex] : 8679 this.optionConfig.prices; 8680 8681 window.dispatchEvent( 8682 new CustomEvent( 8683 "update-prices-" + this.productId, 8684 { 8685 detail: Object.assign( 8686 value, 8687 { 8688 isMinimalPrice: this.calculateIsMinimalPrice(), 8689 calculatorType: this.optionConfig?.calculator_type?.[this.productIndex] ?? '', 8690 getIncstoresPimCoverage: this.optionConfig?.coverage_per_case?.[this.productIndex] ?? '', 8691 unitOfMeasure: this.optionConfig?.unit_of_measure?.[this.productIndex] ?? '', 8692 altUnitOfMeasure: this.optionConfig?.alt_unit_of_measure?.[this.productIndex] ?? 'sqft', 8693 availableQuantity: this.optionConfig?.available_quantity?.[this.productIndex] ?? '', 8694 } 8695 ) 8696 } 8697 ) 8698 ); 8699 setTimeout(() => { 8700 var calculatorType = this.optionConfig.calculator_type[this.productIndex]; 8701 var priceElement = document.querySelector('div.items-baseline .final-price .price'); 8702 8703 if (priceElement && calculatorType != 'none' && calculatorType != 'pre_cut_roll') { 8704 var customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8705 let priceLabelElement = document.querySelector('.final-price .price-label'); 8706 var priceLabel = ""; 8707 8708 if (priceLabelElement) { 8709 priceLabel = priceLabelElement.textContent.trim(); 8710 } 8711 8712 document.querySelectorAll('.display-option-price').forEach(el => { 8713 el.textContent = "("+customOptionPrice+priceLabel+")"; 8714 }); 8715 } else if (calculatorType == 'none') { 8716 //None type 8717 var priceElement = document.querySelector('.none .final-price .price'); 8718 var customOptionPrice = ""; 8719 8720 if (priceElement) { 8721 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8722 } 8723 document.querySelectorAll('.display-option-price').forEach(el => { 8724 el.textContent = "("+customOptionPrice+")"; 8725 }); 8726 } else if (calculatorType == 'pre_cut_roll') { 8727 let priceLabelElement = document.querySelector('.final-price .price-label'); 8728 var priceLabel = ""; 8729 8730 if (priceLabelElement) { 8731 priceLabel = priceLabelElement.textContent.trim(); 8732 } 8733 var priceElement = document.querySelector('.pre_cut_roll .final-price .price'); 8734 var customOptionPrice = ""; 8735 8736 if (priceElement) { 8737 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8738 } 8739 document.querySelectorAll('.display-option-price').forEach(el => { 8740 el.textContent = "("+customOptionPrice+priceLabel+")"; 8741 }); 8742 } 8743 }, "500"); 8744 }, 8745 updateTileSizeArea() { 8746 const overage_percent = this.optionConfig.overage_percent[this.productIndex]; 8747 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 8748 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8749 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8750 window.dispatchEvent( 8751 new CustomEvent( 8752 "update-tile-size-area-" + this.productId, 8753 { 8754 detail: { 8755 overage_percent: overage_percent, 8756 coverage_per_case: coverage_per_case, 8757 exact_width: exact_width, 8758 exact_length: exact_length, 8759 calculator_type: this.optionConfig.calculator_type[this.productIndex], 8760 } 8761 } 8762 ) 8763 ); 8764 }, 8765 updateExactWidth() { 8766 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8767 window.dispatchEvent( 8768 new CustomEvent( 8769 "update-exact-width-" + this.productId, 8770 {detail: exact_width} 8771 ) 8772 ); 8773 }, 8774 updateExactLength() { 8775 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8776 window.dispatchEvent( 8777 new CustomEvent(
8778 "update-exact-length-" + this.productId, 8779 {detail: exact_length} 8780 ) 8781 ); 8782 }, 8783 updateExactHeight() { 8784 const exact_height = this.optionConfig.exact_height[this.productIndex]; 8785 window.dispatchEvent( 8786 new CustomEvent( 8787 "update-exact-height-" + this.productId, 8788 {detail: exact_height} 8789 ) 8790 ); 8791 }, 8792 updateCoveragePerCase() { 8793 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 8794 //const tile_size_area = ""; 8795 window.dispatchEvent( 8796 new CustomEvent( 8797 "update-coverage-per-case-" + this.productId, 8798 {detail: coverage_per_case} 8799 ) 8800 ); 8801 }, 8802 updateTileMinQty() { 8803 const min_tile_quantity = this.optionConfig.min_tile_quantity[this.productIndex]; 8804 window.dispatchEvent( 8805 new CustomEvent( 8806 "update-min-tile-quantity-" + this.productId, 8807 {detail: min_tile_quantity} 8808 ) 8809 ); 8810 }, 8811 getAttributeIdByCode(attributeCode) { 8812 let attributes = this.optionConfig.attributes; 8813 8814 for (let id in attributes) { 8815 if (attributes[id].code === attributeCode) { 8816 return id; 8817 } 8818 } 8819 8820 return null; 8821 }, 8822 updateCalculatorType() { 8823 const has_corner_border_center = this.optionConfig.has_corner_border_center[this.productIndex]; 8824 const calculator_type = this.optionConfig.calculator_type[this.productIndex]; 8825 if(calculator_type == 'sqft' && has_corner_border_center !=1){ 8826 var cbcelements = document.querySelectorAll('.cbc'); 8827 cbcelements.forEach(function(element) { 8828 element.style.display = 'none'; 8829 }); 8830 var noneelements = document.querySelectorAll('.none'); 8831 noneelements.forEach(function(element) { 8832 element.style.display = 'none'; 8833 }); 8834 var rollelements = document.querySelectorAll('.roll'); 8835 rollelements.forEach(function(element) { 8836 element.style.display = 'none'; 8837 }); 8838 var cbcelements = document.querySelectorAll('.case'); 8839 cbcelements.forEach(function(element) { 8840 element.style.display = 'none'; 8841 }); 8842 var elements = document.querySelectorAll('.sqft'); 8843 elements.forEach(function(element) { 8844 element.style.display = 'block'; 8845 }); 8846 8847 var elements = document.querySelectorAll('.pre_cut_roll'); 8848 elements.forEach(function(element) { 8849 element.style.display = 'none'; 8850 }); 8851 const button = document.getElementById("product-addtocart-button-fake"); 8852 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8853 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8854 } 8855 } else if(calculator_type == 'sqft' && has_corner_border_center ==1){ 8856 var sqftelements = document.querySelectorAll('.sqft'); 8857 sqftelements.forEach(function(element) { 8858 element.style.display = 'none'; 8859 }); 8860 var caseelements = document.querySelectorAll('.case'); 8861 caseelements.forEach(function(element) { 8862 element.style.display = 'none'; 8863 }); 8864 var rollelements = document.querySelectorAll('.roll');
8865 rollelements.forEach(function(element) { 8866 element.style.display = 'none'; 8867 }); 8868 var noneelements = document.querySelectorAll('.none'); 8869 noneelements.forEach(function(element) { 8870 element.style.display = 'none'; 8871 }); 8872 var elements = document.querySelectorAll('.cbc'); 8873 elements.forEach(function(element) { 8874 element.style.display = 'block'; 8875 }); 8876 var elements = document.querySelectorAll('.price-details .sqft'); 8877 elements.forEach(function(element) { 8878 element.style.display = 'none'; 8879 }); 8880 8881 var elements = document.querySelectorAll('.pre_cut_roll'); 8882 elements.forEach(function(element) { 8883 element.style.display = 'none'; 8884 }); 8885 const button = document.getElementById("product-addtocart-button-fake"); 8886 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8887 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8888 } 8889 }else if(calculator_type == 'case'){ 8890 var sqftelements = document.querySelectorAll('.sqft'); 8891 sqftelements.forEach(function(element) { 8892 element.style.display = 'none'; 8893 }); 8894 var cbcelements = document.querySelectorAll('.cbc'); 8895 cbcelements.forEach(function(element) { 8896 element.style.display = 'none'; 8897 }); 8898 var noneelements = document.querySelectorAll('.none'); 8899 noneelements.forEach(function(element) { 8900 element.style.display = 'none'; 8901 }); 8902 var rollelements = document.querySelectorAll('.roll'); 8903 rollelements.forEach(function(element) { 8904 element.style.display = 'none'; 8905 }); 8906 var elements = document.querySelectorAll('.case'); 8907 elements.forEach(function(element) { 8908 element.style.display = 'block'; 8909 }); 8910 8911 var elements = document.querySelectorAll('.pre_cut_roll'); 8912 elements.forEach(function(element) { 8913 element.style.display = 'none'; 8914 }); 8915 const button = document.getElementById("product-addtocart-button-fake"); 8916 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8917 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8918 } 8919 } else if(calculator_type == 'roll'){ 8920 var sqftelements = document.querySelectorAll('.sqft'); 8921 sqftelements.forEach(function(element) { 8922 element.style.display = 'none'; 8923 }); 8924 var cbcelements = document.querySelectorAll('.cbc'); 8925 cbcelements.forEach(function(element) { 8926 element.style.display = 'none'; 8927 }); 8928 var caseelements = document.querySelectorAll('.case'); 8929 caseelements.forEach(function(element) { 8930 element.style.display = 'none'; 8931 }); 8932 var noneelements = document.querySelectorAll('.none'); 8933 noneelements.forEach(function(element) { 8934 element.style.display = 'none'; 8935 }); 8936 var elements = document.querySelectorAll('.roll'); 8937 elements.forEach(function(element) { 8938 element.style.display = 'block'; 8939 }); 8940 const button = document.getElementById("product-addtocart-button-fake"); 8941 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8942 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8943 } 8944 8945 var elements = document.querySelectorAll('.pre_cut_roll');
8946 elements.forEach(function(element) { 8947 element.style.display = 'none'; 8948 }); 8949 } else if(calculator_type == 'pre_cut_roll'){ 8950 var sqftelements = document.querySelectorAll('.sqft'); 8951 sqftelements.forEach(function(element) { 8952 element.style.display = 'none'; 8953 }); 8954 var cbcelements = document.querySelectorAll('.cbc'); 8955 cbcelements.forEach(function(element) { 8956 element.style.display = 'none'; 8957 }); 8958 var caseelements = document.querySelectorAll('.case'); 8959 caseelements.forEach(function(element) { 8960 element.style.display = 'none'; 8961 }); 8962 var noneelements = document.querySelectorAll('.none'); 8963 noneelements.forEach(function(element) { 8964 element.style.display = 'none'; 8965 }); 8966 var elements = document.querySelectorAll('.roll'); 8967 elements.forEach(function(element) { 8968 element.style.display = 'none'; 8969 }); 8970 var elements = document.querySelectorAll('.pre_cut_roll'); 8971 elements.forEach(function(element) { 8972 element.style.display = 'block'; 8973 }); 8974 const button = document.getElementById("product-addtocart-button-fake"); 8975 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickforPreCutRoll") { 8976 button.setAttribute("data-flooring-handler", "addToCartClickforPreCutRoll"); 8977 } 8978 } else { 8979 var sqftelements = document.querySelectorAll('.sqft'); 8980 sqftelements.forEach(function(element) { 8981 element.style.display = 'none'; 8982 }); 8983 var cbcelements = document.querySelectorAll('.cbc'); 8984 cbcelements.forEach(function(element) { 8985 element.style.display = 'none'; 8986 }); 8987 var caseelements = document.querySelectorAll('.case'); 8988 caseelements.forEach(function(element) { 8989 element.style.display = 'none'; 8990 }); 8991 var rollelements = document.querySelectorAll('.roll'); 8992 rollelements.forEach(function(element) { 8993 element.style.display = 'none'; 8994 }); 8995 var cbcelements = document.querySelectorAll('.case'); 8996 cbcelements.forEach(function(element) { 8997 element.style.display = 'none'; 8998 }); 8999 var elements = document.querySelectorAll('.none'); 9000 elements.forEach(function(element) { 9001 element.style.display = 'block'; 9002 }); 9003 const noneButton = document.getElementById("product-addtocart-button-fake"); 9004 if (noneButton && noneButton.getAttribute("data-flooring-handler") !== "addToCartClickforNone") { 9005 noneButton.setAttribute("data-flooring-handler", "addToCartClickforNone"); 9006 } 9007 9008 var elements = document.querySelectorAll('.pre_cut_roll'); 9009 elements.forEach(function(element) { 9010 element.style.display = 'none'; 9011 }); 9012 } 9013 }, 9014 updateMinRollcut() { 9015 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 9016 var exactlength = ''; 9017 window.dispatchEvent( 9018 new CustomEvent( 9019 "update-min-rollcut-" + this.productId, 9020 {detail: min_rollcut} 9021 ) 9022 ); 9023 }, 9024 9025 updateMaxRollLengthRestriction() { 9026 const max_roll_length_restriction = this.optionConfig.max_roll_length_restriction[this.productIndex]; 9027 const exact_width = this.optionConfig.exact_width[this.productIndex]; 9028 const exact_length = this.optionConfig.exact_length[this.productIndex]; 9029 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 9030 9031 window.dispatchEvent( 9032 new CustomEvent( 9033 "update-max-roll-length-restriction-" + this.productId, 9034 { 9035 detail: { 9036 max_roll_length_restriction: max_roll_length_restriction, 9037 min_rollcut: min_rollcut, 9038 exact_width: exact_width, 9039 exact_length: exact_length, 9040 } 9041 } 9042 ) 9043 ); 9044 }, 9045 updateShippingDetails() { 9046 const pdp_shipping_text = this.optionConfig.pdp_shipping_text[this.productIndex]; 9047 const expected_days_ship = this.optionConfig.expected_days_ship[this.productIndex]; 9048 window.dispatchEvent( 9049 new CustomEvent( 9050 "update-shipping-details-" + this.productId, 9051 { 9052 detail: { 9053 pdp_shipping_text: pdp_shipping_text, 9054 expected_days_ship: expected_days_ship, 9055 } 9056 } 9057 ) 9058 ); 9059 }, 9060 updateGallery () { 9061 if (this.isLoadedFirst && this.ssrGalleryChildId > 0) { 9062 return; 9063 } 9064 9065 if (this.productIndex) { 9066 const images = this.optionConfig.images[this.productIndex]; 9067 images && window.dispatchEvent(new CustomEvent( 9068 "update-gallery", 9069 { detail: this.sortImagesByPosition(images) } 9070 )); 9071 } else { 9072 window.dispatchEvent(new Event("reset-gallery")); 9073 } 9074 }, 9075 updateSquareFootage () { 9076 let squareFootageElement = document.getElementsByName('square_footage'); 9077 9078 if (squareFootageElement.length > 0) { 9079 var squareFootage = squareFootageElement[0].value; 9080 9081 if (squareFootage) { 9082 // Trigger the 'keyup' event 9083 var event = new KeyboardEvent('keyup', { 9084 'key': 'Enter', // You can set this to any key, like 'Enter' 9085 'bubbles': true, 9086 'cancelable': true 9087 }); 9088 9089 squareFootageElement[0].dispatchEvent(event); 9090 } 9091 } 9092 }, 9093 sortImagesByPosition(images) { 9094 return images.sort((x, y) => { 9095 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 9096 }); 9097 }, 9098 onGetCartData(data) { 9099 this.preselectCartItems(data); 9100 this.preselectQuerystringItems(); 9101 this.preselectLocationHashItems(); 9102 }, 9103 preselectCartItems(data) { 9104 // pre-select options based on cart data for current (quote) itemId 9105 const cart = data && data.cart; 9106 if (cart && cart.items) { 9107 const cartItem = cart.items.find((item) => { 9108 return ( 9109 item.item_id === this.itemId 9110 && item.product_id === this.productId 9111 ) 9112 }); 9113 if (cartItem && cartItem.options && cartItem.options.length) { 9114 cartItem.options.map(option => { 9115 this.changeOption(option.option_id, option.option_value); 9116 }) 9117 } 9118 } 9119 }, 9120 preselectQuerystringItems() { 9121 // pre-select option like ?size=167 9122 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 9123 Object.values(this.optionConfig.attributes).map(attribute => { 9124 urlQueryParams.get(attribute.code) && 9125 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 9126 }); 9127 }, 9128 preselectLocationHashItems() { 9129 // pre-select option like #144=167 9130 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 9131 Object.values(this.optionConfig.attributes).map(attribute => { 9132 urlHashParams.get(attribute.id) && 9133 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 9134 }); 9135 } 9136 } 9137 } 9138 9139 function isOptionVisible(element) { 9140 const computedStyle = window.getComputedStyle(element); 9141 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden'; 9142 } 9143</script>
vendor: 1 bytes, line 9143
9143
9144<script> 9145 function initCompareOnProductList() { 9146 return { 9147 addToCompare(productId) { 9148 const formKey = hyva.getFormKey(); 9149 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 9150 9151 fetch(postUrl, { 9152 "headers": { 9153 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9154 }, 9155 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9156 "method": "POST", 9157 "mode": "cors", 9158 "credentials": "include" 9159 }).then(function (response) { 9160 if (response.redirected) { 9161 window.location.href = response.url; 9162 } 9163 }).catch(function (error) { 9164 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9165 [{ 9166 type: "error", 9167 text: error 9168 }], 5000 9169 ); 9170 }); 9171 } 9172 }; 9173 } 9174</script>
vendor: 1 bytes, line 9174
9174
9175<script> 9176 function initWishlist() { 9177 return { 9178 addToWishlist(productId) { 9179 const formKey = hyva.getFormKey(); 9180 const postUrl = BASE_URL + 'wishlist/index/add/'; 9181 9182 fetch(postUrl, { 9183 "headers": { 9184 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9185 }, 9186 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9187 "method": "POST", 9188 "mode": "cors", 9189 "credentials": "include" 9190 }).then(function (response) { 9191 if (response.redirected) { 9192 window.location.href = response.url; 9193 } else if (response.ok) { 9194 return response.json(); 9195 } else { 9196 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9197 [{ 9198 type: "warning", 9199 text: "Could not add item to wishlist." 9200 }], 5000 9201 ); 9202 } 9203 }).then(function (response) { 9204 if (!response) { return } 9205 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9206 [{ 9207 type: (response.success) ? "success" : "error", 9208 text: (response.success) 9209 ? "Product has been added to your Wish List." 9210 : response.error_message 9211 }], 5000 9212 ); 9213 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 9214 window.dispatchEvent(reloadCustomerDataEvent); 9215 }).catch(function (error) { 9216 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9217 [{ 9218 type: "error", 9219 text: error 9220 }], 5000 9221 ); 9222 }); 9223 } 9224 } 9225 } 9226</script>
vendor: 1 bytes, line 9226
9226
9227<script> 9228 function initSwatchOptions(swatchConfig, swatchLabelValues = null) { 9229 const normalizedSwatchLabelValues = ( 9230 swatchLabelValues 9231 && typeof swatchLabelValues === 'object' 9232 && !Array.isArray(swatchLabelValues) 9233 ) ? swatchLabelValues : {}; 9234 9235 return { 9236 swatchConfig, 9237 swatchLabelValues: normalizedSwatchLabelValues, 9238 resolveSwatchLabel(attributeId, optionId) { 9239 if (optionId === undefined || optionId === null || optionId === '') { 9240 return ''; 9241 } 9242 9243 const optionKey = String(optionId); 9244 const labels = ( 9245 this.swatchLabelValues 9246 && typeof this.swatchLabelValues === 'object' 9247 && !Array.isArray(this.swatchLabelValues) 9248 ) ? this.swatchLabelValues : {}; 9249 const flatLabel = labels[optionKey] ?? labels[optionId]; 9250 if (flatLabel !== undefined && flatLabel !== null && flatLabel !== '') { 9251 return String(flatLabel); 9252 } 9253 9254 const attrConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[String(attributeId)]; 9255 const attrLabels = attrConfig?.swatchLabelValues; 9256 if (attrLabels) { 9257 const attrLabel = attrLabels[optionKey] ?? attrLabels[optionId]; 9258 if (attrLabel !== undefined && attrLabel !== null && attrLabel !== '') { 9259 return String(attrLabel); 9260 } 9261 } 9262 9263 const swatchOption = attrConfig?.[optionKey] ?? attrConfig?.[optionId]; 9264 if (swatchOption?.label) { 9265 return String(swatchOption.label); 9266 } 9267 9268 return this.getOptionLabelFromOptionConfig(attributeId, optionId) || ''; 9269 }, 9270 getAttributeSwatchData(attributeId) { 9271 const attributeKey = String(attributeId); 9272 const rawConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[attributeKey]; 9273 const labels = ( 9274 this.swatchLabelValues 9275 && typeof this.swatchLabelValues === 'object' 9276 && !Array.isArray(this.swatchLabelValues) 9277 ) ? this.swatchLabelValues : {}; 9278 if (!rawConfig) { 9279 return {details: {}, swatchLabelValues: labels}; 9280 } 9281 const swatchConfig = Object.assign({}, rawConfig); 9282 if (swatchConfig['additional_data']) { 9283 try { 9284 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 9285 } catch (error) { 9286 swatchConfig['details'] = {}; 9287 } 9288 } else { 9289 swatchConfig['details'] = swatchConfig['details'] ?? {}; 9290 } 9291 swatchConfig['swatchLabelValues'] = labels; 9292 9293 return swatchConfig; 9294 }, 9295 getAllAttributeOptions(attributeId) { 9296 return ( 9297 this.optionConfig.attributes[attributeId] && 9298 this.optionConfig.attributes[attributeId].options 9299 ) || [] 9300 }, 9301 optionIsActive(attributeId, optionId) { 9302 const optionKey = String(optionId); 9303 return !!this.getAllowedAttributeOptions(attributeId).find( 9304 option => String(option.id) === optionKey 9305 ); 9306 }, 9307 optionIsEnabled(attributeId, optionId) { 9308 const attributeKey = String(attributeId); 9309 const optionKey = String(optionId); 9310 const index = this.optionConfig?.index || {}; 9311 for (const productId in index) { 9312 const productOptions = index[productId] || {}; 9313 if ( 9314 String(productOptions[attributeKey]) === optionKey 9315 || String(productOptions[attributeId]) === optionKey 9316 ) { 9317 return true; 9318 } 9319 } 9320 const attributeOptions = ( 9321 this.optionConfig?.attributes?.[attributeId]?.options 9322 || this.optionConfig?.attributes?.[attributeKey]?.options 9323 || [] 9324 ); 9325 const match = attributeOptions.find((option) => String(option.id) === optionKey); 9326 if (!match?.products?.length) { 9327 return false;
9328 } 9329 return match.products.some((childId) => { 9330 const key = String(childId); 9331 return Object.prototype.hasOwnProperty.call(index, key) 9332 || Object.prototype.hasOwnProperty.call(index, childId); 9333 }); 9334 }, 9335 mapSwatchTypeNumberToTypeCode(typeNumber) { 9336 switch ("" + typeNumber) { 9337 case "1": 9338 return "color" 9339 case "2": 9340 return "image" 9341 case "3": 9342 return "empty" 9343 case "0": 9344 default: 9345 return "text" 9346 } 9347 }, 9348 getTypeOfFirstOption(attributeId) { 9349 for (const optionId in this.swatchConfig[attributeId]) { 9350 const option = this.swatchConfig[attributeId][optionId]; 9351 if (typeof option.type !== 'undefined') { 9352 return this.mapSwatchTypeNumberToTypeCode(option.type); 9353 } 9354 } 9355 }, 9356 getVisualSwatchType(attributeId, targetOptionId) { 9357 // If a type configuration is present for the given option id, use it 9358 const config = this.swatchConfig[attributeId]; 9359 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 9360 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 9361 } 9362 9363 // Otherwise - if no config is present for the target option - use the type of the first option 9364 // with a type property from the attribute, thus assuming its the same type as the target option. 9365 // (This edge case condition can occur on single swatch products if some options are not salable) 9366 return this.getTypeOfFirstOption(attributeId); 9367 }, 9368 getSwatchType(attributeId, optionId) { 9369 // Deserialize the attribute details the first time they are used 9370 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 9371 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 9372 } 9373 const type = this.swatchConfig[attributeId] && 9374 this.swatchConfig[attributeId].details && 9375 this.swatchConfig[attributeId].details.swatch_input_type || 9376 "empty"; 9377 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 9378 }, 9379 isTextSwatch(attributeId, optionId) { 9380 return this.getSwatchType(attributeId, optionId) === 'text'; 9381 }, 9382 isVisualSwatch(attributeId, optionId) { 9383 const type = this.getSwatchType(attributeId, optionId); 9384 9385 return ['image', 'color'].includes(type); 9386 }, 9387 getSwatchBackgroundStyle(attributeId, optionId) { 9388 const config = this.getSwatchConfig(attributeId, optionId); 9389 const type = this.getSwatchType(attributeId, optionId); 9390 9391 if (type === "color") { 9392 return 'background-color:' + config.value; 9393 } else if (type === "image") { 9394 return "background: #ffffff url('" + config.value + "') no-repeat center"; 9395 } else { 9396 return ''; 9397 } 9398 }, 9399 getSwatchText(attributeId, optionId) { 9400 return this.resolveSwatchLabel(attributeId, optionId); 9401 }, 9402 getLegacyColorSwatchImageHtml(attributeId, optionId) { 9403 const map = this._legacyColorSwatchImages || {}; 9404 return this.getSwatchTextUrl(attributeId, optionId, map); 9405 }, 9406 getSwatchTextUrl(attributeId, optionId, childSwatch) { 9407 const config = this.getSwatchConfig(attributeId, optionId); 9408 const optionKey = String(optionId); 9409 const swatchMap = ( 9410 childSwatch 9411 && typeof childSwatch === 'object' 9412 && !Array.isArray(childSwatch) 9413 ) ? childSwatch : {}; 9414 const swatchUrl = swatchMap[optionKey] ?? swatchMap[optionId]; 9415 if(swatchUrl != "" && swatchUrl != null && isValidURL(swatchUrl)){ 9416 return "<img loading='lazy' src="+swatchUrl+" title="+swatchUrl+" alt="+swatchUrl+"/>"; 9417 } else if(config && config.value!="" && config.value!= null && isValidURL(config.value)){ 9418 return "<img loading='lazy' src="+config.value+" title="+config.value+" alt="+config.value+"/>"; 9419 } else { 9420 var placeHoldernew = BASE_URL+'media/catalog/product/placeholder/default/swatch_placeholder.png'; 9421 9422 return "<img width= '60px' height='60px' src="+placeHoldernew+" title="+placeHoldernew+" alt="+placeHoldernew+"/>"; 9423 } 9424 }, 9425 getOptionLabelFromOptionConfig(attributeId, optionId) { 9426 const optionKey = String(optionId); 9427 const option = this.getAllAttributeOptions(attributeId).find( 9428 (entry) => String(entry.id) === optionKey 9429 ); 9430 return option?.label || ''; 9431 }, 9432 getSwatchConfig(attributeId, optionId) { 9433 const attrConfig = this.swatchConfig[attributeId] ?? this.swatchConfig[String(attributeId)]; 9434 if (!attrConfig) { 9435 return false;
9436 } 9437 return attrConfig[optionId] ?? attrConfig[String(optionId)] ?? false; 9438 }, 9439 activeTooltipItem: false, 9440 tooltipPositionElement: false, 9441 isTooltipVisible() { 9442 return this.activeTooltipItem && 9443 this.getSwatchConfig( 9444 this.activeTooltipItem.attribute, 9445 this.activeTooltipItem.item 9446 ); 9447 }, 9448 getTooltipImageStyle(attributeId, optionId) { 9449 const config = this.getSwatchConfig(attributeId, optionId); 9450 const type = this.getSwatchType(attributeId, optionId); 9451 9452 if (type === "color") { 9453 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 9454 } else if (type === "image") { 9455 return "background: #ffffff url('" + config.thumb + 9456 "') center center no-repeat; width: 110px; height: 90px;"; 9457 } else { 9458 return 'display:none'; 9459 } 9460 }, 9461 getTooltipPosition() { 9462 if (!this.tooltipPositionElement) { 9463 return ''; 9464 } 9465 const rect = this.tooltipPositionElement.getBoundingClientRect(); 9466 const elementWidth = rect.width; 9467 const elementHeight = rect.height; 9468 const container = document.querySelector('.swatch___render'); 9469 if (!container) { 9470 return ''; 9471 } 9472 const containerRect = container.getBoundingClientRect(); 9473 const topPosition = rect.top - containerRect.top + 10; 9474 const leftPosition = rect.left - containerRect.left; 9475 9476 return ` 9477 top: ${topPosition}px; 9478 left: ${leftPosition}px; 9479 `; 9480 }, 9481 getSwatchConfigLabel(attributeId, optionId) { 9482 const label = this.resolveSwatchLabel(attributeId, optionId); 9483 return label !== '' ? label : false; 9484 }, 9485 getTooltipLabel() { 9486 return this.getSwatchConfigLabel(this.activeTooltipItem.attribute, this.activeTooltipItem.item); 9487 //return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 9488 }, 9489 focusedLabel: false, 9490 focusLabel(optionId) { 9491 this.focusedLabel = optionId; 9492 }, 9493 blurLabel() { 9494 this.focusedLabel = false; 9495 }, 9496 showSwatches: true, 9497 initShowSwatchesIntersect() { 9498 this.showSwatches = true; 9499 }, 9500 9501 quickShipValidation(attributeCode, attributeId, optionId){ 9502 if (optionId === undefined || optionId === null || optionId === '') { 9503 return 0; 9504 } 9505 var is_quick_ship_color = 0; 9506 var optionConfigObj = this.optionConfig; 9507 if (!optionConfigObj || typeof optionConfigObj !== 'object') { 9508 return 0; 9509 } 9510 if(attributeCode == 'incstores_pim_color_axis'){ 9511 var attributes = optionConfigObj.attributes; 9512 if (!attributes || !attributes[attributeId] || !attributes[attributeId]['options']) { 9513 return 0; 9514 } 9515 var quickShipColorIds = optionConfigObj.quick_ship_color_ids || []; 9516 if (quickShipColorIds.length) { 9517 return quickShipColorIds.some(function (id) { 9518 return String(id) === String(optionId); 9519 }) ? 1 : 0; 9520 } 9521 var quickShipMap = optionConfigObj.quick_ship; 9522 if (!quickShipMap) { 9523 return 0; 9524 } 9525 var attributes_options = attributes[attributeId]['options']; 9526 9527 attributes_options.forEach(function(option_details) { 9528 if(option_details['id'] == optionId){ 9529 option_details['products'].forEach(function(child_product_id) { 9530 if(quickShipMap[String(child_product_id)] == 1 || quickShipMap[child_product_id] == 1){ 9531 is_quick_ship_color = 1; 9532 return false;
9533 } 9534 }); 9535 } 9536 }); 9537 } 9538 return is_quick_ship_color; 9539 }, 9540 9541 hasQuickShipColorOptions(attributeCode, attributeId) { 9542 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 9543 return false; 9544 } 9545 if (this.selectedValues) { 9546 Object.keys(this.selectedValues).forEach(function (key) { 9547 void this.selectedValues[key]; 9548 }.bind(this)); 9549 } 9550 var colorIds = this.optionConfig.quick_ship_color_ids || []; 9551 var options = this.optionConfig.attributes[attributeId].options; 9552 for (var i = 0; i < options.length; i++) { 9553 var optionId = options[i].id; 9554 var isQuick = colorIds.length 9555 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 9556 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 9557 if (!isQuick) { 9558 continue; 9559 } 9560 if (!this.optionIsEnabled(attributeId, optionId)) { 9561 continue; 9562 } 9563 if (!this.optionIsActive(attributeId, optionId)) { 9564 continue; 9565 } 9566 return true; 9567 } 9568 return false; 9569 }, 9570 9571 hasNormalColorOptions(attributeCode, attributeId) { 9572 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 9573 return false; 9574 } 9575 if (this.shipRegionZipActive && this.customerRegionCode) { 9576 return false; 9577 } 9578 var colorIds = this.optionConfig.quick_ship_color_ids || []; 9579 var options = this.optionConfig.attributes[attributeId].options; 9580 for (var i = 0; i < options.length; i++) { 9581 var optionId = options[i].id; 9582 var isQuick = colorIds.length 9583 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 9584 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 9585 if (!isQuick) { 9586 if (!this.optionIsEnabled(attributeId, optionId)) { 9587 continue; 9588 } 9589 if (!this.optionIsActive(attributeId, optionId)) { 9590 continue; 9591 } 9592 return true; 9593 } 9594 } 9595 return false; 9596 }, 9597 9598 shouldShowQuickShipSection(attributeCode, attributeId) { 9599 if (this.shipRegionZipActive && this.customerRegionCode) { 9600 return false; 9601 } 9602 return this.hasQuickShipColorOptions(attributeCode, attributeId); 9603 }, 9604 9605 getOtherSwatchAttributeId(section = null) { 9606 const target = section || document.querySelector('.swatch-attribute.other_swatch_option'); 9607 if (!target || !this.optionConfig?.attributes) { 9608 return null; 9609 } 9610 for (const key in this.optionConfig.attributes) { 9611 const code = this.optionConfig.attributes[key]?.code;
9612 if (code && code !== 'incstores_pim_color_axis' && target.classList.contains(code)) { 9613 return parseInt(key, 10); 9614 } 9615 } 9616 for (const key in this.optionConfig.attributes) { 9617 const code = this.optionConfig.attributes[key]?.code; 9618 if (code && code !== 'incstores_pim_color_axis') { 9619 return parseInt(key, 10); 9620 } 9621 } 9622 return null; 9623 }, 9624 9625 /** 9626 * Count salable/enabled options only. Disabled Magento variants stay out of the UI. 9627 * Hide "Select An Option" when fewer than two enabled options remain. 9628 */ 9629 countEnabledOtherSwatchOptions(attrId) { 9630 if (!attrId) { 9631 return 0; 9632 } 9633 const options = this.optionConfig?.attributes?.[attrId]?.options || []; 9634 return options.filter((option) => this.optionIsEnabled(attrId, option.id)).length; 9635 }, 9636 9637 countVisibleOtherSwatchOptions() { 9638 return this.countEnabledOtherSwatchOptions(this.getOtherSwatchAttributeId()); 9639 }, 9640 9641 syncOtherSwatchOptionVisibility() { 9642 const sections = document.querySelectorAll('.swatch-attribute.other_swatch_option'); 9643 if (!sections.length) { 9644 return; 9645 } 9646 const self = this; 9647 const applyVisibility = () => { 9648 sections.forEach((variantSection) => { 9649 const attrId = self.getOtherSwatchAttributeId(variantSection); 9650 if (!attrId) { 9651 return; 9652 } 9653 const optionCount = self.countEnabledOtherSwatchOptions(attrId); 9654 const shouldShow = optionCount > 1; 9655 variantSection.classList.toggle('dcw-single-option-hidden', !shouldShow); 9656 // Theme CSS defaults other_swatch_option to display:none â force block/none. 9657 variantSection.style.setProperty( 9658 'display', 9659 shouldShow ? 'block' : 'none', 9660 'important' 9661 ); 9662 if (!shouldShow && optionCount === 1) { 9663 const options = self.optionConfig?.attributes?.[attrId]?.options || []; 9664 const enabledOption = options.find((option) => self.optionIsEnabled(attrId, option.id)); 9665 const optionId = enabledOption?.id; 9666 if (optionId !== undefined 9667 && String(self.selectedValues[attrId]) !== String(optionId) 9668 && typeof self.changeOption === 'function') { 9669 self.changeOption(attrId, optionId); 9670 } 9671 } 9672 }); 9673 }; 9674 applyVisibility(); 9675 window.setTimeout(applyVisibility, 300); 9676 }, 9677 9678 /** 9679 * After color selection only (including disabled colors): if current variant/option 9680 * is incompatible, auto-select the cheapest compatible one. Never run on variant clicks.
9681 */ 9682 autoSelectCompatibleOtherOption(colorAttrId) { 9683 if (!colorAttrId || !this.optionConfig?.attributes) { 9684 return; 9685 } 9686 const selectedColor = this.selectedValues[colorAttrId]; 9687 if (!selectedColor) { 9688 return; 9689 } 9690 9691 let otherAttrId = null; 9692 if (typeof this.getAttributeIdByCode === 'function') { 9693 otherAttrId = this.getAttributeIdByCode('incstores_pim_variant_axis') 9694 || this.getAttributeIdByCode('product_option'); 9695 } 9696 if (!otherAttrId) { 9697 const section = document.querySelector('.swatch-attribute.other_swatch_option'); 9698 otherAttrId = this.getOtherSwatchAttributeId(section); 9699 } 9700 if (!otherAttrId || !this.optionConfig.attributes[otherAttrId]) { 9701 return; 9702 } 9703 9704 const currentOther = this.selectedValues[otherAttrId]; 9705 const isCurrentCompatible = currentOther 9706 && typeof this.optionIsActive === 'function' 9707 && this.optionIsActive(otherAttrId, currentOther); 9708 9709 if (isCurrentCompatible) { 9710 return; 9711 } 9712 9713 const options = this.optionConfig.attributes[otherAttrId].options || []; 9714 let lowestPrice = null; 9715 let lowestOptionId = null; 9716 9717 options.forEach((option) => { 9718 if (typeof this.optionIsEnabled === 'function' 9719 && !this.optionIsEnabled(otherAttrId, option.id)) { 9720 return; 9721 } 9722 const productIds = option.products || []; 9723 productIds.forEach((productId) => { 9724 const product = this.optionConfig.index[productId] 9725 || this.optionConfig.index[String(productId)]; 9726 if (!product || String(product[colorAttrId]) !== String(selectedColor)) { 9727 return; 9728 } 9729 const priceData = this.optionConfig.optionPrices[productId] 9730 || this.optionConfig.optionPrices[String(productId)]; 9731 if (!priceData) { 9732 return; 9733 } 9734 const price = priceData.finalPrice.amount; 9735 if (lowestPrice === null || price < lowestPrice) { 9736 lowestPrice = price; 9737 lowestOptionId = option.id; 9738 } 9739 }); 9740 }); 9741 9742 if (lowestOptionId === null 9743 || String(this.selectedValues[otherAttrId]) === String(lowestOptionId)) { 9744 return; 9745 } 9746 9747 if (typeof this.changeOption === 'function') { 9748 this.changeOption(otherAttrId, lowestOptionId); 9749 return; 9750 } 9751 9752 const el = document.querySelector( 9753 'input[name="super_attribute[' + otherAttrId + ']"][value="' + lowestOptionId + '"]' 9754 ); 9755 if (el) { 9756 el.click(); 9757 } 9758 }, 9759 9760 /** 9761 * After variant / Select An Option change: if current color is unavailable, 9762 * auto-select the cheapest compatible color. Never run on color clicks. 9763 */ 9764 autoSelectCompatibleColorOption(otherAttrId) { 9765 if (!otherAttrId || !this.optionConfig?.attributes) { 9766 return; 9767 } 9768 const selectedOther = this.selectedValues[otherAttrId]; 9769 if (!selectedOther) { 9770 return; 9771 } 9772 9773 let colorAttrId = null; 9774 if (typeof this.getAttributeIdByCode === 'function') { 9775 colorAttrId = this.getAttributeIdByCode('incstores_pim_color_axis'); 9776 }
9777 if (!colorAttrId && typeof this.getShipRegionColorAttributeId === 'function') { 9778 colorAttrId = this.getShipRegionColorAttributeId(); 9779 } 9780 if (!colorAttrId || !this.optionConfig.attributes[colorAttrId]) { 9781 return; 9782 } 9783 9784 const currentColor = this.selectedValues[colorAttrId]; 9785 const isCurrentCompatible = currentColor 9786 && typeof this.optionIsActive === 'function' 9787 && this.optionIsActive(colorAttrId, currentColor); 9788 9789 if (isCurrentCompatible) { 9790 return; 9791 } 9792 9793 const options = this.optionConfig.attributes[colorAttrId].options || []; 9794 let lowestPrice = null; 9795 let lowestOptionId = null; 9796 9797 options.forEach((option) => { 9798 if (typeof this.optionIsEnabled === 'function' 9799 && !this.optionIsEnabled(colorAttrId, option.id)) { 9800 return; 9801 } 9802 const productIds = option.products || []; 9803 productIds.forEach((productId) => { 9804 const product = this.optionConfig.index[productId] 9805 || this.optionConfig.index[String(productId)]; 9806 if (!product || String(product[otherAttrId]) !== String(selectedOther)) { 9807 return; 9808 } 9809 const priceData = this.optionConfig.optionPrices[productId] 9810 || this.optionConfig.optionPrices[String(productId)]; 9811 if (!priceData) { 9812 return; 9813 } 9814 const price = priceData.finalPrice.amount; 9815 if (lowestPrice === null || price < lowestPrice) { 9816 lowestPrice = price; 9817 lowestOptionId = option.id; 9818 } 9819 }); 9820 }); 9821 9822 if (lowestOptionId === null 9823 || String(this.selectedValues[colorAttrId]) === String(lowestOptionId)) { 9824 return; 9825 } 9826 9827 if (typeof this.changeOption === 'function') { 9828 this.changeOption(colorAttrId, lowestOptionId); 9829 return; 9830 } 9831 9832 const el = document.querySelector( 9833 'input[name="super_attribute[' + colorAttrId + ']"][value="' + lowestOptionId + '"]' 9834 ); 9835 if (el) { 9836 el.click(); 9837 } 9838 }, 9839 9840 syncNormalColorSwatchQuickShipVisibility() { 9841 if (this.shipRegionZipActive && this.customerRegionCode) { 9842 return; 9843 } 9844 if (typeof this.quickShipValidation !== 'function') { 9845 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9846 this.syncNormalColorSwatchSectionVisibility(); 9847 } 9848 return; 9849 } 9850 const self = this; 9851 document.querySelectorAll('.normal_color_swatch_option .selectOptionColor').forEach(function (el) { 9852 const input = el.querySelector('input.product-option-value-input[name^="super_attribute"]'); 9853 if (!input) { 9854 return; 9855 } 9856 const nameMatch = input.name.match(/super_attribute\[(\d+)\]/); 9857 if (!nameMatch) { 9858 return; 9859 } 9860 const attributeId = parseInt(nameMatch[1], 10); 9861 const optionId = input.value; 9862 const attributeCode = input.getAttribute('data-attributecode') || 'incstores_pim_color_axis'; 9863 if (self.quickShipValidation(attributeCode, attributeId, optionId) === 1) { 9864 el.classList.add('hidden'); 9865 el.style.display = 'none'; 9866 } else { 9867 el.classList.remove('hidden'); 9868 el.style.display = ''; 9869 } 9870 }); 9871 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9872 this.syncNormalColorSwatchSectionVisibility(); 9873 } 9874 }, 9875 9876 getColorAttributeId() { 9877 if (typeof this.getAttributeIdByCode === 'function') { 9878 const id = this.getAttributeIdByCode('incstores_pim_color_axis'); 9879 return id ? parseInt(String(id), 10) : null; 9880 } 9881 if (!this.optionConfig?.attributes) { 9882 return null; 9883 } 9884 for (const key in this.optionConfig.attributes) { 9885 if (this.optionConfig.attributes[key]?.code === 'incstores_pim_color_axis') { 9886 return parseInt(key, 10); 9887 } 9888 } 9889 return null; 9890 }, 9891 9892 /** 9893 * Hide entire "Select A Color" block when every color is Quick Ship (or none left). 9894 */ 9895 syncNormalColorSwatchSectionVisibility() { 9896 const sections = document.querySelectorAll('.normal_color_swatch_option'); 9897 if (!sections.length) { 9898 return; 9899 } 9900 const colorAttrId = this.getColorAttributeId(); 9901 const shouldShow = colorAttrId 9902 && typeof this.hasNormalColorOptions === 'function' 9903 && this.hasNormalColorOptions('incstores_pim_color_axis', colorAttrId); 9904 9905 sections.forEach((section) => { 9906 if (!shouldShow) { 9907 section.classList.add('hidden'); 9908 section.style.setProperty('display', 'none', 'important'); 9909 } else { 9910 section.classList.remove('hidden', 'sr-only'); 9911 section.style.setProperty('display', 'block', 'important'); 9912 } 9913 }); 9914 } 9915 } 9916 } 9917 9918 function isValidURL(url) { 9919 // Regular expression for URL validation 9920 var pattern = /^(https?:\/\/)?([\w.]+)\.([a-z]{2,})(\/[\w\.-]*)*\/?$/i; 9921 return pattern.test(url); 9922} 9923</script>
vendor: 1 bytes, line 9923
9923
9924<script> 9925 'use strict'; 9926 9927 (function () { 9928 const modals = []; 9929 const excludedFromFocusTrapping = new Set(); 9930 9931 function trapFocusInNextModalWithOverlay() { 9932 for (let idx = modals.length -1; idx >= 0; idx--) { 9933 const nextOnStack = modals[idx]; 9934 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 9935 if (! isOverlayDisabled(nextDialogElement)) { 9936 hyva.trapFocus(nextDialogElement); 9937 break; 9938 } 9939 } 9940 } 9941 9942 function focusables(dialogElement) { 9943 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 9944 return Array.from(dialogElement.querySelectorAll(selector)) 9945 .filter(el => !el.hasAttribute('disabled')); 9946 } 9947 9948 function firstVisible(elements) { 9949 const a = Array.from(elements); 9950 for (let i = 0; i < a.length; i++) { 9951 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 9952 } 9953 return null; 9954 } 9955 9956 function isInViewport(element) { 9957 const rect = element && element.getBoundingClientRect(); 9958 return rect && 9959 rect.top >= 0 && 9960 rect.left >= 0 && 9961 rect.right <= window.innerWidth && 9962 rect.bottom <= window.innerHeight; 9963 } 9964 9965 function setFocusAfterTransition(dialogElement, duration) { 9966 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 9967 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 9968 next: for (let candidate of candidates) { 9969 for (let child of nested) { 9970 if (child.contains(candidate)) continue next; 9971 } 9972 setTimeout(() => candidate.focus(), 50); 9973 break; 9974 } 9975 window.setTimeout(() => { 9976 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 9977 focusables(dialogElement)[0] || 9978 null; 9979 focusElement && isInViewport(focusElement) && focusElement.focus(); 9980 }, Math.max(1, duration)); 9981 } 9982 9983 function determineTrigger($refs, dialog, trigger) { 9984 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 9985 return dialog.target; 9986 } 9987 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 9988 return trigger.target; 9989 } 9990 if (typeof trigger === 'string') { 9991 try { 9992 return $refs[trigger] || document.querySelector(trigger) 9993 } catch (e) {} 9994 } 9995 if (trigger instanceof Element) { 9996 return trigger; 9997 } 9998 9999 return null; 10000 } 10001 10002 function isOverlayDisabled(dialog) { 10003 return dialog && dialog.hasAttribute('x-no-overlay') 10004 } 10005 10006 function areRemainingModalsWithoutOverlay(modals) 10007 { 10008 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 10009 10010 return overflowDisabled.length === modals.length; 10011 } 10012 10013 window.hyva.modal = function(options) { 10014 10015 const config = Object.assign({ 10016 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 10017 transitionEnterStart: 'opacity-0', 10018 transitionEnterEnd: 'opacity-100', 10019 transitionLeave: 'transition ease-in duration-300', 10020 transitionLeaveStart: 'opacity-100', 10021 transitionLeaveEnd: 'opacity-0', 10022 }, options); 10023 let lastHide = 0; 10024 10025 return { 10026 opened: {}, 10027 show(dialog, trigger) { 10028 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 10029 const name = typeof dialog === 'string' ? dialog : config.dialog; 10030 const dialogElement = this.$refs[name]; 10031 if (! dialogElement) { 10032 return; 10033 } 10034 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 10035 10036 dialogElement.scrollTop = 0; 10037 10038 if (this.opened[name]) { 10039 return; 10040 } 10041 10042 if (focusTargetAfterHide) { 10043 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 10044 } 10045 10046 this.opened[name] = true; 10047 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 10048 setFocusAfterTransition(dialogElement, config.duration); 10049 10050 const frame = {name, instance: this, focusTarget: focu
10050sTargetAfterHide, time: Date.now()}; 10051 10052 modals.push(frame); 10053 if (useOverlay) { 10054 document.body.classList.add('overflow-hidden'); 10055 } 10056 return new Promise(resolve => frame.resolve = resolve); 10057 }, 10058 cancel() { 10059 this.hide(false); 10060 }, 10061 ok() { 10062 this.hide(true); 10063 }, 10064 hide(value) { 10065 if (Date.now() - lastHide < config.duration) { 10066 return; 10067 } 10068 lastHide = Date.now(); 10069 10070 const modal = modals.pop() || {}; 10071 const name = modal.name; 10072 this.opened[name] = false; 10073 hyva.releaseFocus(modal.instance.$refs[modal.name]) 10074 trapFocusInNextModalWithOverlay(); 10075 10076 const nextFocusAfterHide = modal.focusTarget; 10077 nextFocusAfterHide && setTimeout(() => { 10078 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 10079 nextFocusAfterHide.focus() 10080 }, config.duration); 10081 10082 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 10083 document.body.classList.remove('overflow-hidden'); 10084 } 10085 10086 modal.resolve(value); 10087 }, 10088 overlay(dialog) { 10089 const name = typeof dialog === 'string' ? dialog : config.dialog; 10090 return { 10091 ['x-show']() { 10092 return this.opened[name] 10093 }, 10094 ['x-transition:enter']: config.transitionEnter, 10095 ['x-transition:enter-start']: config.transitionEnterStart, 10096 ['x-transition:enter-end']: config.transitionEnterEnd, 10097 ['x-transition:leave']: config.transitionLeave, 10098 ['x-transition:leave-start']: config.transitionLeaveStart, 10099 ['x-transition:leave-end']: config.transitionLeaveEnd, 10100 ['@hyva-modal-show.window'](event) { 10101 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 10102 } 10103 }; 10104 } 10105 }; 10106 } 10107 10108 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 10109 10110 window.hyva.modal.pop = function () { 10111 if (modals.length > 0) { 10112 const modal = modals[modals.length -1]; 10113 modal.instance.hide(); 10114 } 10115 } 10116 10117 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 10118 typeof selectors === 'string' || selectors instanceof String 10119 ? excludedFromFocusTrapping.add(selectors) 10120 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 10121 } 10122 10123 window.hyva.modal.eventListeners = { 10124 keydown: event => { 10125 if (event.key === 'Escape') { 10126 window.hyva.modal.pop(); 10127 } 10128 }, 10129 click: event => { 10130 if (modals.length > 0) { 10131 const modal = modals[modals.length -1]; 10132 const dialog = modal.instance.$refs[modal.name]; 10133 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 10134 ! isOverlayDisabled(dialog) && // if dialog has overlay 10135 ! dialog.contains(event.target)) { // if click is outside of dialog 10136 modal.instance.hide(); 10137 } 10138 } 10139 } 10140 }; 10141 10142 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 10143 10144 document.addEventListener('click', window.hyva.modal.eventListeners.click); 10145 })(); 10146</script>
vendor: 1 bytes, line 10146
10146
10147<script> 10148 'use strict'; 10149 10150 (() => { 10151 const equalizeButtonWidths = (buttons) => { 10152 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 10153 let buttonMinWidth = 0; 10154 10155 buttonList.forEach(button => { 10156 const buttonWidth = button.offsetWidth; 10157 10158 if (buttonWidth > buttonMinWidth) { 10159 buttonMinWidth = buttonWidth; 10160 } 10161 }); 10162 10163 buttonList.forEach(button => { 10164 button.style.minWidth = `${buttonMinWidth}px`; 10165 }); 10166 }; 10167 10168 window.addEventListener('DOMContentLoaded', () => { 10169 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 10170 equalizeButtonWidths(buttons); 10171 }); 10172 }); 10173 })(); 10174</script>
vendor: 1 bytes, line 10174
10174
10175<script> 10176 'use strict'; 10177 10178 (() => { 10179 const initCarousels = (elements) => { 10180 if (!Glider) { 10181 return; 10182 } 10183 10184 const initProductCarousel = (carousel) => { 10185 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 10186 10187 if (!gliderElement) { 10188 return; 10189 } 10190 10191 const gliderDots = carousel.querySelector('.glider-dots'); 10192 const gliderPrev = carousel.querySelector('.glider-prev'); 10193 const gliderNext = carousel.querySelector('.glider-next'); 10194 10195 const glider = new Glider(gliderElement, { 10196 slidesToShow: 1.2, 10197 slidesToScroll: 2, 10198 scrollLock: true, 10199 draggable: true, 10200 dragVelocity: 2.5, 10201 dots: gliderDots, 10202 arrows: { 10203 prev: gliderPrev, 10204 next: gliderNext, 10205 }, 10206 responsive: [ 10207 { 10208 breakpoint: 768, 10209 settings: { 10210 slidesToShow: 3, 10211 slidesToScroll: 3, 10212 } 10213 }, 10214 { 10215 breakpoint: 1024, 10216 settings: { 10217 slidesToShow: 4, 10218 slidesToScroll: 4, 10219 } 10220 }, 10221 { 10222 breakpoint: 1200, 10223 settings: { 10224 slidesToShow: 5, 10225 slidesToScroll: 5, 10226 } 10227 } 10228 ], 10229 }); 10230 10231 carousel.classList.remove('overflow-x-scroll'); 10232 gliderPrev.classList.remove('hidden'); 10233 gliderNext.classList.remove('hidden'); 10234 10235 if (carousel.dataset.autoplay !== 'false') { 10236 gliderAutoplay( 10237 glider, 10238 carousel.dataset.autoplaySpeed, 10239 carousel.dataset.infiniteLoop 10240 ); 10241 } 10242 }; 10243 10244 const initSliderCarousel = (slider) => { 10245 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 10246 slider.classList.add('glider-contain'); 10247 10248 slider.insertAdjacentHTML( 10249 'beforeend', 10250 '\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
10250003D\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
10250003D\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' 10251 ); 10252 10253 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 10254 const gliderDots = slider.querySelector('.glider-dots'); 10255 const gliderPrev = slider.querySelector('.glider-prev'); 10256 const gliderNext = slider.querySelector('.glider-next'); 10257 10258 const glider = new Glider(gliderElement, { 10259 slidesToShow: 1, 10260 slidesToScroll: 1, 10261 scrollLock: true, 10262 scrollLockDelay: 250, 10263 draggable: true, 10264 dragVelocity: 2.5, 10265 dots: gliderDots, 10266 arrows: { 10267 prev: gliderPrev, 10268 next: gliderNext, 10269 }, 10270 }); 10271 10272 slider.classList.add('glider-initialized'); 10273 if (slider.dataset.showArrows === 'true') { 10274 gliderPrev.classList.remove('hidden'); 10275 gliderNext.classList.remove('hidden'); 10276 } 10277 10278 if (slider.dataset.autoplay !== 'false') { 10279 gliderAutoplay( 10280 glider, 10281 slider.dataset.autoplaySpeed, 10282 slider.dataset.infiniteLoop 10283 ); 10284 } 10285 }; 10286 10287 const gliderAutoplay = (glider, milliseconds, loop) => { 10288 const pagesCount = glider.track.childElementCount; 10289 let slideTimeout = null; 10290 let nextIndex = 1; 10291 let paused = false; 10292 10293 const slide = () => { 10294 slideTimeout = setTimeout( 10295 () => { 10296 if (loop && nextIndex >= pagesCount) { 10297 nextIndex = 0; 10298 } 10299 glider.scrollItem(nextIndex); 10300 }, 10301 parseInt(milliseconds) 10302 ); 10303 }; 10304 10305 glider.ele.addEventListener('glider-animated', () => { 10306 nextIndex = glider.slide + glider.opt.slidesToScroll; 10307 window.clearInterval(slideTimeout); 10308 if (!paused && (loop || nextIndex < pagesCount)) { 10309 slide(); 10310 } 10311 }); 10312 10313 const pause = () => { 10314 if (!paused) { 10315 clearInterval(slideTimeout); 10316 paused = true; 10317 } 10318 }; 10319 10320 const unpause = () => { 10321 if (paused) { 10322 slide(); 10323 paused = false; 10324 } 10325 }; 10326 10327 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 10328 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 10329 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 10330 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 10331 10332 slide(); 10333 }; 10334 10335 elements.forEach(element => { 10336 if (element.dataset.contentType === 'products') { 10337 initProductCarousel(element); 10338 } 10339 if (element.dataset.contentType === 'slider') { 10340 initSliderCarousel(element); 10341 } 10342 }); 10343 }; 10344 10345 window.addEventListener('DOMContentLoaded', () => { 10346 const carouselElements = document.querySelectorAll( 10347 `[data-content-type="products"][data-appearance="carousel"], 10348 [data-content-type="slider"]` 10349 ); 10350 10351 if (carouselElements.length > 0) { 10352 const script = document.createElement('script'); 10353 script.type = 'text/javascript'; 10354 10355 script.addEventListener('load', () => { 10356 initCarousels(carouselElements); 10357 }); 10358 10359 window.addEventListener('init-external-scripts', () => { 10360 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 10361 }, {once: true, passive: true}); 10362 document.head.appendChild(script); 10363 } 10364 }); 10365 })(); 10366</script>
vendor: 1 bytes, line 10366
10366
10367<script> 10368 'use strict'; 10369 10370 (() => { 10371 const initMaps = (elements) => { 10372 const renderMap = (element) => { 10373 const dataLocations = element.dataset.locations; 10374 10375 // Hide map if no locations set 10376 if (!dataLocations || dataLocations === '[]') { 10377 element.classList.add('hidden'); 10378 return; 10379 } 10380 10381 const map = new google.maps.Map( 10382 element, 10383 getMapOptions( 10384 element.dataset.showControls !== 'true', 10385 element.dataset.showControls === 'true' 10386 ) 10387 ); 10388 const locations = JSON.parse(dataLocations); 10389 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 10390 const bounds = []; 10391 10392 locations.forEach(location => { 10393 const position = { 10394 lat: parseFloat(location.position.latitude), 10395 lng: parseFloat(location.position.longitude), 10396 }; 10397 bounds.push(position); 10398 10399 const infowindow = new google.maps.InfoWindow({ 10400 content: getInfoWindowContent(location), 10401 }); 10402 const marker = new google.maps.Marker({ 10403 position: position, 10404 map, 10405 title: location.location_name, 10406 }); 10407 10408 marker.addListener('click', () => { 10409 infowindow.open(map, marker); 10410 }); 10411 }); 10412 10413 // Set bounds if multiple locations 10414 if (bounds.length > 1) { 10415 bounds.forEach(function (bound) { 10416 latitudeLongitudeBounds.extend(bound); 10417 }); 10418 map.fitBounds(latitudeLongitudeBounds); 10419 } 10420 10421 // Center if single location 10422 if (bounds.length === 1) { 10423 map.setCenter(bounds[0]); 10424 } 10425 }; 10426 10427 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 10428 const style = ''; 10429 return { 10430 zoom: 8, 10431 scrollwheel: false, 10432 disableDoubleClickZoom: false, 10433 mapTypeControlOptions: { 10434 style: google.maps.MapTypeControlStyle.DEFAULT, 10435 }, 10436 styles: style ? JSON.parse(style) : [], 10437 disableDefaultUI: disableDefaultUI, 10438 mapTypeControl: mapTypeControl, 10439 }; 10440 }; 10441 10442 const getInfoWindowContent = (location) => { 10443 const title = location.location_name ? 10444 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 10445 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 10446 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 10447 const street = location.address ? `${location.address}<br/>` : ''; 10448 const city = location.city ? `${location.city}<br/>` : ''; 10449 const state = location.state ? `${location.state}<br/>` : ''; 10450 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 10451 const country = location.country ? location.country : ''; 10452 10453 return `<div> 10454 ${title} 10455 ${comment} 10456 ${phone} 10457 <p class="px-1 pt-3 text-primary"> 10458 ${street} 10459 ${city} 10460 ${state} 10461 ${zipCode} 10462 ${country} 10463 </p> 10464 </div>`; 10465 }; 10466 10467 const hideAllMaps = () => { 10468 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 10469 element.classList.add('hidden'); 10470 }); 10471 }; 10472 10473 window.gm_authFailure = () => { 10474 hideAllMaps(); 10475 }; 10476 10477 if (typeof google.maps === 'undefined') { 10478 hideAllMaps(); 10479 return; 10480 } 10481
10482 elements.forEach(element => { 10483 if (element.dataset.contentType === 'map') { 10484 renderMap(element); 10485 } 10486 }); 10487 }; 10488 10489 window.addEventListener('DOMContentLoaded', () => { 10490 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 10491 10492 if (mapElements.length > 0) { 10493 const script = document.createElement('script'); 10494 script.type = 'text/javascript'; 10495 10496 script.addEventListener('load', () => { 10497 initMaps(mapElements); 10498 }); 10499 10500 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 10501 document.head.appendChild(script); 10502 } 10503 }); 10504 })(); 10505</script>
vendor: 1 bytes, line 10505
10505
10506<script> 10507 'use strict'; 10508 10509 (() => { 10510 const initParallaxImage = (element) => { 10511 if (!window.jarallax) { 10512 return; 10513 } 10514 10515 element.classList.add('jarallax'); 10516 element.dataset.jarallax = ''; 10517 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 10518 const elementStyle = window.getComputedStyle(element); 10519 10520 window.jarallax(element, { 10521 imgPosition: elementStyle.backgroundPosition || '50% 50%', 10522 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 10523 imgSize: elementStyle.backgroundSize || 'cover', 10524 speed: parallaxSpeed, 10525 }); 10526 }; 10527 10528 const initVideoBackground = (element) => { 10529 if (!window.jarallax) { 10530 return; 10531 } 10532 10533 let slider = null; 10534 10535 if (element.classList.contains('pagebuilder-slide-wrapper')) { 10536 const viewportElement = document.createElement('div'); 10537 slider = element.closest('[data-content-type=slider]'); 10538 viewportElement.classList.add('jarallax-viewport-element'); 10539 element.dataset.elementInViewport = '.jarallax-viewport-element'; 10540 element.appendChild(viewportElement); 10541 } 10542 10543 element.classList.add('jarallax'); 10544 element.dataset.jarallax = ''; 10545 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 10546 10547 window.jarallax(element, { 10548 imgSrc: element.dataset.videoFallbackSrc, 10549 speed: parallaxSpeed, 10550 videoLoop: element.dataset.videoLoop, 10551 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 10552 videoLazyLoading: element.dataset.videoLazyLoad, 10553 disableVideo: false, 10554 elementInViewport: element.dataset.elementInViewport && 10555 element.querySelector(element.dataset.elementInViewport), 10556 }); 10557 10558 if (slider) { 10559 if (slider.dataset.afterChangeIsSet) { 10560 return; 10561 } 10562 10563 slider.addEventListener('glider-loaded', () => { 10564 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 10565 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 10566 }); 10567 }); 10568 10569 slider.addEventListener('glider-animated', () => { 10570 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 10571 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 10572 }); 10573 }); 10574 10575 slider.dataset.afterChangeIsSet = true; 10576 } 10577 }; 10578 10579 window.addEventListener('DOMContentLoaded', () => { 10580 const parallaxImageElements = document.querySelectorAll( 10581 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 10582 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 10583 ); 10584 10585 const videoBackgroundsElements = document.querySelectorAll( 10586 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 10587 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 10588 [data-content-type="banner"] [data-background-type="video"], 10589 [data-content-type="slide"] [data-background-type="video"]` 10590 ); 10591 10592 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 10593 const jarallaxScript = document.createElement('script'); 10594 jarallaxScript.type = 'text/javascript'; 10595 10596 jarallaxScript.addEventListener('load', () => { 10597 parallaxImageElements.forEach(row => { 10598 initParallaxImage(row); 10599 }); 10600 10601 const jarallaxVideoScript = document.createElement('script'); 10602 jarallaxVideoScript.type = 'text/javascript'; 10603 10604 jarallaxVideoScript.addEventListener('load', () => {
10605 videoBackgroundsElements.forEach(element => { 10606 initVideoBackground(element); 10607 }); 10608 }); 10609 10610 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 10611 document.head.appendChild(jarallaxVideoScript); 10612 }); 10613 10614 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 10615 document.head.appendChild(jarallaxScript); 10616 } 10617 }); 10618 })(); 10619</script>
vendor: 1 bytes, line 10619
10619
10620<script> 10621 'use strict'; 10622 10623 (() => { 10624 const applyShowOnHover = (element) => { 10625 const showOverlayOnHover = (element) => { 10626 const overlay = element.querySelector('.pagebuilder-overlay'); 10627 const color = overlay.dataset.overlayColor; 10628 10629 element.addEventListener('mouseover', () => { 10630 overlay.style.backgroundColor = color; 10631 }); 10632 element.addEventListener('mouseout', () => { 10633 overlay.style.backgroundColor = 'transparent'; 10634 }); 10635 }; 10636 10637 const showButtonOnHover = (element) => { 10638 const button = element.querySelector('.pagebuilder-banner-button'); 10639 10640 element.addEventListener('mouseover', () => { 10641 button.style.opacity = '1'; 10642 button.style.visibility = 'visible'; 10643 }); 10644 element.addEventListener('mouseout', () => { 10645 button.style.opacity = '0'; 10646 button.style.visibility = 'hidden'; 10647 }); 10648 }; 10649 10650 if (element.dataset.showOverlay === 'hover') { 10651 showOverlayOnHover(element); 10652 } 10653 if (element.dataset.showButton === 'hover') { 10654 showButtonOnHover(element); 10655 } 10656 }; 10657 10658 window.addEventListener('DOMContentLoaded', () => { 10659 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 10660 applyShowOnHover(element); 10661 }); 10662 }); 10663 })(); 10664</script>
vendor: 1 bytes, line 10664
10664
10665<script> 10666 'use strict'; 10667 10668 (() => { 10669 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 10670 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 10671 }); 10672 10673 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 10674 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 10675 10676 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 10677 const tabLink = tabHeader.querySelector('a'); 10678 const tabId = tabLink.getAttribute('href').replace('#', ''); 10679 10680 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 10681 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 10682 10683 if (index === defaultActiveTab) { 10684 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 10685 } 10686 }); 10687 }); 10688 })(); 10689</script>
vendor: 1 bytes, line 10689
10689
10690<script> 10691 'use strict'; 10692 10693 const grecaptchaV2LoadCallbacks = []; 10694 10695 function executeRecaptchaLoadCallbacks () { 10696 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 10697 const callback = grecaptchaV2LoadCallbacks.pop(); 10698 typeof callback === 'string' ? window[callback]() : callback(); 10699 } 10700 } 10701 10702 (function() { 10703 const loadRecaptchaScript = (event) => { 10704 10705 if (window.grecaptcha || !event.target.form) { 10706 return; 10707 } 10708 10709 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 10710 const siteKey = '6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO'; 10711 const script = document.createElement('script'); 10712 script.type = 'text/javascript'; 10713 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 10714 script.async = true; 10715 document.head.appendChild(script); 10716 10717 script.addEventListener('load', () => { 10718 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 10719 }); 10720 } 10721 10722 window.forceLoadRecaptchaScript = (form) => { 10723 loadRecaptchaScript({target: {form: form || 'dummy'}}); 10724 executeRecaptchaLoadCallbacks(); 10725 }; 10726 10727 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 10728 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 10729 10730 }()); 10731 10732</script>
vendor: 1 bytes, line 10732
10732
10733<script> 10734 window.addEventListener("scroll", function() { 10735 var header = document.querySelector('header.page-header'); 10736 var body = document.querySelector("body"); 10737 const header_top = document.querySelector('.header_top'); 10738 const notification4 = document.querySelector('.notification4'); 10739 var top_1 = document.querySelector("header.page-header > .panel.wrapper"); 10740 var content = document.getElementById("textContent"); 10741 10742 10743 if(header_top && notification4){ 10744 if ((header_top.textContent.length > 10) && (notification4.textContent.length > 10)) { 10745 if (window.pageYOffset > 76) { 10746 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10747 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10748 document.querySelector('body').classList.add('sticki'); 10749 } else { 10750 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10751 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10752 document.querySelector('body').classList.remove('sticki'); 10753 } 10754 } 10755 } 10756 10757 if(header_top && notification4){ 10758 if ((header_top.textContent.length > 10) && (notification4.textContent.length < 10)) { 10759 if (window.pageYOffset > 36) { 10760 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10761 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10762 document.querySelector('body').classList.add('sticki'); 10763 } else { 10764 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10765 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10766 document.querySelector('body').classList.remove('sticki'); 10767 } 10768 } 10769 } 10770 10771 if(header_top && !notification4){ 10772 if (header_top.textContent.length > 10) { 10773 if (window.pageYOffset > 36) { 10774 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10775 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10776 document.querySelector('body').classList.add('sticki'); 10777 } else { 10778 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10779 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10780 document.querySelector('body').classList.remove('sticki'); 10781 } 10782 } 10783 } 10784 }); 10785 10786 window.addEventListener("DOMContentLoaded", function() { 10787 window.addEventListener("scroll", function() { 10788 // scroll for plp content sticky 10789 anchor_scroll(); 10790 }); 10791 function anchor_scroll() { 10792 var anchor_scroll = document.querySelector('.anchor-scroll'); 10793 if (!anchor_scroll) { 10794 return; // Exit if the element is not found 10795 } 10796 let sticky = anchor_scroll.offsetTop; 10797 10798 if (window.pageYOffset > sticky) { 10799 anchor_scroll.classList.add("scroll-fixed"); 10800 } else { 10801 anchor_scroll.classList.remove("scroll-fixed"); 10802 } 10803 } 10804 10805 document.querySelectorAll('.anchor-scroll a[href^="."], .at-glance-content a[href^="."]').forEach(anchor => { 10806 anchor.addEventListener('click', function (e) { 10807 e.preventDefault(); 10808 10809 const targetClass = this.getAttribute('href').substring(1); 10810 const targetElement = document.querySelector(`.${targetClass}`); 10811 let anchor_scroll = document.querySelector('.anchor-scroll > div'); 10812 var header_off = document.querySelector('#header').offsetHeight; 10813 if (anchor_scroll) { 10814 var header_off = document.querySelector('#header').offsetHeight + anchor_scroll.offsetHeight; 10815 } else { 10816 var header_off = document.querySelector('#header').offsetHeight; 10817 } 10818 10819 if (targetElement) { 10820 const offset = header_off; 10821 const bodyRect = document.body.getBoundingClientRect().top; 10822 const elementRect = targetElement.getBoundingClientRect().top; 10823 const elementPosition = elementRect - bodyRect; 10824 const offsetPosition = elementPosition - offset; 10825 10826 window.scrollTo({ 10827 top: offsetPosition, 10828 behavior: 'smooth' 10829 }); 10830 } 10831 }); 10832 }); 10833 }); 10834</script>
10834 10835 10836 <section x-cloak x-data="{isLoading: false}" 10837 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 10838 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 10839 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 10840 x-show="isLoading" 10841 x-transition:enter="ease-out duration-200" 10842 x-transition:enter-start="opacity-0" 10843 x-transition:enter-end="opacity-100" 10844 x-transition:leave="ease-in duration-200" 10845 x-transition:leave-start="opacity-100" 10846 x-transition:leave-end="opacity-0"> 10847 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10848<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10849 <g fill="none" fill-rule="evenodd"> 10850 <g transform="translate(1 1)" stroke-width="2"> 10851 <circle cx="5" cy="50" r="5"> 10852 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10853 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10854 </circle> 10855 <circle cx="27" cy="5" r="5"> 10856 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10857 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10858 </circle> 10859 <circle cx="49" cy="50" r="5"> 10860 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10861 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10862 </circle> 10863 </g> 10864 </g> 10865<title>loader</title></svg> 10866 <div class="ml-10 text-primary text-xl"> 10867 Loading... </div> 10868</div> 10869 </section> 10870
10871<script> 10872 'use strict'; 10873 10874 function responseSerialize(response) { 10875 if (response.redirected) { 10876 window.location.href = response.url; 10877 } else if (response.ok) { 10878 return response.json(); 10879 } else { 10880 // Check if result is Promise then throw to new Error 10881 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 10882 result; 10883 result = response.text(); 10884 if (typeof result?.then === 'function') { 10885 result.then(res => { 10886 let errorMessage; 10887 try { 10888 errorMessage = JSON.parse(res); 10889 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 10890 } catch (e) { 10891 errorMessage = defaultErrMsg; 10892 } 10893 window.dispatchMessages([ 10894 { 10895 type: 'error', 10896 text: errorMessage 10897 } 10898 ], 3000); 10899 }); 10900 } else { 10901 throw new Error(defaultErrMsg); 10902 } 10903 } 10904 } 10905 10906 if (typeof window.buildRestAPIUrl !== 'function') { 10907 window.buildRestAPIUrl = function (url, params = {}) { 10908 const method = 'rest', 10909 storeCode = 'default', 10910 version = 'V1', 10911 serviceUrl = ':method/:storeCode/:version'; 10912 10913 let urlParts; 10914 10915 params.method = method; 10916 params.storeCode = storeCode; 10917 params.version = version; 10918 10919 url = serviceUrl + url; 10920 10921 urlParts = url.split('/'); 10922 urlParts = urlParts.filter(Boolean); 10923 10924 Object.entries(urlParts).forEach (entry => { 10925 let [key, part] = entry; 10926 part = part.replace(':', ''); 10927 10928 if (params[part] !== undefined) { 10929 urlParts[key] = params[part]; 10930 } 10931 }); 10932 10933 return urlParts.join('/'); 10934 } 10935 } 10936 10937 if (typeof window.isObjectEmpty !== 'function') { 10938 window.isObjectEmpty = function (obj) { 10939 return ( 10940 Object.prototype.toString.call(obj) === '[object Object]' && 10941 JSON.stringify(obj) === '{}' 10942 ); 10943 } 10944 } 10945 10946 if (typeof window.mergeDeep !== 'function') { 10947 /** 10948 * Deep merge two objects. 10949 * 10950 * @param target 10951 * @param sources 10952 * @returns {*} 10953 */ 10954 window.mergeDeep = (target, ...sources) => { 10955 /** 10956 * Simple object check. 10957 * 10958 * @param item 10959 * @returns {boolean} 10960 */ 10961 const isObject = (item) => { 10962 return (item && typeof item === 'object' && !Array.isArray(item)); 10963 }; 10964 10965 if (!sources.length) return target; 10966 const source = sources.shift(); 10967 10968 if (isObject(target) && isObject(source)) { 10969 for (const key in source) { 10970 if (isObject(source[key])) { 10971 if (!target[key]) Object.assign(target, { [key]: {} }); 10972 mergeDeep(target[key], source[key]); 10973 } else { 10974 Object.assign(target, { [key]: source[key] }); 10975 } 10976 } 10977 } 10978 10979 return mergeDeep(target, ...sources); 10980 } 10981 } 10982</script>
10982 10983 10984<div x-data="{...hyva.modal(), ...initAmcartDialogPopup()}" 10985 x-init="initDialogPopup($dispatch)" 10986 x-spread="eventListeners" 10987 x-bind="eventListeners"> 10988 <div x-cloak x-spread="overlay('amcart-dialog-popup')" x-bind="overlay('amcart-dialog-popup')" 10989 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-30"> 10990 <div x-ref="amcart-dialog-popup" role="dialog" aria-labelledby="amcart-dialog-popup-content" 10991 class="flex flex-col max-h-screen max-w-4xl overflow-auto bg-amcart-background shadow-xl rounded-lg p-4"> 10992 <div class="flex justify-between pb-4 border-b"> 10993 <div x-text="title" class="text-2xl font-extrabold text-amcart-text"></div> 10994 <button @click="$dispatch('amcart-close-dialog-popup')" 10995 aria-label="Close" 10996 class="text-gray-300 transition hover:text-black hover:drop-shadow-md"> 10997 <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"> 10998 <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"/> 10999<title>x</title></svg> 11000 </button> 11001 </div> 11002 <div id="amcart-dialog-popup-content" class="amcart-dialog-popup-content"></div> 11003 <div class="flex flex-row pt-3 border-t"> 11004 <template x-for="(button, index) in buttons" :key="index"> 11005 <button class="btn mr-4 last:mr-0 text-amcart-button hover:brightness-105 hover:shadow-lg" 11006 :class="{ 11007 'bg-amcart-continue-btn hover:bg-amcart-continue-btn': index === 0, 11008 'bg-amcart-view-cart-btn hover:bg-amcart-view-cart-btn': index === 1 11009 }" 11010 :aria-label="button.name" 11011 x-html="button.name" 11012 @click="dispatchButtonAction(button.action.name, button.action.payload)"></button> 11013 </template> 11014 </div> 11015 </div> 11016 </div> 11017</div> 11018
11019<script> 11020 'use strict'; 11021 11022 function initAmcartDialogPopup() { 11023 const dialogPopupName = 'amcart-dialog-popup'; 11024 const selectors = { 11025 addToCartForm: '.amcart-product-info #amcart_product_addtocart_form', 11026 ratingSummarySelector: '.amcart-product-info .rating-summary' 11027 } 11028 11029 return { 11030 eventListeners: { 11031 ['@amcart-open-dialog-popup.window']({detail: popupData}) { 11032 // Close any existing modal before opening 11033 window.hyva.modal.pop(); 11034 11035 this.initPopupWithData(popupData); 11036 this.$nextTick(() => { 11037 this.show(dialogPopupName); 11038 }); 11039 }, 11040 ['@amcart-close-dialog-popup']() { 11041 this.hide(dialogPopupName); 11042 }, 11043 ['@amcart-dialog-submit']({ detail: actionToDispatch }) { 11044 const form = document.querySelector(selectors.addToCartForm); 11045 11046 if (form.checkValidity()) { 11047 this.dispatch(actionToDispatch, form); 11048 this.hide(dialogPopupName); 11049 } else { 11050 form.reportValidity(); 11051 } 11052 }, 11053 ['@amcart-hide-popup']() { 11054 this.hide(dialogPopupName); 11055 } 11056 }, 11057 title: '', 11058 buttons: [], 11059 message: '', 11060 selected_options: null, 11061 dispatch: null, 11062 11063 /** 11064 * @param {Object} $dispatch 11065 * @return {void} 11066 */ 11067 initDialogPopup: function ($dispatch) { 11068 this.dispatch = $dispatch; 11069 }, 11070 11071 /** 11072 * @param {CartResponse} popupData 11073 * @return {void} 11074 */ 11075 initPopupWithData: function (popupData) { 11076 this.title = popupData.title; 11077 this.buttons = popupData.buttons; 11078 this.selected_options = popupData.selected_options; 11079 hyva.replaceDomElement('#amcart-dialog-popup-content', this.preprocessMessage(popupData.message)); 11080 this.$nextTick(() => { 11081 this.postProcessPopupContent(); 11082 }); 11083 }, 11084 11085 /** 11086 * @param {string} message 11087 * @return {string} 11088 */ 11089 preprocessMessage: function (message) { 11090 /** 11091 * Disable labels for input inside popup due to the possibility of their duplication on the page. 11092 * Because this can lead to unexpected behaviour. 11093 * 11094 * Make form id unique for popup 11095 */ 11096 return message 11097 .replaceAll(':for=', 'for-data=') 11098 .replaceAll('product_addtocart_form', 'amcart_product_addtocart_form'); 11099 }, 11100 11101 /** 11102 * @return {void} 11103 */ 11104 postProcessPopupContent: function () { 11105 this.disableRatingSummary(); 11106 this.clickSelectedOptions(); 11107 }, 11108 11109 /** 11110 * @return {void} 11111 */ 11112 disableRatingSummary: function () { 11113 const ratingSummaryElement = document.querySelector(selectors.ratingSummarySelector); 11114 11115 if (!!ratingSummaryElement) { 11116 ratingSummaryElement.removeAttribute('onClick'); 11117 ratingSummaryElement.classList.remove('cursor-pointer'); 11118 } 11119 }, 11120 11121 /** 11122 * @return {void} 11123 */ 11124 clickSelectedOptions: function () { 11125 if (!this.selected_options) { 11126 return; 11127 } 11128 11129 for(const [attributeId, attributeValue] of Object.entries(this.selected_options)) { 11130 const swatchOptionTemplate = document.querySelector( 11131 `.amcart-product-info template[x-for*="attributes[${attributeId}]"]` 11132 ); 11133 11134 if (!!swatchOptionTemplate && !!swatchOptionTemplate.parentElement) { 11135 const swatchInput = swatchOptionTemplate.parentElement 11136 .querySelector(`input[value="${attributeValue}"]`); 11137 swatchInput && swatchInput.click(); 11138 } 11139 } 11140 }, 11141 11142 /** 11143 * @param {string} name 11144 * @param {string|undefined} payload 11145 * @return {void} 11146 */ 11147 dispatchButtonAction: function (name, payload) { 11148 this.dispatch(name, payload); 11149 } 11150 }; 11151 } 11152</script>
11152 11153
11154<script> 11155 (function () { 11156 'use strict'; 11157 11158 const addToCartProductListFormSelector = '.product_addtocart_form'; 11159 const addToCartProductPageFormSelector = '#product_addtocart_form'; 11160 const setFormsEvent = function () { 11161 const productListForms = document.querySelectorAll(addToCartProductListFormSelector); 11162 const productPageForm = document.querySelector(addToCartProductPageFormSelector); 11163 11164 productPageForm && addDispatcher(productPageForm); 11165 productListForms.forEach((form) => { 11166 // disable html5 validation 11167 form.setAttribute('novalidate', ''); 11168 addDispatcher(form); 11169 }); 11170 } 11171 11172 const addDispatcher = function(form) { 11173 form.removeAttribute('@submit'); 11174 form.removeAttribute('@submit.prevent'); 11175 form.setAttribute('x-data', ''); 11176 form.setAttribute('x-on:submit.prevent', '$dispatch(\'amcart-add-to-cart-action\', $el)'); 11177 } 11178 11179 setFormsEvent(); 11180 11181 window.addEventListener('amcart-set-forms-event', setFormsEvent); 11182 })(); 11183</script>
11183 11184
11185<script> 11186 (function () { 11187 'use strict'; 11188 11189 /** 11190 * @typedef {Object} CartResponse 11191 * 11192 * Popup common props 11193 * @property {[ 11194 * name: string, 11195 * action: { 11196 * name: string, 11197 * payload: string|undefined 11198 * } 11199 * ]|undefined} buttons 11200 * @property {string|undefined} popup_action 11201 * @property {string|undefined} message 11202 * @property {string|undefined} title 11203 * 11204 * DialogPopup props 11205 * @property {string|null|undefined} selected_options 11206 * 11207 * ConfirmationPopup props 11208 * @property {string|undefined} align 11209 * @property {string|undefined} checkout 11210 * @property {string|undefined} product_id 11211 * @property {string|undefined} product_sku 11212 * @property {string|undefined} related 11213 * @property {number|undefined} timer 11214 * 11215 * Redirect props 11216 * @property {string|undefined} redirect url to redirect 11217 */ 11218 11219 let globalActionName; 11220 11221 const addToCartAction = ({detail: form}) => { 11222 const isProductForm = form.id === 'product_addtocart_form'; 11223 11224 globalActionName = getCartAction(form); 11225 11226 if (isProductForm) { 11227 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 11228 11229 if (form.checkValidity()) { 11230 performRequest(form, isProductForm); 11231 } 11232 } else { 11233 performRequest(form, isProductForm) 11234 } 11235 }; 11236 11237 const performRequest = function (form, isProductForm) { 11238 const cartUrl = `${BASE_URL}amasty_cart/cart/${getCartAction(form)}`; 11239 const isProductPage = document.body.classList.contains('catalog-product-view'); 11240 const headers = { 11241 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 11242 }; 11243 const formData = new FormData(form); 11244 formData.set('product_page', isProductPage && isProductForm); 11245 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 11246 formData.set('form_key', hyva.getFormKey()); 11247 !formData.get('id') && formData.get('item') && formData.set('id', formData.get('item')); 11248 11249 const body = new URLSearchParams(formData); 11250 11251 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 11252 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: form })); 11253 11254 fetch(cartUrl, {headers: {...headers}, body: body, method: 'POST'}) 11255 .then(response => response.json()) 11256 .then((result) => { 11257 resultActionResolver.resolve(result); 11258 const relatedProductDialog = document.querySelector('.related-product-dialog-wrapper'); 11259 const cartLink = document.getElementById('menu-cart-icon'); 11260 const isRelatedProductForm = form.closest('.related-products-pdp-section'); 11261 if (relatedProductDialog && !isRelatedProductForm) { 11262 setTimeout(() => { 11263 window.dispatchEvent( 11264 new CustomEvent('hyva-modal-show', { detail: { dialog: 'related-product-slider-dialog' } }) 11265 ); 11266 }, 2000); 11267 } else if (cartLink) { 11268 cartLink.click(); 11269 } 11270 }).catch((error) => { 11271 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11272 [{ 11273 type: "error", 11274 text: error 11275 }], 5000 11276 ); 11277 }).finally(() => { 11278 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 11279 }); 11280 }; 11281 11282 const getCartAction = function(formNode) { 11283 return formNode.action.includes('updateItemOptions') 11284 ? `UpdateItemOptions` 11285 : 'add'; 11286 }; 11287 11288 const resultActionResolver = { 11289 /** 11290 * @param {CartResponse} result 11291 */ 11292 resolve: function (result) { 11293 11294 if(typeof result.is_add_to_cart != "undefined"){ 11295 var msg = result.message; 11296 /*if($($.parseHTML(result.message)).filter(".message.error").text()){ 11297 msg = $($.parseHTML(result.message)).filter(".message.error").text(); 11298 }*/ 11299 11300 var parser = new DOMParser(); 11301 var doc = parser.parseFromString(result.message, 'text/html'); 11302 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 11303 11304 if (errorMsg) { 11305 msg = errorMsg; 11306 } 11307 11308 window.dispatchMessages && window.dispatchMessages([{ 11309 type: 'error', 11310 text: msg 11311 }]); 11312 11313 } 11314 switch (true) { 11315 case !!result.popup_action: 11316 var parser = new DOMParser(); 11317 var doc = parser.parseFromString(result.message, 'text/html'); 11318 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 11319 if (errorMsg) { 11320 msg = errorMsg; 11321 window.dispatchMessages && window.dispatchMessages([{ 11322 type: 'error', 11323 text: msg 11324 }]); 11325 } else { 11326 window.dispatchEvent(new CustomEvent(result.popup_action, {detail: result})); 11327 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11328 11329 if (globalActionName == 'UpdateItemOptions') { 11330 window.location.href = `${BASE_URL}checkout/cart`; 11331 } 11332 } 11333 break; 11334 case !!result.redirect: 11335 window.location.href = result.redirect; 11336 break; 11337 } 11338 } 11339 } 11340 11341 if (document.body.classList.contains('catalog-category-view')) { 11342 hyva.getBrowserStorage().setItem( 11343 'last_category_id', 11344 '' 11345 ); 11346 } 11347 11348 const groupedOptions = document.querySelector('div[x-data^=initGroupedOptions]'); 11349 11350 if (!!groupedOptions) { 11351 groupedOptions.setAttribute('x-on:amcart-trigger-grouped-form-validate.window', 'validateForm()'); 11352 } 11353 11354 window.addEventListener('amcart-add-to-cart-action', addToCartAction); 11355 })(); 11356</script>
11356<script> 11357 (function () { 11358 'use strict'; 11359 11360 const addToQuoteButtonSelector = '.amquote-addto-button:not(.amasty-quote-login):not(.amasty-quote-link)'; 11361 document.querySelectorAll(addToQuoteButtonSelector).forEach((button) => { 11362 if (!button.hasAttribute('x-data')) { 11363 button.setAttribute('x-data', ''); 11364 } 11365 11366 button.removeAttribute('@click.prevent'); 11367 button.setAttribute( 11368 'x-on:click.prevent', 11369 '$dispatch(\'amcart-add-to-quote-action\', $el)'); 11370 }); 11371 })(); 11372</script>
vendor: 1 bytes, line 11372
11372
11373<script> 11374 (function () { 11375 'use strict'; 11376 11377 const addToQuoteAction = ({ detail: element }) => { 11378 const formNode = element.nodeName === 'FORM' 11379 ? element 11380 : element.form ?? element.closest('form'); 11381 11382 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 11383 if (!formNode || !formNode.checkValidity()) { 11384 return formNode?.reportValidity(); 11385 } 11386 11387 performRequest(formNode); 11388 } 11389 11390 const performRequest = (formNode) => { 11391 const url = `${BASE_URL}amasty_cart/quote/${getAction(formNode)}`; 11392 const headers = { 11393 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 11394 }; 11395 const formData = new FormData(formNode); 11396 const isProductPage = formNode.id === 'product_addtocart_form' 11397 && document.body.classList.contains('catalog-product-view'); 11398 formData.set('product_page', isProductPage); 11399 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 11400 formData.set('id', formData.get('item')); 11401 11402 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 11403 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: formNode })); 11404 11405 fetch(url, { headers: { ...headers }, body: new URLSearchParams(formData), method: 'POST' }) 11406 .then(response => response.json()) 11407 .then((result) => { 11408 switch (true) { 11409 case !!result.popup_action: 11410 window.dispatchEvent(new CustomEvent(result.popup_action, { detail: result })); 11411 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11412 break; 11413 case !!result.redirect: 11414 window.location.href = result.redirect; 11415 break; 11416 } 11417 }).catch((error) => { 11418 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11419 [{ 11420 type: "error", 11421 text: error 11422 }], 5000 11423 ); 11424 }).finally(() => { 11425 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 11426 }); 11427 }; 11428 11429 const getAction = (formNode) => { 11430 return (formNode.action.includes('amasty_quote') && formNode.action.includes('updateItemOptions')) 11431 ? 'updateItemOptions' 11432 : 'add'; 11433 }; 11434 11435 window.addEventListener('amcart-add-to-quote-action', addToQuoteAction); 11436 })(); 11437</script>
11437 11438 11439 11440
11440<script> 11441 'use strict'; 11442 11443 (function () { 11444 const initCompareFunctions = ['initCompareOnProductList', 'initCompareOnProductView']; 11445 11446 initCompareFunctions.forEach(compareFunction => { 11447 window[compareFunction] = function () { 11448 return { 11449 addToCompare: function (productId) { 11450 var loader=document.getElementById('loading'); 11451 console.log("11111111"); 11452 loader.style.display='block'; 11453 console.log("Add To compare amasty ajax cart qqqqq"); 11454 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 11455 const headers = { 11456 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 11457 }; 11458 const body = new URLSearchParams({ 11459 form_key: hyva.getFormKey(), 11460 product: productId, 11461 is_ajax: true 11462 }); 11463 11464 fetch(postUrl, {headers: headers, body: body, method: 'POST'}).then((response) => { 11465 if (response.redirected) { 11466 window.location.href = response.url; 11467 } else if (response.ok) { 11468 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11469 } else { 11470 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11471 [{ 11472 type: "warning", 11473 text: "Could not add item to the comparison list." 11474 }], 11475 1000 11476 ); 11477 } 11478 }).catch((error) => { 11479 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11480 [{ 11481 type: 'error', 11482 text: error 11483 }], 11484 1000 11485 ); 11486 }); 11487 } 11488 }; 11489 }; 11490 }); 11491 })(); 11492 </script>
11492 11493 11494 11495 11496 11497 11498<section x-data="{isLoading: false}" x-cloak 11499 @amcart-loading-start.window="isLoading = true" 11500 @amcart-loading-stop.window="isLoading = false"> 11501 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 11502 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 11503 x-show="isLoading" 11504 x-transition:enter="ease-out duration-200" 11505 x-transition:enter-start="opacity-0" 11506 x-transition:enter-end="opacity-100" 11507 x-transition:leave="ease-in duration-200" 11508 x-transition:leave-start="opacity-100" 11509 x-transition:leave-end="opacity-0"> 11510 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 11511<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 11512 <g fill="none" fill-rule="evenodd"> 11513 <g transform="translate(1 1)" stroke-width="2"> 11514 <circle cx="5" cy="50" r="5"> 11515 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 11516 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 11517 </circle> 11518 <circle cx="27" cy="5" r="5"> 11519 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 11520 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 11521 </circle> 11522 <circle cx="49" cy="50" r="5"> 11523 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 11524 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 11525 </circle> 11526 </g> 11527 </g> 11528<title>loader</title></svg> 11529 <div class="ml-10 text-primary text-xl"> 11530 Loading... </div> 11531</div> 11532</section> 11533 11534<div x-data="prDataPrivacyCheckboxDetailModalComponent.create()" 11535 @set-is-show-modal.window="isShowModal = $event.detail" 11536 @keydown.escape="closeModal" 11537> 11538 <div x-ref="pr-data-privacy-checkbox-detail" x-show="isShowModal" x-cloak> 11539 <div class="inset-0 fixed z-50"> 11540 <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" 11541 x-show="isShowModal" x-transition 11542 > 11543 <span class="absolute top-3 right-3 cursor-pointer hover:text-gray-700 p-1" @click="closeModal"> 11544 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" role="img"> 11545 <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"/> 11546<title>x</title></svg> 11547 </span> 11548 <template x-if="data.checkbox"> 11549 <div id="prgdpr-consent-checkboxes-modal" class="flex flex-col"> 11550 <div class="modal-header flex flex-col flex-shrink-0 flex-grow-0 mb-5"> 11551 <h2 class="text-xl lg:text-2lx pb-3 mb-1 border-container border-b" x-html="data.checkbox.policy.title"></h2> 11552 <a data-contentid="prgdpr-print-content" 11553 class="ml-auto text-sm text-blue-600 hover:underline" 11554 href="#" 11555 @click.prevent="print()" 11556 > 11557 Print </a> 11558 </div> 11559 <div class="prgdpr-consent-checkboxes-item-content overflow-y-auto mb-5" id="prgdpr-print-content"> 11560 <div class="prose max-w-none" x-html="data.checkbox.policy.content"></div> 11561 </div> 11562 <div class="modal-footer flex-shrink-0 flex-grow-0 pt-5 mt-auto border-container border-t"> 11563 <button type="button" 11564 class="action iagree btn btn-primary" 11565 @click="data.checkbox.checked = data.checkbox.isAlreadyChecked = true;
11565 $dispatch('prgdpr-checkbox-agree', 'checkbox' + data.checkbox.consentId); closeModal();" 11566 > 11567 I agree </button> 11568 </div> 11569 </div> 11570</template> 11571 </div> 11572 11573 <div class="bg-gray-800 opacity-50 absolute inset-0" @click="closeModal"></div> 11574 </div> 11575 </div> 11576</div> 11577
11578<script> 11579 const prDataPrivacyCheckboxDetailModalComponent = { 11580 data: null, 11581 isShowModal: false, 11582 create: function () { 11583 this.data = Alpine.reactive({checkbox: null}); 11584 return this; 11585 }, 11586 setCheckbox: function (checkbox) { 11587 this.data.checkbox = checkbox; 11588 }, 11589 showModal: function () { 11590 this.isShowModal = true; 11591 }, 11592 closeModal() { 11593 this.isShowModal = false; 11594 }, 11595 print: function () { 11596 let printWindow = window.open('', 'Print', 'height=600,width=800'); 11597 printWindow.document.write( 11598 `<html><head><title>${this.data.checkbox.policy.title}</title></head><body>${this.data.checkbox.policy.content}</body></html` 11599 ); 11600 printWindow.document.close(); 11601 printWindow.focus(); 11602 printWindow.print(); 11603 printWindow.onafterprint = function () { 11604 printWindow.close(); 11605 }; 11606 11607 return true; 11608 } 11609 }; 11610</script>
vendor: 1 bytes, line 11610
11610
11611<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.flooringinc.com\/","name":"Home","@type":"WebPage"}}]}</script>
11611<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>
11611<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>
11611
11611<script defer src="https://www.dwin1.com/94345.js"></script>
11611 11612
11613<script nonce="aGt5cXM2Mm92cWs4OGUwOWd2eGhqdGFsYWVzZjFycG0="> 11614 (() => { 11615 const updateSettingBar = () => { 11616 const intervalId = setInterval(() => { 11617 const bar = document.getElementById('pr-cookie-setting-bar'); 11618 if (! bar) { 11619 return; 11620 } 11621 11622 clearInterval(intervalId); 11623 bar.querySelectorAll('input[type="checkbox"], button.action') 11624 .forEach(el => el.disabled = true); 11625 11626 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'; 11627 bar.querySelector('.pr-cookie-description') 11628 .insertAdjacentHTML('beforebegin', notification); 11629 }, 400); 11630 } 11631 11632 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateSettingBar); 11633 })(); 11634</script>
vendor: 1 bytes, line 11634
11634
11635<script type="application/json" id="default-section-data"> 11636 {"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":1791055641},"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>
11636 11637</div><div x-data="fpcTracking()" x-init="sendRequest()"></div>
11638<script> 11639 function fpcTracking() { 11640 return { 11641 url: 'https://www.flooringinc.com/amasty_fpc/reports/', 11642 sendRequest() { 11643 const ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart; 11644 fetch(`${this.url}?` + new URLSearchParams({ ttfb }), { 11645 method: 'GET', 11646 headers: { 11647 'Content-Type': 'application/json', 11648 'X-Requested-With': 'XMLHttpRequest', 11649 } 11650 }) 11651 } 11652 } 11653 } 11654</script>
11654 11655<!-- amasty-fpc-status -->
11655<script> 11656 const wpGA4ServerSide = { 11657 pushClick: function(productId, listId, listName, index, elm) { 11658 if (elm && elm.hasAttribute('onclick')) { 11659 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/productclick/'; 11660 if (productId && listId && listName) { 11661 fetch(requestUrl, { 11662 method: 'POST', 11663 headers: { 11664 'Content-Type': 'application/x-www-form-urlencoded', 11665 'X-Requested-With': 'XMLHttpRequest' 11666 }, 11667 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 11668 }) 11669 .then(res => res.json()) 11670 .then(data => { 11671 }); 11672 } 11673 } 11674 }, 11675 11676 pushViewItemList: function(hashId) { 11677 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 11678 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/viewitemlist/'; 11679 fetch(requestUrl, { 11680 method: 'POST', 11681 headers: { 11682 'Content-Type': 'application/x-www-form-urlencoded', 11683 'X-Requested-With': 'XMLHttpRequest' 11684 }, 11685 11686 body: 'hash_id='+hashId 11687 }) 11688 .then(res => res.json()) 11689 .then(data => { 11690 }); 11691 } 11692 } 11693 }; 11694 11695 window.wpGA4ServerSide = wpGA4ServerSide; 11696 11697 let allowGa4Services = window.ga4AllowServices ?? true; 11698 11699 if (allowGa4Services) { 11700 const {fetch: originalFetch} = window; 11701 window.fetch = async (...args) => { 11702 let [resource, config] = args; 11703 let response = await originalFetch(resource, config); 11704 11705 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 11706 response.clone().json().then(data => { 11707 if (data.wp_ga4.datalayer) { 11708 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 11709 dataLayerData.forEach((dataLayerItem) => { 11710 window.dataLayer.push({ecommerce: null}); 11711 window.dataLayer.push(dataLayerItem); 11712 }); 11713 } 11714 }); 11715 } 11716 return response; 11717 }; 11718 } 11719 11720 </script>
11720 11721
11721<script> 11722 let allowGa4ServicesMeta = window.ga4AllowServices ?? true; 11723 if (allowGa4ServicesMeta) { 11724 const {fetch: originalFetchMeta} = window; 11725 window.fetch = async (...args) => { 11726 let [resource, config] = args; 11727 let response = await originalFetchMeta(resource, config); 11728 11729 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 11730 response.clone().json().then(data => { 11731 if (data.wp_ga4 && data.wp_ga4.metapixel) { 11732 const metaPixel = JSON.parse(data.wp_ga4.metapixel); 11733 for (index in metaPixel) { 11734 fbq(metaPixel[index].track, metaPixel[index].eventName, metaPixel[index].eventData); 11735 } 11736 } 11737 }); 11738 } 11739 return response; 11740 }; 11741 } 11742 </script>
vendor: 1 bytes, line 11742
11742
11743<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-d3390ca2649c82069a5","applicationID":"1112615138","transactionName":"YwMDN0NXChZSVRBZWlpJIABFXwsLHFQIX1IbDw8HVE5LDF1SAUg=","queueTime":0,"applicationTime":657,"atts":"T0QAQQtNGRg=","errorBeacon":"bam.nr-data.net","agent":""}</script>
11743</body> 11744</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.