1<!doctype html> 2<html lang="en"> 3<head prefix="og: http://ogp.me/ns# category: http://ogp.me/ns/category#"> 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="Shop Best Rubber Flooring: Tiles, Rolls, Mats | Gym & Playground"/> 7<meta name="description" content="Shop the best Traxxon rubber flooring for gyms, playgrounds & commercial use. Durable rubber tiles, rolls & mats, indoor & outdoor. Lowest prices!"/> 8<meta name="keywords" content="gym flooring, rubber flooring, rubber mat, rubber mats, rubber gym flooring, basement flooring, rubber floor tiles, resilient flooring, rubber floor mat, rubber floor, rubber matting, playground flooring, rolled rubber flooring, rubber tile, rubber floors, rubber rolls, rubberized flooring, interlocking rubber flooring, commercial rubber flooring, playground rubber tiles, recycled rubber flooring, industrial rubber flooring, durable rubber flooring "/> 9<meta name="robots" content="INDEX,FOLLOW"/> 10<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/> 11<title>Shop Best Rubber Flooring: Tiles, Rolls, Mats | Gym & Playground</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>
vendor: 1 bytes, line 16
16
17<script type="text/javascript" async="async" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MirasvitLayeredNavigation/js/lib/nouislider.min.js"></script>
17 18<link rel="canonical" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" /> 19<link rel="icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 20<link rel="shortcut icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 21 22<!-- Plausible Script Start --> 23
24<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 24
24
25<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
25 26 27<!-- Plausible Script Ends --> 28 29<!--My8cKJTuUilt2Vvmb0igB9BsOCrMSS2F--> 30 31<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 32<link rel="dns-prefetch" href="https://www.googletagmanager.com"> 33<link rel="preload" href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2" as="font" type="font/woff2" crossorigin="anonymous"/> 34 35<style> 36.needsclick.kl-teaser-UEa7DA { display:none!important; } 37.bg-white.w-full.max-w-\[580px\].text-center.rounded-lg.shadow-lg { 38 max-width: 580px; 39} 40</style> 41
42<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 43 window.getWpGA4Cookie = function(name) { 44 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 45 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 46 }; 47 48 window.ga4AllowServices = false; 49 50 var isCookieRestrictionModeEnabled = 0, 51 currentWebsiteId = 1, 52 cookieRestrictionName = 'user_allowed_save_cookie'; 53 54 if (isCookieRestrictionModeEnabled) { 55 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 56 57 if (allowedCookies !== undefined) { 58 allowedWebsites = JSON.parse(allowedCookies); 59 60 if (allowedWebsites[currentWebsiteId] === 1) { 61 window.ga4AllowServices = true; 62 } 63 } 64 } else { 65 window.ga4AllowServices = true; 66 } 67</script>
67 68
68<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 69 if (window.ga4AllowServices) { 70 window.dataLayer = window.dataLayer || []; 71 var dl4Objects = [{"pageName":"Shop Best Rubber Flooring: Tiles, Rolls, Mats | Gym & Playground","pageType":"category"},{"ecommerce":{"items":[{"item_name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"294452","price":3.96,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":1},{"item_name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"305543","price":6.33,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":2},{"item_name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"269393","price":8.29,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":3},{"item_name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"420159","price":8.25,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":4},{"item_name":"Next-Day Rubber Rolls \u2013 Custom Cut","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"327947","price":4.76,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":5},{"item_name":"Goliath XL Rubber Tiles","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"420108","price":30.11,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":6},{"item_name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"308597","price":22.09,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":7},{"item_name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"288551","price":16.42,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":8},{"item_name":"PowerLock Rubber Gym Floor Tiles","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"304232","price":6.06,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":9},{"item_name":"1\/4\" Tough Rubber Flooring Rolls","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"316394","price":4.6,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":10},{"item_name":"Dura Lock Rubber Tiles","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"275153","price":6.72,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":11},{"item_name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"298961","price":162,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":12},{"item_name":"Jamboree Rubber Playground Tiles\u2122","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"289901","price":26.99,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":13},{"item_name":"Regrind Rubber Rolls","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"290504","price":4.96,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":14},{"item_name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"302564","price":47.49,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":15}],"item_list_id":"2333","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring"},"event":"view_item_list"},{"ecommerce":{"items":[{"item_name":"8mm Strong Rubber Gym Flooring Rolls","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"292697","price":5.65,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":16},{"item_name":"15mm Impact Rubber Rolls - Designer Series","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"284975","price":25.96,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":17},{"item_name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"281438","price":55.5,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":18},{"item_name":"1\" Monster Rubber Tiles","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"301589","price":35.96,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":19},{"item_name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"304106","price":13,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":20},{"item_name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats ","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"277442","price":63.74,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":21}
71,{"item_name":"Budget Rubber Flooring Rolls - Best Value","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"421534","price":3.16,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":22},{"item_name":"8mm Strong Rubber Rolls - Designer Series","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"305060","price":11.38,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":23},{"item_name":"Eco-Flec Rubber Rolls","affiliation":"Flooring Inc. - Main Website Store - Default Store View","item_id":"304136","price":3.96,"item_brand":"","item_category":"Flooring By Category","item_category2":"Rubber Flooring","item_category3":"All Rubber Flooring","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring","item_list_id":"2333","index":24}],"item_list_id":"2333","item_list_name":"Flooring By Category\/Rubber Flooring\/All Rubber Flooring"},"event":"view_item_list"}]; 72 for (var i in dl4Objects) { 73 window.dataLayer.push({ecommerce: null}); 74 window.dataLayer.push(dl4Objects[i]); 75 } 76 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 77 wpGA4Cookies.map(function (cookieName) { 78 var cookieValue = window.getWpGA4Cookie(cookieName); 79 if (cookieValue) { 80 var dl4Object = {}; 81 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 82 window.dataLayer.push(dl4Object); 83 } 84 }); 85 } 86 </script>
86 87 88 <!-- Google Tag Manager -->
89<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU=" > if (window.ga4AllowServices) { 90 91window.addEventListener('init-external-scripts', () => {
vendor: 335 bytes, lines 91-97
91 92 93(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 94new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 95j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 96'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 97})(window,document,'script','dataLayer','
97GTM-5XR7MB7
vendor: 7 bytes, lines 97-98
97'); 98
99}, {once: true, passive: true}); 100 101} </script>
101 102<!-- End Google Tag Manager --> 103 104
105<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU=">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;} 106attributes=Object.assign(this.defaultAttributes,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 107attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 108value=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;} 109stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 110stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 111return(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;} 112var 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);} 113try{var name=this.converter.write(parts[0]);cookie=this.converter.read(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 114jar[name]=cookie;if(key===name){break;}}catch(e){}} 115return key?jar[key]:jar;}}</script>
115 116
117<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU=">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();} 118document.dispatchEvent(new Event('pr-global-privacy-control-api:configured'));};if(!this.config.canProcessSignal){setConfigurationResult(false);return;} 119if(this.cache.get('isApplicableForUser')){setConfigurationResult(this.cache.get('isApplicableForUser'));return;} 120if(!navigator.globalPrivacyControl){setConfigurationResult(false);return;} 121if(!this.config.isGeotargetingEnabled){this.cache.set('isApplicableForUser',true);setConfigurationResult(true);return;} 122this.geotargeting.isApplicable().then(result=>{this.cache.set('isApplicableForUser',result);setConfigurationResult(result);}).catch(()=>setConfigurationResult(true));},shouldApply:function(){if(!this.isConfigured){return false;} 123return 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} 124this.handlers.push(handler);if(prGlobalPrivacyControlApi.isConfigured&&prGlobalPrivacyControlApi.shouldApply()){handler.callback();handler.executed=true;}},processPendingHandlers:function(){if(!prGlobalPrivacyControlApi.shouldApply()){return;} 125if(!prCookieService.get('pr-gpc-signal-handled')){prCookieService.set('pr-gpc-signal-handled',true,{expires:null});} 126this.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 126
126
127<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>
127 128 129 130
130<script type="text/javascript" nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU=">(()=>{let userAllowedCookies=prCookieService.get('user_allowed_save_cookie');if(!userAllowedCookies){return;} 131let customerConsent=prCookieService.get('pr-cookie-consent');if(!customerConsent){return;} 132try{customerConsent=JSON.parse(customerConsent);}catch(error){return;} 133const categoryKey='marketing';if(customerConsent.includes('all')||customerConsent.includes(categoryKey)){return;} 134let intervalId=setInterval(prCookieService.set.bind(prCookieService,'mg_dnt',true,{expires:null}),500);document.addEventListener('pr-cookie-consent-api:configured',()=>{clearInterval(intervalId);});})();</script>
134 135 136<!-- Critical CSS for <lite-youtube> element to avoid CLS: https://web.dev/cls/ --> 137<style> 138 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>
139<script> 140 var BASE_URL = 'https://www.flooringinc.com/'; 141 var THEME_PATH = 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US'; 142 var COOKIE_CONFIG = { 143 "expires": null, 144 "path": "\u002F", 145 "domain": ".www.flooringinc.com", 146 "secure": true, 147 "lifetime": "3600", 148 "cookie_restriction_enabled": false }; 149 var CURRENT_STORE_CODE = 'default'; 150 var CURRENT_WEBSITE_ID = '1'; 151 152 window.hyva = window.hyva || {} 153 154 window.cookie_consent_groups = window.cookie_consent_groups || {} 155 window.cookie_consent_groups['necessary'] = true; 156 157 window.cookie_consent_config = window.cookie_consent_config || {}; 158 window.cookie_consent_config['necessary'] = [].concat( 159 window.cookie_consent_config['necessary'] || [], 160 [ 161 'user_allowed_save_cookie', 162 'form_key', 163 'mage-messages', 164 'private_content_version', 165 'mage-cache-sessid', 166 'last_visited_store', 167 'section_data_ids' 168 ] 169 ); 170</script>
vendor: 1 bytes, line 170
170
171<script> 172 'use strict'; 173 (function( hyva, undefined ) { 174 175 function lifetimeToExpires(options, defaults) { 176 177 const lifetime = options.lifetime || defaults.lifetime; 178 179 if (lifetime) { 180 const date = new Date; 181 date.setTime(date.getTime() + lifetime * 1000); 182 return date; 183 } 184 185 return null; 186 } 187 188 function generateRandomString() { 189 190 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 191 length = 16; 192 193 let formKey = '', 194 charactersLength = allowedCharacters.length; 195 196 for (let i = 0; i < length; i++) { 197 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 198 } 199 200 return formKey; 201 } 202 203 const sessionCookieMarker = {noLifetime: true} 204 205 const cookieTempStorage = {}; 206 207 const internalCookie = { 208 get(name) { 209 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 210 return v ? v[2] : null; 211 }, 212 set(name, value, days, skipSetDomain) { 213 let expires, 214 path, 215 domain, 216 secure, 217 samesite; 218 219 const defaultCookieConfig = { 220 expires: null, 221 path: '/', 222 domain: null, 223 secure: false, 224 lifetime: null, 225 samesite: 'lax' 226 }; 227 228 const cookieConfig = window.COOKIE_CONFIG || {}; 229 230 expires = days && days !== sessionCookieMarker 231 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 232 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 233 234 path = cookieConfig.path || defaultCookieConfig.path; 235 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 236 secure = cookieConfig.secure || defaultCookieConfig.secure; 237 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 238 239 document.cookie = name + "=" + encodeURIComponent(value) + 240 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 241 (path ? '; path=' + path : '') + 242 (domain ? '; domain=' + domain : '') + 243 (secure ? '; secure' : '') + 244 (samesite ? '; samesite=' + samesite : 'lax'); 245 }, 246 isWebsiteAllowedToSaveCookie() { 247 const allowedCookies = this.get('user_allowed_save_cookie'); 248 if (allowedCookies) { 249 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 250 251 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 252 } 253 return false; 254 }, 255 getGroupByCookieName(name) { 256 const cookieConsentConfig = window.cookie_consent_config || {}; 257 let group = null; 258 for (let prop in cookieConsentConfig) { 259 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 260 if (cookieConsentConfig[prop].includes(name)) { 261 group = prop; 262 break; 263 } 264 } 265 return group; 266 }, 267 isCookieAllowed(name) { 268 const cookieGroup = this.getGroupByCookieName(name); 269 return cookieGroup 270 ? window.cookie_consent_groups[cookieGroup] 271 : this.isWebsiteAllowedToSaveCookie(); 272 }, 273 saveTempStorageCookies() { 274 for (const [name, data] of Object.entries(cookieTempStorage)) { 275 if (this.isCookieAllowed(name)) { 276 this.set(name, data['value'], data['days'], data['skipSetDomain']); 277 delete cookieTempStorage[name]; 278 } 279 } 280 } 281 }; 282 283 hyva.getCookie = (name) => { 284 const cookieConfig = window.COOKIE_CONFIG || {}; 285 286 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 287 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 288 } 289 290 return internalCookie.get(name); 291 } 292 293 hyva.setCookie = (name, value, days, skipSetDomain) => { 294 const cookieConfig = window.COOKIE_CONFIG || {}; 295 296 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 297 cookieTempStorage[name] = {value, days, skipSetDomain}; 298 return; 299 } 300 return internalCookie.set(name, value, days, skipSetDomain); 301 } 302 303 304 hyva.setSessionCookie = (name, value, skipSetDomain) => { 305 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 306 } 307 308 hyva.getBrowserStorage = () => { 309 const browserStorage = window.localStorage || window.sessionStorage; 310 if (!browserStorage) { 311 console.warn('Browser Storage is unavailable'); 312 return false;
313 } 314 try { 315 browserStorage.setItem('storage_test', '1'); 316 browserStorage.removeItem('storage_test'); 317 } catch (error) { 318 console.warn('Browser Storage is not accessible', error); 319 return false; 320 } 321 return browserStorage; 322 } 323 324 hyva.postForm = (postParams) => { 325 const form = document.createElement("form"); 326 327 let data = postParams.data; 328 329 if (! postParams.skipUenc && ! data.uenc) { 330 data.uenc = btoa(window.location.href); 331 } 332 form.method = "POST"; 333 form.action = postParams.action; 334 335 Object.keys(postParams.data).map(key => { 336 const field = document.createElement("input"); 337 field.type = 'hidden' 338 field.value = postParams.data[key]; 339 field.name = key; 340 form.appendChild(field); 341 }); 342 343 const form_key = document.createElement("input"); 344 form_key.type = 'hidden'; 345 form_key.value = hyva.getFormKey(); 346 form_key.name="form_key"; 347 form.appendChild(form_key); 348 349 document.body.appendChild(form); 350 351 form.submit(); 352 } 353 354 hyva.getFormKey = function () { 355 let formKey = hyva.getCookie('form_key'); 356 357 if (!formKey) { 358 formKey = generateRandomString(); 359 hyva.setCookie('form_key', formKey); 360 } 361 362 return formKey; 363 } 364 365 hyva.formatPrice = (value, showSign, options = {}) => { 366 const formatter = new Intl.NumberFormat( 367 'en\u002DUS', 368 Object.assign({ 369 style: 'currency', 370 currency: 'USD', 371 signDisplay: showSign ? 'always' : 'auto' 372 }, options) 373 ); 374 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 375 formatter.formatToParts(value).map(({type, value}) => { 376 switch (type) { 377 case 'currency': 378 return '\u0024' || value; 379 case 'minusSign': 380 return '- '; 381 case 'plusSign': 382 return '+ '; 383 default : 384 return value; 385 } 386 }).reduce((string, part) => string + part) : 387 formatter.format(value); 388 } 389 390 const formatStr = function (str, nStart) { 391 const args = Array.from(arguments).slice(2); 392 393 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 394 const idx = parseInt(n) - nStart; 395 396 if (args[idx] === null || args[idx] === void 0) { 397 return m; 398 } 399 return p.length % 2 400 ? p.slice(0, -1).replace('%%', '%') + args[idx] 401 : p.replace('%%', '%') + n; 402 }) 403 } 404 405 hyva.str = function (string) { 406 const args = Array.from(arguments); 407 args.splice(1, 0, 1); 408 409 return formatStr.apply(undefined, args); 410 } 411 412 hyva.strf = function () { 413 const args = Array.from(arguments); 414 args.splice(1, 0, 0); 415 416 return formatStr.apply(undefined, args); 417 } 418 419 /** 420 * Take a html string as `content` parameter and 421 * extract an element from the DOM to replace in 422 * the current page under the same selector, 423 * defined by `targetSelector` 424 */ 425 hyva.replaceDomElement = (targetSelector, content) => { 426 // Parse the content and extract the DOM node using the `targetSelector` 427 const parser = new DOMParser(); 428 const doc = parser.parseFromString(content, 'text/html'); 429 const contentNode = doc.querySelector(targetSelector); 430 431 // Bail if content can't be found 432 if (!contentNode) { 433 return; 434 } 435 436 hyva.activateScripts(contentNode) 437 438 // Replace the old DOM node with the new content
439 document.querySelector(targetSelector).replaceWith(contentNode); 440 441 // Reload customerSectionData and display cookie-messages if present 442 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 443 hyva.initMessages(); 444 } 445 446 hyva.activateScripts = (contentNode) => { 447 // Extract all the script tags from the content. 448 // Script tags won't execute when inserted into a dom-element directly, 449 // therefore we need to inject them to the head of the document. 450 const tmpScripts = contentNode.getElementsByTagName('script'); 451 452 if (tmpScripts.length > 0) { 453 // Push all script tags into an array 454 // (to prevent dom manipulation while iterating over dom nodes) 455 const scripts = []; 456 for (let i = 0; i < tmpScripts.length; i++) { 457 scripts.push(tmpScripts[i]); 458 } 459 460 // Iterate over all script tags and duplicate+inject each into the head 461 for (let i = 0; i < scripts.length; i++) { 462 let script = document.createElement('script'); 463 script.innerHTML = scripts[i].innerHTML; 464 465 document.head.appendChild(script); 466 467 // Remove the original (non-executing) node from the content 468 scripts[i].parentNode.removeChild(scripts[i]); 469 } 470 } 471 return contentNode; 472 } 473 474 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 475 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 476 477 let currentTrap; 478 479 const focusableElements = (rootElement) => { 480 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 481 return Array.from(rootElement.querySelectorAll(selector)) 482 .filter(el => { 483 return el.style.display !== 'none' 484 && !el.disabled 485 && el.tabIndex !== -1 486 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 487 }) 488 } 489 490 const focusTrap = (e) => { 491 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 492 if (!isTabPressed) return; 493 494 const focusable = focusableElements(currentTrap) 495 const firstFocusableElement = focusable[0] 496 const lastFocusableElement = focusable[focusable.length - 1] 497 498 e.shiftKey 499 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 500 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 501 }; 502 503 hyva.releaseFocus = (rootElement) => { 504 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 505 currentTrap.removeEventListener('keydown', focusTrap) 506 currentTrap = null 507 } 508 } 509 hyva.trapFocus = (rootElement) => { 510 if (!rootElement) return; 511 hyva.releaseFocus() 512 currentTrap = rootElement 513 rootElement.addEventListener('keydown', focusTrap) 514 const firstElement = focusableElements(rootElement)[0] 515 firstElement && firstElement.focus() 516 } 517 518 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 519 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 520 521 }( window.hyva = window.hyva || {} )); 522</script>
vendor: 1 bytes, line 522
522
523<script> 524 if (!window.IntersectionObserver) { 525 window.IntersectionObserver = function (callback) { 526 this.observe = el => el && callback(this.takeRecords()); 527 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 528 this.disconnect = () => {}; 529 this.unobserve = () => {}; 530 } 531 } 532</script>
532 533<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>
534<script> 535// Lightweight click handler: if Zendesk is already available, open messenger and hide the button. 536// If Zendesk is not available yet we do nothing here â the DOMContentLoaded handler below is 537// responsible for loading the script (avoids double-loading the Zendesk snippet). 538(function () { 539 const btn = document.getElementById('open-chatbox'); 540 if (!btn) return; 541 542 btn.addEventListener('click', function () { 543 if (typeof zE !== 'undefined') { 544 try { 545 zE('messenger', 'open'); 546 } catch (e) { 547 // ignore if API is not ready yet 548 } 549 this.style.display = 'none'; 550 this.setAttribute('aria-hidden', 'true'); 551 } 552 // If zE is not defined we intentionally don't load the script here to avoid 553 // duplicate loading. The DOMContentLoaded listener below will handle loading. 554 }); 555})(); 556</script>
vendor: 2 bytes, line 556
556
557<script> 558/* ===== Load UserWay on click ===== */ 559document.addEventListener('DOMContentLoaded', function () { 560 561 const userWayButton = document.getElementById('uw-widget-custom-trigger'); 562 const zendeskButton = document.getElementById('open-chatbox'); 563 564 /* ---- UserWay Script Functions ---- */ 565 function initUserWay() { 566 if (window.UserWay) { 567 window.UserWay.widgetToggle(); 568 return; 569 } 570 } 571 572 function loadUserWay() { 573 if (window.UserWay) return; // Skip if already loaded 574 575 const userwayScript = document.createElement('script'); 576 userwayScript.src = 'https://cdn.userway.org/widget.js'; 577 userwayScript.type = 'text/javascript'; 578 userwayScript.async = true; 579 userwayScript.crossOrigin = 'anonymous'; 580 userwayScript.setAttribute('data-account', 'vfvO52o2Kn'); 581 document.head.append(userwayScript); 582 583 /* Hide UserWay accessibility icon when initialized */ 584 document.addEventListener('userway:init_completed', function (event) { 585 const instance = event.detail.userWayInstance; 586 instance.iconVisibilityOff(); 587 588 const userwayIframe = document.getElementById("launcher"); 589 if (userwayIframe) { 590 const userwaySiblings = Array.from(userwayIframe.parentNode.children); 591 const userwaySiblingDiv = userwaySiblings.find(el => el.tagName === 'DIV'); 592 if (userwaySiblingDiv) { 593 userwaySiblingDiv.id = 'userway-live-chat'; 594 } 595 } 596 }, { once: true }); 597 } 598 599 if (userWayButton) { 600 userWayButton.addEventListener('click', initUserWay); 601 } 602 603 /* ---- Load UserWay on Scroll ---- */ 604 let hasLoaded = false; 605 function handleScroll() { 606 if (!hasLoaded) { 607 hasLoaded = true; 608 loadUserWay(); 609 // Remove scroll listener after loading 610 window.removeEventListener('scroll', handleScroll); 611 } 612 } 613 614 window.addEventListener('scroll', handleScroll); 615 616 /* ---- Load Zendesk Script ---- */ 617 function hideChatButton() { 618 try { 619 if (zendeskButton) { 620 zendeskButton.style.display = 'none'; 621 zendeskButton.setAttribute('aria-hidden', 'true'); 622 } 623 } catch (e) { 624 // ignore 625 } 626 } 627 628 function loadZendesk() { 629 // If already loaded, open messenger and hide the button 630 if (window.zE) { 631 try { zE('messenger', 'open'); } catch (e) { } 632 hideChatButton(); 633 return; 634 } 635 636 // If script is already injected, do nothing (we'll open on load) 637 if (document.getElementById('ze-snippet')) return; 638 639 const zendeskScript = document.createElement('script'); 640 zendeskScript.id = 'ze-snippet'; 641 zendeskScript.src = 'https://static.zdassets.com/ekr/snippet.js?key=f007eb69-6b5d-407a-bdff-0706af960a4d'; 642 643 zendeskScript.onload = function () { 644 // Wait a short moment to ensure widget initializes 645 setTimeout(() => { 646 if (typeof zE !== 'undefined') { 647 try { zE('messenger', 'open'); } catch (e) { } 648 hideChatButton(); 649 } 650 }, 300); 651 }; 652 653 document.head.append(zendeskScript); 654 } 655 656 if (zendeskButton) { 657 zendeskButton.addEventListener('click', loadZendesk); 658 } 659 660}); 661</script>
661 662 663<style> 664.checkout-index-index button#open-chatbox{display:none} 665.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>');} 666</style></div> 667<meta property="og:type" content="category"/> 668 669 <meta property="og:title" content="Shop Best Rubber Flooring: Tiles, Rolls, Mats | Gym & Playground"/> 670 671 <meta property="og:description" content="Shop the best Traxxon rubber flooring for gyms, playgrounds & commercial use. Durable rubber tiles, rolls & mats, indoor & outdoor. Lowest prices!"/> 672 673<meta property="og:url" content="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html"/> 674 675 <meta property="og:image" content="https://www.flooringinc.com/media/catalog/category/all_rubber_main.jpg"/> 676 677<meta property="og:site_name" content="Flooring Inc."/> 678 <style>.mst-nav__horizontal-bar {display:none}.mst-nav__label .mst-nav__label-item._highlight a{color: #ff5501;}.navigation-horizontal .block-actions.filter-actions {display: none;} .sidebar .filter-options .filter-options-content { display: block; } /* Display filters rules - begin */.sidebar [x-data='initLayeredNavigation()'] .block-title {display:flex;}.sidebar [data-nav-position=horizontal] {display:none;}/* Display filters rules - end */</style> 679
680<script> 681 window.addEventListener('load', function () { 682 window.magentoStorefrontEvents = magentoStorefrontEvents; 683 magentoStorefrontEvents.context.setStorefrontInstance( 684 {"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"} ); 685 magentoStorefrontEvents.context.setMagentoExtension({ 686 magentoExtensionVersion: "8.0.1", 687 }); 688 magentoStorefrontEvents.context.setDataServicesExtension({ 689 version: "8.0.1", 690 }); 691 magentoStorefrontEvents.context.setPage({ 692 pageType: "Default" 693 }); 694 magentoStorefrontEvents.context.setContext("pageExtended", { 695 action: "page-view" 696 }); 697 698 699 magentoStorefrontEvents.publish.pageView(); 700 }); 701</script>
701 702<link rel="next" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=2" /> 703</head> 704<body class="pl-thm-dcw pl-thm-dcw-hyvadesktop prgdpr-dcw prgdpr-dcw-hyvadesktop page-with-filter page-products categorypath-shop-rubber-flooring-all-rubber-flooring category-all-rubber-flooring mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-dcw-hyvadesktop catalog-category-view page-layout-2columns-left" id="html-body"> 705<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 705-706
705 706<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
706GTM-5XR7MB7
vendor: 85 bytes, lines 706-707
706" 707height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
708<!-- End Google Tag Manager (noscript) --> 709
710<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 711var prCookieConsentApi = { 712 CUSTOMER_CONSENT: 'pr-cookie-consent', 713 SYSTEM_COOKIES: [ 714 'PHPSESSID', 715 this.CUSTOMER_CONSENT, 716 'user_allowed_save_cookie', 717 ], 718 config: {}, 719 whitelist: {}, 720 isConfigured: false, 721 /** 722 * Contains callbacks that run after all configuration come 723 * 724 * @type {function[]} 725 */ 726 configuredCallbacks: [], 727 initCookieBlocking: function () { 728 var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') 729 || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); 730 if (cookieDesc && cookieDesc.configurable) { 731 var api = this; 732 Object.defineProperty(document, 'cookie', { 733 get: function () { 734 return cookieDesc.get.call(document); 735 }, 736 set: function (cookie) { 737 let cookieName = cookie.substring(0, cookie.indexOf('=')).trim(); 738 document.dispatchEvent(new CustomEvent('pr-cookie-consent-api:cookie-blocking:validation', { 739 detail: {cookieName: cookieName, isAllowed: api.isAllowed(cookieName), cookie: cookie} 740 })); 741 742 if (! api.isAllowed(cookieName)) { 743 api.logger.warn('CookieConsent: blocked cookie "' + cookieName + '"'); 744 return; 745 } 746 cookieDesc.set.call(document, cookie); 747 } 748 }); 749 } 750 }, 751 getCookieValue: function (name) { 752 var values = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 753 return values ? decodeURIComponent(values.pop()) : ''; 754 }, 755 configure: function (configJson) { 756 this.logger.init(); 757 this.userScript.init(); 758 try { 759 this.config = JSON.parse(configJson); 760 if (this.config.canManageCookie === null) { 761 console.error('CookieConsent: restriction config is invalid'); 762 } 763 this.isConfigured = true; 764 765 this.configuredCallbacks.forEach(function (callback) { 766 callback(); 767 }.bind(this)); 768 769 this.clearRejectedCookie(); 770 } catch (e) { 771 console.error('CookieConsent: error has happened during parse JSON'); 772 return false; 773 } 774 775 document.dispatchEvent(new Event('pr-cookie-consent-api:configured')); 776 }, 777 /** 778 * @param {function} callback 779 * @returns {prCookieConsentApi} 780 */ 781 addConfiguredCallback: function (callback) { 782 this.configuredCallbacks.push(callback); 783 return this; 784 }, 785 isAllowedCategory: function (categoryKey) { 786 if (! this.config.canManageCookie) { 787 return true; 788 } 789 if (this.isEssentialCategory(categoryKey)) { 790 return true; 791 } 792 if (this.isOptIn()) { 793 if (this.isAllCategoriesAllowed()) { 794 return true; 795 } 796 return this.consent.get().includes(categoryKey); 797 } 798 return this.config.canUseCookieBeforeOptIn; 799 }, 800 getDomain: function (cookieName) { 801 return this.config.cookies[cookieName] ? this.config.cookies[cookieName].domain : null; 802 }, 803 isAllowed: function (cookieName) { 804 if (this.isSystemCookie(cookieName)) { 805 return true; 806 } 807 if (! this.config.canManageCookie) { 808 return true; 809 } 810 if (this.whitelist[cookieName]) { 811 return true; 812 } 813 cookieName = this.getTrueCookieName(cookieName); 814 if (! this.isOptIn()) { 815 if (this.config.canUseCookieBeforeOptIn) { 816 return true; 817 } 818 if (this.isKnownCookie(cookieName)) { 819 return this.isInEssentialCategory(cookieName); 820 } 821 return false; 822 } 823 if (! this.isKnownCookie(cookieName)) { 824 return ! this.config.canBlockUnknownCookie; 825 } 826 return this.isInAllowedCategory(cookieName); 827 }, 828 isAllCategoriesAllowed: function () { 829 if (null === this.cache.get('allowAllCategories')) { 830 var customerConsent = this.consent.get(); 831 if (customerConsent && customerConsent.includes('all') ) { 832 this.cache.set('allowAllCategories', true); 833 } else { 834 var allowedWebsites = this.websiteRestriction.getAllowed(); 835 this.cache.set('allowAllCategories', allowedWebsites[this.config.mage.website] === 1); 836 } 837 } 838 return this.cache.get('allowAllCategories'); 839 }, 840 isEssentialCategory: function (categoryKey) { 841 return this.config.essentialCategoryKeys.includes(categoryKey); 842 }, 843 isInEssentialCategory: function (cookieName) { 844 return this.isEssentialCategory(this.getCookieCategory(cookieName)); 845 }, 846 isInAllowedCategory: function (cookieName) { 847 return this.isAllowedCategory(this.getCookieCategory(cookieName)); 848 }, 849 getCookieCategory: function (cookieName) {
850 return this.config.cookieToCategoryMapping[cookieName]; 851 }, 852 isOptIn: function () { 853 var allowedWithDefaultCookie = this.websiteRestriction.getAllowed()[this.config.mage.website] === 1; 854 return Boolean(this.consent.get()) || allowedWithDefaultCookie; 855 }, 856 isSystemCookie: function (cookieName) { 857 return this.SYSTEM_COOKIES.includes(cookieName); 858 }, 859 isKnownCookie: function (cookieName) { 860 return this.config.cookieToCategoryMapping.hasOwnProperty(cookieName); 861 }, 862 getTrueCookieName: function (cookieName) { 863 var keys = Object.keys(this.config.dynamicNamesPatterns), key; 864 for (var i = 0, length = keys.length; i < length; i++) { 865 key = keys[i]; 866 if (new RegExp(this.config.dynamicNamesPatterns[key]).test(cookieName)) { 867 return key; 868 } 869 } 870 return cookieName; 871 }, 872 clearRejectedCookie: function () { 873 let cookies = prCookieService.get(); 874 Object.keys(cookies).forEach(function(cookieName) { 875 if (this.isAllowed(cookieName)) { 876 return; 877 } 878 879 var encodedCookieName = cookieName = encodeURIComponent(String(cookieName)) 880 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 881 .replace(/[\(\)]/g, escape); 882 883 this.whitelist[encodedCookieName] = true; 884 if (this.getDomain(cookieName)) { 885 prCookieService.remove(cookieName, {domain: this.getDomain(cookieName)}); 886 } else { 887 prCookieService.remove(cookieName); 888 if (this.config.cookie.parentDomain) { 889 prCookieService.remove(cookieName, {domain: this.config.cookie.parentDomain}); 890 } 891 } 892 this.logger.warn('CookieConsent: remove cookie "' + cookieName + '"'); 893 if (typeof prCookieService.get(cookieName) !== 'undefined') { 894 this.logger.error('CookieConsent: fail to remove cookie "' + cookieName + '"'); 895 } 896 this.whitelist[encodedCookieName] = false; 897 }.bind(this)); 898 } 899}; 900 901prCookieConsentApi.userScript = { 902 /**
903 * List of callbacks and categories they depend on. 904 */ 905 pendingScripts: [], 906 /** 907 * Run script after model is configured or after user provided consent. 908 */ 909 init: function () { 910 prCookieConsentApi.addConfiguredCallback(this.executePendingScripts.bind(this)); 911 prCookieConsentApi.consent.addCallback(this.executePendingScripts.bind(this)); 912 }, 913 /** 914 * Run or delay script. 915 * 916 * @param {function} callback 917 * @param {string} categoryKey 918 */ 919 execute: function (callback, categoryKey) { 920 if (prCookieConsentApi.isConfigured && prCookieConsentApi.isAllowedCategory(categoryKey)) { 921 callback(); 922 return; 923 } 924 925 this.pendingScripts.push({callback: callback, categoryKey: categoryKey, executed: false}); 926 }, 927 /** 928 * Run pending scripts. 929 */ 930 executePendingScripts: function () { 931 this.pendingScripts.forEach(function (script) { 932 if (false === script.executed && prCookieConsentApi.isAllowedCategory(script.categoryKey)) { 933 script.callback(); 934 script.executed = true; 935 } 936 }.bind(this)); 937 }, 938}; 939 940prCookieConsentApi.websiteRestriction = { 941 getAllowed: function () { 942 var allowedWebsites = prCookieConsentApi.getCookieValue(prCookieConsentApi.config.mage.cookieName); 943 return allowedWebsites ? JSON.parse(allowedWebsites) : {}; 944 }, 945 allowCurrent: function () { 946 return this.set(prCookieConsentApi.config.mage.website, true); 947 }, 948 disallowCurrent: function () { 949 return this.set(prCookieConsentApi.config.mage.website, false); 950 }, 951 /** 952 * @param {number} website 953 * @param {boolean} flag 954 * @return {CookieRestriction.websiteRestriction} 955 */ 956 set: function (website, flag) { 957 var allowedWebsites = this.getAllowed(); 958 959 if (flag) { 960 allowedWebsites[website] = 1; 961 } else { 962 delete allowedWebsites[website]; 963 } 964 965 prCookieService.set(prCookieConsentApi.config.mage.cookieName, allowedWebsites, { 966 path: prCookieConsentApi.config.cookie.path, 967 expires: prCookieConsentApi.config.mage.lifetime ? Math.ceil(prCookieConsentApi.config.mage.lifetime / 86400) : 0 968 }); 969 970 return this; 971 } 972}; 973 974prCookieConsentApi.cache = { 975 cacheData: {allowAllCategories: null}, 976 get: function (key) { 977 return this.cacheData[key]; 978 }, 979 set: function (key, value) { 980 this.cacheData[key] = value; 981 }, 982 reset: function () { 983 this.cacheData = {allowAllCategories: null}; 984 } 985}; 986 987prCookieConsentApi.logger = { 988 level: 0, /* disabled */ 989 init: function () { 990 if (window.location.hash === '#pr-enable-cookie-log') { 991 this.level = 1; /* only warnings and errors */ 992 } 993 if (window.location.hash === '#pr-enable-cookie-log-all') { 994 this.level = 2; /* all logs */ 995 } 996 }, 997 log: function () { 998 this.level > 1 && console.log.apply(console, arguments); 999 }, 1000 warn: function () { 1001 this.level > 0 && console.warn.apply(console, arguments); 1002 }, 1003 error: function () { 1004 this.level > 0 && console.error.apply(console, arguments); 1005 } 1006}; 1007 1008prCookieConsentApi.consent = { 1009 /** 1010 * Contains callbacks that run after user consent. 1011 * 1012 * @type {function[]} 1013 */ 1014 callbacks: [], 1015 allowAllCategories: function () { 1016 prCookieConsentApi.cache.reset(); 1017 prCookieConsentApi.consent.set(['all']); 1018 return this; 1019 }, 1020 declineAll: function () { 1021 prCookieConsentApi.cache.reset(); 1022 prCookieConsentApi.consent.set([]); 1023 return this; 1024 }, 1025 set: function (allowedCategories) { 1026 prCookieService.set(prCookieConsentApi.CUSTOMER_CONSENT, JSON.stringify(allowedCategories), { 1027 expires: prCookieConsentApi.config.consent.expiry, 1028 path: prCookieConsentApi.config.cookie.path, 1029 domain: prCookieConsentApi.config.cookie.domain 1030 }); 1031 1032 if (allowedCategories.includes('all')) {
1033 prCookieConsentApi.websiteRestriction.allowCurrent(); 1034 } else { 1035 prCookieConsentApi.websiteRestriction.disallowCurrent(); 1036 } 1037 prCookieConsentApi.cache.reset(); 1038 1039 var isAccepting = allowedCategories.length; 1040 1041 this.callbacks.forEach(function (callback) { 1042 callback(allowedCategories) 1043 }); 1044 1045 fetch(prCookieConsentApi.config.consent.logUrl, { 1046 method: 'POST', 1047 headers: { 1048 'Content-Type': 'application/json', 1049 'X-Requested-With': 'XMLHttpRequest' 1050 }, 1051 body: JSON.stringify({acceptedKeys: allowedCategories}) 1052 }) 1053 .then(this.pageReloadAfterAction.bind(this, isAccepting)); 1054 }, 1055 /** 1056 * Reload page by configuration and action 1057 * 1058 * @param isAccepting 1059 */ 1060 pageReloadAfterAction: function (isAccepting) { 1061 if (isAccepting && prCookieConsentApi.config.consent.reloadAfterAccept) { 1062 window.location.reload(); 1063 } 1064 1065 if (! isAccepting && prCookieConsentApi.config.consent.reloadAfterDecline) { 1066 window.location.reload(); 1067 } 1068 }, 1069 get: function () { 1070 var consent = prCookieConsentApi.getCookieValue(prCookieConsentApi.CUSTOMER_CONSENT); 1071 return consent ? JSON.parse(consent) : false; 1072 }, 1073 addCallback: function (callback) { 1074 this.callbacks.push(callback); 1075 return this; 1076 }, 1077}; 1078 1079prCookieConsentApi.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
10790022\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'); 1080prCookieConsentApi.initCookieBlocking(); 1081 1082if (typeof define === 'function') { 1083 define('prCookieService', function () {return prCookieService}); 1084 define('prCookieConsentApi', function () {return prCookieConsentApi;}); 1085} 1086</script>
1086 1087 1088 1089
1089<script type="text/javascript" nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 1090 (() => { 1091 document.addEventListener('pr-cookie-consent-api:cookie-blocking:validation', (event) => { 1092 if ('mg_dnt' !== event.detail.cookieName) { 1093 return; 1094 } 1095 1096 setTimeout(() => { 1097 const categoryKey = 'marketing'; 1098 let cookieValue = (event.detail.cookie.match(/^[^=]+=(.*?)(?:$|;)/) || [])[1]?.trim(); 1099 1100 if (prCookieConsentApi.isAllowedCategory(categoryKey) && cookieValue.length) { 1101 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1102 return; 1103 } 1104 1105 if (! prCookieConsentApi.isAllowedCategory(categoryKey) && ! cookieValue.length) { 1106 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1107 } 1108 }, 100); 1109 }); 1110 1111 let handleCookieConsent = () => { 1112 const categoryKey = 'marketing'; 1113 if (prCookieConsentApi.isAllowedCategory(categoryKey)) { 1114 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1115 } else { 1116 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1117 } 1118 }; 1119 1120 prCookieConsentApi.consent.addCallback(handleCookieConsent); 1121 handleCookieConsent(); 1122 })(); 1123 </script>
1123 1124 1125
1125<script> 1126 (function () { 1127 'use strict'; 1128 1129 window.amRecaptchaModel = { 1130 formsToProtect: "form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D", 1131 isEnabledOnPayments: "", 1132 checkoutRecaptchaValidateUrl: "https://www.flooringinc.com/amcapthca/checkout/validate/", 1133 invisibleCaptchaCustomForm: "\u002D1", 1134 recaptchaConfig: { 1135 lang: "hl\u003Den" || 'hl=en', 1136 theme: "light", 1137 badge: "bottomright", 1138 sitekey: "6Lc6gcYqAAAAADiXHrgCFqC4Sewhxs-nrHYgN4oo", 1139 size: "normal" 1140 }, 1141 url: 'https://www.google.com/recaptcha/api.js', 1142 isCaptchaScriptLoaded: false, 1143 isInvisible: "normal" === 'invisible', 1144 1145 /** 1146 * Submit event 1147 * 1148 * @param {Object} $event 1149 * @return {void} 1150 */ 1151 execute: function ($event) { 1152 const eventTarget = $event?.target; 1153 if (this.isCaptchaScriptLoaded) { 1154 this.executeCaptcha(eventTarget); 1155 } else { 1156 window.addEventListener('amcaptcha-script-loaded', () => { 1157 this.isCaptchaScriptLoaded = true; 1158 this.executeCaptcha(eventTarget); 1159 this.initAmcaptchaBadges(); 1160 }); 1161 1162 this.loadRecaptchaScript(); 1163 } 1164 }, 1165 1166 /** 1167 * Execute original submit 1168 * 1169 * @param {Object} $event 1170 * @param {HTMLElement} $el 1171 * @return {void} 1172 */ 1173 recaptchaCallback: function ($event, $el) { 1174 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1175 }, 1176 1177 /** 1178 * Reset captcha 1179 * 1180 * @param {Object} $event 1181 * @param {HTMLElement} $el 1182 */ 1183 expiredCallback: function($event, $el) { 1184 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1185 }, 1186 1187 /** 1188 * Checks if event is fired on submitted element 1189 * 1190 * @param {Object} $event 1191 * @param {HTMLElement} $el 1192 * @return {boolean} 1193 */ 1194 shouldExecuteCallback: function($event, $el) { 1195 const eventWidgetId = $event.detail.widgetId; 1196 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1197 1198 return eventWidgetId === elementWidgetId; 1199 }, 1200 1201 /** 1202 * Run captcha for widget by id 1203 * 1204 * @param {HTMLElement} eventTarget 1205 * @return {void} 1206 */ 1207 executeCaptcha: function(eventTarget) { 1208 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1209 this.bindCaptchaGlobalCallbacks(eventTarget); 1210 this.renderCaptcha(eventTarget); 1211 eventTarget.dataset.amCaptchaRendered = ''; 1212 } 1213 1214 const widgetId = this.getWidgetId(eventTarget); 1215 1216 if (!widgetId) { 1217 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1218 { 1219 type: "error", 1220 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1221 } 1222 ]); 1223 return; 1224 } 1225 1226 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1227 grecaptcha.reset(widgetId); 1228 1229 if (!this.isInvisible) { 1230 this.stopAmcaptchaLoading(); 1231 return; 1232 } 1233 1234 grecaptcha.execute(widgetId) 1235 .then(() => this.stopAmcaptchaLoading()) 1236 .catch(() => this.stopAmcaptchaLoading()); 1237 }, 1238 1239 /** 1240 * Add recaptcha script to page 1241 * 1242 * @return {void} 1243 */ 1244 loadRecaptchaScript: function () { 1245 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1246 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1247 const script = document.createElement('script'); 1248 1249 script.type = 'text/javascript'; 1250 script.src = url; 1251 script.async = true; 1252 document.head.appendChild(script); 1253 }, 1254 1255 /** 1256 * Stop loader on page 1257 * 1258 * @return {void} 1259 */ 1260 stopAmcaptchaLoading: function () { 1261 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1262 }, 1263 1264 /** 1265 * Add attributes to hide captcha badge 1266 * 1267 * @return {void} 1268 */ 1269 initAmcaptchaBadges: function () { 1270 if (!this.isInvisible) { 1271 return; 1272 } 1273 1274 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1275 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1276 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1277 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1278 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1279 }); 1280 }, 1281 1282 /** 1283 * Get form widgetId 1284 * 1285 * @param {HTMLElement} eventTarget 1286 * @return {string} 1287 */ 1288 getWidgetId: function (eventTarget) { 1289 return eventTarget.dataset.amCaptchaWidgetId 1290 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1291 }, 1292 1293 /** 1294 * Add captcha badge or checkbox to protected form. 1295 * Store widgetId in dataset to pass this info in callbacks 1296 * 1297 * @param {HTMLElement} eventTarget 1298 * @return {void} 1299 */ 1300 renderCaptcha: function (eventTarget) { 1301 const captchaElement = document.createElement('div'); 1302 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1303 ?? eventTarget.closest('form'); 1304 formContent?.appendChild(captchaElement); 1305 1306 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1307 ...window.amRecaptchaModel?.recaptchaConfig, 1308 callback: () => { 1309 window.dispatchEvent(new CustomEvent( 1310 'amrecaptcha-callback', { 1311 detail: this.getCaptchaCallbackDetail(eventTarget) 1312 })); 1313 }, 1314 'expired-callback': () => { 1315 window.dispatchEvent(new CustomEvent( 1316 'amrecaptcha-expired-callback', { 1317 detail: this.getCaptchaCallbackDetail(eventTarget) 1318 })); 1319 } 1320 }); 1321 }, 1322 1323 /** 1324 * Get detail property for callback event 1325 * 1326 * @param {HTMLElement} eventTarget 1327 * @return {object} 1328 */ 1329 getCaptchaCallbackDetail: function (eventTarget) { 1330 return { 1331 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1332 form: eventTarget 1333 } 1334 }, 1335 1336 /** 1337 * Add functions that will be called on the global state 1338 * 1339 * @param {HTMLElement} eventTarget 1340 * @return {void} 1341 */ 1342 bindCaptchaGlobalCallbacks: function (eventTarget) { 1343 eventTarget.setAttribute( 1344 'x-on:amrecaptcha-callback.window', 1345 `amRecaptchaModel.recaptchaCallback($event, $el)` 1346 ); 1347 eventTarget.setAttribute( 1348 'x-on:amrecaptcha-expired-callback.window', 1349 'amRecaptchaModel.expiredCallback($event, $el)' 1350 ); 1351 } 1352 }; 1353 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1354 1355 window.amRecaptchaLoadCallback = function () { 1356 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1357 } 1358 </script>
1358 1359 1360 1361 <!--suppress HtmlUnknownTarget --> 1362 <!-- BV | Magento Extension 9.1.7 --> 1363
1363<script> 1364 window.addEventListener('init-external-scripts', () => { 1365 const bvScript = document.createElement('script'); 1366 bvScript.src = '//apps.bazaarvoice.com/deployments/incstores/main_site/production/en_US/bv.js'; 1367 bvScript.type = 'text/javascript'; 1368 bvScript.async = true; 1369 document.head.append(bvScript); 1370 }, {once: true, passive: true}); 1371 </script>
vendor: 1 bytes, line 1371
1371
1372<script> 1373 function initSocialLoginPost() { 1374 return { 1375 submitForm(form) { 1376 event.preventDefault(); 1377 var loginRefererElement = document.getElementById("sociallogin-login-referer"); 1378 var value = loginRefererElement.value; 1379 fetch(form.action, { 1380 headers: { 1381 contentType: "application/json;charset=utf-8", 1382 }, 1383 body: new URLSearchParams({ 1384 form_key: hyva.getFormKey(), 1385 'refress-redirect-url':value 1386 }), 1387 method: "POST", 1388 mode: "cors", 1389 credentials: "include", 1390 }).then(response => { 1391 if (response.redirected) { 1392 window.location.href = response.url; 1393 } else { 1394 window.dispatchMessages("warning", "Post request failed", 5000); 1395 } 1396 }) 1397 } 1398 } 1399 } 1400</script>
1400 1401<form style="display:none;" class="form" x-data="initSocialLoginPost()" @submit="submitForm($el)" 1402 action="https://www.flooringinc.com/sociallogin/account/loginPost/" 1403 method="post" 1404 id="sociallogin-login-form" 1405> 1406 <input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="" /> 1407 <input id="sociallogin-login-submit" type="submit" value="sociallogin" style="font-size:0"/> 1408</form> 1409 1410<style> 1411 .pr-cookie-setting-bar-overlay, 1412 .pr-cookie-setting-bar-container { 1413 z-index: 999999999999999; 1414 } 1415</style> 1416
1417<script> 1418 'use strict'; 1419 var prCookieSettingBar = { 1420 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
1420ilters, 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
1420se 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}, 1421 show: function () {}, 1422 hide: function () {}, 1423 syncCategoriesDataWithConsent: function () { 1424 this.config.categories = this.config.categories.map(category => { 1425 category.is_allowed = prCookieConsentApi.isAllowedCategory(category.key); 1426 return category; 1427 }); 1428 }, 1429 allowAll: function () { 1430 prCookieConsentApi.consent.allowAllCategories(); 1431 this.syncCategoriesDataWithConsent(); 1432 window.prCookieSettingBar.hide(); 1433 }, 1434 declineAll: function () { 1435 prCookieConsentApi.consent.declineAll(); 1436 this.syncCategoriesDataWithConsent(); 1437 window.prCookieSettingBar.hide(); 1438 }, 1439 confirm: function () { 1440 var allowedCategories = [...prCookieConsentApi.config.essentialCategoryKeys]; 1441 this.config.categories.forEach((category) => { 1442 if (allowedCategories.includes(category.key) || !category.is_allowed) { 1443 return; 1444 } 1445 1446 allowedCategories.push(category.key); 1447 }); 1448 1449 prCookieConsentApi.consent.set(allowedCategories); 1450 this.syncCategoriesDataWithConsent(); 1451 window.prCookieSettingBar.hide(); 1452 } 1453 }; 1454</script>
1454 1455 1456<div x-data="{...hyva.modal(), init() { 1457 window.prCookieSettingBar.show = this.show.bind(this, 'pr-cookie-setting-bar', event); 1458 window.prCookieSettingBar.hide = this.hide.bind(this); 1459 }}" x-init="init()"> 1460 <div x-cloak x-bind="overlay('pr-cookie-setting-bar')" 1461 x-spread="overlay('pr-cookie-setting-bar')" 1462 class="fixed inset-0 bg-black bg-opacity-50 z-50 pr-cookie-setting-bar-overlay"> 1463 <div class="fixed flex justify-center items-center text-left z-40 pr-cookie-setting-bar-container inset-0"> 1464 <div x-ref="pr-cookie-setting-bar" role="dialog" aria-modal="true" 1465 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"> 1466 <div class="pr-cookie-setting-bar-wrap text-[13px] px-4 pt-2 pb-4 relative" 1467 id="pr-cookie-setting-bar" 1468 :class="config.cookieDetailsIsOpen && 'h-screen overflow-hidden'" 1469 x-data="prCookieSettingBar" 1470 x-init="syncCategoriesDataWithConsent()" 1471> 1472 <button @click="hide" class="ml-auto -mt-2 -mr-4 block top-2 right-2 p-2"> 1473 <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"> 1474 <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"/> 1475<title>x</title></svg> 1476 </button> 1477 <h3 class="font-bold text-xl leading-normal mb-3" x-text="config.overview.title"></h3> 1478 <div class="pr-cookie-description" x-html="config.overview.text"></div> 1479 <div class="pr-actions-buttons flex flex-wrap items-center justify-center py-4 mb-6 border-container border-b"> 1480 <button type="button" class="action btn btn-primary m-2" x-text="config.acceptButtonConfig.label" @click="allowAll();"></button> 1481 <button type="button" class="action btn btn-secondary m-2" x-text="config.declineButtonConfig.label" @click="declineAll()"></button> 1482 </div> 1483 <h3 class="pr-cookie-manage-title font-bold text-xl mb-0" x-text="config.consentPreferences.header"></h3> 1484 <ul class="message-system-list mt-8"> 1485 <template x-for="category in config.categories"> 1486 <li class="mt-0 mb-4"> 1487 <div class="accordion-title"> 1488 <div class="pr-cookie-option flex justify-between pb-2 mt-8 text-sm"> 1489 <strong class="option-label mr-4" x-text="category.name"></strong> 1490 <template x-if="category.is_essential"> 1491 <strong class="option-status whitespace-nowrap text-green-700" x-text="config.consentPreferences.essential_category_status"></strong> 1492 </template> 1493 <template x-if="! category.is_essential"> 1494 <div class="pr-cookie-switch"> 1495 <label class="switch-label" aria-label="Switch"> 1496 <input type="checkbox" 1497 class="sr-only" 1498 x-model="category.is_allowed" 1499 x-bind:name="category.key" 1500 > 1501 <span class="switch-area flex items-center w-11 h-6 rounded-3xl border border-container cursor-pointer transition-all" 1502 :class="category.is_allowed ? 'bg-green-500 border-green-700' : 'bg-gray-200 border-gray-300'" 1503 > 1504 <span class="switch-nob block w-5 h-5 rounded-full transition-all" 1505 :class="category.is_allowed ? 'bg-white ml-auto mr-[2px]' : 'bg-gray-500 mr-auto ml-[2px]'" 1506 ></span> 1507 </span> 1508 </label> 1509 </div> 1510 </template> 1511 </div> 1512 <div class="first-details" x-data="{ isOpen: false }"> 1513 <div class="pr-cookie-category-description text-gray-700 mb-4" x-text="category.description"></div> 1514 <template x-if="config.canShowCookieDetails"> 1515 <div> 1516 <div class="lvl1">
1517 <span class="pr-cookie-details text-blue-700 cursor-pointer underline hover:no-underline" 1518 x-on:click="isOpen = true; config.cookieDetailsIsOpen = isOpen" 1519 x-text="config.consentPreferences.cookie_details_link" 1520 x-bind:data-category-key="category.key"></span> 1521 </div> 1522 <div class="second-details absolute bg-white px-4 pt-2 pb-4 inset-0 h-full" 1523 x-show="isOpen" 1524 > 1525 <div class="pr-cookie-view flex flex-col h-full"> 1526 <template x-if="isOpen"> 1527 <button @click="hide" class="ml-auto -mt-2 -mr-2 block top-2 right-2 p-2"> 1528 <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"> 1529 <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"/> 1530<title>x</title></svg> 1531 </button> 1532 </template> 1533 <div class="flex justify-between items-center text-sm mb-2"> 1534 <button class="pr-cookie-details-hide px-3 -ml-3 mr-3 flex items-center cursor-pointer hover:text-blue-800" 1535 x-show="isOpen" 1536 x-on:click="isOpen = false; config.cookieDetailsIsOpen = isOpen"> 1537 <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"> 1538 <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"/> 1539<title>arrow-left</title></svg> 1540 Back 1541 </button> 1542 <strong class="option-label" x-text="category.name"></strong> 1543 </div> 1544 <div class="pr-cookies-list h-full px-4 -mx-4 mb-3 overflow-auto"> 1545 <h3 class="pr-cookie-view-title mb-2 font-bold text-base">Cookies List</h3> 1546 <template x-if="category.details.length > 0"> 1547 <template x-for="group in category.details"> 1548 <div class="pr-cookie-item text-xs py-2 border-container border-b"> 1549 <h4 class="pr-cookie-details-title font-semibold mb-1" x-text="group.name"></h4> 1550 <details class="pr-cookie-details-info"> 1551 <summary class="cursor-pointer text-blue-600 hover:text-blue-500"> 1552 <h5 class="inline-block font-semibold"> 1553 View Cookies 1554 </h5> 1555 </summary> 1556 <div class="pr-cookie-group-wrp"> 1557 <template x-for="cookie in group.cookies"> 1558 <div class="pr-cookie-group mt-1 mb-4 p-4 bg-gray-100 rounded"> 1559 <div class="pr-cookie-group-row mb-2 flex"> 1560 <sp
1560an class="w-24 flex-shrink-0 mr-4">Name</span> 1561 <span class="truncate" x-text="cookie.name"></span> 1562 </div> 1563 <div class="pr-cookie-group-row mb-2 flex"> 1564 <span class="w-24 flex-shrink-0 mr-4">Domain</span> 1565 <span class="truncate" x-text="cookie.domainLabel"></span> 1566 </div> 1567 <div class="pr-cookie-group-row mb-2 flex"> 1568 <span class="w-24 flex-shrink-0 mr-4">Duration</span> 1569 <span x-text="cookie.durationLabel"></span> 1570 </div> 1571 <div class="pr-cookie-group-row mb-2 flex"> 1572 <span class="w-24 flex-shrink-0 mr-4">Type</span> 1573 <span x-text="cookie.typeLabel"></span> 1574 </div> 1575 <div class="pr-cookie-group-row mb-2 flex"> 1576 <span class="w-24 flex-shrink-0 mr-4">Category</span> 1577 <span x-text="cookie.category_key"></span> 1578 </div> 1579 <div class="pr-cookie-group-row flex"> 1580 <span class="w-24 flex-shrink-0 mr-4">Description</span> 1581 <span x-text="cookie.description"></span> 1582 </div> 1583 </div> 1584 </template> 1585 </div> 1586 </details> 1587 </div> 1588 </template> 1589 </template> 1590 <template x-if="category.details.length === 0"> 1591 <p>There are no cookies.</p> 1592 </template> 1593 </div> 1594 1595 <template x-if="isOpen"> 1596 <div> 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 </div> 1603 </template> 1604 </div> 1605 </div> 1606 </div> 1607 </template> 1608 </div> 1609 </div> 1610 </li> 1611 </template> 1612 <button class="action btn btn-primary" 1613 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1614 x-text="config.confirmButtonConfig.label" 1615 @click="prCookieSettingBar.confirm()"> 1616 </button> 1617 </ul> 1618</div> 1619 </div> 1620 </div> 1621 </div> 1622</div>
1623<script type="text/javascript" nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 1624 (() => { 1625 const updateCookieConsentConfig = () => { 1626 const categoryMap = {}; 1627 Object.entries(prCookieConsentApi.config.cookieToCategoryMapping).forEach(([cookieName, categoryName]) => { 1628 if (! categoryMap[categoryName]) { 1629 categoryMap[categoryName] = []; 1630 } 1631 categoryMap[categoryName].push(cookieName); 1632 }); 1633 1634 Object.entries(categoryMap).forEach(([category, cookies]) => { 1635 const existingList = window.cookie_consent_config[category] || []; 1636 window.cookie_consent_config[category] = Array.from(new Set(existingList.concat(cookies))); 1637 }); 1638 1639 let cookieCategories = ["necessary","preferences","statistics","marketing"]; 1640 window.cookie_consent_groups = {}; 1641 cookieCategories.forEach((category) => { 1642 window.cookie_consent_groups[category] = prCookieConsentApi.isAllowedCategory(category); 1643 }); 1644 } 1645 1646 const updateConsent = () => { 1647 window.cookie_consent_groups = window.cookie_consent_groups || {} 1648 Object.keys(window.cookie_consent_groups).forEach(categoryKey => { 1649 window.cookie_consent_groups[categoryKey] = prCookieConsentApi.isAllowedCategory(categoryKey); 1650 }); 1651 window.dispatchEvent(new CustomEvent('user-allowed-save-cookie')); 1652 } 1653 1654 document.addEventListener('pr-cookie-consent-api:configured', () => { 1655 updateCookieConsentConfig(); 1656 prCookieConsentApi.consent.addCallback(updateConsent); 1657 }); 1658 1659 if (prCookieConsentApi.isConfigured) { 1660 updateCookieConsentConfig(); 1661 prCookieConsentApi.consent.addCallback(updateConsent); 1662 } 1663 })(); 1664</script>
1664 1665<div id="prgdpr-consentpopups-container" 1666 x-data="prDataPrivacyConsentPopupsLoadInit()" 1667 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 1668></div>
1669<script> 1670 function prDataPrivacyConsentPopupsLoadInit() { 1671 return { 1672 receiveCustomerData: function (data) { 1673 if (! data.hasOwnProperty('data_privacy')) { 1674 return; 1675 } 1676 1677 if (data.data_privacy.countNotifies !== 0 || data.data_privacy.countPopups !== 0) { 1678 this.loadPopups(); 1679 } 1680 }, 1681 loadPopups: function () { 1682 fetch('https://www.flooringinc.com/data-privacy/consentpopups/load/') 1683 .then((response) => { 1684 if (! response.ok) { 1685 throw new Error('Network response was not ok'); 1686 } 1687 1688 return response.json(); 1689 }) 1690 .then(data => this.$el.innerHTML = data.html) 1691 .catch(error => console.warn(error)); 1692 } 1693 } 1694 } 1695 1696 function prDataPrivacyConsentPopupsInit(popups, notifies) { 1697 return { 1698 popups: popups, 1699 notifies: notifies, 1700 data: null, 1701 isShowModal: true, 1702 init: function () { 1703 for (popup of this.popups) { 1704 popup.isShowModal = true; 1705 } 1706 1707 for (notify of this.notifies) { 1708 notify.isShowModal = true; 1709 } 1710 }, 1711 closeModal(popup) { 1712 popup.isShowModal = false; 1713 }, 1714 sendRequest: function (url, consent) { 1715 if (consent.cms_page) { 1716 consent.checkboxLabel = 'I agree'; 1717 } 1718 1719 fetch(url, { 1720 method: 'POST', 1721 headers: {'X-Requested-With': 'XMLHttpRequest'}, 1722 body: JSON.stringify({'consent': consent}) 1723 }); 1724 }, 1725 print: function (popup) { 1726 let printWindow = window.open('', 'Print', 'height=600,width=800'); 1727 printWindow.document.write( 1728 `<html><head><title>${popup.cms_page.title}</title><link rel="next" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=2" /> 1729</head><body>${popup.cms_page.content}</body></html` 1730 ); 1731 printWindow.document.close(); 1732 printWindow.focus(); 1733 printWindow.print(); 1734 printWindow.onafterprint = function () { 1735 printWindow.close(); 1736 }; 1737 1738 return true; 1739 } 1740 } 1741 } 1742</script>
1742 1743
1744<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 1745 (() => { 1746 const updateConsents = () => { 1747 if (! Array.isArray(prCookieConsentApi.consent.get()) || prCookieConsentApi.consent.get().length > 0) { 1748 prCookieConsentApi.consent.declineAll(); 1749 } 1750 } 1751 1752 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateConsents); 1753 })(); 1754</script>
1754 1755<input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> 1756
1756<script> 1757 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1758 </script>
1758 1759
1760<script> 1761 function getMstNavConfig() { 1762 return { 1763 clearUrl: 'https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html', 1764 1765 isAjax: function () { 1766 return 1; 1767 }, 1768 1769 isInstantMode: function () { 1770 return 1; 1771 }, 1772 1773 isConfirmationMode: function () { 1774 var isConfirmationMode = 0; 1775 var isConfirmOnMobile = 1; 1776 var modeSwitchBreakpoint = 768; 1777 1778 return isConfirmationMode 1779 || (isConfirmOnMobile && window.innerWidth <= modeSwitchBreakpoint); 1780 }, 1781 1782 isConfirmOnMobile: function () { 1783 return 1; 1784 }, 1785 1786 getModeSwitchBreakpoint: function () { 1787 return 768; 1788 }, 1789 1790 isSeoFilterEnabled: function () { 1791 return 0; 1792 }, 1793 1794 isHighlightEnabled: function () { 1795 return 0; 1796 }, 1797 1798 getFriendlyClearUrl: function () { 1799 return 'https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html'; 1800 }, 1801 1802 getAjaxCallEvent: function () { 1803 return 'mst-nav__ajax-call'; 1804 }, 1805 1806 getAjaxProductListWrapperId: function () { 1807 return '#m-navigation-product-list-wrapper'; 1808 }, 1809 1810 isSearchFilterFulltext: function () { 1811 return 1; 1812 }, 1813 1814 isSearchFilterOptions: function () { 1815 return 1; 1816 }, 1817 1818 isFilterClearBlockInOneRow: function () { 1819 return 0 }, 1820 1821 getClearUrl: function () { 1822 return this.clearUrl; 1823 }, 1824 1825 getOverlayUrl: function () { 1826 return 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Mirasvit_LayeredNavigation/images/ajax_loading.gif' 1827 }, 1828 1829 isHorizontalByDefault: function () { 1830 return false; 1831 }, 1832 1833 // trustpilot compatibility 1834 loadTrustpilotWidget: function () { 1835 if(window.Trustpilot) { 1836 let trustboxes = document.querySelectorAll(this.getAjaxProductListWrapperId() + ' .trustpilot-widget'); 1837 if(trustboxes.length !== 0) { 1838 trustboxes.forEach((trustbox) => { 1839 window.Trustpilot.loadFromElement(trustbox); 1840 }); 1841 } 1842 } 1843 }, 1844 1845 // yotpo compatibility 1846 loadYotpoWidget: function () { 1847 if(window.yotpo){ 1848 window.yotpo.initWidgets(); 1849 } 1850 }, 1851 1852 load3rdPartyReviewWidgets: function () { 1853 this.loadTrustpilotWidget(); 1854 this.loadYotpoWidget(); 1855 } 1856 1857 } 1858 } 1859 1860 const mstNavCache = (() => { 1861 return { 1862 cache: [], 1863 1864 getCacheId: function (key) { 1865 return JSON.stringify(key); 1866 }, 1867 1868 getData: function (key) { 1869 let cacheId = this.getCacheId(key); 1870 return this.cache[cacheId]; 1871 }, 1872 1873 setData: function (key, data) { 1874 let cacheId = this.getCacheId(key); 1875 this.cache[cacheId] = data; 1876 } 1877 } 1878 })(); 1879</script>
1879 1880
1881<script> 1882 function handleFiltersNavPositions() { 1883 var filtersConfig = {"category_ids":"sidebar","features":"sidebar","product_floor_type":"sidebar","incstores_pim_ships_from_region":"sidebar","incstores_pim_lf_shipping_speed":"sidebar","size":"sidebar","incstores_pim_flooring_type":"sidebar","type":"sidebar","incstores_pim_category_filters":"sidebar","tailer_roll_width":"sidebar","roll_cut_type":"sidebar","ships_from":"sidebar","manufacturer":"sidebar","incstores_pim_primary_color_filter":"sidebar","incstores_pim_lf_shipping_program":"sidebar","incstores_pim_tf_made_in_usa":"sidebar","incstores_pim_tf_rubber_thickness":"sidebar","incstores_pim_tf_rubber_format":"sidebar","incstores_pim_tf_sport":"sidebar","incstores_pim_tf_trim_type":"sidebar","incstores_pim_tf_underlayment_type":"sidebar","incstores_pim_tf_vinyl_styles":"sidebar","incstores_pim_fire_resistant":"sidebar","incstores_pim_fall_height_rating":"sidebar","incstores_pim_bevel":"sidebar","incstores_pim_character_variation":"sidebar","incstores_pim_lf_features":"sidebar","incstores_pim_dye_method":"sidebar","incstores_pim_edge_profile":"sidebar","incstores_pim_fiber_type":"sidebar","incstores_pim_fiber_treatment":"sidebar","incstores_pim_finish":"sidebar","incstores_pim_gloss":"sidebar","incstores_pim_variant_species":"sidebar","incstores_pim_surface_texture":"sidebar","incstores_pim_surface_type":"sidebar","incstores_pim_type_of_finish":"sidebar","incstores_pim_core":"sidebar","incstores_pim_floor_speed":"sidebar","incstores_pim_locking_system":"sidebar","incstores_pim_nose_type":"sidebar","incstores_pim_tarr_rating":"sidebar","incstores_pim_waterproof":"sidebar","incstores_pim_wear_layer_rating":"sidebar","incstores_pim_warranty_filter":"sidebar","incstores_pim_backing":"sidebar","incstores_pim_certifications":"sidebar","incstores_pim_cleat_safe":"sidebar","incstores_pim_installation_location":"sidebar","incstores_pim_interlock_style":"sidebar"}; 1884 1885 document.querySelectorAll('.sidebar template').forEach(function (filterOptionsTemplate) { 1886 var filterItem = filterOptionsTemplate.content.querySelector('[data-mst-nav-filter]'); 1887 1888 if (!filterItem || filterItem == undefined) { 1889 return; 1890 } 1891 1892 var attributeCode = filterItem.getAttribute('data-mst-nav-filter').replace(/A\d{6}A/, ''); 1893 1894 if (filtersConfig.hasOwnProperty(attributeCode)) { 1895 filterOptionsTemplate.closest('.filter-option').setAttribute('data-nav-position', filtersConfig[attributeCode]); 1896 } 1897 }.bind(this)) 1898 } 1899 1900 document.addEventListener('DOMContentLoaded', handleFiltersNavPositions); 1901</script>
1901 1902
1903<script> 1904 function getContentUpdater() { 1905 return { 1906 config: getMstNavConfig(), 1907 1908 leftnavUpdate: function (leftnav) { 1909 const navigation = document.querySelector('.sidebar.sidebar-main .block.filter, .sidebar.sidebar-main .block.filter, .sidebar.sidebar-main .block-content'); 1910 1911 if (leftnav) { 1912 const el = navigation.parentElement; 1913 1914 el.outerHTML = this.renderJSFromContent(leftnav); 1915 /* remove duplicated scripts */ 1916 document.querySelectorAll('.sidebar.sidebar-main script') 1917 .forEach(function (scriptEl) { 1918 if (scriptEl.innerHTML.indexOf('expandFilters') >= 0) { 1919 scriptEl.remove(); 1920 } 1921 }); 1922 1923 expandFilters(); 1924 } 1925 }, 1926 1927 productsUpdate: function (products) { 1928 if (products) { 1929 this.triggerUpdate(this.config.getAjaxProductListWrapperId(), products); 1930 1931 // re-init ajax toolbar 1932 let toolbars = document.querySelector(this.config.getAjaxProductListWrapperId()) 1933 .querySelectorAll('.toolbar.toolbar-products'); 1934 1935 toolbars.forEach(function (toolbar) { 1936 let xData = toolbar.getAttribute('x-data'); 1937 xData = '{...' + xData + ', ...initAjaxToolbar()}'; 1938 1939 toolbar.setAttribute('x-data', xData); 1940 }); 1941 1942 // re-init ajax pager 1943 let pagerItems = document.querySelector(this.config.getAjaxProductListWrapperId()) 1944 .querySelectorAll('.toolbar.toolbar-products .pages-items a'); 1945 1946 pagerItems.forEach(function (item) { 1947 item.addEventListener('click', function (e) { 1948 e.preventDefault(); 1949 1950 initApplier().apply(item.href); 1951 }); 1952 }); 1953 1954 // third-party review widgets compatibility 1955 this.config.load3rdPartyReviewWidgets(); 1956 1957 1958 // update form_key cookie after products update 1959 const formKeyElem = document.querySelector('form.product_addtocart_form input[name="form_key"]'); 1960 1961 if (formKeyElem && formKeyElem.value) { 1962 hyva.setCookie('form_key', formKeyElem.value); 1963 } 1964 } 1965 }, 1966 1967 pageTitleUpdate: function (pageTitle) { 1968 /*this.triggerUpdate('.page-title', pageTitle, '.page-title-wrapper');*/ 1969 }, 1970 1971 breadcrumbsUpdate: function (breadcrumbs) { 1972 this.triggerUpdate('.wrapper-breadcrums, .breadcrumbs', breadcrumbs); 1973 }, 1974 1975 updateCategoryViewData: function (categoryViewData) { 1976 if (categoryViewData === '') { 1977 return 1978 } 1979 1980 if (document.querySelectorAll(".category-view").length === 0) { 1981 const el = document.createElement("div"); 1982 el.classList.add('category-view'); 1983 1984 document.querySelector('.page.messages').parentNode.insertBefore(el, document.querySelector('.page.messages')); 1985 } else { 1986 document.querySelector(".category-view").outerHtml = categoryViewData; 1987 } 1988 }, 1989 1990 updateQuickNavigation: function (quickNavigation) { 1991 this.triggerUpdate(".mst-quick-nav__filterList", quickNavigation); 1992 }, 1993 1994 horizontalNavigationUpdate: function (horizontalNav, isHorizontalByDefault) { 1995 const horizontalNavigation = '.mst-nav__horizontal-bar'; 1996 1997 if (horizontalNav) { 1998 if (isHorizontalByDefault == 1) { 1999 $("#layered-filter-block").remove(); 2000 } 2001 2002 if (!document.querySelectorAll(horizontalNavigation).length) { 2003 let horNavEl = document.createElement('DIV'); 2004 horNavEl.classList.add('mst-nav__horizontal-bar'); 2005 2006 if (document.querySelectorAll('[data-element="quick-navigation"]').length) { 2007 document.querySelector('[data-element="quick-navigation"]').after(horNavEl); 2008 } else { 2009 document.querySelector('.column.main').prepend(horNavEl); 2010 } 2011 } 2012 2013 this.triggerUpdate(horizontalNavigation, horizontalNav); 2014 } 2015 }, 2016 2017 updateUrlPath: function (targetUrl) { 2018 targetUrl.replace('&', '&'); 2019 targetUrl.replace('%2C', ','); 2020 2021 window.mNavigationAjaxscrollCompatibility = 'true'; 2022 window.location = targetUrl; 2023 }, 2024 2025 updateInstantlyMode: function (data, isHorizontalByDefault) { 2026 document.querySelector('#mst-ajax-nav-script-container').innerText = ''; 2027 2028 if (data['ajaxscroll'] == 'true') { 2029 this.updateUrlPath(data.url); 2030 } 2031 2032 this.leftnavUpdate(data['leftnav']); 2033 this.horizontalNavigationUpdate(data['horizontalBar'], isHorizontalByDefault); 2034 this.productsUpdate(data['products']); 2035 this.pageTitleUpdate(data['pageTitle']); 2036 this.breadcrumbsUpdate(data['breadcrumbs']); 2037 this.updateCategoryViewData(data['categoryViewData']);
2038 this.updateQuickNavigation(data['quickNavigation']); 2039 }, 2040 2041 triggerUpdate: function (selector, content, closest = false) { 2042 if (!document.querySelectorAll(selector).length) { 2043 return; 2044 } 2045 2046 let insertTarget = document.querySelector(selector); 2047 2048 if (closest) { 2049 insertTarget = insertTarget.closest(closest); 2050 } 2051 2052 insertTarget.outerHTML = this.renderJSFromContent(content); 2053 }, 2054 2055 renderJSFromContent: function (content) { 2056 const scriptBeginTag = '
2056<script'; 2057 const scriptEndTag = '</scr' + 'ipt>'; 2058 2059 let startIndex = 0; 2060 let scripts = []; 2061 2062 while (content.indexOf(scriptBeginTag, startIndex) >= 0) { 2063 const scriptStartPos = content.indexOf(scriptBeginTag, startIndex); 2064 const scriptEndPos = content.indexOf(scriptEndTag, startIndex) + 9; 2065 2066 scripts.push(content.slice(scriptStartPos, scriptEndPos)); 2067 2068 startIndex = scriptEndPos; 2069 } 2070 2071 if (!scripts.length) { 2072 return content; 2073 } 2074 2075 scripts.forEach(function (script) { 2076 content.replace(script, ''); 2077 2078 let scriptContent = ''; 2079 2080 if (script.indexOf('magento-init') < 0) { 2081 scriptContent = script.replace(/
2081<script([^>]*)>/m, '') 2082 .replace(scriptEndTag, ''); 2083 } 2084 2085 let scriptElement = document.createElement('script'); 2086 scriptElement.innerHTML = scriptContent; 2087 2088 document.querySelector('#mst-ajax-nav-script-container').appendChild(scriptElement); 2089 }); 2090 2091 return content; 2092 } 2093 } 2094 } 2095</script>
2095 2096 2097<div id="mst-ajax-nav-script-container"></div> 2098 2099 <!-- Mst Layered Navigation Ajax --> 2100
2100<script> 2101 (() => { 2102 return { 2103 config: getMstNavConfig(), 2104 2105 initAjaxMode: function () { 2106 document.addEventListener(this.config.getAjaxCallEvent(), function (event) { 2107 if (this.config.isConfirmationMode()) { 2108 initApplyButton().hide(); 2109 } 2110 2111 let cachedData = mstNavCache.getData(event.detail.url); 2112 if (cachedData) { 2113 this.updatePageInstantlyMode(event.detail.url, cachedData); 2114 } else { 2115 this.requestUpdate(event.detail.url, event.detail.force); 2116 } 2117 this.addBrowserHistory(event.detail.url); 2118 handleFiltersNavPositions(); 2119 }.bind(this)); 2120 2121 if (typeof window.history.replaceState === 'function') { 2122 /** Browser back button */ 2123 window.onpopstate = function (e) { 2124 if (e.state && e.state.url !== undefined) { 2125 window.location.href = e.state.url; 2126 } else if (window.location.href.indexOf('#') < 0) { 2127 window.location.reload(); 2128 } 2129 }.bind(this); 2130 } 2131 }, 2132 2133 updatePageInstantlyMode: function (url, result) { 2134 getContentUpdater().updateInstantlyMode(result, this.config.isHorizontalByDefault()); 2135 2136 if (!window.mstScrollPaging) { 2137 window.mstScrollPaging = initPaging(); 2138 } 2139 2140 if (typeof window.mstScrollPaging.initAjaxScroll == 'function') { 2141 window.mstScrollPaging.initAjaxScroll() 2142 } 2143 2144 initCheckedOptionsCounter().apply(); 2145 }, 2146 2147 addBrowserHistory: function (url) { 2148 url = this.deleteForceModeQueryParam(url); 2149 window.history.pushState({url: url}, '', url); 2150 2151 return true; 2152 }, 2153 2154 deleteForceModeQueryParam: function (url) { 2155 url = url.replace("?mstNavForceMode=instantly", ""); 2156 url = url.replace("?mstNavForceMode=instantly&", "?"); 2157 url = url.replace("&mstNavForceMode=instantly&", "&"); 2158 url = url.replace("&mstNavForceMode=instantly", ""); 2159 2160 url = url.replace("?mstNavForceMode=by_button_click", ""); 2161 url = url.replace("?mstNavForceMode=by_button_click&", "?"); 2162 url = url.replace("&mstNavForceMode=by_button_click&", "&"); 2163 url = url.replace("&mstNavForceMode=by_button_click", ""); 2164 2165 return url; 2166 }, 2167 2168 requestUpdate: function (url, force) { 2169 const $overlay = document.getElementById("mst-nav__overlay"); 2170 2171 $overlay.classList.remove('hidden'); 2172 let data = {isAjax: true}; 2173 if (force) { 2174 data.mstNavForceMode = 'instantly'; 2175 } 2176 2177 let queryParams = new URLSearchParams(); 2178 2179 for (const key in data) { 2180 queryParams.set(key, data[key]); 2181 } 2182 2183 const separator = url.indexOf('?') > 0 ? '&' : '?'; 2184 2185 fetch(url + separator + queryParams.toString()) 2186 .then(response => { 2187 if (!response.ok) console.warn('GET request failed'); 2188 return response.json() 2189 }) 2190 .then(function (result) { 2191 try { 2192 mstNavCache.setData(url, result); 2193 this.updatePageInstantlyMode(url, result); 2194 } catch (e) { 2195 if (window.mNavigationAjaxscrollCompatibility !== 'true') { 2196 console.log(e); 2197 2198 window.location = url; 2199 } 2200 } 2201 }.bind(this)) 2202 .catch(function (error) { 2203 window.location = url; 2204 }.bind(this)) 2205 .finally(function () { 2206 $overlay.classList.add('hidden'); 2207 handleFiltersNavPositions(); 2208 }.bind(this)); 2209 } 2210 } 2211 })().initAjaxMode(); 2212 </script>
2212 2213 2214 2215 2216
2216<script> 2217 /*document.addEventListener('DOMContentLoaded',*/ 2218 2219 function initAjaxToolbar() { 2220 return { 2221 config: getMstNavConfig(), 2222 2223 /** 2224 * @param {String} paramName 2225 * @param {*} paramValue 2226 * @param {*} defaultValue 2227 */ 2228 changeUrl: function (paramName, paramValue, defaultValue) { 2229 return this.config.isAjax() 2230 ? this._changeAjaxUrl(paramName, paramValue, defaultValue) 2231 : this._changeStdUrl(paramName, paramValue, defaultValue); 2232 2233 }, 2234 2235 /** 2236 * Change URL when AJAX enabled. 2237 * 2238 * @param {String} paramName 2239 * @param {*} paramValue 2240 * @param {*} defaultValue 2241 */ 2242 _changeAjaxUrl: function (paramName, paramValue, defaultValue) { 2243 var link; 2244 2245 // ignore duplicate requests 2246 if (this._isToolbarLock()) { 2247 return false; 2248 } 2249 2250 this.config.clearUrl = this._getToolbarCleanUrl( 2251 paramName, 2252 paramValue, 2253 defaultValue, 2254 this.options 2255 ); 2256 2257 initApplier().apply(this.config.getClearUrl()); 2258 }, 2259 2260 /** 2261 * Change URL without AJAX. 2262 * 2263 * @param {String} paramName 2264 * @param {*} paramValue 2265 * @param {*} defaultValue 2266 */ 2267 _changeStdUrl: function (paramName, paramValue, defaultValue) { 2268 var decode = window.decodeURIComponent, 2269 urlPaths = this.options.url.split('?'), 2270 baseUrl = urlPaths[0], 2271 paramData = this.getUrlParams(), 2272 currentPage = this.getCurrentPage(), 2273 parameters, i, newPage; 2274 2275 if (currentPage > 1 && paramName === this.options.limit) { 2276 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 2277 2278 if (newPage > 1) { 2279 paramData[this.options.page] = newPage; 2280 } else { 2281 delete paramData[this.options.page]; 2282 } 2283 } 2284 2285 paramData[paramName] = paramValue; 2286 2287 if (paramValue == defaultValue) { //eslint-disable-line eqeqeq 2288 delete paramData[paramName]; 2289 } 2290 2291 let queryParams = new URLSearchParams(); 2292 2293 for (const key in paramData) { 2294 queryParams.set(key, paramData[key]); 2295 } 2296 2297 paramData = queryParams.toString(); 2298 2299 //fix incorrect symbols in url 2300 paramData = paramData.replace(/%2C/g, ","); 2301 2302 location.href = baseUrl + (paramData.length ? '?' + paramData : ''); 2303 }, 2304 2305 _getToolbarCleanUrl: function (paramName, paramValue, defaultValue, options) { 2306 var decode = window.decodeURIComponent, 2307 urlPaths = options.url.split('?'), 2308 baseUrl = urlPaths[0], 2309 paramData = this.getUrlParams(), 2310 currentPage = this.getCurrentPage(), 2311 parameters, i, newPage; 2312 2313 if (currentPage > 1 && paramName === options.limit) { 2314 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 2315 2316 if (newPage > 1) { 2317 paramData[options.page] = newPage; 2318 } else { 2319 delete paramData[options.page]; 2320 } 2321 } 2322 // console.log(paramData); 2323 if (paramValue == 'pricehigh' && paramName == 'product_list_order') { 2324 paramData['product_list_order'] = 'price'; 2325 paramData['product_list_dir'] = 'desc'; 2326 } else if(paramValue == 'pricelow' && paramName == 'product_list_order') { 2327 paramData['product_list_order'] = 'price'; 2328 paramData['product_list_dir'] = 'asc'; 2329 } else if(paramValue == 'revenue_ranking') { 2330 paramData['product_list_order'] = 'revenue_ranking'; 2331 paramData['product_list_dir'] = 'desc'; 2332 } else { 2333 paramData[paramName] = paramValue; 2334 if (paramData['product_list_dir']) { 2335 //delete paramData['product_list_dir']; 2336 } 2337 } 2338 2339 2340 if (paramValue == defaultValue) { //eslint-disable-line eqeqeq 2341 delete paramData[paramName]; 2342 } 2343 2344 let queryParams = new URLSearchParams(); 2345 2346 for (const key in paramData) { 2347 queryParams.set(key, paramData[key]); 2348 } 2349 2350 paramData = queryParams.toString(); 2351 2352 //fix incorrect symbols in url 2353 paramData = paramData.replace(/%2C/g, ","); 2354 2355 return baseUrl + (paramData.length ? '?' + paramData : ''); 2356 }, 2357 2358 /** 2359 * Page contains 2 toolbars: before and after product listing, hence, multiple instances of this widget exists. 2360 * We use this hack in order to stop multiple requests from being called. 2361 * 2362 * @return {Boolean} 2363 */ 2364 _isToolbarLock: function () { 2365 // if (window.blockToolbar) { 2366 // return true; 2367 // } 2368 // 2369 // window.blockToolbar = true; 2370 // setTimeout(function () { 2371 // window.blockToolbar = false;
2372 // }, 300); 2373 2374 return false; 2375 } 2376 } 2377 } 2378 </script>
2378 2379
2380<script> 2381 function initPaging() { 2382 return { 2383 nextBtn: null, 2384 prevBtn: null, 2385 isActive: false, 2386 excludeHeight: null, 2387 dataPageAttr: 'scroll-page', 2388 currLimit: null, 2389 modeSwitched: false, 2390 maxLoadedPageNum: 0, 2391 minLoadedPageNum: 1000, 2392 progressBar: null, 2393 loadedPages: 1, 2394 2395 modes: { 2396 infinite: '_initInfiniteMode', 2397 button: '_initButtonMode', 2398 infinite_button: '_initInfiniteButtonMode', 2399 button_infinite: '_initButtonInfiniteMode' 2400 }, 2401 2402 mode: 'button', 2403 pageLimit: 0, 2404 moreBtnClass: 'mst-scroll__button', // "load more" buttons class 2405 postCatalogHeightSelectors: [ 2406 '.main .products ~ .block-static-block', 2407 '.page-footer', 2408 '.page-bottom' 2409 ], 2410 // elements that should be hidden 2411 hide: [ 2412 '.pages', 2413 '.toolbar-amount' 2414 ], 2415 // initial info 2416 factor: 0.95, // factor for loading next page when scrolling down in infinite mode 2417 pageParam: 'p', 2418 pageNum: 1, 2419 initPageNum: 1, 2420 prevPageNum: null, 2421 nextPageNum: null, 2422 lastPageNum: null, 2423 loadPrevText: 'Load Previous Page', 2424 loadNextText: 'Load More', 2425 progressBarEnabled: 0, 2426 progressBarText: 'Loaded %loaded% of %total% items', 2427 itemsTotal: 100000, 2428 itemsLimit: 12, 2429 2430 productListSelector: '.products.product-grid, .products.products-grid, .products.product-list, .products.products-list', 2431 2432 config: getMstNavConfig(), 2433 2434 updateData: function(data) { 2435 for (let key in data) { 2436 this[key] = data[key]; 2437 } 2438 2439 return this; 2440 }, 2441 2442 $el: function () { 2443 return document.querySelector(this.productListSelector); 2444 }, 2445 2446 initAjaxScroll: function () { 2447 // scroll is active only when catalog has more than 1 page 2448 this.isActive = this.nextPageNum || this.prevPageNum || false; 2449 2450 // set initial page number to product list 2451 this.$el().setAttribute('data-' + this.dataPageAttr, this.pageNum); 2452 2453 // hide default DOM elements such as pagination 2454 this._hideElements(); 2455 2456 // init scroll widget in chosen mode 2457 this[this.modes[this.mode]](); 2458 2459 this._bind(); 2460 2461 this.progressBar = this._createProgressBar(); 2462 2463 this._updateLabels(this); 2464 }, 2465 2466 _destroy: function () { 2467 this.isActive = false; 2468 // this = null; 2469 }, 2470 2471 /** 2472 * Bind scroll event and load products when window is scrolled down. 2473 */ 2474 _initInfiniteMode: function () { 2475 this._initScroll(); 2476 2477 // init button for previous page 2478 if (this.prevPageNum) { 2479 this.prevBtn = this._createButton(this.loadPrevText, this.prevPageNum, 'insertBefore'); 2480 this.progressBar = this._createProgressBar(); 2481 } 2482 }, 2483 2484 _initScroll: function () { 2485 var onPause = false; 2486 2487 window.addEventListener('scroll', function () { 2488 var scrollTop = window.scrollY; 2489 2490 if (scrollTop >= this._calculateHeightDiff() && !onPause && this.nextPageNum) { 2491 this.currLimit--; 2492 2493 // stop processing infinite scroll when page limit reached 2494 if (this.mode === 'infinite_button' && this.currLimit < 0) { 2495 return; 2496 } 2497 onPause = true; // suspend ajax scrolling 2498 2499 getLoader().show(this._getLastProductList()); 2500 2501 this._request(window.location.href, {p: this.nextPageNum}) 2502 .then(function (response) { 2503 getLoader().hide(); 2504 this._updateCatalog(response); 2505 2506 return response; 2507 }.bind(this)) 2508 .then(function (response) { // update next page num 2509 if (response.config) { 2510 this.nextPageNum = response.config.nextPageNum; 2511 onPause = false; // resume ajax scrolling 2512 } 2513 }.bind(this)); 2514 } 2515 }.bind(this)); 2516 }, 2517 2518 /** 2519 * Calculate difference between the whole document height and its visible part + height of excluded blocks. 2520 * 2521 * @return {Number} 2522 */ 2523 _calculateHeightDiff: function () { 2524 var diff = this._getLastProductList().getBoundingClientRect().height 2525 + (this._getLastProductList().getBoundingClientRect().top) 2526 - window.innerHeight; 2527 2528 diff -= this._getExcludeHeight(); 2529 2530 return diff; 2531 }, 2532 2533 /** 2534 * Initialize widget in button mode. 2535 */ 2536 _initButtonMode: function () { 2537 this._initButtons(); 2538 }, 2539 2540 _initInfiniteButtonMode: function() { 2541 this.currLimit = this.currLimit === null ? this.pageLimit : this.currLimit; 2542 2543 this._initInfiniteMode(); 2544 }, 2545 2546 _initButtonInfiniteMode: function() { 2547 this.currLimit = this.currLimit === null ? this.pageLimit : this.currLimit; 2548 2549 this._initButtonMode(); 2550 }, 2551 2552 /** 2553 * Create buttons. 2554 */ 2555 _initButtons: function () { 2556 if (this.nextPageNum) { 2557 this.nextBtn = this._createButton(this.loadNextText, this.nextPageNum, 'insertAfter'); 2558 } 2559 2560 if (this.prevPageNum) { 2561 this.prevBtn = this._createButton(this.loadPrevText, this.prevPageNum, 'insertBefore'); 2562 } 2563 }, 2564 2565 /** 2566 * Create html button and attach it to widget's element. 2567 * 2568 * @param {String} label 2569 * @param {Number} pageNum - number of page used for button 2570 * @param {String} method - method used to insert the button over widget's element 2571 * 2572 * @return {HTMLElement} 2573 */ 2574 _createButton: function (label, pageNum, method) { 2575 const element = method === 'insertAfter' 2576 ? this._getLastProductList() 2577 : this._getFirstProductList(); 2578 const btnClass = method === 'insertAfter' ? "_next" : "_prev"; 2579 2580 const btn = document.createElement('button'); 2581 btn.classList.add('btn'); 2582 btn.classList.add('btn-primary'); 2583 btn.classList.add('m-auto'); 2584 btn.classList.add(this.moreBtnClass); 2585 btn.classList.add(btnClass); 2586 btn.dataset.page = pageNum; 2587 btn.innerText = label; 2588 2589 if (method === 'insertAfter') { 2590 if (element.nextSibling) { 2591 element.parentNode.insertBefore(btn, element.nextSibling) 2592 } else { 2593 element.parentNode.appendChild(btn); 2594 } 2595 2596 } else { 2597 element.parentNode.insertBefore(btn, element); 2598 } 2599 2600 return btn; 2601 }, 2602 2603 _createProgressBar: function () { 2604 if (!this.progressBarEnabled) { 2605 return null; 2606 } 2607 2608 if (this.progressBar) { 2609 return this.progressBar; 2610 } 2611 2612 let progressBar = document.createElement('div'); 2613 progressBar.classList.add('mst-scroll__progress'); 2614 progressBar.innerHTML = '<span class="mst-scroll__progress-label"></span>' + 2615 '<div class="mst-scroll__progress-bar bg-gray-200"><div class="bg-primary"></div></div>'; 2616 2617 let target = null; 2618 2619 if (this.nextBtn) { 2620 target = document.querySelector('button.' + this.moreBtnClass + '._next'); 2621 } else { 2622 target = this._getLastProductList().nextSibling; 2623 } 2624 2625 this._getLastProductList().parentNode.insertBefore(progressBar, target); 2626 2627 if (this.prevBtn) { 2628 target = document.querySelector('button.' + this.moreBtnClass + '._prev'); 2629 } else { 2630 target = this._getFirstProductList(); 2631 } 2632 2633 this._getFirstProductList().parentNode.insertBefore(progressBar.cloneNode(true), target); 2634 2635 return progressBar; 2636 }, 2637 2638 /** 2639 * Hide DOM elements listed in this.hide array. 2640 */ 2641 _hideElements: function () { 2642 this.hide.map(function (selector) { 2643 // hide only if "load" buttons exist 2644 if (this.isActive) { 2645 // mark all hidden elements with our identification 2646 document.querySelector(selector).dataset.scroll = 'hidden'; 2647 document.querySelector(selector).classList.add('hidden'); 2648 } else { 2649 // show only elements hidden by us 2650 if (document.querySelectorAll(selector + ' [data-scroll="hidden"]').length) { 2651 document.querySelector(selector + ' [data-scroll="hidden"]').classList.remove('hidden'); 2652 } 2653 } 2654 }.bind(this)); 2655 }, 2656 2657 _bind: function () { 2658 var self = this; 2659 2660 // observe "load more" buttons clicks 2661 if (document.querySelectorAll('.' + this.moreBtnClass).length) { 2662 document.querySelectorAll('.' + this.moreBtnClass).forEac
2662h(function (button) { 2663 button.addEventListener('click', function (e) { 2664 var page = e.target.dataset.page, 2665 targetBtn = page > self.initPageNum ? self.nextBtn : self.prevBtn; 2666 2667 self.currLimit--; 2668 2669 // stop processing nextBtn when page limit reached 2670 if (self.mode === 'button_infinite' && self.currLimit < 0 && targetBtn.hasClass('_next')) { 2671 return; 2672 } 2673 2674 targetBtn.classList.add('_loading'); 2675 2676 self._request(window.location.href, {p: page}) 2677 .then(function (data) { 2678 targetBtn.classList.remove('_loading'); 2679 2680 return data; 2681 }.bind(self)) 2682 .then(function (data) { 2683 self._updatePaging(data); 2684 self._updateCatalog(data); 2685 }.bind(self)); 2686 }.bind(self)); 2687 }.bind(self)); 2688 } 2689 2690 // sort options change workaround 2691 document.querySelectorAll('select[data-role="sorter"]').forEach(function (sorter) { 2692 sorter.addEventListener('change', function (e) { 2693 let baseUrl = window.location.origin + window.location.pathname; 2694 2695 let queryString = new URLSearchParams(window.location.search); 2696 2697 if (queryString.has('product_list_order') && queryString.get('product_list_order') != e.target.value) { 2698 queryString.set('product_list_order', e.target.value); 2699 2700 window.history.pushState({}, '', baseUrl + '?' + queryString.toString()); 2701 } 2702 }) 2703 }); 2704 2705 // update URL when scrolling through pages 2706 window.addEventListener('scroll', function () { 2707 if (this.isActive) { 2708 this._updateHistory({config: {pageNum: this._determineCurrentPage()}}); 2709 } 2710 }.bind(this)); 2711 }, 2712 2713 /** 2714 * Determine current page by scrollTop position. 2715 * 2716 * @return {Number} - current page number 2717 */ 2718 _determineCurrentPage: function () { 2719 var page = null, 2720 self = this, 2721 biggestPart = 0; 2722
2723 this._getProductLists().forEach(function (list) { 2724 let visiblePart = 0; // visible part of a product list block in window 2725 2726 if (list.getBoundingClientRect().top - document.body.scrollTop < 0) { // list block is above window 2727 visiblePart = list.getBoundingClientRect().top + list.offsetHeight - document.body.scrollTop; 2728 } else { 2729 visiblePart = window.offsetHeight - (list.getBoundingClientRect().top - document.body.scrollTop); 2730 } 2731 2732 if (visiblePart < 0) { 2733 return; // skip current product list and continue loop 2734 } 2735 2736 // if whole product list completely fit on the window 2737 if (visiblePart >= list.offsetHeight 2738 // or the product list takes up most of the window size 2739 || list.offsetHeight > window.offsetHeight && window.offsetHeight / visiblePart < 2 2740 ) { 2741 page = list.getAttribute('data-' + self.dataPageAttr) || 1; 2742 return false; // we found page, stop looping 2743 } 2744 2745 // otherwise use the page that takes up the most part of a space in the window 2746 if (visiblePart > biggestPart) { 2747 biggestPart = visiblePart; 2748 page = list.getAttribute('data-' + self.dataPageAttr) || 1; 2749 } 2750 }); 2751 2752 return page; 2753 }, 2754 2755 _updateLabels: function (config) { 2756 const btnPattern = "%limit%"; 2757 const totalPattern = '%total%'; 2758 const loadedPattern = '%loaded%'; 2759 2760 if (this.prevBtn) { 2761 this.prevBtn.innerHTML = config.loadPrevText.replace(btnPattern, config.itemsLimit); 2762 } 2763 2764 let nextLimit = config.itemsLimit; 2765 2766 if ((config.pageNum + 1) * config.itemsLimit > config.itemsTotal) { 2767 nextLimit = config.itemsTotal - config.pageNum * config.itemsLimit; 2768 } 2769 2770 if (this.nextBtn) { 2771 this.nextBtn.innerHTML = config.loadNextText.replace(btnPattern, nextLimit); 2772 } 2773 2774 if (this.progressBar) { 2775 let progressBarLabel = config.progressBarText; 2776 let initPageItems = this.initPageNum * config.itemsLimit > this.itemsTotal 2777 ? this.itemsTotal - (this.initPageNum - 1) * config.itemsLimit 2778 : config.itemsLimit; 2779 2780 let calculatedLoadedItems = initPageItems + (this.loadedPages - 1) * config.itemsLimit; 2781 2782 let current = calculatedLoadedItems > config.itemsTotal 2783 ? config.itemsTotal 2784 : calculatedLoadedItems; 2785 2786 progressBarLabel = progressBarLabel.replace(totalPattern, config.itemsTotal) 2787 .replace(loadedPattern, current); 2788 2789 document.querySelectorAll('.mst-scroll__progress-label').forEach(function (label) { 2790 label.innerHTML = progressBarLabel; 2791 }); 2792 2793 let width = Math.round(current / config.itemsTotal * 100) + '%'; 2794 2795 document.querySelectorAll('.mst-scroll__progress-bar div').forEach(function (bar) { 2796 bar.style.width = width; 2797 }); 2798 } 2799 2800 this.loadedPages++; 2801 }, 2802 2803 /** 2804 * Update catalog products. 2805 * 2806 * @param {Object} response 2807 */ 2808 _updateCatalog: function (response) { 2809 var selector = this._getProductListSelector(), 2810 productList = null, 2811 doc = document.documentElement, 2812 top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); 2813 2814 if (response.products && response.config) { 2815 this._updateLabels(response.config); 2816 // wrap product list into div to be able to retrieve needed
2816selector 2817 let wrapper = document.createElement('div'); 2818 wrapper.innerHTML = response.products; 2819 2820 productList = wrapper.querySelector(selector); 2821 2822 getContentUpdater().renderJSFromContent(response.products); 2823 2824 productList.setAttribute('data-' + this.dataPageAttr, response.config.pageNum); 2825 // insert products after last of first list accordingly 2826 if (response.config.pageNum > this.initPageNum) { 2827 this._getLastProductList() 2828 .parentNode 2829 .insertBefore(productList, this._getLastProductList().nextSibling); 2830 window.scroll(0, top); 2831 } else { 2832 this._getFirstProductList() 2833 .parentNode 2834 .insertBefore(productList, this._getFirstProductList()); 2835 } 2836 2837 window.scroll(0, top); 2838 2839 // switch infinite mode to button mode 2840 if (this.mode === 'infinite_button' && this.currLimit <= 0 && !this.modeSwitched) { 2841 if (this.nextPageNum) { 2842 this.nextPageNum++; 2843 2844 if (this.lastPageNum >= this.nextPageNum) { 2845 this.nextBtn = this._createButton(this.loadNextText, this.nextPageNum, 'insertAfter'); 2846 this.progressBar = this._createProgressBar(); 2847 this._bind(); 2848 } 2849 } 2850 2851 this.modeSwitched = true; 2852 } 2853 2854 // switch button mode to infinite mode 2855 if (this.mode === 'button_infinite' && this.currLimit <= 0 && !this.modeSwitched) { 2856 if (this.nextPageNum) { 2857 this.nextPageNum += 2; 2858 2859 if (this.lastPageNum >= this.nextPageNum) { 2860 this._initScroll(); 2861 this._bind(); 2862 } 2863 } 2864 2865 let elem = document.querySelector('.mst-scroll__button._next'); 2866 2867 elem.parentNode.removeChild(elem); 2868 2869 this.modeSwitched = true; 2870 2871 } 2872 2873 // third-party review widgets compatibility 2874 this.config.load3rdPartyReviewWidgets(); 2875 } 2876 }, 2877 2878 /** 2879 * @return {String} 2880 */ 2881 _getProductListSelector: function () { 2882 var selector = ''; 2883 if (document.querySelectorAll(selector).length) { 2884 return selector; 2885 } 2886 return '.' + this.$el().getAttribute('class').split(' ').filter(
2886Boolean).join('.'); 2887 }, 2888 2889 _getProductLists: function () { 2890 return document.querySelectorAll(this._getProductListSelector()); 2891 }, 2892 2893 _getLastProductList: function () { 2894 return this._getProductLists()[this._getProductLists().length - 1]; 2895 }, 2896 2897 _getFirstProductList: function () { 2898 return this._getProductLists()[0]; 2899 }, 2900 2901 /** 2902 * Update paging buttons. 2903 * 2904 * @param {Object} response 2905 */ 2906 _updatePaging: function (response) { 2907 // hide next/prev buttons 2908 if (response.config) { 2909 // if next page was loaded - change next page number, otherwise change prev page number 2910 if (response.config.pageNum > this.initPageNum) { 2911 this.nextBtn.dataset.page = response.config.nextPageNum; 2912 } else { 2913 this.prevBtn.dataset.page = response.config.prevPageNum; 2914 } 2915 2916 // for hiding nextBtn if last page is loaded and prevBtn clicked (initial page != 1) 2917 this.maxLoadedPageNum = this.maxLoadedPageNum > response.config.pageNum 2918 ? this.maxLoadedPageNum 2919 : response.config.pageNum; 2920 2921 // for hiding prevBtn if first page is loaded and nextBtn clicked (initial page != 1) 2922 this.minLoadedPageNum = this.minLoadedPageNum < response.config.pageNum 2923 ? this.minLoadedPageNum 2924 : response.config.pageNum; 2925 2926 // hide next/prev page buttons if first or last pages loaded 2927 if (response.config.pageNum === 1 || this.minLoadedPageNum === 1) { 2928 this.prevBtn.classList.add('hidden'); 2929 } else if (this.prevBtn) { 2930 this.prevBtn.classList.remove('hidden'); 2931 } 2932 2933 if (response.config.pageNum === response.config.lastPageNum || this.maxLoadedPageNum === response.config.lastPageNum) { 2934 this.nextBtn.classList.add('hidden'); 2935 } else if (this.nextBtn) { 2936 this.nextBtn.classList.remove('hidden'); 2937 } 2938 } 2939 }, 2940 2941 /** 2942 * Update page number param in URL. 2943 * 2944 * @param {Object} response 2945 */ 2946 _updateHistory: function (response) { 2947 var url = null, 2948 currentPageNum = null; 2949 2950 if (response.config) { 2951 url = this._getUrl(response.config.pageNum); 2952 currentPageNum = this._getUrl().searchParams.get(this.pageParam); 2953 2954 // ignore page #1 2955 if (response.config.pageNum === 1 && currentPageNum === null) { 2956 return; 2957 } 2958 2959 if (parseInt(currentPageNum) !== parseInt(response.config.pageNum)) { 2960 history.replaceState({}, document.title, url.href); 2961 } 2962 } 2963 }, 2964 2965 /** 2966 * Send XHR. 2967 * 2968 * @param {String} url 2969 * @param {Object} data 2970 * 2971 * @return {Object} 2972 */ 2973 _request: function (url, data) { 2974 data.is_scroll = 1; 2975 data.isAjax = 1; 2976 2977 let queryParams = new URLSearchParams(); 2978 2979 for (const key in data) { 2980 queryParams.set(key, data[key]); 2981 } 2982 2983 const separator = url.indexOf('?') > 0 ? '&' : '?'; 2984 2985 return fetch(url + separator + queryParams.toString()) 2986 .then(response => { 2987 if (!response.ok) console.warn('GET request failed'); 2988 return response.json() 2989 }); 2990 }, 2991 2992 _getExcludeHeight: function () { 2993 var height = 0; 2994 2995 if (this.excludeHeight === null) { 2996 if (!this.postCatalogHeightSelectors) { 2997 this.postCatalogHeightSelectors = [ 2998 '.main .products ~ .block-static-block', 2999 '.page-footer', 3000 '.page-bottom' 3001 ]; 3002 } 3003 3004 this.postCatalogHeightSelectors.map(function (selector) { 3005 var block = document.querySelector(selector); 3006 3007 if (block && block.length) { 3008 height += block[0].offsetHeight; 3009 } 3010 }); 3011 3012 this.excludeHeight = height; 3013 } 3014 3015 return this.excludeHeight; 3016 }, 3017 3018 /** 3019 * Get the URL for fetching additional products. 3020 * 3021 * @param {Number|Null} pageNum 3022 * 3023 * @return {URL} 3024 */ 3025 _getUrl: function (pageNum) { 3026 var url = new URL(window.location); 3027 3028 if (pageNum) { 3029 if (parseInt(pageNum) === 1) { 3030 url.searchParams.delete(this.pageParam); 3031 } else { 3032 url.searchParams.set(this.pageParam, pageNum); 3033 } 3034 } 3035 3036 return url; 3037 } 3038 } 3039 } 3040</script>
3040 3041
3042<script> 3043 function initCheckedOptionsCounter() { 3044 return { 3045 apply: function () { 3046 const filters = document.querySelectorAll('.filter-option'); 3047 3048 filters.forEach(function (filter) { 3049 const title = filter.querySelector('.filter-options-title'); 3050 const checkedCounterContainer = filter.querySelector('template').content.querySelector('.mst-clear-options-link'); 3051 3052 if (!checkedCounterContainer || checkedCounterContainer.getAttribute('data-checked-count') == 0) { 3053 return; 3054 } 3055 3056 const checkedCounter = checkedCounterContainer.querySelector('.mst-nav__checked-counter__wrapper'); 3057 3058 checkedCounter.querySelector('a').addEventListener('click', function (e) { 3059 e.stopPropagation(); 3060 e.preventDefault(); 3061 3062 initApplier().apply(e.target.href); 3063 }) 3064 3065 const filterTitle = filter.querySelector('.filter-options-title'); 3066 3067 filterTitle.insertBefore(checkedCounter, filterTitle.querySelector('span.title').nextElementSibling); 3068 }); 3069 } 3070 } 3071 } 3072 3073 document.addEventListener('DOMContentLoaded', function () { 3074 initCheckedOptionsCounter().apply(); 3075 }); 3076</script>
3076 3077
3078<script> 3079 function initAlphabeticalIndex(shouldDisplay, limit) { 3080 return { 3081 letters: [], 3082 visibleSelector: '[data-letter][data-value][data-search-hidden = false]', 3083 3084 options: { 3085 shouldDisplay: shouldDisplay, 3086 limit: limit 3087 }, 3088 3089 init: function () { 3090 if (!this.options.shouldDisplay) { 3091 return; 3092 } 3093 3094 const options = this.$el.parentElement.querySelectorAll('[data-element="filter"][data-value]'); 3095 3096 if (!options.length) { 3097 return; 3098 } 3099 3100 if (this.$el.querySelectorAll('.mst-nav__alphabetical').length) { 3101 return; 3102 } 3103 3104 this.createAlphabeticalIndex(options); 3105 }, 3106 3107 createAlphabeticalIndex: function (options) { 3108 this.letters = []; 3109 3110 options.forEach(function (option) { 3111 let label = option.querySelectorAll('label').length 3112 ? option.querySelector('label').innerText.trim() 3113 : option.getAttribute('aria-label'); 3114 3115 let letter = label.substring(0, 1).toUpperCase(); 3116 letter = letter.match(/[a-zA-Z]/) ? letter : '#'; 3117 3118 if (this.letters.indexOf(letter) < 0) { 3119 this.letters.push(letter); 3120 } 3121 }.bind(this)); 3122 3123 this.letters.sort(); 3124 3125 const $container = document.createElement('div'); 3126 $container.classList.add('mst-nav__alphabetical'); 3127 3128 this.letters.forEach(function (letter) { 3129 const $letter = document.createElement('span'); 3130 $letter.innerText = letter; 3131 $letter.addEventListener('click', this.filterOptions.bind(this)); 3132 $letter.addEventListener('click', this.handleVisibility.bind(this)); 3133 3134 $container.appendChild($letter); 3135 }.bind(this)); 3136 3137 this.$el.appendChild($container); 3138 3139 this.$el.closest('.filter-option').addEventListener('alphabetical', this.handleVisibility.bind(this)); 3140 }, 3141 3142 filterOptions: function (e) { 3143 const letter = e.target; 3144 3145 if (letter.classList.contains('_checked')) { 3146 letter.classList.remove('_checked'); 3147 } else { 3148 letter.classList.add('_checked'); 3149 } 3150 3151 const checkedLetters = this.getCheckedLetters(); 3152 3153 getEventManager().triggerEvent(this.$el.closest('.filter-option'), 'showhide') // communicate with sizeLimiter 3154 3155 this.$el.parentElement.querySelectorAll('[data-letter]').forEach(function (option) { 3156 option.setAttribute('data-hidden', 'false'); 3157 3158 if (checkedLetters.length && checkedLetters.indexOf(option.getAttribute('data-letter')) < 0) { 3159 option.setAttribute('data-letter-hidden', 'true'); 3160 } else { 3161 option.setAttribute('data-letter-hidden', 'false'); 3162 } 3163 }); 3164 }, 3165 3166 handleVisibility: function () { 3167 const visibleFilters = this.$el.parentElement.querySelectorAll(this.visibleSelector); 3168 3169 if (visibleFilters.length < this.options.limit) { 3170 this.$el.querySelectorAll('span').forEach(function (letter) { 3171 letter.classList.add('hidden'); 3172 }); 3173 3174 return; 3175 } 3176 3177 let visibleLetters = []; 3178 3179 visibleFilters.forEach(function (filter) { 3180 if (visibleLetters.indexOf(filter.getAttribute('data-letter')) < 0) { 3181 visibleLetters.push(filter.getAttribute('data-letter')); 3182 } 3183 }); 3184 3185 if (visibleLetters.length) { 3186 this.$el.querySelectorAll('span').forEach(function (letter) { 3187 if (visibleLetters.indexOf(letter.innerText) < 0) { 3188 letter.classList.add('hidden'); 3189 } else { 3190 letter.classList.remove('hidden'); 3191 } 3192 }); 3193 } 3194 }, 3195 3196 getCheckedLetters: function () { 3197 let checkedLetters = []; 3198 3199 this.$el.querySelectorAll('span._checked').forEach(function (letter) { 3200 checkedLetters.push(letter.innerText); 3201 }) 3202 3203 return checkedLetters; 3204 }, 3205 } 3206 } 3207</script>
3207 3208
3209<script> 3210 function getEventManager () { 3211 return { 3212 triggerEvent: function (element, eventName, data) { 3213 if (!element) { 3214 console.warn('Attempt to trigger event ' + eventName + ' on unknown element'); 3215 return; 3216 } 3217 3218 let event; 3219 3220 if (window.CustomEvent && typeof window.CustomEvent === 'function') { 3221 event = new CustomEvent(eventName, {detail: data ? data : {}}); 3222 } else { 3223 event = document.createEvent('CustomEvent', true, true, data ? data : {}); 3224 event.initCustomEvent(eventName); 3225 } 3226 3227 element.dispatchEvent(event); 3228 } 3229 } 3230 } 3231</script>
3231 3232 3233<div class="fixed inset-0 z-10 hidden" id="mst-nav__overlay"> 3234 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 3235 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 3236 x-show="isLoading" 3237 x-transition:enter="ease-out duration-200" 3238 x-transition:enter-start="opacity-0" 3239 x-transition:enter-end="opacity-100" 3240 x-transition:leave="ease-in duration-200" 3241 x-transition:leave-start="opacity-100" 3242 x-transition:leave-end="opacity-0"> 3243 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 3244<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 3245 <g fill="none" fill-rule="evenodd"> 3246 <g transform="translate(1 1)" stroke-width="2"> 3247 <circle cx="5" cy="50" r="5"> 3248 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 3249 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 3250 </circle> 3251 <circle cx="27" cy="5" r="5"> 3252 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 3253 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 3254 </circle> 3255 <circle cx="49" cy="50" r="5"> 3256 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 3257 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 3258 </circle> 3259 </g> 3260 </g> 3261<title>loader</title></svg> 3262 <div class="ml-10 text-primary text-xl"> 3263 Loading... </div> 3264</div> 3265</div> 3266<!--<div class="fixed inset-0 bg-black bg-opacity-50 z-10 hidden" id="mst-nav__overlay"></div>--> 3267
3268<script> 3269 function initApplier() { 3270 return { 3271 config: getMstNavConfig(), 3272 $from: null, 3273 $to: null, 3274 3275 apply(url, $initiator = null, force = false, from = null, to = null) { 3276 this.$from = from; 3277 this.$to = to; 3278 url = this.fixUrl(url); 3279 3280 if (!$initiator || $initiator.closest("[data-mst-nav-part=state]")) { 3281 force = true; 3282 } else { 3283 const mode = $initiator.dataset.mode; 3284 3285 if (mode === 'instant') { 3286 force = true; 3287 } 3288 } 3289 3290 if (!this.config.isAjax()) { 3291 this.noAjaxMode(url); 3292 } else if (this.config.isConfirmationMode() && force === false) {//@todo 3293 this.confirmationMode(url, $initiator); 3294 } else { 3295 this.instantMode(url); 3296 } 3297 }, 3298 3299 applyForced: function (url) { 3300 this.apply(url, null, true); 3301 }, 3302 3303 fixUrl: function (url) { 3304 url = url.replace('&', '&'); 3305 url = url.replace(/%2C/g, ','); 3306 3307 return url; 3308 }, 3309 3310 noAjaxMode(url) { 3311 window.location.href = url; 3312 }, 3313 3314 instantMode(url, force) { 3315 let event; 3316 3317 if (window.CustomEvent && typeof window.CustomEvent === 'function') { 3318 event = new CustomEvent(this.config.getAjaxCallEvent(), {detail: {url: url, force: force}}); 3319 } else { 3320 event = document.createEvent('CustomEvent'); 3321 event.initCustomEvent(this.config.getAjaxCallEvent(), true, true, {url: url, force: force}); 3322 } 3323 3324 document.dispatchEvent(event); 3325 }, 3326 3327 confirmationMode(url, $initiator, force) { 3328 if (this.config.isSeoFilterEnabled()) { 3329 url = this.config.getFriendlyClearUrl(); 3330 } 3331 3332 const actualParams = new URLSearchParams(window.location.search.substr(1)); 3333 const filtersParams = this.getFilters(); 3334 3335 let cacheKey = filtersParams.cacheKey !== undefined ? filtersParams.cacheKey : ''; 3336 3337 if (cacheKey) { 3338 delete filtersParams.cacheKey; 3339 } 3340 3341 const params = Object.assign({}, filtersParams, {mode: 'by_button_click'}); 3342 3343 const urlSearchObject = new URLSearchParams(); 3344 3345 for (const key in params) { 3346 urlSearchObject.set(key, params[key]); 3347 } 3348 3349 const query = urlSearchObject.toString(); 3350 3351 url = url.split('?')[0]; 3352 3353 if (query) { 3354 url += "?" + query; 3355 } 3356 3357 const applyButton = initApplyButton(); 3358 3359 cacheKey = url + cacheKey; 3360 3361 applyButton.show(); 3362 applyButton.move($initiator); 3363 applyButton.load(url, cacheKey, force); 3364 }, 3365 3366 filters: {}, 3367 3368 getFilters() { 3369 3370 let cacheKey = ''; 3371 3372 document.querySelectorAll('[data-mst-nav-filter]').forEach(function (filter) { 3373 cacheKey += filter.dataset.mstNavCacheKey; 3374 this.collectActiveFilters(filter); 3375 }.bind(this)); 3376 3377 document.querySelectorAll('.filter-option.card template').forEach(function (template) { 3378 const filter = template.content.querySelector('[data-mst-nav-filter]') 3379 if (!filter) { 3380 return; 3381 } 3382 this.collectActiveFilters(filter, this); 3383 }.bind(this)); 3384 3385 this.filters['cacheKey'] = cacheKey; 3386 3387 return this.filters; 3388 }, 3389 3390 collectActiveFilters(filter) { 3391 let filterName = filter.dataset.mstNavFilter; 3392 3393 filterName = filterName.replace(/A\d{6,7}A/, ''); 3394 let filterValues = []; 3395 3396 switch (filterName) { 3397 case 'price': //@todo
3398 let filterValue = this.getSliderPriceFilterValue(filter); 3399 if (filterValue) { 3400 filterValues.push(filterValue); 3401 this.filters[filterName] = filterValues.join(','); 3402 } else { 3403 filter.querySelectorAll('[data-element = filter]._checked').forEach( function (item) { 3404 let filterValue = item.dataset.value; 3405 filterValues.push(filterValue); 3406 }.bind(this)); 3407 3408 if (filterValues.length > 0 && !this.filters[filterName]) { 3409 this.filters[filterName] = filterValues.join(','); 3410 } 3411 } 3412 break; 3413 3414 default: 3415 filter.querySelectorAll('[data-element = filter]._checked').forEach( function (item) { 3416 let filterValue = item.dataset.value; 3417 filterValues.push(filterValue); 3418 }.bind(this)); 3419 3420 if (filterValues.length > 0 && !this.filters[filterName]) { 3421 this.filters[filterName] = filterValues.join(','); 3422 } 3423 } 3424 }, 3425 3426 getSliderPriceFilterValue($el) { 3427 3428 if ($el.getAttribute("x-init") !== 'initSlider') { 3429 return false; 3430 } 3431 3432 let sliderElement = $el.querySelector('.mst-nav__slider-slider') ?? $el.querySelector('.mst-nav__slider-from-to'); 3433 if (!sliderElement) { 3434 return false; 3435 } 3436 3437 const priceWidget = sliderElement.noUiSlider 3438 3439 let minVal = 0; 3440 let maxVal = 0; 3441 let fromVal = 0; 3442 let toVal = 0; 3443 3444 if (priceWidget) { 3445 minVal = parseFloat(priceWidget.options.range.min).toFixed(2); 3446 maxVal = parseFloat(priceWidget.options.range.max).toFixed(2); 3447 fromVal = parseFloat(priceWidget.options.start[0]).toFixed(2); 3448 toVal = parseFloat(priceWidget.options.start[1]).toFixed(2); 3449 } else { 3450 const slider = this.getSliderOption($el.getAttribute("x-data")); 3451 3452 if(!slider) { 3453 return false; 3454 } 3455 minVal = slider.min.toFixed(2); 3456 maxVal = slider.max.toFixed(2); 3457 fromVal = slider.from.toFixed(2); 3458 toVal = slider.to.toFixed(2); 3459 } 3460 3461 fromVal = this.$from ? parseFloat(this.$from).toFixed(2) : fromVal; 3462 toVal = this.$to ? parseFloat(this.$to).toFixed(2) : toVal; 3463 3464 if (fromVal === minVal && toVal === maxVal) { 3465 return false; 3466 } 3467 3468 return fromVal + "-" + toVal; 3469 }, 3470 3471 getSliderOption(content) { 3472 if (!content.includes("renderRangeSlider")) { 3473 return false; 3474 } 3475 let result = content.match(/\({(.*?)}\)/); 3476 if (!result[1]) { 3477 return false; 3478 } 3479 3480 let prepareSliderObject = result[1].substring(0, result[1].indexOf('valueTemplate') - 2); 3481 3482 prepareSliderObject = "{" + prepareSliderObject + "}"; 3483 3484 return JSON.parse(prepareSliderObject); 3485 3486 } 3487 } 3488 } 3489</script>
3489 3490
3491<script> 3492 function initLabelRenderer() { 3493 return { 3494 config: getMstNavConfig(), 3495 3496 handleClick(e) { 3497 // if (e.target.tagName !== 'INPUT') { 3498 e.preventDefault(); 3499 e.stopPropagation(); 3500 // } 3501 3502 let $item = e.target.closest('[data-element = filter]'); 3503 3504 const link = $item.tagName === 'A' ? $item : $item.querySelector('a'); 3505 3506 if (link.classList.contains('disabled')) { 3507 return; 3508 } 3509 3510 if ($item.tagName !== 'A') { 3511 if (e.target.tagName !== 'INPUT') { 3512 this.toggleCheckbox($item); 3513 } 3514 } 3515 3516 this.toggleSwatch($item); 3517 this.showHighLight($item); 3518 3519 const url = $item.tagName === 'A' 3520 ? $item.href 3521 : $item.querySelector('a').href; 3522 3523 initApplier().apply(url, $item); 3524 const elements = document.querySelectorAll(".special-filters"); 3525 const currentUrl = url; 3526 // Replace '&product_list_model=list' with an empty string in the final URL 3527 // newFinalUrl = finalUrl.replace('&product_list_mode=list', ''); 3528 // Get the base URL by splitting before the '?' 3529 const baseUrl = currentUrl.split('?')[0]; 3530 // Get the current URL parameters by splitting after the '?' 3531 const currentUrlParams = currentUrl.split('?')[1]; 3532 // Convert the current URL parameters into an array of key-value pairs 3533 const currentUrlParamsArray = currentUrlParams.split('&').map(param => param.split('=')); //alert(currentUrlParamsArray); 3534 3535 // Iterate over the elements and get the href value for each element. 3536 let newFinalUrl = ""; 3537 let finalUrl = ""; 3538 elements.forEach(function(element) { 3539 let staticBlockUrl = element.getAttribute("data-link-url"); 3540 // Get the static block URL parameters by splitting after the '?' 3541 let staticBlockUrlParams = staticBlockUrl.split('?')[1]; 3542 3543 // Convert the static block URL parameters into an array of key-value pairs 3544 let staticBlockUrlParamsArray = staticBlockUrlParams.split('&').map(param => param.split('=')); 3545 3546 // Concatenate the two arrays of parameters 3547 let allParamsArray = currentUrlParamsArray.concat(staticBlockUrlParamsArray); 3548 3549 // Initialize an empty object to store the revised parameters 3550 let revisedParamsObject = {}; 3551 3552 // Loop over the array of parameters 3553 for (let [key, value] of allParamsArray) { 3554 // If the key already exists in the object, append the value with a comma separator 3555 if (revisedParamsObject[key]) { 3556 // Split the existing value by comma and check if it includes the new value 3557 let existingValues = revisedParamsObject[key].split(','); 3558 if (!existingValues.includes(value) && value!='list') { 3559 // If not, append the value with a comma separator 3560 revisedParamsObject[key] += ',' + value; 3561 } 3562 3563 } else { 3564 // Otherwise, assign the value to the key 3565 revisedParamsObject[key] = value; 3566 } 3567 } 3568 3569 // Initialize an empty string to store the revised parameters as a query string 3570 let revisedParamsString = ""; 3571 3572 // Loop over the object of revised parameters 3573 for (let [key, value] of Object.entries(revisedParamsObject)) { 3574 // Append the key-value pair with a '&' separator 3575 revisedParamsString += key + '=' + value + '&'; 3576 } 3577 3578 // Remove the trailing '&' from the string 3579 revisedParamsString = revisedParamsString.slice(0, -1); 3580 3581 // Construct the final URL by adding the base URL and the revised parameters string with a '?' separator 3582 let finalUrl = baseUrl + '?' + revisedParamsString; 3583 3584 // Replace '&product_list_model=list' with an empty string in the final URL 3585 let newFinalUrl = finalUrl.replace('&product_list_mode=list', ''); 3586 3587 // Append '&product_list_model=list' to the new final URL 3588 newFinalUrl += '&product_list_mode=list'; 3589 3590 element.setAttribute("href", newFinalUrl); 3591 if (link.classList.contains('remove')) { 3592 const removelink = link.href; 3593 const pagebuilderlink = $(this)[0].href; 3594 if(removelink != pagebuilderlink){ 3595 const parentElement = $(this).closest('.pagebuilder-column'); 3596 if(parentElement){ 3597 // console.log(parentElement[0]); 3598 if(parentElement[0].classList.contains('active')){ 3599 // console.log('right'); 3600 parentElement[0].classList.remove("active"); 3601 } 3602 } 3603 } 3604 } 3605 3606 // for clear all active class remove 3607 if(link.classList.contains('filter-clear')){ 3608 var elems = document.querySelectorAll(".pagebuilder-column"); 3609 [].forEach.call(elems, function(el) { 3610 el.classList.remove("active"); 3611 }); 3612 } 3613 }); 3614 }, 3615 3616 showHighLight: function ($el) { 3617 if ($el.classList.contains('_checked')) { 3618 $el.classList.add("_highlight"); 3619 const parentElement = $el.closest('.pagebuilder-column'); 3620 if(parentElement){ 3621 parentElement.classList.add("active"); 3622 } 3623 } else { 3624 $el.classList.remove("_highlight"); 3625 const parentElement = $el.closest('.pagebuilder-column'); 3626 3627 if(parentElement) { 3628 parentElement.classList.remove("active"); 3629 } 3630 3631 const anchorElement = $el.querySelector('a'); 3632 3633 if (anchorElement) { 3634 const relValue = anchorElement.getAttribute('data-link-url'); 3635 console.log("data-link-url===="+relValue); 3636 const ogiurl = relValue.split('?')[1]; 3637 console.log('Anchor data-link-url value:', ogiurl); 3638 3639 if (ogiurl === undefined || ogiurl.trim() === "") { 3640 //do nothing 3641 } else { 3642 const currentUrl = window.location.href; 3643 const baseUrl = currentUrl.split('?')[0]; 3644 const currentUrlParams = currentUrl.split('?')[1]; 3645 console.log('current url value:', currentUrlParams); 3646 const hrefValue = anchorElement.getAttribute('href'); 3647 var urlObj = new URL(anchorElement); 3648 var params = new URLSearchParams(urlObj.search);
3649 const keyUrl = ogiurl.split('=')[0]; 3650 3651 if (ogiurl == currentUrlParams) { 3652 params.delete(keyUrl); 3653 } else { 3654 const ogivalue = ogiurl.split('=')[0]; 3655 const ogioldvalue = ogiurl.split('=')[1]; 3656 const filUrl = ogioldvalue.split('&')[0]; 3657 let sizeValue = params.get(ogivalue); 3658 3659 if (sizeValue) { 3660 let sizes = sizeValue.split(','); 3661 sizes = sizes.filter(ogivalue => ogivalue !== filUrl); 3662 let newSizeValue = sizes.join(','); 3663 params.set(ogivalue, newSizeValue); 3664 } 3665 } 3666 3667 urlObj.search = params.toString(); 3668 var updatedUrl = urlObj.toString(); 3669 anchorElement.setAttribute('href',updatedUrl); 3670 } 3671 } 3672 } 3673 }, 3674 3675 toggleCheckbox: function ($el) { 3676 const $checkbox = $el.querySelector('input[type=checkbox]'); 3677 const parentElement = $el.closest('.pagebuilder-column'); 3678 3679 if (parentElement) { 3680 parentElement.classList.remove("active"); 3681 } 3682 3683 if (!$checkbox) { 3684 return 3685 } 3686 3687 if ($checkbox.disabled) { 3688 return true; 3689 } 3690 3691 $checkbox.checked = !$checkbox.checked; 3692 }, 3693 3694 toggleSwatch: function ($el) { 3695 if ($el.classList.contains('_checked')) { 3696 $el.classList.remove('_checked'); 3697 const parentElement = $el.closest('.pagebuilder-column'); 3698 if(parentElement){ 3699 parentElement.classList.remove("active"); 3700 } 3701 3702 if ($el.classList.contains('swatch-option-link-layered')) { 3703 $el.classList.remove('ring'); 3704 $el.classList.remove('ring-primary'); 3705 } 3706 } else { 3707 $el.classList.add('_checked'); 3708 const parentElement = $el.closest('.pagebuilder-column'); 3709 if (parentElement) { 3710 parentElement.classList.add("active"); 3711 } 3712 3713 if ($el.classList.contains('swatch-option-link-layered')) { 3714 $el.classList.add('ring'); 3715 $el.classList.add('ring-primary'); 3716 } 3717 } 3718 } 3719 } 3720 } 3721</script>
vendor: 1 bytes, line 3721
3721
3722<script> 3723 function initSwatchRenderer() { 3724 return { 3725 getSwatchType(typeNumber) { 3726 switch ("" + typeNumber) { 3727 case "1": 3728 return "color" 3729 case "2": 3730 return "image" 3731 case "0": 3732 default: 3733 return "text" 3734 } 3735 }, 3736 getSwatchBackgroundStyle(type, value, image) { 3737 if (this.getSwatchType(type) === "color") { 3738 return 'background-color:' + value; 3739 } else if (this.getSwatchType(type) === "image") { 3740 return "background: #ffffff url('" + image + "') no-repeat center;" + this.groupImageStyle(image); 3741 } else { 3742 return ''; 3743 } 3744 }, 3745 activeTooltipItem: false, 3746 tooltipPositionElement: false, 3747 isTooltipVisible() { 3748 return this.activeTooltipItem 3749 }, 3750 getTooltipImageStyle() { 3751 const type = this.activeTooltipItem.type; 3752 3753 if (this.getSwatchType(type) === "color") { 3754 return 'background-color:' + this.activeTooltipItem.value + '; width: 110px; height: 90px;'; 3755 } else if (this.getSwatchType(type) === "image") { 3756 return "background: #ffffff url('" + this.activeTooltipItem.thumb + 3757 "') center center no-repeat; width: 110px; height: 90px;" + this.groupImageStyle(this.activeTooltipItem.value); 3758 } else { 3759 return 'display:none'; 3760 } 3761 }, 3762 getTooltipPosition() { 3763 return this.tooltipPositionElement ? 3764 ( 3765 `top: ${this.tooltipPositionElement.offsetTop}px;` + 3766 `left: ${this.tooltipPositionElement.offsetLeft}px;` 3767 ) : '' 3768 }, 3769 getTooltipLabel() { 3770 return this.activeTooltipItem.label || '' 3771 }, 3772 isVisualSwatch() { 3773 return this.getSwatchType(this.activeTooltipItem.type) !== 'text' 3774 }, 3775 isFirstItemCol() { 3776 return '' 3777 }, 3778 groupImageStyle(img) { 3779 return img.includes('mst_nav_group') ? " background-size:contain" : ""; 3780 } 3781 } 3782 } 3783</script>
3783<script> 3784 function initSearchRenderer() { 3785 const searchFilter = document.querySelector('#mst-nav__search') 3786 .closest('.filter-option'); 3787 3788 searchFilter.classList.add('relative'); 3789 3790 let searchTitle = searchFilter.querySelector('.filter-options-title'); 3791 3792 let isInHorizontalNav = false; 3793 3794 if (document.querySelector('#mst-nav__search').closest('.mst-nav__horizontal-bar')) { 3795 isInHorizontalNav = true; 3796 } 3797 3798 if (!isInHorizontalNav) { 3799 searchTitle.parentNode.removeChild(searchTitle); 3800 } 3801 3802 return { 3803 suggest: function (suggestionContainer, value) { 3804 suggestionContainer.innerHTML = ''; 3805 3806 if (!value) { 3807 suggestionContainer.style.display = 'none'; 3808 return; 3809 } 3810 3811 value = value.toLowerCase(); 3812 3813 let filters = document.querySelector('.sidebar-main').querySelectorAll('.filter-option'); 3814 3815 filters.forEach(function (item, idx) { 3816 if (idx === 0) { 3817 return; 3818 } 3819 3820 let filter = item.cloneNode(true); 3821 3822 if (filter.querySelectorAll('.filter-options-content').length) { 3823 let opened = filter.querySelector('.filter-options-content'); 3824 opened.parentNode.removeChild(opened); 3825 } 3826 3827 filter.setAttribute('x-data', "{open: true}"); 3828 filter.classList.remove('my-4'); 3829 let expander = filter.querySelector('.filter-options-title span:last-child'); 3830 expander.parentNode.removeChild(expander); 3831 3832 let templateContent = filter.querySelector('template').content; 3833 3834 filter.appendChild(templateContent); 3835 filter.removeChild(filter.querySelector('template')); 3836 3837 // remove search filter 3838 if (filter.querySelectorAll('[data-element="search"]').length) { 3839 let filterSearch = filter.querySelector('[data-element="search"]'); 3840 filterSearch.parentNode.removeChild(filterSearch); 3841 } 3842 3843 // remove alphabetical index 3844 if (filter.querySelectorAll('[data-holder="alphabetical"]').length) { 3845 let alphabetical = filter.querySelector('[data-holder="alphabetical"]'); 3846 alphabetical.parentNode.removeChild(alphabetical); 3847 } 3848 3849 if (filter.querySelectorAll('.mst-nav__sizeLimiter').length) { 3850 let sizeLimiter = filter.querySelector('.mst-nav__sizeLimiter'); 3851 let parent = sizeLimiter.parentNode; 3852 parent.removeChild(sizeLimiter); 3853 if (parent.querySelector('style')) { 3854 parent.removeChild(parent.querySelector('style')); 3855 } 3856 } 3857 3858 let optionsCount = filter.querySelectorAll('[data-element=filter][data-value]').length; 3859 let clonedFilter = filter.cloneNode(true); 3860 3861 // check options match 3862 filter.querySelectorAll('[data-element=filter]').forEach(function (option, i) { 3863 if (!option.getAttribute('data-value')) { 3864 option.parentNode.removeChild(option); 3865 return; 3866 } 3867 3868 option.classList.remove('_parent', 'ml-7'); 3869 3870 if (!option.classList.contains('swatch-option')) { 3871 option.classList.add('w-full'); 3872 } 3873 3874 option.parentNode.classList.remove('pl-6'); 3875 3876 const label = option.tagName === 'A' 3877 ? option.getAttribute('aria-label') 3878 : option.querySelector('a').getAttribute('aria-label'); 3879 3880 if (label.toLowerCase().indexOf(value.toLowerCase()) < 0 || option.querySelectorAll('input:disabled').length) { 3881 option.parentNode.removeChild(option); 3882 optionsCount--; 3883 } 3884 }); 3885 3886 // check filter label if no option match 3887 if (!optionsCount) { 3888 let title = filter.querySelector('span.title').innerText; 3889 title = title.trim(); 3890 3891 if (title.toLowerCase().indexOf(value.toLowerCase()) >= 0) { 3892 filter = clonedFilter; 3893 optionsCount = 1; 3894 } 3895 } 3896 3897 // highlight match 3898 filter.querySelectorAll('span.title, span.mst-nav__label-item__label').forEach(function (titleNode) { 3899 let start = titleNode.innerText.toLowerCase().indexOf(value.toLowerCase()); 3900 3901 if (start >= 0) { 3902 let match = titleNode.innerText.substr(start, value.length); 3903 let regexp = new RegExp(match, 'g'); 3904 3905 if (titleNode.closest('.items')) { 3906 titleNode.closest('.items').classList.remove('hidden'); 3907 } 3908 3909 titleNode.innerHTML = titleNode.innerText.replace(regexp, '<span class="mst-nav__suggest-match bg-secondary">' + match + '</span>'); 3910 } 3911 }) 3912 3913 if (optionsCount) { 3914 suggestionContainer.appendChild(filter); 3915 } 3916 }); 3917 3918 if (suggestionContainer.children.length) { 3919 suggestionContainer.style.display = 'block'; 3920 } else { 3921 suggestionContainer.style.display = 'none'; 3922 } 3923 3924 document.addEventListener('click', function(e) { 3925 suggestionContainer.style.display = 'none'; 3926 }); 3927 }, 3928 3929 prepareSearch: function (e, url, origQuery, param, value) { 3930 if (e.keyCode === 13) { 3931 document.querySelector('#mst-nav__search-apply').click(); 3932 } 3933 3934 let query = ''; 3935 3936 if (!origQuery) { 3937 query = '?' + param + '=' + value; 3938 } else if (origQuery.indexOf(param) >= 0) { 3939 origQuery = origQuery.replace('?', ''); 3940 3941 let queryArray = origQuery.split('&'); 3942 3943 queryArray.forEach(function (item, key) { 3944 if (item.indexOf(param) >= 0) { 3945 let itemArray = item.split('='); 3946 itemArray[1] += ',' + value; 3947 item = itemArray.join('='); 3948 queryArray[key] = item; 3949 } 3950 }); 3951 3952 query = '?' + queryArray.join('&'); 3953 } else { 3954 query = origQuery + '&' + param + '=' + value; 3955 } 3956 3957 document.querySelector('#mst-nav__search-apply').setAttribute('href', url + query); 3958 }, 3959 3960 initSearch: function () { 3961 let param = document.querySelector('#mst-nav__search-filter').name; 3962 let url = location.href; 3963 let origQuery = location.search; 3964 3965 let suggestionContainer = document.querySelector('#mst-nav__search-suggestion'); 3966 3967 url = url.replace(origQuery, ''); 3968 3969 document.querySelector('#mst-nav__search-filter').addEventListener('keyup', function (e) { 3970 let value = e.target.value; 3971 3972 if (this.config.isSearchFilterOptions()) { 3973 this.suggest(suggestionContainer, value); 3974 } 3975 3976 if (this.config.isSearchFilterFulltext()) { 3977 this.prepareSearch(e, url, origQuery, param, value); 3978 } 3979 }.bind(this)); 3980 }, 3981 } 3982 } 3983</script>
vendor: 1 bytes, line 3983
3983
3984<script> 3985 function renderRangeSlider(params) { 3986 return { 3987 ...params, 3988 3989 initSlider: function () { 3990 this.from = this.toFixed(this.from * this.rate, 2); 3991 this.to = this.toFixed(this.to * this.rate, 2); 3992 this.min = Math.floor(this.min * this.rate); 3993 this.max = Math.ceil(this.max * this.rate); 3994 3995 this.updateFromTo(); 3996 3997 if (this.getSliderNode()) { 3998 noUiSlider.create(this.getSliderNode(), { 3999 start: [this.from, this.to], 4000 connect: true, 4001 range: { 4002 'min': this.min, 4003 'max': this.max 4004 }, 4005 step: this.step ? this.step : 1 4006 }); 4007 4008 this.getSliderNode().noUiSlider.on('update', function (values) { 4009 this.from = this.toFixed(parseFloat(values[0]), 2); 4010 this.to = this.toFixed(parseFloat(values[1]), 2); 4011 4012 this.updateFromTo(); 4013 }.bind(this)); 4014
4015 this.getSliderNode().noUiSlider.on('change', function () { 4016 this.applyFilter(); 4017 }.bind(this)); 4018 } 4019 4020 if (this.getFromToNode()) { 4021 this.getFromToNode().querySelectorAll('input').forEach(function (inputNode) { 4022 ['keyup', 'change'].forEach(function (eventName) { 4023 inputNode.addEventListener(eventName, function (e) { 4024 let from = this.from; 4025 let to = this.to; 4026 4027 let value = this.toFixed(parseFloat(e.target.value), 2); 4028 4029 if (e.target.dataset.element === 'from') { 4030 from = value; 4031 } else { 4032 to = value; 4033 } 4034 4035 this.from = from; 4036 this.to = to; 4037 }.bind(this)); 4038 }.bind(this)); 4039 4040 if (this.getSliderNode()) { 4041 inputNode.addEventListener('blur', function () {
4042 this.getSliderNode().noUiSlider.set([this.from, this.to]); 4043 }.bind(this)); 4044 } 4045 }.bind(this)); 4046 } 4047 }, 4048 4049 getSliderNode: function () { 4050 return this.$el.querySelector("[data-element=slider]"); 4051 }, 4052 4053 getTextNode: function () { 4054 return this.$el.querySelector('[data-element=text]'); 4055 }, 4056 4057 getFromToNode: function () { 4058 return this.$el.querySelector('.mst-nav__slider-from-to'); 4059 }, 4060 4061 updateFromTo: function () { 4062 if (this.getTextNode()) { 4063 this.getTextNode().innerHTML = this.getTextValue(this.from) + ' - ' + this.getTextValue(this.to); 4064 } 4065 4066 if (this.getFromToNode()) { 4067 this.getFromToNode().querySelector('[data-element=from]').value = this.toFixed(this.from); 4068 this.getFromToNode().querySelector('[data-element=to]').value = this.toFixed(this.to); 4069 } 4070 }, 4071 4072 applyFilter: function () { 4073 this.from = this.from < this.min ? this.min : this.from; 4074 this.to = this.to > this.max ? this.max : this.to; 4075 4076 if (parseFloat(this.to) < parseFloat(this.from)) { 4077 this.from = this.to; 4078 } 4079 4080 const value = this.toFixed(this.from / this.rate, 2) + this.separator + this.toFixed(this.to / this.rate, 2); 4081 4082 let url = this.urlTemplate.replace(this.paramTemplate, value); 4083 4084 initApplier().apply(url, this.$el, false, this.from, this.to); 4085 }, 4086 4087 getTextValue: function (value) { 4088 let tmpl = this.valueTemplate; 4089 4090 tmpl = tmpl.replace('{value}', this.toFixed(value, 0)); 4091 tmpl = tmpl.replace('{value.0}', this.toFixed(value, 0)); 4092 tmpl = tmpl.replace('{value.1}', this.toFixed(value, 1)); 4093 tmpl = tmpl.replace('{value.2}', this.toFixed(value, 2)); 4094 4095 return tmpl; 4096 }, 4097 4098 toFixed: function (value, precision) { 4099 //1.00 === 1 4100 if (parseFloat(parseFloat(value).toFixed(0)) === parseFloat(parseFloat(value).toFixed(precision))) { 4101 return parseFloat(value).toFixed(0); 4102 } 4103 4104 return parseFloat(value).toFixed(precision); 4105 } 4106 } 4107 } 4108</script>
4108 4109
4110<script> 4111 function createCollapsibleCategories() { 4112 return { 4113 initToggler: function ($el) { 4114 const categoryFilter = this.getCategoryFilter($el); 4115 4116 const parentCatOptions = categoryFilter.querySelectorAll('li._parent'); 4117 4118 if (!parentCatOptions.length) { 4119 return; 4120 } 4121 4122 parentCatOptions.forEach(function (elem) { 4123 this.initCollapsibe(elem) 4124 }.bind(this)); 4125 4126 categoryFilter.addEventListener('nested-toggle', function (event) { 4127 const parent = categoryFilter.querySelector('ol.items.collapsible'); 4128 4129 if (!parent || parent === undefined) { 4130 return; 4131 } 4132 4133 parent.querySelectorAll('ol.items, a.mst-nav_category-toggler').forEach(function (elem) { 4134 if (event.detail.q) { 4135 elem.classList.add('_active'); 4136 elem.classList.remove('hidden'); 4137 4138 if (elem.classList.contains('mst-nav_category-toggler')) { 4139 elem.classList.add('hidden'); 4140 } 4141 } else { 4142 elem.classList.remove('_active'); 4143 elem.classList.add('hidden'); 4144 4145 if (elem.classList.contains('mst-nav_category-toggler')) { 4146 elem.classList.remove('hidden'); 4147 } 4148 } 4149 }) 4150 }) 4151 }, 4152 4153 initCollapsibe: function (element) { 4154 const $togglerHandler = element; 4155 const $target = element.nextElementSibling; 4156 if (!$target) { 4157 return; 4158 } 4159 const $toggler = document.createElement('A'); 4160 $toggler.classList.add('mst-nav_category-toggler', 'cursor-pointer', 'inline-block', 'p-1'); 4161 $toggler.innerHTML = `<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 transition-transform transform duration-300 ease-in-out" width="25" height="25" role="img"> 4162 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 4163<title>chevron-down</title></svg> 4164`; 4165 4166 $target.querySelectorAll('li').forEach( function (elem) { 4167 if (elem.classList.contains('_checked')) { 4168 $toggler.classList.add('_active'); 4169 $toggler.querySelector('svg').classList.add('rotate-180'); 4170 $target.classList.add('_active'); 4171 $target.classList.remove('hidden'); 4172 } 4173 }); 4174 4175 $toggler.addEventListener('click', function (e) { 4176 if ($toggler.classList.contains('_active')) { 4177 $toggler.classList.remove('_active'); 4178 $toggler.querySelector('svg').classList.remove('rotate-180'); 4179 $target.classList.remove('_active'); 4180 $target.classList.add('hidden'); 4181 } else { 4182 $toggler.classList.add('_active'); 4183 $toggler.querySelector('svg').classList.add('rotate-180'); 4184 $target.classList.add('_active'); 4185 $target.classList.remove('hidden'); 4186 } 4187 }); 4188 4189 $togglerHandler.style.marginLeft = '0'; 4190 4191 $togglerHandler.parentElement.insertBefore($toggler, $togglerHandler); 4192 }, 4193 4194 getCategoryFilter: function ($el) { 4195 return $el.closest('.mst-nav__category'); 4196 } 4197 } 4198 } 4199</script>
4199 4200
4200<script> 4201 function initApplyButton() { 4202 return { 4203 config: getMstNavConfig(), 4204 selector: '[data-element="mst-nav__applyButton"]', 4205 countSelector: '[data-count]', 4206 buttonSelector: '[data-apply]', 4207 label1Selector: '[data-label-1]', 4208 labelNSelector: '[data-label-n]', 4209 4210 $el: function () { 4211 return document.querySelector(this.selector); 4212 }, 4213 4214 $count: function () { 4215 return this.$el().querySelector(this.countSelector); 4216 }, 4217 4218 $button: function () { 4219 return this.$el().querySelector(this.buttonSelector); 4220 }, 4221 4222 clear: function () { 4223 this.$count().innerHTML = ''; 4224 this.$button().dataset.apply = ''; 4225 }, 4226 4227 show: function () { 4228 this.$el().classList.remove('hidden'); 4229 this.$el().style.visibility = 'hidden'; 4230 }, 4231 4232 hide: function () { 4233 //this.$el().classList.add('hidden'); 4234 }, 4235 4236 showLoader: function () { 4237 this.$el().classList.add('_loading'); 4238 document.querySelector('.show-result .mst-nav__apply-button .loader').classList.remove('hidden'); 4239 document.querySelector('.show-result .mst-nav__apply-button').classList.add('disabled'); 4240 document.querySelector('.show-result .mst-nav__apply-button button').disabled = true; 4241 //document.querySelector('#mob-navfilter-loader').style.display = 'block'; 4242 }, 4243 4244 hideLoader: function () { 4245 this.$el().classList.remove('_loading'); 4246 document.querySelector('.show-result .mst-nav__apply-button .loader').classList.add('hidden'); 4247 document.querySelector('.show-result .mst-nav__apply-button').classList.remove('disabled'); 4248 document.querySelector('.show-result .mst-nav__apply-button button').disabled = false; 4249 //document.querySelector('#mob-navfilter-loader').style.display = 'none'; 4250 4251 }, 4252 4253 move: function ($initiator) { 4254 let x = $initiator.getBoundingClientRect().left + parseFloat(window.getComputedStyle($initiator, null).width.replace("px", "")); 4255 4256 let baseElement = this.getBaseElement($initiator); 4257 4258 let y = baseElement.getBoundingClientRect().top 4259 - parseFloat(window.getComputedStyle(this.$el(), null).height.replace("px", "")) / 2 4260 + parseFloat(window.getComputedStyle(baseElement, null).height.replace("px", "")) / 2 4261 + window.scrollY; 4262 4263 if ( 4264 this.config.isConfirmOnMobile() 4265 && window.innerWidth <= this.config.getModeSwitchBreakpoint()) { 4266 this.$el().style.right = '10px' 4267 } else { 4268 this.$el().style.left = x + 'px'; 4269 } 4270 4271 this.$el().style.top = y + 'px'; 4272 this.$el().style.visibility = 'visible'; 4273 }, 4274 4275 getBaseElement: function ($initiator) { 4276 let filterName = $initiator.closest('[data-mst-nav-filter]').dataset.mstNavFilter; 4277 4278 if (filterName === 'price') { 4279 return $initiator.querySelector('[data-element="slider"]').firstChild; 4280 } 4281 4282 return $initiator 4283 }, 4284 4285 update: function (result) { 4286 let productsHtml = result['products']; 4287 let applyFilterUrl = result['url']; 4288 let productsCount = result['products_count']; 4289 4290 // Parameters you want to check 4291 const paramString = "&product_list_dir=desc&product_list_order=revenue_ranking"; 4292 4293 // Check if both parameters already exist 4294 if (!applyFilterUrl.includes("product_list_dir=desc") || 4295 !applyFilterUrl.includes("product_list_order=revenue_ranking")) { 4296 4297 // If URL already has ?, use &, else use ?
4298 if (applyFilterUrl.includes("?")) { 4299 applyFilterUrl += paramString; 4300 } else { 4301 applyFilterUrl += "?" + paramString.substring(1); // remove first "&" 4302 } 4303 } 4304 4305 this.$button().dataset.apply = applyFilterUrl; 4306 console.log('applyFilterUrl='+applyFilterUrl); 4307 this.$count().innerHTML = productsCount; 4308 this.toggleLabel(productsCount); 4309 4310 if (productsHtml.length > 0) {//todo what for? 4311 document.querySelector(this.config.getAjaxProductListWrapperId()).outerHtml = result['products']; 4312 4313 let event = document.createEvent('HTMLEvents'); 4314 event.initEvent('contentUpdated', true, false); 4315 document.querySelector(this.config.getAjaxProductListWrapperId()).dispatchEvent(event); 4316 } 4317 4318 this.$button().addEventListener('click', function (e) { 4319 e.stopImmediatePropagation(); 4320 4321 document.querySelector('.show-result .mst-nav__apply-button .loader').classList.remove('hidden'); 4322 document.querySelector('.show-result .mst-nav__apply-button').classList.add('disabled'); 4323 document.querySelector('.show-result .mst-nav__apply-button button').disabled = true; 4324 //document.querySelector('#mob-navfilter-loader').style.display = 'block'; 4325 4326 const url = this.$button().dataset.apply; 4327 // this.filterApplier.apply(url); 4328 initApplier().apply(url); 4329 //window.location = url; 4330 //document.querySelector('#mob-navfilter-loader').style.display = 'none'; 4331 }.bind(this)) 4332 }, 4333 4334 load: function (url, cacheKey, force) { 4335 this.clear(); 4336 cacheKey = 'applyingMode:' + url; 4337 let cachedData = mstNavCache.getData(cacheKey); 4338 if (cachedData) { 4339 this.update(cachedData); 4340 } else { 4341 this._request(url, force); 4342 } 4343 }, 4344 4345 _request: function (url, force) { 4346 this.showLoader(); 4347 4348 let data = {isAjax: true}; 4349 if (force) { 4350 data.mstNavForceMode = 'by_button_click'; 4351 } 4352 4353 let queryParams = new URLSearchParams(); 4354 4355 for (const key in data) { 4356 queryParams.set(key, data[key]); 4357 } 4358 4359 const separator = url.indexOf('?') > 0 ? '&' : '?'; 4360 4361 fetch(url + separator + queryParams.toString()) 4362 .then(response => { 4363 if (! response.ok) console.warn('GET request failed'); 4364 return response.json() 4365 }) 4366 .then(function (result) { 4367 let cacheKey = 'applyingMode:' + url; 4368 mstNavCache.setData(cacheKey, result); 4369 4370 this.update(result); 4371 }.bind(this)) 4372 .catch(function (error) { 4373 console.log(error); 4374 // window.location = url; 4375 }.bind(this)) 4376 .finally(function () { 4377 this.hideLoader(); 4378 }.bind(this)); 4379 }, 4380 4381 toggleLabel: function (number) { 4382 if (number === 1) { 4383 this.$el().querySelector(this.labelNSelector).classList.add('hidden'); 4384 this.$el().querySelector(this.label1Selector).classList.remove('hidden'); 4385 } else { 4386 this.$el().querySelector(this.labelNSelector).classList.remove('hidden'); 4387 this.$el().querySelector(this.label1Selector).classList.add('hidden'); 4388 } 4389 } 4390 } 4391 } 4392 </script>
4392 4393<div class="page-wrapper"><div class="container hidden"> 4394 <div class="pt-2 pb-2 flex flex-row items-end justify-end"> 4395 <div class="pl-3"> 4396 <a href="https://www.flooringinc.com/knowledge-base/" class="hover:underline"> 4397 FAQ</a> 4398 </div> 4399 </div> 4400</div> 4401<header class="page-header"><div class="panel wrapper"><div class="header_top flex justify-between items-center" x-data="notificationAjaxCall()" x-init="initNotificationFunc()"> 4402 <div class="header_left_notification text-size14 font-normal" x-html="left_notification_html"></div> 4403 <div class="header_middle_notification flex"> 4404 <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"> 4405<path d="M18.125 0V9.09091H0V0H18.125ZM19.9375 0H29V9.09091H19.9375V0ZM10.875 20V10.9091H29V20H10.875ZM0 20V10.9091H9.0625V20H0Z" fill="#15324C"/> 4406</svg> 500+ Million Sqft Covered</a></div> 4407 4408<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"> 4409<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"/> 4410</svg> 125K+ Verified Reviews</a></div> 4411 4412<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"> 4413<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"/> 4414<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"/> 4415<circle cx="5" cy="5" r="1" fill="white"/> 4416</svg> Price Match Guarantee</a></div> 4417 4418<div class="flex items-center"><a href="/moneybackguarantee" class="flex items-center gap-2"> 4419<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18" fill="none"> 4420<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"/> 4421</svg> Money Back Guarantee</a></div> 4422</div> </div> 4423 <div class="header_right_notifications font-normal"> 4424 <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> 4425<li><a href="/contact">Contact Us</a></li> 4426<li><a href="/sales/guest/form">Track Order</a></li> 4427</ul></div></div></div> </div> 4428</div> 4429
4430<script> 4431 function notificationAjaxCall() { 4432 return { 4433 availability_notification: '', 4434 left_notification_html: '', 4435 right_notification_html: '', 4436 initNotificationFunc: function () { 4437 fetch(BASE_URL+'notifications/index/show', { 4438 method: "GET", 4439 headers: { 'Content-Type': 'application/json' }, 4440 }) 4441 .then(response => { 4442 if (! response.ok) console.warn('GET request failed'); 4443 return response.json(); 4444 }) 4445 .then(data => { 4446 if (data) { 4447 this.availability_notification = data.availability_notification; 4448 this.left_notification_html = data.left_notification_html; 4449 this.right_notification_html = data.right_notification_html; 4450 } 4451 }); 4452 } 4453 } 4454 } 4455</script>
4455</div><div class="header content">
4455<script> 4456 function initQuoteCartDrawer() { 4457 return { 4458 open: false, 4459 cartData: {}, 4460 getQuoteCartData(data) { 4461 if (data.quotecart) { 4462 this.cartData = data.quotecart 4463 this.setCartItems(); 4464 } 4465 }, 4466 cartItems: [], 4467 setCartItems() { 4468 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 4469 }, 4470 deleteItemFromCart(itemId) { 4471 var formKey = document.querySelector('input[name=form_key]').value; 4472 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 4473 "headers": { 4474 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4475 }, 4476 "body": "form_key="+ formKey + "&item_id="+itemId, 4477 "method": "POST", 4478 "mode": "cors", 4479 "credentials": "include" 4480 }).then(function (response) { 4481 if (response.redirected) { 4482 window.location.href = response.url; 4483 } else if (response.ok) { 4484 return response.json(); 4485 } else { 4486 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 4487 [{ 4488 type: "warning", 4489 text: "Could not remove item from quote." 4490 }], 5000 4491 ); 4492 } 4493 }).then(function (response) { 4494 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 4495 [{ 4496 type: response.success ? "success" : "error", 4497 text: response.success 4498 ? "You removed the item." 4499 : response.error_message 4500 }], 5000 4501 ); 4502 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 4503 window.dispatchEvent(reloadCustomerDataEvent); 4504 }); 4505 } 4506 } 4507 } 4508</script>
4508 4509<section id="cart-quote-drawer" 4510 x-data="initQuoteCartDrawer()" 4511 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 4512 @toggle-quote-cart.window="open=true;" 4513 @keydown.window.escape="open=false" 4514> 4515 <template x-if="cartData && cartData.summary_count"> 4516 <div role="dialog" 4517 aria-labelledby="cart-drawer-title" 4518 aria-modal="true" 4519 @click.away="open = false" 4520 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4521 <div class="backdrop" 4522 x-show="open" 4523 x-transition:enter="ease-in-out duration-500" 4524 x-transition:enter-start="opacity-0" 4525 x-transition:enter-end="opacity-100" 4526 x-transition:leave="ease-in-out duration-500" 4527 x-transition:leave-start="opacity-100" 4528 x-transition:leave-end="opacity-0" 4529 @click="open = false" 4530 aria-label="Close panel"></div> 4531 <div class="relative w-screen max-w-md shadow-2xl" 4532 x-show="open" 4533 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4534 x-transition:enter-start="translate-x-full" 4535 x-transition:enter-end="translate-x-0" 4536 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4537 x-transition:leave-start="translate-x-0" 4538 x-transition:leave-end="translate-x-full" 4539 > 4540 <div 4541 x-show="open" 4542 x-transition:enter="ease-in-out duration-500" 4543 x-transition:enter-start="opacity-0" 4544 x-transition:enter-end="opacity-100" 4545 x-transition:leave="ease-in-out duration-500" 4546 x-transition:leave-start="opacity-100" 4547 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 4548 <button @click="open = false" aria-label="Close panel" 4549 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 4550 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 4551 <path stroke-linecap="round" stroke-linejoin="round" 4552 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 4553 </path> 4554 </svg> 4555 </button> 4556 </div> 4557 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 4558 <header class="px-4 sm:px-6"> 4559 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 4560 My Quote Cart </div> 4561 </header> 4562 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 4563 sm:gap-8 sm:px-6 border-container"> 4564 <template x-for="item in cartItems"> 4565 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 4566 ease-in-out rounded-lg hover:bg-gray-100"> 4567 <a :href="item.product_url" class="w-1/4"> 4568 <img 4569 :src="item.product_image.src" 4570 :width="item.product_image.width" 4571 :height="item.product_image.height" 4572 loading="lazy" 4573 /> 4574 </a> 4575 <div class="w-3/4 relative"> 4576 <div> 4577 <div class="text-xl"> 4578 <a :href="item.product_url" class="hover:underline"> 4579 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 4580 </a> 4581 </div> 4582 <div class="text-sm"><span x-html="item.product_sku"></div> 4583 </div> 4584 <template x-for="option in item.options"> 4585 <div class="pt-2"> 4586 <p class="font-semibold" x-text="option.label + ':'"></p> 4587 <p class="text-secondary" x-html="option.value"></p> 4588 </div> 4589 </template> 4590 <div><span x-html="item.product_price"></span></div> 4591 <div class="pt-4"> 4592 <a :href="item.configure_url" 4593 x-show="item.product_type !== 'grouped'" 4594 class="inline-flex p-2 mr-2 btn btn-primary"> 4595 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 4596 size="16" class="w-5 h-5"> 4597 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 4598 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 4599 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 4600 </path> 4601 </svg> 4602 </a> 4603 <button class="inline-flex p-2 btn btn-primary" 4604 @click="deleteItemFromCart(item.item_id)" 4605 > 4606 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 4607 size="16" class="w-5 h-5"> 4608 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 4609 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 4610 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 4611 0 00-1 1v3M4 7h16"> 4612 </path> 4613 </svg> 4614 </button> 4615 </div> 4616 </div> 4617 </div> 4618 </template> 4619 </div> 4620 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 4621 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 4622 hover:bg-gray-100">
4623 <span>Cart Subtotal:</span> 4624 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 4625 </div> 4626 <div class="w-full"> 4627 <a href="https://www.flooringinc.com/amasty_quote/cart/" 4628 class="btn btn-secondary justify-center"> 4629 View and Edit Cart </a> 4630 </div> 4631 </div> 4632 </div> 4633 </div> 4634 </div> 4635 </template> 4636</section> 4637<div class="widget block block-static-block"> 4638 <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()"> 4639 <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> 4640</div> 4641
4642<script> 4643function globalNotificationAjaxCall() { 4644 return { 4645 global_notification_text: '', 4646 initGlobalNotificationFunc: function () { 4647 fetch(BASE_URL+'notifications/index/GlobalNotification?full_action_name=catalog_category_view&cat_prod_id=2333', { 4648 method: "GET", 4649 headers: { 'Content-Type': 'application/json' }, 4650 }) 4651 .then(response => { 4652 if (! response.ok) console.warn('GET request failed'); 4653 return response.json(); 4654 }) 4655 .then(data => { 4656 if (data) { 4657 if (data.notification_text !='') { 4658 document.querySelector('.notification4.bg-custom-green').style.display = 'block'; 4659 this.global_notification_text = data.notification_text; 4660 } 4661 } 4662 }); 4663 } 4664 } 4665} 4666</script>
4666</div></div></div> 4667</div>
4667<script> 4668 function initHeader () { 4669 return { 4670 searchOpen: false, 4671 cart: {}, 4672 quoteCart: {}, 4673 activeCartType: 'cart', 4674 getData(data) { 4675 if (data.cart) { 4676 this.cart = data.cart; 4677 // this.cart.summary_count=this.cart.items.length; 4678 } 4679 if (data.quotecart) { 4680 this.quoteCart = data.quotecart; 4681 } 4682 if (data.active_cart_icon) { 4683 this.activeCartType = data.active_cart_icon; 4684 } 4685 } 4686 } 4687 } 4688 function initCompareHeader() { 4689 return { 4690 compareProducts: null, 4691 itemCount: 0, 4692 receiveCompareData(data) { 4693 if (data['compare-products']) { 4694 this.compareProducts = data['compare-products']; 4695 this.itemCount = this.compareProducts.count; 4696 } 4697 } 4698 } 4699 } 4700</script>
4700 4701 4702<div id="header" 4703 class="relative z-30 w-full bg-white" 4704 x-data="initHeader()" 4705 @keydown.window.escape="searchOpen = false;" 4706 @private-content-loaded.window="getData(event.detail.data)" 4707> 4708 <div class="content flex flex-wrap items-center justify-between w-full pt-4 pb-4 mx-auto mt-0"> 4709 <!--Logo--> 4710 <div class="logo relative z-20"> 4711 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 4712 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 4713 no-underline hover:no-underline font-title" 4714 href="https://www.flooringinc.com/" 4715 title="Flooring Inc. The Flooring Superstore" 4716 aria-label="store logo"> 4717 <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> 4718 </a> 4719</div> 4720 </div> 4721 4722 <!--Main Navigation--> 4723 <div x-data="initMenuMobile_6ac143420e7c9()" 4724 class="z-50 order-2 sm:order-1 lg:order-2 navigation xl:hidden" 4725> 4726 <!-- mobile --> 4727 <div @load.window="setActiveMenu($root)" 4728 class="mobile-menu bg-lightblue" 4729 :class="{'h-screen fixed top-0 left-0 w-full' : open}" 4730 @toggle-mobile-menu.window="open = !open" 4731 @keydown.window.escape="open=false" 4732 > 4733 <div class="flex items-baseline justify-between ml-0 menu-icon"> 4734 <div class="flex justify-end w-full"> 4735 <a @click="$dispatch('toggle-mobile-menu')" 4736 class="flex items-center justify-center cursor-pointer" 4737 :class="{ 'ml-auto': open }"> 4738 <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> 4739 <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> 4740 </a> 4741 </div> 4742 </div> 4743 <div class="menu-overlay hidden" :class="{ 'hidden' : !open }" @click="$dispatch('toggle-mobile-menu')"></div> 4744 <nav 4745 class="hidden w-full h-full duration-150 ease-in-out transform transition-display pt-5 pr-5 pl-12" 4746 :class="{ 'hidden' : !open }" 4747 > 4748 <span class="menu-label text-size28 font-medium text-black pt-1 pb-4" :class="{ 'hidden' : !open, 'block': open }">Menu</span> 4749 <div class="nav-in overflow-y-auto overflow-x-hidden h-5/6"> 4750 <div class="level-0"> 4751 <span class="flex items-center transition-transform duration-150 ease-in-out transform mb-3"> 4752 <a class="flex items-center w-full cursor-pointer level-0 text-size24 font-medium text-black no-underline" 4753 @click="mobilePanelActiveId = 4754 mobilePanelActiveId === 'category-node-1826' ? 4755 0 : 'category-node-1826'" 4756 title="Flooring By Category"> 4757 Flooring By Category </a> 4758 <a class="absolute right-0 cursor-pointer menu_arw1" :class="{ 4759 'active' : mobilePanelActiveId, 4760 '' : !mobilePanelActiveId 4761 }" 4762 @click="mobilePanelActiveId = 4763 mobilePanelActiveId === 'category-node-1826' ? 4764 0 : 'category-node-1826'" 4765 > 4766 <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> 4767 </a> 4768 </span> 4769 <div 4770 class="w-full h-full transition-transform duration-200 ease-in-out block transform" 4771 :class="{ 4772 'block' : mobilePanelActiveId !== 'category-node-1826', 4773 'hidden' : mobilePanelActiveId === 'category-node-1826', 4774 }" 4775 > 4776 4777 4778 4779 <li class="imgcat list-none relative" x-data="{ show: false }" > 4780 <a 4781 @click="show = !show" 4782 4783 title="Rubber Flooring" 4784 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 4785 > 4786 <!-- <span class="w-6"></span> -->
4787 <span> 4788 Rubber Flooring </span> 4789 </a> 4790 4791 <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> 4792 <ul class="z-10 w-full" x-show="show"> 4793 <li class="level-2"> 4794 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 4795 title="All Rubber Flooring" 4796 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4797 All Rubber Flooring</a> 4798 </li> 4799 <li class="level-2"> 4800 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 4801 title="Rubber Flooring Rolls" 4802 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4803 Rubber Flooring Rolls</a> 4804 </li> 4805 <li class="level-2"> 4806 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 4807 title="Rubber Floor Tiles" 4808 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4809 Rubber Floor Tiles</a> 4810 </li> 4811 <li class="level-2"> 4812 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 4813 title="Rubber Mats" 4814 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4815 Rubber Mats</a> 4816 </li> 4817 <li class="level-2"> 4818 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 4819 title="Playground Flooring" 4820 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4821 Playground Flooring</a> 4822 </li> 4823 <li class="level-2"> 4824 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 4825 title="Outdoor Rubber Flooring" 4826 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4827 Outdoor Rubber Flooring</a> 4828 </li> 4829 </ul> 4830 <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> 4831 4832 4833 4834 4835 <li class="imgcat list-none relative" x-data="{ show: false }" > 4836 <a 4837 @click="show = !show" 4838 4839 title="Garage Flooring" 4840 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 4841 > 4842 <!-- <span class="w-6"></span> -->
4843 <span> 4844 Garage Flooring </span> 4845 </a> 4846 4847 <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> 4848 <ul class="z-10 w-full" x-show="show"> 4849 <li class="level-2"> 4850 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 4851 title="All Garage Flooring" 4852 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4853 All Garage Flooring</a> 4854 </li> 4855 <li class="level-2"> 4856 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 4857 title="Garage Flooring Rolls" 4858 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4859 Garage Flooring Rolls</a> 4860 </li> 4861 <li class="level-2"> 4862 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 4863 title="Garage Floor Tiles" 4864 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4865 Garage Floor Tiles</a> 4866 </li> 4867 <li class="level-2"> 4868 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 4869 title="Garage Gym Flooring" 4870 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4871 Garage Gym Flooring</a> 4872 </li> 4873 <li class="level-2"> 4874 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 4875 title="Garage Floor Epoxy" 4876 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4877 Garage Floor Epoxy</a> 4878 </li> 4879 <li class="level-2"> 4880 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 4881 title="Trailer Flooring" 4882 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4883 Trailer Flooring</a> 4884 </li> 4885 </ul> 4886 <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> 4887 4888 4889 4890 4891 <li class="imgcat list-none relative" x-data="{ show: false }" > 4892 <a 4893 @click="show = !show" 4894 4895 title="Dance Flooring" 4896 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 4897 > 4898 <!-- <span class="w-6"></span> -->
4899 <span> 4900 Dance Flooring </span> 4901 </a> 4902 4903 <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> 4904 <ul class="z-10 w-full" x-show="show"> 4905 <li class="level-2"> 4906 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 4907 title="Marley Floor Rolls" 4908 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4909 Marley Floor Rolls</a> 4910 </li> 4911 <li class="level-2"> 4912 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 4913 title="Dance Floor Tiles" 4914 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4915 Dance Floor Tiles</a> 4916 </li> 4917 <li class="level-2"> 4918 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 4919 title="Portable Dance Floors & Kits" 4920 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4921 Portable Dance Floors & Kits</a> 4922 </li> 4923 <li class="level-2"> 4924 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 4925 title="Subflooring" 4926 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4927 Subflooring</a> 4928 </li> 4929 <li class="level-2"> 4930 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 4931 title="Adhesives, Cleaners & Accessories" 4932 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4933 Adhesives, Cleaners & Accessories</a> 4934 </li> 4935 <li class="level-2"> 4936 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 4937 title="All Dance Flooring" 4938 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4939 All Dance Flooring</a> 4940 </li> 4941 </ul> 4942 <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> 4943 4944 4945 4946 4947 <li class="imgcat list-none relative" x-data="{ show: false }" > 4948 <a 4949 @click="show = !show" 4950 4951 title="Foam Flooring" 4952 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 4953 > 4954 <!-- <span class="w-6"></span> -->
4955 <span> 4956 Foam Flooring </span> 4957 </a> 4958 4959 <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> 4960 <ul class="z-10 w-full" x-show="show"> 4961 <li class="level-2"> 4962 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 4963 title="Foam Floor Tiles" 4964 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4965 Foam Floor Tiles</a> 4966 </li> 4967 <li class="level-2"> 4968 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 4969 title="Kids & Baby Play Mats" 4970 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4971 Kids & Baby Play Mats</a> 4972 </li> 4973 <li class="level-2"> 4974 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 4975 title="Gymnastics Mats " 4976 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4977 Gymnastics Mats </a> 4978 </li> 4979 <li class="level-2"> 4980 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 4981 title="Wrestling Mats" 4982 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4983 Wrestling Mats</a> 4984 </li> 4985 <li class="level-2"> 4986 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 4987 title="Martial Arts Mats " 4988 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4989 Martial Arts Mats </a> 4990 </li> 4991 <li class="level-2"> 4992 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 4993 title="Trade Show Flooring" 4994 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 4995 Trade Show Flooring</a> 4996 </li> 4997 </ul> 4998 <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> 4999 5000 5001 5002 5003 <li class="imgcat list-none relative" x-data="{ show: false }" > 5004 <a 5005 @click="show = !show" 5006 5007 title="Outdoor Flooring" 5008 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5009 > 5010 <!-- <span class="w-6"></span> -->
5011 <span> 5012 Outdoor Flooring </span> 5013 </a> 5014 5015 <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> 5016 <ul class="z-10 w-full" x-show="show"> 5017 <li class="level-2"> 5018 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 5019 title="Playground Flooring" 5020 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5021 Playground Flooring</a> 5022 </li> 5023 <li class="level-2"> 5024 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 5025 title="Sports Flooring & Court Tiles" 5026 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5027 Sports Flooring & Court Tiles</a> 5028 </li> 5029 <li class="level-2"> 5030 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 5031 title="Turf & Artificial Grass" 5032 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5033 Turf & Artificial Grass</a> 5034 </li> 5035 <li class="level-2"> 5036 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 5037 title="Composite Decking" 5038 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5039 Composite Decking</a> 5040 </li> 5041 <li class="level-2"> 5042 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 5043 title="Rooftop Deck Flooring" 5044 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5045 Rooftop Deck Flooring</a> 5046 </li> 5047 <li class="level-2"> 5048 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 5049 title="Drainage Tile & Mats" 5050 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5051 Drainage Tile & Mats</a> 5052 </li> 5053 </ul> 5054 <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> 5055 5056 5057 5058 5059 <li class="imgcat list-none relative" x-data="{ show: false }" > 5060 <a 5061 @click="show = !show" 5062 5063 title="Turf & Artificial Grass" 5064 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5065 > 5066 <!-- <span class="w-6"></span> -->
5067 <span> 5068 Turf & Artificial Grass </span> 5069 </a> 5070 5071 <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> 5072 <ul class="z-10 w-full" x-show="show"> 5073 <li class="level-2"> 5074 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 5075 title="Sport & Gym Turf" 5076 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5077 Sport & Gym Turf</a> 5078 </li> 5079 <li class="level-2"> 5080 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 5081 title="Landscape Turf" 5082 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5083 Landscape Turf</a> 5084 </li> 5085 <li class="level-2"> 5086 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 5087 title="Pet Turf" 5088 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5089 Pet Turf</a> 5090 </li> 5091 <li class="level-2"> 5092 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 5093 title="Golf & Putting Green Turf" 5094 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5095 Golf & Putting Green Turf</a> 5096 </li> 5097 <li class="level-2"> 5098 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 5099 title="Turf Accessories" 5100 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5101 Turf Accessories</a> 5102 </li> 5103 <li class="level-2"> 5104 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 5105 title="All Turf & Artificial Grass" 5106 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5107 All Turf & Artificial Grass</a> 5108 </li> 5109 </ul> 5110 <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> 5111 5112 5113 5114 5115 <li class="imgcat list-none relative" x-data="{ show: false }" > 5116 <a 5117 @click="show = !show" 5118 5119 title="Carpet Tiles & Rolls" 5120 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5121 > 5122 <!-- <span class="w-6"></span> -->
5123 <span> 5124 Carpet Tiles & Rolls </span> 5125 </a> 5126 5127 <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> 5128 <ul class="z-10 w-full" x-show="show"> 5129 <li class="level-2"> 5130 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 5131 title="Carpet Tiles" 5132 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5133 Carpet Tiles</a> 5134 </li> 5135 <li class="level-2"> 5136 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 5137 title="Carpet Rolls" 5138 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5139 Carpet Rolls</a> 5140 </li> 5141 <li class="level-2"> 5142 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 5143 title="Home Theater Carpet" 5144 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5145 Home Theater Carpet</a> 5146 </li> 5147 <li class="level-2"> 5148 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 5149 title="Peel and Stick Carpet Tiles" 5150 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5151 Peel and Stick Carpet Tiles</a> 5152 </li> 5153 <li class="level-2"> 5154 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 5155 title="Outdoor Carpet" 5156 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5157 Outdoor Carpet</a> 5158 </li> 5159 <li class="level-2"> 5160 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 5161 title="Waterproof Carpet" 5162 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5163 Waterproof Carpet</a> 5164 </li> 5165 </ul> 5166 <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> 5167 5168 5169 5170 5171 <li class="imgcat list-none relative" x-data="{ show: false }" > 5172 <a 5173 @click="show = !show" 5174 5175 title="Vinyl Flooring" 5176 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5177 > 5178 <!-- <span class="w-6"></span> -->
5179 <span> 5180 Vinyl Flooring </span> 5181 </a> 5182 5183 <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> 5184 <ul class="z-10 w-full" x-show="show"> 5185 <li class="level-2"> 5186 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 5187 title="Vinyl Sheet Flooring" 5188 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5189 Vinyl Sheet Flooring</a> 5190 </li> 5191 <li class="level-2"> 5192 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 5193 title="Vinyl Tiles & Planks" 5194 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5195 Vinyl Tiles & Planks</a> 5196 </li> 5197 <li class="level-2"> 5198 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 5199 title="Waterproof Vinyl Flooring" 5200 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5201 Waterproof Vinyl Flooring</a> 5202 </li> 5203 <li class="level-2"> 5204 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 5205 title="Rigid Core Vinyl Flooring" 5206 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5207 Rigid Core Vinyl Flooring</a> 5208 </li> 5209 <li class="level-2"> 5210 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 5211 title="Commercial Vinyl Flooring" 5212 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5213 Commercial Vinyl Flooring</a> 5214 </li> 5215 </ul> 5216 5217 5218 5219 5220 <li class="imgcat list-none relative" x-data="{ show: false }" > 5221 <a 5222 @click="show = !show" 5223 5224 title="Wood & Laminate Flooring" 5225 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5226 > 5227 <!-- <span class="w-6"></span> -->
5228 <span> 5229 Wood & Laminate Flooring </span> 5230 </a> 5231 5232 <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> 5233 <ul class="z-10 w-full" x-show="show"> 5234 <li class="level-2"> 5235 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 5236 title="Waterproof Laminate Flooring" 5237 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5238 Waterproof Laminate Flooring</a> 5239 </li> 5240 <li class="level-2"> 5241 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 5242 title="Laminate Flooring" 5243 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5244 Laminate Flooring</a> 5245 </li> 5246 <li class="level-2"> 5247 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 5248 title="Engineered Hardwood Flooring" 5249 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5250 Engineered Hardwood Flooring</a> 5251 </li> 5252 <li class="level-2"> 5253 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 5254 title="Oak Wood Flooring" 5255 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5256 Oak Wood Flooring</a> 5257 </li> 5258 <li class="level-2"> 5259 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 5260 title="Commercial Wood & Laminate" 5261 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5262 Commercial Wood & Laminate</a> 5263 </li> 5264 </ul> 5265 5266 5267 5268 5269 <li class="imgcat list-none relative" x-data="{ show: false }" > 5270 <a 5271 @click="show = !show" 5272 5273 title="Commercial Flooring" 5274 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5275 > 5276 <!-- <span class="w-6"></span> -->
5277 <span> 5278 Commercial Flooring </span> 5279 </a> 5280 5281 <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> 5282 <ul class="z-10 w-full" x-show="show"> 5283 <li class="level-2"> 5284 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 5285 title="Commercial Rubber Flooring" 5286 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5287 Commercial Rubber Flooring</a> 5288 </li> 5289 <li class="level-2"> 5290 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 5291 title="Commercial Garage Flooring" 5292 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5293 Commercial Garage Flooring</a> 5294 </li> 5295 <li class="level-2"> 5296 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 5297 title="Commercial Carpet Tiles" 5298 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5299 Commercial Carpet Tiles</a> 5300 </li> 5301 <li class="level-2"> 5302 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 5303 title="Commercial Vinyl Flooring" 5304 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5305 Commercial Vinyl Flooring</a> 5306 </li> 5307 <li class="level-2"> 5308 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 5309 title="Commercial Wood & Laminate Flooring" 5310 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5311 Commercial Wood & Laminate Flooring</a> 5312 </li> 5313 <li class="level-2"> 5314 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 5315 title="Gym Floor Covers | Floor Protection" 5316 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5317 Gym Floor Covers | Floor Protection</a> 5318 </li> 5319 </ul> 5320 <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> 5321 5322 5323 5324 5325 <li class="imgcat list-none relative" x-data="{ show: false }" > 5326 <a 5327 @click="show = !show" 5328 5329 title="Floors by Activity" 5330 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5331 > 5332 <!-- <span class="w-6"></span> -->
5333 <span> 5334 Floors by Activity </span> 5335 </a> 5336 5337 <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> 5338 <ul class="z-10 w-full" x-show="show"> 5339 <li class="level-2"> 5340 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 5341 title="Fitness Flooring" 5342 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5343 Fitness Flooring</a> 5344 </li> 5345 <li class="level-2"> 5346 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 5347 title="Dance Flooring | Marley Floor" 5348 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5349 Dance Flooring | Marley Floor</a> 5350 </li> 5351 <li class="level-2"> 5352 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 5353 title="Sport & Court Flooring" 5354 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5355 Sport & Court Flooring</a> 5356 </li> 5357 <li class="level-2"> 5358 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 5359 title="Martial Arts Mats " 5360 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5361 Martial Arts Mats </a> 5362 </li> 5363 <li class="level-2"> 5364 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 5365 title="Cheer Mats" 5366 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5367 Cheer Mats</a> 5368 </li> 5369 <li class="level-2"> 5370 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 5371 title="Wrestling Mats" 5372 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5373 Wrestling Mats</a> 5374 </li> 5375 </ul> 5376 <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> 5377 5378 5379 5380 5381 <li class="imgcat list-none relative" x-data="{ show: false }" > 5382 <a 5383 @click="show = !show" 5384 5385 title="Floors by Space" 5386 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5387 > 5388 <!-- <span class="w-6"></span> -->
5389 <span> 5390 Floors by Space </span> 5391 </a> 5392 5393 <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> 5394 <ul class="z-10 w-full" x-show="show"> 5395 <li class="level-2"> 5396 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 5397 title="Kitchen Flooring" 5398 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5399 Kitchen Flooring</a> 5400 </li> 5401 <li class="level-2"> 5402 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 5403 title="Bathroom Flooring" 5404 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5405 Bathroom Flooring</a> 5406 </li> 5407 <li class="level-2"> 5408 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 5409 title="Commercial Flooring" 5410 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5411 Commercial Flooring</a> 5412 </li> 5413 <li class="level-2"> 5414 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 5415 title="Gym Flooring" 5416 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5417 Gym Flooring</a> 5418 </li> 5419 <li class="level-2"> 5420 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 5421 title="Garage Flooring" 5422 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5423 Garage Flooring</a> 5424 </li> 5425 <li class="level-2"> 5426 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 5427 title="Outdoor Flooring" 5428 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5429 Outdoor Flooring</a> 5430 </li> 5431 </ul> 5432 <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> 5433 5434 5435 5436 5437 <li class="imgcat list-none relative" x-data="{ show: false }" > 5438 <a 5439 @click="show = !show" 5440 5441 title="Underlayment & Flooring Accessories" 5442 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5443 > 5444 <!-- <span class="w-6"></span> -->
5445 <span> 5446 Underlayment & Flooring Accessories </span> 5447 </a> 5448 5449 <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> 5450 <ul class="z-10 w-full" x-show="show"> 5451 <li class="level-2"> 5452 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 5453 title="Flooring Adhesives & Glue" 5454 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5455 Flooring Adhesives & Glue</a> 5456 </li> 5457 <li class="level-2"> 5458 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 5459 title="Floor and Mat Tape" 5460 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5461 Floor and Mat Tape</a> 5462 </li> 5463 <li class="level-2"> 5464 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 5465 title="Installation Accessories" 5466 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5467 Installation Accessories</a> 5468 </li> 5469 <li class="level-2"> 5470 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 5471 title="Floor Trims & Moldings" 5472 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5473 Floor Trims & Moldings</a> 5474 </li> 5475 <li class="level-2"> 5476 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 5477 title="Flooring Underlayment" 5478 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5479 Flooring Underlayment</a> 5480 </li> 5481 <li class="level-2"> 5482 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 5483 title="Flooring Cleaners" 5484 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5485 Flooring Cleaners</a> 5486 </li> 5487 </ul> 5488 <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> 5489 5490 5491 5492 5493 <li class="imgcat list-none relative" x-data="{ show: false }" > 5494 <a 5495 @click="show = !show" 5496 5497 title="Specials" 5498 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 5499 > 5500 <!-- <span class="w-6"></span> -->
5501 <span> 5502 Specials </span> 5503 </a> 5504 5505 <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> 5506 <ul class="z-10 w-full" x-show="show"> 5507 <li class="level-2"> 5508 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 5509 title="Flooring Deals" 5510 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5511 Flooring Deals</a> 5512 </li> 5513 <li class="level-2"> 5514 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 5515 title="American Made" 5516 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5517 American Made</a> 5518 </li> 5519 <li class="level-2"> 5520 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 5521 title="Quick Ship" 5522 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5523 Quick Ship</a> 5524 </li> 5525 <li class="level-2"> 5526 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 5527 title="New Arrivals" 5528 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 5529 New Arrivals</a> 5530 </li> 5531 </ul> 5532 5533 5534 </div> 5535 5536 5537 </div> 5538 <div class="menu_static_links"> 5539 <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> 5540<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 5541<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 5542</ul></div></div></div> </div> 5543 </div> 5544 </nav> 5545 </div> 5546</div>
5547<script> 5548 'use strict'; 5549 5550 const initMenuMobile_6ac143420e7c9 = () => { 5551 return { 5552 mobilePanelActiveId: null, 5553 open: false, 5554 setActiveMenu(menuNode) { 5555 Array.from(menuNode.querySelectorAll('a')).filter(link => { 5556 return link.href === window.location.href.split('?')[0]; 5557 }).map(item => { 5558 item.classList.add('underline'); 5559 item.closest('div.level-0') && 5560 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 5561 }); 5562 } 5563 } 5564 } 5565 5566 window.addEventListener("scroll", function() { 5567 successMsgSticky2(); 5568 }); 5569 5570 // sticky header 5571 function successMsgSticky2() { 5572 if (window.innerWidth < 767) { 5573 var headerHeight = document.querySelector('.page-header .panel.wrapper').offsetHeight; 5574 var headerMainHeight = document.getElementById('header').offsetHeight; 5575 var scrollTop = window.scrollY; 5576 5577 if (scrollTop >= headerHeight) { 5578 document.body.classList.add('scroll-reached-hHgt'); 5579 document.body.style.paddingTop = headerMainHeight + 'px'; 5580 } else { 5581 document.body.classList.remove('scroll-reached-hHgt'); 5582 document.body.style.paddingTop = '0'; 5583 } 5584 } 5585 } 5586 5587 window.addEventListener("load", function() { 5588 successMsgSticky2(); 5589 }); 5590 5591</script>
5591 5592 5593<div x-data="initMenuDesktop_6ac1434217b5f()" 5594 class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden xl:flex desktop__menu" 5595> 5596 <!-- desktop --> 5597 <div @load.window="setActiveMenu($root)" 5598 class="justify-between items-center mx-auto w-full max-w-7xl pl-2" 5599 > 5600 <nav 5601 class="flex flex-wrap" 5602 > 5603 <div class="level-0 flex py-2 items-center border-transparent transition transition-colors duration-500 group megamenu_items" :class="{ 'block' : open}" 5604 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 5605 @mouseenter="desktopMegaMenuShow = true" @mouseleave="desktopMegaMenuShow = false" 5606 x-data="{ desktopMegaMenuShow: false }" 5607 > 5608 <!-- <a href="https://www.flooringinc.com/shop.html" --> 5609 <a 5610 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 5611 title="Flooring By Category" 5612 class="level-0 block p-2 text-base font-medium text-black whitespace-nowrap cursor-pointer megamenu_items_link"> 5613 <span>Flooring By Category</span> 5614 <span class="inline items-center releat"> 5615 <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"> 5616 <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"/> 5617<title>chevron-down</title></svg> 5618 </span> 5619 </a> 5620 <template x-if="desktopMegaMenuShow"> 5621 <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" 5622 style="display:none;" 5623 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 5624 > 5625 <div class="flex justify-between mt-0 mb-0 sub-megamenu"> 5626 <div class="mx-auto w-full"> 5627 <ul class="grid flex-1 w-full gap-y-0 gap-x-0 py-4 px-5 relative"> 5628 5629 <li :class="{ 'active': show }" class="level-1 level1 display-first" x-data="{ show: true }" 5630 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 5631 > 5632 <a 5633 title="Rubber Flooring" 5634 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 5635 5636 > 5637 Rubber Flooring 5638 <span class="inline items-center rotate-180 absolute"> 5639 <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"> 5640 <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"/> 5641<title>chevron-down</title></svg> 5642 </span> 5643 </a> 5644 5645 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 5646 <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> 5647 5648 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
5649 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Rubber Flooring</span> 5650 5651 <li class="level-2 w-4/12 pr-6 pb-6"> 5652 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 5653 title="All Rubber Flooring" 5654 class="level-2 block"> 5655 <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> 5656 5657 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Rubber Flooring</span></a> 5658 </li> 5659 5660 <li class="level-2 w-4/12 pr-6 pb-6"> 5661 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 5662 title="Rubber Flooring Rolls" 5663 class="level-2 block"> 5664 <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> 5665 5666 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Flooring Rolls</span></a> 5667 </li> 5668 5669 <li class="level-2 w-4/12 pr-6 pb-6"> 5670 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 5671 title="Rubber Floor Tiles" 5672 class="level-2 block"> 5673 <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> 5674
5675 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Floor Tiles</span></a> 5676 </li> 5677 5678 <li class="level-2 w-4/12 pr-6 pb-6"> 5679 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 5680 title="Rubber Mats" 5681 class="level-2 block"> 5682 <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> 5683 5684 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Mats</span></a> 5685 </li> 5686 5687 <li class="level-2 w-4/12 pr-6 pb-6"> 5688 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 5689 title="Playground Flooring" 5690 class="level-2 block"> 5691 <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> 5692 5693 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 5694 </li> 5695 5696 <li class="level-2 w-4/12 pr-6 pb-6"> 5697 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 5698 title="Outdoor Rubber Flooring" 5699 class="level-2 block"> 5700 <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> 5701
5702 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Rubber Flooring</span></a> 5703 </li> 5704 5705 5706 <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> 5707 5708 5709 </ul> 5710 </li> 5711 5712 5713 5714 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 5715 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 5716 > 5717 <a 5718 title="Garage Flooring" 5719 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 5720 5721 > 5722 Garage Flooring 5723 <span class="inline items-center rotate-180 absolute"> 5724 <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"> 5725 <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"/> 5726<title>chevron-down</title></svg> 5727 </span> 5728 </a> 5729 5730 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 5731 <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> 5732 5733 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
5734 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Garage Flooring</span> 5735 5736 <li class="level-2 w-4/12 pr-6 pb-6"> 5737 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 5738 title="All Garage Flooring" 5739 class="level-2 block"> 5740 <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> 5741 5742 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Garage Flooring</span></a> 5743 </li> 5744 5745 <li class="level-2 w-4/12 pr-6 pb-6"> 5746 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 5747 title="Garage Flooring Rolls" 5748 class="level-2 block"> 5749 <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> 5750 5751 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring Rolls</span></a> 5752 </li> 5753 5754 <li class="level-2 w-4/12 pr-6 pb-6"> 5755 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 5756 title="Garage Floor Tiles" 5757 class="level-2 block"> 5758 <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> 5759
5760 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Tiles</span></a> 5761 </li> 5762 5763 <li class="level-2 w-4/12 pr-6 pb-6"> 5764 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 5765 title="Garage Gym Flooring" 5766 class="level-2 block"> 5767 <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> 5768 5769 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Gym Flooring</span></a> 5770 </li> 5771 5772 <li class="level-2 w-4/12 pr-6 pb-6"> 5773 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 5774 title="Garage Floor Epoxy" 5775 class="level-2 block"> 5776 <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> 5777 5778 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Epoxy</span></a> 5779 </li> 5780 5781 <li class="level-2 w-4/12 pr-6 pb-6"> 5782 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 5783 title="Trailer Flooring" 5784 class="level-2 block"> 5785 <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> 5786
5787 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trailer Flooring</span></a> 5788 </li> 5789 5790 5791 <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> 5792 5793 5794 </ul> 5795 </li> 5796 5797 5798 5799 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 5800 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 5801 > 5802 <a 5803 title="Dance Flooring" 5804 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 5805 5806 > 5807 Dance Flooring 5808 <span class="inline items-center rotate-180 absolute"> 5809 <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"> 5810 <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"/> 5811<title>chevron-down</title></svg> 5812 </span> 5813 </a> 5814 5815 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 5816 <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> 5817 5818 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
5819 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Dance Flooring</span> 5820 5821 <li class="level-2 w-4/12 pr-6 pb-6"> 5822 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 5823 title="Marley Floor Rolls" 5824 class="level-2 block"> 5825 <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> 5826 5827 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Marley Floor Rolls</span></a> 5828 </li> 5829 5830 <li class="level-2 w-4/12 pr-6 pb-6"> 5831 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 5832 title="Dance Floor Tiles" 5833 class="level-2 block"> 5834 <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> 5835 5836 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Floor Tiles</span></a> 5837 </li> 5838 5839 <li class="level-2 w-4/12 pr-6 pb-6"> 5840 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 5841 title="Portable Dance Floors & Kits" 5842 class="level-2 block"> 5843 <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> 5844
5845 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Portable Dance Floors & Kits</span></a> 5846 </li> 5847 5848 <li class="level-2 w-4/12 pr-6 pb-6"> 5849 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 5850 title="Subflooring" 5851 class="level-2 block"> 5852 <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> 5853 5854 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Subflooring</span></a> 5855 </li> 5856 5857 <li class="level-2 w-4/12 pr-6 pb-6"> 5858 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 5859 title="Adhesives, Cleaners & Accessories" 5860 class="level-2 block"> 5861 <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> 5862 5863 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Adhesives, Cleaners & Accessories</span></a> 5864 </li> 5865 5866 <li class="level-2 w-4/12 pr-6 pb-6"> 5867 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 5868 title="All Dance Flooring" 5869 class="level-2 block"> 5870 <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> 5871
5872 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Dance Flooring</span></a> 5873 </li> 5874 5875 5876 <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> 5877 5878 5879 </ul> 5880 </li> 5881 5882 5883 5884 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 5885 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 5886 > 5887 <a 5888 title="Foam Flooring" 5889 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 5890 5891 > 5892 Foam Flooring 5893 <span class="inline items-center rotate-180 absolute"> 5894 <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"> 5895 <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"/> 5896<title>chevron-down</title></svg> 5897 </span> 5898 </a> 5899 5900 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 5901 <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> 5902 5903 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
5904 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Foam Flooring</span> 5905 5906 <li class="level-2 w-4/12 pr-6 pb-6"> 5907 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 5908 title="Foam Floor Tiles" 5909 class="level-2 block"> 5910 <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> 5911 5912 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Foam Floor Tiles</span></a> 5913 </li> 5914 5915 <li class="level-2 w-4/12 pr-6 pb-6"> 5916 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 5917 title="Kids & Baby Play Mats" 5918 class="level-2 block"> 5919 <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> 5920 5921 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kids & Baby Play Mats</span></a> 5922 </li> 5923 5924 <li class="level-2 w-4/12 pr-6 pb-6"> 5925 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 5926 title="Gymnastics Mats " 5927 class="level-2 block"> 5928 <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> 5929
5930 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gymnastics Mats </span></a> 5931 </li> 5932 5933 <li class="level-2 w-4/12 pr-6 pb-6"> 5934 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 5935 title="Wrestling Mats" 5936 class="level-2 block"> 5937 <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> 5938 5939 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 5940 </li> 5941 5942 <li class="level-2 w-4/12 pr-6 pb-6"> 5943 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 5944 title="Martial Arts Mats " 5945 class="level-2 block"> 5946 <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> 5947 5948 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 5949 </li> 5950 5951 <li class="level-2 w-4/12 pr-6 pb-6"> 5952 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 5953 title="Trade Show Flooring" 5954 class="level-2 block"> 5955 <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> 5956
5957 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trade Show Flooring</span></a> 5958 </li> 5959 5960 5961 <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> 5962 5963 5964 </ul> 5965 </li> 5966 5967 5968 5969 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 5970 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 5971 > 5972 <a 5973 title="Outdoor Flooring" 5974 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 5975 5976 > 5977 Outdoor Flooring 5978 <span class="inline items-center rotate-180 absolute"> 5979 <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"> 5980 <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"/> 5981<title>chevron-down</title></svg> 5982 </span> 5983 </a> 5984 5985 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 5986 <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.
5986webp"><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> 5987 5988 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 5989 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Outdoor Flooring</span> 5990 5991 <li class="level-2 w-4/12 pr-6 pb-6"> 5992 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 5993 title="Playground Flooring" 5994 class="level-2 block"> 5995 <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> 5996 5997 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 5998 </li> 5999 6000 <li class="level-2 w-4/12 pr-6 pb-6"> 6001 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 6002 title="Sports Flooring & Court Tiles" 6003 class="level-2 block"> 6004 <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> 6005
6006 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sports Flooring & Court Tiles</span></a> 6007 </li> 6008 6009 <li class="level-2 w-4/12 pr-6 pb-6"> 6010 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 6011 title="Turf & Artificial Grass" 6012 class="level-2 block"> 6013 <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> 6014 6015 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf & Artificial Grass</span></a> 6016 </li> 6017 6018 <li class="level-2 w-4/12 pr-6 pb-6"> 6019 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 6020 title="Composite Decking" 6021 class="level-2 block"> 6022 <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> 6023 6024 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Composite Decking</span></a> 6025 </li> 6026 6027 <li class="level-2 w-4/12 pr-6 pb-6"> 6028 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 6029 title="Rooftop Deck Flooring" 6030 class="level-2 block"> 6031 <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> 6032
6033 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rooftop Deck Flooring</span></a> 6034 </li> 6035 6036 <li class="level-2 w-4/12 pr-6 pb-6"> 6037 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 6038 title="Drainage Tile & Mats" 6039 class="level-2 block"> 6040 <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> 6041 6042 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Drainage Tile & Mats</span></a> 6043 </li> 6044 6045 6046 <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> 6047 6048 6049 </ul> 6050 </li> 6051 6052 6053 6054 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6055 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6056 > 6057 <a 6058 title="Turf & Artificial Grass" 6059 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6060 6061 > 6062 Turf & Artificial Grass 6063 <span class="inline items-center rotate-180 absolute"> 6064 <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"> 6065 <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"/> 6066<title>chevron-down</title></svg> 6067 </span> 6068 </a> 6069 6070 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
6071 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Turf & Artificial Grass</span> 6072 6073 <li class="level-2 w-4/12 pr-6 pb-6"> 6074 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 6075 title="Sport & Gym Turf" 6076 class="level-2 block"> 6077 <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> 6078 6079 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Gym Turf</span></a> 6080 </li> 6081 6082 <li class="level-2 w-4/12 pr-6 pb-6"> 6083 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 6084 title="Landscape Turf" 6085 class="level-2 block"> 6086 <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> 6087 6088 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Landscape Turf</span></a> 6089 </li> 6090 6091 <li class="level-2 w-4/12 pr-6 pb-6"> 6092 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 6093 title="Pet Turf" 6094 class="level-2 block"> 6095 <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> 6096
6097 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Pet Turf</span></a> 6098 </li> 6099 6100 <li class="level-2 w-4/12 pr-6 pb-6"> 6101 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 6102 title="Golf & Putting Green Turf" 6103 class="level-2 block"> 6104 <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> 6105 6106 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Golf & Putting Green Turf</span></a> 6107 </li> 6108 6109 <li class="level-2 w-4/12 pr-6 pb-6"> 6110 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 6111 title="Turf Accessories" 6112 class="level-2 block"> 6113 <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> 6114 6115 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf Accessories</span></a> 6116 </li> 6117 6118 <li class="level-2 w-4/12 pr-6 pb-6"> 6119 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 6120 title="All Turf & Artificial Grass" 6121 class="level-2 block"> 6122 <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> 6123
6124 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Turf & Artificial Grass</span></a> 6125 </li> 6126 6127 6128 <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> 6129 6130 6131 </ul> 6132 </li> 6133 6134 6135 6136 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6137 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6138 > 6139 <a 6140 title="Carpet Tiles & Rolls" 6141 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6142 6143 > 6144 Carpet Tiles & Rolls 6145 <span class="inline items-center rotate-180 absolute"> 6146 <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"> 6147 <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"/> 6148<title>chevron-down</title></svg> 6149 </span> 6150 </a> 6151 6152 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 6153 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Carpet Tiles & Rolls</span> 6154 6155 <li class="level-2 w-4/12 pr-6 pb-6"> 6156 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 6157 title="Carpet Tiles" 6158 class="level-2 block"> 6159 <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> 6160
6161 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Tiles</span></a> 6162 </li> 6163 6164 <li class="level-2 w-4/12 pr-6 pb-6"> 6165 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 6166 title="Carpet Rolls" 6167 class="level-2 block"> 6168 <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> 6169 6170 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Rolls</span></a> 6171 </li> 6172 6173 <li class="level-2 w-4/12 pr-6 pb-6"> 6174 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 6175 title="Home Theater Carpet" 6176 class="level-2 block"> 6177 <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> 6178 6179 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Home Theater Carpet</span></a> 6180 </li> 6181 6182 <li class="level-2 w-4/12 pr-6 pb-6"> 6183 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 6184 title="Peel and Stick Carpet Tiles" 6185 class="level-2 block"> 6186 <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> 6187
6188 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Peel and Stick Carpet Tiles</span></a> 6189 </li> 6190 6191 <li class="level-2 w-4/12 pr-6 pb-6"> 6192 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 6193 title="Outdoor Carpet" 6194 class="level-2 block"> 6195 <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> 6196 6197 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Carpet</span></a> 6198 </li> 6199 6200 <li class="level-2 w-4/12 pr-6 pb-6"> 6201 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 6202 title="Waterproof Carpet" 6203 class="level-2 block"> 6204 <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> 6205 6206 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Carpet</span></a> 6207 </li> 6208 6209 6210 <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> 6211 6212 6213 </ul> 6214 </li> 6215 6216 6217 6218 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6219 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6220 > 6221 <a 6222 title="Vinyl Flooring" 6223 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6224 6225 > 6226 Vinyl Flooring 6227 <sp
6227an class="inline items-center rotate-180 absolute"> 6228 <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"> 6229 <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"/> 6230<title>chevron-down</title></svg> 6231 </span> 6232 </a> 6233 6234 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 6235 <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> 6236 6237 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
6238 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Vinyl Flooring</span> 6239 6240 <li class="level-2 w-4/12 pr-6 pb-6"> 6241 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 6242 title="Vinyl Sheet Flooring" 6243 class="level-2 block"> 6244 <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> 6245 6246 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Sheet Flooring</span></a> 6247 </li> 6248 6249 <li class="level-2 w-4/12 pr-6 pb-6"> 6250 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 6251 title="Vinyl Tiles & Planks" 6252 class="level-2 block"> 6253 <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> 6254 6255 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Tiles & Planks</span></a> 6256 </li> 6257 6258 <li class="level-2 w-4/12 pr-6 pb-6"> 6259 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 6260 title="Waterproof Vinyl Flooring" 6261 class="level-2 block"> 6262 <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> 6263
6264 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Vinyl Flooring</span></a> 6265 </li> 6266 6267 <li class="level-2 w-4/12 pr-6 pb-6"> 6268 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 6269 title="Rigid Core Vinyl Flooring" 6270 class="level-2 block"> 6271 <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> 6272 6273 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rigid Core Vinyl Flooring</span></a> 6274 </li> 6275 6276 <li class="level-2 w-4/12 pr-6 pb-6"> 6277 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 6278 title="Commercial Vinyl Flooring" 6279 class="level-2 block"> 6280 <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> 6281 6282 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 6283 </li> 6284 6285 6286 <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> 6287 6288 6289 </ul> 6290 </li> 6291 6292 6293 6294 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6295 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6296 > 6297 <a 6298 title="Wood & Laminate Flooring" 6299 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6300 6301 > 6302 Wood & Laminate Flooring 6303 <sp
6303an class="inline items-center rotate-180 absolute"> 6304 <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"> 6305 <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"/> 6306<title>chevron-down</title></svg> 6307 </span> 6308 </a> 6309 6310 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 6311 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Wood & Laminate Flooring</span> 6312 6313 <li class="level-2 w-4/12 pr-6 pb-6"> 6314 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 6315 title="Waterproof Laminate Flooring" 6316 class="level-2 block"> 6317 <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> 6318 6319 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Laminate Flooring</span></a> 6320 </li> 6321 6322 <li class="level-2 w-4/12 pr-6 pb-6"> 6323 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 6324 title="Laminate Flooring" 6325 class="level-2 block"> 6326 <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> 6327 6328 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Laminate Flooring</span></a> 6329 </li> 6330 6331 <li class="level-2 w-4/12 pr-6 pb-6"> 6332 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 6333 title="Engineered Hardwood Flooring" 6334 class="level-2 block"> 6335 <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> 6336
6337 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Engineered Hardwood Flooring</span></a> 6338 </li> 6339 6340 <li class="level-2 w-4/12 pr-6 pb-6"> 6341 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 6342 title="Oak Wood Flooring" 6343 class="level-2 block"> 6344 <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> 6345 6346 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Oak Wood Flooring</span></a> 6347 </li> 6348 6349 <li class="level-2 w-4/12 pr-6 pb-6"> 6350 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 6351 title="Commercial Wood & Laminate" 6352 class="level-2 block"> 6353 <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> 6354 6355 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate</span></a> 6356 </li> 6357 6358 6359 <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> 6360 6361 6362 </ul> 6363 </li> 6364 6365 6366 6367 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6368 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6369 > 6370 <a 6371 title="Commercial Flooring" 6372 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6373 6374 > 6375 Commercial Flooring 6376 <sp
6376an class="inline items-center rotate-180 absolute"> 6377 <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"> 6378 <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"/> 6379<title>chevron-down</title></svg> 6380 </span> 6381 </a> 6382 6383 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 6384 <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> 6385 6386 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
6387 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Commercial Flooring</span> 6388 6389 <li class="level-2 w-4/12 pr-6 pb-6"> 6390 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 6391 title="Commercial Rubber Flooring" 6392 class="level-2 block"> 6393 <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> 6394 6395 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Rubber Flooring</span></a> 6396 </li> 6397 6398 <li class="level-2 w-4/12 pr-6 pb-6"> 6399 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 6400 title="Commercial Garage Flooring" 6401 class="level-2 block"> 6402 <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> 6403 6404 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Garage Flooring</span></a> 6405 </li> 6406 6407 <li class="level-2 w-4/12 pr-6 pb-6"> 6408 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 6409 title="Commercial Carpet Tiles" 6410 class="level-2 block"> 6411 <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> 6412
6413 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Carpet Tiles</span></a> 6414 </li> 6415 6416 <li class="level-2 w-4/12 pr-6 pb-6"> 6417 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 6418 title="Commercial Vinyl Flooring" 6419 class="level-2 block"> 6420 <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> 6421 6422 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 6423 </li> 6424 6425 <li class="level-2 w-4/12 pr-6 pb-6"> 6426 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 6427 title="Commercial Wood & Laminate Flooring" 6428 class="level-2 block"> 6429 <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> 6430 6431 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate Flooring</span></a> 6432 </li> 6433 6434 <li class="level-2 w-4/12 pr-6 pb-6"> 6435 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 6436 title="Gym Floor Covers | Floor Protection" 6437 class="level-2 block"> 6438 <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> 6439
6440 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Floor Covers | Floor Protection</span></a> 6441 </li> 6442 6443 6444 <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> 6445 6446 6447 </ul> 6448 </li> 6449 6450 6451 6452 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6453 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6454 > 6455 <a 6456 title="Floors by Activity" 6457 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6458 6459 > 6460 Floors by Activity 6461 <span class="inline items-center rotate-180 absolute"> 6462 <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"> 6463 <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"/> 6464<title>chevron-down</title></svg> 6465 </span> 6466 </a> 6467 6468 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 6469 <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> 6470 6471 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
6472 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Activity</span> 6473 6474 <li class="level-2 w-4/12 pr-6 pb-6"> 6475 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 6476 title="Fitness Flooring" 6477 class="level-2 block"> 6478 <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> 6479 6480 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Fitness Flooring</span></a> 6481 </li> 6482 6483 <li class="level-2 w-4/12 pr-6 pb-6"> 6484 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 6485 title="Dance Flooring | Marley Floor" 6486 class="level-2 block"> 6487 <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> 6488 6489 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Flooring | Marley Floor</span></a> 6490 </li> 6491 6492 <li class="level-2 w-4/12 pr-6 pb-6"> 6493 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 6494 title="Sport & Court Flooring" 6495 class="level-2 block"> 6496 <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> 6497
6498 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Court Flooring</span></a> 6499 </li> 6500 6501 <li class="level-2 w-4/12 pr-6 pb-6"> 6502 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 6503 title="Martial Arts Mats " 6504 class="level-2 block"> 6505 <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> 6506 6507 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 6508 </li> 6509 6510 <li class="level-2 w-4/12 pr-6 pb-6"> 6511 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 6512 title="Cheer Mats" 6513 class="level-2 block"> 6514 <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> 6515 6516 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Cheer Mats</span></a> 6517 </li> 6518 6519 <li class="level-2 w-4/12 pr-6 pb-6"> 6520 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 6521 title="Wrestling Mats" 6522 class="level-2 block"> 6523 <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> 6524
6525 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 6526 </li> 6527 6528 6529 <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> 6530 6531 6532 </ul> 6533 </li> 6534 6535 6536 6537 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6538 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6539 > 6540 <a 6541 title="Floors by Space" 6542 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6543 6544 > 6545 Floors by Space 6546 <span class="inline items-center rotate-180 absolute"> 6547 <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"> 6548 <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"/> 6549<title>chevron-down</title></svg> 6550 </span> 6551 </a> 6552 6553 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 6554 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Space</span> 6555 6556 <li class="level-2 w-4/12 pr-6 pb-6"> 6557 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 6558 title="Kitchen Flooring" 6559 class="level-2 block"> 6560 <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> 6561 6562 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kitchen Flooring</span></a> 6563 </li> 6564 6565 <li class="level-2 w-4/12 pr-6 pb-6"> 6566 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 6567 title="Bathroom Flooring" 6568 class="level-2 block"> 6569 <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> 6570
6571 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Bathroom Flooring</span></a> 6572 </li> 6573 6574 <li class="level-2 w-4/12 pr-6 pb-6"> 6575 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 6576 title="Commercial Flooring" 6577 class="level-2 block"> 6578 <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> 6579 6580 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Flooring</span></a> 6581 </li> 6582 6583 <li class="level-2 w-4/12 pr-6 pb-6"> 6584 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 6585 title="Gym Flooring" 6586 class="level-2 block"> 6587 <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> 6588 6589 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Flooring</span></a> 6590 </li> 6591 6592 <li class="level-2 w-4/12 pr-6 pb-6"> 6593 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 6594 title="Garage Flooring" 6595 class="level-2 block"> 6596 <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> 6597
6598 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring</span></a> 6599 </li> 6600 6601 <li class="level-2 w-4/12 pr-6 pb-6"> 6602 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 6603 title="Outdoor Flooring" 6604 class="level-2 block"> 6605 <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> 6606 6607 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Flooring</span></a> 6608 </li> 6609 6610 6611 <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> 6612 6613 6614 </ul> 6615 </li> 6616 6617 6618 6619 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6620 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6621 > 6622 <a 6623 title="Underlayment & Flooring Accessories" 6624 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6625 6626 > 6627 Underlayment & Flooring Accessories 6628 <span class="inline items-center rotate-180 absolute"> 6629 <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"> 6630 <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"/> 6631<title>chevron-down</title></svg> 6632 </span> 6633 </a> 6634 6635 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 6636 <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> 6637 6638 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
6639 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Underlayment & Flooring Accessories</span> 6640 6641 <li class="level-2 w-4/12 pr-6 pb-6"> 6642 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 6643 title="Flooring Adhesives & Glue" 6644 class="level-2 block"> 6645 <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> 6646 6647 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Adhesives & Glue</span></a> 6648 </li> 6649 6650 <li class="level-2 w-4/12 pr-6 pb-6"> 6651 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 6652 title="Floor and Mat Tape" 6653 class="level-2 block"> 6654 <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> 6655 6656 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor and Mat Tape</span></a> 6657 </li> 6658 6659 <li class="level-2 w-4/12 pr-6 pb-6"> 6660 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 6661 title="Installation Accessories" 6662 class="level-2 block"> 6663 <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> 6664
6665 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Installation Accessories</span></a> 6666 </li> 6667 6668 <li class="level-2 w-4/12 pr-6 pb-6"> 6669 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 6670 title="Floor Trims & Moldings" 6671 class="level-2 block"> 6672 <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> 6673 6674 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor Trims & Moldings</span></a> 6675 </li> 6676 6677 <li class="level-2 w-4/12 pr-6 pb-6"> 6678 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 6679 title="Flooring Underlayment" 6680 class="level-2 block"> 6681 <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> 6682 6683 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Underlayment</span></a> 6684 </li> 6685 6686 <li class="level-2 w-4/12 pr-6 pb-6"> 6687 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 6688 title="Flooring Cleaners" 6689 class="level-2 block"> 6690 <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> 6691
6692 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Cleaners</span></a> 6693 </li> 6694 6695 6696 <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> 6697 6698 6699 </ul> 6700 </li> 6701 6702 6703 6704 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 6705 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 6706 > 6707 <a 6708 title="Specials" 6709 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 6710 6711 > 6712 Specials 6713 <span class="inline items-center rotate-180 absolute"> 6714 <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"> 6715 <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"/> 6716<title>chevron-down</title></svg> 6717 </span> 6718 </a> 6719 6720 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 6721 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Specials</span> 6722 6723 <li class="level-2 w-4/12 pr-6 pb-6"> 6724 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 6725 title="Flooring Deals" 6726 class="level-2 block"> 6727 <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> 6728 6729 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Deals</span></a> 6730 </li> 6731 6732 <li class="level-2 w-4/12 pr-6 pb-6"> 6733 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 6734 title="American Made" 6735 class="level-2 block"> 6736 <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> 6737
6738 <span class="block text-sm font-medium no-underline text-darkblack pr-4">American Made</span></a> 6739 </li> 6740 6741 <li class="level-2 w-4/12 pr-6 pb-6"> 6742 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 6743 title="Quick Ship" 6744 class="level-2 block"> 6745 <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> 6746 6747 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Quick Ship</span></a> 6748 </li> 6749 6750 <li class="level-2 w-4/12 pr-6 pb-6"> 6751 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 6752 title="New Arrivals" 6753 class="level-2 block"> 6754 <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> 6755 6756 <span class="block text-sm font-medium no-underline text-darkblack pr-4">New Arrivals</span></a> 6757 </li> 6758 6759 6760 <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> 6761 6762 6763 </ul> 6764 </li> 6765 6766 6767 6768 6769 <!--<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>-->
6769 6770 6771 </ul> 6772 </div> 6773 6774 </div> 6775 </div> 6776 </template> 6777 </div> 6778 <div class="menu_static_links"> 6779 <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> 6780<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 6781<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 6782</ul></div></div></div> </div> 6783 </nav> 6784 </div> 6785 6786</div>
6787<script> 6788 'use strict'; 6789 6790 const initMenuDesktop_6ac1434217b5f = () => { 6791 return { 6792 hoverTopPosition: '100%', 6793 setActiveMenu(menuNode) { 6794 Array.from(menuNode.querySelectorAll('a')).filter(link => { 6795 return link.href === window.location.href.split('?')[0]; 6796 }).map(item => { 6797 if (!item.classList.contains('level-0')) { 6798 item.classList.add('underline'); 6799 } 6800 item.closest('div.level-0') && 6801 item.closest('div.level-0').classList.add('border-secondary'); 6802 }); 6803 } 6804 } 6805 } 6806</script>
vendor: 1 bytes, line 6806
6806
6807<script> 6808 // Function to remove 'display-first' class from other list items 6809 function removeDisplayFirst() { 6810 var listItems = document.querySelectorAll('.level1'); 6811 listItems.forEach(function(item) { 6812 if (item.id !== this.id) { 6813 item.classList.remove('display-first'); 6814 } 6815 }); 6816 } 6817</script>
6817 6818 <!--Search--> 6819 <div class="w-full" 6820 id="search-content" 6821 :class="{ 'block': searchOpen}" 6822 @click.outside="searchOpen = false" 6823 > 6824 6825<div class="py-0 px-0 pl-5 mx-auto text-black" x-data="initMirasvitSearch()" @click.away="closeSearch"> 6826 <form class="form minisearch relative" id="search_mini_form" action="https://www.flooringinc.com/catalogsearch/result/" method="get" autocomplete="off"> 6827 <label class="hidden" for="search" data-role="minisearch-label"> 6828 <span>Search</span> 6829 </label> 6830 <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 6831 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)"/> 6832 <button class="action search absolute">btn</button> 6833 </form> 6834 6835 <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="search_box transition appearance-none absolute"> 6836 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 6837 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 6838 x-show="isLoading" 6839 x-transition:enter="ease-out duration-200" 6840 x-transition:enter-start="opacity-0" 6841 x-transition:enter-end="opacity-100" 6842 x-transition:leave="ease-in duration-200" 6843 x-transition:leave-start="opacity-100" 6844 x-transition:leave-end="opacity-0"> 6845 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 6846<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 6847 <g fill="none" fill-rule="evenodd"> 6848 <g transform="translate(1 1)" stroke-width="2"> 6849 <circle cx="5" cy="50" r="5"> 6850 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 6851 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 6852 </circle> 6853 <circle cx="27" cy="5" r="5"> 6854 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 6855 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 6856 </circle> 6857 <circle cx="49" cy="50" r="5"> 6858 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 6859 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 6860 </circle> 6861 </g> 6862 </g> 6863<title>loader</title></svg> 6864 <div class="ml-10 text-primary text-xl"> 6865 Loading... </div> 6866</div> 6867 6868 <template x-if="hotSearch"> 6869 <div class="hotSearch"> 6870 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 6871 Hot Searches </p> 6872 <div class="my-3 flex flex-wrap"> 6873 </div> 6874 </div> 6875 </template> 6876 6877 <template x-if="searchResults"> 6878 <div class="search_box_content w-full flex flex-wrap "> 6879 <div class="search_box_left relative"> 6880 <p class="product_title text-size20 font-medium text-black"> 6881 Top Results <template x-if="searchProducts != ''"> 6882 <small class="text-size16 font-medium text-black hidden">(<span x-html="searchProductsTotal"></span>)</small> 6883 </template> 6884 </p> 6885 <div class="viewAll absolute right-0"> 6886 <div> 6887 <a x-bind:href="numberResultsUrl"> 6888 <p class="text-size14 font-normal text-black underline number-results" x-html="numberResults"></p> 6889 </a> 6890 </div> 6891 </div> 6892 <div class="search_box_left_content lg:grid-cols-6"> 6893 <template x-for="item in searchProducts"> 6894 <div class="search_products flex"> 6895 <a x-bind:href="`${item.url}`" class=""> 6896 <div class="w-full product-image"> 6897 <img x-bind:src="`${item.imageUrl}`" width="275" height="182" class="w-full"/> 6898 </div> 6899 </a> 6900 <div class="w-full product-content"> 6901 <a x-bind:href="`${item.url}`" class=""><h4 class="product-name text-size14 font-medium text-black" x-html="item.name"></h4></a> 6902 <template x-if="item.rating > 0"> 6903 <div class="ratings flex item-center"> 6904 <div x-html="item.rating"></div>(<span x-html="item.reviews"></span>) 6905 </div> 6906 </template> 6907 <template x-if="item.orderFreeSample > 0"> 6908 <div x-cloak x-data="{showModal: false, htmlContent: '',pid: item.proId }"> 6909 <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> 6910 <div class="modal order-free-sample-popup z-50" x-show="showModal"> 6911 <div class="modal-overlay" x-on:click="showModal = false"></div> 6912 <button class="closemodal" type="button" x-on:click="showModal = false">Close X</button> 6913 <div class="modal-content"> 6914 <div x-html="htmlContent" :class="'htmlcontent' + item.proId"></div> 6915 </div> 6916 </div> 6917 </div> 6918 </template> 6919 <!-- <p class="mt-2 text-gray-600 text-xs truncate" x-html="item.description"></p> --> 6920 <template x-if="item.colorCount > 0"> 6921 <p class="text-size13 font-normal text-black truncate"> 6922 Available in <span x-html="item.colorCount"></span> colors 6923 </p> 6924 </template> 6925 <!--<div class="truncate-content"> 6926 <p class="text-size13 font-normal text-black truncate" x-html="item.dealOfTheMonth"></p> 6927 <p class="text-size13 font-normal text-black truncate" x-html="item.freeShipping"></p> 6928 <p class="text-size13 font-normal text-black truncate" x-html="item.shipNextDay"></p> 6929 </div>--> 6930 <div class="price_container flex item-center justify-between">
6931 <span class="text-size14 font-semibold text-black" x-html="item.price"></span> 6932 </div> 6933 </div> 6934 6935 </div> 6936 </template> 6937 <template x-if="searchProducts == ''"> 6938 <p>No results found.</p> 6939 </template> 6940 </div> 6941 </div> 6942 <div class="results-rightside"> 6943 <template x-if="searchCategories != ''"> 6944 <div class="mb-6 category-rest"> 6945 <p class="categorie-title text-size20 font-medium text-black pb-2"> 6946 In Categories <small class="text-size16 font-medium text-black hidden">(<span x-html="searchCategoriesTotal"></span>)</small> 6947 </p> 6948 <div class="catgry-list"> 6949 <template x-for="category in searchCategories"> 6950 <a x-bind:href="`${category.url}`"> 6951 <div class="text-size14 font-normal text-black"> 6952 <span class="text-size14 font-normal text-black cursor-pointer" x-html="category.name.split('>').pop().trim()"></span> 6953 </div> 6954 </a> 6955 </template> 6956 </div> 6957 </div> 6958 </template> 6959 6960 <!-- <template x-if="searchPages != ''"> 6961 <div class="mb-6"> 6962 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 6963 Pages <small class="text-size16 font-medium text-black">(<span x-html="searchPagesTotal"></span>)</small> 6964 </p> 6965 <div class="px-2"> 6966 <template x-for="page in searchPages"> 6967 <a x-bind:href="`${page.url}`"> 6968 <div class="my-2 flex flex-wrap"> 6969 <span class="text-size14 font-normal text-black cursor-pointer" x-html="page.name"></span> 6970 </div> 6971 </a> 6972 </template> 6973 </div> 6974 </div> 6975 </template> --> 6976 6977 <template x-if="searchPosts != ''"> 6978 <div class="search_box_right"> 6979 <p class="blog-title text-size20 font-medium text-black"> 6980 In Blogs <!-- <small class="<//?= $titleNumberCSS ?>">(<span x-html="searchPostsTotal"></span>)</small> --> 6981 </p> 6982 <div class="search_box_right_content"> 6983 <template x-for="item in searchPosts"> 6984 <div> 6985 <a x-bind:href="`${item.url}`" class="blog-items block"> 6986 <div> 6987 <span class="blog-name text-size14 font-normal text-black" x-html="item.name"></span> 6988 </div> 6989 </a> 6990 <span class="item_description text-size14 font-normal text-black opacity-50 mb-4 block" x-html="item.description"></span> 6991 </div> 6992 </template> 6993 </div> 6994 </div> 6995 </template> 6996 </div> 6997 6998 </div> 6999 </template> 7000 7001 <template x-if="noResults"> 7002 <div class="p-2 text-size20 font-medium text-black overflow-hidden"> 7003 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl" x-html="noResultsText"></p> 7004 </div> 7005 </template> 7006 </div> 7007</div> 7008
7009<script> 7010 function initMirasvitSearch() { 7011 return { 7012 //initialize Variables 7013 hotSearch: false, 7014 searchResults: false, 7015 noResults: false, 7016 isLoading: false, 7017 isOpen: false, 7018 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"}, 7019 xhttp: false, 7020 noResultsText: '', 7021 numberResults: '', 7022 numberResultsUrl: '', 7023 searchProductsTotal: '', 7024 searchCategoriesTotal: '', 7025 searchPagesTotal: '', 7026 7027 searchProducts: [], 7028 searchCategories: [], 7029 searchPages: [], 7030 searchPosts: [], 7031 7032 searchMap: { 7033 'magento_cms_page': 'Pages', 7034 'magento_catalog_category': 'Categories', 7035 'magento_catalog_product': 'Products', 7036 'magefan_blog_post': 'Posts' 7037 }, 7038 7039 hotSearchClickEvent: function (ev) { 7040 var hotSearchClick = event.currentTarget.innerText; 7041 document.getElementById("search").value = hotSearchClick; 7042 7043 this.doSearch(hotSearchClick); 7044 }, 7045 7046 openSearch: function () { 7047 //this.isOpen = true; 7048 searchValue = document.getElementById("search").value.length; 7049 7050 if (searchValue >= this.blockConfig.minSearchLength) { 7051 this.hideHotSearch(); 7052 } else { 7053 this.showHotSearch(); 7054 this.hideSearchResults(); 7055 } 7056 }, 7057 7058 startSearch: function (e) { 7059 if (e) { 7060 //this.isOpen = true; 7061 } 7062 }, 7063 7064 getSearchresult: function () { 7065 this.isOpen = true; 7066 }, 7067 7068 closeSearch: function () { 7069 this.isOpen = false; 7070 }, 7071 7072 showHotSearch: function () { 7073 this.hotSearch = true; 7074 }, 7075 7076 hideHotSearch: function () { 7077 this.hotSearch = false; 7078 7079 }, 7080 7081 showSearchResults: function () { 7082 this.searchResults = true; 7083 // this.isOpen = true; 7084 }, 7085 7086 hideSearchResults: function () { 7087 this.searchResults = false; 7088 // this.isOpen = false; 7089 }, 7090 7091 showNoResults: function () { 7092 this.noResults = true; 7093 }, 7094 7095 hideNoResults: function () { 7096 this.noResults = false; 7097 }, 7098 7099 setNoResultsText(text) { 7100 if (!text) { 7101 return; 7102 } 7103 console.log(text); 7104 this.noResultsText = text; 7105 this.isOpen = true; 7106 }, 7107 7108 setNumberResults(text) { 7109 this.numberResults = text; 7110 }, 7111 7112 setNumberResultsUrl(text) { 7113 this.numberResultsUrl = text; 7114 }, 7115 7116 resetSearchData: function () { 7117 // Reinitialize Variables to avoid wrong search results. 7118 this.searchPages = []; 7119 this.searchPagesTotal = 0; 7120 this.searchCategories = []; 7121 this.searchCategoriesTotal = 0; 7122 this.searchProducts = []; 7123 this.searchProductsTotal = 0; 7124 }, 7125 7126 doSearch: function (query) { 7127 this.isOpen = false;
7128 var self = this; 7129 // Min search length 7130 if (query.length < this.blockConfig.minSearchLength) { 7131 this.showHotSearch(); 7132 this.isLoading = false; 7133 this.hideSearchResults(); 7134 this.hideNoResults(); 7135 7136 return; 7137 } else { 7138 this.hideHotSearch(); 7139 this.isLoading = true; 7140 this.showSearchResults(); 7141 this.hideNoResults(); 7142 } 7143 7144 // AJAX for searchautocomplete/ajax/suggest/ 7145 if (this.xhttp) { 7146 try { 7147 this.xhttp.abort(); 7148 } catch { 7149 7150 } 7151 } 7152 this.xhttp = new XMLHttpRequest(); 7153 var xhttp = this.xhttp; 7154 7155 var queryEncoded = encodeURIComponent(query); 7156 var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; 7157 7158 xhttp.open("GET", url, true); 7159 xhttp.setRequestHeader("Content-Type", "application/json"); 7160 7161 xhttp.onreadystatechange = function () { 7162 if (this.readyState === 4 && this.status === 200) { 7163 7164 7165 // Response from ajax call in JSON. 7166 var response = JSON.parse(this.responseText); 7167 console.log(response); 7168 self.resetSearchData(); 7169 7170 // Product Search Results 7171 for (index in response.indexes) { 7172 7173 if (response.indexes[index].items.length > 0) { 7174 self.getSearchresult(); 7175 var res = response.indexes[index]; 7176 var map = null; 7177 7178 if (self.searchMap[res.identifier]) { 7179 map = self.searchMap[res.identifier]; 7180 self['search' + map] = res.items; 7181 self['search' + map + 'Total'] = res.totalItems; 7182 } 7183 } 7184 } 7185 7186 // Extract totalItems from response.textAll and format if > 999 7187 let textAll = response.textAll; 7188 if (response.textAll) { 7189 // Remove the â symbol (or any trailing characters you'd like to remove) 7190 textAll = textAll.replace(/â$/, '').trim(); 7191 // Find number within textAll using regex 7192 let totalItemsMatch = textAll.match(/\d+/); // Extracts the first number found 7193 if (totalItemsMatch) { 7194 let totalItemsFromTextAll = parseInt(totalItemsMatch[0], 10); 7195 if (totalItemsFromTextAll > 999) { 7196 // Format with comma if > 999 7197 textAll = textAll.replace(totalItemsMatch[0], totalItemsFromTextAll.toLocaleString()); 7198 } 7199 } 7200 console.log("Formatted textAll:", textAll); 7201 self.setNumberResults(textAll); // Update the UI with the formatted textAll 7202 } 7203 7204 self.isLoading = false; 7205 self.hideNoResults(); 7206 self.setNumberResults(textAll); 7207 self.setNumberResultsUrl(response.urlAll); 7208 7209 if (response.noResults) {console.log(response.textEmpty); 7210 self.showNoResults(); 7211 self.setNoResultsText(response.textEmpty); 7212 self.hideSearchResults(); 7213 7214 } 7215 }else{ 7216 this.isOpen = false; 7217 } 7218 }; 7219 7220 xhttp.send(); 7221 } 7222 } 7223 } 7224</script>
7224 </div> 7225 7226 <div class="flex items-center order-3"> 7227 <!--Compare Icon--> 7228 <a id="compare-link" 7229 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black" 7230 :class="{ 'invisible': !(itemCount > 0) }" 7231 href="https://www.flooringinc.com/catalog/product_compare/index/" 7232 title="Compare Products" 7233 x-data="initCompareHeader()" 7234 @private-content-loaded.window="receiveCompareData($event.detail.data)" 7235 > 7236 <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"> 7237 <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"/> 7238<title>scale</title></svg> 7239 7240 <span class="sr-only label"> 7241 Compare Products </span> 7242 7243 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 7244 leading-none text-center text-white uppercase transform -translate-x-1 7245 translate-y-1/2 bg-yellow-500 rounded-full" 7246 > 7247 <span x-text="itemCount"></span> 7248 <span x-show="itemCount === 1" class="sr-only"> 7249 item </span> 7250 <span x-show="itemCount > 1" class="sr-only"> 7251 items </span> 7252 </span> 7253 </a> 7254 7255 <!--Search Icon--> 7256 <button id="menu-search-icon" 7257 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black hidden" 7258 @click.prevent=" 7259 searchOpen = !searchOpen; 7260 $nextTick(function () { document.querySelector('#search').select(); }); 7261 " 7262 > 7263 <span class="sr-only label"> 7264 Search </span> 7265 7266 <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"> 7267 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 7268<title>search</title></svg> 7269 </button> 7270 7271 <!--Customer Icon & Dropdown--> 7272
7272<script> 7273"use strict"; 7274 7275function initComponent() { 7276 return { 7277 cart: false, 7278 customer: false, 7279 receiveCustomerData(data) { 7280 if (data.cart) { 7281 this.cart = data.cart; 7282 } 7283 if (data.customer) { 7284 this.customer = data.customer; 7285 } 7286 } 7287 } 7288} 7289</script>
7289 7290 7291 7292<div x-data="{ open: false }" class="relative inline-block acc-dropdown"> 7293 <div class="arrow-cus"> 7294 <a 7295 href="https://www.flooringinc.com/customer/account/" 7296 id="customer-menu" 7297 class="block hover:text-black " 7298 @click.prevent="$dispatch('popup-register', 7299 { open: true,openRegister : false,openLogin : true,openCreate :true, 7300 openButtonLogin :true, 7301 openButtonRegister :false, 7302 })" 7303 :aria-expanded="open ? 'true' : 'false'" 7304 aria-label="My Account" 7305 > 7306 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" 7307 class="w-8 h-8 md:h-6 md:w-6" aria-hidden="true"> 7308 <circle fill="none" cx="12" cy="7" r="3"></circle> 7309 <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 7310 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 7311 0-7 3.141-7 7v1h2v-1c0-2.757 2.243-5 5-5h4c2.757 0 5 2.243 5 5v1H21z"> 7312 </path> 7313 </svg> 7314 7315 </a> 7316 </div> 7317 <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 7318 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter" 7319 :class="{ 'hidden' : !open }" 7320 @click.outside="open = false" 7321 x-cloak x-show="open" 7322 aria-labelledby="customer-menu" 7323 > 7324 7325<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 7326 onclick="hyva.setCookie && hyva.setCookie( 7327 'login_redirect', 7328 window.location.href, 7329 1 7330 )" 7331 href="https://www.flooringinc.com/customer/account/index/"> 7332 Sign In </a> 7333<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 7334 href="https://www.flooringinc.com/customer/account/create/" 7335 title="" 7336 > 7337 Create an Account </a> 7338 </nav> 7339</div> 7340 <!--Quote Cart Icon (show when activeCartType is 'quote' and quote has items)--> 7341 <template x-if="activeCartType === 'quote' && quoteCart.summary_count"> 7342 <a id="menu-cart-quote-icon" 7343 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black pl-3" 7344 :class="{ 7345 'hidden': !(activeCartType === 'quote' && quoteCart.summary_count), 7346 'block': activeCartType === 'quote' && quoteCart.summary_count }" 7347 href="https://www.flooringinc.com/amasty_quote/cart/" 7348 > 7349 <span class="checkout-icon"> 7350 <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"> 7351 <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"/> 7352<title>shopping-cart</title></svg> 7353 </span> 7354 <span x-text="quoteCart.summary_count" 7355 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 7356 leading-none text-center text-white uppercase transform -translate-x-1 7357 translate-y-1/2 rounded-full bg-primary" 7358 :class="{ 7359 'hidden': !quoteCart.summary_count, 7360 'block': quoteCart.summary_count }" 7361 ></span> 7362 </a> 7363 </template> 7364 <!--Regular Cart Icon (show when activeCartType is 'cart' or when quote mode but quote empty - always show an icon)-->
7364 7365 <a id="menu-cart-icon" 7366 x-show="activeCartType === 'cart' || (activeCartType === 'quote' && !quoteCart.summary_count)" 7367 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block ml-6 no-underline hover:text-black" 7368 href="https://www.flooringinc.com/checkout/cart/index/" 7369 > 7370 <span class="sr-only label"> 7371 Cart </span> 7372 7373 <span class="cart-icon"> 7374 <img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/cart-icon.svg" alt="cart-icon" width="24" height="24"> 7375 <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> 7376 </span> 7377 7378 <span x-text="cart.summary_count" 7379 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 7380 leading-none text-center text-white uppercase transform -translate-x-1 7381 translate-y-1/2 rounded-full bg-primary" 7382 :class="{ 7383 'hidden': !cart.summary_count, 7384 'block': cart.summary_count }" 7385 ></span> 7386 </a> 7387 7388 </div> 7389 </div> 7390
7391 <!--Cart Drawer--> 7392
7392<script> 7393 function initCartDrawer() { 7394 return { 7395 open: false, 7396 isLoading: false, 7397 cart: {}, 7398 maxItemsToDisplay: 10, 7399 itemsCount: 0, 7400 totalCartAmount: 0, 7401 getData(data) { 7402 if (data.cart) { 7403 this.cart = data.cart; 7404 this.itemsCount = data.cart.items && data.cart.items.length || 0; 7405 this.totalCartAmount = this.cart.summary_count; 7406 //this.cart.summary_count = this.itemsCount; 7407 this.setCartItems(); 7408 } 7409 this.isLoading = false; 7410 }, 7411 cartItems: [], 7412 getItemCountTitle() { 7413 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.totalCartAmount) 7414 }, 7415 setCartItems() { 7416 if(this.cart.items){ 7417 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 7418 } else { 7419 this.cartItems = []; 7420 } 7421 if (this.maxItemsToDisplay > 0) { 7422 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 7423 } 7424 getCustomerData(['customer'], function(data) { 7425 if(data.messages.messages[0]){ 7426 var messagesType = data.messages.messages[0].type; 7427 var messagesText = data.messages.messages[0].text; 7428 if(messagesType === "success"){ 7429 dispatchMessages([ 7430 { 7431 type: messagesType, 7432 text: messagesText 7433 } 7434 ]); 7435 this.openCartDrawer(); 7436 } else { 7437 dispatchMessages([ 7438 { 7439 type: messagesType, 7440 text: messagesText 7441 } 7442 ]); 7443 } 7444 } 7445 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 7446 }); 7447 7448 if(document.querySelectorAll('.btn_cart')) { 7449 var addtocartnew = document.querySelectorAll('.btn_cart'); 7450 7451 addtocartnew.forEach(addtocartnew => { 7452 addtocartnew.addEventListener('click', () => { 7453 setTimeout(() => { 7454 }, 2500); 7455 }); 7456 }); 7457 } 7458 if(document.getElementById('product-addtocart-button')) { 7459 var addtocartnew2 = document.getElementById('product-addtocart-button'); 7460 7461 addtocartnew2.addEventListener('click', () => { 7462 setTimeout(() => { 7463 }, 2500); 7464 }); 7465 } 7466 7467 7468 }, 7469 deleteItemFromCart(itemId) { 7470 this.isLoading = true; 7471 7472 const formKey = hyva.getFormKey(); 7473 const postUrl = BASE_URL + 'amasty_quote/quote/removeFromMinicart'; 7474 fetch(postUrl, { 7475 "headers": { 7476 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 7477 }, 7478 "body": "form_key=" + formKey + "&item_id=" + itemId, 7479 "method": "POST", 7480 "mode": "cors", 7481 "credentials": "include" 7482 }).then(response => { 7483 window.location.href = window.location.pathname; // Reload the page after item remove 7484 if (response.redirected) { 7485 window.location.href = response.url; 7486 } else if (response.ok) { 7487 return response.json(); 7488 } else { 7489 window.dispatchMessages && window.dispatchMessages([{ 7490 type: 'warning',
7491 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 7492 }]); 7493 this.isLoading = false; 7494 } 7495 }).then(result => { 7496 window.dispatchMessages && window.dispatchMessages([{ 7497 type: result.success ? 'success' : 'error', 7498 text: result.success 7499 ? 'You\u0020removed\u0020the\u0020item.' 7500 : result.error_message 7501 }], result.success ? 5000 : 0) 7502 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 7503 }); 7504 }, 7505 toggleCartDrawer(event) { 7506 if (event.detail && event.detail.isOpen !== undefined) { 7507 if (event.detail.isOpen) { 7508 this.openCartDrawer() 7509 } else { 7510 this.open = false 7511 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 7512 } 7513 } else { 7514 this.openCartDrawer() 7515 } 7516 }, 7517 openCartDrawer() { 7518 this.open = true; 7519 this.$nextTick(() => { 7520 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 7521 }) 7522 }, 7523 closeCartDrawer() { 7524 this.$dispatch('toggle-cart', { isOpen: false }) 7525 } 7526 } 7527 } 7528 function getCustomerData(sections, callback) { 7529 fetch('/customer/section/load/?sections=') 7530 .then(response => response.json()) 7531 .then(data => callback(data)) 7532 .catch(error => console.error('Error fetching customer data:', error)); 7533 } 7534</script>
7534 7535<section x-cloak 7536 x-show="cart" 7537 id="cart-drawer" 7538 x-data="initCartDrawer()" 7539 @private-content-loaded.window="getData($event.detail.data)" 7540 @toggle-cart.window="toggleCartDrawer($event)" 7541 @keydown.window.escape="closeCartDrawer" 7542> 7543 <div role="dialog" 7544 aria-labelledby="cart-drawer-title" 7545 aria-modal="true" 7546 @click.outside="open=false" 7547 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 7548 <div class="backdrop" 7549 x-show="open" 7550 x-transition:enter="ease-in-out duration-500" 7551 x-transition:enter-start="opacity-0" 7552 x-transition:enter-end="opacity-100" 7553 x-transition:leave="ease-in-out duration-500" 7554 x-transition:leave-start="opacity-100" 7555 x-transition:leave-end="opacity-0" 7556 role="button" 7557 @click="closeCartDrawer" 7558 aria-label="Close minicart"></div> 7559 <div class="relative w-screen max-w-md shadow-2xl" 7560 x-show="open" 7561 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 7562 x-transition:enter-start="translate-x-full" 7563 x-transition:enter-end="translate-x-0" 7564 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 7565 x-transition:leave-start="translate-x-0" 7566 x-transition:leave-end="translate-x-full" 7567 > 7568 <div 7569 x-show="open" 7570 x-transition:enter="ease-in-out duration-500" 7571 x-transition:enter-start="opacity-0" 7572 x-transition:enter-end="opacity-100" 7573 x-transition:leave="ease-in-out duration-500" 7574 x-transition:leave-start="opacity-100" 7575 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex pr-6 pt-19"> 7576 <button @click="open=false" aria-label="Close panel" 7577 class="p-0 text-black transition duration-150 ease-in-out hover:text-black"> 7578 <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"> 7579 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 7580<title>x</title></svg> 7581 </button> 7582 </div> 7583 <div class="flex flex-col h-full bg-lightblue"> 7584 7585 <header class="px-4 pt-19 pb-6"> 7586 <h2 id="cart-drawer-title" class="text-size18 font-medium text-black"> 7587 <template x-if="!itemsCount"> 7588 <div>My Cart</div></template> 7589<template x-if="itemsCount"> 7590 <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> 7591</template> 7592 <span class="items-total text-xs text-black" 7593 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 7594 x-text="getItemCountTitle()"> 7595 </span> 7596 </h2> 7597 </header> 7598 7599 7600<template x-if="!itemsCount"> 7601 <div class="relative px-4 py-6 border-bs sm:px-6 border-container"> 7602 Cart is empty </div> 7603 </template> 7604 <div class="relative grid overflow-y-auto overflow-x-hidden bg-lightblue cart-items"> 7605 <template x-for="item in cartItems"> 7606 <div class="flex items-start cart-item px-4 pt-5 pb-6 transition duration-150 7607 ease-in-out"> 7608 <template x-if="!item.product_has_url"> 7609 <a :href="item.product_url" class="w-1/4 pr-6 image"> 7610 <img 7611 :src="item.product_image.src" 7612 :width="item.product_image.width" 7613 :height="item.product_image.height" 7614 loading="lazy" 7615 /> 7616 </a> 7617 </template> 7618 <template x-if="item.product_has_url == 1"> 7619 <a :href="item.product_url" class="w-1/4 pr-6 image"> 7620 <img 7621 :src="item.product_image.src" 7622 :width="item.product_image.width" 7623 :height="item.product_image.height" 7624 loading="lazy" 7625 /> 7626 </a> 7627 </template> 7628 <div class="w-3/4"> 7629 <div> 7630 <template x-if="!item.product_has_url"> 7631 <a :href="item.product_url" class="prosku"> 7632 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 7633 </a> 7634 </template> 7635 <template x-if="item.product_has_url == 1"> 7636 <a :href="item.product_url" class="prosku"> 7637 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 7638 </a> 7639 </template> 7640 </div> 7641 <template x-for="option in item.options"> 7642 <div class="flex pt-2 pb-1 item-options w-full" 7643 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)"> 7644 <div class="flex w-full"> 7645 <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> 7646 <template x-if="!item.product_has_url"> 7647 <a :href="item.product_url" 7648 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 7649 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 7650 </template> 7651 <template x-if="item.product_has_url == 1"> 7652 <a :href="item.product_url" 7653 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 7654 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 7655 </template> 7656 </div> 7657 </div> 7658 </template> 7659 <p class="pb-4 pt-1"><span x-html="item.product_price" class="text-size20 font-bold text-custom-blue pricebox"></span></p> 7660 <div class="text-xl flex qty-fields items-center"> 7661 <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> 7662 <div class="ml-auto"> 7663 <button 7664 @click="deleteItemFromCart(item.item_id)" 7665 > 7666 <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> 7667 </button> 7668 </div> 7669 </div> 7670 7671 </div> 7672 </div> 7673 </template> 7674 </div> 7675<template x-if="itemsCount"> 7676 7677 <div class="relative bg-lightblue grid pt-3 pb-4"> 7678 <div class="w-full transition duration-150 ease-in-out sub-total"> 7679 <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> 7680 </div> 7681 7682 <div class="w-full transition duration-150 ease-in-out 7683 chekout-btn"> 7684 <a href="https://www.flooringinc.com/checkout/cart/" 7685 class="no-underline block relative font-medium text-size16 text-custom-white bg-custom-blue"> 7686 Proceed to Cart </a> 7687 </div> 7688 </div> 7689</template> 7690 </div> 7691 </div> 7692 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 7693 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 7694 x-show="isLoading" 7695 x-transition:enter="ease-out duration-200" 7696 x-transition:enter-start="opacity-0" 7697 x-transition:enter-end="opacity-100" 7698 x-transition:leave="ease-in duration-200" 7699 x-transition:leave-start="opacity-100" 7700 x-transition:leave-end="opacity-0"> 7701 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 7702<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 7703 <g fill="none" fill-rule="evenodd"> 7704 <g transform="translate(1 1)" stroke-width="2"> 7705 <circle cx="5" cy="50" r="5">
7706 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 7707 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 7708 </circle> 7709 <circle cx="27" cy="5" r="5"> 7710 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 7711 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 7712 </circle> 7713 <circle cx="49" cy="50" r="5"> 7714 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 7715 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 7716 </circle> 7717 </g> 7718 </g> 7719<title>loader</title></svg> 7720 <div class="ml-10 text-primary text-xl"> 7721 Loading... </div> 7722</div> 7723 </div> 7724 </template> 7725</section> 7726 7727 <!--Authentication Pop-Up--> 7728
7728<script> 7729 function initAuthentication() { 7730 return { 7731 open: false, 7732 forceAuthentication: false, 7733 checkoutUrl: 'https://www.flooringinc.com/checkout/index/', 7734 errors: 0, 7735 hasCaptchaToken: 0, 7736 displayErrorMessage: false, 7737 errorMessages: [], 7738 setErrorMessages: function setErrorMessages(messages) { 7739 this.errorMessages = [messages]; 7740 this.displayErrorMessage = this.errorMessages.length; 7741 }, 7742 submitForm: function () { 7743 // Do not rename $form, the variable is expected to be declared in the recaptcha output 7744 const $form = document.querySelector('#login-form-new'); 7745 7746 if (this.errors === 0) { 7747 this.dispatchLoginRequest($form); 7748 } 7749 }, 7750 onPrivateContentLoaded: function (data) { 7751 const isLoggedIn = data.customer && data.customer.firstname; 7752 if (data.cart && !isLoggedIn) { 7753 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 7754 } 7755 }, 7756 redirectIfAuthenticated: function (event) { 7757 if (event.detail && event.detail.url) { 7758 this.checkoutUrl = event.detail.url; 7759 } 7760 if (!this.forceAuthentication) { 7761 window.location.href = this.checkoutUrl; 7762 } 7763 }, 7764 dispatchLoginRequest: function(form) { 7765 this.isLoading = true; 7766 const username = this.$refs['customer-email'].value; 7767 const password = this.$refs['customer-password'].value; 7768 const formKey = hyva.getFormKey(); 7769 const bodyFields = { 7770 'username': username, 7771 'password': password, 7772 'formKey': formKey 7773 }; 7774 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 7775 const recaptchaField = fieldName && form[fieldName]; 7776 if (recaptchaField) { 7777 bodyFields[fieldName] = recaptchaField.value; 7778 } 7779 fetch('https://www.flooringinc.com/customer/ajax/login/', { 7780 method: 'POST', 7781 headers: { 7782 'Content-Type': 'application/json', 7783 'X-Requested-With': 'XMLHttpRequest' 7784 }, 7785 body: JSON.stringify(bodyFields) 7786 } 7787 ).then(response => { 7788 return response.json() 7789 } 7790 ).then(data=> { 7791 this.isLoading = false; 7792 if (data.errors) { 7793 dispatchMessages([{ 7794 type: 'error', 7795 text: data.message 7796 }], 5000); 7797 this.errors = 1; 7798 this.hasCaptchaToken = 0; 7799 } else { 7800 window.location.href = this.checkoutUrl; 7801 } 7802 }); 7803 } 7804 } 7805 } 7806</script>
7806 7807<section id="authentication-popup" 7808 x-data="initAuthentication()" 7809 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 7810 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 7811 @keydown.window.escape="open = false" 7812> 7813 <div role="dialog" 7814 aria-modal="true" 7815 @click.outside="open = false" 7816 class="inset-y-0 right-0 z-30 flex max-w-full" 7817 :class="{'fixed': open }" x-cloak x-show="open" 7818 > 7819 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 7820 x-show="open" 7821 x-cloak="" 7822 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 7823 x-transition:enter-start="translate-x-full" 7824 x-transition:enter-end="translate-x-0" 7825 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 7826 x-transition:leave-start="translate-x-0" 7827 x-transition:leave-end="translate-x-full" 7828 > 7829 <div 7830 x-show="open" 7831 x-cloak="" 7832 x-transition:enter="ease-in-out duration-500" 7833 x-transition:enter-start="opacity-0" 7834 x-transition:enter-end="opacity-100" 7835 x-transition:leave="ease-in-out duration-500" 7836 x-transition:leave-start="opacity-100" 7837 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> 7838 <button @click="open = false;" aria-label="Close panel" 7839 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 7840 <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"> 7841 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 7842<title>x</title></svg> 7843 </button> 7844 </div> 7845 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 7846 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 7847 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 7848 <strong class="font-medium">Checkout using your account</strong> 7849 </p> 7850 7851 <form class="form form-login" 7852 method="post" 7853 @submit.prevent="submitForm();" 7854 id="login-form-new" 7855 > 7856 <div class="fieldset login"> 7857 <div class="field email required"> 7858 <label class="label" for="form-login-username" form="login-form" > 7859 <span>Email Address</span> 7860 </label> 7861 <div class="control"> 7862 <input name="username" 7863 id="form-login-username" 7864 x-ref="customer-email" 7865 @change="errors = 0" 7866 type="email" 7867 required 7868 class="form-input input-text" 7869 > 7870 </div> 7871 </div> 7872 <div class="field password required"> 7873 <label for="form-login-password" class="label" form="login-form"> 7874 <span>Password</span> 7875 </label> 7876 <div class="control"> 7877 <input name="password" 7878 id="form-login-password" 7879 type="password" 7880 class="form-input input-text" 7881 required 7882 x-ref="customer-password" 7883 @change="errors = 0" 7884 > 7885 </div> 7886 </div> 7887 7888 <input name="context" type="hidden" value="checkout" /> 7889 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 7890 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 7891 > 7892 Sign In </button> 7893 <a href="https://www.flooringinc.com/customer/account/forgotpassword/" 7894 > 7895 Forgot Your Password? </a> 7896 </div> 7897 7898 </div> 7899 </form> 7900 </div> 7901 <div class="mx-4"> 7902 </div> 7903 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
7904 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 7905 <strong class="font-medium">Checkout as a new customer</strong> 7906 </p> 7907 7908 <div class="block-content"> 7909 <p class="mb-1"> 7910 Creating an account has many benefits: </p> 7911 <ul class="list-disc pl-5"> 7912 <li> See order and shipping status</li> 7913 <li> Track order history</li> 7914 <li> Check out faster</li> 7915 </ul> 7916 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 7917 <a href="https://www.flooringinc.com/customer/account/create/" 7918 class="inline-flex btn btn-primary"> 7919 Create an Account </a> 7920 </div> 7921 </div> 7922 </div> 7923 </div> 7924 </div> 7925 </div> 7926</section> 7927 7928 <!--Cart Quote Drawer--> 7929
7929<script> 7930 function initQuoteCartDrawer() { 7931 return { 7932 open: false, 7933 cartData: {}, 7934 getQuoteCartData(data) { 7935 if (data.quotecart) { 7936 this.cartData = data.quotecart 7937 this.setCartItems(); 7938 } 7939 }, 7940 cartItems: [], 7941 setCartItems() { 7942 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 7943 }, 7944 deleteItemFromCart(itemId) { 7945 var formKey = document.querySelector('input[name=form_key]').value; 7946 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 7947 "headers": { 7948 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 7949 }, 7950 "body": "form_key="+ formKey + "&item_id="+itemId, 7951 "method": "POST", 7952 "mode": "cors", 7953 "credentials": "include" 7954 }).then(function (response) { 7955 if (response.redirected) { 7956 window.location.href = response.url; 7957 } else if (response.ok) { 7958 return response.json(); 7959 } else { 7960 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7961 [{ 7962 type: "warning", 7963 text: "Could not remove item from quote." 7964 }], 5000 7965 ); 7966 } 7967 }).then(function (response) { 7968 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7969 [{ 7970 type: response.success ? "success" : "error", 7971 text: response.success 7972 ? "You removed the item." 7973 : response.error_message 7974 }], 5000 7975 ); 7976 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 7977 window.dispatchEvent(reloadCustomerDataEvent); 7978 }); 7979 } 7980 } 7981 } 7982</script>
7982 7983<section id="cart-quote-drawer" 7984 x-data="initQuoteCartDrawer()" 7985 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 7986 @toggle-quote-cart.window="open=true;" 7987 @keydown.window.escape="open=false" 7988> 7989 <template x-if="cartData && cartData.summary_count"> 7990 <div role="dialog" 7991 aria-labelledby="cart-drawer-title" 7992 aria-modal="true" 7993 @click.away="open = false" 7994 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 7995 <div class="backdrop" 7996 x-show="open" 7997 x-transition:enter="ease-in-out duration-500" 7998 x-transition:enter-start="opacity-0" 7999 x-transition:enter-end="opacity-100" 8000 x-transition:leave="ease-in-out duration-500" 8001 x-transition:leave-start="opacity-100" 8002 x-transition:leave-end="opacity-0" 8003 @click="open = false" 8004 aria-label="Close panel"></div> 8005 <div class="relative w-screen max-w-md shadow-2xl" 8006 x-show="open" 8007 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 8008 x-transition:enter-start="translate-x-full" 8009 x-transition:enter-end="translate-x-0" 8010 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 8011 x-transition:leave-start="translate-x-0" 8012 x-transition:leave-end="translate-x-full" 8013 > 8014 <div 8015 x-show="open" 8016 x-transition:enter="ease-in-out duration-500" 8017 x-transition:enter-start="opacity-0" 8018 x-transition:enter-end="opacity-100" 8019 x-transition:leave="ease-in-out duration-500" 8020 x-transition:leave-start="opacity-100" 8021 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 8022 <button @click="open = false" aria-label="Close panel" 8023 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 8024 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 8025 <path stroke-linecap="round" stroke-linejoin="round" 8026 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 8027 </path> 8028 </svg> 8029 </button> 8030 </div> 8031 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 8032 <header class="px-4 sm:px-6"> 8033 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 8034 My Quote Cart </div> 8035 </header> 8036 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 8037 sm:gap-8 sm:px-6 border-container"> 8038 <template x-for="item in cartItems"> 8039 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 8040 ease-in-out rounded-lg hover:bg-gray-100"> 8041 <a :href="item.product_url" class="w-1/4"> 8042 <img 8043 :src="item.product_image.src" 8044 :width="item.product_image.width" 8045 :height="item.product_image.height" 8046 loading="lazy" 8047 /> 8048 </a> 8049 <div class="w-3/4 relative"> 8050 <div> 8051 <div class="text-xl"> 8052 <a :href="item.product_url" class="hover:underline"> 8053 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 8054 </a> 8055 </div> 8056 <div class="text-sm"><span x-html="item.product_sku"></div> 8057 </div> 8058 <template x-for="option in item.options"> 8059 <div class="pt-2"> 8060 <p class="font-semibold" x-text="option.label + ':'"></p> 8061 <p class="text-secondary" x-html="option.value"></p> 8062 </div> 8063 </template> 8064 <div><span x-html="item.product_price"></span></div> 8065 <div class="pt-4"> 8066 <a :href="item.configure_url" 8067 x-show="item.product_type !== 'grouped'" 8068 class="inline-flex p-2 mr-2 btn btn-primary"> 8069 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 8070 size="16" class="w-5 h-5"> 8071 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 8072 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 8073 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 8074 </path> 8075 </svg> 8076 </a> 8077 <button class="inline-flex p-2 btn btn-primary" 8078 @click="deleteItemFromCart(item.item_id)" 8079 > 8080 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 8081 size="16" class="w-5 h-5"> 8082 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 8083 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 8084 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 8085 0 00-1 1v3M4 7h16"> 8086 </path> 8087 </svg> 8088 </button> 8089 </div> 8090 </div> 8091 </div> 8092 </template> 8093 </div> 8094 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 8095 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 8096 hover:bg-gray-100">
8097 <span>Cart Subtotal:</span> 8098 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 8099 </div> 8100 <div class="w-full"> 8101 <a href="https://www.flooringinc.com/amasty_quote/cart/" 8102 class="btn btn-secondary justify-center"> 8103 View and Edit Cart </a> 8104 </div> 8105 </div> 8106 </div> 8107 </div> 8108 </div> 8109 </template> 8110</section> 8111 8112</div> 8113 8114<div x-data="initKlaviyoCustomerTracking()" 8115 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 8116
8116<script> 8117 function initKlaviyoCustomerTracking() { 8118 return { 8119 sendCustomerDataToKlaviyo(data) { 8120 window.addEventListener('init-external-scripts', () => { 8121 const _learnq = window._learnq || []; 8122 const customer = data.customer; 8123 var resource = document.createElement('script'); 8124 resource.async = "true"; 8125 resource.src = "https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg"; 8126 var script = document.getElementsByTagName('script')[0]; 8127 script.parentNode.insertBefore(resource, script); 8128 8129 if (customer && customer.email) { 8130 script.addEventListener('load', function() { 8131 _learnq.push(['identify', { 8132 $email: customer.email, 8133 $first_name: customer.firstname ? customer.firstname : '', 8134 $last_name: customer.lastname ? customer.lastname : '' 8135 }]); 8136 }); 8137 } 8138 }, {once: true, passive: true}); 8139 } 8140 } 8141 } 8142 </script>
8142 8143<a class="action skip sr-only contentarea" 8144 href="#contentarea"> 8145 <span> 8146 Skip to Content </span> 8147</a> 8148<div class="widget block block-static-block"> 8149 <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]"> 8150 <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> 8151<p style="font-size: medium;">ð Game Day Ready - Save Up to 35% Off - Sale Ends Sunday 10/4 </p> 8152 8153</center> 8154</div></div></div></div></div></div> 8155</header><div class="top-container"><nav class="breadcrumbs order-2 w-full" aria-label="Breadcrumb"> 8156 <div class="breadcrumbs-in py-8"> 8157 <ol class="items list-reset rounded flex flex-wrap text-grey text-sm"> 8158 <li class="item flex home"> 8159 <a href="https://www.flooringinc.com/" 8160 class="no-underline text-sm font-normal" 8161 title="Go to Home Page" 8162 >Home</a> 8163 </li> 8164 <li class="item flex category1826"> 8165 <span aria-hidden="true" class="separator text-primary-lighter px-2 text-sm font-normal">/</span> 8166 <a href="https://www.flooringinc.com/shop.html" 8167 class="no-underline text-sm font-normal" 8168 title="" 8169 >Flooring By Category</a> 8170 </li> 8171 <li class="item flex category1841"> 8172 <span aria-hidden="true" class="separator text-primary-lighter px-2 text-sm font-normal">/</span> 8173 <a href="https://www.flooringinc.com/shop/rubber-flooring.html" 8174 class="no-underline text-sm font-normal" 8175 title="" 8176 >Rubber Flooring</a> 8177 </li> 8178 <li class="item flex category2333"> 8179 <span aria-hidden="true" class="separator text-primary-lighter px-2 text-sm font-normal">/</span> 8180 <a href="" 8181 class="text-sm font-semibold current" 8182 aria-current="page" 8183 >All Rubber Flooring</a> 8184 </li> 8185 </ol> 8186 </div> 8187</nav> 8188</div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 8189<div class="page messages">
8189<script> 8190 function initMessages() { 8191 "use strict"; 8192 return { 8193 messages: window.mageMessages || [], 8194 isEmpty() { 8195 return this.messages.reduce( 8196 function (isEmpty, message) { 8197 return isEmpty && message === undefined 8198 }, true 8199 ) 8200 }, 8201 removeMessage(messageIndex) { 8202 this.messages[messageIndex] = undefined; 8203 }, 8204 addMessages(messages, hideAfter) { 8205 messages.map((message) => { 8206 /* Code to avoid multiple messages on the page */ 8207 8208 if (message.text.includes("A customer with the same email address already exists")) { 8209 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>.'; 8210 } 8211 if(this.messages!="") { 8212 this.messages=[]; 8213 } 8214 this.messages = this.messages.concat(message); 8215 if (hideAfter) { 8216 this.setHideTimeOut(this.messages.length -1, hideAfter); 8217 } 8218 }); 8219 }, 8220 setHideTimeOut(messageIndex, hideAfter) { 8221 setTimeout((messageIndex) => { 8222 this.removeMessage(messageIndex); 8223 }, hideAfter, messageIndex); 8224 }, 8225 eventListeners: { 8226 ['@messages-loaded.window']() { 8227 this.addMessages(event.detail.messages, event.detail.hideAfter) 8228 }, 8229 ['@private-content-loaded.window'](event) { 8230 const data = event.detail.data; 8231 if ( 8232 data.messages && 8233 data.messages.messages && 8234 data.messages.messages.length 8235 ) { 8236 this.addMessages(data.messages.messages); 8237 } 8238 }, 8239 ['@clear-messages.window']() { 8240 this.messages = []; 8241 } 8242 } 8243 } 8244 } 8245</script>
8245 8246<section id="messages" 8247 x-data="initMessages()" 8248 x-bind="eventListeners" 8249> 8250 <template x-if="!isEmpty()"> 8251 <div class="w-full"> 8252 <div role="alert" class="messages container"> 8253 <template x-for="(message, index) in messages" :key="index"> 8254 <div> 8255 <template x-if="message"> 8256 <div class="message" :class="message.type" 8257 :ui-id="'message-' + message.type" 8258 > 8259 <span x-html="message.text"></span> 8260 <a href="#" class="close cursor-pointer" title="close" 8261 @click.prevent="removeMessage(index)"> 8262 <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"> 8263 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 8264<title>x</title></svg> 8265 </a> 8266 </div> 8267 </template> 8268 </div> 8269 </template> 8270 </div> 8271 </div> 8272 </template> 8273</section></div><div class="widget block block-static-block"> 8274 <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> 8275<div class="widget block block-static-block"> 8276 <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> 8277<div class="category-view"><div class="category-image"><picture class="image"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/all_rubber_main.webp"><img src="https://www.flooringinc.com/media/catalog/category/all_rubber_main.jpg" alt="All Rubber Flooring" title="All Rubber Flooring" class="image" /></picture></div> 8278</div><div class="columns"><aside class="sidebar sidebar-main"> <div class="block border border-container bg-container-darker md:border-0 md:bg-transparent" 8279 x-data="initLayeredNavigation()" 8280 x-init="checkIsMobileResolution()" 8281 @resize.window.debounce="checkIsMobileResolution()" 8282 @visibilitychange.window.debounce="checkIsMobileResolution()" 8283 > 8284 <div class="block-title flex items-center justify-between" 8285 @click="blockOpen = !blockOpen" 8286 > 8287 <h1 class="text-size28 font-semibold capitalize"> 8288 All Rubber Flooring </h1> 8289 <span class="py-1 px-1 bg-container-lighter rounded border border-container-darker hidden" 8290 :class="{ 'block' : isMobile, 'hidden': !isMobile }"> 8291 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': blockOpen }" role="img"> 8292 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 8293<title>chevron-down</title></svg> 8294 </span> 8295 </div> 8296 <div class="block-content filter-content pt-3 hidden md:block" :class="{ 'hidden' : isMobile && !blockOpen }"> 8297 <div id="filter-id-incstores_pim_ships_from_region" class="filter-option card my-4 px-0" x-data="{ open: false }"> 8298 <div 8299 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 8300 :class="{ 'border-b pb-4': open }" 8301 @click="open = !open">
8302 <span class="title text-md md:text-lg font-semibold"> 8303 Ships From Region </span> 8304 <span class="py-1 px-1 rounded border border-container"> 8305 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 8306 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 8307<title>chevron-down</title></svg> 8308 </span> 8309 </div> 8310 <template x-if="open"> 8311 <div class="filter-options-content pt-2"> 8312 8313<div data-mst-nav-filter="incstores_pim_ships_from_regionA673897A" data-mst-nav-cache-key="673897" data-mst-attribute="incstores_pim_ships_from_region" class="mst-nav__label" x-data="initLabelRenderer()"> 8314 <div 8315 data-holder="alphabetical" 8316 x-data="initAlphabeticalIndex(0, 5)" 8317 x-init="init()" 8318 ></div> 8319 8320 <ol class="items"> 8321 8322 8323 8324 </ol> 8325 8326 <div class="hidden mst-clear-options-link" data-checked-count="0"> 8327 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 8328 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 8329 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 8330 </div> 8331 </div> 8332
8332<script type="text/javascript"> 8333 document.getElementById("filter-id-incstores_pim_ships_from_region").style.display = "none"; 8334 </script>
8334 8335 </div> 8336 </div> 8337 </template> 8338 </div> 8339 <div id="filter-id-incstores_pim_lf_shipping_speed" class="filter-option card my-4 px-0" x-data="{ open: false }"> 8340 <div 8341 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 8342 :class="{ 'border-b pb-4': open }" 8343 @click="open = !open"> 8344 <span class="title text-md md:text-lg font-semibold"> 8345 Shipping Speed </span> 8346 <span class="py-1 px-1 rounded border border-container"> 8347 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 8348 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 8349<title>chevron-down</title></svg> 8350 </span> 8351 </div> 8352 <template x-if="open"> 8353 <div class="filter-options-content pt-2"> 8354 8355<div data-mst-nav-filter="incstores_pim_lf_shipping_speedA404640A" data-mst-nav-cache-key="404640" data-mst-attribute="incstores_pim_lf_shipping_speed" class="mst-nav__label" x-data="initLabelRenderer()"> 8356 <div 8357 data-holder="alphabetical" 8358 x-data="initAlphabeticalIndex(0, 5)" 8359 x-init="init()" 8360 ></div> 8361 8362 <ol class="items"> 8363 8364 8365 <li data-element="filter" 8366 data-hidden="false" 8367 data-search-hidden="false" 8368 data-letter-hidden="false" 8369 class="item mst-nav__label-item _mode-checkbox " 8370 data-value="117056" 8371 @click="handleClick" 8372 > 8373 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_speed=117056&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8374 rel="nofollow" 8375 aria-label="Ships in 1-2 Business Days" 8376 > 8377 8378 <input id="m_incstores_pim_lf_shipping_speed[117056]" type="checkbox" /> 8379 8380 <label for="m_incstores_pim_lf_shipping_speed[117056]"> 8381 <span class="mst-nav__label-item__label">Ships in 1-2 Business Days</span> 8382 <span class="count text-primary">8</span> 8383 </label> 8384 </a> 8385 </li> 8386 8387 8388 <li data-element="filter" 8389 data-hidden="false" 8390 data-search-hidden="false" 8391 data-letter-hidden="false" 8392 class="item mst-nav__label-item _mode-checkbox " 8393 data-value="117053" 8394 @click="handleClick" 8395 > 8396 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_speed=117053&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8397 rel="nofollow" 8398 aria-label="Ships in 3-5 Business Days" 8399 > 8400 8401 <input id="m_incstores_pim_lf_shipping_speed[117053]" type="checkbox" /> 8402 8403 <label for="m_incstores_pim_lf_shipping_speed[117053]"> 8404 <span class="mst-nav__label-item__label">Ships in 3-5 Business Days</span>
8405 <span class="count text-primary">27</span> 8406 </label> 8407 </a> 8408 </li> 8409 8410 8411 <li data-element="filter" 8412 data-hidden="false" 8413 data-search-hidden="false" 8414 data-letter-hidden="false" 8415 class="item mst-nav__label-item _mode-checkbox " 8416 data-value="117050" 8417 @click="handleClick" 8418 > 8419 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_speed=117050&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8420 rel="nofollow" 8421 aria-label="Made to Order (6+ Business Days)" 8422 > 8423 8424 <input id="m_incstores_pim_lf_shipping_speed[117050]" type="checkbox" /> 8425 8426 <label for="m_incstores_pim_lf_shipping_speed[117050]"> 8427 <span class="mst-nav__label-item__label">Made to Order (6+ Business Days)</span> 8428 <span class="count text-primary">34</span> 8429 </label> 8430 </a> 8431 </li> 8432 8433 8434 8435 </ol> 8436 8437 <div class="hidden mst-clear-options-link" data-checked-count="0"> 8438 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 8439 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 8440 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 8441 </div> 8442 </div> 8443 </div> 8444 </div> 8445 </template> 8446 </div> 8447 <div id="filter-id-incstores_pim_category_filters" class="filter-option card my-4 px-0" x-data="{ open: false }"> 8448 <div 8449 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 8450 :class="{ 'border-b pb-4': open }" 8451 @click="open = !open"> 8452 <span class="title text-md md:text-lg font-semibold"> 8453 Category </span> 8454 <span class="py-1 px-1 rounded border border-container"> 8455 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 8456 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 8457<title>chevron-down</title></svg> 8458 </span> 8459 </div> 8460 <template x-if="open"> 8461 <div class="filter-options-content pt-2"> 8462 8463<div data-mst-nav-filter="incstores_pim_category_filtersA555913A" data-mst-nav-cache-key="555913" data-mst-attribute="incstores_pim_category_filters" class="mst-nav__label" x-data="initLabelRenderer()"> 8464 <div 8465 data-holder="alphabetical" 8466 x-data="initAlphabeticalIndex(0, 5)" 8467 x-init="init()" 8468 ></div> 8469 8470 <ol class="items"> 8471 8472 8473 <li data-element="filter" 8474 data-hidden="false" 8475 data-search-hidden="false" 8476 data-letter-hidden="false" 8477 class="item mst-nav__label-item _mode-checkbox " 8478 data-value="116802" 8479 @click="handleClick" 8480 > 8481 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116802&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8482 rel="nofollow" 8483 aria-label="Foam Tiles" 8484 > 8485 8486 <input id="m_incstores_pim_category_filters[116802]" type="checkbox" /> 8487 8488 <label for="m_incstores_pim_category_filters[116802]">
8489 <span class="mst-nav__label-item__label">Foam Tiles</span> 8490 <span class="count text-primary">1</span> 8491 </label> 8492 </a> 8493 </li> 8494 8495 8496 <li data-element="filter" 8497 data-hidden="false" 8498 data-search-hidden="false" 8499 data-letter-hidden="false" 8500 class="item mst-nav__label-item _mode-checkbox " 8501 data-value="116814" 8502 @click="handleClick" 8503 > 8504 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116814&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8505 rel="nofollow" 8506 aria-label="Playground Flooring" 8507 > 8508 8509 <input id="m_incstores_pim_category_filters[116814]" type="checkbox" /> 8510 8511 <label for="m_incstores_pim_category_filters[116814]"> 8512 <span class="mst-nav__label-item__label">Playground Flooring</span> 8513 <span class="count text-primary">13</span> 8514 </label> 8515 </a> 8516 </li> 8517 8518 8519 <li data-element="filter" 8520 data-hidden="false" 8521 data-search-hidden="false" 8522 data-letter-hidden="false" 8523 class="item mst-nav__label-item _mode-checkbox " 8524 data-value="116781" 8525 @click="handleClick" 8526 > 8527 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116781&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8528 rel="nofollow" 8529 aria-label="Product Accessories" 8530 > 8531 8532 <input id="m_incstores_pim_category_filters[116781]" type="checkbox" /> 8533 8534 <label for="m_incstores_pim_category_filters[116781]"> 8535 <span class="mst-nav__label-item__label">Product Accessories</span> 8536 <span class="count text-primary">3</span> 8537 </label> 8538 </a> 8539 </li> 8540 8541 8542 <li data-element="filter" 8543 data-hidden="false" 8544 data-search-hidden="false" 8545 data-letter-hidden="false" 8546 class="item mst-nav__label-item _mode-checkbox " 8547 data-value="116832" 8548 @click="handleClick" 8549 > 8550 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8551 rel="nofollow" 8552 aria-label="Rubber Mats" 8553 > 8554 8555 <input id="m_incstores_pim_category_filters[116832]" type="checkbox" /> 8556 8557 <label for="m_incstores_pim_category_filters[116832]"> 8558 <span class="mst-nav__label-item__label">Rubber Mats</span> 8559 <span class="count text-primary">16</span> 8560 </label> 8561 </a> 8562 </li> 8563 8564 8565 <li data-element="filter" 8566 data-hidden="false" 8567 data-search-hidden="false" 8568 data-letter-hidden="false" 8569 class="item mst-nav__label-item _mode-checkbox " 8570 data-value="116820" 8571 @click="handleClick" 8572 > 8573 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8574 rel="nofollow" 8575 aria-label="Rubber Rolls" 8576 > 8577 8578 <input id="m_incstores_pim_category_filters[116820]" type="checkbox" /> 8579 8580 <label for="m_incstores_pim_category_filters[116820]">
8581 <span class="mst-nav__label-item__label">Rubber Rolls</span> 8582 <span class="count text-primary">22</span> 8583 </label> 8584 </a> 8585 </li> 8586 8587 8588 <li data-element="filter" 8589 data-hidden="false" 8590 data-search-hidden="false" 8591 data-letter-hidden="false" 8592 class="item mst-nav__label-item _mode-checkbox " 8593 data-value="116793" 8594 @click="handleClick" 8595 > 8596 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8597 rel="nofollow" 8598 aria-label="Rubber Tiles" 8599 > 8600 8601 <input id="m_incstores_pim_category_filters[116793]" type="checkbox" /> 8602 8603 <label for="m_incstores_pim_category_filters[116793]"> 8604 <span class="mst-nav__label-item__label">Rubber Tiles</span> 8605 <span class="count text-primary">31</span> 8606 </label> 8607 </a> 8608 </li> 8609 8610 8611 <li data-element="filter" 8612 data-hidden="false" 8613 data-search-hidden="false" 8614 data-letter-hidden="false" 8615 class="item mst-nav__label-item _mode-checkbox " 8616 data-value="116849" 8617 @click="handleClick" 8618 > 8619 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116849&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8620 rel="nofollow" 8621 aria-label="Rubber Flooring" 8622 > 8623 8624 <input id="m_incstores_pim_category_filters[116849]" type="checkbox" /> 8625 8626 <label for="m_incstores_pim_category_filters[116849]"> 8627 <span class="mst-nav__label-item__label">Rubber Flooring</span> 8628 <span class="count text-primary">64</span> 8629 </label> 8630 </a> 8631 </li> 8632 8633 8634 8635 </ol> 8636 8637 <div class="hidden mst-clear-options-link" data-checked-count="0"> 8638 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 8639 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 8640 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 8641 </div> 8642 </div> 8643 </div> 8644 </div> 8645 </template> 8646 </div> 8647 <div id="filter-id-incstores_pim_primary_color_filter" class="filter-option card my-4 px-0" x-data="{ open: false }"> 8648 <div 8649 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 8650 :class="{ 'border-b pb-4': open }" 8651 @click="open = !open"> 8652 <span class="title text-md md:text-lg font-semibold"> 8653 Color </span>
8654 <span class="py-1 px-1 rounded border border-container"> 8655 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 8656 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 8657<title>chevron-down</title></svg> 8658 </span> 8659 </div> 8660 <template x-if="open"> 8661 <div class="filter-options-content pt-2"> 8662 8663<div class="swatch-attribute swatch-layered incstores_pim_primary_color_filter mst-nav__swatch" 8664 attribute-code="incstores_pim_primary_color_filter" 8665 attribute-id="4356" 8666 x-data="{...initLabelRenderer(), ...initSwatchRenderer()}" 8667> 8668 <div class="swatch-attribute-options clearfix" data-mst-nav-filter="incstores_pim_primary_color_filter"> 8669 <div data-holder="alphabetical" 8670 x-data="initAlphabeticalIndex(0, 5)" 8671 x-init="init()" 8672 ></div> 8673 8674 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116433&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8675 data-element="filter" 8676 data-hidden="false" 8677 data-search-hidden="false" 8678 data-letter-hidden="false" 8679 data-value="116433" 8680 rel="nofollow" 8681 aria-label="Red" 8682 @click="handleClick" 8683 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8684 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8685 :style="getSwatchBackgroundStyle( 8686 '1', 8687 '#d42020', 8688 '' 8689 )" 8690 @mouseenter.self="activeTooltipItem = { 8691 attribute: '#d42020', 8692 type: '1', 8693 id: '116433', 8694 label: 'Red', 8695 thumb: '', 8696 value: '#d42020' 8697 }; tooltipPositionElement = $event.target;"
8698 @mouseleave.self="activeTooltipItem = false" 8699 > 8700 </a> 8701 8702 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116406&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8703 data-element="filter" 8704 data-hidden="false" 8705 data-search-hidden="false" 8706 data-letter-hidden="false" 8707 data-value="116406" 8708 rel="nofollow" 8709 aria-label="Orange" 8710 @click="handleClick" 8711 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8712 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8713 :style="getSwatchBackgroundStyle( 8714 '1', 8715 '#fc932a', 8716 '' 8717 )" 8718 @mouseenter.self="activeTooltipItem = { 8719 attribute: '#fc932a', 8720 type: '1', 8721 id: '116406', 8722 label: 'Orange', 8723 thumb: '', 8724 value: '#fc932a' 8725 }; tooltipPositionElement = $event.target;"
8726 @mouseleave.self="activeTooltipItem = false" 8727 > 8728 </a> 8729 8730 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116421&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8731 data-element="filter" 8732 data-hidden="false" 8733 data-search-hidden="false" 8734 data-letter-hidden="false" 8735 data-value="116421" 8736 rel="nofollow" 8737 aria-label="Yellow" 8738 @click="handleClick" 8739 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8740 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8741 :style="getSwatchBackgroundStyle( 8742 '1', 8743 '#f5ee25', 8744 '' 8745 )" 8746 @mouseenter.self="activeTooltipItem = { 8747 attribute: '#f5ee25', 8748 type: '1', 8749 id: '116421', 8750 label: 'Yellow', 8751 thumb: '', 8752 value: '#f5ee25' 8753 }; tooltipPositionElement = $event.target;"
8754 @mouseleave.self="activeTooltipItem = false" 8755 > 8756 </a> 8757 8758 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116439&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8759 data-element="filter" 8760 data-hidden="false" 8761 data-search-hidden="false" 8762 data-letter-hidden="false" 8763 data-value="116439" 8764 rel="nofollow" 8765 aria-label="Green" 8766 @click="handleClick" 8767 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8768 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8769 :style="getSwatchBackgroundStyle( 8770 '1', 8771 '#20e62a', 8772 '' 8773 )" 8774 @mouseenter.self="activeTooltipItem = { 8775 attribute: '#20e62a', 8776 type: '1', 8777 id: '116439', 8778 label: 'Green', 8779 thumb: '', 8780 value: '#20e62a' 8781 }; tooltipPositionElement = $event.target;"
8782 @mouseleave.self="activeTooltipItem = false" 8783 > 8784 </a> 8785 8786 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116442&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8787 data-element="filter" 8788 data-hidden="false" 8789 data-search-hidden="false" 8790 data-letter-hidden="false" 8791 data-value="116442" 8792 rel="nofollow" 8793 aria-label="Blue" 8794 @click="handleClick" 8795 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8796 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8797 :style="getSwatchBackgroundStyle( 8798 '1', 8799 '#175fbd', 8800 '' 8801 )" 8802 @mouseenter.self="activeTooltipItem = { 8803 attribute: '#175fbd', 8804 type: '1', 8805 id: '116442', 8806 label: 'Blue', 8807 thumb: '', 8808 value: '#175fbd' 8809 }; tooltipPositionElement = $event.target;"
8810 @mouseleave.self="activeTooltipItem = false" 8811 > 8812 </a> 8813 8814 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116400&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8815 data-element="filter" 8816 data-hidden="false" 8817 data-search-hidden="false" 8818 data-letter-hidden="false" 8819 data-value="116400" 8820 rel="nofollow" 8821 aria-label="Purple" 8822 @click="handleClick" 8823 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8824 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8825 :style="getSwatchBackgroundStyle( 8826 '1', 8827 '#914091', 8828 '' 8829 )" 8830 @mouseenter.self="activeTooltipItem = { 8831 attribute: '#914091', 8832 type: '1', 8833 id: '116400', 8834 label: 'Purple', 8835 thumb: '', 8836 value: '#914091' 8837 }; tooltipPositionElement = $event.target;"
8838 @mouseleave.self="activeTooltipItem = false" 8839 > 8840 </a> 8841 8842 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116415&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8843 data-element="filter" 8844 data-hidden="false" 8845 data-search-hidden="false" 8846 data-letter-hidden="false" 8847 data-value="116415" 8848 rel="nofollow" 8849 aria-label="White" 8850 @click="handleClick" 8851 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8852 :class="{ 'w-6 h-6' : getSwatchType('2') !== 'text' }" 8853 :style="getSwatchBackgroundStyle( 8854 '2', 8855 '/h/o/horizontal_rectangle_black_bordered-400x300.jpg', 8856 'https://www.flooringinc.com/media/attribute/swatch/swatch_image/30x20/h/o/horizontal_rectangle_black_bordered-400x300.jpg' 8857 )" 8858 @mouseenter.self="activeTooltipItem = { 8859 attribute: '/h/o/horizontal_rectangle_black_bordered-400x300.jpg', 8860 type: '2', 8861 id: '116415', 8862 label: 'White', 8863 thumb: 'https://www.flooringinc.com/media/attribute/swatch/swatch_thumb/110x90/h/o/horizontal_rectangle_black_bordered-400x300.jpg', 8864 value: '/h/o/horizontal_rectangle_black_bordered-400x300.jpg' 8865 }; tooltipPositionElement = $event.target;"
8866 @mouseleave.self="activeTooltipItem = false" 8867 > 8868 </a> 8869 8870 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116418&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8871 data-element="filter" 8872 data-hidden="false" 8873 data-search-hidden="false" 8874 data-letter-hidden="false" 8875 data-value="116418" 8876 rel="nofollow" 8877 aria-label="Black" 8878 @click="handleClick" 8879 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8880 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8881 :style="getSwatchBackgroundStyle( 8882 '1', 8883 '#030303', 8884 '' 8885 )" 8886 @mouseenter.self="activeTooltipItem = { 8887 attribute: '#030303', 8888 type: '1', 8889 id: '116418', 8890 label: 'Black', 8891 thumb: '', 8892 value: '#030303' 8893 }; tooltipPositionElement = $event.target;"
8894 @mouseleave.self="activeTooltipItem = false" 8895 > 8896 </a> 8897 8898 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116436&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8899 data-element="filter" 8900 data-hidden="false" 8901 data-search-hidden="false" 8902 data-letter-hidden="false" 8903 data-value="116436" 8904 rel="nofollow" 8905 aria-label="Assorted" 8906 @click="handleClick" 8907 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8908 :class="{ 'w-6 h-6' : getSwatchType('2') !== 'text' }" 8909 :style="getSwatchBackgroundStyle( 8910 '2', 8911 '/a/s/assorted.png', 8912 'https://www.flooringinc.com/media/attribute/swatch/swatch_image/30x20/a/s/assorted.png' 8913 )" 8914 @mouseenter.self="activeTooltipItem = { 8915 attribute: '/a/s/assorted.png', 8916 type: '2', 8917 id: '116436', 8918 label: 'Assorted', 8919 thumb: 'https://www.flooringinc.com/media/attribute/swatch/swatch_thumb/110x90/a/s/assorted.png', 8920 value: '/a/s/assorted.png' 8921 }; tooltipPositionElement = $event.target;"
8922 @mouseleave.self="activeTooltipItem = false" 8923 > 8924 </a> 8925 8926 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116427&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8927 data-element="filter" 8928 data-hidden="false" 8929 data-search-hidden="false" 8930 data-letter-hidden="false" 8931 data-value="116427" 8932 rel="nofollow" 8933 aria-label="Rainbow" 8934 @click="handleClick" 8935 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8936 :class="{ 'w-6 h-6' : getSwatchType('2') !== 'text' }" 8937 :style="getSwatchBackgroundStyle( 8938 '2', 8939 '/r/a/rainbow-waves-background-free-vector.jpg', 8940 'https://www.flooringinc.com/media/attribute/swatch/swatch_image/30x20/r/a/rainbow-waves-background-free-vector.jpg' 8941 )" 8942 @mouseenter.self="activeTooltipItem = { 8943 attribute: '/r/a/rainbow-waves-background-free-vector.jpg', 8944 type: '2', 8945 id: '116427', 8946 label: 'Rainbow', 8947 thumb: 'https://www.flooringinc.com/media/attribute/swatch/swatch_thumb/110x90/r/a/rainbow-waves-background-free-vector.jpg', 8948 value: '/r/a/rainbow-waves-background-free-vector.jpg' 8949 }; tooltipPositionElement = $event.target;"
8950 @mouseleave.self="activeTooltipItem = false" 8951 > 8952 </a> 8953 8954 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116412&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8955 data-element="filter" 8956 data-hidden="false" 8957 data-search-hidden="false" 8958 data-letter-hidden="false" 8959 data-value="116412" 8960 rel="nofollow" 8961 aria-label="Confetti" 8962 @click="handleClick" 8963 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8964 :class="{ 'w-6 h-6' : getSwatchType('2') !== 'text' }" 8965 :style="getSwatchBackgroundStyle( 8966 '2', 8967 '/c/o/confetti.jpg', 8968 'https://www.flooringinc.com/media/attribute/swatch/swatch_image/30x20/c/o/confetti.jpg' 8969 )" 8970 @mouseenter.self="activeTooltipItem = { 8971 attribute: '/c/o/confetti.jpg', 8972 type: '2', 8973 id: '116412', 8974 label: 'Confetti', 8975 thumb: 'https://www.flooringinc.com/media/attribute/swatch/swatch_thumb/110x90/c/o/confetti.jpg', 8976 value: '/c/o/confetti.jpg' 8977 }; tooltipPositionElement = $event.target;"
8978 @mouseleave.self="activeTooltipItem = false" 8979 > 8980 </a> 8981 8982 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116397&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 8983 data-element="filter" 8984 data-hidden="false" 8985 data-search-hidden="false" 8986 data-letter-hidden="false" 8987 data-value="116397" 8988 rel="nofollow" 8989 aria-label="Gray" 8990 @click="handleClick" 8991 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 8992 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 8993 :style="getSwatchBackgroundStyle( 8994 '1', 8995 '#78776f', 8996 '' 8997 )" 8998 @mouseenter.self="activeTooltipItem = { 8999 attribute: '#78776f', 9000 type: '1', 9001 id: '116397', 9002 label: 'Gray', 9003 thumb: '', 9004 value: '#78776f' 9005 }; tooltipPositionElement = $event.target;"
9006 @mouseleave.self="activeTooltipItem = false" 9007 > 9008 </a> 9009 9010 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116424&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9011 data-element="filter" 9012 data-hidden="false" 9013 data-search-hidden="false" 9014 data-letter-hidden="false" 9015 data-value="116424" 9016 rel="nofollow" 9017 aria-label="Brown/Tan" 9018 @click="handleClick" 9019 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 9020 :class="{ 'w-6 h-6' : getSwatchType('1') !== 'text' }" 9021 :style="getSwatchBackgroundStyle( 9022 '1', 9023 '#8c651e', 9024 '' 9025 )" 9026 @mouseenter.self="activeTooltipItem = { 9027 attribute: '#8c651e', 9028 type: '1', 9029 id: '116424', 9030 label: 'Brown/Tan', 9031 thumb: '', 9032 value: '#8c651e' 9033 }; tooltipPositionElement = $event.target;"
9034 @mouseleave.self="activeTooltipItem = false" 9035 > 9036 </a> 9037 9038 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_primary_color_filter=116493&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9039 data-element="filter" 9040 data-hidden="false" 9041 data-search-hidden="false" 9042 data-letter-hidden="false" 9043 data-value="116493" 9044 rel="nofollow" 9045 aria-label="Multi" 9046 @click="handleClick" 9047 class="swatch-option-link-layered swatch-option-link-layered swatch-option border-2 cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker" 9048 :class="{ 'w-6 h-6' : getSwatchType('2') !== 'text' }" 9049 :style="getSwatchBackgroundStyle( 9050 '2', 9051 '/m/u/multi.png', 9052 'https://www.flooringinc.com/media/attribute/swatch/swatch_image/30x20/m/u/multi.png' 9053 )" 9054 @mouseenter.self="activeTooltipItem = { 9055 attribute: '/m/u/multi.png', 9056 type: '2', 9057 id: '116493', 9058 label: 'Multi', 9059 thumb: 'https://www.flooringinc.com/media/attribute/swatch/swatch_thumb/110x90/m/u/multi.png', 9060 value: '/m/u/multi.png' 9061 }; tooltipPositionElement = $event.target;"
9062 @mouseleave.self="activeTooltipItem = false" 9063 > 9064 </a> 9065 </div> 9066 <template x-if="isTooltipVisible()"> 9067 <div class="absolute" 9068 :style="getTooltipPosition()" 9069 > 9070 <div class="shadow-lg"> 9071 <div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-sm leading-tight text-black 9072 transform -translate-x-1/2 -translate-y-full bg-white rounded-lg shadow-lg text-center" 9073 > 9074 <template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)"> 9075 <div class="inline-block border shadow-sm border-container" 9076 :style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)" 9077 ></div> 9078 </template> 9079 <span class="mx-2 text-lg font-semibold whitespace-nowrap subtitle" 9080 x-html="getTooltipLabel()" 9081 ></span> 9082 </div> 9083 <svg class="absolute z-10 w-8 h-8 text-white transform -translate-x-1/5 9084 -translate-y-8 fill-current stroke-current" 9085 width="12" 9086 height="12" 9087 > 9088 <rect x="12" y="-12" width="12" height="12" transform="rotate(45)" class="shadow-xl" /> 9089 </svg> 9090 </div> 9091 </div> 9092</template> 9093 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9094 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9095 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9096 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" rel="nofollow" data-element="filter">✕</a> 9097 </div> 9098 </div> 9099</div> 9100 9101 </div> 9102 </template> 9103 </div> 9104 <div id="filter-id-incstores_pim_lf_shipping_program" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9105 <div 9106 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9107 :class="{ 'border-b pb-4': open }" 9108 @click="open = !open"> 9109 <span class="title text-md md:text-lg font-semibold"> 9110 Ships </span> 9111 <span class="py-1 px-1 rounded border border-container"> 9112 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9113 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9114<title>chevron-down</title></svg> 9115 </span> 9116 </div> 9117 <template x-if="open"> 9118 <div class="filter-options-content pt-2"> 9119 9120<div data-mst-nav-filter="incstores_pim_lf_shipping_programA791808A" data-mst-nav-cache-key="791808" data-mst-attribute="incstores_pim_lf_shipping_program" class="mst-nav__label" x-data="initLabelRenderer()"> 9121 <div 9122 data-holder="alphabetical" 9123 x-data="initAlphabeticalIndex(0, 5)" 9124 x-init="init()" 9125 ></div> 9126 9127 <ol class="items"> 9128 9129 9130 <li data-element="filter" 9131 data-hidden="false" 9132 data-search-hidden="false" 9133 data-letter-hidden="false" 9134 class="item mst-nav__label-item _mode-checkbox " 9135 data-value="116490" 9136 @click="handleClick" 9137 > 9138 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_program=116490&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9139 rel="nofollow" 9140 aria-label="Next Day" 9141 > 9142 9143 <input id="m_incstores_pim_lf_shipping_program[116490]" type="checkbox" /> 9144 9145 <label for="m_incstores_pim_lf_shipping_program[116490]">
9146 <span class="mst-nav__label-item__label">Next Day</span> 9147 <span class="count text-primary">1</span> 9148 </label> 9149 </a> 9150 </li> 9151 9152 9153 <li data-element="filter" 9154 data-hidden="false" 9155 data-search-hidden="false" 9156 data-letter-hidden="false" 9157 class="item mst-nav__label-item _mode-checkbox " 9158 data-value="116487" 9159 @click="handleClick" 9160 > 9161 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_program=116487&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9162 rel="nofollow" 9163 aria-label="Quick Ship" 9164 > 9165 9166 <input id="m_incstores_pim_lf_shipping_program[116487]" type="checkbox" /> 9167 9168 <label for="m_incstores_pim_lf_shipping_program[116487]"> 9169 <span class="mst-nav__label-item__label">Quick Ship</span> 9170 <span class="count text-primary">21</span> 9171 </label> 9172 </a> 9173 </li> 9174 9175 9176 <li data-element="filter" 9177 data-hidden="false" 9178 data-search-hidden="false" 9179 data-letter-hidden="false" 9180 class="item mst-nav__label-item _mode-checkbox " 9181 data-value="116484" 9182 @click="handleClick" 9183 > 9184 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_shipping_program=116484&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9185 rel="nofollow" 9186 aria-label="Free Shipping" 9187 > 9188 9189 <input id="m_incstores_pim_lf_shipping_program[116484]" type="checkbox" /> 9190 9191 <label for="m_incstores_pim_lf_shipping_program[116484]"> 9192 <span class="mst-nav__label-item__label">Free Shipping</span> 9193 <span class="count text-primary">4</span> 9194 </label> 9195 </a> 9196 </li> 9197 9198 9199 9200 </ol> 9201 9202 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9203 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9204 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9205 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9206 </div> 9207 </div> 9208 </div> 9209 </div> 9210 </template> 9211 </div> 9212 <div id="filter-id-incstores_pim_tf_made_in_usa" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9213 <div 9214 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9215 :class="{ 'border-b pb-4': open }" 9216 @click="open = !open"> 9217 <span class="title text-md md:text-lg font-semibold"> 9218 Made In USA </span> 9219 <span class="py-1 px-1 rounded border border-container"> 9220 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9221 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9222<title>chevron-down</title></svg> 9223 </span> 9224 </div> 9225 <template x-if="open"> 9226 <div class="filter-options-content pt-2"> 9227 9228<div data-mst-nav-filter="incstores_pim_tf_made_in_usaA612591A" data-mst-nav-cache-key="612591" data-mst-attribute="incstores_pim_tf_made_in_usa" class="mst-nav__label" x-data="initLabelRenderer()"> 9229 <div 9230 data-holder="alphabetical" 9231 x-data="initAlphabeticalIndex(0, 5)" 9232 x-init="init()" 9233 ></div> 9234 9235 <ol class="items"> 9236 9237 9238 <li data-element="filter" 9239 data-hidden="false" 9240 data-search-hidden="false" 9241 data-letter-hidden="false" 9242 class="item mst-nav__label-item _mode-checkbox " 9243 data-value="116382" 9244 @click="handleClick" 9245 > 9246 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_made_in_usa=116382&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9247 rel="nofollow" 9248 aria-label="Made in USA" 9249 > 9250 9251 <input id="m_incstores_pim_tf_made_in_usa[116382]" type="checkbox" /> 9252 9253 <label for="m_incstores_pim_tf_made_in_usa[116382]">
9254 <span class="mst-nav__label-item__label">Made in USA</span> 9255 <span class="count text-primary">76</span> 9256 </label> 9257 </a> 9258 </li> 9259 9260 9261 9262 </ol> 9263 9264 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9265 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9266 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9267 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9268 </div> 9269 </div> 9270 </div> 9271 </div> 9272 </template> 9273 </div> 9274 <div id="filter-id-incstores_pim_tf_rubber_thickness" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9275 <div 9276 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9277 :class="{ 'border-b pb-4': open }" 9278 @click="open = !open"> 9279 <span class="title text-md md:text-lg font-semibold"> 9280 Rubber Thickness </span> 9281 <span class="py-1 px-1 rounded border border-container"> 9282 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9283 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9284<title>chevron-down</title></svg> 9285 </span> 9286 </div> 9287 <template x-if="open"> 9288 <div class="filter-options-content pt-2"> 9289 9290<div data-mst-nav-filter="incstores_pim_tf_rubber_thicknessA587373A" data-mst-nav-cache-key="587373" data-mst-attribute="incstores_pim_tf_rubber_thickness" class="mst-nav__label" x-data="initLabelRenderer()"> 9291 <div 9292 data-holder="alphabetical" 9293 x-data="initAlphabeticalIndex(0, 5)" 9294 x-init="init()" 9295 ></div> 9296 9297 <ol class="items"> 9298 9299 9300 <li data-element="filter" 9301 data-hidden="false" 9302 data-search-hidden="false" 9303 data-letter-hidden="false" 9304 class="item mst-nav__label-item _mode-checkbox " 9305 data-value="116295" 9306 @click="handleClick" 9307 > 9308 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116295&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9309 rel="nofollow" 9310 aria-label="1/8" (~3mm)" 9311 > 9312 9313 <input id="m_incstores_pim_tf_rubber_thickness[116295]" type="checkbox" /> 9314 9315 <label for="m_incstores_pim_tf_rubber_thickness[116295]"> 9316 <span class="mst-nav__label-item__label">1/8" (~3mm)</span> 9317 <span class="count text-primary">5</span> 9318 </label> 9319 </a> 9320 </li> 9321 9322 9323 <li data-element="filter" 9324 data-hidden="false" 9325 data-search-hidden="false" 9326 data-letter-hidden="false" 9327 class="item mst-nav__label-item _mode-checkbox " 9328 data-value="116313" 9329 @click="handleClick" 9330 > 9331 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116313&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9332 rel="nofollow" 9333 aria-label="1/4" (~6mm)" 9334 > 9335 9336 <input id="m_incstores_pim_tf_rubber_thickness[116313]" type="checkbox" /> 9337 9338 <label for="m_incstores_pim_tf_rubber_thickness[116313]">
9339 <span class="mst-nav__label-item__label">1/4" (~6mm)</span> 9340 <span class="count text-primary">17</span> 9341 </label> 9342 </a> 9343 </li> 9344 9345 9346 <li data-element="filter" 9347 data-hidden="false" 9348 data-search-hidden="false" 9349 data-letter-hidden="false" 9350 class="item mst-nav__label-item _mode-checkbox " 9351 data-value="116304" 9352 @click="handleClick" 9353 > 9354 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116304&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9355 rel="nofollow" 9356 aria-label="5/16" (8mm)" 9357 > 9358 9359 <input id="m_incstores_pim_tf_rubber_thickness[116304]" type="checkbox" /> 9360 9361 <label for="m_incstores_pim_tf_rubber_thickness[116304]"> 9362 <span class="mst-nav__label-item__label">5/16" (8mm)</span> 9363 <span class="count text-primary">21</span> 9364 </label> 9365 </a> 9366 </li> 9367 9368 9369 <li data-element="filter" 9370 data-hidden="false" 9371 data-search-hidden="false" 9372 data-letter-hidden="false" 9373 class="item mst-nav__label-item _mode-checkbox " 9374 data-value="116310" 9375 @click="handleClick" 9376 > 9377 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116310&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9378 rel="nofollow" 9379 aria-label="3/8" (~9mm)" 9380 > 9381 9382 <input id="m_incstores_pim_tf_rubber_thickness[116310]" type="checkbox" /> 9383 9384 <label for="m_incstores_pim_tf_rubber_thickness[116310]"> 9385 <span class="mst-nav__label-item__label">3/8" (~9mm)</span> 9386 <span class="count text-primary">17</span> 9387 </label> 9388 </a> 9389 </li> 9390 9391 9392 <li data-element="filter" 9393 data-hidden="false" 9394 data-search-hidden="false" 9395 data-letter-hidden="false" 9396 class="item mst-nav__label-item _mode-checkbox " 9397 data-value="116298" 9398 @click="handleClick" 9399 > 9400 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116298&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9401 rel="nofollow" 9402 aria-label="1/2" (~12mm)" 9403 > 9404 9405 <input id="m_incstores_pim_tf_rubber_thickness[116298]" type="checkbox" /> 9406 9407 <label for="m_incstores_pim_tf_rubber_thickness[116298]"> 9408 <span class="mst-nav__label-item__label">1/2" (~12mm)</span> 9409 <span class="count text-primary">16</span> 9410 </label> 9411 </a> 9412 </li> 9413 9414 9415 <li data-element="filter" 9416 data-hidden="false" 9417 data-search-hidden="false" 9418 data-letter-hidden="false" 9419 class="item mst-nav__label-item _mode-checkbox " 9420 data-value="116307" 9421 @click="handleClick" 9422 > 9423 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116307&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9424 rel="nofollow" 9425 aria-label="3/4" (19mm)" 9426 > 9427 9428 <input id="m_incstores_pim_tf_rubber_thickness[116307]" type="checkbox" /> 9429 9430 <label for="m_incstores_pim_tf_rubber_thickness[116307]">
9431 <span class="mst-nav__label-item__label">3/4" (19mm)</span> 9432 <span class="count text-primary">13</span> 9433 </label> 9434 </a> 9435 </li> 9436 9437 9438 <li data-element="filter" 9439 data-hidden="false" 9440 data-search-hidden="false" 9441 data-letter-hidden="false" 9442 class="item mst-nav__label-item _mode-checkbox " 9443 data-value="116301" 9444 @click="handleClick" 9445 > 9446 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_thickness=116301&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9447 rel="nofollow" 9448 aria-label="1" (~25mm)" 9449 > 9450 9451 <input id="m_incstores_pim_tf_rubber_thickness[116301]" type="checkbox" /> 9452 9453 <label for="m_incstores_pim_tf_rubber_thickness[116301]"> 9454 <span class="mst-nav__label-item__label">1" (~25mm)</span> 9455 <span class="count text-primary">4</span> 9456 </label> 9457 </a> 9458 </li> 9459 9460 9461 9462 </ol> 9463 9464 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9465 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9466 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9467 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9468 </div> 9469 </div> 9470 </div> 9471 </div> 9472 </template> 9473 </div> 9474 <div id="filter-id-incstores_pim_tf_rubber_format" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9475 <div 9476 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9477 :class="{ 'border-b pb-4': open }" 9478 @click="open = !open"> 9479 <span class="title text-md md:text-lg font-semibold"> 9480 Product Type </span> 9481 <span class="py-1 px-1 rounded border border-container"> 9482 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9483 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9484<title>chevron-down</title></svg> 9485 </span> 9486 </div> 9487 <template x-if="open"> 9488 <div class="filter-options-content pt-2"> 9489 9490<div data-mst-nav-filter="incstores_pim_tf_rubber_formatA747845A" data-mst-nav-cache-key="747845" data-mst-attribute="incstores_pim_tf_rubber_format" class="mst-nav__label" x-data="initLabelRenderer()"> 9491 <div 9492 data-holder="alphabetical" 9493 x-data="initAlphabeticalIndex(0, 5)" 9494 x-init="init()" 9495 ></div> 9496 9497 <ol class="items"> 9498 9499 9500 <li data-element="filter" 9501 data-hidden="false" 9502 data-search-hidden="false" 9503 data-letter-hidden="false" 9504 class="item mst-nav__label-item _mode-checkbox " 9505 data-value="116217"
9506 @click="handleClick" 9507 > 9508 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116217&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9509 rel="nofollow" 9510 aria-label="Playground Mats" 9511 > 9512 9513 <input id="m_incstores_pim_tf_rubber_format[116217]" type="checkbox" /> 9514 9515 <label for="m_incstores_pim_tf_rubber_format[116217]"> 9516 <span class="mst-nav__label-item__label">Playground Mats</span> 9517 <span class="count text-primary">1</span> 9518 </label> 9519 </a> 9520 </li> 9521 9522 9523 <li data-element="filter" 9524 data-hidden="false" 9525 data-search-hidden="false" 9526 data-letter-hidden="false" 9527 class="item mst-nav__label-item _mode-checkbox " 9528 data-value="116223" 9529 @click="handleClick" 9530 > 9531 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116223&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9532 rel="nofollow" 9533 aria-label="Playground Tiles" 9534 > 9535 9536 <input id="m_incstores_pim_tf_rubber_format[116223]" type="checkbox" /> 9537 9538 <label for="m_incstores_pim_tf_rubber_format[116223]"> 9539 <span class="mst-nav__label-item__label">Playground Tiles</span> 9540 <span class="count text-primary">7</span> 9541 </label> 9542 </a> 9543 </li> 9544 9545 9546 <li data-element="filter" 9547 data-hidden="false" 9548 data-search-hidden="false" 9549 data-letter-hidden="false" 9550 class="item mst-nav__label-item _mode-checkbox " 9551 data-value="116211" 9552 @click="handleClick" 9553 > 9554 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116211&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9555 rel="nofollow" 9556 aria-label="Rubber Mats" 9557 > 9558 9559 <input id="m_incstores_pim_tf_rubber_format[116211]" type="checkbox" /> 9560 9561 <label for="m_incstores_pim_tf_rubber_format[116211]"> 9562 <span class="mst-nav__label-item__label">Rubber Mats</span> 9563 <span class="count text-primary">15</span> 9564 </label> 9565 </a> 9566 </li> 9567 9568 9569 <li data-element="filter" 9570 data-hidden="false" 9571 data-search-hidden="false" 9572 data-letter-hidden="false" 9573 class="item mst-nav__label-item _mode-checkbox " 9574 data-value="116220" 9575 @click="handleClick" 9576 > 9577 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116220&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9578 rel="nofollow" 9579 aria-label="Rubber Mulch" 9580 > 9581 9582 <input id="m_incstores_pim_tf_rubber_format[116220]" type="checkbox" /> 9583 9584 <label for="m_incstores_pim_tf_rubber_format[116220]">
9585 <span class="mst-nav__label-item__label">Rubber Mulch</span> 9586 <span class="count text-primary">3</span> 9587 </label> 9588 </a> 9589 </li> 9590 9591 9592 <li data-element="filter" 9593 data-hidden="false" 9594 data-search-hidden="false" 9595 data-letter-hidden="false" 9596 class="item mst-nav__label-item _mode-checkbox " 9597 data-value="116214" 9598 @click="handleClick" 9599 > 9600 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116214&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9601 rel="nofollow" 9602 aria-label="Rubber Rolls" 9603 > 9604 9605 <input id="m_incstores_pim_tf_rubber_format[116214]" type="checkbox" /> 9606 9607 <label for="m_incstores_pim_tf_rubber_format[116214]"> 9608 <span class="mst-nav__label-item__label">Rubber Rolls</span> 9609 <span class="count text-primary">22</span> 9610 </label> 9611 </a> 9612 </li> 9613 9614 9615 <li data-element="filter" 9616 data-hidden="false" 9617 data-search-hidden="false" 9618 data-letter-hidden="false" 9619 class="item mst-nav__label-item _mode-checkbox " 9620 data-value="116226" 9621 @click="handleClick" 9622 > 9623 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116226&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9624 rel="nofollow" 9625 aria-label="Rubber Tiles" 9626 > 9627 9628 <input id="m_incstores_pim_tf_rubber_format[116226]" type="checkbox" /> 9629 9630 <label for="m_incstores_pim_tf_rubber_format[116226]"> 9631 <span class="mst-nav__label-item__label">Rubber Tiles</span> 9632 <span class="count text-primary">28</span> 9633 </label> 9634 </a> 9635 </li> 9636 9637 9638 <li data-element="filter" 9639 data-hidden="false" 9640 data-search-hidden="false" 9641 data-letter-hidden="false" 9642 class="item mst-nav__label-item _mode-checkbox " 9643 data-value="116496" 9644 @click="handleClick" 9645 > 9646 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_rubber_format=116496&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9647 rel="nofollow" 9648 aria-label="Soft Foam" 9649 > 9650 9651 <input id="m_incstores_pim_tf_rubber_format[116496]" type="checkbox" /> 9652 9653 <label for="m_incstores_pim_tf_rubber_format[116496]"> 9654 <span class="mst-nav__label-item__label">Soft Foam</span> 9655 <span class="count text-primary">1</span> 9656 </label> 9657 </a> 9658 </li> 9659 9660 9661 9662 </ol> 9663 9664 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9665 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9666 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9667 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9668 </div> 9669 </div> 9670 </div> 9671 </div> 9672 </template> 9673 </div> 9674 <div id="filter-id-incstores_pim_tf_sport" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9675 <div 9676 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9677 :class="{ 'border-b pb-4': open }" 9678 @click="open = !open">
9679 <span class="title text-md md:text-lg font-semibold"> 9680 Sport </span> 9681 <span class="py-1 px-1 rounded border border-container"> 9682 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9683 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9684<title>chevron-down</title></svg> 9685 </span> 9686 </div> 9687 <template x-if="open"> 9688 <div class="filter-options-content pt-2"> 9689 9690<div data-mst-nav-filter="incstores_pim_tf_sportA272596A" data-mst-nav-cache-key="272596" data-mst-attribute="incstores_pim_tf_sport" class="mst-nav__label" x-data="initLabelRenderer()"> 9691 <div 9692 data-holder="alphabetical" 9693 x-data="initAlphabeticalIndex(0, 5)" 9694 x-init="init()" 9695 ></div> 9696 9697 <ol class="items"> 9698 9699 9700 <li data-element="filter" 9701 data-hidden="false" 9702 data-search-hidden="false" 9703 data-letter-hidden="false" 9704 class="item mst-nav__label-item _mode-checkbox " 9705 data-value="116334" 9706 @click="handleClick" 9707 > 9708 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_sport=116334&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9709 rel="nofollow" 9710 aria-label="Basketball" 9711 > 9712 9713 <input id="m_incstores_pim_tf_sport[116334]" type="checkbox" /> 9714 9715 <label for="m_incstores_pim_tf_sport[116334]"> 9716 <span class="mst-nav__label-item__label">Basketball</span> 9717 <span class="count text-primary">1</span> 9718 </label> 9719 </a> 9720 </li> 9721 9722 9723 <li data-element="filter" 9724 data-hidden="false" 9725 data-search-hidden="false" 9726 data-letter-hidden="false" 9727 class="item mst-nav__label-item _mode-checkbox " 9728 data-value="116343" 9729 @click="handleClick" 9730 > 9731 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_sport=116343&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9732 rel="nofollow" 9733 aria-label="CrossFit" 9734 > 9735 9736 <input id="m_incstores_pim_tf_sport[116343]" type="checkbox" /> 9737 9738 <label for="m_incstores_pim_tf_sport[116343]"> 9739 <span class="mst-nav__label-item__label">CrossFit</span> 9740 <span class="count text-primary">19</span> 9741 </label> 9742 </a> 9743 </li> 9744 9745 9746 <li data-element="filter" 9747 data-hidden="false" 9748 data-search-hidden="false" 9749 data-letter-hidden="false" 9750 class="item mst-nav__label-item _mode-checkbox " 9751 data-value="116340" 9752 @click="handleClick" 9753 > 9754 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_sport=116340&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9755 rel="nofollow" 9756 aria-label="Volleyball" 9757 > 9758 9759 <input id="m_incstores_pim_tf_sport[116340]" type="checkbox" /> 9760 9761 <label for="m_incstores_pim_tf_sport[116340]">
9762 <span class="mst-nav__label-item__label">Volleyball</span> 9763 <span class="count text-primary">1</span> 9764 </label> 9765 </a> 9766 </li> 9767 9768 9769 9770 </ol> 9771 9772 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9773 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9774 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9775 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9776 </div> 9777 </div> 9778 </div> 9779 </div> 9780 </template> 9781 </div> 9782 <div id="filter-id-incstores_pim_tf_underlayment_type" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9783 <div 9784 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9785 :class="{ 'border-b pb-4': open }" 9786 @click="open = !open"> 9787 <span class="title text-md md:text-lg font-semibold"> 9788 Underlayment Type </span> 9789 <span class="py-1 px-1 rounded border border-container"> 9790 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9791 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9792<title>chevron-down</title></svg> 9793 </span> 9794 </div> 9795 <template x-if="open"> 9796 <div class="filter-options-content pt-2"> 9797 9798<div data-mst-nav-filter="incstores_pim_tf_underlayment_typeA245860A" data-mst-nav-cache-key="245860" data-mst-attribute="incstores_pim_tf_underlayment_type" class="mst-nav__label" x-data="initLabelRenderer()"> 9799 <div 9800 data-holder="alphabetical" 9801 x-data="initAlphabeticalIndex(0, 5)" 9802 x-init="init()" 9803 ></div> 9804 9805 <ol class="items"> 9806 9807 9808 <li data-element="filter" 9809 data-hidden="false" 9810 data-search-hidden="false" 9811 data-letter-hidden="false" 9812 class="item mst-nav__label-item _mode-checkbox " 9813 data-value="116232" 9814 @click="handleClick" 9815 > 9816 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_tf_underlayment_type=116232&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9817 rel="nofollow" 9818 aria-label="Rubber" 9819 > 9820 9821 <input id="m_incstores_pim_tf_underlayment_type[116232]" type="checkbox" /> 9822 9823 <label for="m_incstores_pim_tf_underlayment_type[116232]"> 9824 <span class="mst-nav__label-item__label">Rubber</span> 9825 <span class="count text-primary">7</span> 9826 </label> 9827 </a> 9828 </li> 9829 9830 9831 9832 </ol> 9833 9834 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9835 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9836 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9837 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9838 </div> 9839 </div> 9840 </div> 9841 </div> 9842 </template> 9843 </div> 9844 <div id="filter-id-incstores_pim_lf_features" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9845 <div 9846 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 9847 :class="{ 'border-b pb-4': open }" 9848 @click="open = !open">
9849 <span class="title text-md md:text-lg font-semibold"> 9850 Features </span> 9851 <span class="py-1 px-1 rounded border border-container"> 9852 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 9853 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 9854<title>chevron-down</title></svg> 9855 </span> 9856 </div> 9857 <template x-if="open"> 9858 <div class="filter-options-content pt-2"> 9859 9860<div data-mst-nav-filter="incstores_pim_lf_featuresA253593A" data-mst-nav-cache-key="253593" data-mst-attribute="incstores_pim_lf_features" class="mst-nav__label" x-data="initLabelRenderer()"> 9861 <div 9862 data-holder="alphabetical" 9863 x-data="initAlphabeticalIndex(0, 5)" 9864 x-init="init()" 9865 ></div> 9866 9867 <ol class="items"> 9868 9869 9870 <li data-element="filter" 9871 data-hidden="false" 9872 data-search-hidden="false" 9873 data-letter-hidden="false" 9874 class="item mst-nav__label-item _mode-checkbox " 9875 data-value="116472" 9876 @click="handleClick" 9877 > 9878 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_features=116472&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9879 rel="nofollow" 9880 aria-label="Drainage" 9881 > 9882 9883 <input id="m_incstores_pim_lf_features[116472]" type="checkbox" /> 9884 9885 <label for="m_incstores_pim_lf_features[116472]"> 9886 <span class="mst-nav__label-item__label">Drainage</span> 9887 <span class="count text-primary">4</span> 9888 </label> 9889 </a> 9890 </li> 9891 9892 9893 <li data-element="filter" 9894 data-hidden="false" 9895 data-search-hidden="false" 9896 data-letter-hidden="false" 9897 class="item mst-nav__label-item _mode-checkbox " 9898 data-value="116475" 9899 @click="handleClick" 9900 > 9901 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_features=116475&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9902 rel="nofollow" 9903 aria-label="Mold & Mildew Resistant" 9904 > 9905 9906 <input id="m_incstores_pim_lf_features[116475]" type="checkbox" /> 9907 9908 <label for="m_incstores_pim_lf_features[116475]"> 9909 <span class="mst-nav__label-item__label">Mold & Mildew Resistant</span> 9910 <span class="count text-primary">40</span> 9911 </label> 9912 </a> 9913 </li> 9914 9915 9916 <li data-element="filter" 9917 data-hidden="false" 9918 data-search-hidden="false" 9919 data-letter-hidden="false" 9920 class="item mst-nav__label-item _mode-checkbox " 9921 data-value="116469" 9922 @click="handleClick" 9923 > 9924 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_features=116469&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9925 rel="nofollow" 9926 aria-label="Recycled Content" 9927 > 9928 9929 <input id="m_incstores_pim_lf_features[116469]" type="checkbox" /> 9930 9931 <label for="m_incstores_pim_lf_features[116469]">
9932 <span class="mst-nav__label-item__label">Recycled Content</span> 9933 <span class="count text-primary">48</span> 9934 </label> 9935 </a> 9936 </li> 9937 9938 9939 <li data-element="filter" 9940 data-hidden="false" 9941 data-search-hidden="false" 9942 data-letter-hidden="false" 9943 class="item mst-nav__label-item _mode-checkbox " 9944 data-value="116463" 9945 @click="handleClick" 9946 > 9947 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_features=116463&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9948 rel="nofollow" 9949 aria-label="UV Stable" 9950 > 9951 9952 <input id="m_incstores_pim_lf_features[116463]" type="checkbox" /> 9953 9954 <label for="m_incstores_pim_lf_features[116463]"> 9955 <span class="mst-nav__label-item__label">UV Stable</span> 9956 <span class="count text-primary">5</span> 9957 </label> 9958 </a> 9959 </li> 9960 9961 9962 <li data-element="filter" 9963 data-hidden="false" 9964 data-search-hidden="false" 9965 data-letter-hidden="false" 9966 class="item mst-nav__label-item _mode-checkbox " 9967 data-value="116694" 9968 @click="handleClick" 9969 > 9970 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_lf_features=116694&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 9971 rel="nofollow" 9972 aria-label="Vulcanized" 9973 > 9974 9975 <input id="m_incstores_pim_lf_features[116694]" type="checkbox" /> 9976 9977 <label for="m_incstores_pim_lf_features[116694]"> 9978 <span class="mst-nav__label-item__label">Vulcanized</span> 9979 <span class="count text-primary">6</span> 9980 </label> 9981 </a> 9982 </li> 9983 9984 9985 9986 </ol> 9987 9988 <div class="hidden mst-clear-options-link" data-checked-count="0"> 9989 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 9990 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 9991 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 9992 </div> 9993 </div> 9994 </div> 9995 </div> 9996 </template> 9997 </div> 9998 <div id="filter-id-incstores_pim_warranty_filter" class="filter-option card my-4 px-0" x-data="{ open: false }"> 9999 <div 10000 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 10001 :class="{ 'border-b pb-4': open }" 10002 @click="open = !open">
10003 <span class="title text-md md:text-lg font-semibold"> 10004 Warranty Filter </span> 10005 <span class="py-1 px-1 rounded border border-container"> 10006 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 10007 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 10008<title>chevron-down</title></svg> 10009 </span> 10010 </div> 10011 <template x-if="open"> 10012 <div class="filter-options-content pt-2"> 10013 10014<div data-mst-nav-filter="incstores_pim_warranty_filterA514291A" data-mst-nav-cache-key="514291" data-mst-attribute="incstores_pim_warranty_filter" class="mst-nav__label" x-data="initLabelRenderer()"> 10015 <div 10016 data-holder="alphabetical" 10017 x-data="initAlphabeticalIndex(0, 5)" 10018 x-init="init()" 10019 ></div> 10020 10021 <ol class="items"> 10022 10023 10024 <li data-element="filter" 10025 data-hidden="false" 10026 data-search-hidden="false" 10027 data-letter-hidden="false" 10028 class="item mst-nav__label-item _mode-checkbox " 10029 data-value="115295" 10030 @click="handleClick" 10031 > 10032 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_filter=115295&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10033 rel="nofollow" 10034 aria-label="5 Year" 10035 > 10036 10037 <input id="m_incstores_pim_warranty_filter[115295]" type="checkbox" /> 10038 10039 <label for="m_incstores_pim_warranty_filter[115295]"> 10040 <span class="mst-nav__label-item__label">5 Year</span> 10041 <span class="count text-primary">42</span> 10042 </label> 10043 </a> 10044 </li> 10045 10046 10047 <li data-element="filter" 10048 data-hidden="false" 10049 data-search-hidden="false" 10050 data-letter-hidden="false" 10051 class="item mst-nav__label-item _mode-checkbox " 10052 data-value="115358" 10053 @click="handleClick" 10054 > 10055 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_filter=115358&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10056 rel="nofollow" 10057 aria-label="10 Year" 10058 > 10059 10060 <input id="m_incstores_pim_warranty_filter[115358]" type="checkbox" /> 10061 10062 <label for="m_incstores_pim_warranty_filter[115358]"> 10063 <span class="mst-nav__label-item__label">10 Year</span> 10064 <span class="count text-primary">5</span> 10065 </label> 10066 </a> 10067 </li> 10068 10069 10070 <li data-element="filter" 10071 data-hidden="false" 10072 data-search-hidden="false" 10073 data-letter-hidden="false" 10074 class="item mst-nav__label-item _mode-checkbox " 10075 data-value="115355" 10076 @click="handleClick" 10077 > 10078 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_f
10078ilter=115355&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10079 rel="nofollow" 10080 aria-label="12 Year" 10081 > 10082 10083 <input id="m_incstores_pim_warranty_filter[115355]" type="checkbox" /> 10084 10085 <label for="m_incstores_pim_warranty_filter[115355]"> 10086 <span class="mst-nav__label-item__label">12 Year</span> 10087 <span class="count text-primary">2</span> 10088 </label> 10089 </a> 10090 </li> 10091 10092 10093 <li data-element="filter" 10094 data-hidden="false" 10095 data-search-hidden="false" 10096 data-letter-hidden="false" 10097 class="item mst-nav__label-item _mode-checkbox " 10098 data-value="115298" 10099 @click="handleClick" 10100 > 10101 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_filter=115298&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10102 rel="nofollow" 10103 aria-label="15 Year" 10104 > 10105 10106 <input id="m_incstores_pim_warranty_filter[115298]" type="checkbox" /> 10107 10108 <label for="m_incstores_pim_warranty_filter[115298]"> 10109 <span class="mst-nav__label-item__label">15 Year</span> 10110 <span class="count text-primary">2</span> 10111 </label> 10112 </a> 10113 </li> 10114 10115 10116 <li data-element="filter" 10117 data-hidden="false" 10118 data-search-hidden="false" 10119 data-letter-hidden="false" 10120 class="item mst-nav__label-item _mode-checkbox " 10121 data-value="115304" 10122 @click="handleClick" 10123 > 10124 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_filter=115304&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10125 rel="nofollow" 10126 aria-label="25 Year" 10127 > 10128 10129 <input id="m_incstores_pim_warranty_filter[115304]" type="checkbox" /> 10130 10131 <label for="m_incstores_pim_warranty_filter[115304]"> 10132 <span class="mst-nav__label-item__label">25 Year</span> 10133 <span class="count text-primary">4</span> 10134 </label> 10135 </a> 10136 </li> 10137 10138 10139 <li data-element="filter" 10140 data-hidden="false" 10141 data-search-hidden="false" 10142 data-letter-hidden="false" 10143 class="item mst-nav__label-item _mode-checkbox " 10144 data-value="115334" 10145 @click="handleClick" 10146 > 10147 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_warranty_filter=115334&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10148 rel="nofollow" 10149 aria-label="Lifetime" 10150 > 10151 10152 <input id="m_incstores_pim_warranty_filter[115334]" type="checkbox" /> 10153 10154 <label for="m_incstores_pim_warranty_filter[115334]">
10155 <span class="mst-nav__label-item__label">Lifetime</span> 10156 <span class="count text-primary">1</span> 10157 </label> 10158 </a> 10159 </li> 10160 10161 10162 10163 </ol> 10164 10165 <div class="hidden mst-clear-options-link" data-checked-count="0"> 10166 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 10167 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 10168 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 10169 </div> 10170 </div> 10171 </div> 10172 </div> 10173 </template> 10174 </div> 10175 <div id="filter-id-incstores_pim_certifications" class="filter-option card my-4 px-0" x-data="{ open: false }"> 10176 <div 10177 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 10178 :class="{ 'border-b pb-4': open }" 10179 @click="open = !open"> 10180 <span class="title text-md md:text-lg font-semibold"> 10181 Certifications </span> 10182 <span class="py-1 px-1 rounded border border-container"> 10183 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 10184 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 10185<title>chevron-down</title></svg> 10186 </span> 10187 </div> 10188 <template x-if="open"> 10189 <div class="filter-options-content pt-2"> 10190 10191<div data-mst-nav-filter="incstores_pim_certificationsA676832A" data-mst-nav-cache-key="676832" data-mst-attribute="incstores_pim_certifications" class="mst-nav__label" x-data="initLabelRenderer()"> 10192 <div 10193 data-holder="alphabetical" 10194 x-data="initAlphabeticalIndex(0, 5)" 10195 x-init="init()" 10196 ></div> 10197 10198 <ol class="items"> 10199 10200 10201 <li data-element="filter" 10202 data-hidden="false" 10203 data-search-hidden="false" 10204 data-letter-hidden="false" 10205 class="item mst-nav__label-item _mode-checkbox " 10206 data-value="115202" 10207 @click="handleClick" 10208 > 10209 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_certifications=115202&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10210 rel="nofollow" 10211 aria-label="Greenguard - Low Chemical Emissions" 10212 > 10213 10214 <input id="m_incstores_pim_certifications[115202]" type="checkbox" /> 10215 10216 <label for="m_incstores_pim_certifications[115202]"> 10217 <span class="mst-nav__label-item__label">Greenguard - Low Chemical Emissions</span> 10218 <span class="count text-primary">1</span> 10219 </label> 10220 </a> 10221 </li> 10222 10223 10224 10225 </ol> 10226 10227 <div class="hidden mst-clear-options-link" data-checked-count="0"> 10228 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 10229 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 10230 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 10231 </div> 10232 </div> 10233 </div> 10234 </div> 10235 </template> 10236 </div> 10237 <div id="filter-id-incstores_pim_installation_location" class="filter-option card my-4 px-0" x-data="{ open: false }"> 10238 <div 10239 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container" 10240 :class="{ 'border-b pb-4': open }" 10241 @click="open = !open">
10242 <span class="title text-md md:text-lg font-semibold"> 10243 Installation Location </span> 10244 <span class="py-1 px-1 rounded border border-container"> 10245 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" role="img"> 10246 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 10247<title>chevron-down</title></svg> 10248 </span> 10249 </div> 10250 <template x-if="open"> 10251 <div class="filter-options-content pt-2"> 10252 10253<div data-mst-nav-filter="incstores_pim_installation_locationA453330A" data-mst-nav-cache-key="453330" data-mst-attribute="incstores_pim_installation_location" class="mst-nav__label" x-data="initLabelRenderer()"> 10254 <div 10255 data-holder="alphabetical" 10256 x-data="initAlphabeticalIndex(0, 5)" 10257 x-init="init()" 10258 ></div> 10259 10260 <ol class="items"> 10261 10262 10263 <li data-element="filter" 10264 data-hidden="false" 10265 data-search-hidden="false" 10266 data-letter-hidden="false" 10267 class="item mst-nav__label-item _mode-checkbox " 10268 data-value="101297" 10269 @click="handleClick" 10270 > 10271 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_installation_location=101297&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10272 rel="nofollow" 10273 aria-label="Outdoor" 10274 > 10275 10276 <input id="m_incstores_pim_installation_location[101297]" type="checkbox" /> 10277 10278 <label for="m_incstores_pim_installation_location[101297]"> 10279 <span class="mst-nav__label-item__label">Outdoor</span> 10280 <span class="count text-primary">16</span> 10281 </label> 10282 </a> 10283 </li> 10284 10285 10286 <li data-element="filter" 10287 data-hidden="false" 10288 data-search-hidden="false" 10289 data-letter-hidden="false" 10290 class="item mst-nav__label-item _mode-checkbox " 10291 data-value="116706" 10292 @click="handleClick" 10293 > 10294 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_installation_location=116706&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 10295 rel="nofollow" 10296 aria-label="Indoor" 10297 > 10298 10299 <input id="m_incstores_pim_installation_location[116706]" type="checkbox" /> 10300 10301 <label for="m_incstores_pim_installation_location[116706]"> 10302 <span class="mst-nav__label-item__label">Indoor</span> 10303 <span class="count text-primary">4</span> 10304 </label> 10305 </a> 10306 </li> 10307 10308 10309 10310 </ol> 10311 10312 <div class="hidden mst-clear-options-link" data-checked-count="0"> 10313 <div class="mst-nav__checked-counter__wrapper flex items-center mx-2"> 10314 <div class="mst-nav__checked-counter rounded px-2 bg-gray-200 mr-1">0</div> 10315 <a class="hover:underline text-2xl opacity-50" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" data-element="filter">✕</a> 10316 </div> 10317 </div> 10318 </div> 10319 </div> 10320 </template> 10321 </div> 10322 </div> 10323 </div> 10324
10324<script> 10325 function initLayeredNavigation() { 10326 return { 10327 isMobile: false, 10328 blockOpen: false, 10329 checkIsMobileResolution() { 10330 this.isMobile = window.matchMedia('(max-width: 767px)').matches; 10331 } 10332 } 10333 } 10334 </script>
10334 10335</aside><div class="column main"><div x-data="recommendedProducts_above_main_content()" 10336 x-init="initProductRecBlock()" 10337 id="recs_block_above_main_content" 10338 class="products__recommendations"> 10339 <template x-if="productBanners"> 10340 <div> 10341 <template x-for="banner in productBanners"> 10342 <div class="product-slider" x-defer="intersect"> 10343 <section class="my-12 text-gray-700 body-font" 10344 tabindex="0" 10345 role="region" 10346 aria-label="Recommended products carousel" 10347 aria-roledescription="carousel" 10348 @keydown.arrow-right.prevent="$refs.next.click()" 10349 @keydown.arrow-left.prevent="$refs.prev.click()" 10350 > 10351 <div class="relative"> 10352 <div class="flex w-full"> 10353 <h3 x-text='banner.storefrontLabel' 10354 class="font-semibold"></h3> 10355 </div> 10356 <div class="relative flex flex-nowrap w-full recommended-slider-items products_slider" data-content-type="recommended-products"> 10357 <div class="sr-only" 10358 aria-live="polite" 10359 x-text="'Showing ' + banner.products.length + ' recommended products'"> 10360 </div> 10361 <div id="recommended-slider" class="overflow-x-hidden max-slide" data-role="glider-recommended"> 10362 <template x-for="product in banner.products"> 10363 <div class="flex shrink-0 w-full js_slide md:w-1/3 lg:w-1/5 xl:w-1/6 recommended-slider-item"> 10364 <form method="post" x-bind:action="createAddToCartUrl(product.productId)" 10365 @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" 10366 class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full catergory_slider_content bg-white"> 10367 <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> 10368 <input type="hidden" name="product" x-bind:value="product.productId"> 10369 <a :href="new URL(product.url, window.location.origin).pathname" @click="recsClickEvent(banner.unitId, product.productId, product.url)" 10370 class="product photo product-item-photo block cursor-pointer" 10371 tabindex="-1"> 10372 <div class="product-list-image relative w-full overflow-hidden" 10373 x-data="recProductImage(product)" 10374 :class="{ 'is-hovered': hovered }" 10375 x-on:mouseenter="onEnter()" 10376 x-on:mousemove.debounce.80ms="onMove()" 10377 x-on:mouseleave="onLeave()"> 10378 <img class="product-list-image-primary hover:shadow-sm object-contain w-full" 10379 loading="eager" 10380 x-bind:alt="product.image?.label" 10381 x-bind:title="product.image?.label" 10382 x-bind:src="primarySrc" 10383 width="360" 10384 height="360" 10385 decoding="async" 10386 fetchpriority="high" 10387 style="position: static !important;"> 10388 <template x-if="hoverUrl && hovered"> 10389 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 10390 x-bind:src="hoverUrl" 10391 loading="lazy" 10392 decoding="async" 10393 fetchpriority="low" 10394 width="360" 10395 height="360" 10396 x-bind:alt="product.image?.label" 10397 aria-hidden="true"> 10398 </template> 10399 </div> 10400 </a> 10401 <div class="product-info flex flex-col flex-grow"> 10402 <div 10403 class="items-center justify-center font-semibold "> 10404 <a :href="new URL(product.url, window.location.origin).pathname" class="product-item-link text-size16 text-black font-bold no-underline relative block cursor-pointer" 10405 @click="recsClickEvent(banner.unitId, product.productId, product.url)" 10406 x-text="product.name"></a> 10407 </div> 10408 10409 <div class="ratings" data-nosnippet> 10410 <div data-bv-show="rating_summary" 10411 x-bind:data-bv-product-id="product.sku" 10412 x-bind:data-bv-redirect-url="product.url"> 10413 </div> 10414 </div> 10415 10416 <template x-if="product.prices"> 10417 <div class="pt-1 text-gray-900 price-box price-final_price" x-bind:data-product-id="product.productId">
10418 <span class="normal-price"> 10419 <span class="price-container price-final_price"> 10420 <!-- <span x-show="product.prices.minimum.final !== product.prices.maximum.final" 10421 class="price-start-label">Starting From:</span> --> 10422 <span id="product-price" class="price-wrapper "> 10423 <!-- <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> --> 10424 <div x-data="productPricing(product)"> 10425 <div :class="priceContainerClasses" 10426 :itemprop="schema ? 'offers' : ''" 10427 :itemscope="schema ? true : false" 10428 :itemtype="schema ? 'http://schema.org/Offer' : ''"> 10429 10430 <!-- Price Wrapper --> 10431 <span :id="priceId" 10432 :data-label="priceDisplayLabel" 10433 :data-price-amount="priceAmount" 10434 :data-price-type="priceType" 10435 :class="priceWrapperClasses"> 10436 <template x-if="priceType === 'finalPrice' && product.type === 'configurable'"> 10437 <span class="price-start-label">Starting From:</span> 10438 </template> 10439 10440 <!-- Adjusted Price Logic --> 10441 <template x-if="calculatorType && (coverage > 0 || (width > 0 && length > 0 && height > 0))"> 10442 <span> 10443 <template x-if="minPriceVolume > 0"> 10444 <span> 10445 <template x-if="regularPrice > specialPrice && specialPrice > 0"> 10446 <span x-text="formatCurrency(specialPrice / minPriceVolume)"></span> 10447 </template> 10448 <template x-if="!(regularPrice > specialPrice && specialPrice > 0)"> 10449 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 10450 </template> 10451 <span x-text="'/' + calculatorType"></span> 10452 </span> 10453 </template> 10454 </span> 10455 </template> 10456 <template x-if="!calculatorType || minPriceVolume <= 0"> 10457 <sp
10457an class="price"> 10458 <span x-text="formatCurrency(displayValue)"></span> 10459 <span x-text="displayValueType"></span> 10460 </span> 10461 </template> 10462 </span> 10463 10464 <!-- MRP and Discount --> 10465 <!-- <template x-if="regularPrice > specialPrice && product.type === 'configurable'"> 10466 <span class="price-mrp"> 10467 <template x-if="minPriceVolume > 0 && calculatorType"> 10468 <span class="price-mrp-new"> 10469 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 10470 <span x-text="'/' + calculatorType"></span> 10471 </span> 10472 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 10473 </template> 10474 <template x-if="!(minPriceVolume > 0 && calculatorType)"> 10475 <span class="price-mrp-new"> 10476 <span x-text="formatCurrency(regularPrice)"></span> 10477 <span>/each</span> 10478 </span> 10479 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 10480 </template> 10481 </span> 10482 </template> --> 10483 10484 <!-- Adjustments --> 10485 <template x-if="adjustmentsHtml"> 10486 <span x-html="adjustmentsHtml"></span> 10487 </template> 10488 10489 <!-- Schema --> 10490 <template x-if="schema"> 10491 <meta itemprop="price" :content="priceAmount" /> 10492 <meta itemprop="priceCurrency" :content="priceCurrency" /> 10493 </template> 10494 </div> 10495 </div> 10496 </span> 10497 </span> 10498 </span> 10499 </div> 10500 </template> 10501 <!-- End of product price --> 10502 </div> 10503 </form> 10504 </div> 10505 </template> 10506 </div> 10507 <div class="carousel-nav flex items-center justify-center"> 10508 <button aria-label="Previous" aria-controls="recommended-slider" x-ref="prev" class="glider-prev1"></button> 10509 <button aria-label="Next" aria-controls="recommended-slider" x-ref="next" class="glider-next1"></button> 10510 </div> 10511 </div> 10512 </div> 10513 </section> 10514 </div> 10515 </template> 10516 </div> 10517 </template> 10518</div> 10519
10520<script> 10521 function recommendedProducts_above_main_content() { 10522 return { 10523 productBanners: [], 10524 pagePreconfiguredDeferred: {}, 10525 bannerPlacement: 'above-main-content', 10526 allProductIds: '', 10527 initProductRecBlock: function (placement) { 10528 let self = this; 10529 window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { 10530 let recsData = window.magentoStorefrontEvents.context.getRecommendations(); 10531 self.renderProductRecs(recsData); 10532 }); 10533 }, 10534 renderProductRecs: function (recsData) { 10535 let self = this; 10536 let allProductIds = []; 10537 10538 recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); 10539 10540 recsData.units.forEach(function (unit, index) { 10541 if (unit.pagePlacement === self.bannerPlacement) { 10542 self.productBanners.push(unit); 10543 10544 // Collect all product IDs from this unit 10545 if (unit.products && unit.products.length > 0) { 10546 unit.products.forEach(function(product) { 10547 allProductIds.push(product.productId); 10548 }); 10549 } 10550 10551 /** @todo move event outside of recsResponseReceived event **/ 10552 window.magentoStorefrontEvents.publish.recsUnitRender( 10553 unit.unitId, magentoStorefrontEvents.context 10554 ); 10555 } 10556 }); 10557 10558 // Store comma-separated product IDs 10559 self.allProductIds = allProductIds.join(','); 10560 10561 // Fetch calculated prices and hover images for all products at once 10562 if (self.allProductIds) { 10563 self.fetchAllCalculatedPrices(self.allProductIds); 10564 if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) { 10565 self.fetchAllHoverImages(self.allProductIds); 10566 } 10567 } 10568 }, 10569 fetchAllHoverImages: function (productIds) { 10570 const baseUrl = "https\u003A\u002F\u002Fwww.flooringinc.com\u002F"; 10571 const fetchUrl = baseUrl + 'hyvaproductrecommendation/product/listhoverimage/productId/' + productIds; 10572 10573 if (!window.hoverImagesCachePromise) { 10574 window.hoverImagesCachePromise = fetch(fetchUrl) 10575 .then(response => response.json()) 10576 .then(data => { 10577 window.hoverImagesCache = data.success && data.hoverImages 10578 ? data.hoverImages 10579 : {}; 10580 return window.hoverImagesCache; 10581 }) 10582 .catch(() => { 10583 window.hoverImagesCache = {}; 10584 return window.hoverImagesCache; 10585 }); 10586 } 10587 10588 return window.hoverImagesCachePromise; 10589 }, 10590 fetchAllCalculatedPrices: function(productIds) { 10591 var baseUrl = "https://www.flooringinc.com/"; 10592 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productIds; 10593 10594 // Create a promise that other components can wait for 10595 if (!window.calculatedPricesCachePromise) { 10596 window.calculatedPricesCachePromise = fetch(fetchUrl) 10597 .then(response => response.json()) 10598 .then(data => { 10599 // Store the price data globally so productPricing can access it 10600 if (!window.calculatedPricesCache) { 10601 window.calculatedPricesCache = {}; 10602 } 10603 window.calculatedPricesCache = data; 10604 return data; 10605 }) 10606 .catch(error => { 10607 console.log('Error fetching calculated prices:', error); 10608 return {}; 10609 }); 10610 } 10611 return window.calculatedPricesCachePromise; 10612 }, 10613 addToCartRecsEvent: function (e, unitId, productId) { 10614 // requires recommendationsContext to be set 10615 magentoStorefrontEvents.publish.recsItemAddToCartClick( 10616 unitId, productId, magentoStorefrontEvents.context 10617 ); 10618 // Timeout to prevent submission before event has fired. 10619 setTimeout(() => e.submit(), 500); 10620 }, 10621 scrollViewEvent: function (unitId) { 10622 magentoStorefrontEvents.publish.recsUnitView( 10623 unitId, magentoStorefrontEvents.context 10624 ); 10625 }, 10626 recsClickEvent: function (unitId, productId, productUrl) { 10627 magentoStorefrontEvents.publish.recsItemClick( 10628 unitId, productId, magentoStorefrontEvents.context 10629 ); 10630 // Timeout to prevent submission before event has fired. 10631 //setTimeout(() => window.location.href = productUrl, 500); 10632 }, 10633 createAddToCartUrl: function (productId) { 10634 const currentLocationUENC = encodeURIComponent( 10635 this.encodeUenc(BASE_URL), 10636 ); 10637 return BASE_URL + 10638 "checkout/cart/add/uenc/" + 10639 currentLocationUENC + 10640 "/product/" + 10641 productId 10642 }, 10643 encodeUenc: function (value) { 10644 const regex = /=/gi; 10645 return btoa(value).replace(regex, ","); 10646 }, 10647 } 10648 } 10649</script>
vendor: 1 bytes, line 10649
10649
10650<script> 10651 'use strict'; 10652(() => { 10653 const initCarousels = (elements) => { 10654 if (typeof Glider === 'undefined') { 10655 console.error("Glider.js is not loaded."); 10656 return; 10657 } 10658 10659 elements.forEach((carousel) => { 10660 const gliderElement = carousel.querySelector('[data-role="glider-recommended"]'); 10661 if (!gliderElement) { 10662 console.warn("Glider element not found."); 10663 return; 10664 } 10665 10666 const gliderPrev = carousel.querySelector('.glider-prev1'); 10667 const gliderNext = carousel.querySelector('.glider-next1'); 10668 10669 const totalSlides = gliderElement.querySelectorAll('.js_slide').length; 10670 10671 // Hide arrows if slides are 6 or less 10672 if (totalSlides <= 6) { 10673 if (gliderPrev) gliderPrev.style.display = 'none'; 10674 if (gliderNext) gliderNext.style.display = 'none'; 10675 } else { 10676 if (gliderPrev) gliderPrev.style.display = ''; 10677 if (gliderNext) gliderNext.style.display = ''; 10678 } 10679 // Initialize Glider 10680 const glider = new Glider(gliderElement, { 10681 slidesToShow: 6, 10682 slidesToScroll: 1, 10683 scrollLock: false, 10684 draggable: true, 10685 dragVelocity: 1.3, 10686 arrows: { 10687 prev: gliderPrev, 10688 next: gliderNext, 10689 }, 10690 responsive: [ 10691 { breakpoint: 768, settings: { slidesToShow: 2, slidesToScroll: 1 } }, 10692 { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 1 } }, 10693 { breakpoint: 1366, settings: { slidesToShow: 6, slidesToScroll: 1} }, 10694 ], 10695 }); 10696 10697 const preventDraggingOnInputs = (gliderElement) => { 10698 gliderElement.querySelectorAll('select, input').forEach((el) => { 10699 el.addEventListener('mousedown', (event) => { 10700 event.stopPropagation(); // Prevent Glider drag from starting 10701 }); 10702 10703 el.addEventListener('touchstart', (event) => { 10704 event.stopPropagation(); // Prevent drag on touch devices 10705 }); 10706 }); 10707 }; 10708 10709 // Call this inside initCarousels after Glider initialization 10710 preventDraggingOnInputs(gliderElement); 10711 10712 // Add event listener to handle the disabled class 10713 gliderElement.addEventListener('glider-refresh', () => { 10714 requestAnimationFrame(() => { 10715 const hasNext = gliderElement.scrollWidth - gliderElement.scrollLeft > gliderElement.clientWidth; 10716 const hasPrev = gliderElement.scrollLeft > 0; 10717 10718 gliderNext.classList.toggle('disabled', !hasNext); 10719 gliderPrev.classList.toggle('disabled', !hasPrev); 10720 gliderNext.setAttribute('aria-disabled', !hasNext); 10721 gliderPrev.setAttribute('aria-disabled', !hasPrev); 10722 }); 10723 }); 10724 10725 // Force a refresh to ensure state is accurate on initialization 10726 glider.refresh(); 10727 }); 10728 }; 10729 10730 const loadGliderScript = (callback) => { 10731 const script = document.createElement('script'); 10732 script.type = 'text/javascript'; 10733 script.src = "https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magento_PageBuilder/js/glider.min.js"; 10734 script.addEventListener('load', callback); 10735 document.head.appendChild(script); 10736 }; 10737 10738 const observeCarousels = () => { 10739 const observer = new MutationObserver((mutationsList) => { 10740 let found = false; 10741 10742 for (const mutation of mutationsList) { 10743 if (mutation.type === 'childList') { 10744 for (const node of mutation.addedNodes) { 10745 if (node.nodeType === 1) { 10746 const carousels = node.querySelectorAll?.('[data-content-type="recommended-products"]'); 10747 if (carousels.length) { 10748 found = true; 10749 requestAnimationFrame(() => { 10750 observer.disconnect(); 10751 initCarousels(carousels); 10752 }); 10753 break; 10754 } 10755 } 10756 } 10757 } 10758 if (found) break; 10759 } 10760 }); 10761 10762 observer.observe(document.body, { childList: true, subtree: true }); 10763 }; 10764 10765 window.addEventListener('DOMContentLoaded', () => { 10766 loadGliderScript(() => { 10767 // Check if carousels are already in the DOM 10768 const carouselElements = document.querySelectorAll('[data-content-type="recommended-products"]'); 10769 if (carouselElements.length > 0) { 10770 initCarousels(carouselElements); 10771 } else { 10772 // Use MutationObserver to wait for dynamic content 10773 observeCarousels(); 10774 } 10775 }); 10776 }); 10777})(); 10778</script>
10778 10779
10780<script> 10781 function recProductImage(product) { 10782 return { 10783 hovered: false, 10784 over: false, 10785 hoverTimer: null, 10786 hoverUrl: null, 10787 isDesktopHover: window.matchMedia('(hover: hover) and (pointer: fine)').matches, 10788 primarySrc() { 10789 const url = product.image?.url || ''; 10790 if (!url) { 10791 return ''; 10792 } 10793 return url + (url.includes('?') ? '&' : '?') + 'width=428&height=210'; 10794 }, 10795 init() { 10796 if (!this.isDesktopHover) { 10797 return; 10798 } 10799 this.resolveHoverUrl(); 10800 }, 10801 resolveHoverUrl() { 10802 const id = String(product.productId); 10803 const apply = (url) => { 10804 if (url) { 10805 this.hoverUrl = url; 10806 } 10807 }; 10808 10809 if (window.hoverImagesCache?.[id]) { 10810 apply(window.hoverImagesCache[id]); 10811 return; 10812 } 10813 10814 if (window.hoverImagesCachePromise) { 10815 window.hoverImagesCachePromise.then(() => apply(window.hoverImagesCache?.[id])); 10816 } 10817 }, 10818 onEnter() { 10819 if (!this.isDesktopHover || !this.hoverUrl) { 10820 return; 10821 } 10822 this.over = true; 10823 clearTimeout(this.hoverTimer); 10824 this.hoverTimer = setTimeout(() => { 10825 if (this.over) { 10826 this.hovered = true; 10827 } 10828 }, 80); 10829 }, 10830 onMove() { 10831 if (!this.isDesktopHover || !this.over || !this.hoverUrl) { 10832 return; 10833 } 10834 this.hovered = true; 10835 }, 10836 onLeave() { 10837 this.over = false; 10838 this.hovered = false; 10839 clearTimeout(this.hoverTimer); 10840 }, 10841 destroy() { 10842 clearTimeout(this.hoverTimer); 10843 }, 10844 }; 10845 } 10846 10847 function productPricing(product) { 10848 return { 10849 // Variables 10850 regularPrice: 0, 10851 specialPrice: 0, 10852 calculatorType: '', 10853 coverage: 0, 10854 width: 0, 10855 length: 0, 10856 height: 0, 10857 minPriceVolume: 0, 10858 displayValue: 0, 10859 priceAmount: 0, 10860 priceType: 'finalPrice', 10861 priceCurrency: 'USD', 10862 discountPercentage: 0, 10863 adjustmentsHtml: '', // Placeholder for adjustment logic 10864 schema: true, 10865 displayValueType: '/each', 10866 10867 // Dynamic Classes 10868 priceContainerClasses: 'price-container', 10869 priceWrapperClasses: 'price-wrapper', 10870 priceId: '', // Add logic for dynamic IDs if needed 10871 priceDisplayLabel: '', 10872 10873 // Initialization 10874 init() { 10875 // Load product attributes 10876 //console.log("product==="+JSON.stringify(product)); 10877 const attributes = product.attributes; 10878 10879 // Regular and Special Prices 10880 this.regularPrice = product.prices.minimum.regular || 0; 10881 this.specialPrice = product.prices.minimum.final || this.regularPrice; 10882 10883 // Calculator Type and Dimensions 10884 this.calculatorType = attributes.incstores_pim_calculator_type || ''; 10885 this.coverage = attributes.config_coverage || 0; 10886 this.width = (attributes.incstores_pim_width_inches || 0) / 12; 10887 this.length = (attributes.incstores_pim_length_inches || 0) / 12; 10888 this.height = (attributes.incstores_pim_height_inches || 0) / 12; 10889 10890 // Calculate Price per Volume 10891 if (this.calculatorType && (this.coverage > 0 || (this.width > 0 && this.length > 0 && this.height > 0))) { 10892 if (this.calculatorType === 'case') { 10893 this.minPriceVolume = this.coverage; 10894 } else { 10895 this.minPriceVolume = this.width * this.length * this.height; 10896 } 10897 10898 if (this.minPriceVolume > 0) { 10899 const pricePerUnit = 10900 this.regularPrice > this.specialPrice && this.specialPrice > 0 10901 ? this.specialPrice / this.minPriceVolume 10902 : this.regularPrice / this.minPriceVolume; 10903 10904 this.displayValue = pricePerUnit; 10905 } 10906 } else { 10907 this.displayValue = this.regularPrice; 10908 } 10909 10910 const productId = product.productId; 10911 const self = this; 10912 10913 // Wait for the batch price cache to be ready 10914 if (window.calculatedPricesCachePromise) { 10915 window.calculatedPricesCachePromise.then(() => { 10916 // Now the cache should be populated 10917 if (window.calculatedPricesCache && window.calculatedPricesCache[productId]) { 10918 let productData = window.calculatedPricesCache[productId]; 10919 if (productData.success && productData.priceData && productData.priceData.price) { 10920 let customPrice = productData.priceData.price; 10921 let calType = productData.priceData.calType;
10922 self.displayValue = customPrice; 10923 self.displayValueType = '/' + calType; 10924 if (calType == 'none') { 10925 self.displayValueType = ''; 10926 } 10927 } 10928 } 10929 }); 10930 } else { 10931 // Fallback: fetch individual product price if batch call was not initiated 10932 var baseUrl = "https://www.flooringinc.com/"; 10933 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productId; 10934 10935 fetch(fetchUrl) 10936 .then(response => response.json()) 10937 .then(data => { 10938 if (data.success) { 10939 let customPrice = data.priceData.price; 10940 if (data.priceData.price) { 10941 let calType = data.priceData.calType; 10942 self.displayValue = customPrice; 10943 self.displayValueType = '/' + calType; 10944 if (calType == 'none') { 10945 self.displayValueType = ''; 10946 } 10947 } 10948 } 10949 }) 10950 .catch(error => { 10951 console.log(error); 10952 }); 10953 } 10954 10955 // Calculate Discount 10956 if (this.regularPrice > this.specialPrice) { 10957 const savePrice = this.regularPrice - this.specialPrice; 10958 this.discountPercentage = Math.round((savePrice * 100) / this.regularPrice); 10959 } 10960 }, 10961 10962 // Utility Functions 10963 formatCurrency(value) { 10964 value = Number(String(value).replace(/,/g, '')); 10965 return `$${value.toFixed(2)}`; 10966 }, 10967 }; 10968 } 10969</script>
vendor: 1 bytes, line 10969
10969
10970<script> 10971 document.addEventListener("DOMContentLoaded", function () { 10972 let relatedProducts = document.querySelector(".related-products-section"); 10973 let recommendations = document.querySelector(".products__recommendations"); 10974 10975 if (relatedProducts && recommendations) { 10976 relatedProducts.parentNode.insertBefore(recommendations, relatedProducts.nextSibling); 10977 } 10978 }); 10979</script>
10979 10980 10981<div data-mst-nav-filter="" data-mst-nav-cache-key="" data-mst-attribute="" class="mst-nav__label" x-data="initLabelRenderer()"> 10982 10983 10984 10985 <div class="category-top-filter"> 10986 <style>#html-body [data-pb-style=OW8HEGF]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=AEUFEN1],#html-body [data-pb-style=JCOT9LC],#html-body [data-pb-style=OW8HEGF],#html-body [data-pb-style=QT04T1B]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=JCOT9LC]{justify-content:flex-start;display:flex;flex-direction:column;text-align:center}#html-body [data-pb-style=AEUFEN1],#html-body [data-pb-style=QT04T1B]{align-self:stretch}#html-body [data-pb-style=AEUFEN1]{text-align:center}#html-body [data-pb-style=G4CH7L3],#html-body [data-pb-style=JUM1M5N]{display:flex;width:100%}#html-body [data-pb-style=BTU28UQ],#html-body [data-pb-style=EHKO814],#html-body [data-pb-style=G0Y3F9P],#html-body [data-pb-style=GQ75BMM],#html-body [data-pb-style=U604GN4]{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=BTU28UQ],#html-body [data-pb-style=EHKO814],#html-body [data-pb-style=G0Y3F9P],#html-body [data-pb-style=U604GN4]{text-align:center;border-style:solid;border-color:#cfcfcf;border-width:1px;width:25%}#html-body [data-pb-style=WNIB8SH]{margin-left:6px;margin-right:6px}#html-body [data-pb-style=YFRLUEN]{border-style:none}#html-body [data-pb-style=A3BWEO4],#html-body [data-pb-style=BUQH3FY]{max-width:100%;height:auto}#html-body [data-pb-style=IWF33J4]{border-style:none}#html-body [data-pb-style=DRA76NK],#html-body [data-pb-style=N1TTWSC]{max-width:100%;height:auto}#html-body [data-pb-style=EPEY65U]{border-style:none}#html-body [data-pb-style=RLB69IA],#html-body [data-pb-style=TJMSJCE]{max-width:100%;height:auto}#html-body [data-pb-style=ACFWHFU]{border-style:none}#html-body [data-pb-style=FWHGEOT],#html-body [data-pb-style=WSS16CF]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=ACFWHFU],#html-body [data-pb-style=EPEY65U],#html-body [data-pb-style=IWF33J4],#html-body [data-pb-style=YFRLUEN]{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="OW8HEGF"><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="QT04T1B"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="G4CH7L3"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="GQ75BMM"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div style="background:#15324c;border-top:4px solid #e87722;padding:18px 28px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;font-family:Poppins,sans-serif;color:#ffffff;"><div style="flex:1 1 240px;min-width:220px;"><h2 style="color:#ffffff;font-size:24px;font-weight:600;line-height:1.15;margin:0;">Premium Rubber Flooring</h2><p style="color:#cfd8e0;font-size:14px;margin:4px 0 0;">The Traxxon logo marks our most durable rubber flooring: the rolls, tiles, and mats built to go the distance.</p></div><div style="font-size:14px;line-height:1.9;"><span style="margin-right:18px;white-space:nowrap;"><span style="color:#f0a04b;">â</span> Commercial-grade</span><span style="margin-right:18px;white-space:nowrap;"><span style="color:#f0a04b;">â</span> USA-made options</span><span style="white-space:nowrap;"><span style="color:#f0a04b;">â</span> Free samples</span></div><div style="text-align:right;"><div style="font-size:10px;letter-spacing:1.5px;color:#9fb0bf;">POWERED BY</div><div style="font-size:26px;font-weight:700;letter-spacing:2px;color:#ffffff;">TRAXXON</div><div style="font-size:10px;color:#9fb0bf;">by FlooringInc</div></div></div></div></div></div></div></div></div><div data-content-type="row" data-appearance="contained" data-element="main"><div class="ml-auto" 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="JCOT9LC"><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="AEUFEN1"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="JUM1M5N"><div class="pagebuilder-column w-4p mx-1" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="BTU28UQ"><figure class="mx-auto my-2" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="YFRLUEN"><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 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/13389_0_1_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/13389_0_1_.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="desktop_image" data-pb-style="A3BWEO4"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/13389_0_1_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/13389_0_1_.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="mobile_image" data-pb-style="BUQH3FY"></picture></a></span></figure><div data-content-type="text" data-appearance="default" data-element="main"><h2><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking"><strong>Rubber Flooring Rolls</strong></a></span></h2></div><div class="text-size12 mb-6" data-content-type="text" data-appearance="default" data-element="main"><p id="E50KLX0"><span data-element="filter" @click="handleClick"> <a class="special-filters" tabindex="0" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking">Seamless, durable rubber rolls ideal for gyms, garages, and commercial spaces</a></span></p></div></div><div class="pagebuilder-column w-4p mx-1" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="EHKO814"><figure class="mx-auto my-2" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IWF33J4"><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/13977_2.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/13977_2.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="desktop_image" data-pb-style="N1TTWSC"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/13977_2.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/13977_2.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="mobile_image" data-pb-style="DRA76NK"></picture></a></span></figure><div data-content-type="text" data-appearance="default" data-element="main"><h2><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking"><strong>Rubber Floor Tiles</strong></a></span></h2></div><div class="text-size12 mb-6" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="WNIB8SH"><p><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking">Easy-to-install interlocking rubber tiles that provide comfort, traction, and impact protection</a></span></p></div></div><div class="pagebuilder-column w-4p mx-1" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="G0Y3F9P"><figure class="mx-auto my-2" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="EPEY65U"><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 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/Rubber_Floor_Mat_Gym_Mat_2.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Rubber_Floor_Mat_Gym_Mat_2.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="desktop_image" data-pb-style="RLB69IA"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Rubber_Floor_Mat_Gym_Mat_2.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Rubber_Floor_Mat_Gym_Mat_2.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="mobile_image" data-pb-style="TJMSJCE"></picture></a></span></figure><div data-content-type="text" data-appearance="default" data-element="main"><h2><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking"><strong>Rubber Mats</strong></a></span></h2></div><div class="text-size12 mb-6" data-content-type="text" data-appearance="default" data-element="main"><p><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking">Rubber floor mats & gym mats designed for quick setup and targeted floor protection</a></span></p></div></div><div class="pagebuilder-column w-4p mx-1" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="U604GN4"><figure class="mx-auto my-2" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="ACFWHFU"><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116814&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" 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/playground_rubber_tiles_1_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/playground_rubber_tiles_1_.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="desktop_image" data-pb-style="FWHGEOT"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/playground_rubber_tiles_1_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/playground_rubber_tiles_1_.jpg" alt="" title="" fetchpriority="false" decoding="async" data-element="mobile_image" data-pb-style="WSS16CF"></picture></a></span></figure><div data-content-type="text" data-appearance="default" data-element="main"><h2><span data-element="filter" @click="handleClick"> <a class="special-filters" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116814&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking"><strong>Playground Rubber Flooring</strong></a></span></h2></div><div class="text-size12 mb-6" data-content-type="text" data-appearance="default" data-element="main"><p><span data-element="filter" @click="handleClick"> <a class="special-filters" tabindex="0" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116814&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking">Shock-absorbing surfaces built for safety, durability, and outdoor play.</a></span></p></div></div></div></div></div></div> </div> 10987 </div>
10988<script> 10989 const elements = document.querySelectorAll(".special-filters"); 10990 elements.forEach(function(element) { 10991 let staticBlockUrl = ''; 10992 staticBlockUrl = element.getAttribute("href"); 10993 element.setAttribute("data-link-url", staticBlockUrl); 10994 element.setAttribute("rel", "nofollow"); 10995 }); 10996</script>
10996
10996<script> 10997 10998 10999</script>
vendor: 2 bytes, line 10999
10999
11000<script> 11001 function samplesubmit(mainproduct,inputValue,productids,colors,spidsColors,confproname,confproid,childproids) { 11002 this.isLoading = true; 11003 const formKey = hyva.getFormKey(); 11004 const postUrl = BASE_URL + 'sampleproduct/Sample/Products/'; 11005 fetch(postUrl, { 11006 "headers": { 11007 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 11008 }, 11009 "body": "form_key=" + formKey + "&action_type=" + inputValue+ "&pids=" + productids+ "&colors=" + colors+ "&spidsColors=" + spidsColors+ "&confproname=" + confproname+ "&confproid=" + confproid +"&childproid=" + childproids, 11010 "method": "POST", 11011 "mode": "cors", 11012 "credentials": "include" 11013 }).then(response => { 11014 //this.isLoading = false; 11015 //window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11016 //fetchHtmlContent(mainproduct); 11017 if (! response.ok) console.warn('GET request failed'); 11018 return response.json(); 11019 }).then(result => { 11020 this.isLoading = false; 11021 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11022 fetchHtmlContent(mainproduct,result.is_sample_added); 11023 }); 11024 } 11025 </script>
11025 11026
11026<script> 11027 function fetchHtmlContent(pid,is_sample_added) { 11028 console.log('Fetching HTML content for PID:', pid); 11029 const formKey = hyva.getFormKey(); 11030 const randomString = Math.random().toString(36).substring(2, 15); 11031 const postUrl = BASE_URL + 'sampleproduct/sample/popup/?pid='+pid; 11032 fetch(postUrl) 11033 .then(response => response.text()) 11034 .then(html => { 11035 console.log('Response received:', html); 11036 let myDivelements = document.getElementsByClassName('htmlcontent'+pid); 11037 var numberofelements=myDivelements.length; 11038 for(var i=0;i<numberofelements;++i){ 11039 myDivelements[i].innerHTML = html; 11040 } 11041 if(is_sample_added == 1 ){ //&& window.innerWidth <= 767 11042 document.querySelector(".order-free-sample-popup .closemodal").dispatchEvent(new Event('click')); 11043 document.querySelector("#menu-cart-icon").dispatchEvent(new Event('click')); 11044 } 11045 }) 11046 .catch(error => { 11047 console.error(error); 11048 }); 11049 } 11050</script>
11050 11051
11051<script> 11052 if (window.require) { 11053 require(['jquery', 'domReady!'], function($){ 11054 if ($('.mfblogunveil').length) { 11055 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 11056 $('.mfblogunveil').mfblogunveil(); 11057 }); 11058 } 11059 }); 11060 } else { 11061 /* e.g. hyva theme */ 11062 document.addEventListener("DOMContentLoaded", function(){ 11063 var items = document.getElementsByClassName('mfblogunveil'); 11064 var el, url; 11065 if (items.length) { 11066 for (var i=0; i<items.length;i++) { 11067 el = items[i]; 11068 url = el.getAttribute('data-original'); 11069 if (!url) { 11070 continue; 11071 } 11072 if ('IMG' == el.tagName) { 11073 el.src = url; 11074 } else { 11075 el.style.backgroundImage = "url('" + url + "')"; 11076 } 11077 } 11078 } 11079 }); 11080 } 11081 </script>
11081 11082 11083<style> 11084 .is-loading > :not(.loader) { 11085 visibility: hidden; 11086 } 11087</style>
11088<script> 11089 function addQuoteListing() { 11090 return { 11091 postUrl: BASE_URL + 'amasty_quote/cart/add', 11092 loading: false, 11093 addToQuoteAjax(productId, el) { 11094 const self = this, 11095 form = self._getForm(productId), 11096 buttonElement = this.$el, 11097 loader = document.createElement('div'), 11098 button = el.querySelector('button'); 11099 11100 loader.className = 'absolute inset-0 flex justify-center items-center loader'; 11101 loader.innerHTML = ` 11102 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" xml:space="preserve" width="32" height="32"> 11103 <path fill="#000" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"> 11104 <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/> 11105 </path> 11106 </svg>`; 11107 11108 button.prepend(loader); 11109 button.classList.add('relative', 'is-loading'); 11110 11111 form.onsubmit = function onSubmit(event) { 11112 event.preventDefault(); 11113 self.getData(productId, loader, button); 11114 } 11115 }, 11116 getData(productId, loader,button) { 11117 const self = this, 11118 form = self._getForm(productId), 11119 formData = new URLSearchParams(new FormData(form)).toString(); 11120 11121 fetch(this.postUrl, { 11122 "headers": { 11123 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 11124 }, 11125 "body": formData, 11126 "method": "POST", 11127 "mode": "cors", 11128 "credentials": "include" 11129 }) 11130 .then((res) => { 11131 return res; 11132 }) 11133 .then((res) => { 11134 loader.remove(); 11135 button.classList.remove('is-loading'); 11136 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11137 [{ 11138 type: "success", 11139 text: "You added product to your quote cart." 11140 }], 5000 11141 ); 11142 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 11143 window.dispatchEvent(reloadCustomerDataEvent); 11144 }) 11145 .finally(() => { 11146 this.loading = false; 11147 }) 11148 }, 11149 _getForm(productId) { 11150 const formSelector = 'product_addtoquote_form_' + productId; 11151 11152 return document.getElementById(formSelector); 11153 } 11154 } 11155 } 11156</script>
11156 11157
11158<script> 11159(function() { 11160 'use strict'; 11161 11162 11163 let allattributesdata = ["name","sku","description","short_description","price","special_price","special_from_date","special_to_date","cost","weight","manufacturer","meta_title","meta_keyword","meta_description","image","small_image","thumbnail","media_gallery","old_id","tier_price","news_from_date","news_to_date","gallery","status","minimal_price","visibility","custom_design","custom_design_from","custom_design_to","custom_layout_update","page_layout","category_ids","options_container","required_options","has_options","image_label","small_image_label","thumbnail_label","created_at","updated_at","country_of_manufacture","quantity_and_stock_status","custom_layout","custom_layout_update_file","url_key","url_path","price_type","sku_type","weight_type","price_view","shipment_type","msrp","msrp_display_actual_price_type","links_purchased_separately","samples_title","links_title","links_exist","giftcard_amounts","allow_open_amount","open_amount_min","open_amount_max","giftcard_type","is_redeemable","use_config_is_redeemable","lifetime","use_config_lifetime","email_template","use_config_email_template","allow_message","use_config_allow_message","related_tgtr_position_limit","related_tgtr_position_behavior","upsell_tgtr_position_limit","upsell_tgtr_position_behavior","tax_class_id","gift_message_available","gift_wrapping_available","gift_wrapping_price","is_returnable","swatch_image","hide_quote_buy_button","features","is_bestseller","min_rollcut","roll_width","shipping_and_returns","size","type","sample_product_sku","mst_search_weight","sold_qty","color_family","features_text","default_design_tile","display_corner","display_edging","pdp_bottom_features","pdp_bottom_video","planks_per_cartoon","buy_this_percentage","product_floor_type","warranty","affirm_product_mfp","affirm_product_mfp_type","affirm_product_mfp_priority","affirm_product_mfp_start_date","affirm_product_mfp_end_date","affirm_product_promo_id","roll_length","tailer_roll_width","bv_feed_include","bv_category_id","quick_ship_for_associated_product","roll_cut_type","ava_vatcode","avatax_cross_border_type","hero_message","ships_from","select_an_option","rma_allowed","sort_by_bestseller","amxnotif_hide_alert","quick_ship","incstores_banner_marketing_external","incstores_free_product","swatchimage","product_label","product_option","am_offer_item_condition","amtoolkit_canonical","amtoolkit_robots","incstores_pim_character_variation","incstores_pim_abrasion_resistance","incstores_pim_backing","incstores_pim_image_general_sku_url_1","incstores_pim_contents","incstores_pim_alt_unit_of_measure","incstores_pim_color_display_name","incstores_pim_colorfast","incstores_pim_certifications","incstores_pim_attached_underlayment","incstores_pim_cleat_safe","incstores_pim_chemical_resistant","incstores_pim_base_thickness","incstores_pim_banner_msg_ext","incstores_pim_car_jack_approved","incstores_pim_esd_min","incstores_pim_bevel","incstores_pim_document_maintenance_product_url_2","incstores_pim_coverage","incstores_pim_document_installation_product_url_1","incstores_pim_connector_type","incstores_pim_back_edge_thickness","incstores_pim_exact_length_inches","incstores_pim_document_installation_product_url_2","incstores_pim_document_msds_product_url_1","incstores_pim_feature_bullet_2","incstores_pim_fiber_treatment","incstores_pim_foot_traffic","incstores_pim_document_specifications_product_url_1","incstores_pim_drainage","incstores_pim_color_axis","incstores_pim_can_backorder","incstores_pim_calculator_type","incstores_pim_dye_method","incstores_pim_home_page_feature_flag","incstores_pim_guardian_protection","incstores_pim_core","incstores_pim_fall_height_rating","incstores_pim_image_general_product_url_9","incstores_pim_exact_height_inches","incstores_pim_face_weight","incstores_pim_image_general_product_url_8","incstores_pim_image_general_product_url_10","incstores_pim_image_general_product_url_13","incstores_pim_image_general_product_url_4","incstores_pim_document_maintenance_product_url_1","incstores_pim_exact_weight_lbs","incstores_pim_image_general_product_url_39","incstores_pim_image_general_product_url_7","incstores_pim_edge_profile","incstores_pim_esd_max","incstores_pim_image_general_product_url_6","incstores_pim_image_general_product_url_2","incstores_pim_banner_msg_int","incstores_pim_feature_bullet_3","incstores_pim_image_general_product_url_38","incstores_pim_feature_bullet_4","incstores_pim_feature_bullet_1","incstores_pim_image_general_product_url_20","incstores_pim_image_general_product_url_12","incstores_pim_finish","incstores_pim_image_general_product_url_23","incstores_pim_image_general_product_url_1","incstores_pim_image_general_product_url_16","incstores_pim_image_general_product_url_40","incstores_pim_exact_width_inches","incstores_pim_floor_speed","incstores_pim_gloss","incstores_pim_image_general_product_url_27","incstores_pim_image_general_product_url_28","incstores_pim_feature_bullet_5","incstores_pim_image_general_product_url_5","incstores_pim_fire_resistant","incstores_pim_image_general_product_url_26","incstores_pim_heat_wieldable","incstores_pim_image_general_product_url_31","incstores_pim_image_general_product_url_32","incstores_pim_image_general_product_url_30","incstores_pim_image_general_product_url_15","incstores_pim_image_general_product_url_37","incstores_pim_image_general_product_url_21","incstores_pim_image_general_product_url_3","incstores_pim_image_general_product_url_34","incstores_pim_image_general_product_url_36","incstores_pim_image_general_product_url_33","incstores_pim_image_general_product_url_19","incstores_pim_image_general_product_url_14","incstores_pim_flooring_designer","incstores_pim_image_general_product_url_35","incstores_pim_image_general_product_url_11","incstores_pim_heat_and_frost_resistant","incstores_pim_image_general_product_url_25","incstores_pim_image_general_product_url_22","incstores_pim_fiber_type","incstores_pim_has_corner_border_center","incstores_pim_image_general_product_url_24","incstores_pim_image_general_product_url_29","incstores_pim_image_general_product_url_17","incstores_pim_image_general_product_url_18","incstores_pim_installation_location","incstores_pim_installation_description","incstores_pim_leading_edge_thickness","incstores_pim_image_general_sku_url_2","incstores_pim_map_price","incstores_pim_nominal_width_inches","incstores_pim_interlock_style","incstores_pim_locking_system","incstores_pim_insulation_rating","incstores_pim_image_general_sku_url_3","incstores_pim_nom_thickness","incstores_pim_product_name","
11163incstores_pim_pdp_icon_5","incstores_pim_installation_pattern","incstores_pim_long_description","incstores_pim_shoe_style","incstores_pim_pile_thickness","incstores_pim_style_code","incstores_pim_nominal_sq_ft","incstores_pim_pdp_icon_2","incstores_pim_pdp_icon_3","incstores_pim_variant_species","incstores_pim_unit_of_measure","incstores_pim_pdp_icon_4","incstores_pim_status_product","incstores_pim_product_id","incstores_pim_pile_height","incstores_pim_pdp_icon_1","incstores_pim_percent_overage","incstores_pim_sku","incstores_pim_pdp_icon_6","incstores_pim_video_general_product_url_4","incstores_pim_nose_type","incstores_pim_variant_axis","incstores_pim_surface_type","incstores_pim_size","incstores_pim_items_per_box","incstores_pim_quick_ship","incstores_pim_qty_increment","incstores_pim_radiant_heating_approved","incstores_pim_status_color","incstores_pim_tufted_weight","incstores_pim_variant_id","incstores_pim_max_order_qty","incstores_pim_mold_and_mildew_resistant","incstores_pim_nominal_height_inches","incstores_pim_video_general_product_url_1","incstores_pim_status_variant","incstores_pim_uv_stable","incstores_pim_recycled_content","incstores_pim_shipping_description","incstores_pim_variant_display_name","incstores_pim_min_rollcut","incstores_pim_surface_texture","incstores_pim_janka_rating","incstores_pim_nominal_length_inches","incstores_pim_video_general_product_url_2","incstores_pim_max_roll_legnth","incstores_pim_video_general_product_url_3","incstores_pim_wear_layer","incstores_pim_installation","incstores_pim_tarr_rating","incstores_pim_wear_layer_rating","incstores_pim_video_general_product_url_5","incstores_pim_waterproof","incstores_pim_warranty_filter","incstores_pim_min_order_qty","incstores_pim_shipping_program","incstores_pim_maintenance_description","incstores_pim_roll_width","incstores_pim_material","incstores_pim_swatch_image_sku_url_1","incstores_pim_type_of_finish","incstores_pim_rolling_weight","incstores_pim_slip_resistant","incstores_pim_sample_id","featured_products","promise_date","product_discontinued","wesupply_estimation_display","incstores_pim_connector_magento_message_com","incstores_pim_connector_magento_date_com","incstores_pim_connector_magento_status_com","incstores_pim_promise_date","incstores_pim_variantid","incstores_pim_productid","incstores_pim_cares_assessment","incstores_pim_document_warranty_product_url_1","incstores_pim_tf_carpet_theme","incstores_pim_tf_carpet_tile_type","incstores_pim_tf_garage_tile_type","incstores_pim_tf_format","incstores_pim_tf_carpet_style","incstores_pim_tf_underlayment_type","incstores_pim_tf_turf_type","incstores_pim_tf_sport","incstores_pim_tf_rubber_format","incstores_pim_tf_trim_t
11163ype","incstores_pim_tf_rubber_thickness","incstores_pim_tf_vinyl_styles","incstores_pim_tf_made_in_usa","incstores_pim_primary_color_filter","incstores_pim_lf_features","incstores_pim_lf_shipping_program","incstores_pim_fd_swatch_sku_url_1","incstores_pim_gmc_zone_west","incstores_pim_gmc_zone_fixed","incstores_pim_gmc_zone_fl","incstores_pim_gmc_zone_free_co","incstores_pim_gmc_zone_ca","incstores_pim_gmc_shipping_weight","incstores_pim_gmc_zone_free","incstores_pim_gmc_zone_east","incstores_pim_gmc_zone_tx","incstores_pim_gmc_zone_ny","incstores_pim_fd_edge_female","incstores_pim_fd_edge_male","incstores_pim_fd_corner_edge_single_male","incstores_pim_fd_edge_universal","incstores_pim_fd_corner_edge_single_female","incstores_pim_fd_corner_edge_double_universal","incstores_pim_fd_corner_edge_single_universal","incstores_pim_fd_corner_universal","incstores_pim_ca_prop_65_warning","incstores_pim_bazaarvoice_brand","incstores_pim_warranty","incstores_pim_upc","incstores_pim_decking_style","incstores_pim_flooring_type","incstores_pim_visible_when_oos","incstores_pim_associated_product_id","incstores_pim_category_filters","ac_downloadable","ac_giftcard","revenue_ranking","incstores_pim_inventory","incstores_pim_upc_wm_2","incstores_pim_upc_amazon","incstores_pim_upc_amazon_9","incstores_pim_upc_hd_6","incstores_pim_upc_amazon_12","incstores_pim_upc_amazon_3","incstores_pim_upc_walmart","incstores_pim_upc_hd_2","incstores_pim_upc_hd_1","incstores_pim_upc_amazon_8","incstores_pim_upc_amazon_4","incstores_pim_upc_amazon2","incstores_pim_upc_amazon_5","incstores_pim_upc_hd_4","incstores_pim_upc_hd_5","incstores_pim_upc_hd_7","incstores_pim_upc_amazon_13","incstores_pim_upc_amazon_7","incstores_pim_upc_amazon_10","incstores_pim_upc_hd_3","incstores_pim_upc_amazon_11","incstores_pim_upc_amazon_6","incstores_pim_upc_amazon_14","incstores_pim_upc_wayfair","incstores_pim_upc_wayfair_5","incstores_pim_upc_wm_7","incstores_pim_upc_wm_4","incstores_pim_upc_wayfair_6","incstores_pim_upc_wayfair_3","incstores_pim_upc_wm_6","incstores_pim_upc_wayfair_2","incstores_pim_upc_wayfair_4","incstores_pim_upc_wayfair_7","incstores_pim_upc_wm_3","incstores_pim_upc_wm_5","incstores_pim_upc_wayfair_8","custom_content","pdp_custom_content","show_all_color_images","incstores_pim_image_general_sku_url_4","incstores_pim_image_general_sku_url_7","incstores_pim_image_general_sku_url_8","incstores_pim_image_general_sku_url_5","incstores_pim_image_general_sku_url_9","incstores_pim_image_general_sku_url_10","incstores_pim_image_general_sku_url_6","incstores_pim_ships_from_region","incstores_pim_lf_shipping_speed","dummy_attribute","incstores_pim_ship_region_availability","incstores_pim_available_on"]; 11164 // Get ALL filtered product IDs (not just current page) 11165 function getAllFilteredProductIds() { 11166 // Try to get all product IDs from various sources 11167 let allProductIds = []; 11168 11169 // Method 1: Try to get from all product containers (including hidden/paginated ones) 11170 const allProductElements = document.querySelectorAll('[data-product-id]'); 11171 const uniqueIds = new Set(); 11172 11173 allProductElements.forEach(element => { 11174 const productId = element.getAttribute('data-product-id'); 11175 if (productId && !uniqueIds.has(productId)) { 11176 uniqueIds.add(productId); 11177 allProductIds.push(productId); 11178 } 11179 }); 11180 11181 // Method 2: If we don't have enough, try to get from data attributes or other sources 11182 if (allProductIds.length < 25) { 11183 // Try to get from toolbar or other data sources 11184 const toolbarElement = document.querySelector('.toolbar, #toolbar-amount, .toolbar-amount'); 11185 if (toolbarElement) { 11186 // Look for data attributes that might contain all product IDs 11187 const dataProductIds = toolbarElement.getAttribute('data-product-ids'); 11188 if (dataProductIds) { 11189 const additionalIds = dataProductIds.split(',').map(id => id.trim()).filter(id => id); 11190 additionalIds.forEach(id => { 11191 if (!uniqueIds.has(id)) { 11192 uniqueIds.add(id); 11193 allProductIds.push(id); 11194 } 11195 }); 11196 } 11197 } 11198 } 11199 return allProductIds; 11200 } 11201 11202 // Get toolbar count for comparison 11203 function getToolbarCount() { 11204 const toolbarElement = document.querySelector('#toolbar-amount .toolbar-number, .toolbar .amount, .toolbar-number'); 11205 if (toolbarElement) { 11206 const text = toolbarElement.textContent.replace(/,/g, ''); 11207 const count = parseInt(text) || 0; 11208 11209 return count; 11210 } 11211 return 0; 11212 } 11213 11214 // AJAX function to get product data from backend 11215 async function getProductData() { 11216 11217 // Get ALL filtered product IDs (not just current page) 11218 const allFilteredProductIds = getAllFilteredProductIds(); 11219 const toolbarCount = getToolbarCount(); 11220 11221 try { 11222 const response = await fetch('/revenueranking/ajax/productRevenue', { 11223 method: 'POST', 11224 headers: { 11225 'Content-Type': 'application/x-www-form-urlencoded', 11226 'X-Requested-With': 'XMLHttpRequest' 11227 }, 11228 body: new URLSearchParams({ 11229 'action': 'get_product_data', 11230 'current_url': window.location.href, 11231 'current_page_product_ids': allFilteredProductIds.join(','), 11232 'toolbar_count': toolbarCount 11233 }) 11234 }); 11235 11236 if (!response.ok) { 11237 throw new Error(`HTTP error! status: ${response.status}`); 11238 } 11239 11240 const data = await response.json(); 11241 11242 return data; 11243 11244 } catch (error) { 11245 return { 11246 success: false, 11247 error: error.message 11248 }; 11249 } 11250 } 11251 11252 // Update display with AJAX data 11253 async function updateDisplay() { 11254 11255 // Get data from backend 11256 const data = await getProductData(); 11257 11258 if (data.success) { 11259 11260 getAllproductsIds(); 11261 11262 } else { 11263 } 11264 } 11265 11266 // Display Buy % calculations 11267 function displayBuyPercentages(buyPercentages) { 11268 // Get current URL params
11269 const urlParams = new URLSearchParams(window.location.search); 11270 11271 const activeFilters = getActiveFilters(); 11272 // Count only non-blank values 11273 const nonBlankCount = Object.values(activeFilters) 11274 .filter(value => value !== '' && value !== null && value !== undefined) 11275 .length; 11276 11277 const hasActiveFilters = Object.keys(activeFilters).length > 0; 11278 11279 let order = urlParams.get('product_list_order'); 11280 let isRevenue = 0; // default = not revenue 11281 11282 if (order && order !== 'position' && order !== 'price') { 11283 isRevenue = 1; 11284 } 11285 11286 // Check if product_list_order exists and equals revenue_ranking 11287 if (nonBlankCount) { 11288 11289 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-desktop').forEach((form, index) => { 11290 11291 const productId = parseInt(form.querySelector('input[name="product"]')?.value, 10); 11292 const productData = buyPercentages.find(item => item.product_id === productId); 11293 if (isRevenue === 1) { 11294 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11295 if (index < 5 && (!urlParams.has('p') || urlParams.get('p') === '1')) { 11296 let displayIndex = index + 1; 11297 if (productData && productData.has_revenue_data && productData.revenue > 0) { 11298 if (!bestsellerDiv) { 11299 // Create new if not exists 11300 bestsellerDiv = document.createElement('span'); 11301 bestsellerDiv.className = 'product_lebel bestseller_label text-size12 font-semibold text-white text-center'; 11302 11303 // Find container where to append 11304 const labelContainer = form.querySelector('.product_lebel_container.active'); 11305 if (labelContainer) { 11306 labelContainer.appendChild(bestsellerDiv); 11307 } 11308 } 11309 // Update text 11310 bestsellerDiv.innerText = `# ${displayIndex} Best Seller`; 11311 }else{ 11312 if (bestsellerDiv) { 11313 bestsellerDiv.remove(); 11314 } 11315 } 11316 }else{ 11317 if (bestsellerDiv) { 11318 bestsellerDiv.remove(); 11319 } 11320 } 11321 } 11322 11323 if (productData && productData.has_revenue_data && productData.buy_percentage > 0) { 11324 // Check if buy_this_percentage already exists 11325 let percentageDiv = form.querySelector('.buy_this_percentage'); 11326 11327 if (!percentageDiv) { 11328 // Create new if not exists 11329 percentageDiv = document.createElement('sapn'); 11330 percentageDiv.className = 'buy_this_percentage'; 11331 11332 // Find container where to append 11333 const labelContainer = form.querySelector('.product_lebel_container.active'); 11334 if (labelContainer) { 11335 labelContainer.appendChild(percentageDiv); 11336 } 11337 } 11338 11339 // Update text 11340 percentageDiv.innerText = `${productData.buy_percentage}% Buy This`; 11341 }else{ 11342 let percentageDiv = form.querySelector('.buy_this_percentage'); 11343 if (percentageDiv) { 11344 percentageDiv.innerText = ``; 11345 } 11346 } 11347 }); 11348 11349 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-mob').forEach((form, index) => { 11350 11351 const productId = parseInt(form.querySelector('input[name="product"]')?.value, 10); 11352 const productData = buyPercentages.find(item => item.product_id === productId); 11353 if (isRevenue === 1) { 11354 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11355 if (index < 5 && (!urlParams.has('p') || urlParam
11355s.get('p') === '1')) { 11356 let displayIndex = index + 1; 11357 if (productData && productData.has_revenue_data && productData.revenue > 0) { 11358 if (!bestsellerDiv) { 11359 // Create new if not exists 11360 bestsellerDiv = document.createElement('span'); 11361 bestsellerDiv.className = 'product_lebel bestseller_label text-size12 font-semibold text-white text-center'; 11362 11363 // Find container where to append 11364 const labelContainer = form.querySelector('.product_lebel_container_bestseller'); 11365 if (labelContainer) { 11366 labelContainer.appendChild(bestsellerDiv); 11367 } 11368 } 11369 // Update text 11370 bestsellerDiv.innerText = `# ${displayIndex} Best Seller`; 11371 }else{ 11372 if (bestsellerDiv) { 11373 bestsellerDiv.remove(); 11374 } 11375 } 11376 }else{ 11377 if (bestsellerDiv) { 11378 bestsellerDiv.remove(); 11379 } 11380 } 11381 } 11382 11383 if (productData && productData.has_revenue_data && productData.buy_percentage > 0) { 11384 // Check if buy_this_percentage already exists 11385 let percentageDiv = form.querySelector('.buy_this_percentage'); 11386 11387 if (!percentageDiv) { 11388 // Create new if not exists 11389 percentageDiv = document.createElement('sapn'); 11390 percentageDiv.className = 'buy_this_percentage'; 11391 11392 // Find container where to append 11393 const labelContainer = form.querySelector('.product_lebel_container_buy_this_percentage'); 11394 if (labelContainer) { 11395 labelContainer.appendChild(percentageDiv); 11396 } 11397 } 11398 11399 // Update text 11400 percentageDiv.innerText = `${productData.buy_percentage}% Buy This`; 11401 }else{ 11402 let percentageDiv = form.querySelector('.buy_this_percentage'); 11403 if (percentageDiv) { 11404 percentageDiv.innerText = ``; 11405 } 11406 } 11407 }); 11408 11409 } else if (isRevenue === 1 && hasActiveFilters) { 11410 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-desktop').forEach((form, index) => { 11411 11412 const productId = parseInt(form.querySelector('input[name="product"]')?.value, 10); 11413 const productData = buyPercentages.find(item => item.product_id === productId); 11414 if (isRevenue === 1) { 11415 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11416 if (index < 5 && (!urlParams.has('p') || urlParams.get('p') === '1')) { 11417 let displayIndex = index + 1; 11418 if (productData && productData.has_revenue_data && productData.revenue > 0) { 11419 if (!bestsellerDiv) { 11420 // Create new if not exists 11421 bestsellerDiv = document.createElement('span'); 11422 bestsellerDiv.className = 'product_lebel bestseller_label text-size12 font-semibold text-white text-center'; 11423 11424 // Find container where to append 11425 const labelContainer = form.querySelector('.product_lebel_container.active'); 11426 if (labelContainer) { 11427 labelContainer.appendChild(bestsellerDiv); 11428 } 11429 } 11430 // Update text 11431 bestsellerDiv.innerText = `# ${displayIndex} Best Seller`; 11432 }else{ 11433 if (bestsellerDiv) { 11434 bestsellerDiv.remove(); 11435 } 11436 } 11437 }else{ 11438 if (bestsellerDiv) { 11439 bestsellerDiv.remove(); 11440 } 11441 } 11442 } 11443 }); 11444 11445 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-mob').forEach((form, index) => { 11446 11447 const productId = parseInt(form.querySelector('input[name="product"]')?.value, 10); 11448 const productData = buyPercentages.find(item => item.product_id === productId); 11449 if (isRevenue === 1) { 11450 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11451 if (index < 5 && (!urlParams.has('p') || urlParam
11451s.get('p') === '1')) { 11452 let displayIndex = index + 1; 11453 if (productData && productData.has_revenue_data && productData.revenue > 0) { 11454 if (!bestsellerDiv) { 11455 // Create new if not exists 11456 bestsellerDiv = document.createElement('span'); 11457 bestsellerDiv.className = 'product_lebel bestseller_label text-size12 font-semibold text-white text-center'; 11458 11459 // Find container where to append 11460 const labelContainer = form.querySelector('.product_lebel_container_bestseller'); 11461 if (labelContainer) { 11462 labelContainer.appendChild(bestsellerDiv); 11463 } 11464 } 11465 // Update text 11466 bestsellerDiv.innerText = `# ${displayIndex} Best Seller`; 11467 }else{ 11468 if (bestsellerDiv) { 11469 bestsellerDiv.remove(); 11470 } 11471 } 11472 }else{ 11473 if (bestsellerDiv) { 11474 bestsellerDiv.remove(); 11475 } 11476 } 11477 } 11478 }); 11479 } 11480 // Select all filter links inside the category-top-filter block 11481 const filterLinks = document.querySelectorAll('.category-top-filter a.special-filters'); 11482 11483 filterLinks.forEach(link => { 11484 const url = new URL(link.href, window.location.origin); 11485 url.searchParams.set('product_list_dir', 'desc'); 11486 url.searchParams.set('product_list_order', 'revenue_ranking'); 11487 link.href = url.toString(); 11488 }); 11489 } 11490 11491 async function getAllFilteredProductIdsCustom(categoryId) { 11492 const endpoint = "/graphql"; // GraphQL endpoint (relative or absolute URL) 11493 const pageSize = 100; 11494 let currentPage = 1; 11495 let allProducts = []; 11496 let totalPages = 1; 11497 11498 // Build filters dynamically 11499 const filters = buildGraphQlFilters(categoryId); 11500 if (filters.srsltid) { 11501 delete filters.srsltid; 11502 } 11503 if (filters.spotlight) { 11504 delete filters.spotlight; 11505 } 11506 if (filters.category_id && filters.category_id.eq === "null") { 11507 delete filters.category_id; 11508 } 11509 if (filters.revenue_ranking) { 11510 delete filters.revenue_ranking; 11511 } 11512 11513 const query = ` 11514 query getFilteredProducts($currentPage: Int!, $pageSize: Int!, $filters: ProductAttributeFilterInput!) { 11515 products( 11516 filter: $filters 11517 pageSize: $pageSize 11518 currentPage: $currentPage 11519 ) { 11520 items { 11521 id 11522 sku 11523 revenue_ranking 11524 } 11525 page_info { 11526 current_page 11527 total_pages 11528 } 11529 } 11530 } 11531 `; 11532 11533 do { 11534 const response = await fetch('/graphql', { 11535 method: 'POST', 11536 headers: { 'Content-Type': 'application/json' }, 11537 body: JSON.stringify({ 11538 query, 11539 variables: { currentPage, pageSize, filters } 11540 }) 11541 }); 11542 11543 const result = await response.json(); 11544 const data = result.data.products; 11545 11546 if (data && data.items) { 11547 allProducts.push(...data.items); 11548 totalPages = data.page_info.total_pages; 11549 } else { 11550 break; 11551 } 11552 11553 currentPage++; 11554 } while (currentPage <= totalPages); 11555 11556 return allProducts; 11557 } 11558 11559 function buildGraphQlFilters(categoryId) { 11560 const activeFilters = getActiveFiltersFromUrl(); 11561 11562 // Start with category filter 11563 const gqlFilters = { 11564 category_id: { eq: String(categoryId) } 11565 }; 11566 11567 // Add dynamic attribute filters 11568 Object.entries(activeFilters).forEach(([attribute, values]) => { 11569 gqlFilters[attribute] = { in: values.map(String) }; 11570 }); 11571 11572 return gqlFilters; 11573 } 11574 11575 function getActiveFiltersFromUrl() { 11576 const params = new URLSearchParams(window.location.search); 11577 const filters = {}; 11578
11579 for (const [key, value] of params.entries()) { 11580 // Skip sorting/pagination params and non-filterable attributes 11581 if ([ 11582 "product_list_dir", 11583 "product_list_mode", 11584 "product_list_order", 11585 "p", // pagination 11586 "product_list_limit", 11587 "revenue_ranking", // Not a filterable attribute, used for sorting only 11588 "srsltid", 11589 "spotlight" 11590 ].includes(key)) { 11591 continue; 11592 } 11593 11594 if (!allattributesdata.includes(key)) { 11595 continue; 11596 } 11597 11598 // Split comma-separated values (ex: "116475,116469") 11599 const values = value.split(',').map(v => v.trim()).filter(v => v); 11600 11601 if (!filters[key]) { 11602 filters[key] = []; 11603 } 11604 filters[key].push(...values); 11605 } 11606 11607 return filters; 11608 } 11609 11610 function getActiveFilters() { 11611 const urlParams = new URLSearchParams(window.location.search); 11612 11613 // Excluded params (not filters) 11614 const excludedParams = [ 11615 'id', 11616 'p', 11617 'product_list_dir', 11618 'product_list_order', 11619 'product_list_limit', 11620 'product_list_mode' 11621 ]; 11622 11623 let filterParams = {}; 11624 11625 for (let [key, value] of urlParams.entries()) { 11626 if (excludedParams.includes(key)) { 11627 continue; 11628 } 11629 if (!allattributesdata.includes(key)) { 11630 continue; 11631 } 11632 filterParams[key] = value; 11633 } 11634 11635 return filterParams; 11636 } 11637 function getAllproductsIds() { 11638 (async () => { 11639 const categoryElement = document.querySelector('.products.wrapper'); 11640 const categoryId = categoryElement ? categoryElement.getAttribute('categoryid') : null; 11641 11642 const products = await getAllFilteredProductIdsCustom(categoryId); 11643 // ð Calculate total revenue 11644 const totalRevenue = products.reduce((sum, p) => sum + (parseFloat(p.revenue_ranking) || 0), 0); 11645 11646 // ð Convert to buyPercentages format 11647 const buyPercentages = products.map(p => { 11648 const revenue = parseFloat(p.revenue_ranking) || 0; 11649 return { 11650 product_id: p.id, 11651 revenue: revenue, 11652 buy_percentage: totalRevenue > 0 ? ((revenue / totalRevenue) * 100).toFixed(2) : 0, 11653 has_revenue_data: revenue > 0 11654 }; 11655 }); 11656 11657 // Select all filter links inside the category-top-filter block 11658 const filterLinks = document.querySelectorAll('.category-top-filter a.special-filters'); 11659 11660 filterLinks.forEach(link => { 11661 const url = new URL(link.href, window.location.origin); 11662 url.searchParams.set('product_list_dir', 'desc'); 11663 url.searchParams.set('product_list_order', 'revenue_ranking'); 11664 link.href = url.toString(); 11665 }); 11666 11667 displayBuyPercentages(buyPercentages); 11668 })(); 11669 } 11670 11671 function resetupdateDisplay() { 11672 // Get current URL params 11673 const urlParams = new URLSearchParams(window.location.search); 11674 11675 // Check if product_list_order exists and equals revenue_ranking 11676 if (urlParams.get('product_list_order') === 'revenue_ranking') { 11677 11678 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-desktop').forEach((form, index) => { 11679 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11680 if (bestsellerDiv) { 11681 bestsellerDiv.remove(); 11682 } 11683 let percentageDiv = form.querySelector('.buy_this_percentage'); 11684 if (percentageDiv) { 11685 percentageDiv.innerText = ``; 11686 } 11687 }); 11688 11689 document.querySelectorAll('#m-navigation-product-list-wrapper form.form-mob').forEach((form, index) => { 11690 let bestsellerDiv = form.querySelector('.product_lebel.bestseller_label.text-size12.font-semibold.text-white.text-center'); 11691 if (bestsellerDiv) { 11692 bestsellerDiv.remove(); 11693 } 11694 let percentageDiv = form.querySelector('.buy_this_percentage'); 11695 if (percentageDiv) { 11696 percentageDiv.innerText = ``; 11697 } 11698 }); 11699 11700 } 11701 } 11702 11703 // Setup filter change listeners 11704 function setupFilterListeners() { 11705 11706 // Listen for Mirasvit filter events 11707 document.addEventListener('mst-nav__ajax-call', function() { 11708 // Select all filter links inside the category-top-filter block 11709 const filterLinks = document.querySelectorAll('.category-top-filter a.special-filters'); 11710 11711 filterLinks.forEach(link => { 11712 const url = new URL(link.href, window.location.origin); 11713 url.searchParams.set('product_list_dir', 'desc'); 11714 url.searchParams.set('product_list_order', 'revenue_ranking'); 11715 link.href = url.toString(); 11716 }); 11717 setTimeout(resetupdateDisplay(), 100); 11718 setTimeout(updateDisplay, 1000); // Wait for content to update 11719 setTimeout(updateDisplay, 2000); // Wait for content to update 11720 }); 11721 11722 document.addEventListener('mst-nav__content-updated', function() { 11723 setTimeout(updateDisplay, 1000); // Wait for content to update 11724 }); 11725 11726 document.addEventListener('mst-nav__filter-changed', function() { 11727 setTimeout(updateDisplay, 1500); // Wait for content to update 11728 }); 11729 11730 document.addEventListener('mst-nav__filter-removed', function() { 11731 setTimeout(updateDisplay, 1500); // Wait for content to update 11732 }); 11733 11734 document.addEventListener('mst-nav__state-changed', function() { 11735 setTimeout(updateDisplay, 1500); // Wait for content to update 11736 }); 11737 11738 // Listen for URL changes (back/forward navigation) 11739 window.addEventListener('popstate', function() { 11740 setTimeout(updateDisplay, 1000); 11741 }); 11742 11743 // Listen for any click on filter elements 11744 document.addEventListener('click', function(e) { 11745 const filterElement = e.target.closest('[data-mst-nav-filter], .filter-option, .filter-item, .layered-filter'); 11746 if (filterElement) { 11747 setTimeout(updateDisplay, 2000); // Wait for filter to apply 11748 } 11749 }); 11750 } 11751 11752 // Initialize when DOM is ready 11753 document.addEventListener('DOMContentLoaded', function() { 11754 11755 const refreshBtn = document.getElementById('refresh-btn'); 11756 if (refreshBtn) { 11757 refreshBtn.addEventListener('click', function() { 11758 updateDisplay(); 11759 }); 11760 } 11761 11762 // Setup automatic filter listeners 11763 setupFilterListeners(); 11764 11765 // Initial update 11766 updateDisplay(); 11767 11768 // Select all filter links inside the category-top-filter block 11769 const filterLinks = document.querySelectorAll('.category-top-filter a.special-filters'); 11770 11771 filterLinks.forEach(link => { 11772 const url = new URL(link.href, window.location.origin); 11773 url.searchParams.set('product_list_dir', 'desc'); 11774 url.searchParams.set('product_list_order', 'revenue_ranking'); 11775 link.href = url.toString(); 11776 }); 11777 11778 }); 11779 11780})(); 11781</script>
11781 11782 11783 <div id="m-navigation-replacer"></div><div id="m-navigation-product-list-wrapper"> 11784 <section class="py-8"> 11785
11785<script> 11786 function initToolbar_6ac152907112f() { 11787 return { 11788 options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":24,"url":"https:\/\/www.flooringinc.com\/shop\/rubber-flooring\/all-rubber-flooring.html","formKey":"3mNdp2ZYJNcyLOs5","post":false,"page":"p"}}.productListToolbarForm || {}, 11789 getUrlParams: function () { 11790 let decode = window.decodeURIComponent, 11791 urlPaths = this.options.url.split('?'), 11792 urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], 11793 params = {}, 11794 parameters, i; 11795 11796 for (i = 0; i < urlParams.length; i++) { 11797 parameters = urlParams[i].split('='); 11798 params[decode(parameters[0])] = parameters[1] !== undefined ? 11799 decode(parameters[1].replace(/\+/g, '%20')) : 11800 ''; 11801 } 11802 11803 return params; 11804 }, 11805 getCurrentLimit: function () { 11806 return this.getUrlParams()[this.options.limit] || this.options.limitDefault; 11807 }, 11808 getCurrentPage: function () { 11809 return this.getUrlParams()[this.options.page] || 1; 11810 }, 11811 changeUrl(paramName, paramValue, defaultValue) { 11812 let urlPaths = this.options.url.split('?'), 11813 baseUrl = urlPaths[0], 11814 paramData = this.getUrlParams(), 11815 currentPage = this.getCurrentPage(), 11816 newPage; 11817 11818 /** 11819 * calculates the page on which the first item of the current page will 11820 * be with the new limit and sets that number as the new page 11821 */ 11822 if (currentPage > 1 && paramName === this.options.limit) { 11823 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 11824 11825 if (newPage > 1) { 11826 paramData[this.options.page] = newPage; 11827 } else { 11828 delete paramData[this.options.page]; 11829 } 11830 } 11831 11832 paramData[paramName] = paramValue; 11833 11834 if (this.options.post) { 11835 hyva.postForm({action: baseUrl, data: paramData}); 11836 } else { 11837 if (paramValue === defaultValue.toString()) { 11838 delete paramData[paramName]; 11839 } 11840 paramData = Object.keys(paramData).length === 0 11841 ? '' 11842 : '?' + (new URLSearchParams(paramData)); 11843 location.href = baseUrl + paramData 11844 } 11845 } 11846 } 11847 } 11848</script>
11848 11849 <div x-data="initToolbar_6ac152907112f()" 11850 class="toolbar toolbar-products overflow-hidden flex"> 11851 11852 <div class="modes w-20 order-1 col-span-1 sm:col-span-2 md:col-span-1 lg:col-span-2"></div> 11853 11854 11855<p class="toolbar-amount text-sm leading-5 text-gray-700 order-4 flex items-center pl-8" id="toolbar-amount"> 11856 <span class="toolbar-number">86</span><span class="toolbar-name text-lightgray1 text-size12 pl-1">products</span> </p> 11857 11858 11859 11860 11861 11862 <div class="field limiter flex items-center order-1 float-left w-1/2"> 11863 <div class="control"> 11864 <label class="text-sm label"> 11865 <span class="text-size12 font-semibold pr-4">View</span> 11866 11867 <select data-role="limiter" class="form-select limiter-options" 11868 @change="changeUrl( 11869 'product_list_limit', 11870 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 11871 options.limitDefault 11872 )"> 11873 <option value="12" 11874 > 11875 12 </option> 11876 <option value="24" 11877 selected="selected" 11878 > 11879 24 </option> 11880 <option value="36" 11881 > 11882 36 </option> 11883 </select> 11884 <span class="text-size12 font-semibold pl-2">Products Per Page</span> 11885 </label> 11886 </div> 11887 <span class="limiter-text text-sm ml-2 sr-only"> 11888 per page </span> 11889 </div> 11890 11891<div class="toolbar-sorter sorter flex items-center order-1 col-span-3 sm:col-span-6 11892 md:col-span-3 lg:col-span-6 justify-end"> 11893 <span class="sr-only sorter-label"> 11894 Sort By </span> 11895 <select data-role="sorter" 11896 class="form-select sorter-options mr-3" 11897 aria-label="Sort By" 11898 @change="changeUrl( 11899 'product_list_order', 11900 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 11901 options.orderDefault 11902 )"> 11903 <option value="position" 11904 selected="selected" 11905 >Featured</option> 11906 <option value="pricehigh" 11907 > 11908 Price : High to Low 11909 </option> 11910 <option value="pricelow" 11911 > 11912 Price : Low to High 11913 </option> 11914 <option value="revenue_ranking" 11915 > 11916 Best Seller </option> 11917 </select> 11918 </div> 11919 </div> 11920 <div categoryid="2333" class="products wrapper mode-grid products-grid"> 11921 <div class="mx-auto pt-4 pb-12 grid gap-4 grid-cols-1 sm:grid-cols-2 xl:grid-cols-4" 11922 x-data='{ 11923 removeFromCompare: function(productId) { 11924 var loader=document.getElementById("loading"); 11925 loader.style.display="block"; 11926 const formKey = hyva.getFormKey(); 11927 const postUrl = BASE_URL + "catalog/product_compare/remove/isAjax/true"; 11928 const postHeaders = { 11929 "headers": { 11930 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 11931 }, 11932 "body": "form_key=" + formKey + "&product=" + productId + "&is_ajax=true&uenc=" + hyva.getUenc(), 11933 "method": "POST", 11934 "mode": "cors", 11935 "credentials": "include" 11936 }; 11937 11938 compareSidebarFetchHandler(postUrl, postHeaders); 11939 } 11940 }' x-init="getSelectedCompare();" 11941 > 11942 <form method="post" 11943 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/294452/" 11944 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship " 11945 > 11946 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="294452"/> 11947 <div class="catergory_slider_content bg-white "> 11948 <div class="product__label flex items-center w-full justify-between py-[13px] "> 11949 <div class="product_lebel_container active"> 11950 11951 <sp
11951an class="product_lebel bestseller_label text-size12 font-semibold text-white text-center"> 11952 # 1 Best Seller 11953 </span> 11954 <sapn class="buy_this_percentage"></span> 11955 11956 </div> 11957 11958 </div> 11959 <a href="https://www.flooringinc.com/shop/rubber-gym-rolls-14000.html" 11960 class="product photo product-item-photo block mx-auto w-full relative " 11961 tabindex="-1" 11962 > 11963 <div class="product-list-image relative w-full overflow-hidden" 11964 x-data='{ 11965 over: false, 11966 hovered: false, 11967 hoverTimer: null, 11968 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_ojm4hunbcl7vb53bdchlinbr1o\/-B779-FWEBP", 11969 onEnter() { 11970 this.over = true; 11971 clearTimeout(this.hoverTimer); 11972 this.hoverTimer = setTimeout(() => { 11973 if (this.over) { 11974 this.hovered = true; 11975 } 11976 }, 80); 11977 }, 11978 onMove() { 11979 if (this.over) { 11980 this.hovered = true; 11981 } 11982 }, 11983 onLeave() { 11984 this.over = false; 11985 this.hovered = false; 11986 clearTimeout(this.hoverTimer); 11987 } 11988 }' 11989 :class="hovered ? 'is-hovered' : ''" 11990 x-on:mouseenter="onEnter()" 11991 x-on:mousemove.debounce.80ms="onMove()" 11992 x-on:mouseleave="onLeave()" 11993 x-init="(new Image()).src = hoverUrl" 11994 > 11995 <img class="hover:shadow-sm object-contain w-full " 11996 x-data="" 11997 @update-gallery-294452.window="$root.src = $event.detail" 11998 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_v7nl7dt4kd5jhbbcdul019vu7a/-B779-FWEBP" 11999 loading="eager" 12000 decoding="async" 12001 fetchpriority="high" 12002 width="779" 12003 height="" 12004 alt="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)" 12005 title="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)" 12006 style="position: static !important;" /> 12007 <template x-if="hovered"> 12008 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12009 :src="hoverUrl" 12010 loading="lazy" 12011 decoding="async" 12012 fetchpriority="low" 12013 width="779" 12014 height="" 12015 alt="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)" 12016 title="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)" 12017 aria-hidden="true" /> 12018 </template> 12019 </div> 12020 12021 </a> 12022 <input type="hidden" id="product_name_294452" name="product_name_294452" value="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"> 12023 <input type="hidden" id="product_id_294452" name="product_id_294452" value="294452"> 12024 <input type="hidden" id="product_url_294452" name="product_url_294452" value="https://www.flooringinc.com/shop/rubber-gym-rolls-14000.html"> 12025 <input type="hidden" id="image_url_294452" name="image_url_294452" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_v7nl7dt4kd5jhbbcdul019vu7a/-B779"> 12026 <div class="product-info flex flex-col grow py-3 px-3"> 12027 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12028 12029 <a href="https://www.flooringinc.com/shop/rubber-gym-rolls-14000.html"> 12030 <div class="text-primary product-name ">
12031 <span class="product-item-link text-size16 font-bold no-underline relative block" 12032 title="Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"> 12033 Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut) </span> 12034 12035 </div> 12036 12037 <div class="ratings " data-nosnippet> 12038 <div data-bv-show="rating_summary" 12039 data-bv-product-id="14000" 12040 data-bv-redirect-url="https://www.flooringinc.com/shop/rubber-gym-rolls-14000.html"> 12041 </div> 12042 </div> 12043 12044 12045 12046 </a> 12047 12048 <div class="priceBlock"> 12049 <div class="text-gray-900"> 12050 <div class="price-box price-final_price" data-role="priceBox" data-product-id="294452" data-price-box="product-id-294452"><span class="normal-price"> 12051 <span class="price-container price-final_price tax weee" 12052 > 12053 12054 <span id="product-price-294452" data-price-amount="3.96" 12055 data-price-type="finalPrice" 12056 class="price-wrapper " 12057 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$0.99</span> /sqft</span> 12058 <span class="price-mrp"> 12059 <span class="price-mrp-new">was 12060 $1.52 </span> 12061 <span data-info="0.53" class="savePrice">Save 35%</span> </span> 12062 </span> 12063</span> 12064 12065 12066</div> </div> 12067 </div> 12068 12069 <div class="compare-buttons flex flex-wrap"> 12070 12071 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 294452}"> 12072 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12073 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12074 <div class="modal-overlay" x-on:click="showModal = false"></div> 12075 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12076 <div class="modal-content"> 12077 <div x-html="htmlContent" class="htmlcontent294452"></div> 12078 </div> 12079 </div> 12080 </div> 12081 12082 <div class="color_counts"> 12083 <div class="color_count text-size14 font-normal text-center">Available in 38 colors</div> 12084 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12085 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12086 </div> 12087 12088 <div class="ship-fax-plp"> 12089 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/rubber-gym-rolls-14000.html"> 12090 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 12091 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 12092 </a> 12093 </div> 12094 12095 12096 </div> 12097 </div> 12098 </div> 12099 12100 </form> 12101 <form method="post" 12102 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/305543/" 12103 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship " 12104 > 12105 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="305543"/> 12106 <div class="catergory_slider_content bg-white "> 12107 <div class="product__label flex items-center w-full justify-between py-[13px] "> 12108 <div class="product_lebel_container active"> 12109 12110 <sp
12110an class="product_lebel bestseller_label text-size12 font-semibold text-white text-center"> 12111 # 2 Best Seller 12112 </span> 12113 <sapn class="buy_this_percentage"></span> 12114 12115 </div> 12116 12117 </div> 12118 <a href="https://www.flooringinc.com/shop/3-8-heavy-duty-rubber-rolls-1006.html" 12119 class="product photo product-item-photo block mx-auto w-full relative " 12120 tabindex="-1" 12121 > 12122 <div class="product-list-image relative w-full overflow-hidden" 12123 x-data='{ 12124 over: false, 12125 hovered: false, 12126 hoverTimer: null, 12127 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_qc7660kjf509hbiokssnd3pj7g\/-B779-FWEBP", 12128 onEnter() { 12129 this.over = true; 12130 clearTimeout(this.hoverTimer); 12131 this.hoverTimer = setTimeout(() => { 12132 if (this.over) { 12133 this.hovered = true; 12134 } 12135 }, 80); 12136 }, 12137 onMove() { 12138 if (this.over) { 12139 this.hovered = true; 12140 } 12141 }, 12142 onLeave() { 12143 this.over = false; 12144 this.hovered = false; 12145 clearTimeout(this.hoverTimer); 12146 } 12147 }' 12148 :class="hovered ? 'is-hovered' : ''" 12149 x-on:mouseenter="onEnter()" 12150 x-on:mousemove.debounce.80ms="onMove()" 12151 x-on:mouseleave="onLeave()" 12152 x-init="(new Image()).src = hoverUrl" 12153 > 12154 <img class="hover:shadow-sm object-contain w-full " 12155 x-data="" 12156 @update-gallery-305543.window="$root.src = $event.detail" 12157 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_0ljk07003h6q14fc1jfohkob07/-B779-FWEBP" 12158 loading="eager" 12159 decoding="async" 12160 fetchpriority="high" 12161 width="779" 12162 height="" 12163 alt="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring" 12164 title="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring" 12165 style="position: static !important;" /> 12166 <template x-if="hovered"> 12167 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12168 :src="hoverUrl" 12169 loading="lazy" 12170 decoding="async" 12171 fetchpriority="low" 12172 width="779" 12173 height="" 12174 alt="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring" 12175 title="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring" 12176 aria-hidden="true" /> 12177 </template> 12178 </div> 12179 12180 </a> 12181 <input type="hidden" id="product_name_305543" name="product_name_305543" value="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring"> 12182 <input type="hidden" id="product_id_305543" name="product_id_305543" value="305543"> 12183 <input type="hidden" id="product_url_305543" name="product_url_305543" value="https://www.flooringinc.com/shop/3-8-heavy-duty-rubber-rolls-1006.html"> 12184 <input type="hidden" id="image_url_305543" name="image_url_305543" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_0ljk07003h6q14fc1jfohkob07/-B779"> 12185 <div class="product-info flex flex-col grow py-3 px-3"> 12186 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12187 12188 <a href="https://www.flooringinc.com/shop/3-8-heavy-duty-rubber-rolls-1006.html"> 12189 <div class="text-primary product-name ">
12190 <span class="product-item-link text-size16 font-bold no-underline relative block" 12191 title="3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring"> 12192 3/8" Heavy Duty Rubber Rolls | Commercial Gym Flooring </span> 12193 12194 </div> 12195 12196 <div class="ratings " data-nosnippet> 12197 <div data-bv-show="rating_summary" 12198 data-bv-product-id="1006" 12199 data-bv-redirect-url="https://www.flooringinc.com/shop/3-8-heavy-duty-rubber-rolls-1006.html"> 12200 </div> 12201 </div> 12202 12203 12204 12205 </a> 12206 12207 <div class="priceBlock"> 12208 <div class="text-gray-900"> 12209 <div class="price-box price-final_price" data-role="priceBox" data-product-id="305543" data-price-box="product-id-305543"><span class="normal-price"> 12210 <span class="price-container price-final_price tax weee" 12211 > 12212 12213 <span id="product-price-305543" data-price-amount="6.33" 12214 data-price-type="finalPrice" 12215 class="price-wrapper " 12216 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.58</span> /sqft </span> 12217 <span class="price-mrp"> 12218 <span class="price-mrp-new">was 12219 $2.44 </span> 12220 <span data-info="0.86" class="savePrice">Save 35%</span> </span> 12221 </span> 12222</span> 12223 12224 12225</div> </div> 12226 </div> 12227 12228 <div class="compare-buttons flex flex-wrap"> 12229 12230 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 305543}"> 12231 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12232 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12233 <div class="modal-overlay" x-on:click="showModal = false"></div> 12234 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12235 <div class="modal-content"> 12236 <div x-html="htmlContent" class="htmlcontent305543"></div> 12237 </div> 12238 </div> 12239 </div> 12240 12241 <div class="color_counts"> 12242 <div class="color_count text-size14 font-normal text-center">Available in 38 colors</div> 12243 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12244 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12245 </div> 12246 12247 <div class="ship-fax-plp"> 12248 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/3-8-heavy-duty-rubber-rolls-1006.html"> 12249 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 12250 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 12251 </a> 12252 </div> 12253 12254 12255 </div> 12256 </div> 12257 </div> 12258 12259 </form> 12260 <form method="post" 12261 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/269393/" 12262 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship " 12263 > 12264 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="269393"/> 12265 <div class="catergory_slider_content bg-white "> 12266 <div class="product__label flex items-center w-full justify-between py-[13px] "> 12267 <div class="product_lebel_container active"> 12268 12269 <sp
12269an class="product_lebel bestseller_label text-size12 font-semibold text-white text-center"> 12270 # 3 Best Seller 12271 </span> 12272 <sapn class="buy_this_percentage"></span> 12273 12274 </div> 12275 12276 </div> 12277 <a href="https://www.flooringinc.com/shop/1-2-mega-rubber-rolls-1007.html" 12278 class="product photo product-item-photo block mx-auto w-full relative " 12279 tabindex="-1" 12280 > 12281 <div class="product-list-image relative w-full overflow-hidden" 12282 x-data='{ 12283 over: false, 12284 hovered: false, 12285 hoverTimer: null, 12286 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_ahhpbka48l4th8nr132jmas162\/-B779-FWEBP", 12287 onEnter() { 12288 this.over = true; 12289 clearTimeout(this.hoverTimer); 12290 this.hoverTimer = setTimeout(() => { 12291 if (this.over) { 12292 this.hovered = true; 12293 } 12294 }, 80); 12295 }, 12296 onMove() { 12297 if (this.over) { 12298 this.hovered = true; 12299 } 12300 }, 12301 onLeave() { 12302 this.over = false; 12303 this.hovered = false; 12304 clearTimeout(this.hoverTimer); 12305 } 12306 }' 12307 :class="hovered ? 'is-hovered' : ''" 12308 x-on:mouseenter="onEnter()" 12309 x-on:mousemove.debounce.80ms="onMove()" 12310 x-on:mouseleave="onLeave()" 12311 x-init="(new Image()).src = hoverUrl" 12312 > 12313 <img class="hover:shadow-sm object-contain w-full " 12314 x-data="" 12315 @update-gallery-269393.window="$root.src = $event.detail" 12316 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_6j9g5b7d417s940035ituhll5s/-B779-FWEBP" 12317 loading="eager" 12318 decoding="async" 12319 fetchpriority="high" 12320 width="779" 12321 height="" 12322 alt="1/2" Mega Rubber Rolls | Commercial Gym Flooring" 12323 title="1/2" Mega Rubber Rolls | Commercial Gym Flooring" 12324 style="position: static !important;" /> 12325 <template x-if="hovered"> 12326 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12327 :src="hoverUrl" 12328 loading="lazy" 12329 decoding="async" 12330 fetchpriority="low" 12331 width="779" 12332 height="" 12333 alt="1/2" Mega Rubber Rolls | Commercial Gym Flooring" 12334 title="1/2" Mega Rubber Rolls | Commercial Gym Flooring" 12335 aria-hidden="true" /> 12336 </template> 12337 </div> 12338 12339 </a> 12340 <input type="hidden" id="product_name_269393" name="product_name_269393" value="1/2" Mega Rubber Rolls | Commercial Gym Flooring"> 12341 <input type="hidden" id="product_id_269393" name="product_id_269393" value="269393"> 12342 <input type="hidden" id="product_url_269393" name="product_url_269393" value="https://www.flooringinc.com/shop/1-2-mega-rubber-rolls-1007.html"> 12343 <input type="hidden" id="image_url_269393" name="image_url_269393" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_6j9g5b7d417s940035ituhll5s/-B779"> 12344 <div class="product-info flex flex-col grow py-3 px-3"> 12345 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12346 12347 <a href="https://www.flooringinc.com/shop/1-2-mega-rubber-rolls-1007.html"> 12348 <div class="text-primary product-name ">
12349 <span class="product-item-link text-size16 font-bold no-underline relative block" 12350 title="1/2" Mega Rubber Rolls | Commercial Gym Flooring"> 12351 1/2" Mega Rubber Rolls | Commercial Gym Flooring </span> 12352 12353 </div> 12354 12355 <div class="ratings " data-nosnippet> 12356 <div data-bv-show="rating_summary" 12357 data-bv-product-id="1007" 12358 data-bv-redirect-url="https://www.flooringinc.com/shop/1-2-mega-rubber-rolls-1007.html"> 12359 </div> 12360 </div> 12361 12362 12363 12364 </a> 12365 12366 <div class="priceBlock"> 12367 <div class="text-gray-900"> 12368 <div class="price-box price-final_price" data-role="priceBox" data-product-id="269393" data-price-box="product-id-269393"><span class="normal-price"> 12369 <span class="price-container price-final_price tax weee" 12370 > 12371 12372 <span id="product-price-269393" data-price-amount="8.29" 12373 data-price-type="finalPrice" 12374 class="price-wrapper " 12375 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$2.07</span> /sqft</span> 12376 <span class="price-mrp"> 12377 <span class="price-mrp-new">was 12378 $3.19 </span> 12379 <span data-info="1.12" class="savePrice">Save 35%</span> </span> 12380 </span> 12381</span> 12382 12383 12384</div> </div> 12385 </div> 12386 12387 <div class="compare-buttons flex flex-wrap"> 12388 12389 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 269393}"> 12390 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12391 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12392 <div class="modal-overlay" x-on:click="showModal = false"></div> 12393 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12394 <div class="modal-content"> 12395 <div x-html="htmlContent" class="htmlcontent269393"></div> 12396 </div> 12397 </div> 12398 </div> 12399 12400 <div class="color_counts"> 12401 <div class="color_count text-size14 font-normal text-center">Available in 30 colors</div> 12402 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12403 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12404 </div> 12405 12406 <div class="ship-fax-plp"> 12407 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/1-2-mega-rubber-rolls-1007.html"> 12408 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 12409 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 12410 </a> 12411 </div> 12412 12413 12414 </div> 12415 </div> 12416 </div> 12417 12418 </form> 12419 <form method="post" 12420 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/420159/" 12421 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship " 12422 > 12423 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="420159"/> 12424 <div class="catergory_slider_content bg-white "> 12425 <div class="product__label flex items-center w-full justify-between py-[13px] "> 12426 <div class="product_lebel_container active"> 12427 12428 <sp
12428an class="product_lebel bestseller_label text-size12 font-semibold text-white text-center"> 12429 # 4 Best Seller 12430 </span> 12431 <sapn class="buy_this_percentage"></span> 12432 12433 </div> 12434 12435 </div> 12436 <a href="https://www.flooringinc.com/shop/nextgen-xl-rubber-rolls-pro-series-14027.html" 12437 class="product photo product-item-photo block mx-auto w-full relative " 12438 tabindex="-1" 12439 > 12440 <div class="product-list-image relative w-full overflow-hidden" 12441 x-data='{ 12442 over: false, 12443 hovered: false, 12444 hoverTimer: null, 12445 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_amm10ualj56k344vvi37no2h5c\/-B779-FWEBP", 12446 onEnter() { 12447 this.over = true; 12448 clearTimeout(this.hoverTimer); 12449 this.hoverTimer = setTimeout(() => { 12450 if (this.over) { 12451 this.hovered = true; 12452 } 12453 }, 80); 12454 }, 12455 onMove() { 12456 if (this.over) { 12457 this.hovered = true; 12458 } 12459 }, 12460 onLeave() { 12461 this.over = false; 12462 this.hovered = false; 12463 clearTimeout(this.hoverTimer); 12464 } 12465 }' 12466 :class="hovered ? 'is-hovered' : ''" 12467 x-on:mouseenter="onEnter()" 12468 x-on:mousemove.debounce.80ms="onMove()" 12469 x-on:mouseleave="onLeave()" 12470 x-init="(new Image()).src = hoverUrl" 12471 > 12472 <img class="hover:shadow-sm object-contain w-full " 12473 x-data="" 12474 @update-gallery-420159.window="$root.src = $event.detail" 12475 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_q6ghia3svl22d05llqmd9o6e59/-B779-FWEBP" 12476 loading="eager" 12477 decoding="async" 12478 fetchpriority="high" 12479 width="779" 12480 height="" 12481 alt="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring" 12482 title="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring" 12483 style="position: static !important;" /> 12484 <template x-if="hovered"> 12485 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12486 :src="hoverUrl" 12487 loading="lazy" 12488 decoding="async" 12489 fetchpriority="low" 12490 width="779" 12491 height="" 12492 alt="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring" 12493 title="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring" 12494 aria-hidden="true" /> 12495 </template> 12496 </div> 12497 12498 </a> 12499 <input type="hidden" id="product_name_420159" name="product_name_420159" value="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"> 12500 <input type="hidden" id="product_id_420159" name="product_id_420159" value="420159"> 12501 <input type="hidden" id="product_url_420159" name="product_url_420159" value="https://www.flooringinc.com/shop/nextgen-xl-rubber-rolls-pro-series-14027.html"> 12502 <input type="hidden" id="image_url_420159" name="image_url_420159" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_q6ghia3svl22d05llqmd9o6e59/-B779"> 12503 <div class="product-info flex flex-col grow py-3 px-3"> 12504 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/fi_shop_by_brand_fi-exclusive_3.webp"><img src="https://www.flooringinc.com/media/catalog/category/fi_shop_by_brand_fi-exclusive_3.jpg" width="120" height="45" alt="Flooring Inc. Exclusives" title="Flooring Inc. Exclusives"/></picture><span class="brand-title">Flooring Inc. Exclusives</span></div> 12505 12506 <a href="https://www.flooringinc.com/shop/nextgen-xl-rubber-rolls-pro-series-14027.html"> 12507 <div class="text-primary product-name ">
12508 <span class="product-item-link text-size16 font-bold no-underline relative block" 12509 title="NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"> 12510 NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring </span> 12511 12512 </div> 12513 12514 <div class="ratings " data-nosnippet> 12515 <div data-bv-show="rating_summary" 12516 data-bv-product-id="14027" 12517 data-bv-redirect-url="https://www.flooringinc.com/shop/nextgen-xl-rubber-rolls-pro-series-14027.html"> 12518 </div> 12519 </div> 12520 12521 12522 12523 </a> 12524 12525 <div class="priceBlock"> 12526 <div class="text-gray-900"> 12527 <div class="price-box price-final_price" data-role="priceBox" data-product-id="420159" data-price-box="product-id-420159"><span class="normal-price"> 12528 <span class="price-container price-final_price tax weee" 12529 > 12530 12531 <span id="product-price-420159" data-price-amount="8.25" 12532 data-price-type="finalPrice" 12533 class="price-wrapper " 12534 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.65</span> /sqft </span> 12535 <span class="price-mrp"> 12536 <span class="price-mrp-new">was 12537 $2.54 </span> 12538 <span data-info="0.89" class="savePrice">Save 35%</span> </span> 12539 </span> 12540</span> 12541 12542 12543</div> </div> 12544 </div> 12545 12546 <div class="compare-buttons flex flex-wrap"> 12547 12548 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 420159}"> 12549 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12550 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12551 <div class="modal-overlay" x-on:click="showModal = false"></div> 12552 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12553 <div class="modal-content"> 12554 <div x-html="htmlContent" class="htmlcontent420159"></div> 12555 </div> 12556 </div> 12557 </div> 12558 12559 <div class="color_counts"> 12560 <div class="color_count text-size14 font-normal text-center">Available in 5 colors</div> 12561 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12562 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12563 </div> 12564 12565 12566 12567 </div> 12568 </div> 12569 </div> 12570 12571 </form> 12572 <form method="post" 12573 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/327947/" 12574 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 12575 > 12576 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="327947"/> 12577 <div class="catergory_slider_content bg-white no__product__label"> 12578 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 12579 <div class="product_lebel_container active"></div> 12580 12581 </div> 12582 <a href="https://www.flooringinc.com/shop/next-day-rubber-rolls-14003.html" 12583 class="product photo product-item-photo block mx-auto w-full relative " 12584 tabindex="-1" 12585 > 12586 <div class="product-list-image relative w-full overflow-hidden" 12587 x-data='{
12588 over: false, 12589 hovered: false, 12590 hoverTimer: null, 12591 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_u9qek9vuqt6gf9sfl3153fss35\/-B779-FWEBP", 12592 onEnter() { 12593 this.over = true; 12594 clearTimeout(this.hoverTimer); 12595 this.hoverTimer = setTimeout(() => { 12596 if (this.over) { 12597 this.hovered = true; 12598 } 12599 }, 80); 12600 }, 12601 onMove() { 12602 if (this.over) { 12603 this.hovered = true; 12604 } 12605 }, 12606 onLeave() { 12607 this.over = false; 12608 this.hovered = false; 12609 clearTimeout(this.hoverTimer); 12610 } 12611 }' 12612 :class="hovered ? 'is-hovered' : ''" 12613 x-on:mouseenter="onEnter()" 12614 x-on:mousemove.debounce.80ms="onMove()" 12615 x-on:mouseleave="onLeave()" 12616 > 12617 <img class="hover:shadow-sm object-contain w-full " 12618 x-data="" 12619 @update-gallery-327947.window="$root.src = $event.detail" 12620 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_vs7c8nfvu14a58j9fqhd9hm95l/-B779-FWEBP" 12621 loading="lazy" 12622 decoding="async" 12623 fetchpriority="low" 12624 width="779" 12625 height="" 12626 alt="Next-Day Rubber Rolls – Custom Cut" 12627 title="Next-Day Rubber Rolls – Custom Cut" 12628 style="position: static !important;" /> 12629 <template x-if="hovered"> 12630 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12631 :src="hoverUrl" 12632 loading="lazy" 12633 decoding="async" 12634 fetchpriority="low" 12635 width="779" 12636 height="" 12637 alt="Next-Day Rubber Rolls – Custom Cut" 12638 title="Next-Day Rubber Rolls – Custom Cut" 12639 aria-hidden="true" /> 12640 </template> 12641 </div> 12642 12643 </a> 12644 <input type="hidden" id="product_name_327947" name="product_name_327947" value="Next-Day Rubber Rolls â Custom Cut"> 12645 <input type="hidden" id="product_id_327947" name="product_id_327947" value="327947"> 12646 <input type="hidden" id="product_url_327947" name="product_url_327947" value="https://www.flooringinc.com/shop/next-day-rubber-rolls-14003.html"> 12647 <input type="hidden" id="image_url_327947" name="image_url_327947" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_vs7c8nfvu14a58j9fqhd9hm95l/-B779"> 12648 <div class="product-info flex flex-col grow py-3 px-3"> 12649 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12650 12651 <a href="https://www.flooringinc.com/shop/next-day-rubber-rolls-14003.html"> 12652 <div class="text-primary product-name "> 12653 <span class="product-item-link text-size16 font-bold no-underline relative block" 12654 title="Next-Day Rubber Rolls â Custom Cut"> 12655 Next-Day Rubber Rolls â Custom Cut </span> 12656 12657 </div> 12658 12659 <div class="ratings " data-nosnippet> 12660 <div data-bv-show="rating_summary" 12661 data-bv-product-id="14003" 12662 data-bv-redirect-url="https://www.flooringinc.com/shop/next-day-rubber-rolls-14003.html"> 12663 </div> 12664 </div> 12665 12666 12667 12668 </a> 12669 12670 <div class="priceBlock"> 12671 <div class="text-gray-900"> 12672 <div class="price-box price-final_price" data-role="priceBox" data-product-id="327947" data-price-box="product-id-327947"><span class="normal-price"> 12673 <span class="price-container price-final_price tax weee" 12674 > 12675 12676 <span id="product-price-327947" data-price-amount="4.76" 12677 data-price-type="finalPrice" 12678 class="price-wrapper " 12679 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.19</span> /sqft </span>
12680 <span class="price-mrp"> 12681 <span class="price-mrp-new">was 12682 $1.83 </span> 12683 <span data-info="0.64" class="savePrice">Save 35%</span> </span> 12684 </span> 12685</span> 12686 12687 12688</div> </div> 12689 </div> 12690 12691 <div class="compare-buttons flex flex-wrap"> 12692 12693 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 327947}"> 12694 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12695 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12696 <div class="modal-overlay" x-on:click="showModal = false"></div> 12697 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12698 <div class="modal-content"> 12699 <div x-html="htmlContent" class="htmlcontent327947"></div> 12700 </div> 12701 </div> 12702 </div> 12703 12704 <div class="color_counts"> 12705 <div class="color_count text-size14 font-normal text-center">Available in 4 colors</div> 12706 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12707 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12708 </div> 12709 12710 <div class="ship-fax-plp"> 12711 <a class="ship-iconsada" title="Next Day Shipping" href="https://www.flooringinc.com/shop/next-day-rubber-rolls-14003.html"> 12712 <span class="text-[14px] text-[#296497] font-semibold">Next Day Shipping</span> 12713 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/next_day_shipping.webp"><img alt="Next Day Shipping" title="Next Day Shipping" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/next_day_shipping.png" class="hidden" /></picture> 12714 </a> 12715 </div> 12716 12717 12718 </div> 12719 </div> 12720 </div> 12721 12722 </form> 12723 <form method="post" 12724 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/420108/" 12725 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 12726 > 12727 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="420108"/> 12728 <div class="catergory_slider_content bg-white no__product__label"> 12729 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 12730 <div class="product_lebel_container active"></div> 12731 12732 </div> 12733 <a href="https://www.flooringinc.com/shop/goliath-xl-rubber-tiles-14025.html" 12734 class="product photo product-item-photo block mx-auto w-full relative " 12735 tabindex="-1" 12736 > 12737 <div class="product-list-image relative w-full overflow-hidden" 12738 x-data='{
12739 over: false, 12740 hovered: false, 12741 hoverTimer: null, 12742 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_i1ijpthqdl6379kasvdeg18r6j\/-B779-FWEBP", 12743 onEnter() { 12744 this.over = true; 12745 clearTimeout(this.hoverTimer); 12746 this.hoverTimer = setTimeout(() => { 12747 if (this.over) { 12748 this.hovered = true; 12749 } 12750 }, 80); 12751 }, 12752 onMove() { 12753 if (this.over) { 12754 this.hovered = true; 12755 } 12756 }, 12757 onLeave() { 12758 this.over = false; 12759 this.hovered = false; 12760 clearTimeout(this.hoverTimer); 12761 } 12762 }' 12763 :class="hovered ? 'is-hovered' : ''" 12764 x-on:mouseenter="onEnter()" 12765 x-on:mousemove.debounce.80ms="onMove()" 12766 x-on:mouseleave="onLeave()" 12767 > 12768 <img class="hover:shadow-sm object-contain w-full " 12769 x-data="" 12770 @update-gallery-420108.window="$root.src = $event.detail" 12771 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_i08d85b9il1gv6atc43au0l069/-B779-FWEBP" 12772 loading="lazy" 12773 decoding="async" 12774 fetchpriority="low" 12775 width="779" 12776 height="" 12777 alt="Goliath XL Rubber Tiles" 12778 title="Goliath XL Rubber Tiles" 12779 style="position: static !important;" /> 12780 <template x-if="hovered"> 12781 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12782 :src="hoverUrl" 12783 loading="lazy" 12784 decoding="async" 12785 fetchpriority="low" 12786 width="779" 12787 height="" 12788 alt="Goliath XL Rubber Tiles" 12789 title="Goliath XL Rubber Tiles" 12790 aria-hidden="true" /> 12791 </template> 12792 </div> 12793 12794 </a> 12795 <input type="hidden" id="product_name_420108" name="product_name_420108" value="Goliath XL Rubber Tiles"> 12796 <input type="hidden" id="product_id_420108" name="product_id_420108" value="420108"> 12797 <input type="hidden" id="product_url_420108" name="product_url_420108" value="https://www.flooringinc.com/shop/goliath-xl-rubber-tiles-14025.html"> 12798 <input type="hidden" id="image_url_420108" name="image_url_420108" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_i08d85b9il1gv6atc43au0l069/-B779"> 12799 <div class="product-info flex flex-col grow py-3 px-3"> 12800 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12801 12802 <a href="https://www.flooringinc.com/shop/goliath-xl-rubber-tiles-14025.html"> 12803 <div class="text-primary product-name "> 12804 <span class="product-item-link text-size16 font-bold no-underline relative block" 12805 title="Goliath XL Rubber Tiles"> 12806 Goliath XL Rubber Tiles </span> 12807 12808 </div> 12809 12810 <div class="ratings " data-nosnippet> 12811 <div data-bv-show="rating_summary" 12812 data-bv-product-id="14025" 12813 data-bv-redirect-url="https://www.flooringinc.com/shop/goliath-xl-rubber-tiles-14025.html"> 12814 </div> 12815 </div> 12816 12817 12818 12819 </a> 12820 12821 <div class="priceBlock"> 12822 <div class="text-gray-900"> 12823 <div class="price-box price-final_price" data-role="priceBox" data-product-id="420108" data-price-box="product-id-420108"><span class="normal-price"> 12824 <span class="price-container price-final_price tax weee" 12825 > 12826 12827 <span id="product-price-420108" data-price-amount="30.11" 12828 data-price-type="finalPrice" 12829 class="price-wrapper " 12830 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.96</span> /sqft </span>
12831 <span class="price-mrp"> 12832 <span class="price-mrp-new">was 12833 $3.02 </span> 12834 <span data-info="1.06" class="savePrice">Save 35%</span> </span> 12835 </span> 12836</span> 12837 12838 12839</div> </div> 12840 </div> 12841 12842 <div class="compare-buttons flex flex-wrap"> 12843 12844 12845 <div class="color_counts"> 12846 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12847 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12848 </div> 12849 12850 12851 12852 </div> 12853 </div> 12854 </div> 12855 12856 </form> 12857 <form method="post" 12858 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/308597/" 12859 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 12860 > 12861 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="308597"/> 12862 <div class="catergory_slider_content bg-white no__product__label"> 12863 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 12864 <div class="product_lebel_container active"></div> 12865 12866 </div> 12867 <a href="https://www.flooringinc.com/shop/3-4-rubber-gym-tiles-4067.html" 12868 class="product photo product-item-photo block mx-auto w-full relative " 12869 tabindex="-1" 12870 > 12871 <div class="product-list-image relative w-full overflow-hidden" 12872 x-data='{ 12873 over: false, 12874 hovered: false, 12875 hoverTimer: null,
12876 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_3lj7te31d565t8c6fng772g82o\/-B779-FWEBP", 12877 onEnter() { 12878 this.over = true; 12879 clearTimeout(this.hoverTimer); 12880 this.hoverTimer = setTimeout(() => { 12881 if (this.over) { 12882 this.hovered = true; 12883 } 12884 }, 80); 12885 }, 12886 onMove() { 12887 if (this.over) { 12888 this.hovered = true; 12889 } 12890 }, 12891 onLeave() { 12892 this.over = false; 12893 this.hovered = false; 12894 clearTimeout(this.hoverTimer); 12895 } 12896 }' 12897 :class="hovered ? 'is-hovered' : ''" 12898 x-on:mouseenter="onEnter()" 12899 x-on:mousemove.debounce.80ms="onMove()" 12900 x-on:mouseleave="onLeave()" 12901 > 12902 <img class="hover:shadow-sm object-contain w-full " 12903 x-data="" 12904 @update-gallery-308597.window="$root.src = $event.detail" 12905 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_9frh11qnvl3e54fsvr44mrvo61/-B779-FWEBP" 12906 loading="lazy" 12907 decoding="async" 12908 fetchpriority="low" 12909 width="779" 12910 height="" 12911 alt="3/4" Premium Gym Floor Tiles – Vulcanized Rubber" 12912 title="3/4" Premium Gym Floor Tiles – Vulcanized Rubber" 12913 style="position: static !important;" /> 12914 <template x-if="hovered"> 12915 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 12916 :src="hoverUrl" 12917 loading="lazy" 12918 decoding="async" 12919 fetchpriority="low" 12920 width="779" 12921 height="" 12922 alt="3/4" Premium Gym Floor Tiles – Vulcanized Rubber" 12923 title="3/4" Premium Gym Floor Tiles – Vulcanized Rubber" 12924 aria-hidden="true" /> 12925 </template> 12926 </div> 12927 12928 </a> 12929 <input type="hidden" id="product_name_308597" name="product_name_308597" value="3/4" Premium Gym Floor Tiles â Vulcanized Rubber"> 12930 <input type="hidden" id="product_id_308597" name="product_id_308597" value="308597"> 12931 <input type="hidden" id="product_url_308597" name="product_url_308597" value="https://www.flooringinc.com/shop/3-4-rubber-gym-tiles-4067.html"> 12932 <input type="hidden" id="image_url_308597" name="image_url_308597" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_9frh11qnvl3e54fsvr44mrvo61/-B779"> 12933 <div class="product-info flex flex-col grow py-3 px-3"> 12934 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 12935 12936 <a href="https://www.flooringinc.com/shop/3-4-rubber-gym-tiles-4067.html"> 12937 <div class="text-primary product-name "> 12938 <span class="product-item-link text-size16 font-bold no-underline relative block" 12939 title="3/4" Premium Gym Floor Tiles â Vulcanized Rubber"> 12940 3/4" Premium Gym Floor Tiles â Vulcanized Rubber </span> 12941 12942 </div> 12943 12944 <div class="ratings " data-nosnippet> 12945 <div data-bv-show="rating_summary" 12946 data-bv-product-id="4067" 12947 data-bv-redirect-url="https://www.flooringinc.com/shop/3-4-rubber-gym-tiles-406
129477.html"> 12948 </div> 12949 </div> 12950 12951 12952 12953 </a> 12954 12955 <div class="priceBlock"> 12956 <div class="text-gray-900"> 12957 <div class="price-box price-final_price" data-role="priceBox" data-product-id="308597" data-price-box="product-id-308597"><span class="normal-price"> 12958 <span class="price-container price-final_price tax weee" 12959 > 12960 12961 <span id="product-price-308597" data-price-amount="22.09" 12962 data-price-type="finalPrice" 12963 class="price-wrapper " 12964 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$4.45</span> /sqft</span> 12965 <span class="price-mrp"> 12966 <span class="price-mrp-new">was 12967 $6.85 </span> 12968 <span data-info="2.4" class="savePrice">Save 35%</span> </span> 12969 </span> 12970</span> 12971 12972 12973</div> </div> 12974 </div> 12975 12976 <div class="compare-buttons flex flex-wrap"> 12977 12978 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 308597}"> 12979 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 12980 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 12981 <div class="modal-overlay" x-on:click="showModal = false"></div> 12982 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 12983 <div class="modal-content"> 12984 <div x-html="htmlContent" class="htmlcontent308597"></div> 12985 </div> 12986 </div> 12987 </div> 12988 12989 <div class="color_counts"> 12990 <div class="color_count text-size14 font-normal text-center">Available in 5 colors</div> 12991 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 12992 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 12993 </div> 12994 12995 <div class="ship-fax-plp"> 12996 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/3-4-rubber-gym-tiles-4067.html"> 12997 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 12998 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 12999 </a> 13000 </div> 13001 13002 13003 </div> 13004 </div> 13005 </div> 13006 13007 </form> 13008 <form method="post" 13009 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/288551/" 13010 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13011 > 13012 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="288551"/> 13013 <div class="catergory_slider_content bg-white no__product__label"> 13014 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13015 <div class="product_lebel_container active"></div> 13016 13017 </div> 13018 <a href="https://www.flooringinc.com/shop/1-2-premium-rubber-gym-tiles-1030.html" 13019 class="product photo product-item-photo block mx-auto w-full relative " 13020 tabindex="-1" 13021 > 13022 <div class="product-list-image relative w-full overflow-hidden" 13023 x-data='{
13024 over: false, 13025 hovered: false, 13026 hoverTimer: null, 13027 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_m68g5kbak51pj4tc3lb86ia62i\/-B779-FWEBP", 13028 onEnter() { 13029 this.over = true; 13030 clearTimeout(this.hoverTimer); 13031 this.hoverTimer = setTimeout(() => { 13032 if (this.over) { 13033 this.hovered = true; 13034 } 13035 }, 80); 13036 }, 13037 onMove() { 13038 if (this.over) { 13039 this.hovered = true; 13040 } 13041 }, 13042 onLeave() { 13043 this.over = false; 13044 this.hovered = false; 13045 clearTimeout(this.hoverTimer); 13046 } 13047 }' 13048 :class="hovered ? 'is-hovered' : ''" 13049 x-on:mouseenter="onEnter()" 13050 x-on:mousemove.debounce.80ms="onMove()" 13051 x-on:mouseleave="onLeave()" 13052 > 13053 <img class="hover:shadow-sm object-contain w-full " 13054 x-data="" 13055 @update-gallery-288551.window="$root.src = $event.detail" 13056 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ocur6ep4p15b3e1p27f2mlbh4k/-B779-FWEBP" 13057 loading="lazy" 13058 decoding="async" 13059 fetchpriority="low" 13060 width="779" 13061 height="" 13062 alt="1/2" Premium Gym Floor Tiles – Vulcanized Rubber" 13063 title="1/2" Premium Gym Floor Tiles – Vulcanized Rubber" 13064 style="position: static !important;" /> 13065 <template x-if="hovered"> 13066 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13067 :src="hoverUrl" 13068 loading="lazy" 13069 decoding="async" 13070 fetchpriority="low" 13071 width="779" 13072 height="" 13073 alt="1/2" Premium Gym Floor Tiles – Vulcanized Rubber" 13074 title="1/2" Premium Gym Floor Tiles – Vulcanized Rubber" 13075 aria-hidden="true" /> 13076 </template> 13077 </div> 13078 13079 </a> 13080 <input type="hidden" id="product_name_288551" name="product_name_288551" value="1/2" Premium Gym Floor Tiles â Vulcanized Rubber"> 13081 <input type="hidden" id="product_id_288551" name="product_id_288551" value="288551"> 13082 <input type="hidden" id="product_url_288551" name="product_url_288551" value="https://www.flooringinc.com/shop/1-2-premium-rubber-gym-tiles-1030.html"> 13083 <input type="hidden" id="image_url_288551" name="image_url_288551" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ocur6ep4p15b3e1p27f2mlbh4k/-B779"> 13084 <div class="product-info flex flex-col grow py-3 px-3"> 13085 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13086 13087 <a href="https://www.flooringinc.com/shop/1-2-premium-rubber-gym-tiles-1030.html"> 13088 <div class="text-primary product-name "> 13089 <span class="product-item-link text-size16 font-bold no-underline relative block" 13090 title="1/2" Premium Gym Floor Tiles â Vulcanized Rubber"> 13091 1/2" Premium Gym Floor Tiles â Vulcanized Rubber </span> 13092 13093 </div> 13094 13095 <div class="ratings " data-nosnippet> 13096 <div data-bv-show="rating_summary" 13097 data-bv-product-id="1030" 13098 data-bv-redirect-url="https://www.flooringinc.com/shop/1-2-premium-rubber-gym-tiles-1030.html"> 13099 </div> 13100 </div> 13101 13102 13103 13104 </a> 13105 13106 <div class="priceBlock"> 13107 <div class="text-gray-900"> 13108 <div class="price-box price-final_price" data-role="priceBox" data-product-id="288551" data-price-box="product-id-288551"><span class="normal-price"> 13109 <span class="price-container price-final_price tax weee" 13110 > 13111 13112 <span id="product-price-288551" data-price-amount="16.42" 13113 data-price-type="finalPrice" 13114 class="price-wrapper " 13115 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$4.05</span> /sqft</span>
13116 <span class="price-mrp"> 13117 <span class="price-mrp-new">was 13118 $6.24 </span> 13119 <span data-info="2.19" class="savePrice">Save 35%</span> </span> 13120 </span> 13121</span> 13122 13123 13124</div> </div> 13125 </div> 13126 13127 <div class="compare-buttons flex flex-wrap"> 13128 13129 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 288551}"> 13130 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13131 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13132 <div class="modal-overlay" x-on:click="showModal = false"></div> 13133 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13134 <div class="modal-content"> 13135 <div x-html="htmlContent" class="htmlcontent288551"></div> 13136 </div> 13137 </div> 13138 </div> 13139 13140 <div class="color_counts"> 13141 <div class="color_count text-size14 font-normal text-center">Available in 9 colors</div> 13142 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13143 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13144 </div> 13145 13146 <div class="ship-fax-plp"> 13147 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/1-2-premium-rubber-gym-tiles-1030.html"> 13148 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13149 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13150 </a> 13151 </div> 13152 13153 13154 </div> 13155 </div> 13156 </div> 13157 13158 </form> 13159 <form method="post" 13160 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/304232/" 13161 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13162 > 13163 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="304232"/> 13164 <div class="catergory_slider_content bg-white no__product__label"> 13165 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13166 <div class="product_lebel_container active"></div> 13167 13168 </div> 13169 <a href="https://www.flooringinc.com/shop/8mm-powerlock-rubber-gym-tiles-14001.html" 13170 class="product photo product-item-photo block mx-auto w-full relative " 13171 tabindex="-1" 13172 > 13173 <div class="product-list-image relative w-full overflow-hidden" 13174 x-data='{
13175 over: false, 13176 hovered: false, 13177 hoverTimer: null, 13178 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_n4ul1befvh291fvp6ohkea0r7l\/-B779-FWEBP", 13179 onEnter() { 13180 this.over = true; 13181 clearTimeout(this.hoverTimer); 13182 this.hoverTimer = setTimeout(() => { 13183 if (this.over) { 13184 this.hovered = true; 13185 } 13186 }, 80); 13187 }, 13188 onMove() { 13189 if (this.over) { 13190 this.hovered = true; 13191 } 13192 }, 13193 onLeave() { 13194 this.over = false; 13195 this.hovered = false; 13196 clearTimeout(this.hoverTimer); 13197 } 13198 }' 13199 :class="hovered ? 'is-hovered' : ''" 13200 x-on:mouseenter="onEnter()" 13201 x-on:mousemove.debounce.80ms="onMove()" 13202 x-on:mouseleave="onLeave()" 13203 > 13204 <img class="hover:shadow-sm object-contain w-full " 13205 x-data="" 13206 @update-gallery-304232.window="$root.src = $event.detail" 13207 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_do5fctakqh1gl8p94kjsdc4a5k/-B779-FWEBP" 13208 loading="lazy" 13209 decoding="async" 13210 fetchpriority="low" 13211 width="779" 13212 height="" 13213 alt="PowerLock Rubber Gym Floor Tiles" 13214 title="PowerLock Rubber Gym Floor Tiles" 13215 style="position: static !important;" /> 13216 <template x-if="hovered"> 13217 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13218 :src="hoverUrl" 13219 loading="lazy" 13220 decoding="async" 13221 fetchpriority="low" 13222 width="779" 13223 height="" 13224 alt="PowerLock Rubber Gym Floor Tiles" 13225 title="PowerLock Rubber Gym Floor Tiles" 13226 aria-hidden="true" /> 13227 </template> 13228 </div> 13229 13230 </a> 13231 <input type="hidden" id="product_name_304232" name="product_name_304232" value="PowerLock Rubber Gym Floor Tiles"> 13232 <input type="hidden" id="product_id_304232" name="product_id_304232" value="304232"> 13233 <input type="hidden" id="product_url_304232" name="product_url_304232" value="https://www.flooringinc.com/shop/8mm-powerlock-rubber-gym-tiles-14001.html"> 13234 <input type="hidden" id="image_url_304232" name="image_url_304232" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_do5fctakqh1gl8p94kjsdc4a5k/-B779"> 13235 <div class="product-info flex flex-col grow py-3 px-3"> 13236 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13237 13238 <a href="https://www.flooringinc.com/shop/8mm-powerlock-rubber-gym-tiles-14001.html"> 13239 <div class="text-primary product-name "> 13240 <span class="product-item-link text-size16 font-bold no-underline relative block" 13241 title="PowerLock Rubber Gym Floor Tiles"> 13242 PowerLock Rubber Gym Floor Tiles </span> 13243 13244 </div> 13245 13246 <div class="ratings " data-nosnippet> 13247 <div data-bv-show="rating_summary" 13248 data-bv-product-id="14001" 13249 data-bv-redirect-url="https://www.flooringinc.com/shop/8mm-powerlock-rubber-gym-tiles-14001.html"> 13250 </div> 13251 </div> 13252 13253 13254 13255 </a> 13256 13257 <div class="priceBlock"> 13258 <div class="text-gray-900"> 13259 <div class="price-box price-final_price" data-role="priceBox" data-product-id="304232" data-price-box="product-id-304232"><span class="normal-price"> 13260 <span class="price-container price-final_price tax weee" 13261 > 13262 13263 <span id="product-price-304232" data-price-amount="6.06" 13264 data-price-type="finalPrice" 13265 class="price-wrapper " 13266 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.65</span> /sqft </span>
13267 <span class="price-mrp"> 13268 <span class="price-mrp-new">was 13269 $2.54 </span> 13270 <span data-info="0.89" class="savePrice">Save 35%</span> </span> 13271 </span> 13272</span> 13273 13274 13275</div> </div> 13276 </div> 13277 13278 <div class="compare-buttons flex flex-wrap"> 13279 13280 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 304232}"> 13281 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13282 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13283 <div class="modal-overlay" x-on:click="showModal = false"></div> 13284 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13285 <div class="modal-content"> 13286 <div x-html="htmlContent" class="htmlcontent304232"></div> 13287 </div> 13288 </div> 13289 </div> 13290 13291 <div class="color_counts"> 13292 <div class="color_count text-size14 font-normal text-center">Available in 7 colors</div> 13293 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13294 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13295 </div> 13296 13297 <div class="ship-fax-plp"> 13298 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/8mm-powerlock-rubber-gym-tiles-14001.html"> 13299 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13300 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13301 </a> 13302 </div> 13303 13304 13305 </div> 13306 </div> 13307 </div> 13308 13309 </form> 13310 <form method="post" 13311 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/316394/" 13312 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13313 > 13314 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="316394"/> 13315 <div class="catergory_slider_content bg-white no__product__label"> 13316 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13317 <div class="product_lebel_container active"></div> 13318 13319 </div> 13320 <a href="https://www.flooringinc.com/shop/1-4-tough-rubber-rolls-1000.html" 13321 class="product photo product-item-photo block mx-auto w-full relative " 13322 tabindex="-1" 13323 > 13324 <div class="product-list-image relative w-full overflow-hidden" 13325 x-data='{
13326 over: false, 13327 hovered: false, 13328 hoverTimer: null, 13329 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_n8r8qrtrml75td2j24nrhcmo2h\/-FJPG\/-B779-FWEBP", 13330 onEnter() { 13331 this.over = true; 13332 clearTimeout(this.hoverTimer); 13333 this.hoverTimer = setTimeout(() => { 13334 if (this.over) { 13335 this.hovered = true; 13336 } 13337 }, 80); 13338 }, 13339 onMove() { 13340 if (this.over) { 13341 this.hovered = true; 13342 } 13343 }, 13344 onLeave() { 13345 this.over = false; 13346 this.hovered = false; 13347 clearTimeout(this.hoverTimer); 13348 } 13349 }' 13350 :class="hovered ? 'is-hovered' : ''" 13351 x-on:mouseenter="onEnter()" 13352 x-on:mousemove.debounce.80ms="onMove()" 13353 x-on:mouseleave="onLeave()" 13354 > 13355 <img class="hover:shadow-sm object-contain w-full " 13356 x-data="" 13357 @update-gallery-316394.window="$root.src = $event.detail" 13358 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_qa84sdsgn103ffmsgs892ci87b/-FJPG/-B779-FWEBP" 13359 loading="lazy" 13360 decoding="async" 13361 fetchpriority="low" 13362 width="779" 13363 height="" 13364 alt="1/4" Tough Rubber Flooring Rolls" 13365 title="1/4" Tough Rubber Flooring Rolls" 13366 style="position: static !important;" /> 13367 <template x-if="hovered"> 13368 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13369 :src="hoverUrl" 13370 loading="lazy" 13371 decoding="async" 13372 fetchpriority="low" 13373 width="779" 13374 height="" 13375 alt="1/4" Tough Rubber Flooring Rolls" 13376 title="1/4" Tough Rubber Flooring Rolls" 13377 aria-hidden="true" /> 13378 </template> 13379 </div> 13380 13381 </a> 13382 <input type="hidden" id="product_name_316394" name="product_name_316394" value="1/4" Tough Rubber Flooring Rolls"> 13383 <input type="hidden" id="product_id_316394" name="product_id_316394" value="316394"> 13384 <input type="hidden" id="product_url_316394" name="product_url_316394" value="https://www.flooringinc.com/shop/1-4-tough-rubber-rolls-1000.html"> 13385 <input type="hidden" id="image_url_316394" name="image_url_316394" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_qa84sdsgn103ffmsgs892ci87b/-FJPG/-B779"> 13386 <div class="product-info flex flex-col grow py-3 px-3"> 13387 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13388 13389 <a href="https://www.flooringinc.com/shop/1-4-tough-rubber-rolls-1000.html"> 13390 <div class="text-primary product-name "> 13391 <span class="product-item-link text-size16 font-bold no-underline relative block" 13392 title="1/4" Tough Rubber Flooring Rolls"> 13393 1/4" Tough Rubber Flooring Rolls </span> 13394 13395 </div> 13396 13397 <div class="ratings " data-nosnippet> 13398 <div data-bv-show="rating_summary" 13399 data-bv-product-id="1000" 13400 data-bv-redirect-url="https://www.flooringinc.com/shop/1-4-tough-rubber-rolls-1000.html"> 13401 </div> 13402 </div> 13403 13404 13405 13406 </a> 13407 13408 <div class="priceBlock"> 13409 <div class="text-gray-900"> 13410 <div class="price-box price-final_price" data-role="priceBox" data-product-id="316394" data-price-box="product-id-316394"><span class="normal-price"> 13411 <span class="price-container price-final_price tax weee" 13412 > 13413 13414 <span id="product-price-316394" data-price-amount="4.6"
13415 data-price-type="finalPrice" 13416 class="price-wrapper " 13417 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.15</span> /sqft</span> 13418 <span class="price-mrp"> 13419 <span class="price-mrp-new">was 13420 $1.77 </span> 13421 <span data-info="0.62" class="savePrice">Save 35%</span> </span> 13422 </span> 13423</span> 13424 13425 13426</div> </div> 13427 </div> 13428 13429 <div class="compare-buttons flex flex-wrap"> 13430 13431 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 316394}"> 13432 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13433 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13434 <div class="modal-overlay" x-on:click="showModal = false"></div> 13435 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13436 <div class="modal-content"> 13437 <div x-html="htmlContent" class="htmlcontent316394"></div> 13438 </div> 13439 </div> 13440 </div> 13441 13442 <div class="color_counts"> 13443 <div class="color_count text-size14 font-normal text-center">Available in 30 colors</div> 13444 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13445 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13446 </div> 13447 13448 <div class="ship-fax-plp"> 13449 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/1-4-tough-rubber-rolls-1000.html"> 13450 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13451 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13452 </a> 13453 </div> 13454 13455 13456 </div> 13457 </div> 13458 </div> 13459 13460 </form> 13461 <form method="post" 13462 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/275153/" 13463 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship " 13464 > 13465 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="275153"/> 13466 <div class="catergory_slider_content bg-white "> 13467 <div class="product__label flex items-center w-full justify-between py-[13px] "> 13468 <div class="product_lebel_container active"> 13469 13470 <span class="product_lebel bestseller_label text-size12 font-semibold text-white text-center"> 13471 # 5 Best Seller 13472 </span> 13473 <sapn class="buy_this_percentage"></span> 13474 13475 </div> 13476 13477 </div> 13478 <a href="https://www.flooringinc.com/shop/dura-lock-rubber-tiles-13369.html" 13479 class="product photo product-item-photo block mx-auto w-full relative " 13480 tabindex="-1" 13481 > 13482 <div class="product-list-image relative w-full overflow-hidden" 13483 x-data='{
13484 over: false, 13485 hovered: false, 13486 hoverTimer: null, 13487 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_1q4pdi0d216kr11s41b036l20g\/-B779-FWEBP", 13488 onEnter() { 13489 this.over = true; 13490 clearTimeout(this.hoverTimer); 13491 this.hoverTimer = setTimeout(() => { 13492 if (this.over) { 13493 this.hovered = true; 13494 } 13495 }, 80); 13496 }, 13497 onMove() { 13498 if (this.over) { 13499 this.hovered = true; 13500 } 13501 }, 13502 onLeave() { 13503 this.over = false; 13504 this.hovered = false; 13505 clearTimeout(this.hoverTimer); 13506 } 13507 }' 13508 :class="hovered ? 'is-hovered' : ''" 13509 x-on:mouseenter="onEnter()" 13510 x-on:mousemove.debounce.80ms="onMove()" 13511 x-on:mouseleave="onLeave()" 13512 > 13513 <img class="hover:shadow-sm object-contain w-full " 13514 x-data="" 13515 @update-gallery-275153.window="$root.src = $event.detail" 13516 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_r31a99ahn116tdsjodu0g6c04i/-B779-FWEBP" 13517 loading="lazy" 13518 decoding="async" 13519 fetchpriority="low" 13520 width="779" 13521 height="" 13522 alt="Dura Lock Rubber Tiles" 13523 title="Dura Lock Rubber Tiles" 13524 style="position: static !important;" /> 13525 <template x-if="hovered"> 13526 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13527 :src="hoverUrl" 13528 loading="lazy" 13529 decoding="async" 13530 fetchpriority="low" 13531 width="779" 13532 height="" 13533 alt="Dura Lock Rubber Tiles" 13534 title="Dura Lock Rubber Tiles" 13535 aria-hidden="true" /> 13536 </template> 13537 </div> 13538 13539 </a> 13540 <input type="hidden" id="product_name_275153" name="product_name_275153" value="Dura Lock Rubber Tiles"> 13541 <input type="hidden" id="product_id_275153" name="product_id_275153" value="275153"> 13542 <input type="hidden" id="product_url_275153" name="product_url_275153" value="https://www.flooringinc.com/shop/dura-lock-rubber-tiles-13369.html"> 13543 <input type="hidden" id="image_url_275153" name="image_url_275153" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_r31a99ahn116tdsjodu0g6c04i/-B779"> 13544 <div class="product-info flex flex-col grow py-3 px-3"> 13545 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13546 13547 <a href="https://www.flooringinc.com/shop/dura-lock-rubber-tiles-13369.html"> 13548 <div class="text-primary product-name "> 13549 <span class="product-item-link text-size16 font-bold no-underline relative block" 13550 title="Dura Lock Rubber Tiles"> 13551 Dura Lock Rubber Tiles </span> 13552 13553 </div> 13554 13555 <div class="ratings " data-nosnippet> 13556 <div data-bv-show="rating_summary" 13557 data-bv-product-id="13369" 13558 data-bv-redirect-url="https://www.flooringinc.com/shop/dura-lock-rubber-tiles-13369.html"> 13559 </div> 13560 </div> 13561 13562 13563 13564 </a> 13565 13566 <div class="priceBlock"> 13567 <div class="text-gray-900"> 13568 <div class="price-box price-final_price" data-role="priceBox" data-product-id="275153" data-price-box="product-id-275153"><span class="normal-price"> 13569 <span class="price-container price-final_price tax weee" 13570 > 13571 13572 <span id="product-price-275153" data-price-amount="6.72" 13573 data-price-type="finalPrice" 13574 class="price-wrapper " 13575 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.75</span> /sqft </span>
13576 <span class="price-mrp"> 13577 <span class="price-mrp-new">was 13578 $2.70 </span> 13579 <span data-info="0.95" class="savePrice">Save 35%</span> </span> 13580 </span> 13581</span> 13582 13583 13584</div> </div> 13585 </div> 13586 13587 <div class="compare-buttons flex flex-wrap"> 13588 13589 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 275153}"> 13590 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13591 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13592 <div class="modal-overlay" x-on:click="showModal = false"></div> 13593 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13594 <div class="modal-content"> 13595 <div x-html="htmlContent" class="htmlcontent275153"></div> 13596 </div> 13597 </div> 13598 </div> 13599 13600 <div class="color_counts"> 13601 <div class="color_count text-size14 font-normal text-center">Available in 12 colors</div> 13602 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13603 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13604 </div> 13605 13606 <div class="ship-fax-plp"> 13607 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/dura-lock-rubber-tiles-13369.html"> 13608 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13609 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13610 </a> 13611 </div> 13612 13613 13614 </div> 13615 </div> 13616 </div> 13617 13618 </form> 13619 <form method="post" 13620 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/298961/" 13621 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13622 > 13623 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="298961"/> 13624 <div class="catergory_slider_content bg-white no__product__label"> 13625 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13626 <div class="product_lebel_container active"></div> 13627 13628 </div> 13629 <a href="https://www.flooringinc.com/shop/1-2-pre-cut-mega-rubber-rolls-9580.html" 13630 class="product photo product-item-photo block mx-auto w-full relative " 13631 tabindex="-1" 13632 > 13633 <div class="product-list-image relative w-full overflow-hidden" 13634 x-data='{
13635 over: false, 13636 hovered: false, 13637 hoverTimer: null, 13638 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_6qfkrpkg9t4m99vi64c5s4gi1f\/-B779-FWEBP", 13639 onEnter() { 13640 this.over = true; 13641 clearTimeout(this.hoverTimer); 13642 this.hoverTimer = setTimeout(() => { 13643 if (this.over) { 13644 this.hovered = true; 13645 } 13646 }, 80); 13647 }, 13648 onMove() { 13649 if (this.over) { 13650 this.hovered = true; 13651 } 13652 }, 13653 onLeave() { 13654 this.over = false; 13655 this.hovered = false; 13656 clearTimeout(this.hoverTimer); 13657 } 13658 }' 13659 :class="hovered ? 'is-hovered' : ''" 13660 x-on:mouseenter="onEnter()" 13661 x-on:mousemove.debounce.80ms="onMove()" 13662 x-on:mouseleave="onLeave()" 13663 > 13664 <img class="hover:shadow-sm object-contain w-full " 13665 x-data="" 13666 @update-gallery-298961.window="$root.src = $event.detail" 13667 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ngrk073ao925v7861lfqmgkh67/-B779-FWEBP" 13668 loading="lazy" 13669 decoding="async" 13670 fetchpriority="low" 13671 width="779" 13672 height="" 13673 alt="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'" 13674 title="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'" 13675 style="position: static !important;" /> 13676 <template x-if="hovered"> 13677 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13678 :src="hoverUrl" 13679 loading="lazy" 13680 decoding="async" 13681 fetchpriority="low" 13682 width="779" 13683 height="" 13684 alt="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'" 13685 title="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'" 13686 aria-hidden="true" /> 13687 </template> 13688 </div> 13689 13690 </a> 13691 <input type="hidden" id="product_name_298961" name="product_name_298961" value="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"> 13692 <input type="hidden" id="product_id_298961" name="product_id_298961" value="298961"> 13693 <input type="hidden" id="product_url_298961" name="product_url_298961" value="https://www.flooringinc.com/shop/1-2-pre-cut-mega-rubber-rolls-9580.html"> 13694 <input type="hidden" id="image_url_298961" name="image_url_298961" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ngrk073ao925v7861lfqmgkh67/-B779"> 13695 <div class="product-info flex flex-col grow py-3 px-3"> 13696 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13697 13698 <a href="https://www.flooringinc.com/shop/1-2-pre-cut-mega-rubber-rolls-9580.html"> 13699 <div class="text-primary product-name "> 13700 <span class="product-item-link text-size16 font-bold no-underline relative block" 13701 title="1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"> 13702 1/2" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50' </span> 13703 13704 </div> 13705 13706 <div class="ratings " data-nosnippet> 13707 <div data-bv-show="rating_summary" 13708 data-bv-product-id="9580" 13709 data-bv-redirect-url="https://www.flooringinc.com/shop/1-2-pre-cut-mega-rubber-rolls-9580.html"> 13710 </div> 13711 </div> 13712 13713 13714 13715 </a> 13716 13717 <div class="priceBlock"> 13718 <div class="text-gray-900"> 13719 <div class="price-box price-final_price" data-role="priceBox" data-product-id="298961" data-price-box="product-id-298961"><span class="normal-price"> 13720 <span class="price-container price-final_price tax weee" 13721 > 13722 13723 <span id="product-price-298961" data-price-amount="162" 13724 data-price-type="finalPrice" 13725 class="price-wrapper " 13726 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$2.70</span> /sq ft</span>
13727 <span class="price-mrp"> 13728 <span class="price-mrp-new">was 13729 $4.29 </span> 13730 <span data-info="1.59" class="savePrice">Save 37%</span> </span> 13731 </span> 13732</span> 13733 13734 13735</div> </div> 13736 </div> 13737 13738 <div class="compare-buttons flex flex-wrap"> 13739 13740 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 298961}"> 13741 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13742 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13743 <div class="modal-overlay" x-on:click="showModal = false"></div> 13744 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13745 <div class="modal-content"> 13746 <div x-html="htmlContent" class="htmlcontent298961"></div> 13747 </div> 13748 </div> 13749 </div> 13750 13751 <div class="color_counts"> 13752 <div class="color_count text-size14 font-normal text-center">Available in 5 colors</div> 13753 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13754 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13755 </div> 13756 13757 <div class="ship-fax-plp"> 13758 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/1-2-pre-cut-mega-rubber-rolls-9580.html"> 13759 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13760 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13761 </a> 13762 </div> 13763 13764 13765 </div> 13766 </div> 13767 </div> 13768 13769 </form> 13770 <form method="post" 13771 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/289901/" 13772 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13773 > 13774 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="289901"/> 13775 <div class="catergory_slider_content bg-white no__product__label"> 13776 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13777 <div class="product_lebel_container active"></div> 13778 13779 </div> 13780 <a href="https://www.flooringinc.com/shop/jamboree-playground-tilestm-3264.html" 13781 class="product photo product-item-photo block mx-auto w-full relative " 13782 tabindex="-1" 13783 > 13784 <div class="product-list-image relative w-full overflow-hidden" 13785 x-data='{
13786 over: false, 13787 hovered: false, 13788 hoverTimer: null, 13789 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_h2bqfoocat6296o7llvaqmm908\/-B779-FWEBP", 13790 onEnter() { 13791 this.over = true; 13792 clearTimeout(this.hoverTimer); 13793 this.hoverTimer = setTimeout(() => { 13794 if (this.over) { 13795 this.hovered = true; 13796 } 13797 }, 80); 13798 }, 13799 onMove() { 13800 if (this.over) { 13801 this.hovered = true; 13802 } 13803 }, 13804 onLeave() { 13805 this.over = false; 13806 this.hovered = false; 13807 clearTimeout(this.hoverTimer); 13808 } 13809 }' 13810 :class="hovered ? 'is-hovered' : ''" 13811 x-on:mouseenter="onEnter()" 13812 x-on:mousemove.debounce.80ms="onMove()" 13813 x-on:mouseleave="onLeave()" 13814 > 13815 <img class="hover:shadow-sm object-contain w-full " 13816 x-data="" 13817 @update-gallery-289901.window="$root.src = $event.detail" 13818 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_te3mrkjsb970t2e49qvnm1cb5u/-B779-FWEBP" 13819 loading="lazy" 13820 decoding="async" 13821 fetchpriority="low" 13822 width="779" 13823 height="" 13824 alt="Jamboree Rubber Playground Tiles™" 13825 title="Jamboree Rubber Playground Tiles™" 13826 style="position: static !important;" /> 13827 <template x-if="hovered"> 13828 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13829 :src="hoverUrl" 13830 loading="lazy" 13831 decoding="async" 13832 fetchpriority="low" 13833 width="779" 13834 height="" 13835 alt="Jamboree Rubber Playground Tiles™" 13836 title="Jamboree Rubber Playground Tiles™" 13837 aria-hidden="true" /> 13838 </template> 13839 </div> 13840 13841 </a> 13842 <input type="hidden" id="product_name_289901" name="product_name_289901" value="Jamboree Rubber Playground Tilesâ¢"> 13843 <input type="hidden" id="product_id_289901" name="product_id_289901" value="289901"> 13844 <input type="hidden" id="product_url_289901" name="product_url_289901" value="https://www.flooringinc.com/shop/jamboree-playground-tilestm-3264.html">
13845 <input type="hidden" id="image_url_289901" name="image_url_289901" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_te3mrkjsb970t2e49qvnm1cb5u/-B779"> 13846 <div class="product-info flex flex-col grow py-3 px-3"> 13847 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/fi_shop_by_brand_jamboree_3.webp"><img src="https://www.flooringinc.com/media/catalog/category/fi_shop_by_brand_jamboree_3.jpg" width="120" height="45" alt="Jamboree" title="Jamboree"/></picture><span class="brand-title">Jamboree</span></div> 13848 13849 <a href="https://www.flooringinc.com/shop/jamboree-playground-tilestm-3264.html"> 13850 <div class="text-primary product-name "> 13851 <span class="product-item-link text-size16 font-bold no-underline relative block" 13852 title="Jamboree Rubber Playground Tilesâ¢"> 13853 Jamboree Rubber Playground Tiles⢠</span> 13854 13855 </div> 13856 13857 <div class="ratings " data-nosnippet> 13858 <div data-bv-show="rating_summary" 13859 data-bv-product-id="3264" 13860 data-bv-redirect-url="https://www.flooringinc.com/shop/jamboree-playground-tilestm-3264.html"> 13861 </div> 13862 </div> 13863 13864 13865 13866 </a> 13867 13868 <div class="priceBlock"> 13869 <div class="text-gray-900"> 13870 <div class="price-box price-final_price" data-role="priceBox" data-product-id="289901" data-price-box="product-id-289901"><span class="normal-price"> 13871 <span class="price-container price-final_price tax weee" 13872 > 13873 13874 <span id="product-price-289901" data-price-amount="26.99" 13875 data-price-type="finalPrice" 13876 class="price-wrapper " 13877 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$6.75</span> /sqft </span> 13878 <span class="price-mrp"> 13879 <span class="price-mrp-new">was 13880 $10.12 </span> 13881 <span data-info="3.37" class="savePrice">Save 33%</span> </span> 13882 </span> 13883</span> 13884 13885 13886</div> </div> 13887 </div> 13888 13889 <div class="compare-buttons flex flex-wrap"> 13890 13891 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 289901}"> 13892 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 13893 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 13894 <div class="modal-overlay" x-on:click="showModal = false"></div> 13895 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 13896 <div class="modal-content"> 13897 <div x-html="htmlContent" class="htmlcontent289901"></div> 13898 </div> 13899 </div> 13900 </div> 13901 13902 <div class="color_counts"> 13903 <div class="color_count text-size14 font-normal text-center">Available in 12 colors</div> 13904 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 13905 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 13906 </div> 13907 13908 <div class="ship-fax-plp"> 13909 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/jamboree-playground-tilestm-3264.html">
13910 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 13911 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 13912 </a> 13913 </div> 13914 13915 13916 </div> 13917 </div> 13918 </div> 13919 13920 </form> 13921 <form method="post" 13922 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/290504/" 13923 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 13924 > 13925 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="290504"/> 13926 <div class="catergory_slider_content bg-white no__product__label"> 13927 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 13928 <div class="product_lebel_container active"></div> 13929 13930 </div> 13931 <a href="https://www.flooringinc.com/shop/regrind-rolls-9854.html" 13932 class="product photo product-item-photo block mx-auto w-full relative " 13933 tabindex="-1" 13934 > 13935 <div class="product-list-image relative w-full overflow-hidden" 13936 x-data='{ 13937 over: false, 13938 hovered: false, 13939 hoverTimer: null,
13940 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_im65ujqhr56bn7uim3seru7u1e\/-B779-FWEBP", 13941 onEnter() { 13942 this.over = true; 13943 clearTimeout(this.hoverTimer); 13944 this.hoverTimer = setTimeout(() => { 13945 if (this.over) { 13946 this.hovered = true; 13947 } 13948 }, 80); 13949 }, 13950 onMove() { 13951 if (this.over) { 13952 this.hovered = true; 13953 } 13954 }, 13955 onLeave() { 13956 this.over = false; 13957 this.hovered = false; 13958 clearTimeout(this.hoverTimer); 13959 } 13960 }' 13961 :class="hovered ? 'is-hovered' : ''" 13962 x-on:mouseenter="onEnter()" 13963 x-on:mousemove.debounce.80ms="onMove()" 13964 x-on:mouseleave="onLeave()" 13965 > 13966 <img class="hover:shadow-sm object-contain w-full " 13967 x-data="" 13968 @update-gallery-290504.window="$root.src = $event.detail" 13969 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_392nc35btp7fn9j463a2te7o60/-B779-FWEBP" 13970 loading="lazy" 13971 decoding="async" 13972 fetchpriority="low" 13973 width="779" 13974 height="" 13975 alt="Regrind Rubber Rolls" 13976 title="Regrind Rubber Rolls" 13977 style="position: static !important;" /> 13978 <template x-if="hovered"> 13979 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 13980 :src="hoverUrl" 13981 loading="lazy" 13982 decoding="async" 13983 fetchpriority="low" 13984 width="779" 13985 height="" 13986 alt="Regrind Rubber Rolls" 13987 title="Regrind Rubber Rolls" 13988 aria-hidden="true" /> 13989 </template> 13990 </div> 13991 13992 </a> 13993 <input type="hidden" id="product_name_290504" name="product_name_290504" value="Regrind Rubber Rolls"> 13994 <input type="hidden" id="product_id_290504" name="product_id_290504" value="290504"> 13995 <input type="hidden" id="product_url_290504" name="product_url_290504" value="https://www.flooringinc.com/shop/regrind-rolls-9854.html"> 13996 <input type="hidden" id="image_url_290504" name="image_url_290504" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_392nc35btp7fn9j463a2te7o60/-B779"> 13997 <div class="product-info flex flex-col grow py-3 px-3"> 13998 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 13999 14000 <a href="https://www.flooringinc.com/shop/regrind-rolls-9854.html"> 14001 <div class="text-primary product-name "> 14002 <span class="product-item-link text-size16 font-bold no-underline relative block" 14003 title="Regrind Rubber Rolls"> 14004 Regrind Rubber Rolls </span> 14005 14006 </div> 14007 14008 <div class="ratings " data-nosnippet> 14009 <div data-bv-show="rating_summary" 14010 data-bv-product-id="9854" 14011 data-bv-redirect-url="https://www.flooringinc.com/shop/regrind-rolls-9854.html"> 14012 </div> 14013 </div> 14014 14015 14016 14017 </a> 14018 14019 <div class="priceBlock"> 14020 <div class="text-gray-900"> 14021 <div class="price-box price-final_price" data-role="priceBox" data-product-id="290504" data-price-box="product-id-290504"><span class="normal-price"> 14022 <span class="price-container price-final_price tax weee" 14023 > 14024
14025 <span id="product-price-290504" data-price-amount="4.96" 14026 data-price-type="finalPrice" 14027 class="price-wrapper " 14028 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.24</span> /sqft</span> 14029 <span class="price-mrp"> 14030 <span class="price-mrp-new">was 14031 $1.91 </span> 14032 <span data-info="0.67" class="savePrice">Save 35%</span> </span> 14033 </span> 14034</span> 14035 14036 14037</div> </div> 14038 </div> 14039 14040 <div class="compare-buttons flex flex-wrap"> 14041 14042 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 290504}"> 14043 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14044 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14045 <div class="modal-overlay" x-on:click="showModal = false"></div> 14046 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14047 <div class="modal-content"> 14048 <div x-html="htmlContent" class="htmlcontent290504"></div> 14049 </div> 14050 </div> 14051 </div> 14052 14053 <div class="color_counts"> 14054 <div class="color_count text-size14 font-normal text-center">Available in 2 colors</div> 14055 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14056 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14057 </div> 14058 14059 14060 14061 </div> 14062 </div> 14063 </div> 14064 14065 </form> 14066 <form method="post" 14067 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/302564/" 14068 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14069 > 14070 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="302564"/> 14071 <div class="catergory_slider_content bg-white no__product__label"> 14072 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14073 <div class="product_lebel_container active"></div> 14074 14075 </div> 14076 <a href="https://www.flooringinc.com/shop/1-2-mega-mats-2800.html" 14077 class="product photo product-item-photo block mx-auto w-full relative " 14078 tabindex="-1" 14079 > 14080 <div class="product-list-image relative w-full overflow-hidden" 14081 x-data='{ 14082 over: false, 14083 hovered: false, 14084 hoverTimer: null,
14085 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_uq6r5imalp0fh2i6147gumgu7o\/-B779-FWEBP", 14086 onEnter() { 14087 this.over = true; 14088 clearTimeout(this.hoverTimer); 14089 this.hoverTimer = setTimeout(() => { 14090 if (this.over) { 14091 this.hovered = true; 14092 } 14093 }, 80); 14094 }, 14095 onMove() { 14096 if (this.over) { 14097 this.hovered = true; 14098 } 14099 }, 14100 onLeave() { 14101 this.over = false; 14102 this.hovered = false; 14103 clearTimeout(this.hoverTimer); 14104 } 14105 }' 14106 :class="hovered ? 'is-hovered' : ''" 14107 x-on:mouseenter="onEnter()" 14108 x-on:mousemove.debounce.80ms="onMove()" 14109 x-on:mouseleave="onLeave()" 14110 > 14111 <img class="hover:shadow-sm object-contain w-full " 14112 x-data="" 14113 @update-gallery-302564.window="$root.src = $event.detail" 14114 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_uq6r5imalp0fh2i6147gumgu7o/-B779-FWEBP" 14115 loading="lazy" 14116 decoding="async" 14117 fetchpriority="low" 14118 width="779" 14119 height="" 14120 alt="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats" 14121 title="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats" 14122 style="position: static !important;" /> 14123 <template x-if="hovered"> 14124 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14125 :src="hoverUrl" 14126 loading="lazy" 14127 decoding="async" 14128 fetchpriority="low" 14129 width="779" 14130 height="" 14131 alt="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats" 14132 title="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats" 14133 aria-hidden="true" /> 14134 </template> 14135 </div> 14136 14137 </a> 14138 <input type="hidden" id="product_name_302564" name="product_name_302564" value="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats"> 14139 <input type="hidden" id="product_id_302564" name="product_id_302564" value="302564"> 14140 <input type="hidden" id="product_url_302564" name="product_url_302564" value="https://www.flooringinc.com/shop/1-2-mega-mats-2800.html"> 14141 <input type="hidden" id="image_url_302564" name="image_url_302564" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_uq6r5imalp0fh2i6147gumgu7o/-B779"> 14142 <div class="product-info flex flex-col grow py-3 px-3"> 14143 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 14144 14145 <a href="https://www.flooringinc.com/shop/1-2-mega-mats-2800.html"> 14146 <div class="text-primary product-name "> 14147 <span class="product-item-link text-size16 font-bold no-underline relative block" 14148 title="1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats"> 14149 1/2" Mega Gym Mats | Rubber Mats & Utility Floor Mats </span> 14150 14151 </div> 14152 14153 <div class="ratings " data-nosnippet> 14154 <div data-bv-show="rating_summary" 14155 data-bv-product-id="2800" 14156 data-bv-redirect-url="https://www.flooringinc.com/shop/1-2-mega-mats-2800.html"> 14157 </div> 14158 </div> 14159 14160 14161 14162 </a> 14163 14164 <div class="priceBlock"> 14165 <div class="text-gray-900"> 14166 <div class="price-box price-final_price" data-role="priceBox" data-product-id="302564" data-price-box="product-id-302564"><span class="normal-price"> 14167 <span class="price-container price-final_price tax weee" 14168 > 14169 14170 <span id="product-price-302564" data-price-amount="47.49" 14171 data-price-type="finalPrice" 14172 class="price-wrapper " 14173 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$47.49</span> /each</span>
14174 <span class="price-mrp"> 14175 <span class="price-mrp-new">was 14176 $73.06 </span> 14177 <span data-info="25.57" class="savePrice">Save 35%</span> </span> 14178 </span> 14179</span> 14180 14181 14182</div> </div> 14183 </div> 14184 14185 <div class="compare-buttons flex flex-wrap"> 14186 14187 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 302564}"> 14188 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14189 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14190 <div class="modal-overlay" x-on:click="showModal = false"></div> 14191 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14192 <div class="modal-content"> 14193 <div x-html="htmlContent" class="htmlcontent302564"></div> 14194 </div> 14195 </div> 14196 </div> 14197 14198 <div class="color_counts"> 14199 <div class="color_count text-size14 font-normal text-center">Available in 13 colors</div> 14200 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14201 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14202 </div> 14203 14204 14205 14206 </div> 14207 </div> 14208 </div> 14209 14210 </form> 14211 <form method="post" 14212 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/292697/" 14213 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14214 > 14215 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="292697"/> 14216 <div class="catergory_slider_content bg-white no__product__label"> 14217 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14218 <div class="product_lebel_container active"></div> 14219 14220 </div> 14221 <a href="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-1005.html" 14222 class="product photo product-item-photo block mx-auto w-full relative " 14223 tabindex="-1" 14224 > 14225 <div class="product-list-image relative w-full overflow-hidden" 14226 x-data='{ 14227 over: false, 14228 hovered: false, 14229 hoverTimer: null,
14230 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_oua8pnbgl50j9acvaj4nscqq2d\/-B779-FWEBP", 14231 onEnter() { 14232 this.over = true; 14233 clearTimeout(this.hoverTimer); 14234 this.hoverTimer = setTimeout(() => { 14235 if (this.over) { 14236 this.hovered = true; 14237 } 14238 }, 80); 14239 }, 14240 onMove() { 14241 if (this.over) { 14242 this.hovered = true; 14243 } 14244 }, 14245 onLeave() { 14246 this.over = false; 14247 this.hovered = false; 14248 clearTimeout(this.hoverTimer); 14249 } 14250 }' 14251 :class="hovered ? 'is-hovered' : ''" 14252 x-on:mouseenter="onEnter()" 14253 x-on:mousemove.debounce.80ms="onMove()" 14254 x-on:mouseleave="onLeave()" 14255 > 14256 <img class="hover:shadow-sm object-contain w-full " 14257 x-data="" 14258 @update-gallery-292697.window="$root.src = $event.detail" 14259 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_qc7660kjf509hbiokssnd3pj7g/-B779-FWEBP" 14260 loading="lazy" 14261 decoding="async" 14262 fetchpriority="low" 14263 width="779" 14264 height="" 14265 alt="8mm Strong Rubber Gym Flooring Rolls" 14266 title="8mm Strong Rubber Gym Flooring Rolls" 14267 style="position: static !important;" /> 14268 <template x-if="hovered"> 14269 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14270 :src="hoverUrl" 14271 loading="lazy" 14272 decoding="async" 14273 fetchpriority="low" 14274 width="779" 14275 height="" 14276 alt="8mm Strong Rubber Gym Flooring Rolls" 14277 title="8mm Strong Rubber Gym Flooring Rolls" 14278 aria-hidden="true" /> 14279 </template> 14280 </div> 14281 14282 </a> 14283 <input type="hidden" id="product_name_292697" name="product_name_292697" value="8mm Strong Rubber Gym Flooring Rolls"> 14284 <input type="hidden" id="product_id_292697" name="product_id_292697" value="292697"> 14285 <input type="hidden" id="product_url_292697" name="product_url_292697" value="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-1005.html"> 14286 <input type="hidden" id="image_url_292697" name="image_url_292697" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_qc7660kjf509hbiokssnd3pj7g/-B779"> 14287 <div class="product-info flex flex-col grow py-3 px-3"> 14288 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 14289 14290 <a href="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-1005.html"> 14291 <div class="text-primary product-name "> 14292 <span class="product-item-link text-size16 font-bold no-underline relative block" 14293 title="8mm Strong Rubber Gym Flooring Rolls"> 14294 8mm Strong Rubber Gym Flooring Rolls </span> 14295 14296 </div> 14297 14298 <div class="ratings " data-nosnippet> 14299 <div data-bv-show="rating_summary" 14300 data-bv-product-id="1005" 14301 data-bv-redirect-url="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-1005.html"> 14302 </div> 14303 </div> 14304 14305 14306 14307 </a> 14308 14309 <div class="priceBlock"> 14310 <div class="text-gray-900"> 14311 <div class="price-box price-final_price" data-role="priceBox" data-product-id="292697" data-price-box="product-id-292697"><span class="normal-price"> 14312 <span class="price-container price-final_price tax weee" 14313 > 14314 14315 <span id="product-price-292697" data-price-amount="5.65" 14316 data-price-type="finalPrice" 14317 class="price-wrapper " 14318 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$1.41</span> /sqft </span>
14319 <span class="price-mrp"> 14320 <span class="price-mrp-new">was 14321 $2.17 </span> 14322 <span data-info="0.76" class="savePrice">Save 35%</span> </span> 14323 </span> 14324</span> 14325 14326 14327</div> </div> 14328 </div> 14329 14330 <div class="compare-buttons flex flex-wrap"> 14331 14332 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 292697}"> 14333 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14334 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14335 <div class="modal-overlay" x-on:click="showModal = false"></div> 14336 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14337 <div class="modal-content"> 14338 <div x-html="htmlContent" class="htmlcontent292697"></div> 14339 </div> 14340 </div> 14341 </div> 14342 14343 <div class="color_counts"> 14344 <div class="color_count text-size14 font-normal text-center">Available in 34 colors</div> 14345 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14346 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14347 </div> 14348 14349 <div class="ship-fax-plp"> 14350 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-1005.html"> 14351 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 14352 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 14353 </a> 14354 </div> 14355 14356 14357 </div> 14358 </div> 14359 </div> 14360 14361 </form> 14362 <form method="post" 14363 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/284975/" 14364 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14365 > 14366 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="284975"/> 14367 <div class="catergory_slider_content bg-white no__product__label"> 14368 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14369 <div class="product_lebel_container active"></div> 14370 14371 </div> 14372 <a href="https://www.flooringinc.com/shop/15mm-impact-rolls-designer-series-5037.html" 14373 class="product photo product-item-photo block mx-auto w-full relative " 14374 tabindex="-1" 14375 > 14376 <div class="product-list-image relative w-full overflow-hidden" 14377 x-data='{
14378 over: false, 14379 hovered: false, 14380 hoverTimer: null, 14381 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_rudpul0vth5dl0gttgf9p5c155\/-B779-FWEBP", 14382 onEnter() { 14383 this.over = true; 14384 clearTimeout(this.hoverTimer); 14385 this.hoverTimer = setTimeout(() => { 14386 if (this.over) { 14387 this.hovered = true; 14388 } 14389 }, 80); 14390 }, 14391 onMove() { 14392 if (this.over) { 14393 this.hovered = true; 14394 } 14395 }, 14396 onLeave() { 14397 this.over = false; 14398 this.hovered = false; 14399 clearTimeout(this.hoverTimer); 14400 } 14401 }' 14402 :class="hovered ? 'is-hovered' : ''" 14403 x-on:mouseenter="onEnter()" 14404 x-on:mousemove.debounce.80ms="onMove()" 14405 x-on:mouseleave="onLeave()" 14406 > 14407 <img class="hover:shadow-sm object-contain w-full " 14408 x-data="" 14409 @update-gallery-284975.window="$root.src = $event.detail" 14410 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_7nvi353alp0ufcakrnoa4ejh2o/-B779-FWEBP" 14411 loading="lazy" 14412 decoding="async" 14413 fetchpriority="low" 14414 width="779" 14415 height="" 14416 alt="15mm Impact Rubber Rolls - Designer Series" 14417 title="15mm Impact Rubber Rolls - Designer Series" 14418 style="position: static !important;" /> 14419 <template x-if="hovered"> 14420 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14421 :src="hoverUrl" 14422 loading="lazy" 14423 decoding="async" 14424 fetchpriority="low" 14425 width="779" 14426 height="" 14427 alt="15mm Impact Rubber Rolls - Designer Series" 14428 title="15mm Impact Rubber Rolls - Designer Series" 14429 aria-hidden="true" /> 14430 </template> 14431 </div> 14432 14433 </a> 14434 <input type="hidden" id="product_name_284975" name="product_name_284975" value="15mm Impact Rubber Rolls - Designer Series"> 14435 <input type="hidden" id="product_id_284975" name="product_id_284975" value="284975"> 14436 <input type="hidden" id="product_url_284975" name="product_url_284975" value="https://www.flooringinc.com/shop/15mm-impact-rolls-designer-series-5037.html"> 14437 <input type="hidden" id="image_url_284975" name="image_url_284975" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_7nvi353alp0ufcakrnoa4ejh2o/-B779"> 14438 <div class="product-info flex flex-col grow py-3 px-3"> 14439 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 14440 14441 <a href="https://www.flooringinc.com/shop/15mm-impact-rolls-designer-series-5037.html"> 14442 <div class="text-primary product-name "> 14443 <span class="product-item-link text-size16 font-bold no-underline relative block" 14444 title="15mm Impact Rubber Rolls - Designer Series"> 14445 15mm Impact Rubber Rolls - Designer Series </span> 14446 14447 </div> 14448 14449 <div class="ratings " data-nosnippet> 14450 <div data-bv-show="rating_summary" 14451 data-bv-product-id="5037" 14452 data-bv-redirect-url="https://www.flooringinc.com/shop/15mm-impact-rolls-designer-series-5037.html"> 14453 </div> 14454 </div> 14455 14456 14457 14458 </a> 14459 14460 <div class="priceBlock"> 14461 <div class="text-gray-900"> 14462 <div class="price-box price-final_price" data-role="priceBox" data-product-id="284975" data-price-box="product-id-284975"><span class="normal-price"> 14463 <span class="price-container price-final_price tax weee" 14464 > 14465 14466 <span id="product-price-284975" data-price-amount="25.96" 14467 data-price-type="finalPrice" 14468 class="price-wrapper " 14469 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$6.49</span> /sqft</span>
14470 <span class="price-mrp"> 14471 <span class="price-mrp-new">was 14472 $9.99 </span> 14473 <span data-info="3.5" class="savePrice">Save 35%</span> </span> 14474 </span> 14475</span> 14476 14477 14478</div> </div> 14479 </div> 14480 14481 <div class="compare-buttons flex flex-wrap"> 14482 14483 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 284975}"> 14484 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14485 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14486 <div class="modal-overlay" x-on:click="showModal = false"></div> 14487 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14488 <div class="modal-content"> 14489 <div x-html="htmlContent" class="htmlcontent284975"></div> 14490 </div> 14491 </div> 14492 </div> 14493 14494 <div class="color_counts"> 14495 <div class="color_count text-size14 font-normal text-center">Available in 20 colors</div> 14496 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14497 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14498 </div> 14499 14500 14501 14502 </div> 14503 </div> 14504 </div> 14505 14506 </form> 14507 <form method="post" 14508 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/281438/" 14509 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14510 > 14511 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="281438"/> 14512 <div class="catergory_slider_content bg-white no__product__label"> 14513 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14514 <div class="product_lebel_container active"></div> 14515 14516 </div> 14517 <a href="https://www.flooringinc.com/shop/impact-rolls-wood-series-5047.html" 14518 class="product photo product-item-photo block mx-auto w-full relative " 14519 tabindex="-1" 14520 > 14521 <div class="product-list-image relative w-full overflow-hidden" 14522 x-data='{ 14523 over: false, 14524 hovered: false, 14525 hoverTimer: null,
14526 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_17s1243u9l2jj7hdjbv1tbdk3f\/-B779-FWEBP", 14527 onEnter() { 14528 this.over = true; 14529 clearTimeout(this.hoverTimer); 14530 this.hoverTimer = setTimeout(() => { 14531 if (this.over) { 14532 this.hovered = true; 14533 } 14534 }, 80); 14535 }, 14536 onMove() { 14537 if (this.over) { 14538 this.hovered = true; 14539 } 14540 }, 14541 onLeave() { 14542 this.over = false; 14543 this.hovered = false; 14544 clearTimeout(this.hoverTimer); 14545 } 14546 }' 14547 :class="hovered ? 'is-hovered' : ''" 14548 x-on:mouseenter="onEnter()" 14549 x-on:mousemove.debounce.80ms="onMove()" 14550 x-on:mouseleave="onLeave()" 14551 > 14552 <img class="hover:shadow-sm object-contain w-full " 14553 x-data="" 14554 @update-gallery-281438.window="$root.src = $event.detail" 14555 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_r4is4tdash091a4vnh3ce4su4f/-B779-FWEBP" 14556 loading="lazy" 14557 decoding="async" 14558 fetchpriority="low" 14559 width="779" 14560 height="" 14561 alt="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer" 14562 title="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer" 14563 style="position: static !important;" /> 14564 <template x-if="hovered"> 14565 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14566 :src="hoverUrl" 14567 loading="lazy" 14568 decoding="async" 14569 fetchpriority="low" 14570 width="779" 14571 height="" 14572 alt="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer" 14573 title="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer" 14574 aria-hidden="true" /> 14575 </template> 14576 </div> 14577 14578 </a> 14579 <input type="hidden" id="product_name_281438" name="product_name_281438" value="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"> 14580 <input type="hidden" id="product_id_281438" name="product_id_281438" value="281438"> 14581 <input type="hidden" id="product_url_281438" name="product_url_281438" value="https://www.flooringinc.com/shop/impact-rolls-wood-series-5047.html"> 14582 <input type="hidden" id="image_url_281438" name="image_url_281438" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_r4is4tdash091a4vnh3ce4su4f/-B779"> 14583 <div class="product-info flex flex-col grow py-3 px-3"> 14584 <div class="brand_logo_listpage no_brand"></div> 14585 14586 <a href="https://www.flooringinc.com/shop/impact-rolls-wood-series-5047.html"> 14587 <div class="text-primary product-name "> 14588 <span class="product-item-link text-size16 font-bold no-underline relative block" 14589 title="Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"> 14590 Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer </span> 14591 14592 </div> 14593 14594 <div class="ratings " data-nosnippet> 14595 <div data-bv-show="rating_summary" 14596 data-bv-product-id="5047" 14597 data-bv-redirect-url="https://www.flooringinc.com/shop/impact-rolls-wood-series-5047.html"> 14598 </div> 14599 </div> 14600 14601 14602 14603 </a> 14604 14605 <div class="priceBlock"> 14606 <div class="text-gray-900"> 14607 <div class="price-box price-final_price" data-role="priceBox" data-product-id="281438" data-price-box="product-id-281438"><span class="normal-price"> 14608 <span class="price-container price-final_price tax weee" 14609 > 14610 14611 <span id="product-price-281438" data-price-amount="55.5" 14612 data-price-type="finalPrice" 14613 class="price-wrapper " 14614 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$9.25</span> /sqft</span>
14615 <span class="price-mrp"> 14616 <span class="price-mrp-new">was 14617 $14.23 </span> 14618 <span data-info="4.98" class="savePrice">Save 35%</span> </span> 14619 </span> 14620</span> 14621 14622 14623</div> </div> 14624 </div> 14625 14626 <div class="compare-buttons flex flex-wrap"> 14627 14628 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 281438}"> 14629 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14630 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14631 <div class="modal-overlay" x-on:click="showModal = false"></div> 14632 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14633 <div class="modal-content"> 14634 <div x-html="htmlContent" class="htmlcontent281438"></div> 14635 </div> 14636 </div> 14637 </div> 14638 14639 <div class="color_counts"> 14640 <div class="color_count text-size14 font-normal text-center">Available in 4 colors</div> 14641 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14642 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14643 </div> 14644 14645 14646 14647 </div> 14648 </div> 14649 </div> 14650 14651 </form> 14652 <form method="post" 14653 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/301589/" 14654 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14655 > 14656 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="301589"/> 14657 <div class="catergory_slider_content bg-white no__product__label"> 14658 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14659 <div class="product_lebel_container active"></div> 14660 14661 </div> 14662 <a href="https://www.flooringinc.com/shop/1-monster-rubber-tiles-1040.html" 14663 class="product photo product-item-photo block mx-auto w-full relative " 14664 tabindex="-1" 14665 > 14666 <div class="product-list-image relative w-full overflow-hidden" 14667 x-data='{ 14668 over: false, 14669 hovered: false, 14670 hoverTimer: null,
14671 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_0h8kkgq34t0c31c9npu63pju45\/-B779-FWEBP", 14672 onEnter() { 14673 this.over = true; 14674 clearTimeout(this.hoverTimer); 14675 this.hoverTimer = setTimeout(() => { 14676 if (this.over) { 14677 this.hovered = true; 14678 } 14679 }, 80); 14680 }, 14681 onMove() { 14682 if (this.over) { 14683 this.hovered = true; 14684 } 14685 }, 14686 onLeave() { 14687 this.over = false; 14688 this.hovered = false; 14689 clearTimeout(this.hoverTimer); 14690 } 14691 }' 14692 :class="hovered ? 'is-hovered' : ''" 14693 x-on:mouseenter="onEnter()" 14694 x-on:mousemove.debounce.80ms="onMove()" 14695 x-on:mouseleave="onLeave()" 14696 > 14697 <img class="hover:shadow-sm object-contain w-full " 14698 x-data="" 14699 @update-gallery-301589.window="$root.src = $event.detail" 14700 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ere8ea2kpd0k9a5cbcr5i17b0h/-B779-FWEBP" 14701 loading="lazy" 14702 decoding="async" 14703 fetchpriority="low" 14704 width="779" 14705 height="" 14706 alt="1" Monster Rubber Tiles" 14707 title="1" Monster Rubber Tiles" 14708 style="position: static !important;" /> 14709 <template x-if="hovered"> 14710 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14711 :src="hoverUrl" 14712 loading="lazy" 14713 decoding="async" 14714 fetchpriority="low" 14715 width="779" 14716 height="" 14717 alt="1" Monster Rubber Tiles" 14718 title="1" Monster Rubber Tiles" 14719 aria-hidden="true" /> 14720 </template> 14721 </div> 14722 14723 </a> 14724 <input type="hidden" id="product_name_301589" name="product_name_301589" value="1" Monster Rubber Tiles"> 14725 <input type="hidden" id="product_id_301589" name="product_id_301589" value="301589"> 14726 <input type="hidden" id="product_url_301589" name="product_url_301589" value="https://www.flooringinc.com/shop/1-monster-rubber-tiles-1040.html"> 14727 <input type="hidden" id="image_url_301589" name="image_url_301589" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_ere8ea2kpd0k9a5cbcr5i17b0h/-B779"> 14728 <div class="product-info flex flex-col grow py-3 px-3"> 14729 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 14730 14731 <a href="https://www.flooringinc.com/shop/1-monster-rubber-tiles-1040.html"> 14732 <div class="text-primary product-name "> 14733 <span class="product-item-link text-size16 font-bold no-underline relative block" 14734 title="1" Monster Rubber Tiles"> 14735 1" Monster Rubber Tiles </span> 14736 14737 </div> 14738 14739 <div class="ratings " data-nosnippet> 14740 <div data-bv-show="rating_summary" 14741 data-bv-product-id="1040" 14742 data-bv-redirect-url="https://www.flooringinc.com/shop/1-monster-rubber-tiles-1040.html"> 14743 </div> 14744 </div> 14745 14746 14747 14748 </a> 14749 14750 <div class="priceBlock"> 14751 <div class="text-gray-900"> 14752 <div class="price-box price-final_price" data-role="priceBox" data-product-id="301589" data-price-box="product-id-301589"><span class="normal-price"> 14753 <span class="price-container price-final_price tax weee" 14754 > 14755 14756 <span id="product-price-301589" data-price-amount="35.96" 14757 data-price-type="finalPrice" 14758 class="price-wrapper " 14759 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$8.99</span> /sqft</span>
14760 <span class="price-mrp"> 14761 <span class="price-mrp-new">was 14762 $13.83 </span> 14763 <span data-info="4.84" class="savePrice">Save 35%</span> </span> 14764 </span> 14765</span> 14766 14767 14768</div> </div> 14769 </div> 14770 14771 <div class="compare-buttons flex flex-wrap"> 14772 14773 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 301589}"> 14774 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14775 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14776 <div class="modal-overlay" x-on:click="showModal = false"></div> 14777 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14778 <div class="modal-content"> 14779 <div x-html="htmlContent" class="htmlcontent301589"></div> 14780 </div> 14781 </div> 14782 </div> 14783 14784 <div class="color_counts"> 14785 <div class="color_count text-size14 font-normal text-center">Available in 16 colors</div> 14786 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14787 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14788 </div> 14789 14790 14791 14792 </div> 14793 </div> 14794 </div> 14795 14796 </form> 14797 <form method="post" 14798 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/304106/" 14799 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14800 > 14801 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="304106"/> 14802 <div class="catergory_slider_content bg-white no__product__label"> 14803 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14804 <div class="product_lebel_container active"></div> 14805 14806 </div> 14807 <a href="https://www.flooringinc.com/shop/3-4-olympian-rubber-rolls-14009.html" 14808 class="product photo product-item-photo block mx-auto w-full relative " 14809 tabindex="-1" 14810 > 14811 <div class="product-list-image relative w-full overflow-hidden" 14812 x-data='{ 14813 over: false, 14814 hovered: false, 14815 hoverTimer: null,
14816 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_phn0ll6uad2qn517dq4srcop3h\/-B779-FWEBP", 14817 onEnter() { 14818 this.over = true; 14819 clearTimeout(this.hoverTimer); 14820 this.hoverTimer = setTimeout(() => { 14821 if (this.over) { 14822 this.hovered = true; 14823 } 14824 }, 80); 14825 }, 14826 onMove() { 14827 if (this.over) { 14828 this.hovered = true; 14829 } 14830 }, 14831 onLeave() { 14832 this.over = false; 14833 this.hovered = false; 14834 clearTimeout(this.hoverTimer); 14835 } 14836 }' 14837 :class="hovered ? 'is-hovered' : ''" 14838 x-on:mouseenter="onEnter()" 14839 x-on:mousemove.debounce.80ms="onMove()" 14840 x-on:mouseleave="onLeave()" 14841 > 14842 <img class="hover:shadow-sm object-contain w-full " 14843 x-data="" 14844 @update-gallery-304106.window="$root.src = $event.detail" 14845 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_9jmbeqvd8h02v0tj320h8c7957/-B779-FWEBP" 14846 loading="lazy" 14847 decoding="async" 14848 fetchpriority="low" 14849 width="779" 14850 height="" 14851 alt="3/4" Olympian Rubber Rolls | Commercial Gym Flooring" 14852 title="3/4" Olympian Rubber Rolls | Commercial Gym Flooring" 14853 style="position: static !important;" /> 14854 <template x-if="hovered"> 14855 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 14856 :src="hoverUrl" 14857 loading="lazy" 14858 decoding="async" 14859 fetchpriority="low" 14860 width="779" 14861 height="" 14862 alt="3/4" Olympian Rubber Rolls | Commercial Gym Flooring" 14863 title="3/4" Olympian Rubber Rolls | Commercial Gym Flooring" 14864 aria-hidden="true" /> 14865 </template> 14866 </div> 14867 14868 </a> 14869 <input type="hidden" id="product_name_304106" name="product_name_304106" value="3/4" Olympian Rubber Rolls | Commercial Gym Flooring"> 14870 <input type="hidden" id="product_id_304106" name="product_id_304106" value="304106"> 14871 <input type="hidden" id="product_url_304106" name="product_url_304106" value="https://www.flooringinc.com/shop/3-4-olympian-rubber-rolls-14009.html"> 14872 <input type="hidden" id="image_url_304106" name="image_url_304106" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_9jmbeqvd8h02v0tj320h8c7957/-B779"> 14873 <div class="product-info flex flex-col grow py-3 px-3"> 14874 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 14875 14876 <a href="https://www.flooringinc.com/shop/3-4-olympian-rubber-rolls-14009.html"> 14877 <div class="text-primary product-name "> 14878 <span class="product-item-link text-size16 font-bold no-underline relative block" 14879 title="3/4" Olympian Rubber Rolls | Commercial Gym Flooring"> 14880 3/4" Olympian Rubber Rolls | Commercial Gym Flooring </span> 14881 14882 </div> 14883 14884 <div class="ratings " data-nosnippet> 14885 <div data-bv-show="rating_summary" 14886 data-bv-product-id="14009" 14887 data-bv-redirect-url="https://www.flooringinc.com/shop/3-4-olympian-rubber-rolls-14009.html"> 14888 </div> 14889 </div> 14890 14891 14892 14893 </a> 14894 14895 <div class="priceBlock"> 14896 <div class="text-gray-900"> 14897 <div class="price-box price-final_price" data-role="priceBox" data-product-id="304106" data-price-box="product-id-304106"><span class="normal-price"> 14898 <span class="price-container price-final_price tax weee" 14899 > 14900 14901 <span id="product-price-304106" data-price-amount="13" 14902 data-price-type="finalPrice" 14903 class="price-wrapper " 14904 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$3.25</span> /sqft</span>
14905 <span class="price-mrp"> 14906 <span class="price-mrp-new">was 14907 $5.00 </span> 14908 <span data-info="1.75" class="savePrice">Save 35%</span> </span> 14909 </span> 14910</span> 14911 14912 14913</div> </div> 14914 </div> 14915 14916 <div class="compare-buttons flex flex-wrap"> 14917 14918 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 304106}"> 14919 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 14920 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 14921 <div class="modal-overlay" x-on:click="showModal = false"></div> 14922 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 14923 <div class="modal-content"> 14924 <div x-html="htmlContent" class="htmlcontent304106"></div> 14925 </div> 14926 </div> 14927 </div> 14928 14929 <div class="color_counts"> 14930 <div class="color_count text-size14 font-normal text-center">Available in 18 colors</div> 14931 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 14932 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 14933 </div> 14934 14935 <div class="ship-fax-plp"> 14936 <a class="ship-iconsada" title="Quick Ship" href="https://www.flooringinc.com/shop/3-4-olympian-rubber-rolls-14009.html"> 14937 <span class="text-[14px] text-[#296497] font-semibold">Quick Ship</span> 14938 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/quick_ship.webp"><img alt="Quick Ship" title="Quick Ship" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/quick_ship.png" class="hidden" /></picture> 14939 </a> 14940 </div> 14941 14942 14943 </div> 14944 </div> 14945 </div> 14946 14947 </form> 14948 <form method="post" 14949 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/277442/" 14950 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 14951 > 14952 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="277442"/> 14953 <div class="catergory_slider_content bg-white no__product__label"> 14954 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 14955 <div class="product_lebel_container active"></div> 14956 14957 </div> 14958 <a href="https://www.flooringinc.com/shop/1-4-tough-mats-2803.html" 14959 class="product photo product-item-photo block mx-auto w-full relative " 14960 tabindex="-1" 14961 > 14962 <div class="product-list-image relative w-full overflow-hidden" 14963 x-data='{
14964 over: false, 14965 hovered: false, 14966 hoverTimer: null, 14967 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_97ejmkkaeh2fnc3n6c5dr7t203\/-B779-FWEBP", 14968 onEnter() { 14969 this.over = true; 14970 clearTimeout(this.hoverTimer); 14971 this.hoverTimer = setTimeout(() => { 14972 if (this.over) { 14973 this.hovered = true; 14974 } 14975 }, 80); 14976 }, 14977 onMove() { 14978 if (this.over) { 14979 this.hovered = true; 14980 } 14981 }, 14982 onLeave() { 14983 this.over = false; 14984 this.hovered = false; 14985 clearTimeout(this.hoverTimer); 14986 } 14987 }' 14988 :class="hovered ? 'is-hovered' : ''" 14989 x-on:mouseenter="onEnter()" 14990 x-on:mousemove.debounce.80ms="onMove()" 14991 x-on:mouseleave="onLeave()" 14992 > 14993 <img class="hover:shadow-sm object-contain w-full " 14994 x-data="" 14995 @update-gallery-277442.window="$root.src = $event.detail" 14996 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_lnh8u5vh957jd5v4ai26lmk25r/-B779-FWEBP" 14997 loading="lazy" 14998 decoding="async" 14999 fetchpriority="low" 15000 width="779" 15001 height="" 15002 alt="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats " 15003 title="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats " 15004 style="position: static !important;" /> 15005 <template x-if="hovered"> 15006 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 15007 :src="hoverUrl" 15008 loading="lazy" 15009 decoding="async" 15010 fetchpriority="low" 15011 width="779" 15012 height="" 15013 alt="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats " 15014 title="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats " 15015 aria-hidden="true" /> 15016 </template> 15017 </div> 15018 15019 </a> 15020 <input type="hidden" id="product_name_277442" name="product_name_277442" value="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats "> 15021 <input type="hidden" id="product_id_277442" name="product_id_277442" value="277442"> 15022 <input type="hidden" id="product_url_277442" name="product_url_277442" value="https://www.flooringinc.com/shop/1-4-tough-mats-2803.html"> 15023 <input type="hidden" id="image_url_277442" name="image_url_277442" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_lnh8u5vh957jd5v4ai26lmk25r/-B779"> 15024 <div class="product-info flex flex-col grow py-3 px-3"> 15025 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 15026 15027 <a href="https://www.flooringinc.com/shop/1-4-tough-mats-2803.html"> 15028 <div class="text-primary product-name "> 15029 <span class="product-item-link text-size16 font-bold no-underline relative block" 15030 title="1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats "> 15031 1/4" Tough Rubber Mats | Fitness Mats & Utility Floor Mats </span> 15032 15033 </div> 15034 15035 <div class="ratings " data-nosnippet> 15036 <div data-bv-show="rating_summary" 15037 data-bv-product-id="2803" 15038 data-bv-redirect-url="https://www.flooringinc.com/shop/1-4-tough-mats-2803.html"> 15039 </div> 15040 </div> 15041 15042 15043 15044 </a> 15045 15046 <div class="priceBlock"> 15047 <div class="text-gray-900"> 15048 <div class="price-box price-final_price" data-role="priceBox" data-product-id="277442" data-price-box="product-id-277442"><span class="normal-price"> 15049 <span class="price-container price-final_price tax weee" 15050 > 15051 15052 <span id="product-price-277442" data-price-amount="63.74" 15053 data-price-type="finalPrice" 15054 class="price-wrapper " 15055 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$63.74</span> /each</span>
15056 <span class="price-mrp"> 15057 <span class="price-mrp-new">was 15058 $98.06 </span> 15059 <span data-info="34.32" class="savePrice">Save 35%</span> </span> 15060 </span> 15061</span> 15062 15063 15064</div> </div> 15065 </div> 15066 15067 <div class="compare-buttons flex flex-wrap"> 15068 15069 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 277442}"> 15070 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 15071 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 15072 <div class="modal-overlay" x-on:click="showModal = false"></div> 15073 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 15074 <div class="modal-content"> 15075 <div x-html="htmlContent" class="htmlcontent277442"></div> 15076 </div> 15077 </div> 15078 </div> 15079 15080 <div class="color_counts"> 15081 <div class="color_count text-size14 font-normal text-center">Available in 10 colors</div> 15082 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 15083 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 15084 </div> 15085 15086 <div class="ship-fax-plp"> 15087 <a class="ship-iconsada" title="Free Shipping" href="https://www.flooringinc.com/shop/1-4-tough-mats-2803.html"> 15088 <span class="text-[14px] text-[#296497] font-semibold">Free Shipping</span> 15089 <picture class="hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/product/free_shipping.webp"><img alt="Free Shipping" title="Free Shipping" width="160" height="51" src="https://www.flooringinc.com/media/catalog/product/free_shipping.png" class="hidden" /></picture> 15090 </a> 15091 </div> 15092 15093 15094 </div> 15095 </div> 15096 </div> 15097 15098 </form> 15099 <form method="post" 15100 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/421534/" 15101 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 15102 > 15103 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="421534"/> 15104 <div class="catergory_slider_content bg-white no__product__label"> 15105 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 15106 <div class="product_lebel_container active"></div> 15107 15108 </div> 15109 <a href="https://www.flooringinc.com/shop/budget-rubber-rolls-14048.html" 15110 class="product photo product-item-photo block mx-auto w-full relative " 15111 tabindex="-1" 15112 > 15113 <div class="product-list-image relative w-full overflow-hidden" 15114 x-data='{
15115 over: false, 15116 hovered: false, 15117 hoverTimer: null, 15118 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_gcsrolb7412c1c0i02vs0b9i07\/-B779-FWEBP", 15119 onEnter() { 15120 this.over = true; 15121 clearTimeout(this.hoverTimer); 15122 this.hoverTimer = setTimeout(() => { 15123 if (this.over) { 15124 this.hovered = true; 15125 } 15126 }, 80); 15127 }, 15128 onMove() { 15129 if (this.over) { 15130 this.hovered = true; 15131 } 15132 }, 15133 onLeave() { 15134 this.over = false; 15135 this.hovered = false; 15136 clearTimeout(this.hoverTimer); 15137 } 15138 }' 15139 :class="hovered ? 'is-hovered' : ''" 15140 x-on:mouseenter="onEnter()" 15141 x-on:mousemove.debounce.80ms="onMove()" 15142 x-on:mouseleave="onLeave()" 15143 > 15144 <img class="hover:shadow-sm object-contain w-full " 15145 x-data="" 15146 @update-gallery-421534.window="$root.src = $event.detail" 15147 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_kuq49misgh2mvavjim7qcoam1i/-B779-FWEBP" 15148 loading="lazy" 15149 decoding="async" 15150 fetchpriority="low" 15151 width="779" 15152 height="" 15153 alt="Budget Rubber Flooring Rolls - Best Value" 15154 title="Budget Rubber Flooring Rolls - Best Value" 15155 style="position: static !important;" /> 15156 <template x-if="hovered"> 15157 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 15158 :src="hoverUrl" 15159 loading="lazy" 15160 decoding="async" 15161 fetchpriority="low" 15162 width="779" 15163 height="" 15164 alt="Budget Rubber Flooring Rolls - Best Value" 15165 title="Budget Rubber Flooring Rolls - Best Value" 15166 aria-hidden="true" /> 15167 </template> 15168 </div> 15169 15170 </a> 15171 <input type="hidden" id="product_name_421534" name="product_name_421534" value="Budget Rubber Flooring Rolls - Best Value"> 15172 <input type="hidden" id="product_id_421534" name="product_id_421534" value="421534"> 15173 <input type="hidden" id="product_url_421534" name="product_url_421534" value="https://www.flooringinc.com/shop/budget-rubber-rolls-14048.html"> 15174 <input type="hidden" id="image_url_421534" name="image_url_421534" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_kuq49misgh2mvavjim7qcoam1i/-B779"> 15175 <div class="product-info flex flex-col grow py-3 px-3"> 15176 <div class="brand_logo_listpage no_brand"></div> 15177 15178 <a href="https://www.flooringinc.com/shop/budget-rubber-rolls-14048.html"> 15179 <div class="text-primary product-name "> 15180 <span class="product-item-link text-size16 font-bold no-underline relative block" 15181 title="Budget Rubber Flooring Rolls - Best Value"> 15182 Budget Rubber Flooring Rolls - Best Value </span> 15183 15184 </div> 15185 15186 <div class="ratings " data-nosnippet> 15187 <div data-bv-show="rating_summary" 15188 data-bv-product-id="14048" 15189 data-bv-redirect-url="https://www.flooringinc.com/shop/budget-rubber-rolls-14048.html"> 15190 </div> 15191 </div> 15192 15193 15194 15195 </a> 15196 15197 <div class="priceBlock"> 15198 <div class="text-gray-900"> 15199 <div class="price-box price-final_price" data-role="priceBox" data-product-id="421534" data-price-box="product-id-421534"><span class="normal-price"> 15200 <span class="price-container price-final_price tax weee" 15201 > 15202 15203 <span id="product-price-421534" data-price-amount="3.16" 15204 data-price-type="finalPrice" 15205 class="price-wrapper " 15206 ><span class="price-start-label">Starting From:</span> <br/><span class="price">
15206$0.79</span> /sqft </span> 15207 <span class="price-mrp"> 15208 <span class="price-mrp-new">was 15209 $1.22 </span> 15210 <span data-info="0.43" class="savePrice">Save 35%</span> </span> 15211 </span> 15212</span> 15213 15214 15215</div> </div> 15216 </div> 15217 15218 <div class="compare-buttons flex flex-wrap"> 15219 15220 15221 <div class="color_counts"> 15222 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 15223 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 15224 </div> 15225 15226 15227 15228 </div> 15229 </div> 15230 </div> 15231 15232 </form> 15233 <form method="post" 15234 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/305060/" 15235 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top avail-freeship no__product__label" 15236 > 15237 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="305060"/> 15238 <div class="catergory_slider_content bg-white no__product__label"> 15239 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 15240 <div class="product_lebel_container active"></div> 15241 15242 </div> 15243 <a href="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-designer-series-1043.html" 15244 class="product photo product-item-photo block mx-auto w-full relative " 15245 tabindex="-1" 15246 > 15247 <div class="product-list-image relative w-full overflow-hidden" 15248 x-data='{ 15249 over: false, 15250 hovered: false, 15251 hoverTimer: null,
15252 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_136hghjjlh1cpe5o56opbteh5n\/-B779-FWEBP", 15253 onEnter() { 15254 this.over = true; 15255 clearTimeout(this.hoverTimer); 15256 this.hoverTimer = setTimeout(() => { 15257 if (this.over) { 15258 this.hovered = true; 15259 } 15260 }, 80); 15261 }, 15262 onMove() { 15263 if (this.over) { 15264 this.hovered = true; 15265 } 15266 }, 15267 onLeave() { 15268 this.over = false; 15269 this.hovered = false; 15270 clearTimeout(this.hoverTimer); 15271 } 15272 }' 15273 :class="hovered ? 'is-hovered' : ''" 15274 x-on:mouseenter="onEnter()" 15275 x-on:mousemove.debounce.80ms="onMove()" 15276 x-on:mouseleave="onLeave()" 15277 > 15278 <img class="hover:shadow-sm object-contain w-full " 15279 x-data="" 15280 @update-gallery-305060.window="$root.src = $event.detail" 15281 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_0v0s0qqhp95rtds1j0hgtvpf6v/-B779-FWEBP" 15282 loading="lazy" 15283 decoding="async" 15284 fetchpriority="low" 15285 width="779" 15286 height="" 15287 alt="8mm Strong Rubber Rolls - Designer Series" 15288 title="8mm Strong Rubber Rolls - Designer Series" 15289 style="position: static !important;" /> 15290 <template x-if="hovered"> 15291 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 15292 :src="hoverUrl" 15293 loading="lazy" 15294 decoding="async" 15295 fetchpriority="low" 15296 width="779" 15297 height="" 15298 alt="8mm Strong Rubber Rolls - Designer Series" 15299 title="8mm Strong Rubber Rolls - Designer Series" 15300 aria-hidden="true" /> 15301 </template> 15302 </div> 15303 15304 </a> 15305 <input type="hidden" id="product_name_305060" name="product_name_305060" value="8mm Strong Rubber Rolls - Designer Series"> 15306 <input type="hidden" id="product_id_305060" name="product_id_305060" value="305060"> 15307 <input type="hidden" id="product_url_305060" name="product_url_305060" value="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-designer-series-1043.html"> 15308 <input type="hidden" id="image_url_305060" name="image_url_305060" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_0v0s0qqhp95rtds1j0hgtvpf6v/-B779"> 15309 <div class="product-info flex flex-col grow py-3 px-3"> 15310 <div class="brand_logo_listpage"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.webp"><img src="https://www.flooringinc.com/media/catalog/category/Traxxon_Brand_Logo.jpg" width="120" height="45" alt="Traxxon Rubber Flooring" title="Traxxon Rubber Flooring"/></picture><span class="brand-title">Traxxon Rubber Flooring</span></div> 15311 15312 <a href="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-designer-series-1043.html"> 15313 <div class="text-primary product-name "> 15314 <span class="product-item-link text-size16 font-bold no-underline relative block" 15315 title="8mm Strong Rubber Rolls - Designer Series"> 15316 8mm Strong Rubber Rolls - Designer Series </span> 15317 15318 </div> 15319 15320 <div class="ratings " data-nosnippet> 15321 <div data-bv-show="rating_summary" 15322 data-bv-product-id="1043" 15323 data-bv-redirect-url="https://www.flooringinc.com/shop/8mm-strong-rubber-rolls-designer-series-1043.html"> 15324 </div> 15325 </div> 15326 15327 15328 15329 </a> 15330 15331 <div class="priceBlock"> 15332 <div class="text-gray-900"> 15333 <div class="price-box price-final_price" data-role="priceBox" data-product-id="305060" data-price-box="product-id-305060"><span class="normal-price"> 15334 <span class="price-container price-final_price tax weee" 15335 > 15336 15337 <span id="product-price-305060" data-price-amount="11.38" 15338 data-price-type="finalPrice" 15339 class="price-wrapper " 15340 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$2.85</span> /sqft</span>
15341 <span class="price-mrp"> 15342 <span class="price-mrp-new">was 15343 $4.38 </span> 15344 <span data-info="1.53" class="savePrice">Save 35%</span> </span> 15345 </span> 15346</span> 15347 15348 15349</div> </div> 15350 </div> 15351 15352 <div class="compare-buttons flex flex-wrap"> 15353 15354 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 305060}"> 15355 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 15356 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 15357 <div class="modal-overlay" x-on:click="showModal = false"></div> 15358 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 15359 <div class="modal-content"> 15360 <div x-html="htmlContent" class="htmlcontent305060"></div> 15361 </div> 15362 </div> 15363 </div> 15364 15365 <div class="color_counts"> 15366 <div class="color_count text-size14 font-normal text-center">Available in 15 colors</div> 15367 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 15368 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 15369 </div> 15370 15371 15372 15373 </div> 15374 </div> 15375 </div> 15376 15377 </form> 15378 <form method="post" 15379 action="https://www.flooringinc.com/checkout/cart/add/uenc/%25uenc%25/product/304136/" 15380 class="form-desktop item product product-item product_addtocart_form flex flex-col pr-6 m-0 w-full relative align-top not-avail-freeship no__product__label" 15381 > 15382 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5" /> <input type="hidden" name="product" value="304136"/> 15383 <div class="catergory_slider_content bg-white no__product__label"> 15384 <div class="product__label flex items-center w-full justify-between py-[13px] no__product__label"> 15385 <div class="product_lebel_container active"></div> 15386 15387 </div> 15388 <a href="https://www.flooringinc.com/shop/eco-flec-rolls-9589.html" 15389 class="product photo product-item-photo block mx-auto w-full relative " 15390 tabindex="-1" 15391 > 15392 <div class="product-list-image relative w-full overflow-hidden" 15393 x-data='{ 15394 over: false, 15395 hovered: false, 15396 hoverTimer: null,
15397 hoverUrl: "https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_jbmrthoihd70hal0p2or66cb42\/-B779-FWEBP", 15398 onEnter() { 15399 this.over = true; 15400 clearTimeout(this.hoverTimer); 15401 this.hoverTimer = setTimeout(() => { 15402 if (this.over) { 15403 this.hovered = true; 15404 } 15405 }, 80); 15406 }, 15407 onMove() { 15408 if (this.over) { 15409 this.hovered = true; 15410 } 15411 }, 15412 onLeave() { 15413 this.over = false; 15414 this.hovered = false; 15415 clearTimeout(this.hoverTimer); 15416 } 15417 }' 15418 :class="hovered ? 'is-hovered' : ''" 15419 x-on:mouseenter="onEnter()" 15420 x-on:mousemove.debounce.80ms="onMove()" 15421 x-on:mouseleave="onLeave()" 15422 > 15423 <img class="hover:shadow-sm object-contain w-full " 15424 x-data="" 15425 @update-gallery-304136.window="$root.src = $event.detail" 15426 src="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_s69k4hmkfp18r1t7gokajvef5v/-B779-FWEBP" 15427 loading="lazy" 15428 decoding="async" 15429 fetchpriority="low" 15430 width="779" 15431 height="" 15432 alt="Eco-Flec Rubber Rolls" 15433 title="Eco-Flec Rubber Rolls" 15434 style="position: static !important;" /> 15435 <template x-if="hovered"> 15436 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 15437 :src="hoverUrl" 15438 loading="lazy" 15439 decoding="async" 15440 fetchpriority="low" 15441 width="779" 15442 height="" 15443 alt="Eco-Flec Rubber Rolls" 15444 title="Eco-Flec Rubber Rolls" 15445 aria-hidden="true" /> 15446 </template> 15447 </div> 15448 15449 </a> 15450 <input type="hidden" id="product_name_304136" name="product_name_304136" value="Eco-Flec Rubber Rolls"> 15451 <input type="hidden" id="product_id_304136" name="product_id_304136" value="304136"> 15452 <input type="hidden" id="product_url_304136" name="product_url_304136" value="https://www.flooringinc.com/shop/eco-flec-rolls-9589.html"> 15453 <input type="hidden" id="image_url_304136" name="image_url_304136" value="https://d2q5qaygbbwnnw.cloudfront.net/image/230444301506/image_s69k4hmkfp18r1t7gokajvef5v/-B779"> 15454 <div class="product-info flex flex-col grow py-3 px-3"> 15455 <div class="brand_logo_listpage no_brand"></div> 15456 15457 <a href="https://www.flooringinc.com/shop/eco-flec-rolls-9589.html"> 15458 <div class="text-primary product-name "> 15459 <span class="product-item-link text-size16 font-bold no-underline relative block" 15460 title="Eco-Flec Rubber Rolls"> 15461 Eco-Flec Rubber Rolls </span> 15462 15463 </div> 15464 15465 <div class="ratings " data-nosnippet> 15466 <div data-bv-show="rating_summary" 15467 data-bv-product-id="9589" 15468 data-bv-redirect-url="https://www.flooringinc.com/shop/eco-flec-rolls-9589.html"> 15469 </div> 15470 </div> 15471 15472 15473 15474 </a> 15475 15476 <div class="priceBlock"> 15477 <div class="text-gray-900"> 15478 <div class="price-box price-final_price" data-role="priceBox" data-product-id="304136" data-price-box="product-id-304136"><span class="normal-price"> 15479 <span class="price-container price-final_price tax weee" 15480 > 15481 15482 <span id="product-price-304136" data-price-amount="3.96" 15483 data-price-type="finalPrice" 15484 class="price-wrapper " 15485 ><span class="price-start-label">Starting From:</span> <br/><span class="price">$0.99</span> /sqft </span>
15486 <span class="price-mrp"> 15487 <span class="price-mrp-new">was 15488 $1.52 </span> 15489 <span data-info="0.53" class="savePrice">Save 35%</span> </span> 15490 </span> 15491</span> 15492 15493 15494</div> </div> 15495 </div> 15496 15497 <div class="compare-buttons flex flex-wrap"> 15498 15499 <div class="orderSampleContent" x-data="{showModal: false, htmlContent: '',pid: 304136}"> 15500 <button class="order_btn text-size12 font-medium text-black" type="button" x-on:click="showModal = true,fetchHtmlContent(pid), document.body.classList.add('order_active');">Order Free Sample</button> 15501 <div class="modal order-free-sample-popup" x-show="showModal" style="display: none;"> 15502 <div class="modal-overlay" x-on:click="showModal = false"></div> 15503 <button class="closemodal" type="button" x-on:click="showModal = false, document.body.classList.remove('order_active');">Close X</button> 15504 <div class="modal-content"> 15505 <div x-html="htmlContent" class="htmlcontent304136"></div> 15506 </div> 15507 </div> 15508 </div> 15509 15510 <div class="color_counts"> 15511 <div class="color_count text-size14 font-normal text-center">Available in 2 colors</div> 15512 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet1();?></div> --> 15513 <!-- <div class="color_count text-size14 font-normal text-center"><//?php echo $product->getIncstoresPimFeatureBullet2();?></div> --> 15514 </div> 15515 15516 15517 15518 </div> 15519 </div> 15520 </div> 15521 15522 </form> 15523 </div> 15524 </div> 15525
15525<script> 15526 function initToolbar_6ac152932f064() { 15527 return { 15528 options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":24,"url":"https:\/\/www.flooringinc.com\/shop\/rubber-flooring\/all-rubber-flooring.html","formKey":"3mNdp2ZYJNcyLOs5","post":false,"page":"p"}}.productListToolbarForm || {}, 15529 getUrlParams: function () { 15530 let decode = window.decodeURIComponent, 15531 urlPaths = this.options.url.split('?'), 15532 urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], 15533 params = {}, 15534 parameters, i; 15535 15536 for (i = 0; i < urlParams.length; i++) { 15537 parameters = urlParams[i].split('='); 15538 params[decode(parameters[0])] = parameters[1] !== undefined ? 15539 decode(parameters[1].replace(/\+/g, '%20')) : 15540 ''; 15541 } 15542 15543 return params; 15544 }, 15545 getCurrentLimit: function () { 15546 return this.getUrlParams()[this.options.limit] || this.options.limitDefault; 15547 }, 15548 getCurrentPage: function () { 15549 return this.getUrlParams()[this.options.page] || 1; 15550 }, 15551 changeUrl(paramName, paramValue, defaultValue) { 15552 let urlPaths = this.options.url.split('?'), 15553 baseUrl = urlPaths[0], 15554 paramData = this.getUrlParams(), 15555 currentPage = this.getCurrentPage(), 15556 newPage; 15557 15558 /** 15559 * calculates the page on which the first item of the current page will 15560 * be with the new limit and sets that number as the new page 15561 */ 15562 if (currentPage > 1 && paramName === this.options.limit) { 15563 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 15564 15565 if (newPage > 1) { 15566 paramData[this.options.page] = newPage; 15567 } else { 15568 delete paramData[this.options.page]; 15569 } 15570 } 15571 15572 paramData[paramName] = paramValue; 15573 15574 if (this.options.post) { 15575 hyva.postForm({action: baseUrl, data: paramData}); 15576 } else { 15577 if (paramValue === defaultValue.toString()) { 15578 delete paramData[paramName]; 15579 } 15580 paramData = Object.keys(paramData).length === 0 15581 ? '' 15582 : '?' + (new URLSearchParams(paramData)); 15583 location.href = baseUrl + paramData 15584 } 15585 } 15586 } 15587 } 15588</script>
15588 15589 <div x-data="initToolbar_6ac152932f064()" 15590 class="toolbar toolbar-products overflow-hidden flex"> 15591 <p class="toolbar-amount text-sm leading-5 text-gray-700 order-4 flex items-center pl-8" id="toolbar-amount"> 15592 <span class="toolbar-number">86</span><span class="toolbar-name text-lightgray1 text-size12 pl-1">products</span> </p> 15593 15594 15595 15596 15597 15598 <div class="flex justify-center order-2 col-span-4"> 15599 <nav class="inline-flex items-center pages" aria-label="pagination"> 15600 <ol class="relative z-0 inline-flex shadow-sm items pages-items"> 15601 <li class="item pages-item-previous"> 15602 <strong 15603 class="previous relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 rounded-l-md px-3 py-2 text-gray-400 15604 border-gray-200" 15605 aria-disabled="true" 15606 > 15607 <span 15608 aria-label="Previous" 15609 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img"> 15610 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 15611<title>chevron-left</title></svg> 15612</span> 15613 </strong> 15614 </li> 15615 15616 15617 15618 <li 15619 class="item -ml-px" 15620 aria-label="Page 1" 15621 > 15622 <a 15623 href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 15624 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 z-10 px-4 py-2 text-gray-700 15625 bg-gray-100 border-primary" 15626 aria-current="page" 15627 > 15628 <span class="sr-only label"> 15629 You're currently reading page </span> 15630 <span>1</span> 15631 </a> 15632 </li> 15633 <li class="item -ml-px"> 15634 <a 15635 href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=2" 15636 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700" 15637 > 15638 <span class="sr-only label">Page</span> 15639 <span>2</span> 15640 </a> 15641 </li> 15642 <li class="item -ml-px"> 15643 <a 15644 href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=3" 15645 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700" 15646 >
15647 <span class="sr-only label">Page</span> 15648 <span>3</span> 15649 </a> 15650 </li> 15651 <li class="item -ml-px"> 15652 <a 15653 href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=4" 15654 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700" 15655 > 15656 <span class="sr-only label">Page</span> 15657 <span>4</span> 15658 </a> 15659 </li> 15660 15661 15662 15663 <li class="item pages-item-next -ml-px"> 15664 <a 15665 href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=2" 15666 class="action next 15667 relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 rounded-r-md px-3 py-2 text-gray-500" 15668 > 15669 <span 15670 aria-label="Next" 15671 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img"> 15672 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 15673<title>chevron-right</title></svg> 15674</span> 15675 </a> 15676 </li> 15677 </ol> 15678 </nav> 15679 </div> 15680 15681 15682 15683 15684 <div class="field limiter flex items-center order-1 float-left w-1/2"> 15685 <div class="control"> 15686 <label class="text-sm label"> 15687 <span class="text-size12 font-semibold pr-4">View</span> 15688 15689 <select data-role="limiter" class="form-select limiter-options" 15690 @change="changeUrl( 15691 'product_list_limit', 15692 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 15693 options.limitDefault 15694 )"> 15695 <option value="12" 15696 > 15697 12 </option> 15698 <option value="24" 15699 selected="selected" 15700 > 15701 24 </option> 15702 <option value="36" 15703 > 15704 36 </option> 15705 </select> 15706 <span class="text-size12 font-semibold pl-2">Products Per Page</span> 15707 </label> 15708 </div> 15709 <span class="limiter-text text-sm ml-2 sr-only"> 15710 per page </span> 15711 </div> 15712 </div> 15713 </section>
15714<script> 15715 //var checkedArray = []; 15716 var prodArray = []; 15717 //var checkedArray = []; 15718 var prodArray = []; 15719 var compare_list = ''; 15720 if (document.getElementById("compare-list")) { 15721 compare_list = document.getElementById("compare-list").value; 15722 prodArray = compare_list.split(",").map(Number); 15723 } 15724 15725 function remove(list, value, separator) { 15726 separator = separator || ","; 15727 var values = list.split(separator); 15728 for(var i = 0 ; i < values.length ; i++) { 15729 if(values[i] == value) { 15730 values.splice(i, 1); 15731 return values.join(separator); 15732 } 15733 } 15734 15735 return list; 15736 } 15737 15738 function getSelectedCompare(){ 15739 15740 prodArray.forEach(function (product_id) { 15741 if(document.getElementById('compare_checkbox_'+product_id)) { 15742 document.getElementById('compare_checkbox_'+product_id).checked = true; 15743 } 15744 }); 15745 } 15746 15747 function addToCompareList(product_id) { 15748 //checkedArray = []; 15749 var error_message=document.getElementById('error-message'); 15750 15751 prodArray = prodArray.filter(function(productId) { 15752 return productId !== 0; 15753 }); 15754 if(prodArray.length>=4){ 15755 document.getElementById('compare_checkbox_'+product_id).checked = false; 15756 error_message.style.display='block'; 15757 } else { 15758 if(prodArray.indexOf(product_id) == -1) { 15759 prodArray.push(product_id); 15760 } 15761 document.getElementById("compare-list").value=prodArray; 15762 15763 var product_id=document.getElementById('product_id_'+product_id).value; 15764 var name=document.getElementById('product_name_'+product_id).value; 15765 var url=document.getElementById('product_url_'+product_id).value; 15766 var imageUrl=document.getElementById('image_url_'+product_id).value; 15767 var comparelist= document.getElementById("compare-list").value; 15768 compareListHtml(product_id,name,url,imageUrl); 15769 15770 } 15771 15772 var sidebar=document.getElementById('compare-widget'); 15773 var comparebtn=document.getElementById('compare-btn'); 15774 15775 if(prodArray.length>1){ 15776 comparebtn.style.display='block'; 15777 } else { 15778 comparebtn.style.display='none'; 15779 } 15780 15781 if(prodArray.length>0){ 15782 sidebar.style.display='block'; 15783 } else { 15784 sidebar.style.display='none'; 15785 } 15786 15787 } 15788 15789 function compareListHtml(product_id,name,url,imageUrl){ 15790 var exsistHtml=document.getElementById("imagelist").innerHTML; 15791 html='<li class="flex items-start relative" id="sidebar_image_'+product_id+'" <a href="'+url+'"'; 15792 html+= ' class="block w-full" title="'+name+'"> ';; 15793 html+= '<img class="w-full" src="'+imageUrl+'" alt="'+name+'"></a>'; 15794 html+= '<button @click.prevent="removeFromCompareList('+product_id+')" aria-label="Remove Product" class="absolute" title="Remove Product"></button></li>'; 15795 exsistHtml+=html; 15796 document.getElementById("imagelist").innerHTML=exsistHtml; 15797 } 15798 15799 function removeFromCompareList(product_id) 15800 { 15801 const index = prodArray.indexOf(product_id); 15802 var error_message=document.getElementById('error-message'); 15803 var style = window.getComputedStyle(error_message); 15804 if(document.getElementById('compare_checkbox_'+product_id)) { 15805 document.getElementById('compare_checkbox_'+product_id).checked = false; 15806 } 15807 if (prodArray !== -1) { 15808 prodArray.splice(index, 1); // 2nd parameter means remove one item only 15809 } 15810 document.getElementById("compare-list").value=prodArray; 15811 15812 if(style.display === 'block') { 15813 error_message.style.display='none'; 15814 } 15815 15816 //var comparelist= document.getElementById("compare-list").value; 15817 const element = document.getElementById("sidebar_image_"+product_id); 15818 element.remove(); 15819 var comparebtn=document.getElementById('compare-btn'); 15820 15821 15822 if(prodArray.length>1){ 15823 comparebtn.style.display='block'; 15824 } else { 15825 comparebtn.style.display='none'; 15826 } 15827 if(prodArray.length==0){ 15828 var sidebar=document.getElementById('compare-widget'); 15829 sidebar.style.display='none'; 15830 } 15831 } 15832 15833 /*document.querySelectorAll(".toolbar-products ol.items li.item").forEach(function(toolbarPager) { 15834 toolbarPager.addEventListener("click", function(){ 15835 var PAGER_CONTROL_INTERVAL = setInterval(function(){ 15836 // Check if element exist 15837 if(document.querySelector('.filter-option .filter-options-content .mst-nav__label .items .item')){ 15838 clearInterval(PAGER_CONTROL_INTERVAL); 15839 15840 } 15841 }, 500); 15842 15843 }); 15844 });*/ 15845 15846 document.querySelectorAll('.pages-items .item').forEach(function(link) { 15847 link.addEventListener('click', function(event) { 15848 event.preventDefault(); // Prevent the default link behavior 15849 15850 // Scroll to the top of the page 15851 window.scrollTo({ 15852 top: 0, 15853 behavior: 'auto' // You can change this to 'auto' for instant scrolling 15854 }); 15855 }); 15856 }); 15857</script>
15857 15858 15859 15860
15861<script> 15862function makeMessagesSticky1() { 15863 var header2 = document.querySelector('#header'); 15864 var messages2 = document.querySelector('.page.messages #messages'); 15865 var page2 = document.querySelector('.page.messages'); 15866 var breadcrumbs2 = document.querySelector('.breadcrumbs'); 15867 15868 var headerRect2 = header2.getBoundingClientRect(); 15869 var messagesRect2 = messages2.getBoundingClientRect(); 15870 var pageRect2 = page2.getBoundingClientRect(); 15871 var breadcrumbsRect2 = breadcrumbs2.getBoundingClientRect(); 15872 15873 var bodyElement2 = document.querySelector('body'); 15874 var isSticky2 = bodyElement2.classList.contains('sticki'); 15875 15876 15877 15878 if (isSticky2) { 15879 if (pageRect2.top <= headerRect2.bottom) { 15880 document.querySelector('.catalog-category-view .page.messages #messages').style.position = 'fixed'; 15881 document.querySelector('.catalog-category-view .page.messages #messages').style.top = `${headerRect2.bottom}px`; 15882 document.querySelector('.catalog-category-view .page.messages #messages').style.width = '100%'; 15883 } 15884 else { 15885 document.querySelector('.catalog-category-view .page.messages #messages').style.position = 'static'; 15886 document.querySelector('.catalog-category-view .page.messages #messages').style.top = 'auto'; 15887 } 15888 } 15889 else { 15890 if (breadcrumbsRect2.bottom <= 0) { 15891 document.querySelector('.catalog-category-view .page.messages #messages').style.position = 'fixed'; 15892 document.querySelector('.catalog-category-view .page.messages #messages').style.top = '0'; 15893 document.querySelector('.catalog-category-view .page.messages #messages').style.width = '100%'; 15894 } else { 15895 document.querySelector('.catalog-category-view .page.messages #messages').style.position = 'static'; 15896 document.querySelector('.catalog-category-view .page.messages #messages').style.top = 'auto'; 15897 } 15898 15899} 15900} 15901window.addEventListener("scroll", function() { 15902 makeMessagesSticky1(); 15903}); 15904 15905function successMsgSticky(){ 15906 var headerHeight2 = document.querySelector('header.page-header').offsetHeight; 15907 var breadcrumbsHeight2 = document.querySelector('.breadcrumbs').offsetHeight; 15908 var hHgt2 = headerHeight2 + breadcrumbsHeight2; 15909 var mesgs2 = document.querySelector('.page.messages #messages'); 15910 var scrollTop = window.scrollY; 15911 15912 if (scrollTop >= hHgt2) { 15913 document.body.classList.add('scroll-reached-hHgt'); 15914 } 15915 else { 15916 document.body.classList.remove('scroll-reached-hHgt'); 15917 } 15918} 15919 15920window.addEventListener("resize", successMsgSticky); 15921window.addEventListener("load", successMsgSticky); 15922</script>
15922 15923<style> 15924 @media(max-width:1024px){ 15925 .catalog-category-view.scroll-reached-hHgt .page.messages .messages.container{position: static !important;} 15926 .catalog-category-view.scroll-reached-hHgt .page.messages #messages{position: fixed !important;top: 0px !important;width: 100% !important;} 15927 } 15928</style></div>
15928<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 15929 function hasWebP() { 15930 var elem = document.createElement('canvas'); 15931 15932 if (!!(elem.getContext && elem.getContext('2d'))) { 15933 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 15934 } 15935 return false; 15936 } 15937 15938 if (hasWebP()) { 15939 document.body.classList.add("webp"); 15940 } else { 15941 document.body.classList.add("no-webp"); 15942 }</script>
15942<script></script>
15942<div x-data="recommendedProducts_below_main_content()" 15943 x-init="initProductRecBlock()" 15944 id="recs_block_below_main_content" 15945 class="products__recommendations"> 15946 <template x-if="productBanners"> 15947 <div> 15948 <template x-for="banner in productBanners"> 15949 <div class="product-slider" x-defer="intersect"> 15950 <section class="my-12 text-gray-700 body-font" 15951 tabindex="0" 15952 role="region" 15953 aria-label="Recommended products carousel" 15954 aria-roledescription="carousel" 15955 @keydown.arrow-right.prevent="$refs.next.click()" 15956 @keydown.arrow-left.prevent="$refs.prev.click()" 15957 > 15958 <div class="relative"> 15959 <div class="flex w-full"> 15960 <h3 x-text='banner.storefrontLabel' 15961 class="font-semibold"></h3> 15962 </div> 15963 <div class="relative flex flex-nowrap w-full recommended-slider-items products_slider" data-content-type="recommended-products"> 15964 <div class="sr-only" 15965 aria-live="polite" 15966 x-text="'Showing ' + banner.products.length + ' recommended products'"> 15967 </div> 15968 <div id="recommended-slider" class="overflow-x-hidden max-slide" data-role="glider-recommended"> 15969 <template x-for="product in banner.products"> 15970 <div class="flex shrink-0 w-full js_slide md:w-1/3 lg:w-1/5 xl:w-1/6 recommended-slider-item"> 15971 <form method="post" x-bind:action="createAddToCartUrl(product.productId)" 15972 @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" 15973 class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full catergory_slider_content bg-white"> 15974 <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> 15975 <input type="hidden" name="product" x-bind:value="product.productId"> 15976 <a :href="new URL(product.url, window.location.origin).pathname" @click="recsClickEvent(banner.unitId, product.productId, product.url)" 15977 class="product photo product-item-photo block cursor-pointer" 15978 tabindex="-1"> 15979 <div class="product-list-image relative w-full overflow-hidden" 15980 x-data="recProductImage(product)" 15981 :class="{ 'is-hovered': hovered }" 15982 x-on:mouseenter="onEnter()" 15983 x-on:mousemove.debounce.80ms="onMove()" 15984 x-on:mouseleave="onLeave()"> 15985 <img class="product-list-image-primary hover:shadow-sm object-contain w-full" 15986 loading="eager" 15987 x-bind:alt="product.image?.label" 15988 x-bind:title="product.image?.label" 15989 x-bind:src="primarySrc" 15990 width="360" 15991 height="360" 15992 decoding="async" 15993 fetchpriority="high" 15994 style="position: static !important;"> 15995 <template x-if="hoverUrl && hovered"> 15996 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 15997 x-bind:src="hoverUrl" 15998 loading="lazy" 15999 decoding="async" 16000 fetchpriority="low" 16001 width="360" 16002 height="360" 16003 x-bind:alt="product.image?.label" 16004 aria-hidden="true"> 16005 </template> 16006 </div> 16007 </a> 16008 <div class="product-info flex flex-col flex-grow"> 16009 <div 16010 class="items-center justify-center font-semibold "> 16011 <a :href="new URL(product.url, window.location.origin).pathname" class="product-item-link text-size16 text-black font-bold no-underline relative block cursor-pointer" 16012 @click="recsClickEvent(banner.unitId, product.productId, product.url)" 16013 x-text="product.name"></a> 16014 </div> 16015 16016 <div class="ratings" data-nosnippet> 16017 <div data-bv-show="rating_summary" 16018 x-bind:data-bv-product-id="product.sku" 16019 x-bind:data-bv-redirect-url="product.url"> 16020 </div> 16021 </div> 16022 16023 <template x-if="product.prices"> 16024 <div class="pt-1 text-gray-900 price-box price-final_price" x-bind:data-product-id="product.productId">
16025 <span class="normal-price"> 16026 <span class="price-container price-final_price"> 16027 <!-- <span x-show="product.prices.minimum.final !== product.prices.maximum.final" 16028 class="price-start-label">Starting From:</span> --> 16029 <span id="product-price" class="price-wrapper "> 16030 <!-- <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> --> 16031 <div x-data="productPricing(product)"> 16032 <div :class="priceContainerClasses" 16033 :itemprop="schema ? 'offers' : ''" 16034 :itemscope="schema ? true : false" 16035 :itemtype="schema ? 'http://schema.org/Offer' : ''"> 16036 16037 <!-- Price Wrapper --> 16038 <span :id="priceId" 16039 :data-label="priceDisplayLabel" 16040 :data-price-amount="priceAmount" 16041 :data-price-type="priceType" 16042 :class="priceWrapperClasses"> 16043 <template x-if="priceType === 'finalPrice' && product.type === 'configurable'"> 16044 <span class="price-start-label">Starting From:</span> 16045 </template> 16046 16047 <!-- Adjusted Price Logic --> 16048 <template x-if="calculatorType && (coverage > 0 || (width > 0 && length > 0 && height > 0))"> 16049 <span> 16050 <template x-if="minPriceVolume > 0"> 16051 <span> 16052 <template x-if="regularPrice > specialPrice && specialPrice > 0"> 16053 <span x-text="formatCurrency(specialPrice / minPriceVolume)"></span> 16054 </template> 16055 <template x-if="!(regularPrice > specialPrice && specialPrice > 0)"> 16056 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 16057 </template> 16058 <span x-text="'/' + calculatorType"></span> 16059 </span> 16060 </template> 16061 </span> 16062 </template> 16063 <template x-if="!calculatorType || minPriceVolume <= 0"> 16064 <sp
16064an class="price"> 16065 <span x-text="formatCurrency(displayValue)"></span> 16066 <span x-text="displayValueType"></span> 16067 </span> 16068 </template> 16069 </span> 16070 16071 <!-- MRP and Discount --> 16072 <!-- <template x-if="regularPrice > specialPrice && product.type === 'configurable'"> 16073 <span class="price-mrp"> 16074 <template x-if="minPriceVolume > 0 && calculatorType"> 16075 <span class="price-mrp-new"> 16076 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 16077 <span x-text="'/' + calculatorType"></span> 16078 </span> 16079 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 16080 </template> 16081 <template x-if="!(minPriceVolume > 0 && calculatorType)"> 16082 <span class="price-mrp-new"> 16083 <span x-text="formatCurrency(regularPrice)"></span> 16084 <span>/each</span> 16085 </span> 16086 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 16087 </template> 16088 </span> 16089 </template> --> 16090 16091 <!-- Adjustments --> 16092 <template x-if="adjustmentsHtml"> 16093 <span x-html="adjustmentsHtml"></span> 16094 </template> 16095 16096 <!-- Schema --> 16097 <template x-if="schema"> 16098 <meta itemprop="price" :content="priceAmount" /> 16099 <meta itemprop="priceCurrency" :content="priceCurrency" /> 16100 </template> 16101 </div> 16102 </div> 16103 </span> 16104 </span> 16105 </span> 16106 </div> 16107 </template> 16108 <!-- End of product price --> 16109 </div> 16110 </form> 16111 </div> 16112 </template> 16113 </div> 16114 <div class="carousel-nav flex items-center justify-center"> 16115 <button aria-label="Previous" aria-controls="recommended-slider" x-ref="prev" class="glider-prev1"></button> 16116 <button aria-label="Next" aria-controls="recommended-slider" x-ref="next" class="glider-next1"></button> 16117 </div> 16118 </div> 16119 </div> 16120 </section> 16121 </div> 16122 </template> 16123 </div> 16124 </template> 16125</div> 16126
16127<script> 16128 function recommendedProducts_below_main_content() { 16129 return { 16130 productBanners: [], 16131 pagePreconfiguredDeferred: {}, 16132 bannerPlacement: 'below-main-content', 16133 allProductIds: '', 16134 initProductRecBlock: function (placement) { 16135 let self = this; 16136 window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { 16137 let recsData = window.magentoStorefrontEvents.context.getRecommendations(); 16138 self.renderProductRecs(recsData); 16139 }); 16140 }, 16141 renderProductRecs: function (recsData) { 16142 let self = this; 16143 let allProductIds = []; 16144 16145 recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); 16146 16147 recsData.units.forEach(function (unit, index) { 16148 if (unit.pagePlacement === self.bannerPlacement) { 16149 self.productBanners.push(unit); 16150 16151 // Collect all product IDs from this unit 16152 if (unit.products && unit.products.length > 0) { 16153 unit.products.forEach(function(product) { 16154 allProductIds.push(product.productId); 16155 }); 16156 } 16157 16158 /** @todo move event outside of recsResponseReceived event **/ 16159 window.magentoStorefrontEvents.publish.recsUnitRender( 16160 unit.unitId, magentoStorefrontEvents.context 16161 ); 16162 } 16163 }); 16164 16165 // Store comma-separated product IDs 16166 self.allProductIds = allProductIds.join(','); 16167 16168 // Fetch calculated prices and hover images for all products at once 16169 if (self.allProductIds) { 16170 self.fetchAllCalculatedPrices(self.allProductIds); 16171 if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) { 16172 self.fetchAllHoverImages(self.allProductIds); 16173 } 16174 } 16175 }, 16176 fetchAllHoverImages: function (productIds) { 16177 const baseUrl = "https\u003A\u002F\u002Fwww.flooringinc.com\u002F"; 16178 const fetchUrl = baseUrl + 'hyvaproductrecommendation/product/listhoverimage/productId/' + productIds; 16179 16180 if (!window.hoverImagesCachePromise) { 16181 window.hoverImagesCachePromise = fetch(fetchUrl) 16182 .then(response => response.json()) 16183 .then(data => { 16184 window.hoverImagesCache = data.success && data.hoverImages 16185 ? data.hoverImages 16186 : {}; 16187 return window.hoverImagesCache; 16188 }) 16189 .catch(() => { 16190 window.hoverImagesCache = {}; 16191 return window.hoverImagesCache; 16192 }); 16193 } 16194 16195 return window.hoverImagesCachePromise; 16196 }, 16197 fetchAllCalculatedPrices: function(productIds) { 16198 var baseUrl = "https://www.flooringinc.com/"; 16199 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productIds; 16200 16201 // Create a promise that other components can wait for 16202 if (!window.calculatedPricesCachePromise) { 16203 window.calculatedPricesCachePromise = fetch(fetchUrl) 16204 .then(response => response.json()) 16205 .then(data => { 16206 // Store the price data globally so productPricing can access it 16207 if (!window.calculatedPricesCache) { 16208 window.calculatedPricesCache = {}; 16209 } 16210 window.calculatedPricesCache = data; 16211 return data; 16212 }) 16213 .catch(error => { 16214 console.log('Error fetching calculated prices:', error); 16215 return {}; 16216 }); 16217 } 16218 return window.calculatedPricesCachePromise; 16219 }, 16220 addToCartRecsEvent: function (e, unitId, productId) { 16221 // requires recommendationsContext to be set 16222 magentoStorefrontEvents.publish.recsItemAddToCartClick( 16223 unitId, productId, magentoStorefrontEvents.context 16224 ); 16225 // Timeout to prevent submission before event has fired. 16226 setTimeout(() => e.submit(), 500); 16227 }, 16228 scrollViewEvent: function (unitId) { 16229 magentoStorefrontEvents.publish.recsUnitView( 16230 unitId, magentoStorefrontEvents.context 16231 ); 16232 }, 16233 recsClickEvent: function (unitId, productId, productUrl) { 16234 magentoStorefrontEvents.publish.recsItemClick( 16235 unitId, productId, magentoStorefrontEvents.context 16236 ); 16237 // Timeout to prevent submission before event has fired. 16238 //setTimeout(() => window.location.href = productUrl, 500); 16239 }, 16240 createAddToCartUrl: function (productId) { 16241 const currentLocationUENC = encodeURIComponent( 16242 this.encodeUenc(BASE_URL), 16243 ); 16244 return BASE_URL + 16245 "checkout/cart/add/uenc/" + 16246 currentLocationUENC + 16247 "/product/" + 16248 productId 16249 }, 16250 encodeUenc: function (value) { 16251 const regex = /=/gi; 16252 return btoa(value).replace(regex, ","); 16253 }, 16254 } 16255 } 16256</script>
vendor: 1 bytes, line 16256
16256
16257<script> 16258 'use strict'; 16259(() => { 16260 const initCarousels = (elements) => { 16261 if (typeof Glider === 'undefined') { 16262 console.error("Glider.js is not loaded."); 16263 return; 16264 } 16265 16266 elements.forEach((carousel) => { 16267 const gliderElement = carousel.querySelector('[data-role="glider-recommended"]'); 16268 if (!gliderElement) { 16269 console.warn("Glider element not found."); 16270 return; 16271 } 16272 16273 const gliderPrev = carousel.querySelector('.glider-prev1'); 16274 const gliderNext = carousel.querySelector('.glider-next1'); 16275 16276 const totalSlides = gliderElement.querySelectorAll('.js_slide').length; 16277 16278 // Hide arrows if slides are 6 or less 16279 if (totalSlides <= 6) { 16280 if (gliderPrev) gliderPrev.style.display = 'none'; 16281 if (gliderNext) gliderNext.style.display = 'none'; 16282 } else { 16283 if (gliderPrev) gliderPrev.style.display = ''; 16284 if (gliderNext) gliderNext.style.display = ''; 16285 } 16286 // Initialize Glider 16287 const glider = new Glider(gliderElement, { 16288 slidesToShow: 6, 16289 slidesToScroll: 1, 16290 scrollLock: false, 16291 draggable: true, 16292 dragVelocity: 1.3, 16293 arrows: { 16294 prev: gliderPrev, 16295 next: gliderNext, 16296 }, 16297 responsive: [ 16298 { breakpoint: 768, settings: { slidesToShow: 2, slidesToScroll: 1 } }, 16299 { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 1 } }, 16300 { breakpoint: 1366, settings: { slidesToShow: 6, slidesToScroll: 1} }, 16301 ], 16302 }); 16303 16304 const preventDraggingOnInputs = (gliderElement) => { 16305 gliderElement.querySelectorAll('select, input').forEach((el) => { 16306 el.addEventListener('mousedown', (event) => { 16307 event.stopPropagation(); // Prevent Glider drag from starting 16308 }); 16309 16310 el.addEventListener('touchstart', (event) => { 16311 event.stopPropagation(); // Prevent drag on touch devices 16312 }); 16313 }); 16314 }; 16315 16316 // Call this inside initCarousels after Glider initialization 16317 preventDraggingOnInputs(gliderElement); 16318 16319 // Add event listener to handle the disabled class 16320 gliderElement.addEventListener('glider-refresh', () => { 16321 requestAnimationFrame(() => { 16322 const hasNext = gliderElement.scrollWidth - gliderElement.scrollLeft > gliderElement.clientWidth; 16323 const hasPrev = gliderElement.scrollLeft > 0; 16324 16325 gliderNext.classList.toggle('disabled', !hasNext); 16326 gliderPrev.classList.toggle('disabled', !hasPrev); 16327 gliderNext.setAttribute('aria-disabled', !hasNext); 16328 gliderPrev.setAttribute('aria-disabled', !hasPrev); 16329 }); 16330 }); 16331 16332 // Force a refresh to ensure state is accurate on initialization 16333 glider.refresh(); 16334 }); 16335 }; 16336 16337 const loadGliderScript = (callback) => { 16338 const script = document.createElement('script'); 16339 script.type = 'text/javascript'; 16340 script.src = "https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magento_PageBuilder/js/glider.min.js"; 16341 script.addEventListener('load', callback); 16342 document.head.appendChild(script); 16343 }; 16344 16345 const observeCarousels = () => { 16346 const observer = new MutationObserver((mutationsList) => { 16347 let found = false; 16348 16349 for (const mutation of mutationsList) { 16350 if (mutation.type === 'childList') { 16351 for (const node of mutation.addedNodes) { 16352 if (node.nodeType === 1) { 16353 const carousels = node.querySelectorAll?.('[data-content-type="recommended-products"]'); 16354 if (carousels.length) { 16355 found = true; 16356 requestAnimationFrame(() => { 16357 observer.disconnect(); 16358 initCarousels(carousels); 16359 }); 16360 break; 16361 } 16362 } 16363 } 16364 } 16365 if (found) break; 16366 } 16367 }); 16368 16369 observer.observe(document.body, { childList: true, subtree: true }); 16370 }; 16371 16372 window.addEventListener('DOMContentLoaded', () => { 16373 loadGliderScript(() => { 16374 // Check if carousels are already in the DOM 16375 const carouselElements = document.querySelectorAll('[data-content-type="recommended-products"]'); 16376 if (carouselElements.length > 0) { 16377 initCarousels(carouselElements); 16378 } else { 16379 // Use MutationObserver to wait for dynamic content 16380 observeCarousels(); 16381 } 16382 }); 16383 }); 16384})(); 16385</script>
16385 16386
16387<script> 16388 function recProductImage(product) { 16389 return { 16390 hovered: false, 16391 over: false, 16392 hoverTimer: null, 16393 hoverUrl: null, 16394 isDesktopHover: window.matchMedia('(hover: hover) and (pointer: fine)').matches, 16395 primarySrc() { 16396 const url = product.image?.url || ''; 16397 if (!url) { 16398 return ''; 16399 } 16400 return url + (url.includes('?') ? '&' : '?') + 'width=428&height=210'; 16401 }, 16402 init() { 16403 if (!this.isDesktopHover) { 16404 return; 16405 } 16406 this.resolveHoverUrl(); 16407 }, 16408 resolveHoverUrl() { 16409 const id = String(product.productId); 16410 const apply = (url) => { 16411 if (url) { 16412 this.hoverUrl = url; 16413 } 16414 }; 16415 16416 if (window.hoverImagesCache?.[id]) { 16417 apply(window.hoverImagesCache[id]); 16418 return; 16419 } 16420 16421 if (window.hoverImagesCachePromise) { 16422 window.hoverImagesCachePromise.then(() => apply(window.hoverImagesCache?.[id])); 16423 } 16424 }, 16425 onEnter() { 16426 if (!this.isDesktopHover || !this.hoverUrl) { 16427 return; 16428 } 16429 this.over = true; 16430 clearTimeout(this.hoverTimer); 16431 this.hoverTimer = setTimeout(() => { 16432 if (this.over) { 16433 this.hovered = true; 16434 } 16435 }, 80); 16436 }, 16437 onMove() { 16438 if (!this.isDesktopHover || !this.over || !this.hoverUrl) { 16439 return; 16440 } 16441 this.hovered = true; 16442 }, 16443 onLeave() { 16444 this.over = false; 16445 this.hovered = false; 16446 clearTimeout(this.hoverTimer); 16447 }, 16448 destroy() { 16449 clearTimeout(this.hoverTimer); 16450 }, 16451 }; 16452 } 16453 16454 function productPricing(product) { 16455 return { 16456 // Variables 16457 regularPrice: 0, 16458 specialPrice: 0, 16459 calculatorType: '', 16460 coverage: 0, 16461 width: 0, 16462 length: 0, 16463 height: 0, 16464 minPriceVolume: 0, 16465 displayValue: 0, 16466 priceAmount: 0, 16467 priceType: 'finalPrice', 16468 priceCurrency: 'USD', 16469 discountPercentage: 0, 16470 adjustmentsHtml: '', // Placeholder for adjustment logic 16471 schema: true, 16472 displayValueType: '/each', 16473 16474 // Dynamic Classes 16475 priceContainerClasses: 'price-container', 16476 priceWrapperClasses: 'price-wrapper', 16477 priceId: '', // Add logic for dynamic IDs if needed 16478 priceDisplayLabel: '', 16479 16480 // Initialization 16481 init() { 16482 // Load product attributes 16483 //console.log("product==="+JSON.stringify(product)); 16484 const attributes = product.attributes; 16485 16486 // Regular and Special Prices 16487 this.regularPrice = product.prices.minimum.regular || 0; 16488 this.specialPrice = product.prices.minimum.final || this.regularPrice; 16489 16490 // Calculator Type and Dimensions 16491 this.calculatorType = attributes.incstores_pim_calculator_type || ''; 16492 this.coverage = attributes.config_coverage || 0; 16493 this.width = (attributes.incstores_pim_width_inches || 0) / 12; 16494 this.length = (attributes.incstores_pim_length_inches || 0) / 12; 16495 this.height = (attributes.incstores_pim_height_inches || 0) / 12; 16496 16497 // Calculate Price per Volume 16498 if (this.calculatorType && (this.coverage > 0 || (this.width > 0 && this.length > 0 && this.height > 0))) { 16499 if (this.calculatorType === 'case') { 16500 this.minPriceVolume = this.coverage; 16501 } else { 16502 this.minPriceVolume = this.width * this.length * this.height; 16503 } 16504 16505 if (this.minPriceVolume > 0) { 16506 const pricePerUnit = 16507 this.regularPrice > this.specialPrice && this.specialPrice > 0 16508 ? this.specialPrice / this.minPriceVolume 16509 : this.regularPrice / this.minPriceVolume; 16510 16511 this.displayValue = pricePerUnit; 16512 } 16513 } else { 16514 this.displayValue = this.regularPrice; 16515 } 16516 16517 const productId = product.productId; 16518 const self = this; 16519 16520 // Wait for the batch price cache to be ready 16521 if (window.calculatedPricesCachePromise) { 16522 window.calculatedPricesCachePromise.then(() => { 16523 // Now the cache should be populated 16524 if (window.calculatedPricesCache && window.calculatedPricesCache[productId]) { 16525 let productData = window.calculatedPricesCache[productId]; 16526 if (productData.success && productData.priceData && productData.priceData.price) { 16527 let customPrice = productData.priceData.price; 16528 let calType = productData.priceData.calType;
16529 self.displayValue = customPrice; 16530 self.displayValueType = '/' + calType; 16531 if (calType == 'none') { 16532 self.displayValueType = ''; 16533 } 16534 } 16535 } 16536 }); 16537 } else { 16538 // Fallback: fetch individual product price if batch call was not initiated 16539 var baseUrl = "https://www.flooringinc.com/"; 16540 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productId; 16541 16542 fetch(fetchUrl) 16543 .then(response => response.json()) 16544 .then(data => { 16545 if (data.success) { 16546 let customPrice = data.priceData.price; 16547 if (data.priceData.price) { 16548 let calType = data.priceData.calType; 16549 self.displayValue = customPrice; 16550 self.displayValueType = '/' + calType; 16551 if (calType == 'none') { 16552 self.displayValueType = ''; 16553 } 16554 } 16555 } 16556 }) 16557 .catch(error => { 16558 console.log(error); 16559 }); 16560 } 16561 16562 // Calculate Discount 16563 if (this.regularPrice > this.specialPrice) { 16564 const savePrice = this.regularPrice - this.specialPrice; 16565 this.discountPercentage = Math.round((savePrice * 100) / this.regularPrice); 16566 } 16567 }, 16568 16569 // Utility Functions 16570 formatCurrency(value) { 16571 value = Number(String(value).replace(/,/g, '')); 16572 return `$${value.toFixed(2)}`; 16573 }, 16574 }; 16575 } 16576</script>
vendor: 1 bytes, line 16576
16576
16577<script> 16578 document.addEventListener("DOMContentLoaded", function () { 16579 let relatedProducts = document.querySelector(".related-products-section"); 16580 let recommendations = document.querySelector(".products__recommendations"); 16581 16582 if (relatedProducts && recommendations) { 16583 relatedProducts.parentNode.insertBefore(recommendations, relatedProducts.nextSibling); 16584 } 16585 }); 16586</script>
16586 16587</div><aside class="sidebar sidebar-additional">
16587<script> 16588 function compareSidebarFetchHandler(postUrl, postHeaders, isSingleItem = true) { 16589 const messages = { 16590 "success": isSingleItem 16591 ? "You removed product Product from the comparison list" 16592 : "You removed all products from the comparison list", 16593 "warning": isSingleItem 16594 ? "Could not remove item from compare." 16595 : "Could not remove all item from compare.", 16596 } 16597 16598 return fetch(postUrl, postHeaders).then(function (response) { 16599 if (response.redirected) { 16600 //window.location.href = response.url; 16601 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 16602 } else if (response.ok) { 16603 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 16604 //return response.json(); 16605 } else { 16606 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 16607 [{ type: "warning", text: messages.warning }], 1000 16608 ); 16609 } 16610 }).then(function (response) { 16611 if (!response) return; 16612 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 16613 [{ 16614 type: (response.success) ? "success" : "error", 16615 text: (response.success) ? messages.success : response.error_message 16616 }], 1000 16617 ); 16618 let reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 16619 window.dispatchEvent(reloadCustomerDataEvent); 16620 }).catch(function (error) { 16621 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 16622 [{ type: "error", text: error }], 1000 16623 ); 16624 }); 16625 } 16626 function initCompareSidebarClear() { 16627 return { 16628 clearCompare: function() { 16629 const formKey = hyva.getFormKey(); 16630 this.itemCount=0; 16631 const postUrl = BASE_URL + 'catalog/product_compare/clear/isAjax/true/'; 16632 const postHeaders = { 16633 "headers": { 16634 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 16635 }, 16636 "body": "form_key=" + formKey + "&uenc="
16636+ hyva.getUenc(), 16637 "method": "POST", 16638 "mode": "cors", 16639 "credentials": "include" 16640 }; 16641 16642 compareSidebarFetchHandler(postUrl, postHeaders, isSingleItem = false); 16643 } 16644 } 16645 } 16646 </script>
16646 16647
16647<script> 16648 window.onload=function(){ 16649 document.getElementById("clear_all_item_compare").click(); 16650 setTimeout(() => { 16651 var checkboxes = document.getElementsByClassName('compare_checkbox'); 16652 for (var checkbox of checkboxes) { 16653 checkbox.checked = false; 16654 } 16655 }, 1000); 16656 document.getElementById("compare-list").value = ''; 16657 }; 16658 </script>
16658 16659 <div id="loading"> 16660 <img id="loading-image" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Amasty_AjaxCartHyva/images/loading-gif.gif" alt="Loading..." /> 16661 </div> 16662 <div id="error-message" class="error-message" style="display:none;--tw-bg-opacity: 1; 16663 position: fixed;left: 0;width: 100%;bottom: 144px !important;background: rgb(255 70 58) !important; 16664 color: #FFFFFF !important;padding: 0.625rem 0.5rem;text-align: center;margin: 0;z-index: 999;"> 16665 You've already selected the maximum number of items to compare (4) 16666 <a href="#" data-rel="back" class="close-error" onclick="document.getElementById('error-message').style.display= 'none'"><span class="close">×</span></a> 16667 </div> 16668 <form id="compare_form" action="https://www.flooringinc.com/comparerestrict/compare/add/" method="POST"> 16669 <input type="hidden" name="compare-list" id="compare-list" value=""> 16670 <input type="hidden" name="form_key" id="form-key-compare" value="" /> 16671 <input type="hidden" name="catId" value="2333" /> 16672 </form> 16673
16673<script> 16674 function submitCompareForm(e) { 16675 //document.getElementById("compare_form").submit(); 16676 var newFormKey = hyva.getFormKey(); 16677 if (newFormKey) { console.log("newFormKey = "+newFormKey); 16678 document.getElementById("form-key-compare").value = newFormKey; 16679 document.getElementById("compare_form").submit(); 16680 } 16681 } 16682 </script>
16682 16683 16684 <div class="compare-widget hidden w-full" style="display:none" id="compare-widget"> 16685 <div class="flex justify-between compare-widget-in"> 16686 <div class="flex flex-wrap items-center select" x-data> 16687 <span class="compare_restriction_text text-size16 font-normal text-white">Select 2 to 4 items to compare</span> 16688 <button @click="submitCompareForm" 16689 title="Compare Products" style='display:none' 16690 id="compare-btn" 16691 class="btn btn-secondary text-size16 font-normal text-white bg-darkyellow w-full border-0 text-center"> 16692 <span class="m-0 p-0 block w-full">Compare</span> 16693 </button> 16694 <button x-data="initCompareSidebarClear()" 16695 @click.prevent="clearCompare()" 16696 aria-label="Remove all Products" 16697 class="p-1 inline-flex shrink-0 items-center justify-center text-gray-500 hover:text-primary ml-auto hidden" 16698 id="clear_all_item_compare"> 16699 <span>Clear all</span> 16700 </button> 16701 </div> 16702 <ul class="flex" id='imagelist'> 16703 </ul> 16704 </div> 16705 </div> 16706 16707
16707<script> 16708 function initWishlistOnWishlistSidebar() { 16709 function wishlistSidebarFetchHandler(body, postUrl, isRemoveAction = true) { 16710 const messages = { 16711 "success": isRemoveAction 16712 ? "\u00251\u0020has\u0020been\u0020removed\u0020from\u0020your\u0020Wish\u0020List" 16713 : "\u00251\u0020has\u0020been\u0020added\u0020to\u0020your\u0020Wish\u0020List.", 16714 "warning": isRemoveAction 16715 ? "Could\u0020not\u0020remove\u0020item\u0020from\u0020your\u0020Wish\u0020List" 16716 : "Could\u0020not\u0020add\u0020item\u0020to\u0020your\u0020Wish\u0020List.", 16717 } 16718 16719 const postHeaders = { 16720 "headers": { 16721 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 16722 }, 16723 body: body, 16724 "method": "POST", 16725 "mode": "cors", 16726 "credentials": "include" 16727 }; 16728 16729 return fetch(postUrl, postHeaders).then(function (response) { 16730 if (response.redirected) { 16731 window.location.href = response.url; 16732 } else if (response.ok) { 16733 return response.json(); 16734 } else { 16735 const message = { type: "warning", text: messages.warning }; 16736 window.dispatchMessages && window.dispatchMessages([message], 5000); 16737 } 16738 }).then(function (response) { 16739 if (!response) return; 16740 const message = { 16741 type: (response.success) ? "success" : "error", 16742 text: (response.success) ? messages.success : response.error_message 16743 } 16744 window.dispatchMessages && window.dispatchMessages([message], 5000); 16745 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 16746 }).catch(function (error) { 16747 const message = { type: "error", text: error }; 16748 window.dispatchMessages && window.dispatchMessages([message], 5000); 16749 }); 16750 } 16751 16752 return { 16753 wishlistProducts: null, 16754 itemCount: 0, 16755 wishlistCountLabel: null, 16756 wishlistItems: {}, 16757 receiveWishlistData: function (data) { 16758 if (data['wishlist']) { 16759 this.wishlistProducts = data['wishlist']; 16760 this.wishlistCountLabel = '(' + this.wishlistProducts.counter + ')'; 16761 this.itemCount = this.wishlistProducts.items.length; 16762 this.wishlistItems = this.wishlistProducts.items; 16763 } 16764 }, 16765 addToCart: function (json) { 16766 const obj = JSON.parse(json); 16767 const postUrl = obj.action; 16768 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item + "&qty=" + obj.data.qty + "&uenc="
16768+ hyva.getUenc(); 16769 wishlistSidebarFetchHandler(body, postUrl, /* isRemoveAction */ false); 16770 }, 16771 removeFromWishlist: function(json) { 16772 const obj = JSON.parse(json); 16773 const postUrl = obj.action; 16774 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item+"&uenc=" + hyva.getUenc(); 16775 wishlistSidebarFetchHandler(body, postUrl); 16776 } 16777 } 16778 } 16779 16780 </script>
16780 16781 16782 <div x-data="initWishlistOnWishlistSidebar()" 16783 @private-content-loaded.window="receiveWishlistData($event.detail.data)" 16784 class="wishlist-widget mt-8 hidden" 16785 :class="{ 'hidden': itemCount === 0 }"> 16786 <div class="border-t border-container mb-6 pt-5"> 16787 <strong class="title text-primary font-semibold text-lg">My Wish List</strong> 16788 <span class="counter text-xs" x-html="wishlistCountLabel"></span> 16789 </div> 16790 <template x-if="itemCount"> 16791 <ul class="my-4"> 16792 <template x-for="product in wishlistItems"> 16793 <li class="flex items-start mb-4"> 16794 <a :href="product.product_url" 16795 class="block mb-3 w-10 h-10 shrink-0 mr-4" 16796 :title="product.product_name"> 16797 <img :src="product.image.src" :alt="product.product_name" loading="lazy"> 16798 </a> 16799 <div class="product-item-details"> 16800 <strong class="mr-2 text-sm leading-6 font-normal"> 16801 <a :href="product.product_url" :title="product.product_name" x-html="product.product_name"></a> 16802 </strong> 16803 <div class="mr-2 text-sm leading-6 font-bold" x-html="product.product_price"></div> 16804 <template x-if="product.product_is_saleable_and_visible"> 16805 <div class="actions-primary my-2"> 16806 <template x-if="!product.product_has_required_options"> 16807 <button 16808 @click.prevent="addToCart(product.add_to_cart_params)" 16809 class="action tocart primary btn btn-primary text-sm" 16810 title="Add to Cart"> 16811 <span>Add to Cart</span> 16812 </button> 16813 </template> 16814 </div> 16815 </template> 16816 </div> 16817 <button 16818 @click.prevent="removeFromWishlist(product.delete_item_params)" 16819 aria-label="Remove Product" 16820 class="p-1 inline-flex shrink-0 items-center justify-center text-gray-500 16821 hover:text-primary ml-auto" 16822 title="Remove Product"> 16823 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="25" height="25" role="img"> 16824 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 16825<title>x</title></svg> 16826 </button> 16827 </li> 16828 </template> 16829 </ul> 16830 </template> 16831 <div class="flex flex-wrap items-center md:mt-5 space-x-4 text-sm"> 16832 <a href="https://www.flooringinc.com/wishlist/" 16833 title="Go to Wish List" 16834 class="px-4 text-sm text-gray-500 hover:text-primary"> 16835 <span>Go to Wish List</span> 16836 </a> 16837 </div> 16838 </div> 16839<div class="widget block block-static-block"> 16840 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"></div></div> 16841</aside></div> 16842 16843 16844 16845 <div class="category-bottom-content"> 16846 <style>#html-body [data-pb-style=NII4XUO]{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=GLATN4U]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=MA5RGGP]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=R99NBQ1]{display:flex;width:100%}#html-body [data-pb-style=L4QWEUV]{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=X7TR0NC]{border-style:none}#html-body [data-pb-style=EB32ORQ],#html-body [data-pb-style=PEQSYDU]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=BF6EYHN]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=D9KJJRF]{border-color:#fff;border-width:5px}#html-body [data-pb-style=GRIETO8]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=C8TN35F]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=E1WWL2Q]{display:flex;width:100%}#html-body [data-pb-style=U9ON7WV]{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=FHBLSKY]{border-style:none}#html-body [data-pb-style=I66S42V],#html-body [data-pb-style=RHOK5TW]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=C94GFNS]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=VEN1C25]{border-color:#fff;border-width:5px}#html-body [data-pb-style=JA6M6FM]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=P9SMD4U]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=IGEEQAT]{display:flex;width:100%}#html-body [data-pb-style=ICD32YG]{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=TLA8AWR]{border-style:none}#html-body [data-pb-style=GGV63KM],#html-body [data-pb-style=N09J8U3]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=AH3V5H2]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=LNULKXP]{border-color:#fff;border-width:5px}#html-body [data-pb-style=NH69930]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=THT1SGF]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=XAYOTSB]{display:flex;width:100%}#html-body [data-pb-style=QH9YRTU]{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=U3F2CA5]{border-style:none}#html-body [data-pb-style=R61OPFR],#html-body [data-pb-style=RENFD2V]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=XXIK6O0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=SWVY93O]{border-color:#fff;border-width:5px}#html-body [data-pb-style=MX6QCXI]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=YHXCIB1]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=CXMYH2C]{display:flex;width:100%}#html-body [data-pb-style=PPYYGI3]{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=VE2UEYL]{border-style:none}#html-body [data-pb-style=C85HHVP],#html-body [data-pb-style=P8X7VAO]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=OF3YHE1]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=MUKWFHB]{border-color:#fff;border-width:5px}#html-body [data-pb-style=HW2LAPC]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=JTBQ027]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=H7LNWFF]{display:flex;width:100%}#html-body [data-pb-style=UOS16X4]{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=GMGO9MR],#html-body [data-pb-style=U9GBW2F]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=SQY6TT6]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=HCEC1TP]{display:flex;width:100%}#html-body [data-pb-style=EQ1TK6C]{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=SAXSJHC]{border-style:none}#html-body [data-pb-style=JW92ROH],#html-body [data-pb-style=U03J3U1]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=DSJXAPY]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=Y2REHT3]{border-color:#fff;border-width:5px}#html-body [data-pb-style=TENT4KD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=YLNOWXH]{display:flex;width:100%}#html-body [data-pb-style=B9Y2OE5]{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=NLELFT3]{border-style:none}#html-body [data-pb-style=HCEWTCU],#html-body [data-pb-style=LHRC0BO]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=WIHS5XV]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=TXMQ109]{border-color:#fff;border-width:5px}#html-body [data-pb-style=HSESM22]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=S8K6VN0]{display:flex;width:100%}#html-body [data-pb-style=R6PR0Y5]{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=CIQGJ8M]{border-style:none}#html-body [data-pb-style=C5L3S9F],#html-body [data-pb-style=I2OBU83]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=WH6FR3I]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=S51KHAL]{border-color:#fff;border-width:5px}#html-body [data-pb-style=U4R2BJU]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=LL3W1W1]{display:flex;width:100%}#html-body [data-pb-style=ERWNRF1]{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=DWV8QL6]{border-style:none}#html-body [data-pb-style=X97HGWM],#html-body [data-pb-style=XM2BUA4]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=M5JKQVU]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=DCJI8KE]{border-color:#fff;border-width:5px}#html-body [data-pb-style=RDO9UX2]{width:100%;border-width:1px;border-color:#cecece;display:inline-block}#html-body [data-pb-style=COACM8D]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=HGHXQMJ]{display:flex;width:100%}#html-body [data-pb-style=J3JKKMN]{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=D0C7NHT]{border-style:none}#html-body [data-pb-style=JAHSXTB],#html-body [data-pb-style=XWYPEXW]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=VY7ROYJ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=XONHFQE]{border-color:#fff;border-width:5px}#html-body [data-pb-style=BMT5JIQ]{display:inline-block}#html-body [data-pb-style=FQMDXRO]{text-align:center;border-color:#fff;border-width:5px}#html-body [data-pb-style=X2H6H9E]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=BRO5LX5]{display:flex;width:100%}#html-body [data-pb-style=KMD9LPL]{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=P5MKHPM]{border-style:none}#html-body [data-pb-style=RLWNW4I],#html-body [data-pb-style=XL16HN6]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=V183W9F]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=EGGROQA]{border-color:#fff;border-width:5px}#html-body [data-pb-style=JVSMCIN]{display:inline-block}#html-body [data-pb-style=WF2WD7G]{text-align:center;border-color:#fff;border-width:5px}#html-body [data-pb-style=C0S5DOE]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=W061VQC]{display:flex;width:100%}#html-body [data-pb-style=MEFS7MF]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width
16846:41.6667%;align-self:stretch}#html-body [data-pb-style=QQNTQ5X]{border-style:none}#html-body [data-pb-style=PHREOPG],#html-body [data-pb-style=U56Y65X]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=LQMAFXF]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=O02R3H4]{border-color:#fff;border-width:5px}#html-body [data-pb-style=O7IPBCE]{display:inline-block}#html-body [data-pb-style=A6UEF8X]{text-align:center;border-color:#fff;border-width:5px}#html-body [data-pb-style=KLWXMJF]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=FKQ1V9E]{display:flex;width:100%}#html-body [data-pb-style=DABK1WW]{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=WL5D351]{border-style:none}#html-body [data-pb-style=DQFA2AW],#html-body [data-pb-style=EP7DXCG]{border-color:#fff;border-width:5px;max-width:100%;height:auto}#html-body [data-pb-style=KCVRXYP]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:stretch}#html-body [data-pb-style=CDNQE9A]{border-color:#fff;border-width:5px}#html-body [data-pb-style=JB8OP4P]{display:inline-block}#html-body [data-pb-style=C2KQ25Y]{text-align:center;border-color:#fff;border-width:5px}#html-body [data-pb-style=AQCVVJO]{display:inline-block}#html-body [data-pb-style=LSVFNM5]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=CIQGJ8M],#html-body [data-pb-style=D0C7NHT],#html-body [data-pb-style=DWV8QL6],#html-body [data-pb-style=FHBLSKY],#html-body [data-pb-style=NLELFT3],#html-body [data-pb-style=P5MKHPM],#html-body [data-pb-style=QQNTQ5X],#html-body [data-pb-style=SAXSJHC],#html-body [data-pb-style=TLA8AWR],#html-body [data-pb-style=U3F2CA5],#html-body [data-pb-style=VE2UEYL],#html-body [data-pb-style=WL5D351],#html-body [data-pb-style=X7TR0NC]{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="NII4XUO"><div data-content-type="text" data-appearance="default" data-element="main"><h2 id="KTDAWDM"><strong>About Rubber Flooring</strong></h2> 16847<p>Since the early 20th century, rubber has evolved from a raw tropical sap into the backbone of the automotive industry. Today, we give these tires a second life through a high-tech recycling process. By grinding, cleaning, and bonding high-quality crumb rubber, we create the resilient, eco-friendly flooring you see today. At FlooringInc, we offer this sustainable material in various formats, like rolls, tiles, and mats, to suit everything from high-traffic commercial gyms to private garage workshops. </p></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="GLATN4U"></div><div data-content-type="text" data-appearance="default" data-element="main"><h2 id="HRLVNS8"><strong>Types of Rubber Flooring</strong></h2></div><div data-content-type="text" data-appearance="default" data-element="main"><p>Upgrade your space with sustainable, high-performance rubber flooring that stands the test of time. Whether you need the seamless look of rolls or the easy installation of interlocking tiles, we offer a variety of textures and thicknesses to suit every application. </p> 16848<h3><span style="color: rgb(35, 111, 161);"><strong><a id="IO95J96" style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" target="_blank" rel="noopener">Rub<span style="color: rgb(35, 111, 161);">ber Rolls</span></a></strong></span></h3> 16849<p>Our rubber rolls are our most popular rubber flooring type. While rolls are the gold standard for large, open spaces, they are also easily trimmed with a utility knife to fit even the most complex room layouts, including L-shaped floor plans. Our rubber rolls are available in several thicknesses - 5mm, <a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116313&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">1/4”,</a> <a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116304&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">8mm</a>, <a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116310&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">3/8”,</a> and <a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116298&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">1/2”.</a> With all of these thicknesses, the first question that comes to mind is: Which thickness is perfect for me? Below is a breakdown of where each thickness is most appropriate.</p> 16850<ul> 16851<li><strong><span style="color: rgb(35, 111, 161);">5mm </span>-</strong> High traffic areas - not recommended for gyms</li> 16852<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116313&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>1/4” - </strong></a>Made for basic home gyms and exercise rooms.</li> 16853<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116304&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">8mm -</a> </strong>Very durable rubber for commercial and home gyms.</li> 16854<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116310&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">3/8” -</a> </strong>Most common thickness for commercial gyms and is a millimeter thicker than our 8mm.</li> 16855<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116820&incstores_pim_tf_rubber_thickness=116298&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>1/2”-</strong></a> Ultra durable rubber designed for extreme use.</li> 16856</ul> 16857<p>Rubber rolls are easy to install. Depending on the application, our rubber rolls can be loosely laid, double-sided taped, or glued. For most home gyms, double-sided tape is more than enough to keep the rolls down. For commercial gyms, glue would be the preferred installation method. If you are using rubber rolls as flooring under stationary treadmills and stationary bikes in home gyms, you can lay the rolls. Maintenance of our rubber rolls is very easy and can be done with a broom, vacuum, or mop. When mopping, we recommend you use a mild soap and water solution and a synthetic mop head.</p></div><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="MA5RGGP"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="R99NBQ1"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="L4QWEUV"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="X7TR0NC"><a href="/shop/rubber-gym-rolls-14000.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_47_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_47_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="PEQSYDU"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_47_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_47_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="EB32ORQ"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="BF6EYHN"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="D9KJJRF"><h3><strong>Top Recommendations:</strong></h3> 16858<p>
16858<a tabindex="0" href="/shop/3-8-heavy-duty-rubber-rolls-1006.html" target="_blank" rel="noopener"><strong id="H02WOJX">✅3/8" Heavy Duty Rubber Rolls</strong></a></p> 16859<p><strong><a tabindex="0" href="/shop/nextgen-xl-rubber-rolls-pro-series-14027.html" target="_blank" rel="noopener">✅NextGen XL Rubber Rolls - Pro Series</a></strong></p> 16860<p><a tabindex="0" href="/shop/1-2-mega-rubber-rolls-1007.html" target="_blank" rel="noopener"><strong>✅1/2" Mega Rubber Rolls</strong></a></p> 16861<p><strong><a tabindex="0" href="/shop/next-day-rubber-rolls-14003.html" target="_blank" rel="noopener">✅Next-Day Rubber Rolls – Custom Cut</a></strong></p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="GRIETO8"></div><div data-content-type="text" data-appearance="default" data-element="main"><h3 id="DVVYPOG"><span style="color: rgb(35, 111, 161);"><strong><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" target="_blank" rel="noopener">Rubber Flooring Tiles</a></strong></span></h3> 16862<p>Rubber tiles are a versatile flooring option for many areas of any home or business. Our rubber tiles are designed for use in gyms, playgrounds, and other outdoor spaces. All of our tiles are easy to install and maintain and are backed by industry-leading warranties.</p> 16863<p>Tiles are our easiest rubber floor to install and our most popular in home gyms. No need for a contractor here; most of our rubber tiles are interlocking tiles. For specific installation instructions for the tile you select, please refer to the installation tab for that product. Rubber tiles are better for smaller spaces and are best in square-shaped rooms. Our rubber tiles come in various thicknesses, ranging from ¼” to 4”. The most common thicknesses used for gym flooring are:</p> 16864<ul> 16865<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&incstores_pim_tf_rubber_thickness=116313&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>1/4” -</strong> </a>Made for basic home gyms and exercise rooms.</li> 16866<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&incstores_pim_tf_rubber_thickness=116304&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>8mm - </strong></a>Very durable rubber for commercial and home gyms.</li> 16867<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&incstores_pim_tf_rubber_thickness=116310&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>3/8” - </strong></a>Most common thickness for commercial gyms and is a millimeter thicker than our 8mm.</li> 16868<li><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&incstores_pim_tf_rubber_thickness=116298&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong>1/2” -</strong></a> Ultra durable rubber designed for extreme use.</li> 16869<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116793&incstores_pim_tf_rubber_thickness=116301&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">1” -</a> </strong>For extreme weight lifting.</li> 16870</ul> 16871<p>Gym tiles are available in both recycled and virgin rubber in a variety of colors and textures. The most common rubber tile used in home and commercial gyms is porous tiles. Non-porous tiles are more common in commercial applications and are more shock absorbent. Typically, you will see these tiles in areas where heavy dumbbells and barbells are used. Non-
16871porous tiles are preferred for heavy-duty commercial zones because they offer superior shock absorption and won't trap sweat or moisture, keeping your facility sanitary during the most intense training sessions. These tiles are very easy to install and maintain, needing only a broom, vacuum, and mop. We recommend using a mild soap and water solution when mopping the floor with a synthetic mop head.</p></div><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="C8TN35F"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="E1WWL2Q"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="U9ON7WV"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="FHBLSKY"><a href="/shop/1-monster-rubber-tiles-1040.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_48_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_48_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="I66S42V"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_48_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_48_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="RHOK5TW"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="C94GFNS"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="VEN1C25"><h3><strong>Top Recommendations:</strong></h3> 16872<p id="GRV1HDT"><a tabindex="0" href="/shop/dura-lock-rubber-tiles-13369.html" target="_blank" rel="noopener"><strong>✅Dura Lock Rubber Tiles</strong></a></p> 16873<p><a tabindex="0" href="/shop/exactfit-rubber-tiles-14011.html" target="_blank" rel="noopener"><strong>✅ExactFit Rubber Tiles</strong></a></p> 16874<p><a tabindex="0" href="/shop/goliath-xl-rubber-tiles-14025.html" target="_blank" rel="noopener"><strong>✅Goliath XL Rubber Tiles</strong></a></p> 16875<p><a tabindex="0" href="/shop/1-monster-rubber-tiles-1040.html" target="_blank" rel="noopener"><strong>✅1" Monster Rubber Tiles</strong></a></p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="JA6M6FM"></div><div data-content-type="text" data-appearance="default" data-element="main"><h3><span style="color: rgb(35, 111, 161);"><strong><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" target="_blank" rel="noopener">Rubber Flooring Mats</a></strong></span></h3> 16876<p>Our rubber mats have become the floor of choice for high-impact workouts. These rubber mats are very thick and provide excellent shock absorbency. These rubber horse stall mats are available in 1/4”, 3/8”, 1/2”, and 3/4” thick. Below are what these mats are great for.</p> 16877<ul> 16878<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&incstores_pim_tf_rubber_thickness=116313&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">1/4” - </a></strong>Great for floor exercises and under treadmills and stationary bikes.</li> 16879<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&incstores_pim_tf_rubber_thickness=116310&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">3/8” -</a></strong> Great for floor exercises, some high-impact exercises, and jump training.</li> 16880<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&incstores_pim_tf_rubber_thickness=116298&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">1/2” -</a></strong> Great for all high-impact exercises and jump training.</li> 16881<li><strong><a tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116832&incstores_pim_tf_rubber_thickness=116307&product_list_dir=desc&product_list_mode=list&product_list_order=revenue_ranking" target="_blank" rel="noopener">3/4” -</a></strong> Great for all high-impact exercises and jump training.</li> 16882</ul> 16883<p>Rubber mats can be used as standalone mats or as a full room floor. These mats are very easy to clean and maintain with the use of a broom, hose, or mop. When mopping, we recommend using a mild soap and water solution with a synthetic mop head.</p></div><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="P9SMD4U"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="IGEEQAT"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="ICD32YG"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="TLA8AWR">
16883<a href="/shop/3-4-premium-extreme-mats-8946.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_49_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_49_.jpg" alt="" title="" width="" height="" fetchpriority="" data-use-native-image-dimensions="" decoding="" data-element="desktop_image" data-pb-style="N09J8U3"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_49_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_49_.jpg" alt="" title="" width="" height="" fetchpriority="" data-use-native-image-dimensions="" decoding="" data-element="mobile_image" data-pb-style="GGV63KM"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="AH3V5H2"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="LNULKXP"><h3><strong>Top Recommendations:</strong></h3> 16884<p><a tabindex="0" href="/shop/3-4-extreme-mats-2801.html" target="_blank" rel="noopener"><strong>✅3/4" Extreme Rubber Mats</strong></a></p> 16885<p><a tabindex="0" href="/shop/3-4-premium-extreme-mats-8946.html" target="_blank" rel="noopener"><strong>✅3/4" Premium Extreme Rubber Mats</strong></a></p> 16886<p><a tabindex="0" href="/shop/1-2-mega-mats-2800.html" target="_blank" rel="noopener"><strong>✅1/2" Mega Gym Mats</strong></a></p> 16887<p><a tabindex="0" href="/shop/4-x-6-premium-rubber-mats-3372.html" target="_blank" rel="noopener"><strong>✅4' x 6' Premium Rubber Mats</strong></a></p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="NH69930"></div><div data-content-type="text" data-appearance="default" data-element="main"><h3><span style="color: rgb(35, 111, 161);"><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/rubber-flooring/all-rubber-flooring.html?incstores_pim_category_filters=116814&product_list_mode=list&product_list_dir=desc&product_list_order=revenue_ranking" target="_blank" rel="noopener"><strong id="KBEJFA8">Playground Rubber Flooring</strong></a></span></h3> 16888<p>Playground rubber tiles are thick, durable tiles that help keep kids safe while playing on playground equipment. These tiles range in thickness from 1” to 4” and are designed to absorb the shock of a kid falling from certain heights. Below is a breakdown of the thickness you will need to keep little Johnny safe while playing.</p> 16889<ul> 16890<li><strong>1” - ideal for 1.5’ fall height -</strong> Most common thickness used for home playgrounds</li> 16891<li><strong>2.5” - ideal for 6’ fall height - </strong>Most common thickness used for commercial playgrounds</li> 16892<li><strong>3.5” - ideal for 8’ fall height -</strong> Used in commercial playgrounds</li> 16893<li><strong>4” - ideal for 10’ fall height - </strong>Used in commercial playgrounds</li> 16894</ul> 16895<p>The installation of playground tiles is very dependent on the thickness. 1” thick tiles are installed using dowels, which are little pegs. 2.5” and 3.5” thick tiles are installed with tile clips or quad blocks. These are little adaptors that are used to hold the feet of the tiles together. 4” thick tiles are glued together or are glued down. Cleaning and maintenance of our playground tiles is effortless, requiring only a broom and a hose.</p></div><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="THT1SGF"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="XAYOTSB"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="QH9YRTU"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="U3F2CA5"><a href="/shop/jamboree-playground-tilestm-3264.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_54_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_54_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="R61OPFR"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_54_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_54_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="RENFD2V"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="XXIK6O0"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="SWVY93O"><h3><strong>Top Recommendations:</strong></h3> 16896<p><a tabindex="0" href="/shop/jamboree-playground-tilestm-3264.html" target="_blank" rel="noopener"><strong>✅Jamboree Rubber Playground Tiles™</strong></a></p> 16897<p><a tabindex="0" href="/shop/safe-play-tiles-3276.html" target="_blank" rel="noopener"><strong>✅Safe-Play Rubber Playground Tiles</strong></a></p> 16898<p><a tabindex="0" href="/shop/playsafe-interlocking-playground-tiles-7969.html" target="_blank" rel="noopener"><strong>✅PlaySafe Interlocking Rubber Playground Tiles</strong></a></p> 16899<p><a tabindex="0" href="/shop/playground-swing-mats-3647.html" target="_blank" rel="noopener"><strong>✅Playground Swing Mats - Rubber Safety Mat</strong></a></p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="MX6QCXI"></div><div data-content-type="text" data-appearance="default" data-element="main"><h3 id="IYP7NEQ"><span style="color: rgb(35, 111, 161);"><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/rubber-flooring/outdoor-rubber-flooring.html" target="_blank" rel="noopener"><strong>Outdoor Rubber Flooring</strong></a></span></h3> 16900<p>Outdoor rubber tiles are great for outdoor patios, decks, and stables. These tiles are available in patterns that mimic
16900natural stone pavers and bricks. Our outdoor tiles are available from 5/8” - 1-3/4” thick. Installation of these tiles typically requires glue, but you can also install these rubber tiles with dowels or loose-laid. Maintaining our outdoor rubber tiles is very simple and only requires a broom and a hose.</p></div><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="YHXCIB1"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="CXMYH2C"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PPYYGI3"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="VE2UEYL"><a href="/shop/paver-tiles-west-coast-3284.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_55_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_55_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="P8X7VAO"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_55_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_55_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="C85HHVP"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="OF3YHE1"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MUKWFHB"><h3><strong>Top Recommendations:</strong></h3> 16901<p><strong><a tabindex="0" href="/shop/deck-top-roof-tiles-5137.html" target="_blank" rel="noopener">✅Rooftop Deck Tiles - Rubber Pavers</a></strong></p> 16902<p><a tabindex="0" href="/shop/interlocking-deck-top-roof-tiles-9389.html" target="_blank" rel="noopener"><strong>✅Premium Interlocking Rooftop Deck Tiles - Rubber Pavers</strong></a></p> 16903<p><a tabindex="0" href="/shop/flagstone-rubber-pavers-3912.html" target="_blank" rel="noopener"><strong>✅Reversible Flagstone Patio Pavers – Rubber Deck & Outdoor Tiles</strong></a></p> 16904<p><a href="/shop/paver-tiles-west-coast-3284.html" target="_blank" rel="noopener"><strong>✅West Coast Rubber Pavers - Patio & Deck Outdoor Tiles</strong></a></p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="HW2LAPC"></div><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="JTBQ027"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="H7LNWFF"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="UOS16X4"><div data-content-type="text" data-appearance="default" data-element="main"><h2><strong>How Our Rubber Gym Flooring Lines Stack Up</strong></h2> 16905<p>We don't sell one rubber floor and call it a day. We carry four distinct lines, and each one is built around a different priority. Here's how to tell them apart so you can pick the right one for your space.</p> 16906<ul> 16907<li><a href="https://www.flooringinc.com/shop/shop-by-brand/traxxon.html">Traxxon rubber flooring</a> is our quality mark. The logo goes only on the rubber we judge to be our most durable: commercial-grade rolls, tiles, and mats built to take dropped weights and heavy traffic for years. Start here when longevity matters most.</li> 16908<li>Need to cover a big floor with fewer seams? <a href="https://www.flooringinc.com/shop/nextgen-xl-rubber-rolls-pro-series-14027.html">NextGen XL 5-foot-wide rubber rolls</a> are a FlooringInc exclusive we developed, and we believe they're the widest rubber roll you can buy. The extra width means fewer seams and less cutting labor on large installs.</li> 16909<li><a href="https://www.flooringinc.com/blog/quick-ship-rubber-rolls">Quick Ship precut rubber rolls</a> trade custom sizing for speed. We cut the most popular colors and lengths ahead of time and stock them across regional warehouses, then ship from the one closest to you. That cuts freight cost and gets your floor there sooner.</li> 16910<li>For light-duty rooms and price-first projects, <a href="https://www.flooringinc.com/shop/budget-rubber-rolls-14048.html">Standard rubber rolls</a> cover the basics without the commercial-grade specs you'd pay extra for.</li> 16911</ul> 16912<p>Not sure which line fits? Order free samples or call our team, and we'll point you to the right rubber floor for your space.</p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="GMGO9MR"></div><div data-content-type="text" data-appearance="default" data-element="main"><h2><strong>Rubber Flooring Delivery </strong></h2> 16913<p>Most rubber flooring orders are shipped through FedEx Ground. Some extremely heavy orders may ship via freight delivery. For more information on freight delivery, please contact one of our sales representatives to get the lowdown, as it varies on a case-by-case basis. Don’t worry, though - you will not be asked to take your new rubber flooring off the truck. We cover the cost of lift-gate and curbside. You are only responsible for getting the rubber flooring inside and enjoying it!</p></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="U9GBW2F"></div><div data-content-type="text" data-appearance="default" data-element="main"><h2><strong>Customer Reviews</strong></h2></div><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="SQY6TT6"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="HCEC1TP"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="EQ1TK6C"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="SAXSJHC"><a href="/shop/5-8-evolution-rubber-tiles-3772.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_58_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_58_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="JW92ROH"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_58_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_58_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="U03J3U1"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="DSJXAPY"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="Y2REHT3"><h3><span style="color: rgb(35, 111, 161);"><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/5-8-evolution-rubber-tiles-3772.html" target="_blank" rel="noopener"><strong>5/8" Evolution Rubber Floor Tiles</strong></a></span></h3> 16914<p>
16914"These were perfect for my garage gym application. The mats snapped together easily once soapy water was sprayed into the grommets. Sizing the mats perfectly and cutting was very easy with a sharp utility knife, which allowed me to customize the fitment. Shopping was exactly as described by FlooringInc, and I would recommend this product and FlooringInc to anyone who is on the fence regarding a purchase."</p> 16915<p>- Robert</p></div></div></div></div><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="TENT4KD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="YLNOWXH"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="B9Y2OE5"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="NLELFT3"><a href="/shop/next-day-rubber-rolls-14003.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_57_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_57_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="HCEWTCU"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_57_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_57_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="LHRC0BO"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="WIHS5XV"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="TXMQ109"><h3><span style="color: rgb(35, 111, 161);"><strong><a id="D61T2B4" style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/next-day-rubber-rolls-14003.html" target="_blank" rel="noopener">Next-Day Rubber Rolls – Custom Cut</a></strong></span></h3> 16916<p>"Purchased for a home gym. Delivered in a timely manner at a fair price. Received 4 rolls, 17-25 ft. (I think). All rubber was conforming and easy to work with. Cutting was easy - I used double-sided tape and rubber trim for a polished look. The flooring is excellent."</p> 16917<p>- Greg S.</p></div></div></div></div><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="HSESM22"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="S8K6VN0"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="R6PR0Y5"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="CIQGJ8M"><a href="/shop/4-x-6-premium-rubber-mats-3372.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_59_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_59_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="I2OBU83"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_59_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_59_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="C5L3S9F"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="WH6FR3I"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="S51KHAL"><h3><span style="color: rgb(35, 111, 161);"><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/4-x-6-premium-rubber-mats-3372.html" target="_blank" rel="noopener"><strong>4' x 6' Premium Rubber Mats</strong></a></span></h3> 16918<p>"When looking for a rubber mat to put underneath my new incline trainer, I wanted something that would still look great in my home while protecting our hardwood floors. This product is the best! It is the perfect size and thickness, and the color fleck looks great with the room (since it had to go in our front room). I highly recommend."</p> 16919<p>- Beth</p></div></div></div></div><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="U4R2BJU"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="LL3W1W1"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="ERWNRF1"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="DWV8QL6"><a href="/shop/jamboree-playground-tilestm-3264.html" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_60_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_60_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="X97HGWM"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_60_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_60_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="XM2BUA4"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="M5JKQVU"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="DCJI8KE"><h3><span style="color: rgb(35, 111, 161);"><strong><a style="color: rgb(35, 111, 161);" tabindex="0" href="/shop/jamboree-playground-tilestm-3264.html" target="_blank" rel="noopener">Jamboree Rubber Playground Tiles™</a></strong></span></h3> 16920<p>"We have loved our playground tiles!!! We hired a landscaper to level the ground for us. We installed the tiles ourselves. We cut the angles. Super easy!!!! The tiles have increased the playing surface for our kids to even ride their bikes! Thank you for the quick shipment!"</p> 16921<p>- David</p></div></div></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="RDO9UX2"></div><div data-content-type="text" data-appearance="default" data-element="main"><h2><strong>Other Helpful Rubber Flooring Content</strong></h2></div><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="COACM8D"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="HGHXQMJ"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="J3JKKMN"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="D0C7NHT"><a href="/blog/rubber-flooring-faq" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_51_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_51_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="JAHSXTB"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_51_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_51_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="XWYPEXW"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="VY7ROYJ"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="XONHFQE"><h3><a tabindex="0" href="/blog/rubber-flooring-faq" target="_blank" rel="noopener"><strong>Rubber Flooring FAQ: Your Questions Answered</strong></a></h3> 16922<p>Most people have never heard of rubber flooring until the time comes when they need to buy it. It’s not exactly like buying a new toothbrush. It’s kind of a foreign product and, of course, you want to make sure you’re choosing the right floor.</p> 16923<p>If you’re in the market for flooring for your gym, high-traffic space, or outdoor area, you’ve come to the right place. Rubber flooring is an extremely versatile specialty flooring option perfect for just about any space.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="BMT5JIQ"><a class="pagebuilder-button-primary" href="/blog/rubber-flooring-faq" target="" data-link-type="default" data-element="link" data-pb-style="FQMDXRO"><span data-element="link_text">Learn More</span></a></div></div></div></div></div><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="X2H6H9E"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="BRO5LX5"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="KMD9LPL"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="P5MKHPM"><a href="/blog/what-is-rubber-flooring" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_50_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_50_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="XL16HN6"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_50_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_50_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="RLWNW4I"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="V183W9F"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="EGGROQA"><h3 id="CL3IFS9"><a tabindex="0" href="/blog/what-is-rubber-flooring" target="_blank" rel="noopener"><strong>What is Rubber Flooring: Exploring the Versatility and Benefits</strong></a></h3> 16924<p>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
16924over its durability, versatility, and eco-friendliness. As the demand for innovative and sustainable flooring solutions grows, rubber floors meet and exceed expectations, offering a seamless blend of functionality and aesthetic appeal for our customers' diverse needs.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="JVSMCIN"><a class="pagebuilder-button-primary" href="/blog/what-is-rubber-flooring" target="" data-link-type="default" data-element="link" data-pb-style="WF2WD7G"><span data-element="link_text">Learn More</span></a></div></div></div></div></div><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="C0S5DOE"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="W061VQC"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="MEFS7MF"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="QQNTQ5X"><a href="/blog/how-to-install-rubber-flooring" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_52_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_52_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="U56Y65X"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_52_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_52_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="PHREOPG"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="LQMAFXF"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="O02R3H4"><h3><a tabindex="0" href="/blog/how-to-install-rubber-flooring" target="_blank" rel="noopener"><strong>How to Install Rubber Flooring: 11 Tips to Know</strong></a></h3> 16925<p>When it comes to transforming your space, few things rival the impact of a new floor. Rubber flooring has become a popular choice for its durability and versatility. In this comprehensive guide, we'll teach you how to install your rubber flooring, whether you're tackling it as a DIY project or considering professional services. Let's dive into what rubber flooring is and what makes it the go-to option for gyms, dance studios, and other spaces.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="O7IPBCE"><a class="pagebuilder-button-primary" href="/blog/how-to-install-rubber-flooring" target="" data-link-type="default" data-element="link" data-pb-style="A6UEF8X"><span data-element="link_text">Learn More</span></a></div></div></div></div></div><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="KLWXMJF"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="FKQ1V9E"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="DABK1WW"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="WL5D351"><a href="/blog/how-to-clean-rubber-gym-flooring" target="_blank" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_53_.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_53_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="desktop_image" data-pb-style="DQFA2AW"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Main_Image_53_.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/Main_Image_53_.jpg" alt="" title="" width="" height="" fetchpriority="false" data-use-native-image-dimensions="true" decoding="async" data-element="mobile_image" data-pb-style="EP7DXCG"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="KCVRXYP"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="CDNQE9A"><h3><a tabindex="0" href="/blog/how-to-clean-rubber-gym-flooring" target="_blank" rel="noopener"><strong>How to Clean Rubber Gym Flooring: 4 Easy Steps</strong></a></h3> 16926<p>Rubber flooring is perfect for exercise, whether it’s your home gym or a commercial gym. But after a successful workout, have you ever noticed how dirty it can be? You need to know how to clean rubber gym flooring if you’re going to keep your gym sanitary.</p> 16927<p>Fortunately for you, we know all about how to clean rubber floors, and we’re going to share our wisdom! This guide will show you the best way to clean rubber gym floors, share the best rubber flooring cleaners, and even answer some FAQs.<
16927/p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="JB8OP4P"><a class="pagebuilder-button-primary" href="/blog/how-to-clean-rubber-gym-flooring" target="" data-link-type="default" data-element="link" data-pb-style="C2KQ25Y"><span data-element="link_text">Learn More</span></a></div></div></div></div></div><div data-content-type="text" data-appearance="default" data-element="main"><h3><strong>Ready to get started?</strong></h3></div><div data-content-type="text" data-appearance="default" data-element="main"><p>This page lists every rubber roll, tile, and mat we carry, from budget picks to commercial-grade workhorses. The <strong>Traxxon</strong> logo tells you which ones we rate as our best. We reserve the name for rolled rubber flooring, tiles, and mats engineered to take heavy, repeated abuse and stay flat and intact into year ten. We've sold rubber flooring since 2007, so we know which products go the distance. Shop Traxxon branded rubber flooring if you are looking for what we think are the best rubber flooring products.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="AQCVVJO"><a class="pagebuilder-button-primary" href="/shop/rubber-flooring/all-rubber-flooring.html" target="" data-link-type="default" data-element="link" data-pb-style="LSVFNM5"><span data-element="link_text">Shop All Rubber Flooring</span></a></div></div></div></div> </div> 16928 </main><footer class="page-footer"><div class="footer content"> 16929<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> 16930<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> 16931<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> 16932<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">
16932<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> 16933<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> 16934</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"> 16935 <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> 16936<li style="line-height: 10px;"><a id="T6SH02B" tabindex="0" href="/contact">Contact Us</a></li> 16937<li style="line-height: 10px;"><a tabindex="0" href="/about">About Us</a></li> 16938<li style="line-height: 10px;"><a id="EHRBRCU" tabindex="0" href="/careers">Careers</a></li> 16939<li style="line-height: 10px;"><a tabindex="0" href="/privacy-policy">Privacy Policy</a></li> 16940<li style="line-height: 10px;"><a tabindex="0" href="/affirm">Affirm</a></li> 16941<li style="line-height: 10px;"><a tabindex="0" href="/our-commitment-accessibility">Accessibility</a></li> 16942<li style="line-height: 10px;"><a tabindex="0" href="/terms-and-conditions">Terms & Conditions</a></li> 16943</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> 16944<li><a tabindex="0" href="/shipping-info">Shipping</a></li> 16945<li><a id="ER5IYQ2" tabindex="0" href="/sales/guest/form">Track Order</a></li> 16946<li><a tabindex="0" href="/returns-exchanges">Returns & Exchanges</a></li> 16947<li><a tabindex="0" href="/moneybackguarantee">Money Back Guarantee</a></li> 16948<li id="W8TRHHE"><a tabindex="0" href="/pro-advantage">Pro Advantage</a></li> 16949<li><a href="/dor-sites">Sales & Use Tax</a></li> 16950</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> 16951<li><a tabindex="0" href="/knowledge-base">FAQs</a></li> 16952<li><a tabindex="0" href="/sample-request">Samples</a></li> 16953<li><a tabindex="0" href="https://flooringinc.cashstar.com/store/recipient?locale=en-us">Gift Cards</a></li> 16954<li><a href="/promotions-disclaimer">Promotions</a></li> 16955</ul></div></div></div></div></div></div></div> 16956</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"> 16957 <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"> 16958 <form class="form subscribe" action="https://www.flooringinc.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm(
16958)" id="newsletter-validate-detail"> 16959 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font"> 16960 <h4 class="text-lg font-medium text-black mb-1 capitalize">Get Ready To Be Floored!</h4> 16961 <p calss="sub_heading capitalize">Join our insider's club</p> 16962 </div> 16963 <div class="flex flex-wrap justify-center gap-2 md:justify-start"> 16964 <label for="newsletter-subscribe" class="sr-only"> 16965 Email Address </label> 16966 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full" placeholder="Enter email address"> 16967 <input name="form_key" type="hidden" value="3mNdp2ZYJNcyLOs5"> <button class="btn btn-primary"> 16968 Subscribe Now </button> 16969 </div> 16970 <div> 16971 <template x-if="displayErrorMessage"> 16972 <p class="flex items-center text-red"> 16973 <span class="inline-block w-8 h-8 mr-3"> 16974 <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"> 16975 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 16976<title>exclamation-circle</title></svg> 16977 </span> 16978 <template x-for="errorMessage in errorMessages"> 16979 <span x-html="errorMessage"></span> 16980 </template> 16981 </p> 16982 </template> 16983 </div> 16984 </form> 16985 <div class="w-full"> 16986 </div> 16987
16987<script> 16988 function initNewsletterForm() { 16989 return { 16990 errors: 0, 16991 hasCaptchaToken: 0, 16992 displayErrorMessage: false, 16993 errorMessages: [], 16994 setErrorMessages(messages) { 16995 this.errorMessages = [messages] 16996 this.displayErrorMessage = this.errorMessages.length 16997 }, 16998 submitForm() { 16999 // Do not rename $form, the variable is expected to be declared in the recaptcha output 17000 const $form = document.querySelector('#newsletter-validate-detail'); 17001 17002 if (this.errors === 0) { 17003 $form.submit(); 17004 } 17005 } 17006 } 17007 } 17008 </script>
17008 17009</div> 17010 17011<div class="pr-4 lg:w-1/4 md:w-1/2"> 17012 17013</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> 17014</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"> 17015 <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> 17016<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> 17017<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> 17018</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> 17019<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> 17020<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> 17021<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> 17022<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> 17023<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> 17024<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> 17025<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> 17026</ul></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 17027.checkout-cart-index .summary-cart .cart-discount{display:block;} 17028.page-with-filter .products.wrapper.mode-list.products-list .item.product .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;} 17029.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;} 17030@media(min-width:1280px){.mega_menu_banner img{max-width: 239px !important;}} 17031.cms-home .catergory_slider_content .product-item-link{font-size: .875rem;line-height: 1.313rem;} 17032@media(min-width: 768px){ 17033.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);}
17033.catergory_slider_content .compare-buttons .orderSampleContent{order:3;} 17034.catergory_slider_content .compare-buttons .ship-fax-plp .ship-iconsada{display: block;} 17035.page-products #maincontent .products.mode-grid .catergory_slider_content .compare-buttons .orderSampleContent{order: 3;} 17036 .category_banner .pagebuilder-column-group .pagebuilder-column-line .pagebuilder-column figure picture{height: 100% !important;object-fit:cover;} 17037[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;} 17038.cms-home [data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product:not(.glider-slide){min-width: 370px;} 17039[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar{width: 10px;} 17040[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-track {background: #ffffff !important;} 17041[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-thumb {background: #ffffff !important;} 17042} 17043@media(min-width: 768px){ 17044 .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;} 17045 .featured_partners .swiper-container:not(.swiper-initialized) .swiper-slide{width: 16%;} 17046 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar{width: 10px;} 17047 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-track {background: #ffffff !important;} 17048 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb {background: #ffffff !important;} 17049 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb:hover {background: #ffffff !important;} 17050} 17051@media(max-width:767px){.page-products #maincontent .toolbar.toolbar-products .pages-items{justify-content: center;gap: 10px;box-shadow: none;}} 17052</style></div></div> 17053</div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
17053<script> 17054 document.addEventListener('DOMContentLoaded', function () { 17055 const gallery = document.querySelector('#gallery'); 17056 const header = document.querySelector('#header'); 17057 if (!gallery || !header) return; 17058 const stickyTop = header.offsetHeight; 17059 // parent/container where sticky should stop 17060 const parent = gallery.parentElement; 17061 function checkSticky() { 17062 const rect = gallery.getBoundingClientRect(); 17063 const parentRect = parent.getBoundingClientRect(); 17064 // sticky active only while parent still has space 17065 const isSticky = 17066 rect.top <= stickyTop && 17067 parentRect.bottom > rect.height + stickyTop; 17068 document.body.classList.toggle('gallery-sticky', isSticky); 17069 } 17070 checkSticky(); 17071 window.addEventListener('scroll', checkSticky); 17072 window.addEventListener('resize', checkSticky); 17073 }); 17074</script>
17074 17075<style> 17076@media (min-width: 1200px) { 17077 .megamenu_items:hover>.megamenu { 17078 max-width: 1440px; 17079 } 17080} 17081.products__recommendations .products_slider .catergory_slider_content .color_counts{margin-bottom: 15px;} 17082html.order_active .page-header #header{z-index: -1;} 17083html.order_active{overflow: hidden !important;} 17084@media(min-width: 768px){.checkout-cart-index #shopping-cart-table .cart.item .item-info td{flex-wrap: nowrap;}} 17085</style> 17086<style> 17087.cms-home .order-free-sample-popup{display: none;} 17088.cms-home.order_active .order-free-sample-popup{display: flex;} 17089@media(min-width:768px){ 17090.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 17091.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;} 17092.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{width: 100%;order: 2;display: flex;justify-content: space-between;} 17093.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent .order_btn{margin-top: 10px;} 17094.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{border-top: 0px;padding-top:0px;margin-top: 0px;} 17095.catalog-product-view .products_slider .compare-buttons .qty_fields .btn_cart{width:110px} 17096} 17097@media(max-width:767px){ 17098.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 17099.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;width: 100%;} 17100.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compareBtn{order:2;justify-content: flex-start;width: auto;margin-top: 10px;} 17101.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent{order:3;margin-top: 10px;} 17102.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;width: 100%;display: flex;justify-content: space-between;} 17103} 17104#related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 17105@media (min-width: 1024px) { 17106.container { 17107 max-width: 1440px !important; 17108} 17109} 17110.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 20px !important;color: #1e1e1e !important;} 17111.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper{font-size: 20px !important;line-height: 20px !important} 17112.brand_logo_listpage img, div.brand_logo_listpage img{max-width:100px} 17113.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;} 17114 17115.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;} 17116 17117@media(max-width: 767px){ 17118 .related_products_list_view .glider-track{width: 100% !important;flex-wrap: nowrap;align-items: flex-start;} 17119 .related_products_list_view .related_products_list_view_content{width: 100% !important;min-width: 280px;max-width: 280px;} 17120} 17121 17122.dcw-share-cart .space-y-4>:not([hidden])~:not([hidden]) { 17123 --tw-space-y-reverse: 0; 17124 margin-top: calc(1rem * (1 - var(--tw-space-y-reverse))); 17125 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 17126} 17127.dcw-share-cart .bg-black\/50 { 17128 background-color: #00000080; 17129} 17130.dcw-share-cart .z-\[999\] { 17131 z-index: 999; 17132} 17133</style></div></div>
17134<script> 17135 window.addEventListener('init-external-scripts', () => { 17136 const klaviyoScript = document.createElement('script'); 17137 klaviyoScript.src = '//static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg'; 17138 klaviyoScript.type = 'text/javascript'; 17139 klaviyoScript.async = true; 17140 document.head.append(klaviyoScript); 17141 }, {once: true, passive: true}); 17142</script>
vendor: 1 bytes, line 17142
17142
17143<script> 17144 document.addEventListener('DOMContentLoaded', function() { 17145 const buttons = document.querySelectorAll('.cms-home .order_btn'); 17146 buttons.forEach(button => { 17147 button.addEventListener('click', function() { 17148 const modal = this.closest('.orderSampleContent').querySelector('.order-free-sample-popup'); 17149 if (modal) { 17150 modal.style.display = 'block'; 17151 } 17152 }); 17153 }); 17154 17155 // Handle closing the modal 17156 document.querySelectorAll('.cms-home .order-free-sample-popup .closemodal').forEach(closeBtn => { 17157 closeBtn.addEventListener('click', function() { 17158 const modal = this.closest('.order-free-sample-popup'); 17159 if (modal) { 17160 modal.style.display = 'none'; 17161 } 17162 }); 17163 }); 17164 }); 17165</script>
17165 17166
17167<script> 17168 document.addEventListener('DOMContentLoaded', function () { 17169 function updateRatingsClass(ratingEl) { 17170 const hasReviews = ratingEl.querySelector('.bv_numReviews_component_container'); 17171 ratingEl.classList.toggle('no-reviews', !hasReviews); 17172 } 17173 document.querySelectorAll('.ratings').forEach(ratingEl => { 17174 updateRatingsClass(ratingEl); 17175 const observer = new MutationObserver(() => { 17176 updateRatingsClass(ratingEl); 17177 }); 17178 observer.observe(ratingEl, { 17179 childList: true, 17180 subtree: true 17181 }); 17182 }); 17183 }); 17184</script>
17184 17185 17186<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'"/> 17187<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'"/> 17188<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'"/> 17189<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'"/> 17190<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'"/> 17191<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'"/> 17192<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'"/> 17193<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'"/> 17194<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'"/> 17195<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>
17196<script> 17197 function dataServicesShoppingCartContextData() 17198 { 17199 return { 17200 initContext(cartData) { 17201 let contextCartItems = []; 17202 17203 cartData.items.forEach(function (item){ 17204 contextCartItems.push({ 17205 id: item.item_id, 17206 formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), 17207 quantity: item.qty, 17208 product: { 17209 productType: item.product_type, 17210 productId: item.product_id, 17211 name: item.product_name, 17212 sku: item.product_sku, 17213 mainImageUrl : item.product_image.src 17214 }, 17215 prices: { 17216 price: { 17217 value: parseFloat(item.product_price_value ? item.product_price_value : 0) 17218 } 17219 } 17220 }) 17221 }); 17222 17223 magentoStorefrontEvents.context.setShoppingCart({ 17224 id: cartData.dsCartId, 17225 totalQuantity: cartData.summary_count, 17226 prices: { 17227 subtotalExcludingTax: { 17228 value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) 17229 }, 17230 subtotalIncludingTax: { 17231 value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) 17232 } 17233 }, 17234 items: contextCartItems, 17235 possibleOnepageCheckout: cartData.possible_onepage_checkout, 17236 giftMessageSelected : false, 17237 giftWrappingSelected : false 17238 }); 17239 17240 window.dispatchEvent(new Event("shoppingCartContextSet")); 17241 } 17242 } 17243 } 17244</script>
17244 17245<div x-data="dataServicesShoppingCartContextData()" 17246 @private-content-loaded.window="initContext($event.detail.data.cart)"></div> 17247 17248
17249<script> 17250 (function () { 17251 'use strict'; 17252 17253 /** 17254 * Config to determine which element is responsible for the form submission 17255 * 17256 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 17257 */ 17258 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 17259 17260 /** 17261 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 17262 * Call original submit on amrecaptcha-callback event after successful captcha validation. 17263 * 17264 * @return {void} 17265 */ 17266 const wrapFormSubmit = function () { 17267 document.addEventListener("DOMContentLoaded", function () { 17268 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 17269 if (formsSelector.length === 0) { 17270 return; 17271 } 17272 17273 document.querySelectorAll(formsSelector)?.forEach(formElement => { 17274 if (!formElement) { 17275 return; 17276 } 17277 17278 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 17279 if (!elementToWrap || !attributeNameToWrap) { 17280 return; 17281 } 17282 17283 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 17284 }); 17285 }); 17286 }; 17287 17288 /** 17289 * Find submit event and DOM element that has this event using formWrapperConfig. 17290 * 17291 * @param {HTMLElement} formElement 17292 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 17293 */ 17294 const resolveElementWrapping = function (formElement) { 17295 let result = { 17296 elementToWrap: undefined, 17297 attributeNameToWrap: undefined 17298 }; 17299 17300 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 17301 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 17302 if (!elementToWrap) { 17303 return; 17304 } 17305 17306 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 17307 (elementAttribute) => { 17308 /** @type {string[]} */ 17309 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 17310 17311 return submitAttributeVariations.some( 17312 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 17313 ) 17314 } 17315 ); 17316 if (!attributeNameToWrap) { 17317 return; 17318 } 17319 17320 result.elementToWrap = elementToWrap; 17321 result.attributeNameToWrap = attributeNameToWrap; 17322 }); 17323 17324 return result; 17325 } 17326 17327 /** 17328 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 17329 * 17330 * @param {HTMLElement} formElement 17331 * @param {HTMLElement} elementToWrap 17332 * @param {string} attributeNameToWrap 17333 */ 17334 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 17335 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 17336 elementToWrap.removeAttribute(attributeNameToWrap); 17337 17338 /** 17339 * To properly set submit attribute - we need to replace '@' with 'x-on:' 17340 * and add preventDefault behaviour 17341 */ 17342 elementToWrap.setAttribute( 17343 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 17344 'amRecaptchaModel.execute($event)' 17345 ); 17346 elementToWrap.setAttribute( 17347 'x-on:amrecaptcha-executable-callback', 17348 originalSubmit 17349 ); 17350 } 17351 17352 wrapFormSubmit(); 17353 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 17354</script>
17354 17355
17356<script> 17357 function initAuthenticationBss() { 17358 return { 17359 open: false, 17360 openLogin : false, 17361 openRegister : false, 17362 openForgot : false, 17363 openCreate : true, 17364 passwordsMatching: true, 17365 openMessage: false, 17366 errors: 0, 17367 message: "", 17368 hasCaptchaToken: 0, 17369 openButtonLogin : false, 17370 openButtonRegister : false, 17371 openSuccessMessage : false, 17372 checkUseReCaptcha: 1, 17373 recaptchaLoading: null, 17374 initSocial() { 17375 if (!this.checkUseReCaptcha) { 17376 return Promise.resolve(); 17377 } 17378 if (this.recaptchaLoading) { 17379 return this.recaptchaLoading; 17380 } 17381 if (typeof window.grecaptcha !== 'undefined') { 17382 this.recaptchaLoading = Promise.resolve(); 17383 return this.recaptchaLoading; 17384 } 17385 this.recaptchaLoading = new Promise((resolve, reject) => { 17386 const recaptchaUrl = `https://www.google.com/recaptcha/api.js?render=6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO&hl=en`; 17387 const script = document.createElement('script'); 17388 script.setAttribute('type', 'text/javascript'); 17389 script.setAttribute('src', recaptchaUrl); 17390 script.onload = () => resolve(); 17391 script.onerror = () => reject(new Error('Failed to load reCAPTCHA')); 17392 document.head.appendChild(script); 17393 }); 17394 return this.recaptchaLoading; 17395 }, 17396 loadRecaptchaOnInteraction() { 17397 if (!this.checkUseReCaptcha) { 17398 return; 17399 } 17400 // Avoid scroll/mousemove/wheel â they fire on load / DevTools / trackpads. 17401 const events = ['pointerdown', 'keydown', 'touchstart']; 17402 const load = () => { 17403 events.forEach((eventName) => { 17404 window.removeEventListener(eventName, load, { capture: true }); 17405 }); 17406 this.initSocial(); 17407 }; 17408 events.forEach((eventName) => { 17409 window.addEventListener(eventName, load, { once: true, passive: true, capture: true }); 17410 }); 17411 }, 17412 checkPasswordsMatch() { 17413 if (document.getElementById('password').value === 17414 document.getElementById('password-confirmation').value) { 17415 this.passwordsMatching = true; 17416 return true; 17417 } 17418 this.passwordsMatching = false; 17419 return false; 17420 }, 17421 submitForm: function () { 17422 const $form = document.querySelector('#login-form'); 17423 if (this.errors === 0) { 17424 this.dispatchLoginRequest($form); 17425 } 17426 }, 17427 submitForgotForm : function () { 17428 const $form = document.querySelector('#fotgot-form'); 17429 if (this.errors === 0) { 17430 this.dispatchForgotRequest($form); 17431 } 17432 }, 17433 submitRegisterForm : function () { 17434 const $form = document.querySelector('#create-form'); 17435 if (this.errors === 0) { 17436 this.dispatchRegisterRequest($form); 17437 } 17438 }, 17439 validateCaptcha : async function () { 17440 await this.initSocial(); 17441 return new Promise((resolve, reject) => { 17442 if (typeof window.grecaptcha === 'undefined') { 17443 return reject(new Error('reCAPTCHA is not available')); 17444 } 17445 grecaptcha.ready(function () { 17446 grecaptcha.execute('6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO', {action: 'submit'}).then(function (token) { 17447 return resolve(token); 17448 }).catch(reject); 17449 }); 17450 }); 17451 }, 17452 dispatchLoginRequest:async function (form) { 17453 if (this.checkUseReCaptcha) { 17454 let token = await this.validateCaptcha(); 17455 if(token) 17456 { 17457 document.getElementById("g-recaptcha-response").setAttribute('value',token); 17458 } 17459 } 17460 const username = this.$refs['customer-email'].value; 17461 const password = this.$refs['customer-password'].value; 17462 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 17463 const postUrl = "https://www.flooringinc.com/sociallogin/popup/login/"; 17464 fetch(postUrl, { 17465 headers: { 17466 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 17467 }, 17468 body: new URLSearchParams({ 17469 username: username, 17470 password: password, 17471 ['g-recaptcha-response']: recaptchaValue, 17472 form_key: hyva.getFormKey(), 17473 }), 17474 method: "POST", 17475 mode: "cors", 17476 credentials: "include", 17477 }).then(response => { 17478 return response.json() 17479 } 17480 ).then(data => { 17481 this.isLoading = false;
17482 if (data.error) { 17483 this.message = data.message; 17484 this.openMessage = true; 17485 this.errors = 1; 17486 this.hasCaptchaToken = 0; 17487 } else { 17488 this.message = data.message; 17489 this.openMessage = false; 17490 this.openSuccessMessage = true; 17491 if (data.redirect !== '' && data.redirect != null) { 17492 window.location.href = data.redirect; 17493 } else { 17494 location.reload(true); 17495 } 17496 } 17497 }); 17498 }, 17499 dispatchForgotRequest:async function (form) { 17500 if (this.checkUseReCaptcha) { 17501 let token = await this.validateCaptcha(); 17502 if(token) 17503 { 17504 document.getElementById("g-recaptcha-response").setAttribute('value',token); 17505 } 17506 } 17507 const email = form.querySelector("#email_address").value; 17508 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 17509 const postUrl = "https://www.flooringinc.com/sociallogin/popup/forgot/"; 17510 fetch(postUrl, { 17511 headers: { 17512 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 17513 }, 17514 body: new URLSearchParams({ 17515 email: email, 17516 ['g-recaptcha-response']: recaptchaValue, 17517 form_key: hyva.getFormKey(), 17518 }), 17519 method: "POST", 17520 mode: "cors", 17521 credentials: "include", 17522 }).then(response => { 17523 return response.json() 17524 } 17525 ).then(data => { 17526 this.isLoading = false; 17527 if (data.error) { 17528 this.message = data.message; 17529 this.openMessage = true; 17530 this.errors = 1; 17531 this.hasCaptchaToken = 0; 17532 } else { 17533 if (data.redirect !== '' && data.redirect != null) { 17534 window.location.href = data.redirect; 17535 } else { 17536 location.reload(true); 17537 } 17538 } 17539 }); 17540 }, 17541 dispatchRegisterRequest:async function (form) { 17542 if (this.checkUseReCaptcha) { 17543 let token = await this.validateCaptcha(); 17544 if(token) 17545 { 17546 document.getElementById("g-recaptcha-response").setAttribute('value',token); 17547 } 17548 } 17549 const firstname = form.querySelector("#firstname").value; 17550 const lastname = form.querySelector("#lastname").value; 17551 const email = form.querySelector("#email_address").value; 17552 const password = form.querySelector("#password").value; 17553 const passwordConfirmation = form.querySelector("#password-confirmation").value; 17554 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 17555 const postUrl = "https://www.flooringinc.com/sociallogin/popup/create/"; 17556 fetch(postUrl, { 17557 headers: { 17558 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 17559 }, 17560 body: new URLSearchParams({ 17561 ['g-recaptcha-response']: recaptchaValue, 17562 firstname: firstname, 17563 lastname: lastname, 17564 email: email, 17565 password: password, 17566 password_confirmation: passwordConfirmation, 17567 form_key: hyva.getFormKey(), 17568 }), 17569 method: "POST", 17570 mode: "cors", 17571 credentials: "include", 17572 }).then(response => { 17573 return response.json() 17574 } 17575 ).then(data => { 17576 this.isLoading = false;
17577 if (data.error) { 17578 this.message = data.message; 17579 this.openMessage = true; 17580 this.hasCaptchaToken = 0; 17581 } else { 17582 this.message = data.message; 17583 this.openMessage = false; 17584 this.openSuccessMessage = true; 17585 if (data.redirect !== '' && data.redirect != null) { 17586 window.location.href = data.redirect; 17587 } else { 17588 location.reload(true); 17589 } 17590 } 17591 }); 17592 }, 17593 eventListeners: { 17594 ['@popup-register.window']($event) { 17595 this.open = true; 17596 this.openRegister = $event.detail.openRegister; 17597 this.openLogin = $event.detail.openLogin; 17598 this.openCreate = $event.detail.openCreate; 17599 this.openButtonLogin = $event.detail.openButtonLogin; 17600 this.openButtonRegister = $event.detail.openButtonRegister; 17601 this.initSocial(); 17602 } 17603 } 17604 } 17605 } 17606</script>
17606 17607 17608<section id="authentication-popup-bss" 17609 x-data="initAuthenticationBss()" x-init="loadRecaptchaOnInteraction()" 17610 @keydown.window.escape="open = false" 17611<div role="dialog" 17612 aria-modal="true" 17613 class="hidden inset-y-0 right-0 z-30 flex max-w-full" 17614 :class="{ 'hidden': !open, 'fixed': open }" 17615 x-bind="eventListeners" 17616> 17617 <div class="relative bg-container-lighter bss_login_popup" 17618 x-show="open" 17619 @click.outside="open = false" 17620 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 17621 x-transition:enter-start="translate-x-full" 17622 x-transition:enter-end="translate-x-0" 17623 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 17624 x-transition:leave-start="translate-x-0" 17625 x-transition:leave-end="translate-x-full" 17626 > 17627 <div 17628 x-show="open" 17629 x-transition:enter="ease-in-out duration-500" 17630 x-transition:enter-start="opacity-0" 17631 x-transition:enter-end="opacity-100" 17632 x-transition:leave="ease-in-out duration-500" 17633 x-transition:leave-start="opacity-100" 17634 x-transition:leave-end="opacity-0" class="absolute flex close_icon" style="width: 11px;height: 11px;background: transparent;"> 17635 <button @click="open = false;" aria-label="Close panel" 17636 class="transition duration-150 ease-in-out text-black cursor-pointer"> 17637 <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> 17638 </button> 17639 </div> 17640 <div class="flex h-full flex-col bss_login_popup_in overflow-y-auto" > 17641 <div class="message mx-4 message-error" x-show="openMessage"> 17642 <div> 17643 <span x-html="message"></span> 17644 </div> 17645 <div class="cursor-pointer" title="close" @click="openMessage = false"> 17646 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 17647 <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 17648 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 17649 </path> 17650 </svg> 17651 </div> 17652 </div> 17653 <div class="message mx-4 message-error success" x-show="openSuccessMessage"> 17654 <div> 17655 <span x-html="message"></span> 17656 </div> 17657 <div class="cursor-pointer" title="close" @click="openSuccessMessage = false"> 17658 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 17659 <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 17660 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 17661 </path> 17662 </svg> 17663 </div> 17664 </div> 17665 <div class="block-customer-login for_got" x-show="openForgot"> 17666 <h2 id="authenticate-customer-login" class="text-size18 font-medium text-darkblack"> 17667 Forgot Password </h2> 17668 <form class="form form-fotgotpassword" 17669 method="post" 17670 @submit.prevent="submitForgotForm();" 17671 id="fotgot-form"> 17672 <fieldset class="fieldset"> 17673 <div class="text-size14 font-normal text-black mb-4">Please enter your email address below to receive a password reset link.</div> 17674 <div class="field email required"> 17675 <label for="email_address" class="label"><span>Email</span></label> 17676 <div class="control"> 17677 <input type="email" name="email" alt="email" id="email_address" class="form-input" required 17678 value=""> 17679 </div> 17680 </div> 17681 </fieldset> 17682 <div class="actions-toolbar"> 17683 <div class="primary"> 17684 <button type="submit" class="action submit primary"><span>Reset My Password</span></button> 17685 </div> 17686 <div class="secondary ml-4 self-center"> 17687 <a class="action back cursor-pointer" 17688 @click ="openForgot = false,openLogin = true, 17689 openButtonLogin = true" 17690 >
17691 <span class="text-size14 font-medium text-black"> 17692 Back </span> 17693 </a> 17694 </div> 17695 </div> 17696 </form> 17697</div> 17698 17699 17700 17701 <div class="w-full"> 17702 <input id="g-recaptcha-response" type="hidden" value=""/> 17703 </div> 17704 <div class="block-new-customer social_login" 17705 x-show="openButtonLogin"> 17706 <h2 id="authenticate-new-customer" class="text-size18 font-semibold text-darkblack"> 17707 Log In </h2> 17708 <div class="block-content"> 17709 <div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 17710 <div class=""> 17711 <div class="sociallogin-buttons" x-ref="loginSocialButton"> 17712 <ul class="sociallogin-clearfix flex flex-wrap"> 17713 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button 17714 googleplus" title="Login with Google"> 17715 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 17716 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" 17717 data-width="630" 17718 data-height="650" 17719 x-ref="googleplus" 17720 @click="popupSocial($refs.googleplus)"> 17721 <span class="sociallogin-button-auto"> 17722 <span class="sociallogin-button-icon"> 17723 </span> 17724 <span class="sociallogin-button-text">Login with Google</span> 17725 </span> 17726 </a> 17727 </li> 17728 </ul> 17729 </div> 17730 17731 </div> 17732 <div style="clear: both;"></div> 17733 </div> 17734 </div> 17735 </div> 17736 <div class="block-customer-login" x-show="openLogin" x-data="{ show: false }"> 17737 <span class="or-label text-size14 font-normal text-darkblack"> Or</span> 17738 17739 <form class="form form-login" 17740 method="post" 17741 @submit.prevent="submitForm();" 17742 id="login-form" 17743 > 17744 <div class="fieldset login"> 17745 <div class="field email required"> 17746 <label class="label hidden" for="customer-email"> 17747 <span>Email Address</span> 17748 </label> 17749 <div class="control"> 17750 <input name="username" 17751 x-ref="customer-email" 17752 @change="errors = 0" 17753 type="email" 17754 required 17755 class="form-input input-text" id="customer-email" placeholder="Email address" 17756 > 17757 </div> 17758 </div> 17759 <div class="field password required" > 17760 <label for="pass" class="label hidden">
17761 <span>Password</span> 17762 </label> 17763 <div class="control"> 17764 <input name="password" 17765 type="password" 17766 class="form-input input-text" id="pass" placeholder="Password" 17767 required 17768 x-ref="customer-password" 17769 @change="errors = 0" 17770 > 17771 </div> 17772 </div> 17773 17774 <input name="context" type="hidden" value="checkout"/> 17775 17776 <div class="actions-toolbar flex justify-between items-center" > 17777 <div class="flex items-center"> 17778 <input type="checkbox" name="show-password" @click="showPassword()" id="show-password" value="" class="checkbox"> 17779 <label class="cursor-pointer text-size12 font-normal text-darkblack" style="margin:0;" for="show-password">Show password</label> 17780 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showPasswordForLable()" id="show-password-label" > 17781 Show Password 17782 </span> --> 17783 </div> 17784 <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="openForgot = true,openLogin = false,openButtonLogin = false"> 17785 Forgot Your Password? </span> 17786 17787 17788 </div> 17789 <div class="actions-toolbar flex justify-between items-center"> 17790 <button type="submit" class="inline-flex btn btn-primary login_btn"> 17791 Log In </button> 17792 </div> 17793 </div> 17794 </form> 17795</div> 17796
17797<script> 17798 function showPassword(){ 17799 var showPwd=document.getElementById("show-password"); 17800 var password=document.getElementById("pass"); 17801 if(showPwd.checked==true) { 17802 password.type="text"; 17803 } else { 17804 password.type="password"; 17805 } 17806 } 17807 function showPasswordForLable(){ 17808 var password=document.getElementById("pass"); 17809 if (password.type === "password") { 17810 password.type = "text"; 17811 } else { 17812 password.type = "password"; 17813 } 17814 } 17815</script>
17815 17816 <div class="block-new-customer new_customer text-center" x-show ="openCreate"> 17817 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 17818 New Customer? </h2> 17819 <div class="block-content"> 17820 <div class="actions-toolbar"> 17821 <a class="block btn btn-primary cursor-pointer text-size18 font-semibold text-custom-blue" 17822 href="https://www.flooringinc.com/customer/account/create/" > 17823 Sign Up Now </a> 17824 </div> 17825 <div class="block-new-customer"> 17826 <h3 class="text-size16 font-normal text-black"> 17827 <a class="block underline" 17828 href="https://www.flooringinc.com/pro-advantage/" 17829 > 17830 Become a Pro </a> 17831 </h3> 17832 </div> 17833 </div> 17834 </div> 17835 <div class="block-new-customer social_login margin" x-show="openButtonRegister"> 17836 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 17837 Social Register </h2> 17838 <div class="block-content"> 17839 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 17840 <div class=""> 17841 <div class="sociallogin-buttons"> 17842 <ul class="sociallogin-clearfix flex flex-wrap"> 17843 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 17844 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 17845 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" 17846 data-width="630" 17847 data-height="650" 17848 x-ref="googleplus" 17849 @click="popupSocial($refs.googleplus)"> 17850 <span class="sociallogin-button-auto"> 17851 <span class="sociallogin-button-icon"> 17852 </span> 17853 <span class="sociallogin-button-text">Register with Google</span> 17854 </span> 17855 </a> 17856 </li> 17857 </ul> 17858 </div> 17859 </div> 17860 <div style="clear: both;"></div> 17861 </div> 17862 </div> 17863 </div> 17864 </div> 17865 </div> 17866</div> 17867</section>
17868<script> 17869 var classLogin = [".checkout-container .opc-wrapper"]; 17870 var classRegister = [""]; 17871 classLogin = classLogin[0].trim().split(/\s+/); 17872 classRegister = classRegister[0].trim().split(/\s+/); 17873 if(classLogin && classLogin.length > 0 && classLogin[0]){ 17874 classLogin.forEach(element => { 17875 var classLoginElement = document.querySelector(element); 17876 var loginSocialButton = document.getElementById('add_button_login_byclass'); 17877 if (classLoginElement && loginSocialButton) { 17878 const cloneLoginSocialButton = loginSocialButton.cloneNode(true); 17879 classLoginElement.appendChild(cloneLoginSocialButton); 17880 cloneLoginSocialButton.style.display='block'; 17881 } 17882 }); 17883 } 17884 17885 if(classRegister && classRegister.length > 0 && classRegister[0]){ 17886 classRegister.forEach(element => { 17887 var classRegisterElement = document.querySelector(element); 17888 var registerSocialButton = document.getElementById('add_button_register_byclass'); 17889 if (classRegisterElement && registerSocialButton) { 17890 const cloneRegisterSocialButton = registerSocialButton.cloneNode(true); 17891 classRegisterElement.appendChild(cloneRegisterSocialButton); 17892 cloneRegisterSocialButton.style.display='block'; 17893 } 17894 }); 17895 } 17896 17897 function bssButtonSocial() { 17898 return { 17899 renderShowmore : function (element) { 17900 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 17901 for (let i = 0; i <= socialButton.length - 1; i++) { 17902 socialButton[i].style.display = 'block'; 17903 } 17904 element.querySelector('.sociallogin-showmore').style.display = 'none'; 17905 }, 17906 popupSocial: function (element) { 17907 var href = element.getAttribute('data-href'); 17908 var width = element.getAttribute('data-width'); 17909 var height = element.getAttribute('data-height'); 17910 var popup_window = null; 17911 if (!width) { 17912 width = 650; 17913 } 17914 17915 if(!height) { 17916 height = 350; 17917 } 17918 17919 var left = parseInt((window.innerWidth- width) / 2); 17920 var top = parseInt((window.innerHeight - height) / 2); 17921 17922 var params = [ 17923 'resizable=yes', 17924 'scrollbars=no', 17925 'toolbar=no', 17926 'menubar=no', 17927 'location=no', 17928 'directories=no', 17929 'status=yes', 17930 'width='+ width, 17931 'height='+ height, 17932 'left='+ left, 17933 'top='+ top 17934 ]; 17935 17936 if(popup_window) { 17937 popup_window.close(); 17938 } 17939 17940 if(href) { 17941 popup_window = window.open(href,'',params.join(',')); 17942 popup_window.focus(); 17943 17944 }else{ 17945 alert('This Login Application was not configured correctly. Please contact our customer support.'); 17946 } 17947 return false; 17948 } 17949 } 17950 } 17951 17952</script>
17952 17953 17954 17955 17956
17956<script> 17957 (() => { 17958 function changeNoCookieDomain() { 17959 const categoryKey = "marketing"; 17960 if (! prCookieConsentApi.isAllowedCategory(categoryKey)) { 17961 return; 17962 } 17963 17964 let iframes = document.querySelectorAll('iframe'), 17965 youtubeNoCookieIframes = Array.from(iframes) 17966 .filter((iframe) => iframe.src.indexOf('youtube-nocookie.com') !== -1); 17967 17968 youtubeNoCookieIframes.forEach((iframe) => { 17969 iframe.src = iframe.src.replace('youtube-nocookie.com', 'youtube.com'); 17970 }); 17971 } 17972 17973 if (prCookieConsentApi) { 17974 changeNoCookieDomain(); 17975 return; 17976 } 17977 17978 document.addEventListener('pr-cookie-consent-api:configured', changeNoCookieDomain); 17979 })(); 17980 </script>
17980 17981
17982<script> 17983 'use strict'; 17984 17985 (() => { 17986 window.addEventListener('DOMContentLoaded', () => { 17987 if (document.querySelectorAll('lite-youtube').length > 0) { 17988 const link = document.createElement('link'), 17989 script = document.createElement('script'); 17990 17991 link.rel = 'stylesheet'; 17992 link.type = 'text/css'; 17993 link.href = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fcss\u002Flite\u002Dyt\u002Dembed.min.css'; 17994 document.head.appendChild(link); 17995 17996 script.type = 'text/javascript'; 17997 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fjs\u002Flite\u002Dyt\u002Dembed.min.js'; 17998 document.head.appendChild(script); 17999 } 18000 }); 18001 })(); 18002</script>
vendor: 1 bytes, line 18002
18002
18003<script data-mfmofile="true"> 18004 document.addEventListener("DOMContentLoaded", function() { 18005 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 18006 !function (f, b, e, v, t, s) { 18007 if(f.mfytwcss)return; 18008 f.mfytwcss=1; 18009 t = b.createElement(e); 18010 t.rel = 'stylesheet'; 18011 t.type = 'text/css'; 18012 t.href = v; 18013 s = b.getElementsByTagName('HEAD')[0]; 18014 s.appendChild(t) 18015 }(window, document, 'link', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/css/youtubewidget.min.css'); 18016 } 18017 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 18018 !function (f, b, e, v, t, s) { 18019 if(f.mfytwjs)return; 18020 f.mfytwjs=1; 18021 t = b.createElement(e); 18022 t.type = 'text/javascript'; 18023 t.src = v; 18024 s = b.getElementsByTagName('HEAD')[0]; 18025 s.appendChild(t) 18026 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/iframe.min.js'); 18027 } 18028 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 18029 !function (f, b, e, v, t) { 18030 if(f.mflinkjs)return; 18031 f.mflinkjs=1; 18032 t = b.createElement(e); 18033 t.type = 'text/javascript'; 18034 t.src = v; 18035 s = b.getElementsByTagName('HEAD')[0]; 18036 s.appendChild(t) 18037 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/link.min.js'); 18038 } 18039 }); 18040</script>
18040 18041 18042 <div id="pr-gpc-notification-modal" style="display: none;"> 18043 <div class="pr-gpc-notification-wrap"> 18044 <h2>Your Opt-Out Preferences Honored</h2> 18045<p>Your browser's privacy preference (GPC) has been detected.</p> 18046<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> 18047</div> </div> 18048 18049
18049<script type="text/x-magento-init" nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 18050 { 18051 "#pr-gpc-notification-modal": { 18052 "Plumrocket_GlobalPrivacyControl/js/opt-out-notification": {} 18053 } 18054 } 18055 </script>
18055 18056 18057
18058<script> 18059 (() => { 18060 function src_default(Alpine) { 18061 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 18062 let evaluate = evaluateLater(expression); 18063 let options = { 18064 rootMargin: getRootMargin(modifiers), 18065 threshold: getThreshhold(modifiers) 18066 }; 18067 let observer = new IntersectionObserver((entries) => { 18068 entries.forEach((entry) => { 18069 if (entry.isIntersecting === (value === "leave")) 18070 return; 18071 evaluate(); 18072 modifiers.includes("once") && observer.disconnect(); 18073 }); 18074 }, options); 18075 observer.observe(el); 18076 cleanup(() => { 18077 observer.disconnect(); 18078 }); 18079 }); 18080 } 18081 function getThreshhold(modifiers) { 18082 if (modifiers.includes("full")) 18083 return 0.99; 18084 if (modifiers.includes("half")) 18085 return 0.5; 18086 if (!modifiers.includes("threshold")) 18087 return 0; 18088 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 18089 if (threshold === "100") 18090 return 1; 18091 if (threshold === "0") 18092 return 0; 18093 return Number(`.${threshold}`); 18094 } 18095 function getLengthValue(rawValue) { 18096 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 18097 return match ? match[1] + (match[2] || "px") : void 0; 18098 } 18099 function getRootMargin(modifiers) { 18100 const key = "margin"; 18101 const fallback = "0px 0px 0px 0px"; 18102 const index = modifiers.indexOf(key); 18103 if (index === -1) 18104 return fallback; 18105 let values = []; 18106 for (let i = 1; i < 5; i++) { 18107 values.push(getLengthValue(modifiers[index + i] || "")); 18108 } 18109 values = values.filter((v) => v !== void 0); 18110 return values.length ? values.join(" ").trim() : fallback; 18111 } 18112 18113 document.addEventListener("alpine:init", () => { 18114 window.Alpine.plugin(src_default); 18115 }); 18116 })(); 18117</script>
vendor: 1 bytes, line 18117
18117
18118<script> 18119 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"})) { 18120 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 18121 } 18122</script>
vendor: 1 bytes, line 18122
18122
18123<script> 18124 (function () { 18125 "use strict"; 18126 18127 const hasAlpine = new Promise(resolve => { 18128 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 18129 }); 18130 18131 const hasInteract = new Promise(resolve => { 18132 (events => { 18133 const onInteract = () => { 18134 resolve(); 18135 events.forEach(type => window.removeEventListener(type, onInteract)); 18136 } 18137 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 18138 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 18139 }); 18140 18141 const onIntersect = (el) => { 18142 return new Promise(resolve => { 18143 const observer = new IntersectionObserver(entries => { 18144 for (const entry of entries) { 18145 if (entry.isIntersecting) { 18146 observer.disconnect() 18147 resolve(); 18148 } 18149 } 18150 }, {}); 18151 observer.observe(el); 18152 }); 18153 } 18154 18155 function runComponent(el) { 18156 hasAlpine.then(() => { 18157 el.removeAttribute('x-ignore'); 18158 queueMicrotask(() => Alpine.initTree(el)); 18159 }); 18160 } 18161 18162 function initDeferredComponents() { 18163 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 18164 el.setAttribute('x-ignore', ''); 18165 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 18166 switch (deferUntil) { 18167 case 'interact': 18168 hasInteract.then(() => runComponent(el)); 18169 break; 18170 case 'intersect': 18171 onIntersect(el).then(() => runComponent(el)) 18172 break; 18173 case 'idle': 18174 window.requestIdleCallback 18175 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 18176 : setTimeout(() => runComponent(el), 4000); 18177 break; 18178 case 'eager': 18179 runComponent(el); 18180 break; 18181 default: 18182 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 18183 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 18184 } 18185 } 18186 }); 18187 } 18188 18189 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 18190 })() 18191</script>
18191 18192
18193<script type="module" 18194 src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_Theme/js/alpine3.min.js" 18195 defer 18196 crossorigin 18197></script>
vendor: 1 bytes, line 18197
18197
18198<script> 18199 'use strict'; 18200 function dispatchMessages(messages, hideAfter) { 18201 const messagesEvent = new CustomEvent("messages-loaded", { 18202 detail: { 18203 messages: messages, 18204 hideAfter: hideAfter 18205 } 18206 }); 18207 window.dispatchEvent(messagesEvent); 18208 } 18209 18210 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 18211 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 18212 } 18213 18214 (function( hyva, undefined ) { 18215 18216 hyva.initFormKey = () => { 18217 const inputSelector = 'input[name="form_key"]', 18218 formKey = hyva.getFormKey(); 18219 18220 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 18221 input.value = formKey 18222 }); 18223 } 18224 18225 hyva.initMessages = () => { 18226 try { 18227 const messages = hyva.getCookie('mage-messages'); 18228 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 18229 18230 dispatchMessages(window.mageMessages); 18231 18232 // empty `mage-messages` cookie 18233 const skipSetDomain = true; 18234 hyva.setCookie('mage-messages','', -1, skipSetDomain); 18235 18236 } catch (error) { 18237 console.warn('Error parsing Cookie Messages:', error); 18238 } 18239 } 18240 18241 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 18242 hyva.alpineInitialized(hyva.initMessages) 18243 18244 }( window.hyva = window.hyva || {} )); 18245</script>
vendor: 1 bytes, line 18245
18245
18246<script> 18247 'use strict'; 18248 { 18249 const private_content_key = 'mage-cache-storage'; 18250 const private_content_expire_key = 'mage-cache-timeout'; 18251 const private_content_version_key = 'private_content_version'; 18252 const section_data_ids_key = 'section_data_ids'; 18253 const mage_cache_session_id_key = 'mage-cache-sessid'; 18254 const last_visited_store_key = 'last_visited_store'; 18255 18256 const ttl = 3600; 18257 18258 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 18259 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 18260 } 18261 18262 function loadSectionData () { 18263 const browserStorage = hyva.getBrowserStorage(); 18264 if (!browserStorage) { 18265 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 18266 [{ 18267 type: "warning", 18268 text: "Please enable LocalStorage in your browser." 18269 }] 18270 ); 18271 return; 18272 } 18273 try { 18274 let isInvalid = false; 18275 18276 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 18277 isInvalid = true; 18278 } 18279 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 18280 18281 if (!hyva.getCookie(mage_cache_session_id_key)) { 18282 isInvalid = true; 18283 browserStorage.removeItem(private_content_key); 18284 const skipSetDomain = true; 18285 const days = false; 18286 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 18287 } 18288 18289 const cookieVersion = hyva.getCookie(private_content_version_key); 18290 const storageVersion = browserStorage.getItem(private_content_version_key); 18291 18292 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 18293 isInvalid = true; 18294 } 18295 18296 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 18297 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 18298 browserStorage.removeItem(private_content_key); 18299 } 18300 18301 if (isInvalid && cookieVersion) { 18302 fetchPrivateContent([]); 18303 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 18304 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 18305 if ( 18306 privateContent && 18307 privateContentExpires && 18308 privateContent.cart && 18309 privateContent.customer 18310 ) { 18311 dispatchPrivateContent(privateContent); 18312 } else { 18313 fetchPrivateContent([]); 18314 } 18315 } else { 18316 if (document.getElementById('default-section-data')) { 18317 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 18318 dispatchPrivateContent(privateContent); 18319 } else { 18320 dispatchPrivateContent({}); 18321 } 18322 } 18323 18324 } catch (error) { 18325 console.warn('Error retrieving Private Content:', error); 18326 } 18327 } 18328 18329 hyva.alpineInitialized(loadSectionData) 18330 window.addEventListener('reload-customer-section-data', loadSectionData); 18331 18332 function dispatchPrivateContent(data) { 18333 const privateContentEvent = new CustomEvent("private-content-loaded", { 18334 detail: { 18335 data: data 18336 } 18337 }); 18338 window.dispatchEvent(privateContentEvent); 18339 } 18340 18341 function fetchPrivateContent(sections) { 18342 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 18343 method: 'GET', 18344 headers: { 18345 'Content-Type': 'application/json', 18346 'X-Requested-With': 'XMLHttpRequest' 18347 } 18348 }) 18349 .then(response => response.json()) 18350 .then( 18351 data => { 18352 if (data) { 18353 try { 18354 const browserStorage = hyva.getBrowserStorage(); 18355 18356 // merge new data preserving non-invalidated sections 18357 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 18358 18359 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 18360 delete oldSectionData['checkout-data']; 18361 } 18362 const newSectionData = Object.assign(oldSectionData, data); 18363 18364 dispatchPrivateContent(newSectionData); 18365 18366 // don't persist messages, they've been dispatched already 18367 if (newSectionData.messages && newSectionData.messages.messages ) { 18368 newSectionData.messages.messages = []; 18369 } 18370 18371 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 18372 18373 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 18374 browserStorage.setItem(private_content_expire_key, expiresAt); 18375 18376 const newCookieVersion = hyva.getCookie(private_content_version_key); 18377 browserStorage.setItem(private_content_version_key, newCookieVersion); 18378 18379 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 18380 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 18381 hyva.setCookie( 18382 section_data_ids_key, 18383 JSON.stringify( 18384 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 18385 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 18386 return sectionDataIds; 18387 }, {}) 18388 ), 18389 false, 18390 true 18391 ); 18392 } catch (error) { 18393 console.warn("Couldn't store privateContent", error); 18394 } 18395 } 18396 } 18397 ); 18398 } 18399 } 18400</script>
vendor: 1 bytes, line 18400
18400
18401<script> 18402 (() => { 18403 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 18404 })() 18405</script>
vendor: 1 bytes, line 18405
18405
18406<script> 18407 (events => { 18408 const dispatchUserInteractionEvent = () => { 18409 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 18410 window.dispatchEvent(new Event('init-external-scripts')) 18411 }; 18412 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 18413 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 18414</script>
18414 18415<style> 18416[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: -2px 0 0 0 !important;display: flex !important;} 18417@media(max-width: 767px){ 18418[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: 4px 0 0 0 !important;} 18419} 18420@media screen and (min-width: 768px) and (max-width: 1440px) { 18421 .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 18px !important;} 18422 .product-item .product-info .price-box .price-container .price-wrapper{font-size: 18px;} 18423} 18424@media(max-width: 1550px){ 18425.products__recommendations .product-slider .glider-track .recommended-slider-item{min-width:auto;} 18426} 18427.page-products .spot-light .catergory_slider_content{border-radius: 10px;} 18428.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;} 18429@media(max-width: 767px){ 18430.page-products .spot-light .catergory_slider_content .product-info{padding-left: 0 !important;padding-right: 0px !important;} 18431} 18432.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; 18433} 18434.page-products .spot-light .spot-bottom .order_btn:hover{background: #15324c !important;transition-duration: .15s;} 18435.page-products .spot-light .catergory_slider_content .color_counts .color_count{font-size: 12px;color: rgb(127 127 127 / var(--tw-text-opacity)} 18436 18437 18438.category-top-filter .pagebuilder-column h3 span, .category-top-filter .pagebuilder-column h3 span a, .category-top-filter .pagebuilder-column h3 a{display: block;} 18439.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label {display: block;} 18440.catalog-product-view .product-info-main .color_swatches .swatch-attribute-options .select_none.swatch-option{display: none;} 18441@media(min-width: 768px){ 18442 .checkout-cart-index #shopping-cart-table .cart.item .item-info td.col.item{flex-wrap: nowrap;} 18443} 18444@media(min-width: 1500px){ 18445 .checkout-cart-index #shopping-cart-table .col.qty{min-width: 169px;max-width: 169px;width: 169px;} 18446} 18447@media only screen and (max-width: 1340px) and (min-width: 1000px){ 18448 .checkout-cart-index #maincontent #shopping-cart-table .product-item-details{max-width: 40%;} 18449} 18450</style>
18451<script> 18452document.addEventListener('DOMContentLoaded', function() { 18453 if (window.innerWidth <= 767) { 18454 document.querySelectorAll('.page-with-filter.page-products .sidebar .filter-content .card .filter-options-title').forEach(function(title) { 18455 const span = title.querySelector('span'); 18456 if (span && span.textContent.trim().includes('Revenue Ranking')) { 18457 const parentCard = title.closest('.card'); 18458 if (parentCard && !parentCard.id) { 18459 parentCard.id = 'filter-id-revenue_ranking'; 18460 } 18461 } 18462 }); 18463 } 18464}); 18465</script>
18465 18466<style> 18467.page-with-filter.page-products .sidebar .filter-content .card#filter-id-revenue_ranking{display: none;} 18468.checkout-index-index .kl_sms_phone_number-field{margin-bottom: 20px;} 18469@media(min-width: 768px){ 18470 .catalog-product-view .modal.order-free-sample-popup .right .order-free-sample-prod-info .product-info:after{right: -10px;top: -10px;} 18471} 18472@media(max-width: 767px){ 18473 .catalog-product-view .order-free-sample-popup .border .product-info:after{left: 35px;} 18474} 18475.checkout-index-index .notification4 {display: none} 18476 #related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 18477</style>
18478<script> 18479 function initConfigurableOptions(productId, optionConfig) { 18480 18481 function findPathParam(key) { 18482 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 18483 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 18484 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 18485 for (let i = 0; i < pathParts.length; i += 2) { 18486 if (pathParts[i] === key && pathParts.length > i) { 18487 return pathParts[i + 1]; 18488 } 18489 } 18490 } 18491 18492 return { 18493 optionConfig, 18494 productId, 18495 attributeCode:'', 18496 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 18497 ssrGalleryChildId: 0, 18498 allowedAttributeOptions: [], 18499 selectedValues: [], 18500 init() { 18501 this.checkIsFirst(); 18502 this.findAllowedAttributeOptions(); 18503 this.$nextTick(() => { 18504 if (typeof this.optionConfig.defaultValues === 'object') { 18505 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 18506 this.changeOption(optionId, value + ''); 18507 } 18508 } 18509 }); 18510 }, 18511 checkIsFirst() { 18512 this.isLoadedFirst = true; 18513 setTimeout(() => { 18514 this.isLoadedFirst = false; 18515 }, "3000"); 18516 }, 18517 findSimpleIndex() { 18518 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 18519 }, 18520 calculateSimpleIndexForPartialSelection(selectedValues) { 18521 if (selectedValues.length === 0) return 0; 18522 let productIndexIds = Object.keys(this.optionConfig.index); 18523 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 18524 const productsWithAttributeMatch = selectedValues[attribute] 18525 ? productIndexIds.filter((productIndex) => { 18526 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 18527 }) 18528 : []; 18529 18530 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 18531 }) 18532 return productIndexIds[0]; 18533 }, 18534 calculateSimpleIndexForFullSelection(selectedValues) { 18535 const productIndexes = this.optionConfig.index; 18536 return Object.keys(productIndexes).find(productIndex => { 18537 const productCandidateOptions = productIndexes[productIndex]; 18538 18539 for (const productOption in productCandidateOptions) { 18540 if ( 18541 ! selectedValues[productOption] || 18542 selectedValues[productOption] !== productCandidateOptions[productOption] 18543 ) { 18544 return false; 18545 } 18546 } 18547 return productIndex; 18548 }); 18549 }, 18550 productIndex: 0, 18551 findAllowedAttributeOptions() { 18552 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 18553 }, 18554 calculateAllowedAttributeOptions(selectedValues) { 18555 const allAttributes = this.optionConfig.attributes; 18556 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 18557 return a.position - b.position 18558 }); 18559 18560 const selectionWithoutAttr = attrId => { 18561 return Object.keys(selectedValues).reduce((acc, id) => { 18562 if (id !== attrId) acc[id] = selectedValues[id]; 18563 return acc; 18564 }, {}) 18565 } 18566 18567 const newAllowedAttributeOptions = []; 18568 18569 allAttributesSorted.forEach(attribute => { 18570 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr(attribute.id)); 18571 if (attribute?.code === 'incstores_pim_color_axis') { 18572 newAllowedAttributeOptions[attribute.id] = 18573 allAttributes[attribute.id].options 18574 .filter(option => { 18575 return !!option.products.find(product => availableIndexes.includes(product)); 18576 }) 18577 .sort((a, b) => {
18578 const cheapestA = this.findCheapestProductForPartialSelectionForSort({ 18579 ...selectedValues, 18580 [attribute.id]: a.id 18581 }); 18582 18583 const cheapestB = this.findCheapestProductForPartialSelectionForSort({ 18584 ...selectedValues, 18585 [attribute.id]: b.id 18586 }); 18587 18588 if (!cheapestA && !cheapestB) return 0; 18589 if (!cheapestA) return 1; 18590 if (!cheapestB) return -1; 18591 18592 const priceA = this.optionConfig.optionPrices[cheapestA].customPrice.amount; 18593 const priceB = this.optionConfig.optionPrices[cheapestB].customPrice.amount; 18594 18595 return priceA - priceB; 18596 }); 18597 } else { 18598 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 18599 return !!option.products.find(product => { 18600 //====== For Custom Design link - fetch child product id on page load START ====== 18601 if(document.querySelector('input[name="selected_option_child_id"]')){ 18602 if(document.querySelector('input[name="selected_option_child_id"]').value == ''){ 18603 document.querySelector('input[name="selected_option_child_id"]').value = product; 18604 } 18605 } 18606 //====== For Custom Design link - fetch child product id on page load END ====== 18607 return availableIndexes.includes(product); 18608 }) 18609 }); 18610 } 18611 }); 18612 return newAllowedAttributeOptions; 18613 }, 18614 calculateAvailableProductIndexes(selectedOptions) { 18615 if (Object.keys(selectedOptions).length === 0) { 18616 return Object.keys(this.optionConfig.index); 18617 } 18618 18619 const selectedIds = Object.keys(selectedOptions); 18620 if (Object.values(this.optionConfig.salable || {}).length) { 18621 const selectedOptionIndexes = selectedIds.map(attrId => { 18622 const optionValue = selectedOptions[attrId]; 18623 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 18624 }) 18625 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 18626 return acc.filter(index => optionIndexes.includes(index)); 18627 }); 18628 } else { 18629 const productIndexes = this.optionConfig.index; 18630 return Object.keys(productIndexes).filter(index => { 18631 return selectedIds.find( 18632 attrId => productIndexes[index][attrId] === `${selectedOptions[attrId]}` 18633 ) 18634 }); 18635 } 18636 }, 18637 findAttributeByOptionId(optionId) { 18638 for (const attributeId in this.optionConfig.attributes) { 18639 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 18640 if (attributeOptions.find(option => option.id === optionId)) { 18641 return attributeId; 18642 } 18643 } 18644 }, 18645 getAllowedAttributeOptions(attributeId) { 18646 return this.allowedAttributeOptions[attributeId] || [] 18647 }, 18648 getProductIdsForOption(option) { 18649 const attributeId = this.findAttributeByOptionId(option.id); 18650 const allOptions = this.optionConfig.attributes[attributeId]; 18651 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 18652 return opt && opt.products 18653 ? opt.products 18654 : []; 18655 }, 18656 findProductIdsForPartialSelection(optionSelection) { 18657 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 18658 const newCandidates = this.getProductIdsForOption({id: optionId}); 18659 return candidates === null 18660 ? newCandidates 18661 : candidates.filter(productId => newCandidates.includes(productId)); 18662 }, null); 18663 return candidateProducts || []; 18664 },
18665 findCheapestProductForPartialSelection(optionSelection) { 18666 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 18667 return candidateProducts.reduce((cheapest, simpleIdx) => { 18668 // in the first iteration we start with simpleIdx as the currently cheapest product 18669 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 18670 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 18671 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 18672 ? simpleIdx 18673 : cheapest; 18674 }, 0) 18675 }, 18676 findCheapestProductForPartialSelectionForSort(optionSelection) { 18677 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 18678 return candidateProducts.reduce((cheapest, simpleIdx) => { 18679 // in the first iteration we start with simpleIdx as the currently cheapest product 18680 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 18681 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].customPrice.amount; 18682 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].customPrice.amount 18683 ? simpleIdx 18684 : cheapest; 18685 }, 0) 18686 }, 18687 findProductIdToUseForOptionPrice(option) { 18688 // try to find a product for a complete selection 18689 const attributeId = this.findAttributeByOptionId(option.id); 18690 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 18691 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 18692 // if there is no complete selection, use the cheapest product for the option 18693 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 18694 }, 18695 getAttributeOptionLabel(option) { 18696 const optionProduct = this.findProductIdToUseForOptionPrice(option); 18697 if ((! optionProduct) || (optionProduct === this.productIndex)) { 18698 return option.label; 18699 } 18700 18701 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 18702 18703 if (this.optionConfig.optionPrices[optionProduct]) { 18704 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 18705 if (optionPrice !== currentPrice){ 18706 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 18707 } 18708 } 18709 return option.label; 18710 }, 18711 getOptionPriceAdjustmentBasePrice() { 18712 if (this.optionConfig.optionPrices[this.productIndex]) { 18713 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 18714 } 18715 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 18716 return this.optionConfig.optionPrices[cheapestForSelection] 18717 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 18718 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 18719 }, 18720 changeOption(optionId, value) { 18721 if (value !== '' 18722 && typeof this.optionIsEnabled === 'function' 18723 && !this.optionIsEnabled(optionId, value)) { 18724 return; 18725 } 18726 var checkbox = document.getElementById('overage_percent'); 18727 if(checkbox){ 18728 checkbox.checked = true; // Check the checkbox 18729 } 18730 var galleryImgOpacity = document.querySelector('#gallery .prod_slider img.first-image'); 18731 if (galleryImgOpacity) { 18732 galleryImgOpacity.classList.add('opacity-0'); 18733 } 18734 if (value === '') { 18735 // create new array so the length property is reset if no option is selected (avoiding delete) 18736 this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => { 18737 if (opt !== optionId) { 18738 newSelection[opt] = val; 18739 } 18740 return newSelection; 18741 }, []); 18742 } else { 18743 const currentUrl = window.location.href; 18744 // Create a URL object 18745 const url = new URL(currentUrl); 18746 // Use searchParams to get the color option 18747 const colorOption = url.searchParams.get('color-option'); 18748 const variantOption = url.searchParams.get('variant-option'); 18749 if(colorOption!==null && variantOption!==null){ 18750 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 18751 { 18752 this.selectedValues[optionId] = colorOption; 18753 } 18754 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 18755 { 18756 this.selectedValues[optionId] = variantOption; 18757 } 18758 } 18759 else if(colorOption!==null){ 18760 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 18761 { 18762 this.selectedValues[optionId] = colorOption; 18763 } 18764 18765 } 18766 else if(this.isLoadedFirst == true && (0 > 0 || 0 > 0)) 18767 { 18768 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 18769 { 18770 this.selectedValues[optionId] = '0'; 18771 } 18772 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 18773 { 18774 this.selectedValues[optionId] = '0'; 18775 } 18776 } 18777 else 18778 { 18779 this.selectedValues[optionId] = value; 18780 } 18781 18782 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 18783 if (addToCartButton) { 18784 if (!addToCartButton.classList.contains('pointer-events-none')) { 18785 addToCartButton.classList.add('pointer-events-none'); 18786 addToCartButton.classList.add('opacity-50'); 18787 } 18788 } 18789 18790 var productId = this.findProductIdsForPartialSelection(this.selectedValues)[0]; 18791 var baseUrl = "https://www.flooringinc.com/"; 18792 18793 if (typeof productId === 'undefined') { 18794 let attributeCode = this.optionConfig.attributes[optionId]['code']; 18795 setTimeout(() => { 18796 if (attributeCode == 'incstores_pim_color_axis') { 18797 if (typeof this.autoSelectCompatibleOtherOption === 'function') { 18798 this.autoSelectCompatibleOtherOption(optionId); 18799 } 18800 } else if (attributeCode == 'incstores_pim_variant_axis' 18801 || attributeCode == 'product_option') { 18802 if (typeof this.autoSelectCompatibleColorOption === 'function') { 18803 this.autoSelectCompatibleColorOption(optionId); 18804 } 18805 } 18806 }, 300); 18807 } else { 18808 var fetchUrl = baseUrl+'customattribute/index/index/productId/'+productId; 18809 18810 fetch(fetchUrl) 18811 .then(response => response.json()) 18812 .then(data => { 18813 18814 if (document.getElementById('dimensions-attributes')) { 18815 document.getElementById('dimensions-attributes').innerHTML= data.detailsHtml.dimensionsHtml; 18816 } 18817 18818 if (document.getElementById('details-attributes')) { 18819 document.getElementById('details-attributes').innerHTML= data.detailsHtml.productDetails; 18820 } 18821 18822 if (document.getElementById('ship-to-text')) { 18823 document.getElementById('ship-to-text').value= data.shipToText; 18824 } 18825 18826 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 18827 if (addToCartButton) { 18828 addToCartButton.classList.remove('pointer-events-none'); 18829 addToCartButton.classList.remove('opacity-50'); 18830 } 18831 }) 18832 .catch(error => { 18833 console.log(error); 18834 }); 18835 } 18836 18837 } 18838 this.findSimpleIndex(); 18839 this.findAllowedAttributeOptions(); 18840 this.updateCalculatorType();// custom coding 18841 this.updateMinRollcut();// custom coding 18842 this.updateMaxRollLengthRestriction();// custom coding 18843 this.updateTileSizeArea(); // custom coding 18844 this.updateExactWidth(); // custom coding 18845 this.updateExactLength(); // custom coding 18846 this.updateExactHeight(); // custom coding 18847 this.updateCoveragePerCase(); // custom coding 18848 this.updateTileMinQty(); // custom coding 18849 this.updateShippingDetails(); // custom coding 18850 this.updatePrices(); 18851 this.updateSquareFootage(); 18852 18853 //If the page loads first time it will stop the gallery change, so configurable product image will display 18854 if (!this.isLoadedFirst) { 18855 this.updateGallery(); 18856 } 18857 18858 //====== For Custom Design link - fetch child product id when option clicked START ====== 18859 if(document.querySelector('input[name="selected_option_child_id"]')){ 18860 document.querySelector('input[name="selected_option_child_id"]').value = this.productIndex; 18861 } 18862 if(document.querySelector('input[name="custom_length"]') && document.getElementById('roll_length')){ 18863 document.querySelector('input[name="custom_length"]').value = document.getElementById('roll_length').value; 18864 } 18865 //====== For Custom Design link - fetch child product id when option clicked END ====== 18866 window.dispatchEvent( 18867 new CustomEvent( 18868 'configurable-selection-changed', 18869 { 18870 detail: { 18871 productId: this.productId, 18872 optionId: optionId, 18873 value: value, 18874 productIndex: this.productIndex, 18875 selectedValues: this.selectedValues, 18876 attributeCode: this.optionConfig.attributes[optionId]['code'], 18877 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 18878 } 18879 } 18880 ) 18881 ); 18882 18883 /* =============================== disabled product option checking & remove START =============== */ 18884 if (!this.optionConfig?.ship_region_enabled 18885 && document.querySelector('.swatch-attribute .selectOptionColor') 18886 ) { 18887 var quickship_lebel_should_show; 18888 var quickship_active_color_option_exist = 0; 18889 setTimeout(() => { 18890 document.querySelectorAll('.swatch-attribute .selectOptionColor').forEach(function(option_box) { 18891 if (!option_box.querySelector('div, label')) { 18892 option_box.remove(); 18893 } 18894 }); 18895 18896 }, 300); 18897 } 18898 /* =============================== disabled product option checking & remove END =============== */ 18899 18900 /* ========== remove validation when click on available color start =============== */ 18901 if(document.querySelector('.normal_color_swatch_option .selectOptionColor') ){ 18902 setTimeout(() => { 18903 const colorBoxes = document.querySelectorAll( 18904 '.normal_color_swatch_option .selectOptionColor' 18905 ); 18906 var colorNotAvailable = 0; 18907 const colorerrorDiv = document.getElementById('normal-color-swatch-option-error-msg'); 18908
18909 colorBoxes.forEach((colorBox) => { 18910 if (colorBox.querySelector('.select_none label.checked')) { 18911 colorNotAvailable = 1; 18912 } 18913 }); 18914 if (!colorNotAvailable){ 18915 colorerrorDiv.textContent = ''; 18916 colorerrorDiv.style.display = 'none'; 18917 } 18918 18919 }, 300); 18920 } 18921 /* ========== remove validation when click on available color end =============== */ 18922 18923 /* =============================== color label show / hide if color option not showing END =============== */ 18924 18925 /* =============================== other label show / hide if the option not showing START =============== */ 18926 if (typeof this.syncOtherSwatchOptionVisibility === 'function') { 18927 this.syncOtherSwatchOptionVisibility(); 18928 } else { 18929 const swatchAttribute = document.querySelector('.swatch-attribute.other_swatch_option'); 18930 if (swatchAttribute) { 18931 setTimeout(() => { 18932 const selectOptionColors = swatchAttribute.querySelectorAll('.selectOptionColor'); 18933 if (selectOptionColors.length > 1) { 18934 swatchAttribute.style.display = 'block'; 18935 } else { 18936 swatchAttribute.style.display = 'none'; 18937 } 18938 }, 300); 18939 } 18940 } 18941 /* =============================== other label show / hide if the option not showing END =============== */ 18942 18943 }, 18944 calculateIsMinimalPrice() { 18945 return ( 18946 this.selectedValues.filter(value => !!value).length < 18947 Object.keys(this.optionConfig.attributes).length 18948 ); 18949 }, 18950 updatePrices() { 18951 const value = this.productIndex ? 18952 this.optionConfig.optionPrices[this.productIndex] : 18953 this.optionConfig.prices; 18954 18955 window.dispatchEvent( 18956 new CustomEvent( 18957 "update-prices-" + this.productId, 18958 { 18959 detail: Object.assign( 18960 value, 18961 { 18962 isMinimalPrice: this.calculateIsMinimalPrice(), 18963 calculatorType: this.optionConfig?.calculator_type?.[this.productIndex] ?? '', 18964 getIncstoresPimCoverage: this.optionConfig?.coverage_per_case?.[this.productIndex] ?? '', 18965 unitOfMeasure: this.optionConfig?.unit_of_measure?.[this.productIndex] ?? '', 18966 altUnitOfMeasure: this.optionConfig?.alt_unit_of_measure?.[this.productIndex] ?? 'sqft', 18967 availableQuantity: this.optionConfig?.available_quantity?.[this.productIndex] ?? '', 18968 } 18969 ) 18970 } 18971 ) 18972 ); 18973 setTimeout(() => { 18974 var calculatorType = this.optionConfig.calculator_type[this.productIndex]; 18975 var priceElement = document.querySelector('div.items-baseline .final-price .price'); 18976 18977 if (priceElement && calculatorType != 'none' && calculatorType != 'pre_cut_roll') { 18978 var customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 18979 let priceLabelElement = document.querySelector('.final-price .price-label'); 18980 var priceLabel = ""; 18981 18982 if (priceLabelElement) { 18983 priceLabel = priceLabelElement.textContent.trim(); 18984 } 18985 18986 document.querySelectorAll('.display-option-price').forEach(el => { 18987 el.textContent = "("+customOptionPrice+priceLabel+")"; 18988 }); 18989 } else if (calculatorType == 'none') { 18990 //None type 18991 var priceElement = document.querySelector('.none .final-price .price'); 18992 var customOptionPrice = ""; 18993 18994 if (priceElement) { 18995 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 18996 } 18997 document.querySelectorAll('.display-option-price').forEach(el => { 18998 el.textContent = "("+customOptionPrice+")"; 18999 }); 19000 } else if (calculatorType == 'pre_cut_roll') { 19001 let priceLabelElement = document.querySelector('.final-price .price-label'); 19002 var priceLabel = ""; 19003 19004 if (priceLabelElement) { 19005 priceLabel = priceLabelElement.textContent.trim(); 19006 } 19007 var priceElement = document.querySelector('.pre_cut_roll .final-price .price'); 19008 var customOptionPrice = ""; 19009 19010 if (priceElement) { 19011 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 19012 } 19013 document.querySelectorAll('.display-option-price').forEach(el => { 19014 el.textContent = "("+customOptionPrice+priceLabel+")"; 19015 }); 19016 } 19017 }, "500"); 19018 }, 19019 updateTileSizeArea() { 19020 const overage_percent = this.optionConfig.overage_percent[this.productIndex]; 19021 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 19022 const exact_width = this.optionConfig.exact_width[this.productIndex]; 19023 const exact_length = this.optionConfig.exact_length[this.productIndex]; 19024 window.dispatchEvent( 19025 new CustomEvent( 19026 "update-tile-size-area-" + this.productId, 19027 { 19028 detail: { 19029 overage_percent: overage_percent, 19030 coverage_per_case: coverage_per_case, 19031 exact_width: exact_width, 19032 exact_length: exact_length, 19033 calculator_type: this.optionConfig.calculator_type[this.productIndex], 19034 } 19035 } 19036 ) 19037 ); 19038 }, 19039 updateExactWidth() { 19040 const exact_width = this.optionConfig.exact_width[this.productIndex]; 19041 window.dispatchEvent( 19042 new CustomEvent( 19043 "update-exact-width-" + this.productId, 19044 {detail: exact_width} 19045 ) 19046 ); 19047 }, 19048 updateExactLength() { 19049 const exact_length = this.optionConfig.exact_length[this.productIndex]; 19050 window.dispatchEvent( 19051 new CustomEvent(
19052 "update-exact-length-" + this.productId, 19053 {detail: exact_length} 19054 ) 19055 ); 19056 }, 19057 updateExactHeight() { 19058 const exact_height = this.optionConfig.exact_height[this.productIndex]; 19059 window.dispatchEvent( 19060 new CustomEvent( 19061 "update-exact-height-" + this.productId, 19062 {detail: exact_height} 19063 ) 19064 ); 19065 }, 19066 updateCoveragePerCase() { 19067 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 19068 //const tile_size_area = ""; 19069 window.dispatchEvent( 19070 new CustomEvent( 19071 "update-coverage-per-case-" + this.productId, 19072 {detail: coverage_per_case} 19073 ) 19074 ); 19075 }, 19076 updateTileMinQty() { 19077 const min_tile_quantity = this.optionConfig.min_tile_quantity[this.productIndex]; 19078 window.dispatchEvent( 19079 new CustomEvent( 19080 "update-min-tile-quantity-" + this.productId, 19081 {detail: min_tile_quantity} 19082 ) 19083 ); 19084 }, 19085 getAttributeIdByCode(attributeCode) { 19086 let attributes = this.optionConfig.attributes; 19087 19088 for (let id in attributes) { 19089 if (attributes[id].code === attributeCode) { 19090 return id; 19091 } 19092 } 19093 19094 return null; 19095 }, 19096 updateCalculatorType() { 19097 const has_corner_border_center = this.optionConfig.has_corner_border_center[this.productIndex]; 19098 const calculator_type = this.optionConfig.calculator_type[this.productIndex]; 19099 if(calculator_type == 'sqft' && has_corner_border_center !=1){ 19100 var cbcelements = document.querySelectorAll('.cbc'); 19101 cbcelements.forEach(function(element) { 19102 element.style.display = 'none'; 19103 }); 19104 var noneelements = document.querySelectorAll('.none'); 19105 noneelements.forEach(function(element) { 19106 element.style.display = 'none'; 19107 }); 19108 var rollelements = document.querySelectorAll('.roll'); 19109 rollelements.forEach(function(element) { 19110 element.style.display = 'none'; 19111 }); 19112 var cbcelements = document.querySelectorAll('.case'); 19113 cbcelements.forEach(function(element) { 19114 element.style.display = 'none'; 19115 }); 19116 var elements = document.querySelectorAll('.sqft'); 19117 elements.forEach(function(element) { 19118 element.style.display = 'block'; 19119 }); 19120 19121 var elements = document.querySelectorAll('.pre_cut_roll'); 19122 elements.forEach(function(element) { 19123 element.style.display = 'none'; 19124 }); 19125 const button = document.getElementById("product-addtocart-button-fake"); 19126 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 19127 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 19128 } 19129 } else if(calculator_type == 'sqft' && has_corner_border_center ==1){ 19130 var sqftelements = document.querySelectorAll('.sqft'); 19131 sqftelements.forEach(function(element) { 19132 element.style.display = 'none'; 19133 }); 19134 var caseelements = document.querySelectorAll('.case'); 19135 caseelements.forEach(function(element) { 19136 element.style.display = 'none'; 19137 }); 19138 var rollelements = document.querySelectorAll('.roll');
19139 rollelements.forEach(function(element) { 19140 element.style.display = 'none'; 19141 }); 19142 var noneelements = document.querySelectorAll('.none'); 19143 noneelements.forEach(function(element) { 19144 element.style.display = 'none'; 19145 }); 19146 var elements = document.querySelectorAll('.cbc'); 19147 elements.forEach(function(element) { 19148 element.style.display = 'block'; 19149 }); 19150 var elements = document.querySelectorAll('.price-details .sqft'); 19151 elements.forEach(function(element) { 19152 element.style.display = 'none'; 19153 }); 19154 19155 var elements = document.querySelectorAll('.pre_cut_roll'); 19156 elements.forEach(function(element) { 19157 element.style.display = 'none'; 19158 }); 19159 const button = document.getElementById("product-addtocart-button-fake"); 19160 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 19161 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 19162 } 19163 }else if(calculator_type == 'case'){ 19164 var sqftelements = document.querySelectorAll('.sqft'); 19165 sqftelements.forEach(function(element) { 19166 element.style.display = 'none'; 19167 }); 19168 var cbcelements = document.querySelectorAll('.cbc'); 19169 cbcelements.forEach(function(element) { 19170 element.style.display = 'none'; 19171 }); 19172 var noneelements = document.querySelectorAll('.none'); 19173 noneelements.forEach(function(element) { 19174 element.style.display = 'none'; 19175 }); 19176 var rollelements = document.querySelectorAll('.roll'); 19177 rollelements.forEach(function(element) { 19178 element.style.display = 'none'; 19179 }); 19180 var elements = document.querySelectorAll('.case'); 19181 elements.forEach(function(element) { 19182 element.style.display = 'block'; 19183 }); 19184 19185 var elements = document.querySelectorAll('.pre_cut_roll'); 19186 elements.forEach(function(element) { 19187 element.style.display = 'none'; 19188 }); 19189 const button = document.getElementById("product-addtocart-button-fake"); 19190 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 19191 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 19192 } 19193 } else if(calculator_type == 'roll'){ 19194 var sqftelements = document.querySelectorAll('.sqft'); 19195 sqftelements.forEach(function(element) { 19196 element.style.display = 'none'; 19197 }); 19198 var cbcelements = document.querySelectorAll('.cbc'); 19199 cbcelements.forEach(function(element) { 19200 element.style.display = 'none'; 19201 }); 19202 var caseelements = document.querySelectorAll('.case'); 19203 caseelements.forEach(function(element) { 19204 element.style.display = 'none'; 19205 }); 19206 var noneelements = document.querySelectorAll('.none'); 19207 noneelements.forEach(function(element) { 19208 element.style.display = 'none'; 19209 }); 19210 var elements = document.querySelectorAll('.roll'); 19211 elements.forEach(function(element) { 19212 element.style.display = 'block'; 19213 }); 19214 const button = document.getElementById("product-addtocart-button-fake"); 19215 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 19216 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 19217 } 19218 19219 var elements = document.querySelectorAll('.pre_cut_roll');
19220 elements.forEach(function(element) { 19221 element.style.display = 'none'; 19222 }); 19223 } else if(calculator_type == 'pre_cut_roll'){ 19224 var sqftelements = document.querySelectorAll('.sqft'); 19225 sqftelements.forEach(function(element) { 19226 element.style.display = 'none'; 19227 }); 19228 var cbcelements = document.querySelectorAll('.cbc'); 19229 cbcelements.forEach(function(element) { 19230 element.style.display = 'none'; 19231 }); 19232 var caseelements = document.querySelectorAll('.case'); 19233 caseelements.forEach(function(element) { 19234 element.style.display = 'none'; 19235 }); 19236 var noneelements = document.querySelectorAll('.none'); 19237 noneelements.forEach(function(element) { 19238 element.style.display = 'none'; 19239 }); 19240 var elements = document.querySelectorAll('.roll'); 19241 elements.forEach(function(element) { 19242 element.style.display = 'none'; 19243 }); 19244 var elements = document.querySelectorAll('.pre_cut_roll'); 19245 elements.forEach(function(element) { 19246 element.style.display = 'block'; 19247 }); 19248 const button = document.getElementById("product-addtocart-button-fake"); 19249 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickforPreCutRoll") { 19250 button.setAttribute("data-flooring-handler", "addToCartClickforPreCutRoll"); 19251 } 19252 } else { 19253 var sqftelements = document.querySelectorAll('.sqft'); 19254 sqftelements.forEach(function(element) { 19255 element.style.display = 'none'; 19256 }); 19257 var cbcelements = document.querySelectorAll('.cbc'); 19258 cbcelements.forEach(function(element) { 19259 element.style.display = 'none'; 19260 }); 19261 var caseelements = document.querySelectorAll('.case'); 19262 caseelements.forEach(function(element) { 19263 element.style.display = 'none'; 19264 }); 19265 var rollelements = document.querySelectorAll('.roll'); 19266 rollelements.forEach(function(element) { 19267 element.style.display = 'none'; 19268 }); 19269 var cbcelements = document.querySelectorAll('.case'); 19270 cbcelements.forEach(function(element) { 19271 element.style.display = 'none'; 19272 }); 19273 var elements = document.querySelectorAll('.none'); 19274 elements.forEach(function(element) { 19275 element.style.display = 'block'; 19276 }); 19277 const noneButton = document.getElementById("product-addtocart-button-fake"); 19278 if (noneButton && noneButton.getAttribute("data-flooring-handler") !== "addToCartClickforNone") { 19279 noneButton.setAttribute("data-flooring-handler", "addToCartClickforNone"); 19280 } 19281 19282 var elements = document.querySelectorAll('.pre_cut_roll'); 19283 elements.forEach(function(element) { 19284 element.style.display = 'none'; 19285 }); 19286 } 19287 }, 19288 updateMinRollcut() { 19289 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 19290 var exactlength = ''; 19291 window.dispatchEvent( 19292 new CustomEvent( 19293 "update-min-rollcut-" + this.productId, 19294 {detail: min_rollcut} 19295 ) 19296 ); 19297 }, 19298 19299 updateMaxRollLengthRestriction() { 19300 const max_roll_length_restriction = this.optionConfig.max_roll_length_restriction[this.productIndex]; 19301 const exact_width = this.optionConfig.exact_width[this.productIndex]; 19302 const exact_length = this.optionConfig.exact_length[this.productIndex]; 19303 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 19304 19305 window.dispatchEvent( 19306 new CustomEvent( 19307 "update-max-roll-length-restriction-" + this.productId, 19308 { 19309 detail: { 19310 max_roll_length_restriction: max_roll_length_restriction, 19311 min_rollcut: min_rollcut, 19312 exact_width: exact_width, 19313 exact_length: exact_length, 19314 } 19315 } 19316 ) 19317 ); 19318 }, 19319 updateShippingDetails() { 19320 const pdp_shipping_text = this.optionConfig.pdp_shipping_text[this.productIndex]; 19321 const expected_days_ship = this.optionConfig.expected_days_ship[this.productIndex]; 19322 window.dispatchEvent( 19323 new CustomEvent( 19324 "update-shipping-details-" + this.productId, 19325 { 19326 detail: { 19327 pdp_shipping_text: pdp_shipping_text, 19328 expected_days_ship: expected_days_ship, 19329 } 19330 } 19331 ) 19332 ); 19333 }, 19334 updateGallery () { 19335 if (this.isLoadedFirst && this.ssrGalleryChildId > 0) { 19336 return; 19337 } 19338 19339 if (this.productIndex) { 19340 const images = this.optionConfig.images[this.productIndex]; 19341 images && window.dispatchEvent(new CustomEvent( 19342 "update-gallery", 19343 { detail: this.sortImagesByPosition(images) } 19344 )); 19345 } else { 19346 window.dispatchEvent(new Event("reset-gallery")); 19347 } 19348 }, 19349 updateSquareFootage () { 19350 let squareFootageElement = document.getElementsByName('square_footage'); 19351 19352 if (squareFootageElement.length > 0) { 19353 var squareFootage = squareFootageElement[0].value; 19354 19355 if (squareFootage) { 19356 // Trigger the 'keyup' event 19357 var event = new KeyboardEvent('keyup', { 19358 'key': 'Enter', // You can set this to any key, like 'Enter' 19359 'bubbles': true, 19360 'cancelable': true 19361 }); 19362 19363 squareFootageElement[0].dispatchEvent(event); 19364 } 19365 } 19366 }, 19367 sortImagesByPosition(images) { 19368 return images.sort((x, y) => { 19369 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 19370 }); 19371 }, 19372 onGetCartData(data) { 19373 this.preselectCartItems(data); 19374 this.preselectQuerystringItems(); 19375 this.preselectLocationHashItems(); 19376 }, 19377 preselectCartItems(data) { 19378 // pre-select options based on cart data for current (quote) itemId 19379 const cart = data && data.cart; 19380 if (cart && cart.items) { 19381 const cartItem = cart.items.find((item) => { 19382 return ( 19383 item.item_id === this.itemId 19384 && item.product_id === this.productId 19385 ) 19386 }); 19387 if (cartItem && cartItem.options && cartItem.options.length) { 19388 cartItem.options.map(option => { 19389 this.changeOption(option.option_id, option.option_value); 19390 }) 19391 } 19392 } 19393 }, 19394 preselectQuerystringItems() { 19395 // pre-select option like ?size=167 19396 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 19397 Object.values(this.optionConfig.attributes).map(attribute => { 19398 urlQueryParams.get(attribute.code) && 19399 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 19400 }); 19401 }, 19402 preselectLocationHashItems() { 19403 // pre-select option like #144=167 19404 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 19405 Object.values(this.optionConfig.attributes).map(attribute => { 19406 urlHashParams.get(attribute.id) && 19407 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 19408 }); 19409 } 19410 } 19411 } 19412 19413 function isOptionVisible(element) { 19414 const computedStyle = window.getComputedStyle(element); 19415 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden'; 19416 } 19417</script>
vendor: 1 bytes, line 19417
19417
19418<script> 19419 function initCompareOnProductList() { 19420 return { 19421 addToCompare(productId) { 19422 const formKey = hyva.getFormKey(); 19423 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 19424 19425 fetch(postUrl, { 19426 "headers": { 19427 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 19428 }, 19429 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 19430 "method": "POST", 19431 "mode": "cors", 19432 "credentials": "include" 19433 }).then(function (response) { 19434 if (response.redirected) { 19435 window.location.href = response.url; 19436 } 19437 }).catch(function (error) { 19438 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 19439 [{ 19440 type: "error", 19441 text: error 19442 }], 5000 19443 ); 19444 }); 19445 } 19446 }; 19447 } 19448</script>
vendor: 1 bytes, line 19448
19448
19449<script> 19450 function initWishlist() { 19451 return { 19452 addToWishlist(productId) { 19453 const formKey = hyva.getFormKey(); 19454 const postUrl = BASE_URL + 'wishlist/index/add/'; 19455 19456 fetch(postUrl, { 19457 "headers": { 19458 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 19459 }, 19460 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 19461 "method": "POST", 19462 "mode": "cors", 19463 "credentials": "include" 19464 }).then(function (response) { 19465 if (response.redirected) { 19466 window.location.href = response.url; 19467 } else if (response.ok) { 19468 return response.json(); 19469 } else { 19470 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 19471 [{ 19472 type: "warning", 19473 text: "Could not add item to wishlist." 19474 }], 5000 19475 ); 19476 } 19477 }).then(function (response) { 19478 if (!response) { return } 19479 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 19480 [{ 19481 type: (response.success) ? "success" : "error", 19482 text: (response.success) 19483 ? "Product has been added to your Wish List." 19484 : response.error_message 19485 }], 5000 19486 ); 19487 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 19488 window.dispatchEvent(reloadCustomerDataEvent); 19489 }).catch(function (error) { 19490 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 19491 [{ 19492 type: "error", 19493 text: error 19494 }], 5000 19495 ); 19496 }); 19497 } 19498 } 19499 } 19500</script>
vendor: 1 bytes, line 19500
19500
19501<script> 19502 function initSwatchOptions(swatchConfig, swatchLabelValues = null) { 19503 const normalizedSwatchLabelValues = ( 19504 swatchLabelValues 19505 && typeof swatchLabelValues === 'object' 19506 && !Array.isArray(swatchLabelValues) 19507 ) ? swatchLabelValues : {}; 19508 19509 return { 19510 swatchConfig, 19511 swatchLabelValues: normalizedSwatchLabelValues, 19512 resolveSwatchLabel(attributeId, optionId) { 19513 if (optionId === undefined || optionId === null || optionId === '') { 19514 return ''; 19515 } 19516 19517 const optionKey = String(optionId); 19518 const labels = ( 19519 this.swatchLabelValues 19520 && typeof this.swatchLabelValues === 'object' 19521 && !Array.isArray(this.swatchLabelValues) 19522 ) ? this.swatchLabelValues : {}; 19523 const flatLabel = labels[optionKey] ?? labels[optionId]; 19524 if (flatLabel !== undefined && flatLabel !== null && flatLabel !== '') { 19525 return String(flatLabel); 19526 } 19527 19528 const attrConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[String(attributeId)]; 19529 const attrLabels = attrConfig?.swatchLabelValues; 19530 if (attrLabels) { 19531 const attrLabel = attrLabels[optionKey] ?? attrLabels[optionId]; 19532 if (attrLabel !== undefined && attrLabel !== null && attrLabel !== '') { 19533 return String(attrLabel); 19534 } 19535 } 19536 19537 const swatchOption = attrConfig?.[optionKey] ?? attrConfig?.[optionId]; 19538 if (swatchOption?.label) { 19539 return String(swatchOption.label); 19540 } 19541 19542 return this.getOptionLabelFromOptionConfig(attributeId, optionId) || ''; 19543 }, 19544 getAttributeSwatchData(attributeId) { 19545 const attributeKey = String(attributeId); 19546 const rawConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[attributeKey]; 19547 const labels = ( 19548 this.swatchLabelValues 19549 && typeof this.swatchLabelValues === 'object' 19550 && !Array.isArray(this.swatchLabelValues) 19551 ) ? this.swatchLabelValues : {}; 19552 if (!rawConfig) { 19553 return {details: {}, swatchLabelValues: labels}; 19554 } 19555 const swatchConfig = Object.assign({}, rawConfig); 19556 if (swatchConfig['additional_data']) { 19557 try { 19558 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 19559 } catch (error) { 19560 swatchConfig['details'] = {}; 19561 } 19562 } else { 19563 swatchConfig['details'] = swatchConfig['details'] ?? {}; 19564 } 19565 swatchConfig['swatchLabelValues'] = labels; 19566 19567 return swatchConfig; 19568 }, 19569 getAllAttributeOptions(attributeId) { 19570 return ( 19571 this.optionConfig.attributes[attributeId] && 19572 this.optionConfig.attributes[attributeId].options 19573 ) || [] 19574 }, 19575 optionIsActive(attributeId, optionId) { 19576 const optionKey = String(optionId); 19577 return !!this.getAllowedAttributeOptions(attributeId).find( 19578 option => String(option.id) === optionKey 19579 ); 19580 }, 19581 optionIsEnabled(attributeId, optionId) { 19582 const attributeKey = String(attributeId); 19583 const optionKey = String(optionId); 19584 const index = this.optionConfig?.index || {}; 19585 for (const productId in index) { 19586 const productOptions = index[productId] || {}; 19587 if ( 19588 String(productOptions[attributeKey]) === optionKey 19589 || String(productOptions[attributeId]) === optionKey 19590 ) { 19591 return true; 19592 } 19593 } 19594 const attributeOptions = ( 19595 this.optionConfig?.attributes?.[attributeId]?.options 19596 || this.optionConfig?.attributes?.[attributeKey]?.options 19597 || [] 19598 ); 19599 const match = attributeOptions.find((option) => String(option.id) === optionKey); 19600 if (!match?.products?.length) { 19601 return false;
19602 } 19603 return match.products.some((childId) => { 19604 const key = String(childId); 19605 return Object.prototype.hasOwnProperty.call(index, key) 19606 || Object.prototype.hasOwnProperty.call(index, childId); 19607 }); 19608 }, 19609 mapSwatchTypeNumberToTypeCode(typeNumber) { 19610 switch ("" + typeNumber) { 19611 case "1": 19612 return "color" 19613 case "2": 19614 return "image" 19615 case "3": 19616 return "empty" 19617 case "0": 19618 default: 19619 return "text" 19620 } 19621 }, 19622 getTypeOfFirstOption(attributeId) { 19623 for (const optionId in this.swatchConfig[attributeId]) { 19624 const option = this.swatchConfig[attributeId][optionId]; 19625 if (typeof option.type !== 'undefined') { 19626 return this.mapSwatchTypeNumberToTypeCode(option.type); 19627 } 19628 } 19629 }, 19630 getVisualSwatchType(attributeId, targetOptionId) { 19631 // If a type configuration is present for the given option id, use it 19632 const config = this.swatchConfig[attributeId]; 19633 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 19634 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 19635 } 19636 19637 // Otherwise - if no config is present for the target option - use the type of the first option 19638 // with a type property from the attribute, thus assuming its the same type as the target option. 19639 // (This edge case condition can occur on single swatch products if some options are not salable) 19640 return this.getTypeOfFirstOption(attributeId); 19641 }, 19642 getSwatchType(attributeId, optionId) { 19643 // Deserialize the attribute details the first time they are used 19644 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 19645 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 19646 } 19647 const type = this.swatchConfig[attributeId] && 19648 this.swatchConfig[attributeId].details && 19649 this.swatchConfig[attributeId].details.swatch_input_type || 19650 "empty"; 19651 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 19652 }, 19653 isTextSwatch(attributeId, optionId) { 19654 return this.getSwatchType(attributeId, optionId) === 'text'; 19655 }, 19656 isVisualSwatch(attributeId, optionId) { 19657 const type = this.getSwatchType(attributeId, optionId); 19658 19659 return ['image', 'color'].includes(type); 19660 }, 19661 getSwatchBackgroundStyle(attributeId, optionId) { 19662 const config = this.getSwatchConfig(attributeId, optionId); 19663 const type = this.getSwatchType(attributeId, optionId); 19664 19665 if (type === "color") { 19666 return 'background-color:' + config.value; 19667 } else if (type === "image") { 19668 return "background: #ffffff url('" + config.value + "') no-repeat center"; 19669 } else { 19670 return ''; 19671 } 19672 }, 19673 getSwatchText(attributeId, optionId) { 19674 return this.resolveSwatchLabel(attributeId, optionId); 19675 }, 19676 getLegacyColorSwatchImageHtml(attributeId, optionId) { 19677 const map = this._legacyColorSwatchImages || {}; 19678 return this.getSwatchTextUrl(attributeId, optionId, map); 19679 }, 19680 getSwatchTextUrl(attributeId, optionId, childSwatch) { 19681 const config = this.getSwatchConfig(attributeId, optionId); 19682 const optionKey = String(optionId); 19683 const swatchMap = ( 19684 childSwatch 19685 && typeof childSwatch === 'object' 19686 && !Array.isArray(childSwatch) 19687 ) ? childSwatch : {}; 19688 const swatchUrl = swatchMap[optionKey] ?? swatchMap[optionId]; 19689 if(swatchUrl != "" && swatchUrl != null && isValidURL(swatchUrl)){ 19690 return "<img loading='lazy' src="+swatchUrl+" title="+swatchUrl+" alt="+swatchUrl+"/>"; 19691 } else if(config && config.value!="" && config.value!= null && isValidURL(config.value)){ 19692 return "<img loading='lazy' src="+config.value+" title="+config.value+" alt="+config.value+"/>"; 19693 } else { 19694 var placeHoldernew = BASE_URL+'media/catalog/product/placeholder/default/swatch_placeholder.png'; 19695 19696 return "<img width= '60px' height='60px' src="+placeHoldernew+" title="+placeHoldernew+" alt="+placeHoldernew+"/>"; 19697 } 19698 }, 19699 getOptionLabelFromOptionConfig(attributeId, optionId) { 19700 const optionKey = String(optionId); 19701 const option = this.getAllAttributeOptions(attributeId).find( 19702 (entry) => String(entry.id) === optionKey 19703 ); 19704 return option?.label || ''; 19705 }, 19706 getSwatchConfig(attributeId, optionId) { 19707 const attrConfig = this.swatchConfig[attributeId] ?? this.swatchConfig[String(attributeId)]; 19708 if (!attrConfig) { 19709 return false;
19710 } 19711 return attrConfig[optionId] ?? attrConfig[String(optionId)] ?? false; 19712 }, 19713 activeTooltipItem: false, 19714 tooltipPositionElement: false, 19715 isTooltipVisible() { 19716 return this.activeTooltipItem && 19717 this.getSwatchConfig( 19718 this.activeTooltipItem.attribute, 19719 this.activeTooltipItem.item 19720 ); 19721 }, 19722 getTooltipImageStyle(attributeId, optionId) { 19723 const config = this.getSwatchConfig(attributeId, optionId); 19724 const type = this.getSwatchType(attributeId, optionId); 19725 19726 if (type === "color") { 19727 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 19728 } else if (type === "image") { 19729 return "background: #ffffff url('" + config.thumb + 19730 "') center center no-repeat; width: 110px; height: 90px;"; 19731 } else { 19732 return 'display:none'; 19733 } 19734 }, 19735 getTooltipPosition() { 19736 if (!this.tooltipPositionElement) { 19737 return ''; 19738 } 19739 const rect = this.tooltipPositionElement.getBoundingClientRect(); 19740 const elementWidth = rect.width; 19741 const elementHeight = rect.height; 19742 const container = document.querySelector('.swatch___render'); 19743 if (!container) { 19744 return ''; 19745 } 19746 const containerRect = container.getBoundingClientRect(); 19747 const topPosition = rect.top - containerRect.top + 10; 19748 const leftPosition = rect.left - containerRect.left; 19749 19750 return ` 19751 top: ${topPosition}px; 19752 left: ${leftPosition}px; 19753 `; 19754 }, 19755 getSwatchConfigLabel(attributeId, optionId) { 19756 const label = this.resolveSwatchLabel(attributeId, optionId); 19757 return label !== '' ? label : false; 19758 }, 19759 getTooltipLabel() { 19760 return this.getSwatchConfigLabel(this.activeTooltipItem.attribute, this.activeTooltipItem.item); 19761 //return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 19762 }, 19763 focusedLabel: false, 19764 focusLabel(optionId) { 19765 this.focusedLabel = optionId; 19766 }, 19767 blurLabel() { 19768 this.focusedLabel = false; 19769 }, 19770 showSwatches: true, 19771 initShowSwatchesIntersect() { 19772 this.showSwatches = true; 19773 }, 19774 19775 quickShipValidation(attributeCode, attributeId, optionId){ 19776 if (optionId === undefined || optionId === null || optionId === '') { 19777 return 0; 19778 } 19779 var is_quick_ship_color = 0; 19780 var optionConfigObj = this.optionConfig; 19781 if (!optionConfigObj || typeof optionConfigObj !== 'object') { 19782 return 0; 19783 } 19784 if(attributeCode == 'incstores_pim_color_axis'){ 19785 var attributes = optionConfigObj.attributes; 19786 if (!attributes || !attributes[attributeId] || !attributes[attributeId]['options']) { 19787 return 0; 19788 } 19789 var quickShipColorIds = optionConfigObj.quick_ship_color_ids || []; 19790 if (quickShipColorIds.length) { 19791 return quickShipColorIds.some(function (id) { 19792 return String(id) === String(optionId); 19793 }) ? 1 : 0; 19794 } 19795 var quickShipMap = optionConfigObj.quick_ship; 19796 if (!quickShipMap) { 19797 return 0; 19798 } 19799 var attributes_options = attributes[attributeId]['options']; 19800 19801 attributes_options.forEach(function(option_details) { 19802 if(option_details['id'] == optionId){ 19803 option_details['products'].forEach(function(child_product_id) { 19804 if(quickShipMap[String(child_product_id)] == 1 || quickShipMap[child_product_id] == 1){ 19805 is_quick_ship_color = 1; 19806 return false;
19807 } 19808 }); 19809 } 19810 }); 19811 } 19812 return is_quick_ship_color; 19813 }, 19814 19815 hasQuickShipColorOptions(attributeCode, attributeId) { 19816 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 19817 return false; 19818 } 19819 if (this.selectedValues) { 19820 Object.keys(this.selectedValues).forEach(function (key) { 19821 void this.selectedValues[key]; 19822 }.bind(this)); 19823 } 19824 var colorIds = this.optionConfig.quick_ship_color_ids || []; 19825 var options = this.optionConfig.attributes[attributeId].options; 19826 for (var i = 0; i < options.length; i++) { 19827 var optionId = options[i].id; 19828 var isQuick = colorIds.length 19829 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 19830 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 19831 if (!isQuick) { 19832 continue; 19833 } 19834 if (!this.optionIsEnabled(attributeId, optionId)) { 19835 continue; 19836 } 19837 if (!this.optionIsActive(attributeId, optionId)) { 19838 continue; 19839 } 19840 return true; 19841 } 19842 return false; 19843 }, 19844 19845 hasNormalColorOptions(attributeCode, attributeId) { 19846 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 19847 return false; 19848 } 19849 if (this.shipRegionZipActive && this.customerRegionCode) { 19850 return false; 19851 } 19852 var colorIds = this.optionConfig.quick_ship_color_ids || []; 19853 var options = this.optionConfig.attributes[attributeId].options; 19854 for (var i = 0; i < options.length; i++) { 19855 var optionId = options[i].id; 19856 var isQuick = colorIds.length 19857 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 19858 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 19859 if (!isQuick) { 19860 if (!this.optionIsEnabled(attributeId, optionId)) { 19861 continue; 19862 } 19863 if (!this.optionIsActive(attributeId, optionId)) { 19864 continue; 19865 } 19866 return true; 19867 } 19868 } 19869 return false; 19870 }, 19871 19872 shouldShowQuickShipSection(attributeCode, attributeId) { 19873 if (this.shipRegionZipActive && this.customerRegionCode) { 19874 return false; 19875 } 19876 return this.hasQuickShipColorOptions(attributeCode, attributeId); 19877 }, 19878 19879 getOtherSwatchAttributeId(section = null) { 19880 const target = section || document.querySelector('.swatch-attribute.other_swatch_option'); 19881 if (!target || !this.optionConfig?.attributes) { 19882 return null; 19883 } 19884 for (const key in this.optionConfig.attributes) { 19885 const code = this.optionConfig.attributes[key]?.code;
19886 if (code && code !== 'incstores_pim_color_axis' && target.classList.contains(code)) { 19887 return parseInt(key, 10); 19888 } 19889 } 19890 for (const key in this.optionConfig.attributes) { 19891 const code = this.optionConfig.attributes[key]?.code; 19892 if (code && code !== 'incstores_pim_color_axis') { 19893 return parseInt(key, 10); 19894 } 19895 } 19896 return null; 19897 }, 19898 19899 /** 19900 * Count salable/enabled options only. Disabled Magento variants stay out of the UI. 19901 * Hide "Select An Option" when fewer than two enabled options remain. 19902 */ 19903 countEnabledOtherSwatchOptions(attrId) { 19904 if (!attrId) { 19905 return 0; 19906 } 19907 const options = this.optionConfig?.attributes?.[attrId]?.options || []; 19908 return options.filter((option) => this.optionIsEnabled(attrId, option.id)).length; 19909 }, 19910 19911 countVisibleOtherSwatchOptions() { 19912 return this.countEnabledOtherSwatchOptions(this.getOtherSwatchAttributeId()); 19913 }, 19914 19915 syncOtherSwatchOptionVisibility() { 19916 const sections = document.querySelectorAll('.swatch-attribute.other_swatch_option'); 19917 if (!sections.length) { 19918 return; 19919 } 19920 const self = this; 19921 const applyVisibility = () => { 19922 sections.forEach((variantSection) => { 19923 const attrId = self.getOtherSwatchAttributeId(variantSection); 19924 if (!attrId) { 19925 return; 19926 } 19927 const optionCount = self.countEnabledOtherSwatchOptions(attrId); 19928 const shouldShow = optionCount > 1; 19929 variantSection.classList.toggle('dcw-single-option-hidden', !shouldShow); 19930 // Theme CSS defaults other_swatch_option to display:none â force block/none. 19931 variantSection.style.setProperty( 19932 'display', 19933 shouldShow ? 'block' : 'none', 19934 'important' 19935 ); 19936 if (!shouldShow && optionCount === 1) { 19937 const options = self.optionConfig?.attributes?.[attrId]?.options || []; 19938 const enabledOption = options.find((option) => self.optionIsEnabled(attrId, option.id)); 19939 const optionId = enabledOption?.id; 19940 if (optionId !== undefined 19941 && String(self.selectedValues[attrId]) !== String(optionId) 19942 && typeof self.changeOption === 'function') { 19943 self.changeOption(attrId, optionId); 19944 } 19945 } 19946 }); 19947 }; 19948 applyVisibility(); 19949 window.setTimeout(applyVisibility, 300); 19950 }, 19951 19952 /** 19953 * After color selection only (including disabled colors): if current variant/option 19954 * is incompatible, auto-select the cheapest compatible one. Never run on variant clicks.
19955 */ 19956 autoSelectCompatibleOtherOption(colorAttrId) { 19957 if (!colorAttrId || !this.optionConfig?.attributes) { 19958 return; 19959 } 19960 const selectedColor = this.selectedValues[colorAttrId]; 19961 if (!selectedColor) { 19962 return; 19963 } 19964 19965 let otherAttrId = null; 19966 if (typeof this.getAttributeIdByCode === 'function') { 19967 otherAttrId = this.getAttributeIdByCode('incstores_pim_variant_axis') 19968 || this.getAttributeIdByCode('product_option'); 19969 } 19970 if (!otherAttrId) { 19971 const section = document.querySelector('.swatch-attribute.other_swatch_option'); 19972 otherAttrId = this.getOtherSwatchAttributeId(section); 19973 } 19974 if (!otherAttrId || !this.optionConfig.attributes[otherAttrId]) { 19975 return; 19976 } 19977 19978 const currentOther = this.selectedValues[otherAttrId]; 19979 const isCurrentCompatible = currentOther 19980 && typeof this.optionIsActive === 'function' 19981 && this.optionIsActive(otherAttrId, currentOther); 19982 19983 if (isCurrentCompatible) { 19984 return; 19985 } 19986 19987 const options = this.optionConfig.attributes[otherAttrId].options || []; 19988 let lowestPrice = null; 19989 let lowestOptionId = null; 19990 19991 options.forEach((option) => { 19992 if (typeof this.optionIsEnabled === 'function' 19993 && !this.optionIsEnabled(otherAttrId, option.id)) { 19994 return; 19995 } 19996 const productIds = option.products || []; 19997 productIds.forEach((productId) => { 19998 const product = this.optionConfig.index[productId] 19999 || this.optionConfig.index[String(productId)]; 20000 if (!product || String(product[colorAttrId]) !== String(selectedColor)) { 20001 return; 20002 } 20003 const priceData = this.optionConfig.optionPrices[productId] 20004 || this.optionConfig.optionPrices[String(productId)]; 20005 if (!priceData) { 20006 return; 20007 } 20008 const price = priceData.finalPrice.amount; 20009 if (lowestPrice === null || price < lowestPrice) { 20010 lowestPrice = price; 20011 lowestOptionId = option.id; 20012 } 20013 }); 20014 }); 20015 20016 if (lowestOptionId === null 20017 || String(this.selectedValues[otherAttrId]) === String(lowestOptionId)) { 20018 return; 20019 } 20020 20021 if (typeof this.changeOption === 'function') { 20022 this.changeOption(otherAttrId, lowestOptionId); 20023 return; 20024 } 20025 20026 const el = document.querySelector( 20027 'input[name="super_attribute[' + otherAttrId + ']"][value="' + lowestOptionId + '"]' 20028 ); 20029 if (el) { 20030 el.click(); 20031 } 20032 }, 20033 20034 /** 20035 * After variant / Select An Option change: if current color is unavailable, 20036 * auto-select the cheapest compatible color. Never run on color clicks. 20037 */ 20038 autoSelectCompatibleColorOption(otherAttrId) { 20039 if (!otherAttrId || !this.optionConfig?.attributes) { 20040 return; 20041 } 20042 const selectedOther = this.selectedValues[otherAttrId]; 20043 if (!selectedOther) { 20044 return; 20045 } 20046 20047 let colorAttrId = null; 20048 if (typeof this.getAttributeIdByCode === 'function') { 20049 colorAttrId = this.getAttributeIdByCode('incstores_pim_color_axis'); 20050 }
20051 if (!colorAttrId && typeof this.getShipRegionColorAttributeId === 'function') { 20052 colorAttrId = this.getShipRegionColorAttributeId(); 20053 } 20054 if (!colorAttrId || !this.optionConfig.attributes[colorAttrId]) { 20055 return; 20056 } 20057 20058 const currentColor = this.selectedValues[colorAttrId]; 20059 const isCurrentCompatible = currentColor 20060 && typeof this.optionIsActive === 'function' 20061 && this.optionIsActive(colorAttrId, currentColor); 20062 20063 if (isCurrentCompatible) { 20064 return; 20065 } 20066 20067 const options = this.optionConfig.attributes[colorAttrId].options || []; 20068 let lowestPrice = null; 20069 let lowestOptionId = null; 20070 20071 options.forEach((option) => { 20072 if (typeof this.optionIsEnabled === 'function' 20073 && !this.optionIsEnabled(colorAttrId, option.id)) { 20074 return; 20075 } 20076 const productIds = option.products || []; 20077 productIds.forEach((productId) => { 20078 const product = this.optionConfig.index[productId] 20079 || this.optionConfig.index[String(productId)]; 20080 if (!product || String(product[otherAttrId]) !== String(selectedOther)) { 20081 return; 20082 } 20083 const priceData = this.optionConfig.optionPrices[productId] 20084 || this.optionConfig.optionPrices[String(productId)]; 20085 if (!priceData) { 20086 return; 20087 } 20088 const price = priceData.finalPrice.amount; 20089 if (lowestPrice === null || price < lowestPrice) { 20090 lowestPrice = price; 20091 lowestOptionId = option.id; 20092 } 20093 }); 20094 }); 20095 20096 if (lowestOptionId === null 20097 || String(this.selectedValues[colorAttrId]) === String(lowestOptionId)) { 20098 return; 20099 } 20100 20101 if (typeof this.changeOption === 'function') { 20102 this.changeOption(colorAttrId, lowestOptionId); 20103 return; 20104 } 20105 20106 const el = document.querySelector( 20107 'input[name="super_attribute[' + colorAttrId + ']"][value="' + lowestOptionId + '"]' 20108 ); 20109 if (el) { 20110 el.click(); 20111 } 20112 }, 20113 20114 syncNormalColorSwatchQuickShipVisibility() { 20115 if (this.shipRegionZipActive && this.customerRegionCode) { 20116 return; 20117 } 20118 if (typeof this.quickShipValidation !== 'function') { 20119 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 20120 this.syncNormalColorSwatchSectionVisibility(); 20121 } 20122 return; 20123 } 20124 const self = this; 20125 document.querySelectorAll('.normal_color_swatch_option .selectOptionColor').forEach(function (el) { 20126 const input = el.querySelector('input.product-option-value-input[name^="super_attribute"]'); 20127 if (!input) { 20128 return; 20129 } 20130 const nameMatch = input.name.match(/super_attribute\[(\d+)\]/); 20131 if (!nameMatch) { 20132 return; 20133 } 20134 const attributeId = parseInt(nameMatch[1], 10); 20135 const optionId = input.value; 20136 const attributeCode = input.getAttribute('data-attributecode') || 'incstores_pim_color_axis'; 20137 if (self.quickShipValidation(attributeCode, attributeId, optionId) === 1) { 20138 el.classList.add('hidden'); 20139 el.style.display = 'none'; 20140 } else { 20141 el.classList.remove('hidden'); 20142 el.style.display = ''; 20143 } 20144 }); 20145 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 20146 this.syncNormalColorSwatchSectionVisibility(); 20147 } 20148 }, 20149 20150 getColorAttributeId() { 20151 if (typeof this.getAttributeIdByCode === 'function') { 20152 const id = this.getAttributeIdByCode('incstores_pim_color_axis'); 20153 return id ? parseInt(String(id), 10) : null; 20154 } 20155 if (!this.optionConfig?.attributes) { 20156 return null; 20157 } 20158 for (const key in this.optionConfig.attributes) { 20159 if (this.optionConfig.attributes[key]?.code === 'incstores_pim_color_axis') { 20160 return parseInt(key, 10); 20161 } 20162 } 20163 return null; 20164 }, 20165 20166 /** 20167 * Hide entire "Select A Color" block when every color is Quick Ship (or none left). 20168 */ 20169 syncNormalColorSwatchSectionVisibility() { 20170 const sections = document.querySelectorAll('.normal_color_swatch_option'); 20171 if (!sections.length) { 20172 return; 20173 } 20174 const colorAttrId = this.getColorAttributeId(); 20175 const shouldShow = colorAttrId 20176 && typeof this.hasNormalColorOptions === 'function' 20177 && this.hasNormalColorOptions('incstores_pim_color_axis', colorAttrId); 20178 20179 sections.forEach((section) => { 20180 if (!shouldShow) { 20181 section.classList.add('hidden'); 20182 section.style.setProperty('display', 'none', 'important'); 20183 } else { 20184 section.classList.remove('hidden', 'sr-only'); 20185 section.style.setProperty('display', 'block', 'important'); 20186 } 20187 }); 20188 } 20189 } 20190 } 20191 20192 function isValidURL(url) { 20193 // Regular expression for URL validation 20194 var pattern = /^(https?:\/\/)?([\w.]+)\.([a-z]{2,})(\/[\w\.-]*)*\/?$/i; 20195 return pattern.test(url); 20196} 20197</script>
vendor: 1 bytes, line 20197
20197
20198<script> 20199 'use strict'; 20200 20201 (function () { 20202 const modals = []; 20203 const excludedFromFocusTrapping = new Set(); 20204 20205 function trapFocusInNextModalWithOverlay() { 20206 for (let idx = modals.length -1; idx >= 0; idx--) { 20207 const nextOnStack = modals[idx]; 20208 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 20209 if (! isOverlayDisabled(nextDialogElement)) { 20210 hyva.trapFocus(nextDialogElement); 20211 break; 20212 } 20213 } 20214 } 20215 20216 function focusables(dialogElement) { 20217 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 20218 return Array.from(dialogElement.querySelectorAll(selector)) 20219 .filter(el => !el.hasAttribute('disabled')); 20220 } 20221 20222 function firstVisible(elements) { 20223 const a = Array.from(elements); 20224 for (let i = 0; i < a.length; i++) { 20225 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 20226 } 20227 return null; 20228 } 20229 20230 function isInViewport(element) { 20231 const rect = element && element.getBoundingClientRect(); 20232 return rect && 20233 rect.top >= 0 && 20234 rect.left >= 0 && 20235 rect.right <= window.innerWidth && 20236 rect.bottom <= window.innerHeight; 20237 } 20238 20239 function setFocusAfterTransition(dialogElement, duration) { 20240 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 20241 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 20242 next: for (let candidate of candidates) { 20243 for (let child of nested) { 20244 if (child.contains(candidate)) continue next; 20245 } 20246 setTimeout(() => candidate.focus(), 50); 20247 break; 20248 } 20249 window.setTimeout(() => { 20250 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 20251 focusables(dialogElement)[0] || 20252 null; 20253 focusElement && isInViewport(focusElement) && focusElement.focus(); 20254 }, Math.max(1, duration)); 20255 } 20256 20257 function determineTrigger($refs, dialog, trigger) { 20258 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 20259 return dialog.target; 20260 } 20261 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 20262 return trigger.target; 20263 } 20264 if (typeof trigger === 'string') { 20265 try { 20266 return $refs[trigger] || document.querySelector(trigger) 20267 } catch (e) {} 20268 } 20269 if (trigger instanceof Element) { 20270 return trigger; 20271 } 20272 20273 return null; 20274 } 20275 20276 function isOverlayDisabled(dialog) { 20277 return dialog && dialog.hasAttribute('x-no-overlay') 20278 } 20279 20280 function areRemainingModalsWithoutOverlay(modals) 20281 { 20282 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 20283 20284 return overflowDisabled.length === modals.length; 20285 } 20286 20287 window.hyva.modal = function(options) { 20288 20289 const config = Object.assign({ 20290 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 20291 transitionEnterStart: 'opacity-0', 20292 transitionEnterEnd: 'opacity-100', 20293 transitionLeave: 'transition ease-in duration-300', 20294 transitionLeaveStart: 'opacity-100', 20295 transitionLeaveEnd: 'opacity-0', 20296 }, options); 20297 let lastHide = 0; 20298 20299 return { 20300 opened: {}, 20301 show(dialog, trigger) { 20302 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 20303 const name = typeof dialog === 'string' ? dialog : config.dialog; 20304 const dialogElement = this.$refs[name]; 20305 if (! dialogElement) { 20306 return; 20307 } 20308 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 20309 20310 dialogElement.scrollTop = 0; 20311 20312 if (this.opened[name]) { 20313 return; 20314 } 20315 20316 if (focusTargetAfterHide) { 20317 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 20318 } 20319 20320 this.opened[name] = true; 20321 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 20322 setFocusAfterTransition(dialogElement, config.duration); 20323 20324 const frame = {name, instance: this, focusTarget: focu
20324sTargetAfterHide, time: Date.now()}; 20325 20326 modals.push(frame); 20327 if (useOverlay) { 20328 document.body.classList.add('overflow-hidden'); 20329 } 20330 return new Promise(resolve => frame.resolve = resolve); 20331 }, 20332 cancel() { 20333 this.hide(false); 20334 }, 20335 ok() { 20336 this.hide(true); 20337 }, 20338 hide(value) { 20339 if (Date.now() - lastHide < config.duration) { 20340 return; 20341 } 20342 lastHide = Date.now(); 20343 20344 const modal = modals.pop() || {}; 20345 const name = modal.name; 20346 this.opened[name] = false; 20347 hyva.releaseFocus(modal.instance.$refs[modal.name]) 20348 trapFocusInNextModalWithOverlay(); 20349 20350 const nextFocusAfterHide = modal.focusTarget; 20351 nextFocusAfterHide && setTimeout(() => { 20352 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 20353 nextFocusAfterHide.focus() 20354 }, config.duration); 20355 20356 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 20357 document.body.classList.remove('overflow-hidden'); 20358 } 20359 20360 modal.resolve(value); 20361 }, 20362 overlay(dialog) { 20363 const name = typeof dialog === 'string' ? dialog : config.dialog; 20364 return { 20365 ['x-show']() { 20366 return this.opened[name] 20367 }, 20368 ['x-transition:enter']: config.transitionEnter, 20369 ['x-transition:enter-start']: config.transitionEnterStart, 20370 ['x-transition:enter-end']: config.transitionEnterEnd, 20371 ['x-transition:leave']: config.transitionLeave, 20372 ['x-transition:leave-start']: config.transitionLeaveStart, 20373 ['x-transition:leave-end']: config.transitionLeaveEnd, 20374 ['@hyva-modal-show.window'](event) { 20375 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 20376 } 20377 }; 20378 } 20379 }; 20380 } 20381 20382 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 20383 20384 window.hyva.modal.pop = function () { 20385 if (modals.length > 0) { 20386 const modal = modals[modals.length -1]; 20387 modal.instance.hide(); 20388 } 20389 } 20390 20391 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 20392 typeof selectors === 'string' || selectors instanceof String 20393 ? excludedFromFocusTrapping.add(selectors) 20394 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 20395 } 20396 20397 window.hyva.modal.eventListeners = { 20398 keydown: event => { 20399 if (event.key === 'Escape') { 20400 window.hyva.modal.pop(); 20401 } 20402 }, 20403 click: event => { 20404 if (modals.length > 0) { 20405 const modal = modals[modals.length -1]; 20406 const dialog = modal.instance.$refs[modal.name]; 20407 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 20408 ! isOverlayDisabled(dialog) && // if dialog has overlay 20409 ! dialog.contains(event.target)) { // if click is outside of dialog 20410 modal.instance.hide(); 20411 } 20412 } 20413 } 20414 }; 20415 20416 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 20417 20418 document.addEventListener('click', window.hyva.modal.eventListeners.click); 20419 })(); 20420</script>
vendor: 1 bytes, line 20420
20420
20421<script> 20422 'use strict'; 20423 20424 (() => { 20425 const equalizeButtonWidths = (buttons) => { 20426 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 20427 let buttonMinWidth = 0; 20428 20429 buttonList.forEach(button => { 20430 const buttonWidth = button.offsetWidth; 20431 20432 if (buttonWidth > buttonMinWidth) { 20433 buttonMinWidth = buttonWidth; 20434 } 20435 }); 20436 20437 buttonList.forEach(button => { 20438 button.style.minWidth = `${buttonMinWidth}px`; 20439 }); 20440 }; 20441 20442 window.addEventListener('DOMContentLoaded', () => { 20443 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 20444 equalizeButtonWidths(buttons); 20445 }); 20446 }); 20447 })(); 20448</script>
vendor: 1 bytes, line 20448
20448
20449<script> 20450 'use strict'; 20451 20452 (() => { 20453 const initCarousels = (elements) => { 20454 if (!Glider) { 20455 return; 20456 } 20457 20458 const initProductCarousel = (carousel) => { 20459 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 20460 20461 if (!gliderElement) { 20462 return; 20463 } 20464 20465 const gliderDots = carousel.querySelector('.glider-dots'); 20466 const gliderPrev = carousel.querySelector('.glider-prev'); 20467 const gliderNext = carousel.querySelector('.glider-next'); 20468 20469 const glider = new Glider(gliderElement, { 20470 slidesToShow: 1.2, 20471 slidesToScroll: 2, 20472 scrollLock: true, 20473 draggable: true, 20474 dragVelocity: 2.5, 20475 dots: gliderDots, 20476 arrows: { 20477 prev: gliderPrev, 20478 next: gliderNext, 20479 }, 20480 responsive: [ 20481 { 20482 breakpoint: 768, 20483 settings: { 20484 slidesToShow: 3, 20485 slidesToScroll: 3, 20486 } 20487 }, 20488 { 20489 breakpoint: 1024, 20490 settings: { 20491 slidesToShow: 4, 20492 slidesToScroll: 4, 20493 } 20494 }, 20495 { 20496 breakpoint: 1200, 20497 settings: { 20498 slidesToShow: 5, 20499 slidesToScroll: 5, 20500 } 20501 } 20502 ], 20503 }); 20504 20505 carousel.classList.remove('overflow-x-scroll'); 20506 gliderPrev.classList.remove('hidden'); 20507 gliderNext.classList.remove('hidden'); 20508 20509 if (carousel.dataset.autoplay !== 'false') { 20510 gliderAutoplay( 20511 glider, 20512 carousel.dataset.autoplaySpeed, 20513 carousel.dataset.infiniteLoop 20514 ); 20515 } 20516 }; 20517 20518 const initSliderCarousel = (slider) => { 20519 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 20520 slider.classList.add('glider-contain'); 20521 20522 slider.insertAdjacentHTML( 20523 'beforeend', 20524 '\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
20524003D\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
20524003D\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' 20525 ); 20526 20527 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 20528 const gliderDots = slider.querySelector('.glider-dots'); 20529 const gliderPrev = slider.querySelector('.glider-prev'); 20530 const gliderNext = slider.querySelector('.glider-next'); 20531 20532 const glider = new Glider(gliderElement, { 20533 slidesToShow: 1, 20534 slidesToScroll: 1, 20535 scrollLock: true, 20536 scrollLockDelay: 250, 20537 draggable: true, 20538 dragVelocity: 2.5, 20539 dots: gliderDots, 20540 arrows: { 20541 prev: gliderPrev, 20542 next: gliderNext, 20543 }, 20544 }); 20545 20546 slider.classList.add('glider-initialized'); 20547 if (slider.dataset.showArrows === 'true') { 20548 gliderPrev.classList.remove('hidden'); 20549 gliderNext.classList.remove('hidden'); 20550 } 20551 20552 if (slider.dataset.autoplay !== 'false') { 20553 gliderAutoplay( 20554 glider, 20555 slider.dataset.autoplaySpeed, 20556 slider.dataset.infiniteLoop 20557 ); 20558 } 20559 }; 20560 20561 const gliderAutoplay = (glider, milliseconds, loop) => { 20562 const pagesCount = glider.track.childElementCount; 20563 let slideTimeout = null; 20564 let nextIndex = 1; 20565 let paused = false; 20566 20567 const slide = () => { 20568 slideTimeout = setTimeout( 20569 () => { 20570 if (loop && nextIndex >= pagesCount) { 20571 nextIndex = 0; 20572 } 20573 glider.scrollItem(nextIndex); 20574 }, 20575 parseInt(milliseconds) 20576 ); 20577 }; 20578 20579 glider.ele.addEventListener('glider-animated', () => { 20580 nextIndex = glider.slide + glider.opt.slidesToScroll; 20581 window.clearInterval(slideTimeout); 20582 if (!paused && (loop || nextIndex < pagesCount)) { 20583 slide(); 20584 } 20585 }); 20586 20587 const pause = () => { 20588 if (!paused) { 20589 clearInterval(slideTimeout); 20590 paused = true; 20591 } 20592 }; 20593 20594 const unpause = () => { 20595 if (paused) { 20596 slide(); 20597 paused = false; 20598 } 20599 }; 20600 20601 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 20602 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 20603 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 20604 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 20605 20606 slide(); 20607 }; 20608 20609 elements.forEach(element => { 20610 if (element.dataset.contentType === 'products') { 20611 initProductCarousel(element); 20612 } 20613 if (element.dataset.contentType === 'slider') { 20614 initSliderCarousel(element); 20615 } 20616 }); 20617 }; 20618 20619 window.addEventListener('DOMContentLoaded', () => { 20620 const carouselElements = document.querySelectorAll( 20621 `[data-content-type="products"][data-appearance="carousel"], 20622 [data-content-type="slider"]` 20623 ); 20624 20625 if (carouselElements.length > 0) { 20626 const script = document.createElement('script'); 20627 script.type = 'text/javascript'; 20628 20629 script.addEventListener('load', () => { 20630 initCarousels(carouselElements); 20631 }); 20632 20633 window.addEventListener('init-external-scripts', () => { 20634 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 20635 }, {once: true, passive: true}); 20636 document.head.appendChild(script); 20637 } 20638 }); 20639 })(); 20640</script>
vendor: 1 bytes, line 20640
20640
20641<script> 20642 'use strict'; 20643 20644 (() => { 20645 const initMaps = (elements) => { 20646 const renderMap = (element) => { 20647 const dataLocations = element.dataset.locations; 20648 20649 // Hide map if no locations set 20650 if (!dataLocations || dataLocations === '[]') { 20651 element.classList.add('hidden'); 20652 return; 20653 } 20654 20655 const map = new google.maps.Map( 20656 element, 20657 getMapOptions( 20658 element.dataset.showControls !== 'true', 20659 element.dataset.showControls === 'true' 20660 ) 20661 ); 20662 const locations = JSON.parse(dataLocations); 20663 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 20664 const bounds = []; 20665 20666 locations.forEach(location => { 20667 const position = { 20668 lat: parseFloat(location.position.latitude), 20669 lng: parseFloat(location.position.longitude), 20670 }; 20671 bounds.push(position); 20672 20673 const infowindow = new google.maps.InfoWindow({ 20674 content: getInfoWindowContent(location), 20675 }); 20676 const marker = new google.maps.Marker({ 20677 position: position, 20678 map, 20679 title: location.location_name, 20680 }); 20681 20682 marker.addListener('click', () => { 20683 infowindow.open(map, marker); 20684 }); 20685 }); 20686 20687 // Set bounds if multiple locations 20688 if (bounds.length > 1) { 20689 bounds.forEach(function (bound) { 20690 latitudeLongitudeBounds.extend(bound); 20691 }); 20692 map.fitBounds(latitudeLongitudeBounds); 20693 } 20694 20695 // Center if single location 20696 if (bounds.length === 1) { 20697 map.setCenter(bounds[0]); 20698 } 20699 }; 20700 20701 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 20702 const style = ''; 20703 return { 20704 zoom: 8, 20705 scrollwheel: false, 20706 disableDoubleClickZoom: false, 20707 mapTypeControlOptions: { 20708 style: google.maps.MapTypeControlStyle.DEFAULT, 20709 }, 20710 styles: style ? JSON.parse(style) : [], 20711 disableDefaultUI: disableDefaultUI, 20712 mapTypeControl: mapTypeControl, 20713 }; 20714 }; 20715 20716 const getInfoWindowContent = (location) => { 20717 const title = location.location_name ? 20718 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 20719 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 20720 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 20721 const street = location.address ? `${location.address}<br/>` : ''; 20722 const city = location.city ? `${location.city}<br/>` : ''; 20723 const state = location.state ? `${location.state}<br/>` : ''; 20724 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 20725 const country = location.country ? location.country : ''; 20726 20727 return `<div> 20728 ${title} 20729 ${comment} 20730 ${phone} 20731 <p class="px-1 pt-3 text-primary"> 20732 ${street} 20733 ${city} 20734 ${state} 20735 ${zipCode} 20736 ${country} 20737 </p> 20738 </div>`; 20739 }; 20740 20741 const hideAllMaps = () => { 20742 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 20743 element.classList.add('hidden'); 20744 }); 20745 }; 20746 20747 window.gm_authFailure = () => { 20748 hideAllMaps(); 20749 }; 20750 20751 if (typeof google.maps === 'undefined') { 20752 hideAllMaps(); 20753 return; 20754 } 20755
20756 elements.forEach(element => { 20757 if (element.dataset.contentType === 'map') { 20758 renderMap(element); 20759 } 20760 }); 20761 }; 20762 20763 window.addEventListener('DOMContentLoaded', () => { 20764 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 20765 20766 if (mapElements.length > 0) { 20767 const script = document.createElement('script'); 20768 script.type = 'text/javascript'; 20769 20770 script.addEventListener('load', () => { 20771 initMaps(mapElements); 20772 }); 20773 20774 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 20775 document.head.appendChild(script); 20776 } 20777 }); 20778 })(); 20779</script>
vendor: 1 bytes, line 20779
20779
20780<script> 20781 'use strict'; 20782 20783 (() => { 20784 const initParallaxImage = (element) => { 20785 if (!window.jarallax) { 20786 return; 20787 } 20788 20789 element.classList.add('jarallax'); 20790 element.dataset.jarallax = ''; 20791 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 20792 const elementStyle = window.getComputedStyle(element); 20793 20794 window.jarallax(element, { 20795 imgPosition: elementStyle.backgroundPosition || '50% 50%', 20796 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 20797 imgSize: elementStyle.backgroundSize || 'cover', 20798 speed: parallaxSpeed, 20799 }); 20800 }; 20801 20802 const initVideoBackground = (element) => { 20803 if (!window.jarallax) { 20804 return; 20805 } 20806 20807 let slider = null; 20808 20809 if (element.classList.contains('pagebuilder-slide-wrapper')) { 20810 const viewportElement = document.createElement('div'); 20811 slider = element.closest('[data-content-type=slider]'); 20812 viewportElement.classList.add('jarallax-viewport-element'); 20813 element.dataset.elementInViewport = '.jarallax-viewport-element'; 20814 element.appendChild(viewportElement); 20815 } 20816 20817 element.classList.add('jarallax'); 20818 element.dataset.jarallax = ''; 20819 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 20820 20821 window.jarallax(element, { 20822 imgSrc: element.dataset.videoFallbackSrc, 20823 speed: parallaxSpeed, 20824 videoLoop: element.dataset.videoLoop, 20825 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 20826 videoLazyLoading: element.dataset.videoLazyLoad, 20827 disableVideo: false, 20828 elementInViewport: element.dataset.elementInViewport && 20829 element.querySelector(element.dataset.elementInViewport), 20830 }); 20831 20832 if (slider) { 20833 if (slider.dataset.afterChangeIsSet) { 20834 return; 20835 } 20836 20837 slider.addEventListener('glider-loaded', () => { 20838 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 20839 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 20840 }); 20841 }); 20842 20843 slider.addEventListener('glider-animated', () => { 20844 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 20845 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 20846 }); 20847 }); 20848 20849 slider.dataset.afterChangeIsSet = true; 20850 } 20851 }; 20852 20853 window.addEventListener('DOMContentLoaded', () => { 20854 const parallaxImageElements = document.querySelectorAll( 20855 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 20856 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 20857 ); 20858 20859 const videoBackgroundsElements = document.querySelectorAll( 20860 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 20861 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 20862 [data-content-type="banner"] [data-background-type="video"], 20863 [data-content-type="slide"] [data-background-type="video"]` 20864 ); 20865 20866 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 20867 const jarallaxScript = document.createElement('script'); 20868 jarallaxScript.type = 'text/javascript'; 20869 20870 jarallaxScript.addEventListener('load', () => { 20871 parallaxImageElements.forEach(row => { 20872 initParallaxImage(row); 20873 }); 20874 20875 const jarallaxVideoScript = document.createElement('script'); 20876 jarallaxVideoScript.type = 'text/javascript'; 20877 20878 jarallaxVideoScript.addEventListener('load', () => {
20879 videoBackgroundsElements.forEach(element => { 20880 initVideoBackground(element); 20881 }); 20882 }); 20883 20884 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 20885 document.head.appendChild(jarallaxVideoScript); 20886 }); 20887 20888 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 20889 document.head.appendChild(jarallaxScript); 20890 } 20891 }); 20892 })(); 20893</script>
vendor: 1 bytes, line 20893
20893
20894<script> 20895 'use strict'; 20896 20897 (() => { 20898 const applyShowOnHover = (element) => { 20899 const showOverlayOnHover = (element) => { 20900 const overlay = element.querySelector('.pagebuilder-overlay'); 20901 const color = overlay.dataset.overlayColor; 20902 20903 element.addEventListener('mouseover', () => { 20904 overlay.style.backgroundColor = color; 20905 }); 20906 element.addEventListener('mouseout', () => { 20907 overlay.style.backgroundColor = 'transparent'; 20908 }); 20909 }; 20910 20911 const showButtonOnHover = (element) => { 20912 const button = element.querySelector('.pagebuilder-banner-button'); 20913 20914 element.addEventListener('mouseover', () => { 20915 button.style.opacity = '1'; 20916 button.style.visibility = 'visible'; 20917 }); 20918 element.addEventListener('mouseout', () => { 20919 button.style.opacity = '0'; 20920 button.style.visibility = 'hidden'; 20921 }); 20922 }; 20923 20924 if (element.dataset.showOverlay === 'hover') { 20925 showOverlayOnHover(element); 20926 } 20927 if (element.dataset.showButton === 'hover') { 20928 showButtonOnHover(element); 20929 } 20930 }; 20931 20932 window.addEventListener('DOMContentLoaded', () => { 20933 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 20934 applyShowOnHover(element); 20935 }); 20936 }); 20937 })(); 20938</script>
vendor: 1 bytes, line 20938
20938
20939<script> 20940 'use strict'; 20941 20942 (() => { 20943 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 20944 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 20945 }); 20946 20947 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 20948 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 20949 20950 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 20951 const tabLink = tabHeader.querySelector('a'); 20952 const tabId = tabLink.getAttribute('href').replace('#', ''); 20953 20954 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 20955 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 20956 20957 if (index === defaultActiveTab) { 20958 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 20959 } 20960 }); 20961 }); 20962 })(); 20963</script>
vendor: 1 bytes, line 20963
20963
20964<script> 20965 'use strict'; 20966 20967 const grecaptchaV2LoadCallbacks = []; 20968 20969 function executeRecaptchaLoadCallbacks () { 20970 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 20971 const callback = grecaptchaV2LoadCallbacks.pop(); 20972 typeof callback === 'string' ? window[callback]() : callback(); 20973 } 20974 } 20975 20976 (function() { 20977 const loadRecaptchaScript = (event) => { 20978 20979 if (window.grecaptcha || !event.target.form) { 20980 return; 20981 } 20982 20983 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 20984 const siteKey = '6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO'; 20985 const script = document.createElement('script'); 20986 script.type = 'text/javascript'; 20987 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 20988 script.async = true; 20989 document.head.appendChild(script); 20990 20991 script.addEventListener('load', () => { 20992 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 20993 }); 20994 } 20995 20996 window.forceLoadRecaptchaScript = (form) => { 20997 loadRecaptchaScript({target: {form: form || 'dummy'}}); 20998 executeRecaptchaLoadCallbacks(); 20999 }; 21000 21001 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 21002 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 21003 21004 }()); 21005 21006</script>
vendor: 1 bytes, line 21006
21006
21007<script> 21008 window.addEventListener("scroll", function() { 21009 var header = document.querySelector('header.page-header'); 21010 var body = document.querySelector("body"); 21011 const header_top = document.querySelector('.header_top'); 21012 const notification4 = document.querySelector('.notification4'); 21013 var top_1 = document.querySelector("header.page-header > .panel.wrapper"); 21014 var content = document.getElementById("textContent"); 21015 21016 21017 if(header_top && notification4){ 21018 if ((header_top.textContent.length > 10) && (notification4.textContent.length > 10)) { 21019 if (window.pageYOffset > 76) { 21020 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 21021 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 21022 document.querySelector('body').classList.add('sticki'); 21023 } else { 21024 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 21025 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 21026 document.querySelector('body').classList.remove('sticki'); 21027 } 21028 } 21029 } 21030 21031 if(header_top && notification4){ 21032 if ((header_top.textContent.length > 10) && (notification4.textContent.length < 10)) { 21033 if (window.pageYOffset > 36) { 21034 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 21035 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 21036 document.querySelector('body').classList.add('sticki'); 21037 } else { 21038 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 21039 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 21040 document.querySelector('body').classList.remove('sticki'); 21041 } 21042 } 21043 } 21044 21045 if(header_top && !notification4){ 21046 if (header_top.textContent.length > 10) { 21047 if (window.pageYOffset > 36) { 21048 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 21049 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 21050 document.querySelector('body').classList.add('sticki'); 21051 } else { 21052 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 21053 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 21054 document.querySelector('body').classList.remove('sticki'); 21055 } 21056 } 21057 } 21058 }); 21059 21060 window.addEventListener("DOMContentLoaded", function() { 21061 window.addEventListener("scroll", function() { 21062 // scroll for plp content sticky 21063 anchor_scroll(); 21064 }); 21065 function anchor_scroll() { 21066 var anchor_scroll = document.querySelector('.anchor-scroll'); 21067 if (!anchor_scroll) { 21068 return; // Exit if the element is not found 21069 } 21070 let sticky = anchor_scroll.offsetTop; 21071 21072 if (window.pageYOffset > sticky) { 21073 anchor_scroll.classList.add("scroll-fixed"); 21074 } else { 21075 anchor_scroll.classList.remove("scroll-fixed"); 21076 } 21077 } 21078 21079 document.querySelectorAll('.anchor-scroll a[href^="."], .at-glance-content a[href^="."]').forEach(anchor => { 21080 anchor.addEventListener('click', function (e) { 21081 e.preventDefault(); 21082 21083 const targetClass = this.getAttribute('href').substring(1); 21084 const targetElement = document.querySelector(`.${targetClass}`); 21085 let anchor_scroll = document.querySelector('.anchor-scroll > div'); 21086 var header_off = document.querySelector('#header').offsetHeight; 21087 if (anchor_scroll) { 21088 var header_off = document.querySelector('#header').offsetHeight + anchor_scroll.offsetHeight; 21089 } else { 21090 var header_off = document.querySelector('#header').offsetHeight; 21091 } 21092 21093 if (targetElement) { 21094 const offset = header_off; 21095 const bodyRect = document.body.getBoundingClientRect().top; 21096 const elementRect = targetElement.getBoundingClientRect().top; 21097 const elementPosition = elementRect - bodyRect; 21098 const offsetPosition = elementPosition - offset; 21099 21100 window.scrollTo({ 21101 top: offsetPosition, 21102 behavior: 'smooth' 21103 }); 21104 } 21105 }); 21106 }); 21107 }); 21108</script>
21108 21109 21110 21111 <section x-cloak x-data="{isLoading: false}" 21112 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 21113 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 21114 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 21115 x-show="isLoading" 21116 x-transition:enter="ease-out duration-200" 21117 x-transition:enter-start="opacity-0" 21118 x-transition:enter-end="opacity-100" 21119 x-transition:leave="ease-in duration-200" 21120 x-transition:leave-start="opacity-100" 21121 x-transition:leave-end="opacity-0"> 21122 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 21123<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 21124 <g fill="none" fill-rule="evenodd"> 21125 <g transform="translate(1 1)" stroke-width="2"> 21126 <circle cx="5" cy="50" r="5"> 21127 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 21128 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 21129 </circle> 21130 <circle cx="27" cy="5" r="5"> 21131 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 21132 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 21133 </circle> 21134 <circle cx="49" cy="50" r="5"> 21135 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 21136 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 21137 </circle> 21138 </g> 21139 </g> 21140<title>loader</title></svg> 21141 <div class="ml-10 text-primary text-xl"> 21142 Loading... </div> 21143</div> 21144 </section> 21145
21146<script> 21147 'use strict'; 21148 21149 function responseSerialize(response) { 21150 if (response.redirected) { 21151 window.location.href = response.url; 21152 } else if (response.ok) { 21153 return response.json(); 21154 } else { 21155 // Check if result is Promise then throw to new Error 21156 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 21157 result; 21158 result = response.text(); 21159 if (typeof result?.then === 'function') { 21160 result.then(res => { 21161 let errorMessage; 21162 try { 21163 errorMessage = JSON.parse(res); 21164 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 21165 } catch (e) { 21166 errorMessage = defaultErrMsg; 21167 } 21168 window.dispatchMessages([ 21169 { 21170 type: 'error', 21171 text: errorMessage 21172 } 21173 ], 3000); 21174 }); 21175 } else { 21176 throw new Error(defaultErrMsg); 21177 } 21178 } 21179 } 21180 21181 if (typeof window.buildRestAPIUrl !== 'function') { 21182 window.buildRestAPIUrl = function (url, params = {}) { 21183 const method = 'rest', 21184 storeCode = 'default', 21185 version = 'V1', 21186 serviceUrl = ':method/:storeCode/:version'; 21187 21188 let urlParts; 21189 21190 params.method = method; 21191 params.storeCode = storeCode; 21192 params.version = version; 21193 21194 url = serviceUrl + url; 21195 21196 urlParts = url.split('/'); 21197 urlParts = urlParts.filter(Boolean); 21198 21199 Object.entries(urlParts).forEach (entry => { 21200 let [key, part] = entry; 21201 part = part.replace(':', ''); 21202 21203 if (params[part] !== undefined) { 21204 urlParts[key] = params[part]; 21205 } 21206 }); 21207 21208 return urlParts.join('/'); 21209 } 21210 } 21211 21212 if (typeof window.isObjectEmpty !== 'function') { 21213 window.isObjectEmpty = function (obj) { 21214 return ( 21215 Object.prototype.toString.call(obj) === '[object Object]' && 21216 JSON.stringify(obj) === '{}' 21217 ); 21218 } 21219 } 21220 21221 if (typeof window.mergeDeep !== 'function') { 21222 /** 21223 * Deep merge two objects. 21224 * 21225 * @param target 21226 * @param sources 21227 * @returns {*} 21228 */ 21229 window.mergeDeep = (target, ...sources) => { 21230 /** 21231 * Simple object check. 21232 * 21233 * @param item 21234 * @returns {boolean} 21235 */ 21236 const isObject = (item) => { 21237 return (item && typeof item === 'object' && !Array.isArray(item)); 21238 }; 21239 21240 if (!sources.length) return target; 21241 const source = sources.shift(); 21242 21243 if (isObject(target) && isObject(source)) { 21244 for (const key in source) { 21245 if (isObject(source[key])) { 21246 if (!target[key]) Object.assign(target, { [key]: {} }); 21247 mergeDeep(target[key], source[key]); 21248 } else { 21249 Object.assign(target, { [key]: source[key] }); 21250 } 21251 } 21252 } 21253 21254 return mergeDeep(target, ...sources); 21255 } 21256 } 21257</script>
21257 21258 21259<div x-data="{...hyva.modal(), ...initAmcartDialogPopup()}" 21260 x-init="initDialogPopup($dispatch)" 21261 x-spread="eventListeners" 21262 x-bind="eventListeners"> 21263 <div x-cloak x-spread="overlay('amcart-dialog-popup')" x-bind="overlay('amcart-dialog-popup')" 21264 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-30"> 21265 <div x-ref="amcart-dialog-popup" role="dialog" aria-labelledby="amcart-dialog-popup-content" 21266 class="flex flex-col max-h-screen max-w-4xl overflow-auto bg-amcart-background shadow-xl rounded-lg p-4"> 21267 <div class="flex justify-between pb-4 border-b"> 21268 <div x-text="title" class="text-2xl font-extrabold text-amcart-text"></div> 21269 <button @click="$dispatch('amcart-close-dialog-popup')" 21270 aria-label="Close" 21271 class="text-gray-300 transition hover:text-black hover:drop-shadow-md"> 21272 <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"> 21273 <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"/> 21274<title>x</title></svg> 21275 </button> 21276 </div> 21277 <div id="amcart-dialog-popup-content" class="amcart-dialog-popup-content"></div> 21278 <div class="flex flex-row pt-3 border-t"> 21279 <template x-for="(button, index) in buttons" :key="index"> 21280 <button class="btn mr-4 last:mr-0 text-amcart-button hover:brightness-105 hover:shadow-lg" 21281 :class="{ 21282 'bg-amcart-continue-btn hover:bg-amcart-continue-btn': index === 0, 21283 'bg-amcart-view-cart-btn hover:bg-amcart-view-cart-btn': index === 1 21284 }" 21285 :aria-label="button.name" 21286 x-html="button.name" 21287 @click="dispatchButtonAction(button.action.name, button.action.payload)"></button> 21288 </template> 21289 </div> 21290 </div> 21291 </div> 21292</div> 21293
21294<script> 21295 'use strict'; 21296 21297 function initAmcartDialogPopup() { 21298 const dialogPopupName = 'amcart-dialog-popup'; 21299 const selectors = { 21300 addToCartForm: '.amcart-product-info #amcart_product_addtocart_form', 21301 ratingSummarySelector: '.amcart-product-info .rating-summary' 21302 } 21303 21304 return { 21305 eventListeners: { 21306 ['@amcart-open-dialog-popup.window']({detail: popupData}) { 21307 // Close any existing modal before opening 21308 window.hyva.modal.pop(); 21309 21310 this.initPopupWithData(popupData); 21311 this.$nextTick(() => { 21312 this.show(dialogPopupName); 21313 }); 21314 }, 21315 ['@amcart-close-dialog-popup']() { 21316 this.hide(dialogPopupName); 21317 }, 21318 ['@amcart-dialog-submit']({ detail: actionToDispatch }) { 21319 const form = document.querySelector(selectors.addToCartForm); 21320 21321 if (form.checkValidity()) { 21322 this.dispatch(actionToDispatch, form); 21323 this.hide(dialogPopupName); 21324 } else { 21325 form.reportValidity(); 21326 } 21327 }, 21328 ['@amcart-hide-popup']() { 21329 this.hide(dialogPopupName); 21330 } 21331 }, 21332 title: '', 21333 buttons: [], 21334 message: '', 21335 selected_options: null, 21336 dispatch: null, 21337 21338 /** 21339 * @param {Object} $dispatch 21340 * @return {void} 21341 */ 21342 initDialogPopup: function ($dispatch) { 21343 this.dispatch = $dispatch; 21344 }, 21345 21346 /** 21347 * @param {CartResponse} popupData 21348 * @return {void} 21349 */ 21350 initPopupWithData: function (popupData) { 21351 this.title = popupData.title; 21352 this.buttons = popupData.buttons; 21353 this.selected_options = popupData.selected_options; 21354 hyva.replaceDomElement('#amcart-dialog-popup-content', this.preprocessMessage(popupData.message)); 21355 this.$nextTick(() => { 21356 this.postProcessPopupContent(); 21357 }); 21358 }, 21359 21360 /** 21361 * @param {string} message 21362 * @return {string} 21363 */ 21364 preprocessMessage: function (message) { 21365 /** 21366 * Disable labels for input inside popup due to the possibility of their duplication on the page. 21367 * Because this can lead to unexpected behaviour. 21368 * 21369 * Make form id unique for popup 21370 */ 21371 return message 21372 .replaceAll(':for=', 'for-data=') 21373 .replaceAll('product_addtocart_form', 'amcart_product_addtocart_form'); 21374 }, 21375 21376 /** 21377 * @return {void} 21378 */ 21379 postProcessPopupContent: function () { 21380 this.disableRatingSummary(); 21381 this.clickSelectedOptions(); 21382 }, 21383 21384 /** 21385 * @return {void} 21386 */ 21387 disableRatingSummary: function () { 21388 const ratingSummaryElement = document.querySelector(selectors.ratingSummarySelector); 21389 21390 if (!!ratingSummaryElement) { 21391 ratingSummaryElement.removeAttribute('onClick'); 21392 ratingSummaryElement.classList.remove('cursor-pointer'); 21393 } 21394 }, 21395 21396 /** 21397 * @return {void} 21398 */ 21399 clickSelectedOptions: function () { 21400 if (!this.selected_options) { 21401 return; 21402 } 21403 21404 for(const [attributeId, attributeValue] of Object.entries(this.selected_options)) { 21405 const swatchOptionTemplate = document.querySelector( 21406 `.amcart-product-info template[x-for*="attributes[${attributeId}]"]` 21407 ); 21408 21409 if (!!swatchOptionTemplate && !!swatchOptionTemplate.parentElement) { 21410 const swatchInput = swatchOptionTemplate.parentElement 21411 .querySelector(`input[value="${attributeValue}"]`); 21412 swatchInput && swatchInput.click(); 21413 } 21414 } 21415 }, 21416 21417 /** 21418 * @param {string} name 21419 * @param {string|undefined} payload 21420 * @return {void} 21421 */ 21422 dispatchButtonAction: function (name, payload) { 21423 this.dispatch(name, payload); 21424 } 21425 }; 21426 } 21427</script>
21427 21428
21429<script> 21430 (function () { 21431 'use strict'; 21432 21433 const addToCartProductListFormSelector = '.product_addtocart_form'; 21434 const addToCartProductPageFormSelector = '#product_addtocart_form'; 21435 const setFormsEvent = function () { 21436 const productListForms = document.querySelectorAll(addToCartProductListFormSelector); 21437 const productPageForm = document.querySelector(addToCartProductPageFormSelector); 21438 21439 productPageForm && addDispatcher(productPageForm); 21440 productListForms.forEach((form) => { 21441 // disable html5 validation 21442 form.setAttribute('novalidate', ''); 21443 addDispatcher(form); 21444 }); 21445 } 21446 21447 const addDispatcher = function(form) { 21448 form.removeAttribute('@submit'); 21449 form.removeAttribute('@submit.prevent'); 21450 form.setAttribute('x-data', ''); 21451 form.setAttribute('x-on:submit.prevent', '$dispatch(\'amcart-add-to-cart-action\', $el)'); 21452 } 21453 21454 setFormsEvent(); 21455 21456 window.addEventListener('amcart-set-forms-event', setFormsEvent); 21457 })(); 21458</script>
21458 21459
21460<script> 21461 (function () { 21462 'use strict'; 21463 21464 /** 21465 * @typedef {Object} CartResponse 21466 * 21467 * Popup common props 21468 * @property {[ 21469 * name: string, 21470 * action: { 21471 * name: string, 21472 * payload: string|undefined 21473 * } 21474 * ]|undefined} buttons 21475 * @property {string|undefined} popup_action 21476 * @property {string|undefined} message 21477 * @property {string|undefined} title 21478 * 21479 * DialogPopup props 21480 * @property {string|null|undefined} selected_options 21481 * 21482 * ConfirmationPopup props 21483 * @property {string|undefined} align 21484 * @property {string|undefined} checkout 21485 * @property {string|undefined} product_id 21486 * @property {string|undefined} product_sku 21487 * @property {string|undefined} related 21488 * @property {number|undefined} timer 21489 * 21490 * Redirect props 21491 * @property {string|undefined} redirect url to redirect 21492 */ 21493 21494 let globalActionName; 21495 21496 const addToCartAction = ({detail: form}) => { 21497 const isProductForm = form.id === 'product_addtocart_form'; 21498 21499 globalActionName = getCartAction(form); 21500 21501 if (isProductForm) { 21502 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 21503 21504 if (form.checkValidity()) { 21505 performRequest(form, isProductForm); 21506 } 21507 } else { 21508 performRequest(form, isProductForm) 21509 } 21510 }; 21511 21512 const performRequest = function (form, isProductForm) { 21513 const cartUrl = `${BASE_URL}amasty_cart/cart/${getCartAction(form)}`; 21514 const isProductPage = document.body.classList.contains('catalog-product-view'); 21515 const headers = { 21516 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 21517 }; 21518 const formData = new FormData(form); 21519 formData.set('product_page', isProductPage && isProductForm); 21520 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 21521 formData.set('form_key', hyva.getFormKey()); 21522 !formData.get('id') && formData.get('item') && formData.set('id', formData.get('item')); 21523 21524 const body = new URLSearchParams(formData); 21525 21526 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 21527 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: form })); 21528 21529 fetch(cartUrl, {headers: {...headers}, body: body, method: 'POST'}) 21530 .then(response => response.json()) 21531 .then((result) => { 21532 resultActionResolver.resolve(result); 21533 const relatedProductDialog = document.querySelector('.related-product-dialog-wrapper'); 21534 const cartLink = document.getElementById('menu-cart-icon'); 21535 const isRelatedProductForm = form.closest('.related-products-pdp-section'); 21536 if (relatedProductDialog && !isRelatedProductForm) { 21537 setTimeout(() => { 21538 window.dispatchEvent( 21539 new CustomEvent('hyva-modal-show', { detail: { dialog: 'related-product-slider-dialog' } }) 21540 ); 21541 }, 2000); 21542 } else if (cartLink) { 21543 cartLink.click(); 21544 } 21545 }).catch((error) => { 21546 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 21547 [{ 21548 type: "error", 21549 text: error 21550 }], 5000 21551 ); 21552 }).finally(() => { 21553 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 21554 }); 21555 }; 21556 21557 const getCartAction = function(formNode) { 21558 return formNode.action.includes('updateItemOptions') 21559 ? `UpdateItemOptions` 21560 : 'add'; 21561 }; 21562 21563 const resultActionResolver = { 21564 /** 21565 * @param {CartResponse} result 21566 */ 21567 resolve: function (result) { 21568 21569 if(typeof result.is_add_to_cart != "undefined"){ 21570 var msg = result.message; 21571 /*if($($.parseHTML(result.message)).filter(".message.error").text()){ 21572 msg = $($.parseHTML(result.message)).filter(".message.error").text(); 21573 }*/ 21574 21575 var parser = new DOMParser(); 21576 var doc = parser.parseFromString(result.message, 'text/html'); 21577 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 21578 21579 if (errorMsg) { 21580 msg = errorMsg; 21581 } 21582 21583 window.dispatchMessages && window.dispatchMessages([{ 21584 type: 'error', 21585 text: msg 21586 }]); 21587 21588 } 21589 switch (true) { 21590 case !!result.popup_action: 21591 var parser = new DOMParser(); 21592 var doc = parser.parseFromString(result.message, 'text/html'); 21593 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 21594 if (errorMsg) { 21595 msg = errorMsg; 21596 window.dispatchMessages && window.dispatchMessages([{ 21597 type: 'error', 21598 text: msg 21599 }]); 21600 } else { 21601 window.dispatchEvent(new CustomEvent(result.popup_action, {detail: result})); 21602 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 21603 21604 if (globalActionName == 'UpdateItemOptions') { 21605 window.location.href = `${BASE_URL}checkout/cart`; 21606 } 21607 } 21608 break; 21609 case !!result.redirect: 21610 window.location.href = result.redirect; 21611 break; 21612 } 21613 } 21614 } 21615 21616 if (document.body.classList.contains('catalog-category-view')) { 21617 hyva.getBrowserStorage().setItem( 21618 'last_category_id', 21619 '2333' 21620 ); 21621 } 21622 21623 const groupedOptions = document.querySelector('div[x-data^=initGroupedOptions]'); 21624 21625 if (!!groupedOptions) { 21626 groupedOptions.setAttribute('x-on:amcart-trigger-grouped-form-validate.window', 'validateForm()'); 21627 } 21628 21629 window.addEventListener('amcart-add-to-cart-action', addToCartAction); 21630 })(); 21631</script>
21631<script> 21632 (function () { 21633 'use strict'; 21634 21635 const addToQuoteButtonSelector = '.amquote-addto-button:not(.amasty-quote-login):not(.amasty-quote-link)'; 21636 document.querySelectorAll(addToQuoteButtonSelector).forEach((button) => { 21637 if (!button.hasAttribute('x-data')) { 21638 button.setAttribute('x-data', ''); 21639 } 21640 21641 button.removeAttribute('@click.prevent'); 21642 button.setAttribute( 21643 'x-on:click.prevent', 21644 '$dispatch(\'amcart-add-to-quote-action\', $el)'); 21645 }); 21646 })(); 21647</script>
vendor: 1 bytes, line 21647
21647
21648<script> 21649 (function () { 21650 'use strict'; 21651 21652 const addToQuoteAction = ({ detail: element }) => { 21653 const formNode = element.nodeName === 'FORM' 21654 ? element 21655 : element.form ?? element.closest('form'); 21656 21657 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 21658 if (!formNode || !formNode.checkValidity()) { 21659 return formNode?.reportValidity(); 21660 } 21661 21662 performRequest(formNode); 21663 } 21664 21665 const performRequest = (formNode) => { 21666 const url = `${BASE_URL}amasty_cart/quote/${getAction(formNode)}`; 21667 const headers = { 21668 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 21669 }; 21670 const formData = new FormData(formNode); 21671 const isProductPage = formNode.id === 'product_addtocart_form' 21672 && document.body.classList.contains('catalog-product-view'); 21673 formData.set('product_page', isProductPage); 21674 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 21675 formData.set('id', formData.get('item')); 21676 21677 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 21678 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: formNode })); 21679 21680 fetch(url, { headers: { ...headers }, body: new URLSearchParams(formData), method: 'POST' }) 21681 .then(response => response.json()) 21682 .then((result) => { 21683 switch (true) { 21684 case !!result.popup_action: 21685 window.dispatchEvent(new CustomEvent(result.popup_action, { detail: result })); 21686 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 21687 break; 21688 case !!result.redirect: 21689 window.location.href = result.redirect; 21690 break; 21691 } 21692 }).catch((error) => { 21693 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 21694 [{ 21695 type: "error", 21696 text: error 21697 }], 5000 21698 ); 21699 }).finally(() => { 21700 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 21701 }); 21702 }; 21703 21704 const getAction = (formNode) => { 21705 return (formNode.action.includes('amasty_quote') && formNode.action.includes('updateItemOptions')) 21706 ? 'updateItemOptions' 21707 : 'add'; 21708 }; 21709 21710 window.addEventListener('amcart-add-to-quote-action', addToQuoteAction); 21711 })(); 21712</script>
21712 21713 21714 21715
21715<script> 21716 'use strict'; 21717 21718 (function () { 21719 const initCompareFunctions = ['initCompareOnProductList', 'initCompareOnProductView']; 21720 21721 initCompareFunctions.forEach(compareFunction => { 21722 window[compareFunction] = function () { 21723 return { 21724 addToCompare: function (productId) { 21725 var loader=document.getElementById('loading'); 21726 console.log("11111111"); 21727 loader.style.display='block'; 21728 console.log("Add To compare amasty ajax cart qqqqq"); 21729 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 21730 const headers = { 21731 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 21732 }; 21733 const body = new URLSearchParams({ 21734 form_key: hyva.getFormKey(), 21735 product: productId, 21736 is_ajax: true 21737 }); 21738 21739 fetch(postUrl, {headers: headers, body: body, method: 'POST'}).then((response) => { 21740 if (response.redirected) { 21741 window.location.href = response.url; 21742 } else if (response.ok) { 21743 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 21744 } else { 21745 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 21746 [{ 21747 type: "warning", 21748 text: "Could not add item to the comparison list." 21749 }], 21750 1000 21751 ); 21752 } 21753 }).catch((error) => { 21754 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 21755 [{ 21756 type: 'error', 21757 text: error 21758 }], 21759 1000 21760 ); 21761 }); 21762 } 21763 }; 21764 }; 21765 }); 21766 })(); 21767 </script>
21767 21768 21769 21770 21771 21772 21773<section x-data="{isLoading: false}" x-cloak 21774 @amcart-loading-start.window="isLoading = true" 21775 @amcart-loading-stop.window="isLoading = false"> 21776 </section> 21777 21778<div x-data="prDataPrivacyCheckboxDetailModalComponent.create()" 21779 @set-is-show-modal.window="isShowModal = $event.detail" 21780 @keydown.escape="closeModal" 21781> 21782 <div x-ref="pr-data-privacy-checkbox-detail" x-show="isShowModal" x-cloak> 21783 <div class="inset-0 fixed z-50"> 21784 <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" 21785 x-show="isShowModal" x-transition 21786 > 21787 <span class="absolute top-3 right-3 cursor-pointer hover:text-gray-700 p-1" @click="closeModal"> 21788 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" role="img"> 21789 <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"/> 21790<title>x</title></svg> 21791 </span> 21792 <template x-if="data.checkbox"> 21793 <div id="prgdpr-consent-checkboxes-modal" class="flex flex-col"> 21794 <div class="modal-header flex flex-col flex-shrink-0 flex-grow-0 mb-5"> 21795 <h2 class="text-xl lg:text-2lx pb-3 mb-1 border-container border-b" x-html="data.checkbox.policy.title"></h2> 21796 <a data-contentid="prgdpr-print-content" 21797 class="ml-auto text-sm text-blue-600 hover:underline" 21798 href="#" 21799 @click.prevent="print()" 21800 > 21801 Print </a> 21802 </div> 21803 <div class="prgdpr-consent-checkboxes-item-content overflow-y-auto mb-5" id="prgdpr-print-content"> 21804 <div class="prose max-w-none" x-html="data.checkbox.policy.content"></div> 21805 </div> 21806 <div class="modal-footer flex-shrink-0 flex-grow-0 pt-5 mt-auto border-container border-t"> 21807 <button type="button" 21808 class="action iagree btn btn-primary" 21809 @click="data.checkbox.checked = data.checkbox.isAlreadyChecked = true; $dispatch('prgdpr-checkbox-agree', 'checkbox' + data.checkbox.consentId); closeModal();" 21810 > 21811 I agree </button> 21812 </div> 21813 </div> 21814</template> 21815 </div> 21816 21817 <div class="bg-gray-800 opacity-50 absolute inset-0" @click="closeModal"></div> 21818 </div> 21819 </div> 21820</div> 21821
21822<script> 21823 const prDataPrivacyCheckboxDetailModalComponent = { 21824 data: null, 21825 isShowModal: false, 21826 create: function () { 21827 this.data = Alpine.reactive({checkbox: null}); 21828 return this; 21829 }, 21830 setCheckbox: function (checkbox) { 21831 this.data.checkbox = checkbox; 21832 }, 21833 showModal: function () { 21834 this.isShowModal = true; 21835 }, 21836 closeModal() { 21837 this.isShowModal = false; 21838 }, 21839 print: function () { 21840 let printWindow = window.open('', 'Print', 'height=600,width=800'); 21841 printWindow.document.write( 21842 `<html><head><title>${this.data.checkbox.policy.title}</title><link rel="next" href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html?p=2" /> 21843</head><body>${this.data.checkbox.policy.content}</body></html` 21844 ); 21845 printWindow.document.close(); 21846 printWindow.focus(); 21847 printWindow.print(); 21848 printWindow.onafterprint = function () { 21849 printWindow.close(); 21850 }; 21851 21852 return true; 21853 } 21854 }; 21855</script>
21855 21856
21857<script> 21858 window.addEventListener('load', function () { 21859 magentoStorefrontEvents.context.setPage({ 21860 pageType: "Category" 21861 }); 21862 magentoStorefrontEvents.context.setContext("pageExtended", { 21863 action: "category-view" 21864 }); 21865 magentoStorefrontEvents.context.setCategory({"name":"All Rubber Flooring","urlKey":"all-rubber-flooring","urlPath":"shop\/rubber-flooring\/all-rubber-flooring"}); 21866 }); 21867 21868 window.addEventListener('productAddToCart', function () { 21869 const browserStorage = hyva.getBrowserStorage(); 21870 let dataServicesProductContext = JSON.parse(browserStorage.getItem('dataservices_product_context')); 21871 21872 if (dataServicesProductContext){ 21873 magentoStorefrontEvents.context.setProduct(dataServicesProductContext); 21874 magentoStorefrontEvents.publish.addToCart(); 21875 } 21876 }); 21877 21878 function dataServicesAddToCartTracking() { 21879 return { 21880 checkIfProductIsAddedToBasket: function (data) { 21881 const browserStorage = hyva.getBrowserStorage(); 21882 21883 if (browserStorage && data.cart) { 21884 let cartSummaryCount = data.cart.summary_count; 21885 let storageSummaryCount = browserStorage.getItem('cart_summary_count') || 0; 21886 21887 if (cartSummaryCount > storageSummaryCount) { 21888 window.dispatchEvent(new Event("productAddToCart")); 21889 } 21890 21891 browserStorage.setItem('cart_summary_count', data.cart.summary_count); 21892 browserStorage.setItem('dataservices_product_context', JSON.stringify(data.cart.dataservices_product_context)); 21893 } 21894 } 21895 } 21896 } 21897</script>
21897 21898 21899<div x-data="dataServicesAddToCartTracking()" 21900 @private-content-loaded.window="checkIfProductIsAddedToBasket($event.detail.data)"></div>
21901<script> 21902 function adobeProductRecsDataFetcher() { 21903 "use strict"; 21904 return { 21905 pagePreconfiguredDeferred: {}, 21906 productBanners: '', 21907 fetchData: function () { 21908 let self = this; 21909 let storefrontEvents = window.magentoStorefrontEvents; 21910 21911 storefrontEvents.context.setContext("recsContext", { 21912 alternateEnvironmentId: "" 21913 }); 21914 21915 this.pagePreconfiguredDeferred = new Promise((resolve, reject) => { 21916 self.pagePreconfiguredDeferred.resolve = resolve; 21917 self.pagePreconfiguredDeferred.reject = reject; 21918 }) 21919 21920 document.addEventListener("recsRequestSent", (function () { 21921 storefrontEvents.publish.recsRequestSent(); 21922 })); 21923 21924 window.addEventListener("recsResponseReceived", (function (n) { 21925 let rec = storefrontEvents.context.getRecommendations(); 21926 21927 rec = n.detail, storefrontEvents.context.setRecommendations({ 21928 units: rec 21929 }); 21930 storefrontEvents.publish.recsResponseReceived(); 21931 })); 21932 21933 this.fetchRecommendationsData(); 21934 }, 21935 fetchRecommendationsData: function () { 21936 let client; 21937 let promise = new Promise(function(resolve, reject) { 21938 let interval = setInterval(() => { 21939 client = new RecommendationsClient(); 21940 if(client._environmentId !== "") { 21941 clearInterval(interval); 21942 resolve(); 21943 } 21944 }, 300); 21945 }) 21946 .then(() => { 21947 document.dispatchEvent(new Event("recsRequestSent")); 21948 client.fetchPreconfigured().then(response => { 21949 const units = response.data.results; 21950 const filteredUnits = units.filter(unit => unit.products.length); 21951 const responseEvent = new CustomEvent("recsResponseReceived", { 21952 detail: filteredUnits, 21953 }); 21954 21955 window.dispatchEvent(responseEvent); 21956 }); 21957 }); 21958 } 21959 } 21960 } 21961</script>
21961 21962<div x-data="adobeProductRecsDataFetcher()" x-init="fetchData()"></div> 21963
21964<script> 21965 function expandFilters(){ 21966 const idxs = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]; 21967 let filters = document.querySelectorAll('.sidebar.sidebar-main div.filter-option'); 21968 21969 if(filters.length == 0) { 21970 filters = document.querySelectorAll('.column.main div.filter-option'); 21971 } 21972 21973 filters.forEach(function (filter, idx) { 21974 const isOpen = idxs.includes(idx) ? 'true' : 'false'; 21975 filter.setAttribute('x-data', '{open: ' + isOpen + ', id: '+ idx + '}') 21976 }) 21977 } 21978 21979 expandFilters(); 21980</script>
21980 21981 21982 21983
21984<script> 21985 function initDefaultAjaxToolbar () { 21986 const toolbars = document.querySelectorAll('.toolbar.toolbar-products'); 21987 21988 // init ajax toolbar 21989 toolbars.forEach(function (toolbar) { 21990 let xData = toolbar.getAttribute('x-data'); 21991 xData = '{...' + xData + ', ...initAjaxToolbar()}'; 21992 21993 toolbar.setAttribute('x-data', xData); 21994 }); 21995 21996 // init ajax pager 21997 let pagerItems = document.querySelectorAll('.toolbar.toolbar-products .pages-items a'); 21998 21999 pagerItems.forEach(function (item) { 22000 item.addEventListener('click', function (e) { 22001 e.preventDefault(); 22002 22003 initApplier().apply(item.href); 22004 }); 22005 }); 22006 22007 let horizontalNavOnSearch = document.querySelector('.catalogsearch-result-index .mst-nav__horizontal-bar'); 22008 22009 if (horizontalNavOnSearch) { 22010 let nav = horizontalNavOnSearch.cloneNode(true); 22011 22012 let replacer = document.querySelector('#m-navigation-replacer'); 22013 replacer.parentNode.insertBefore(nav, replacer.nextSibling); 22014 22015 horizontalNavOnSearch.parentNode.removeChild(horizontalNavOnSearch); 22016 } 22017 } 22018 initDefaultAjaxToolbar(); 22019</script>
vendor: 1 bytes, line 22019
22019
22020<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"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/www.flooringinc.com\/shop.html","name":"Flooring By Category","@type":"WebPage"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.flooringinc.com\/shop\/rubber-flooring.html","name":"Rubber Flooring","@type":"WebPage"}},{"@type":"ListItem","position":4,"item":{"@id":"https:\/\/www.flooringinc.com\/shop\/rubber-flooring\/all-rubber-flooring.html","name":"All Rubber Flooring","@type":"WebPage"}}]}</script>
22020<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>
22020<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>
22020<script type="application/ld+json">[{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)","sku":"14000","description":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)","image":"https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_v7nl7dt4kd5jhbbcdul019vu7a\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#offer-14000","price":0.99,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":3.96,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"14000","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.49","reviewCount":"39","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Michelle T."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"},"datePublished":"2026-08-27","name":"Gives true gym feel underfoot","reviewBody":"Made a big difference in our garage gym. We had first tried cheaper puzzle piece flooring and returned it and got this instead. So much better. Worth the money."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"},"datePublished":"2026-06-18"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"},"datePublished":"2026-05-18"},{"@type":"Review","author":{"@type":"Person","name":"Crisp Academy"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"},"datePublished":"2026-05-01","name":"Highly Recommend","reviewBody":"We are very pleased with the rubber flooring we ordered. The entire process from ordering to installation was easy. Customer service was extremely helpful when we had questions. I would and will recommend Flooring Inc to anyone wishing to purchase rubber flooring."},{"@type":"Review","author":{"@type":"Person","name":"AG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/rubber-gym-rolls-14000.html#group","name":"Rubber Gym Flooring Rolls - 4ft Wide (Custom Cut)"},"datePublished":"2026-05-01","name":"Gym floor","reviewBody":"Great flooring. Perfect for home gym. Fast delivery too!"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring","sku":"1006","description":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_0ljk07003h6q14fc1jfohkob07\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#offer-1006","price":1.58,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":6.33,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1006","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.87","reviewCount":"364","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Annie"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-09-21","name":"Great flooring but a few notes","reviewBody":"We've had this down for about a week now. The product is truly great quality for uniformity of color, thickness, how flat and evenly it lays down, and size from roll to roll. It is very dense and very heavy (a 22 foot roll weighs about 225 lbs) so it will definitely last under the toughest conditions. That said, it's best if you have a few people moving it into position and a heavy duty utility knife to cut edges. Also, it off-gases a mild\/moderate rubber smell at first so having some ventilation will be helpful during this time."},{"@type":"Review","author":{"@type":"Person","name":"SJK"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-04-28","name":"Great product for any gym.","reviewBody":"Ordered 5, 21\u2019 rolls to cover a 20x20 gym space. Shipping was as in the timeframe stated when ordering and product was as expected. There was damage to one end of 1 of the rolls but that was the end we trimmed off to fit so wasn\u2019t an issue for us. My husband and I laid and cut the floor ourselves and I think it turned out great! Haven\u2019t moved in yet so have not used it yet but looking forward to it."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-03-12"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-02-24"},{"@type":"Review","author":{"@type":"Person","name":"John"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-8-heavy-duty-rubber-rolls-1006.html#group","name":"3\/8\" Heavy Duty Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-02-21","name":"garage flooring","reviewBody":"Just purchased 3\/8\" heavy duty rubber mats(rolls) for a garage gym. Best price i could find, and that's including cost of delivery. Product is high quality and dense. \nFar superior to the foam mats I used before."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring","sku":"1007","description":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_6j9g5b7d417s940035ituhll5s\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#offer-1007","price":2.07,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":8.29,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1007","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.90","reviewCount":"171","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Edwin"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-08-14","name":"Rubber Flooring for Garage Gym","reviewBody":"Purchased these for my revamped garage gym. Excellent quality and perfect for my particular use case. The width of the 3 rolls were cut perfectly per my order and the measurements that I provided to the representative. Unfortunately length
22020wise they were not cut to what I had specified. Spent an inordinate amount of time trying to cut the 3 rolls of rubber evenly. \nEven with that being said, the quality is excellent. No offensive odor present. My garage gym looks great and the rubber flooring absorbs the impact from the dumbbells and barbells. Footing is secure compared to the underlying concrete. \nAssistance from the sales representative was outstanding. I will purchase from this company again in the future."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-05-14"},{"@type":"Review","author":{"@type":"Person","name":"Zoran"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-05-01","name":"Great price, better and faster than expected","reviewBody":"Purchasing online was straight forward and quick. The rubber rolls got delivered much sooner than initially scheduled! The rubber is exactly what we were hoping for, and the price and selection and sizing flexibility is better than any other supplier we foud. Thank you!"},{"@type":"Review","author":{"@type":"Person","name":"Garage Triage"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-02-13","name":"Love the flooring rolls!","reviewBody":"The new rubber flooring turned out fantastic!"},{"@type":"Review","author":{"@type":"Person","name":"Imran T"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-rubber-rolls-1007.html#group","name":"1\/2\" Mega Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2026-02-09","name":"Top notch product and customer service","reviewBody":"Excellent product customer service. No issue at all product was delivered before anticipated shipping time."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring","sku":"14027","description":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_q6ghia3svl22d05llqmd9o6e59\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#offer-14027","price":1.65,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":8.25,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":5,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Flooring Inc. Exclusives"},"mpn":"14027","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.79","reviewCount":"29","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"EK NC"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"},"datePublished":"2026-05-01","name":"Highly Recommend","reviewBody":"9mm, gray flake. It looks and feels great. Using for a home gym. Rolls ended up 1\u201d wider than 5 ft. The manufacturer was able to add length to my roll last minute because my measurement was off. Very heavy around 190lbs a roll, so consider that. Need to use a lot of blades to cut and size in the space as the material dulls them quick."},{"@type":"Review","author":{"@type":"Person","name":"Pomp"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"},"datePublished":"2026-02-14"},{"@type":"Review","author":{"@type":"Person","name":"OOG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"},"datePublished":"2026-02-03"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"},"datePublished":"2026-01-29"},{"@type":"Review","author":{"@type":"Person","name":"JD"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/nextgen-xl-rubber-rolls-pro-series-14027.html#group","name":"NextGen XL Rubber Rolls - Pro Series | 5ft Wide, Custom-Cut, Commercial-Grade Flooring"},"datePublished":"2026-01-13"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut","sku":"14003","description":"Next-Day Rubber Rolls \u2013 Custom Cut","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_vs7c8nfvu14a58j9fqhd9hm95l\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#offer-14003","price":1.19,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":4.76,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"14003","aggregateRating":{"@type":"AggregateRating","ratingValue":"5.00","reviewCount":"11","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Elise"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut"},"datePublished":"2026-05-21","name":"Excellent and durable flooring.","reviewBody":"I have purchased the gym flooring twice. One is 3\/4 thickness and the other 1\/2 thickness. It is really good quality and perfect for my heavy gym machines. It is easy to do easy to clean. If you need durable flooring for heavy equipment, this is the flooring you want."},{"@type":"Review","author":{"@type":"Person","name":"Pomp"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut"},"datePublished":"2026-02-14"},{"@type":"Review","author":{"@type":"Person","name":"OOG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut"},"datePublished":"2026-02-03"},{"@type":"Review","author":{"@type":"Person","name":"Madmicjama"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut"},"datePublished":"2025-10-30","name":"Flooring used for a border on the walls in the gym","reviewBody":"Got just what we needed for the gym border!"},{"@type":"Review","author":{"@type":"Person","name":"JG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/next-day-rubber-rolls-14003.html#group","name":"Next-Day Rubber Rolls \u2013 Custom Cut"},"datePublished":"2025-10-03","name":"I like m' thick","reviewBody":"Excellent quality rolls. Seams match perfectly. Strongly recommended!"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles","sku":"14025","description":"Goliath XL Rubber Tiles","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_i08d85b9il1gv6atc43au0l069\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#offer-14025","price":1.96,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":30.11,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":15.34,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"14025","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.40","reviewCount":"5","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Prince WilliG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles"},"datePublished":"2025-07-08","name":"Great big rubber tile"},{"@type":"Review","author":{"@type":"Person","name":"Berende Homes LLC"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles"},"datePublished":"2025-06-09","name":"Great rubber floors!!!"},{"@type":"Review","author":{"@type":"Person","name":"Saylor"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles"},"datePublished":"2025-05-15"},{"@type":"Review","author":{"@type":"Person","name":"Jenny"},"reviewRating":{"@type":"Rating","ratingValue":"4","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles"},"datePublished":"2026-08-01","name":"Great floors","reviewBody":"I\u2019ve order twice now! Great products. \nI will say the communication for delivery is not great. Both times now the delivery showed up unexpectedly. Once the order is processed and \u201cshipped\u201d I\u2019d ensure to actively check the tracking!"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"3","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/goliath-xl-rubber-tiles-14025.html#group","name":"Goliath XL Rubber Tiles"},"datePublished":"2025-11-22"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#group","name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","sku":"4067","description":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_9frh11qnvl3e54fsvr44mrvo61\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#offer-4067","price":4.45,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":22.09,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":21.09,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"4067","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.75","reviewCount":"4","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Keith"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#group","name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-06-26","name":"Superior Gym Flooring","reviewBody":"I have a fairly large workout room in my basement. Recently we decided to renovate and make it even larger. Since I do quite a bit of heavy lifting with dead lifts, squats, etc. I felt it necessary to get a nice thick floor covering. I submitted a few queries regarding several of their products and they contacted me, via email, to discuss my needs. Once settled on the 3\/4\" Rubber Gym Tiles they worked with me to order the optimal number of tiles that were needed. I sent them a drawing of the new area and they laid out the tiles the most efficient manner possible. Once ordered they arrived on time and I proceeded to install them myself. Keep in mind that each tile weights approximately 50lb, I had 34 tiles so around 1700lbs. Needless to say it took a full day to lay them out and make cuts where appropriate. I ended up with 3 tiles left over; however, that was because I was lucky on a few of my cuts where the discarded piece was able to be used on the opposite side of the room. Needless to say my home gym looks like a professional gym tucked into my basement. Great customer service, great product and very happy with the results."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#group","name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-06-26","name":"Great Mats","reviewBody":"Love these mat!. Commercial gym quality. Complete protection for your floors - heavy weights can be dropped on them without worry. The only downside is the noxious fumes when new. It's been almost a month since I installed them and I can't get rid of the awful odor, but to be fair, any commercial type mats will smell like this in the beginning."},{"@type":"Review","author":{"@type":"Person","name":"Kathy"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#group","name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-01-10","name":"Durable","reviewBody":"Love our new matts! We got 3\/4in; 2x2. We have a ton of weight on the matts and it hasn't budge. It also has amazing grip! We installed it ourself. The matts do get heavy after awhile ??. Cutting them was tough but not impossible. Rubber smell went away after 2 weeks. We are happy and know it will last!"},{"@type":"Review","author":{"@type":"Person","name":"William T."},"reviewRating":{"@type":"Rating","ratingValue":"4","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-rubber-gym-tiles-4067.html#group","name":"3\/4\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-01-08","name":"Industrial strength","reviewBody":"Floor is very good value. At 3\/4\u201d thickness and large format tiles, it installs fairly quickly. Takes a while to degas rubber smell, but really helps create the industrial strength feel and function of a professional gym."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","sku":"1030","de
22020scription":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber","image":"https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_ocur6ep4p15b3e1p27f2mlbh4k\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#offer-1030","price":4.05,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":16.42,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":21.09,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1030","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.70","reviewCount":"74","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"S Raval"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2026-08-23","name":"Hundred percent vulcanized rubber is the only way to go.","reviewBody":"The product being 100 percent volcanic rubber - will provide lasting quality for heavy Jim equipment and whether for residential or commercial use it\u2019s the best product in terms of material available."},{"@type":"Review","author":{"@type":"Person","name":"S Raval"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2026-08-23","name":"Stand-up quality due to being volcanic rubber","reviewBody":"Excellent quality and being hundred percent volcanic rubber will last the longest and provide the best protection for heavy equipment and weights. This was my primary reason for selection and I would recommend you do the same versus some of the inferior products that big box stores like Home Depot and Lowe\u2019s may be able to order."},{"@type":"Review","author":{"@type":"Person","name":"Darandkat"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-08-23","name":"Excellent Gym Floor","reviewBody":"It stands up to my elliptical and treadmill without having dents in it. It's difficult to cut so have someone with strong arms hold the blade. I highly recommend it!"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-01-23","name":"Home Gym Essential","reviewBody":"Easy install, easy clean, couldn't be happier. Should have done this the first time instead of cheap alternatives. A+!"},{"@type":"Review","author":{"@type":"Person","name":"Meredith"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-premium-rubber-gym-tiles-1030.html#group","name":"1\/2\" Premium Gym Floor Tiles \u2013 Vulcanized Rubber"},"datePublished":"2025-01-23","name":"The best addition to the home workout","reviewBody":"These tiles are amazing! Perfect for home workouts. Helps create an extra cushion and absorbs some of the shock. Easy to assemble and get it all together."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles","sku":"14001","description":"PowerLock Rubber Gym Floor Tiles","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_do5fctakqh1gl8p94kjsdc4a5k\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#offer-14001","price":1.65,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":6.06,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":3.67,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"14001","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.70","reviewCount":"10","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Alison"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles"},"datePublished":"2026-08-04","name":"Installation tips!","reviewBody":"A couple installation tips. Pay attention to the arrows on the back. There is definitely a difference in sheen depending on which way they are installed. We chose to offset each row by 1\/2 tile to eliminate the 4 corners in a spot and it looked much more seemless. A straight edge and utility knife is your friend! Overall a quick install for our fym floor."},{"@type":"Review","author":{"@type":"Person","name":"Constan"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles"},"datePublished":"2026-01-26"},{"@type":"Review","author":{"@type":"Person","name":"techedpsba"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles"},"datePublished":"2025-10-02","name":"Exactly what we had in mind. Perfect!","reviewBody":"Exactly as described! Ordered for our sunroom floor to cover bare concrete slab. Wanted something durable, cushioning, soundproofing, and easy to maintain\/clean. Order was correct and delivered on a pallet, securely wrapped and cushioned. We couldn't be more pleased."},{"@type":"Review","author":{"@type":"Person","name":"Happy W."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles"},"datePublished":"2025-06-26","name":"NY Giants theme","reviewBody":"Surprised my husband with a new workout space in his NY Giants themed man cave. Best part is they had a Blue and Light Grey that matched perfectly."},{"@type":"Review","author":{"@type":"Person","name":"Fred D."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-powerlock-rubber-gym-tiles-14001.html#group","name":"PowerLock Rubber Gym Floor Tiles"},"datePublished":"2025-03-11","name":"Happy","reviewBody":"Wanted to protect and cushion the garage floor around my workbench, this did the trick. Makes finding dropped screws and nails super easy!"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls","sku":"1000","description":"1\/4\" Tough Rubber Flooring Rolls","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_qa84sdsgn103ffmsgs892ci87b\/-FJPG\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#offer-1000","price":1.15,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":4.6,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1000","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.68","reviewCount":"145","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Zack"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls"},"datePublished":"2025-06-07","name":"Excellent material for trailer mat!","reviewBody":"We used this product on our quad truck camper trailer to prevent load slipping and it works wonders! Holding up well after several factory runs and handles well in the rain too. Happy to use this product on future trailers."},{"@type":"Review","author":{"@type":"Person","name":"Tammie"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls"},"datePublished":"2025-06-07","name":"Rubber floor","reviewBody":"So far the product is holding up to dogs running and playing on the floor. However it does where the dogs pads a little bit till they are used to it."},{"@type":"Review","author":{"@type":"Person","name":"Anthony B."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls"},"datePublished":"2025-06-07","name":"1\/4 thick rubber flooring","reviewBody":"Great product! Great shipping and good communication. Nice durable quality."},{"@type":"Review","author":{"@type":"Person","name":"Jeanette"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls"},"datePublished":"2025-06-07","name":"Holding up well","reviewBody":"I bought the rolls because I thought it would work great to save my floors. I have 4 dogs and sometimes they have accidents that were ruining the floors. The rolls have worked! They were easy to install, waterproof, and easy to clean! No more dog urine soaking my floors and smelling. I love the flooring for that, also for my dogs because they have better grip instead of sliding all over my vinyl floor. Possibly hurting themselves. I purchased the thinnest flooring and it has been the best thing I could have done. It does have that rubber smell but it does dissipate after a few weeks. Thank you rubberflooringinc!"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-rubber-rolls-1000.html#group","name":"1\/4\" Tough Rubber Flooring Rolls"},"datePublished":"2025-06-07","name":"Dibben Dance Company","reviewBody":"Product came in on pallet wrapped very well. It was easy to take off the pallet. When laying it out on the floor it rolled out easy. The rubber was colored nicely. It later down evenly. It has an attractive look on the floor as well as it stays in place when dancing on it. We love this product and would use again if we ever need too."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles","sku":"13369","description":"Dura Lock Rubber Tiles","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_r31a99ahn116tdsjodu0g6c04i\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#offer-13369","price":1.75,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":6.72,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":3.84,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"13369","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.73","reviewCount":"55","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"RC"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles"},"datePublished":"2026-04-27","name":"Great floor tiles for rec room","reviewBody":"These tiles are ace! They're relatively simple to install, cutting is straightforward with a utility knife (once you get into the groove), and I was impressed at how easy it was to keep straight lines. My hands may take a few days to recover though!"},{"@type":"Review","author":{"@type":"Person","name":"Jeffrey"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles"},"datePublished":"2026-03-19"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles"},"datePublished":"2025-11-19"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles"},"datePublished":"2025-10-27"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/dura-lock-rubber-tiles-13369.html#group","name":"Dura Lock Rubber Tiles"},"datePublished":"2025-09-09"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'","sku":"9580","description":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_ngrk073ao925v7861lfqmgkh67\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#offer-9580","price":2.7,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":162,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":60,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"9580","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.82","reviewCount":"11","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Chuck A."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"},"datePublished":"2025-06-26","name":"tough, resilient, perfect!","reviewBody":"I've been looking for the perfect material for one of my machine operations. I needed something tough and resilient to cushion a 4 ton press operation and didn't know what to use. Luckily for me I came across you folks and my problem disappeared! It's absolutely perfect and now I'm making a list of other areas that I can use your material. I will be placing another order and by the way, I was treated very well by your customer service, I wish I remembered her name (I'm sure you can look her up) because she was delightful and very knowledgeable. Thank you very much!"},{"@type":"Review","author":{"@type":"Person","name":"Casey"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"},"datePublished":"2024-10-01","name":"Awesome flooring","reviewBody":"Looks great in my weight room, lays nicely in the corners and ends, and protects my floor like I needed it to."},{"@type":"Review","author":{"@type":"Person","name":"Mde"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"},"datePublished":"2024-10-01","name":"1\/2\" rolled rubber gym floor","reviewBody":"I was very happy with the product. It's beefy and was easy to install. The product came when they said it would, and was better than I expected. One caution, have someone available to help you, each roll weighs about 200 pounds!"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"},"datePublished":"2024-10-01","name":"Best gym floor","reviewBody":"Looks great, went down great, no complaints, best gym floor ever!"},{"@type":"Review","author":{"@type":"Person","name":"Darren S."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-pre-cut-mega-rubber-rolls-9580.html#group","name":"1\/2\" Pre-Cut Mega Rubber Rolls | 4' x 15', 25', or 50'"},"datePublished":"2024-10-01","name":"Just What I Wanted","reviewBody":"Worth the effort to install. Perfect floor for home or commercial gym. Love the look and performance."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122","sku":"3264","description":"Jamboree Rubber Playground Tiles\u2122","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_te3mrkjsb970t2e49qvnm1cb5u\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#offer-3264","price":6.75,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":26.99,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Jamboree"},"mpn":"3264","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.83","reviewCount":"23","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Molly"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122"},"datePublished":"2026-04-27","name":"10\/10","reviewBody":"Quick service. High quality. Wonderful customer service. Will be ordering more in the future"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122"},"datePublished":"2025-05-27","name":"Great quality","reviewBody":"These were even better than I hoped. The only thing I don't like is that they can't be set up staggered because of the connecting piece on the bottom. They have to line up. I have stairs to work around and I don't want to have to cut them in case I want to use them somewhere else later. I suppose I could skip the connecting pieces on those rows..."},{"@type":"Review","author":{"@type":"Person","name":"Chris"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122"},"datePublished":"2025-01-23","name":"Nice product","reviewBody":"We created a toddler playground on an existing asphalt parking lot. This was the perfect covering for the asphalt, easy to install and overall a nice finished product. We ordered way to many connectors ( one per tile we were told) but along the edges you have to cut them in half because the way they are stamped each tile only fits the corner."},{"@type":"Review","author":{"@type":"Person","name":"Aaron"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122"},"datePublished":"2025-01-23","name":"Easy to install and looks great","reviewBody":"This product was easy to install, and the red color still looks great one year later. I used the black connectors to keep the tiles holding together on top of the concrete. It's very sturdy and holds tightly together. It looks like it will last a long time. It takes about 6 to 9 months for the rubber smell to dissipate."},{"@type":"Review","author":{"@type":"Person","name":"Jessica"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/jamboree-playground-tilestm-3264.html#group","name":"Jamboree Rubber Playground Tiles\u2122"},"datePublished":"2025-01-22","name":"Love Them!","reviewBody":"Here is what we used our playmats for! We love them."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls","sku":"9854","description":"Regrind Rubber Rolls","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_392nc35btp7fn9j463a2te7o60\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#offer-9854","price":1.24,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":4.96,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"9854","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.78","reviewCount":"127","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Nicco B."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls"},"datePublished":"2025-06-26","name":"Simply amazing","reviewBody":"Attached is the photo of our newly set up garage gym. These regrind rolls are simply amazing and even after the shipping fee the price was a steal. I also really appreciate that they were delivered into my garage so we did not have them get stuck in the rain before having to carry them from outside into the garage. I love the quality, color, and the weight. They are so heavy duty that I didn't even have to seal the rolls to ground to keep it from being a permanent feature just in case we wanted to change it up in the future. However, these rolls are built so well they seem like they will last forever. Thank you so much for this product. I will always recommend you all as a go to for gym flooring and such. Take care."},{"@type":"Review","author":{"@type":"Person","name":"Hiit B."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls"},"datePublished":"2025-06-26","name":"Unbelievable floors. Love them!","reviewBody":"I have been in the industry a long time and have trained on many, many floors - so I am a snob about what is under my feet. I also just opened my own small group training center and needed rubber flooring that was durable, easy for me to install on both a budget and a deadline, that was of high quality to train on. I wanted to stay local and tried East Coast suppliers and manufacturers, but none had exactly what I wanted and then I discovered Rubber Flooring Inc. and I was in!!! Not only was the selection outstanding in terms of color, depth, style and usage - but they have so many ways to apply\/install it. I specifically got the regrind rolls in confetti and people stop in their tracks when they come through the door. That's how nice these rubber floors are!! My clients love to train on it, they clean like a dream and really keep their color and luster. I am a burpee maniac and doing it on these mats is heaven. In addition, the customer care is some of the best I have ever received. If you run, manage or own in the fitness industry, you know how important that is, and Rubber Flooring's team is the best. Really held my hand through the whole process. Steered me back in the right direction when I veered a bit and then after installation (which was easy peasy - from delivery to literally rolling out the rubber and making a straight cut), still followed up with me for care and feedback. Loved it! Who does that? Thank you Rubber Flooring we are your biggest fans!!! HIIT BOX - Brooklyn NY"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls"},"datePublished":"2025-06-26","name":"Used for muscular therapy\/personal training office","reviewBody":"I've been very happy with the 3\/8\" regrind rubber flooring I purchased. It was heavy but my husband helped me cut it in our driveway a little larger than needed to make it easier to move two smaller rolls than one big one. Then he cut it to fit with a utility knife and metal ruler. We easily laid it out in my office over an existing berber wall-to-wall carpet. I'm finding I don't need tape to keep it in place but I did use some where it abuts a different area rug (but mostly to keep that other rug from slipping. There was a strong rubber odor initially, but within a month it dissipated to the point that I don't smell it. An open window and fan got me through the worst of that. It's comfortable underfoot and deadens noise. I'm using it on one side of my massage therapy office to do one-on-one personal training with light equipment or body weight. I've vacuumed and swept it easily. And mopping with Dawn\/water is easy enough. The 3\/8\" size seems to be a great thickness - balancing out how heavy it was to carry with durability\/comfort and stable enough on top of an existing carpet."},{"@type":"Review","author":{"@type":"Person","name":"Donna M."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls"},"datePublished":"2025-06-26","name":"Great Floor for Girls Locker Room!","reviewBody":"I have put the 3\/8\" floor down before in several of my therapy departments, so when I was placed in charge of remodeling the girls basketball locker room at my daughter's school, rubber flooring was my number one choice to replace that awful indoor\/outdoor carpet! Since I had a very limited budget, I decided to try the 1\/4\" regrind and couldn't have been more pleased and the girls love it!"},{"@type":"Review","author":{"@type":"Person","name":"Hiit B."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/regrind-rolls-9854.html#group","name":"Regrind Rubber Rolls"},"datePublished":"2025-06-26","name":"Unbelievable floors. Love them!","reviewBody":"I have been in the industry a long time and have trained on many, many floors - so I am a snob about what is under my feet. I also just opened my own small group training center and needed rubber flooring that was durable, easy for me to install on both a budget and a deadline, that was of high quality to train on. I wanted to stay local and tried East Coast suppliers and manufacturers, but none had exactly what I wanted and then I discovered Rubber Flooring Inc. and I was in!!! Not only was the selection outstanding in terms of color, depth, style and usage - but they have so many ways to apply\/install it. I specifically got the regrind rolls in confetti and people stop in their tracks when they come through the door. That's how nice these rubber floors are!! My clients love to train on it, they clean like a dream and really keep their color and luster. I am a burpee maniac and doing it on these mats is heaven. In addition, the customer care is some of the best I have ever received. If you run, manage or own in the fitness industry, you know how important that is, and Rubber Flooring's team is the best. Really held my hand through the whole process. Steered me back in the right direction when I veered a bit and then after installation (which was easy peasy - from delivery to literally rolling out the rubber and making a straight cut), still followed up with me for care and feedback. Loved it! Who does that? Thank y
22020ou Rubber Flooring we are your biggest fans!!! HIIT BOX - Brooklyn NY"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats","sku":"2800","description":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats","image":"https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_uq6r5imalp0fh2i6147gumgu7o\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#offer-2800","price":47.49,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":47.49,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":12,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"2800","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.74","reviewCount":"76","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats"},"datePublished":"2026-03-16"},{"@type":"Review","author":{"@type":"Person","name":"Littlejazz"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats"},"datePublished":"2026-01-06","name":"Awesome mat.","reviewBody":"Awesome mat. Very thick, no smell. Perfect for protecting my newly finished wood floors."},{"@type":"Review","author":{"@type":"Person","name":"Cosy"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats"},"datePublished":"2025-06-06","name":"Great product. Slow service on lost shipment","reviewBody":"Product is just what I wanted. First shipment was lost. Ordered another and got it fast but first replacement still has not arrived."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats"},"datePublished":"2025-05-28","name":"These are the best mats....","reviewBody":"My girlfriend has these mats in her gym and I have always foun
22020d them practical. So when remodeling my little 550 square foot ski condo I decided to put them in as the flooring and I am not disappointed! Ski boots? No problem! Dogs? No worries! Someone spilled the spiced wine? Just wipe it up. Customer service was amazing and the mats came much quicker than stated. *This is not a recommendation!! But when installing I used a jig saw and cut the mats 1\/8- 1\/4\" bigger than the space needed and it turned out beautifully. Was so very easy. Thank you Rubber Flooring!"},{"@type":"Review","author":{"@type":"Person","name":"T"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-2-mega-mats-2800.html#group","name":"1\/2\" Mega Gym Mats | Rubber Mats & Utility Floor Mats"},"datePublished":"2025-05-28","name":"Two thumbs up on mats, two thumbs down on shipping","reviewBody":"I\u2019d ordered a sample size of these mats and liked them so much we ordered 4 precut mats. The tracking info is pretty lacking, it still said \u201cprocessing in warehouse\u201d when we received a call from the freight company for delivery. After waiting for 4 failed deliveries (freight company kept \u201cforgetting\u201d to put mats on truck for delivery - even after marking it \u201chot\u201d) and too much time on the phone with the freight company and Rubber Flooring (who admitted they\u2019d had complaints about this freight company before) the mats arrived. Give them time to off gas and get your shop vac out for the rubber dust\/particulates that go everywhere. I recommend the mats but I\u2019d ask them for help if you have any trouble with shipping."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls","sku":"1005","description":"8mm Strong Rubber Gym Flooring Rolls","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_qc7660kjf509hbiokssnd3pj7g\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#offer-1005","price":1.41,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":5.65,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1005","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.85","reviewCount":"194","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Dr. A."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls"},"datePublished":"2026-05-01","name":"My Fitness Room"},{"@type":"Review","author":{"@type":"Person","name":"Nickolas"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls"},"datePublished":"2026-03-20","name":"Great product and delivery","reviewBody":"I purchased 3 rolls for my home gym. The custom sizing is helpful. Very happy with the quality. The delivery was quick as well. Would definitely recommend."},{"@type":"Review","author":{"@type":"Person","name":"Chris82"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls"},"datePublished":"2026-02-04","name":"Great product","reviewBody":"I was very pleased with the thickness and quality of the mats as well as the Orange flecked color I ordered. They were delivered in a couple of weeks from order date.\nThe sides of the roll were very straight but the ends needed trimmed and squared.\nI ordered 20 foot rolls and they were shipped with 3-5 feet of extra material.\nA 4\u2019 square, silver sharpie and a bunch of razor blades made this process super easy and change the look and feel of my gym. I would recommend this product over stall mats or anything on amazon."},{"@type":"Review","author":{"@type":"Person","name":"thor"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls"},"datePublished":"2025-12-14","name":"excellent product","reviewBody":"Great product, delivered way faster than expected, fits my gym floor perfectly.."},{"@type":"Review","author":{"@type":"Person","name":"AG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-1005.html#group","name":"8mm Strong Rubber Gym Flooring Rolls"},"datePublished":"2025-09-12","name":"Good flooring for home gym","reviewBody":"These are great. Was hard to track them down and know when the order was going to arrive, but one day they showed up unannounced. This is my second time buying these for the home gym and they work wonderfully. Seams are nearly invisible if you do a good job laying these down"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series","sku":"5037","description":"15mm Impact Rubber Rolls - Designer Series","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_7nvi353alp0ufcakrnoa4ejh2o\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#offer-5037","price":6.49,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":25.96,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"5037","aggregateRating":{"@type":"AggregateRating","ratingValue":"5.00","reviewCount":"7","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Agunnoe"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series"},"datePublished":"2025-06-26","name":"Great Product, Poor customer service","reviewBody":"We love this product, easy to install. There were shipping issues, we called customer service, did a chat, etc. FedEx reimbursed for the shipping of part of our order but we have yet to receive reimbursement nor have we received a call back."},{"@type":"Review","author":{"@type":"Person","name":"Bk"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series"},"datePublished":"2025-06-26","name":"25ft lengths are heavy but manageable","reviewBody":"The final product was good. My only complaint is that the cut ends were far from square. they looked like they were cut with a pair of child's safety scissors. I had to square the ends prior to measuring and cutting. The delivery wasn't super. They tried to drop the pallet off 1\/4 mile from my house, thankfully my neighbor told the driver to get out of the truck so she could drive it down the driveway and he caved....I've turned around a 50ft semitruck in my driveway and this dude in a 25 ft box truck was scared. Anyhow... Three rolls on a pallet, I transferred one roll at a time to a hand truck and brought them in. the long edges were pretty darn straight, I can barely see the seams. I'm going to post a video of the install on youtube - Money Pit Garage, check it out!"},{"@type":"Review","author":{"@type":"Person","name":"Lisa"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series"},"datePublished":"2025-01-11","name":"The product is beautiful","reviewBody":"The product is beautiful, as you can see. The rubber was very heavy! And therefore hard to put in place. But thick is what we wanted. It works beautifully in the space. Thank you for your consistently excellent customer service."},{"@type":"Review","author":{"@type":"Person","name":"Tony F."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series"},"datePublished":"2025-01-10","name":"Designer Series 15mm impact rolls","reviewBody":"Finally able to install the flooring\u2026.. everyone who has seen it goes \u201cWow\u201d. The quality of this product is outstanding! The look of the designer series is fantastic!"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/15mm-impact-rolls-designer-series-5037.html#group","name":"15mm Impact Rubber Rolls - Designer Series"},"datePublished":"2025-01-10","name":"Easy to Install! Quality product!","reviewBody":"I love my workout room now! This floor is beautiful and functional! It was easy to install, but just be prepared, it is HEAVY! You will be glad you bought this!"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer","sku":"5047","description":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_r4is4tdash091a4vnh3ce4su4f\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#offer-5047","price":9.25,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":55.5,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":6,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Flooring Inc"},"mpn":"5047","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.89","reviewCount":"9","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Karin C."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"},"datePublished":"2026-05-01","name":"Such a nice looking gym floor","reviewBody":"We installed this flooring ourselves. It was relatively easy to install. It was a pretty heavy product, but we had help to get it up the stairs and manipulate it into our space to make the necessary cuts and alignment. We were very happy with how it turned out. It makes our home gym look less like a gym and more like a nice room with the wood \"look\". It's easy to clean and serves the purpose we intended which was to make the room look more like a sanctuary than a stuffy old gym."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"},"datePublished":"2026-05-01","name":"Great for the studio","reviewBody":"I love the fact this roll looks like wood. It looks great in my yoga studio!"},{"@type":"Review","author":{"@type":"Person","name":"Jeanine O."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"},"datePublished":"2026-05-01","name":"Awesome product !","reviewBody":"We had existing hardwood floors throughout the house and I was very hesitant to use this rubber flooring. I cannot say how perfect it turned out. It is very durable and it looks fantastic with our existing floors. Love Love Love this product."},{"@type":"Review","author":{"@type":"Person","name":"Dane W."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"},"datePublished":"2026-05-01","name":"Great looking flooring at a reasonable price","reviewBody":"I know this product would be a great looking garage floor and beings it is rubber it would be easy on my back"},{"@type":"Review","author":{"@type":"Person","name":"Chris"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/impact-rolls-wood-series-5047.html#group","name":"Impact Rubber Flooring Rolls - Wood Grain Vinyl Top Layer"},"datePublished":"2025-06-26","name":"Turned Out Really Good!","reviewBody":"Hi, it turned out really good! We turned a mechanical room that was a wasted space into a home gym and the floor makes all the difference. before and after showed. Floor lays down great. It is seamless! It is almost impossible to find the seams when you join two or more piece for a larger room. We had two large rolls and I was worried about seeing them but not at all, incredible how it matches up and lays square. Looks great. So far with just a month installed, we love it with the gym. Much better than the basement concrete floor we had in the space before. Really does look high quality. I would recommend it."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles","sku":"1040","description":"1\" Monster Rubber Tiles","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_ere8ea2kpd0k9a5cbcr5i17b0h\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#offer-1040","price":8.99,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":35.96,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1040","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.78","reviewCount":"23","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Steve A."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles"},"datePublished":"2026-02-05","name":"Greenhouse foot warmer","reviewBody":"I bought the rubber tiles for my greenhouse to nhelp keep the floor warmer for my feet and they seem to perfectly fit the bill and they came in less than a week. A real value I'd say."},{"@type":"Review","author":{"@type":"Person","name":"Craig W."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles"},"datePublished":"2026-02-05","name":"exactly what i wanted","reviewBody":"the flooring is durable looks great and lives up to all my expectations. the perfect floor for my home gym and animal friendly lays down easy and in a timely manner"},{"@type":"Review","author":{"@type":"Person","name":"Carrie"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles"},"datePublished":"2025-06-26","name":"Perfect for teen's basement bedroom - and some","reviewBody":"I had some misgivings initially about investing in this type of flooring, but we are all utterly delighted with the end results. Our teen needed her own room, and the only place to expand was into our unfinished basement - consisting of half cellar constructed in 1891, and half block basement dug out in the 1970s with a DIY (poorly-poured, highly irregular) concrete floor. The Monster tiles were the perfect solution. Their thickness and the \"feet\" adapt to the irregularities in the concrete floor, and make it far more comfortable (both in terms of support and temperature) to walk on. We're also fine to handle the very mild dampness that tends to creep in across a 123-year-old cellar floor - the Monster tiles keep us high and dry! The picture shows our teen's room, but we also have an area where we put a treadmill on top of the tiled floor, and running on the treadmill is now even more comfortable. A couple of tips that we picked up while installing ourselves: 1) Holding the tile in an arc (like a \"bridge\" when shuffling cards) - helps to compress the fit against the adjacent tile to allow the dowels to insert completely. 2) When that's not enough, we actually used a tire jack. We would put the jack down on its side, and then brace the base horizontally against a wall or free-floating concrete block as needed, and against a 2\"x4\" stood up on edge along a tile on the other. As we \"raised\" the jack (extending its length along the floor), the 2\"x4\" helped deliver the pressure equally alongside the tile, helping to compress the dowels and push the tile into place. 3) To cut tiles, we used a jigsaw with a blade intended for rough wood cuts, and a step ladder. The problem is that you can't use sawhorses to hold up tiles for cuts because of course the rubber is somewhat floppy. So, we laid a stepladder on its side and spread the feet apart enough to both stabilize the ladder, and to spread the legs about 1\" apart at the top. You could then put the tile on the side of the ladder, laying it such that your cut would fall between the tops of the legs. Just run the jigsaw through, and the ladder gives you enough support to hold the tile in place while making the cuts. This method also helps you to guide your cut cleanly."},{"@type":"Review","author":{"@type":"Person","name":"Carrie"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles"},"datePublished":"2025-06-26","name":"Perfect for teen'
22020s basement bedroom - and some","reviewBody":"I had some misgivings initially about investing in this type of flooring, but we are all utterly delighted with the end results. Our teen needed her own room, and the only place to expand was into our unfinished basement - consisting of half cellar constructed in 1891, and half block basement dug out in the 1970s with a DIY (poorly-poured, highly irregular) concrete floor. The Monster tiles were the perfect solution. Their thickness and the \"feet\" adapt to the irregularities in the concrete floor, and make it far more comfortable (both in terms of support and temperature) to walk on. We're also fine to handle the very mild dampness that tends to creep in across a 123-year-old cellar floor - the Monster tiles keep us high and dry! The picture shows our teen's room, but we also have an area where we put a treadmill on top of the tiled floor, and running on the treadmill is now even more comfortable. A couple of tips that we picked up while installing ourselves: 1) Holding the tile in an arc (like a \"bridge\" when shuffling cards) - helps to compress the fit against the adjacent tile to allow the dowels to insert completely. 2) When that's not enough, we actually used a tire jack. We would put the jack down on its side, and then brace the base horizontally against a wall or free-floating concrete block as needed, and against a 2\"x4\" stood up on edge along a tile on the other. As we \"raised\" the jack (extending its length along the floor), the 2\"x4\" helped deliver the pressure equally alongside the tile, helping to compress the dowels and push the tile into place. 3) To cut tiles, we used a jigsaw with a blade intended for rough wood cuts, and a step ladder. The problem is that you can't use sawhorses to hold up tiles for cuts because of course the rubber is somewhat floppy. So, we laid a stepladder on its side and spread the feet apart enough to both stabilize the ladder, and to spread the legs about 1\" apart at the top. You could then put the tile on the side of the ladder, laying it such that your cut would fall between the tops of the legs. Just run the jigsaw through, and the ladder gives you enough support to hold the tile in place while making the cuts. This method also helps you to guide your cut cleanly."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-monster-rubber-tiles-1040.html#group","name":"1\" Monster Rubber Tiles"},"datePublished":"2025-06-07","name":"Wonderful alternative to carpet for a basement","reviewBody":"I have purchased the rubber tiles to have a safe place for the little ones to play on! These are soft and durable and the kids love them! If anything spills the clean up is just spray and clean! Just wished all floor tiles were made the same - these do not inter lock with other tiles that I have purchased at the big chain stores! The one here are so much more affordable to cover a large space."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring","sku":"14009","description":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_9jmbeqvd8h02v0tj320h8c7957\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#offer-14009","price":3.25,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":13,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"14009","aggregateRating":{"@type":"AggregateRating","ratingValue":"5.00","reviewCount":"7","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2025-11-08"},{"@type":"Review","author":{"@type":"Person","name":"Mixalot"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2025-10-02","name":"Thicker than my last relationship","reviewBody":"They just feel\u2026 right. Definitely happy with this purchase"},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2025-09-23"},{"@type":"Review","author":{"@type":"Person","name":"CK"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2025-09-10"},{"@type":"Review","author":{"@type":"Person","name":"Nick"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/3-4-olympian-rubber-rolls-14009.html#group","name":"3\/4\" Olympian Rubber Rolls | Commercial Gym Flooring"},"datePublished":"2025-09-10"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats","sku":"2803","description":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_lnh8u5vh957jd5v4ai26lmk25r\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#offer-2803","price":63.74,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":63.74,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":12,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"2803","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.84","reviewCount":"96","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats"},"datePublished":"2025-01-22","name":"Easy to Install","reviewBody":"Excellent quality and easy to install. Perfect for a home gym.... Excellent customer service, too!"},{"@type":"Review","author":{"@type":"Person","name":"Steven D."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats"},"datePublished":"2025-01-22","name":"Love Tough Mat in Garage","reviewBody":"The new rubber mat I installed in the garage for my kids to use while lifting weights is great . Quarter inch is not thick enough in case they were to drop a dumbbell. Very comfortable walking. Helps with noise control. Also with the discount the price was very reasonable. I plan to purchase another in the near future but will look at something that is at least one-half inch and possibly wider; i.e. 8 x 6 foot."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats"},"datePublished":"2025-01-22","name":"Impressive","reviewBody":"Other than the edges not being straight, I have enjoyed this product. It did take a lot longer than we'd hoped to get them shipped but now that I have them, I like how it looks."},{"@type":"Review","author":{"@type":"Person","name":"Mike"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats"},"datePublished":"2025-01-21","name":"Great product!","reviewBody":"Love this flooring. I put the 4x10\u2019 mats in my gym that is 11.5\u2019x29\u2019. I had the same product in my old, smaller gym and learned that it does slide a bit if you have several pieces butted up against each other and don\u2019t glue it down. Was it necessary to glue down? No, but I\u2019m a perfectionist and wanted it perfect. It was tedious gluing and cutting it to perfection, but it was 100% worth it to glue it. Looks perfect and feels amazing in my gym. I found it to be best if I glued one row at a time and wait until the glue hardens to do the next row, because when you have to pull the pieces (with some good force, usually using my feet\/body weight and sometimes pushing from the wall even to get it in place) to fit perfectly, you need to use painters tape to keep them in place. I say that, because if they are all moving around then then first row would begin to pull away when I taped them together\u2026 I suppose you can do it all at once if you are a pro, but I found doing it in rows was most effective so I didn\u2019t have any gaps anyw
22020here. However, it was just me and not a whole crew of people doing it\u2026"},{"@type":"Review","author":{"@type":"Person","name":"Joe M."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/1-4-tough-mats-2803.html#group","name":"1\/4\" Tough Rubber Mats | Fitness Mats & Utility Floor Mats"},"datePublished":"2025-01-21","name":"Garage gym","reviewBody":"Perfect size and shape for the garage gym I set up. The company delivered exactly what I wanted. Little tougher then expected cutting a strip off the end to get exact measurement for room, but I would rather it harder to get through than an easy material to tear through."}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value","sku":"14048","description":"Budget Rubber Flooring Rolls - Best Value","image":"https:\/\/d2q5qaygbbwnnw.cloudfront.net\/image\/230444301506\/image_kuq49misgh2mvavjim7qcoam1i\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#offer-14048","price":0.79,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":3.16,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Flooring Inc"},"mpn":"14048","aggregateRating":{"@type":"AggregateRating","ratingValue":"5.00","reviewCount":"7","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Wingfield"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value"},"datePublished":"2026-05-01","name":"Turn your home gym into a professional looking one!","reviewBody":"Great product! Our home gym looks professional now. Easy to install- but take your time and get those seams tight."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value"},"datePublished":"2026-03-16"},{"@type":"Review","author":{"@type":"Person","name":"OOG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value"},"datePublished":"2026-02-03"},{"@type":"Review","author":{"@type":"Person","name":"OG"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value"},"datePublished":"2026-02-02"},{"@type":"Review","author":{"@type":"Person","name":"sadw"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/budget-rubber-rolls-14048.html#group","name":"Budget Rubber Flooring Rolls - Best Value"},"datePublished":"2026-01-23"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series","sku":"1043","description":"8mm Strong Rubber Rolls - Designer Series","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_0v0s0qqhp95rtds1j0hgtvpf6v\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#offer-1043","price":2.85,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":11.38,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Traxxon Rubber Flooring"},"mpn":"1043","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.76","reviewCount":"37","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"J. P."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series"},"datePublished":"2025-06-25","name":"A Top Choice for Residential Use","reviewBody":"Many reviewers online have stated that rubber flooring, especially commercial-grade, isn't suitable for home use, and that's just not the case here. I think that the 8mm flooring and underlay combination we ordered work great for our downstairs 600-ft. playroom. The flooring looks great and feels great under bare feet, and it is softer than hardwood for falls and roughhousing with kids. It's easy to clean, and it's practical for a multipet household like ours. I much prefer the nonslip feature to slippery hardwood\/other flooring because I am always barefoot at home. I would recommend rubber flooring to anyone with kids and pets."},{"@type":"Review","author":{"@type":"Person","name":"Paul"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series"},"datePublished":"2025-06-25","name":"Basement gym floor","reviewBody":"Great product - bought 3 4ft wide x 15ft long rolls and installed them on top of porcelain tile floor without glue or any tape. The product is heavy enough to keep in place without any glue or tape and I did cut them down to ~12 feet long and kept it as close to each wall as possible."},{"@type":"Review","author":{"@type":"Person","name":"Carol"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series"},"datePublished":"2025-06-25","name":"love this product","reviewBody":"This is the second area we have put this flooring . we own a veterinary hospital, kennel , and dog daycare and first put the flooring in our cage free day care area where it was just perfect. We recently added a 5th exam room and put it in there . The traction the dogs have on the rubber flooring has created a more relaxed environment for them. My true goal is to replace the flooring in my entire waiting room with this product to truly make it easier for our k-9 patients! Cost is my only issue though as far as that."},{"@type":"Review","author":{"@type":"Person","name":"Steve"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series"},"datePublished":"2025-06-25","name":"Basement Gym Floor- Renewed","reviewBody":"The product is fantastic and exceeds my expectations regarding quality, durability, look, and installation. I have a home gym in the basement of my 85+ yr old house-- free weights, cardio machines, etc. The old tile floor was tired and needed replacement. After a bit of research, I opted for the 8mm thick 'strong rubber rolls' with Coffee Creek finish. The total installation required 6 rolls x 15ft length x 4 ft wide (360 sq ft). Installation was relatively straight forward, but some experience needed to properly cut ends to fit non-square walls, as well as more intricate cutouts around door jams, etc. All cut
22020s were made with a utility knife-- I only changed the blade twice. Cuts made with a metal edge straight edge with a 1\/4\" plywood underneath the rubber roll. Double-sided carpet tape purchased with the rolls was also used for the seams. The seams between rolls were almost invisible, but care needs to be taken during installation. Installation took about 10 hours total, but included prep and clean up time-- a weekend project for sure. Instructions come packed in the rolls-- be sure to look for them there before you start. One important installation tip for accurate installation is to let the rolls come to room temp and let the roll being installed lay flat for about 2 hours to equilibrate. The new floor has an excellent feeling under foot- soft enough, but grippy like a gym floor. It can handle the free weights, jumping, etc. The Coffee Creek finish looks excellent if you are looking for a finished floor look-- almost looks like carpeting from a distance. And yes, my wife is happy with the new floor!"},{"@type":"Review","author":{"@type":"Person","name":"Dave W."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/8mm-strong-rubber-rolls-designer-series-1043.html#group","name":"8mm Strong Rubber Rolls - Designer Series"},"datePublished":"2024-11-22","name":"Happy Customer","reviewBody":"Awesome product! Was so easy to install.We converted part of a dog kennel area into a cage free doggy day care area decided to use your rubber matting.We think it looks fabulous!"}]},{"@context":"https:\/\/schema.org","@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls","sku":"9589","description":"Eco-Flec Rubber Rolls","image":"https:\/\/d2q5qaygbb
22020wnnw.cloudfront.net\/image\/230444301506\/image_s69k4hmkfp18r1t7gokajvef5v\/-B318","url":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html","offers":{"@type":"Offer","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#offer-9589","price":0.99,"priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","url":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html","priceValidUntil":"2026-12-31","priceSpecification":{"@type":"UnitPriceSpecification","price":3.96,"priceCurrency":"USD","unitText":"sq ft","referenceQuantity":{"@type":"QuantitativeValue","value":4,"unitCode":"FTK"}}},"brand":{"@type":"Brand","name":"Flooring Inc"},"mpn":"9589","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.82","reviewCount":"49","bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Nathan"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls"},"datePublished":"2025-12-02","name":"Still same great quality as 6 years ago","reviewBody":"I originally bought this product 6 years ago and I just ordered more to expand the floor in my home gym and it still matches perfectly! The original has held up great and I am so happy with my purchase"},{"@type":"Review","author":{"@type":"Person","name":"Legacy"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls"},"datePublished":"2025-10-26","name":"Flooring","reviewBody":"Great product"},{"@type":"Review","author":{"@type":"Person","name":"Craig"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls"},"datePublished":"2025-06-26","name":"Great product!","reviewBody":"We have been shopping for a while and really like the idea of flooring from recycled materials. And your floor was least expensive by far than other manufacturers. It wasn't very difficult to cut and install. We are impressed and very happy with the new floor in our home gym! Thank you!"},{"@type":"Review","author":{"@type":"Person","name":"Daniel M."},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls"},"datePublished":"2025-06-26","name":"GREAT AFFORDABLE PRODUCT","reviewBody":"Overall the product is great. Installation was easy and the product was not hard to cut. Only negative is that the product tended to crumble on some rolls a little more than other rubber flooring I have installed, but nothing major. One of the rolls arrived had a damaged spot, but I failed to report it knowing that I would use that roll last and the area would be trimmed off. Overall great product and would definitely purchase products from the company again."},{"@type":"Review","author":{"@type":"Person","name":"Anonymous"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"itemReviewed":{"@type":"Product","@id":"https:\/\/www.flooringinc.com\/shop\/eco-flec-rolls-9589.html#group","name":"Eco-Flec Rubber Rolls"},"datePublished":"2025-06-07","name":"Easy to Install!","reviewBody":"I, and all of my personal training clients, love our new Eco-Flec floor."}]}]</script>
22020
22020<script defer src="https://www.dwin1.com/94345.js"></script>
22020 22021
22022<script nonce="dW0zODRtOWZjdmJ0bDF4NXV6NmVlNHB0bTFmZWRxYTU="> 22023 (() => { 22024 const updateSettingBar = () => { 22025 const intervalId = setInterval(() => { 22026 const bar = document.getElementById('pr-cookie-setting-bar'); 22027 if (! bar) { 22028 return; 22029 } 22030 22031 clearInterval(intervalId); 22032 bar.querySelectorAll('input[type="checkbox"], button.action') 22033 .forEach(el => el.disabled = true); 22034 22035 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'; 22036 bar.querySelector('.pr-cookie-description') 22037 .insertAdjacentHTML('beforebegin', notification); 22038 }, 400); 22039 } 22040 22041 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateSettingBar); 22042 })(); 22043</script>
vendor: 1 bytes, line 22043
22043
22044<script type="application/json" id="default-section-data"> 22045 {"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":1791054483},"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>
22045 22046<div class="am-loader-wrapper" 22047 x-data="amXnotifLoaderPlP()" 22048 x-bind="eventListeners" 22049 x-spread="eventListeners"> 22050 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 22051 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 22052 x-show="isLoading" 22053 x-transition:enter="ease-out duration-200" 22054 x-transition:enter-start="opacity-0" 22055 x-transition:enter-end="opacity-100" 22056 x-transition:leave="ease-in duration-200" 22057 x-transition:leave-start="opacity-100" 22058 x-transition:leave-end="opacity-0"> 22059 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 22060<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 22061 <g fill="none" fill-rule="evenodd"> 22062 <g transform="translate(1 1)" stroke-width="2"> 22063 <circle cx="5" cy="50" r="5"> 22064 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 22065 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 22066 </circle> 22067 <circle cx="27" cy="5" r="5"> 22068 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 22069 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 22070 </circle> 22071 <circle cx="49" cy="50" r="5"> 22072 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 22073 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 22074 </circle> 22075 </g> 22076 </g> 22077<title>loader</title></svg> 22078 <div class="ml-10 text-primary text-xl"> 22079 Loading... </div> 22080 </div> 22081</div>
22082<script> 22083 function amXnotifLoaderPlP() { 22084 return { 22085 isLoading: false, 22086 eventListeners : { 22087 ['@showAmLoader.window']() { 22088 this.isLoading = true; 22089 }, 22090 ['@hideAmLoader.window']() { 22091 this.isLoading = false; 22092 } 22093 } 22094 } 22095 } 22096</script>
22096 22097</div><div x-data="fpcTracking()" x-init="sendRequest()"></div>
22098<script> 22099 function fpcTracking() { 22100 return { 22101 url: 'https://www.flooringinc.com/amasty_fpc/reports/', 22102 sendRequest() { 22103 const ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart; 22104 fetch(`${this.url}?` + new URLSearchParams({ ttfb }), { 22105 method: 'GET', 22106 headers: { 22107 'Content-Type': 'application/json', 22108 'X-Requested-With': 'XMLHttpRequest', 22109 } 22110 }) 22111 } 22112 } 22113 } 22114</script>
22114 22115<!-- amasty-fpc-status -->
22115<script> 22116 const wpGA4ServerSide = { 22117 pushClick: function(productId, listId, listName, index, elm) { 22118 if (elm && elm.hasAttribute('onclick')) { 22119 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/productclick/'; 22120 if (productId && listId && listName) { 22121 fetch(requestUrl, { 22122 method: 'POST', 22123 headers: { 22124 'Content-Type': 'application/x-www-form-urlencoded', 22125 'X-Requested-With': 'XMLHttpRequest' 22126 }, 22127 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 22128 }) 22129 .then(res => res.json()) 22130 .then(data => { 22131 }); 22132 } 22133 } 22134 }, 22135 22136 pushViewItemList: function(hashId) { 22137 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 22138 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/viewitemlist/'; 22139 fetch(requestUrl, { 22140 method: 'POST', 22141 headers: { 22142 'Content-Type': 'application/x-www-form-urlencoded', 22143 'X-Requested-With': 'XMLHttpRequest' 22144 }, 22145 22146 body: 'hash_id='+hashId 22147 }) 22148 .then(res => res.json()) 22149 .then(data => { 22150 }); 22151 } 22152 } 22153 }; 22154 22155 window.wpGA4ServerSide = wpGA4ServerSide; 22156 22157 let allowGa4Services = window.ga4AllowServices ?? true; 22158 22159 if (allowGa4Services) { 22160 const {fetch: originalFetch} = window; 22161 window.fetch = async (...args) => { 22162 let [resource, config] = args; 22163 let response = await originalFetch(resource, config); 22164 22165 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 22166 response.clone().json().then(data => { 22167 if (data.wp_ga4.datalayer) { 22168 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 22169 dataLayerData.forEach((dataLayerItem) => { 22170 window.dataLayer.push({ecommerce: null}); 22171 window.dataLayer.push(dataLayerItem); 22172 }); 22173 } 22174 }); 22175 } 22176 return response; 22177 }; 22178 } 22179 22180 </script>
22180 22181
22181<script> 22182 let allowGa4ServicesMeta = window.ga4AllowServices ?? true; 22183 if (allowGa4ServicesMeta) { 22184 const {fetch: originalFetchMeta} = window; 22185 window.fetch = async (...args) => { 22186 let [resource, config] = args; 22187 let response = await originalFetchMeta(resource, config); 22188 22189 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 22190 response.clone().json().then(data => { 22191 if (data.wp_ga4 && data.wp_ga4.metapixel) { 22192 const metaPixel = JSON.parse(data.wp_ga4.metapixel); 22193 for (index in metaPixel) { 22194 fbq(metaPixel[index].track, metaPixel[index].eventName, metaPixel[index].eventData); 22195 } 22196 } 22197 }); 22198 } 22199 return response; 22200 }; 22201 } 22202 </script>
vendor: 1 bytes, line 22202
22202
22203<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-d3390ca2649c82069a5","applicationID":"1112615138","transactionName":"YwMDN0NXChZSVRBZWlpJIABFXwsLHFUFRFRYCQZMUlcQAFRZFkkaQg8EFA==","queueTime":0,"applicationTime":4699,"atts":"T0QAQQtNGRg=","errorBeacon":"bam.nr-data.net","agent":""}</script>
22203</body> 22204</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.