{"id":3438,"date":"2026-03-06T01:36:22","date_gmt":"2026-03-06T01:36:22","guid":{"rendered":"https:\/\/housefly1stg.wpenginepowered.com\/?page_id=3438"},"modified":"2026-07-08T03:19:42","modified_gmt":"2026-07-08T03:19:42","slug":"flooring","status":"publish","type":"page","link":"https:\/\/housefly.com\/es\/services\/flooring\/","title":{"rendered":"Flooring Installation Services | Book Local Pros | House Fly"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3438\" class=\"elementor elementor-3438\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-526e3a6 e-con-full e-flex e-con e-parent\" data-id=\"526e3a6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd990e3 elementor-widget elementor-widget-html\" data-id=\"dd990e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ================= HOUSE FLY \u2014 SMOKE SPLIT HERO + GLASS BOOKING CELL (production template, 2026-07-16) =================\n     Left: header + smoke service pills. Right: frosted-glass booking cell (live check-zip pricing, Book -> autobook -> cart).\n     Generated per page from pc-memory\/smoke-hero-template.html \u2014 edit the template, regenerate, redeploy. -->\n<style>\n@keyframes hfHeroKenBurns{0%{transform:scale(1) translate(0%,0%)}50%{transform:scale(1.06) translate(-1.5%,0.5%)}100%{transform:scale(1.10) translate(1.5%,-0.5%)}}\n@media (prefers-reduced-motion: reduce){.hfsk-hero::before{animation:none !important}}\nbody{overflow-x:hidden}\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-526e3a6,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-526e3a6::before,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-526e3a6::after{\n  max-height:none !important;min-height:0 !important;height:auto !important;\n  background-image:none !important;background-color:transparent !important;\n  flex-direction:column !important;align-items:stretch !important;justify-content:flex-start !important;\n  padding:0 !important;overflow:visible !important;border-radius:0 !important;box-shadow:none !important}\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-526e3a6::before,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-526e3a6::after{display:none !important;background:transparent !important;content:none !important}\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-dd990e3 .elementor-widget-container{display:block !important;width:100% !important}\n.hfsk-root{display:block;width:100%}\n.hfsk-root,.hfsk-root *{box-sizing:border-box}\n\/* ===== hero: full-bleed smoke split ===== *\/\n.hfsk-hero{position:relative;background:#10161f;overflow:hidden;isolation:isolate;color:#fff;\n  width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);\n  margin-top:calc(-1 * var(--hf-header-h, 88px));\n  padding:calc(56px + var(--hf-header-h, 88px)) 40px 72px;\n  font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif}\n.hfsk-hero::before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:url('https:\/\/housefly.com\/wp-content\/uploads\/2026\/03\/hero-flooring-1-1536x864.webp') center\/cover no-repeat;opacity:.45;animation:hfHeroKenBurns 28s ease-in-out infinite alternate;will-change:transform;z-index:-2}\n.hfsk-hero::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(115deg,rgba(13,20,31,.92) 0%,rgba(13,20,31,.72) 45%,rgba(13,20,31,.55) 100%);z-index:-1;pointer-events:none}\n@media (max-width:1024px){.hfsk-hero::before{background-image:url('https:\/\/housefly.com\/wp-content\/uploads\/2026\/03\/hero-flooring-1-1024x576.webp')}}\n.hfsk-cols{position:relative;z-index:2;max-width:1220px;margin:0 auto;display:grid;grid-template-columns:1.05fr 1fr;gap:56px;align-items:center}\n.hfsk-left{text-align:left}\n.hfsk-ey{font-size:clamp(16px,1.6vw,21px);font-weight:800;letter-spacing:.22em;color:#40C9F3;text-transform:uppercase;margin:0 0 12px;line-height:1.2}\n.hfsk-h1{font-size:clamp(34px,4.4vw,56px);font-weight:900;line-height:1.05;letter-spacing:-1.5px;margin:0 0 12px;color:#fff}\n.hfsk-h1 span{background:linear-gradient(90deg,#40C9F3,#2ED87A);-webkit-background-clip:text;background-clip:text;color:transparent}\n.hfsk-sub{color:rgba(201,214,230,.82);font-size:16.5px;font-weight:300;line-height:1.55;max-width:460px;margin:0 0 30px}\n.hfsk-rowlabel{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.85);margin:0 0 12px}\n.hfsk-pills{display:flex;flex-wrap:wrap;gap:10px}\n#hfskCats{margin-bottom:24px}\n.hfsk-pill{display:inline-flex;align-items:center;font-family:inherit;font-size:14px;font-weight:700;color:#dfe9f5;\n  background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.02));border:1.5px solid rgba(255,255,255,.2);\n  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-radius:999px;padding:11px 19px;cursor:pointer;transition:all .16s}\n.hfsk-pill:hover:not(.on){border-color:rgba(255,255,255,.48)}\n.hfsk-pill.on{border-color:#40C9F3;background:linear-gradient(180deg,rgba(35,210,255,.26),rgba(35,210,255,.09));color:#fff;box-shadow:0 0 0 4px rgba(35,210,255,.14),0 12px 30px -12px rgba(35,210,255,.5)}\n.hfsk-pill:focus{outline:none}\n.hfsk-pill:focus-visible{outline:2px solid #40C9F3;outline-offset:2px}\n.hfsk-divider{max-width:420px;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.18),transparent);margin:2px 0 20px}\n#hfskSubs{display:flex;flex-direction:column;gap:10px}\n.hfsk-pills.fixedrow{flex-wrap:nowrap}\n.hfsk-pills.fixedrow .hfsk-pill{min-width:0;justify-content:center;white-space:nowrap}\n@media (max-width:480px){.hfsk-pills.fixedrow .hfsk-pill{flex:1 1 0;font-size:clamp(9.5px,2.9vw,12.5px);padding:9px 4px;min-height:33px}}\n@media (max-width:480px){.hfsk-pills.fixedrow.compact .hfsk-pill{white-space:nowrap;font-size:clamp(9px,2.55vw,12.5px);padding:9px 2px;min-height:33px}}\n\/* ===== glass booking cell ===== *\/\n.hfsk-glass{background:rgba(20,29,43,.62);border:1px solid rgba(255,255,255,.16);border-radius:22px;\n  backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);\n  box-shadow:0 40px 110px -30px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,255,255,.09);\n  padding:24px 26px 22px;max-width:520px;margin-left:auto;color:#fff;text-align:left;font-family:'Inter',-apple-system,sans-serif}\n.hfsk-glass *{box-sizing:border-box}\n.g-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px}\n.g-top h3{font-size:23px;font-weight:800;letter-spacing:-.5px;color:#fff;margin:0;font-family:inherit}\n.g-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;color:#7FE3FF;background:rgba(35,210,255,.14);border:1px solid rgba(35,210,255,.3);padding:4px 10px;border-radius:99px;margin-top:8px}\n.g-zip{flex:none;width:150px;text-align:left}\n.g-zip label{display:block;font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#8fb3d0;margin-bottom:6px;padding-left:2px}\n.g-zipbox{position:relative;display:flex;align-items:center;height:42px;background:rgba(255,255,255,.07);border:1.5px solid rgba(255,255,255,.22);border-radius:12px;padding:0 12px;transition:border-color .15s}\n.g-zipbox:focus-within{border-color:#40C9F3}.g-zipbox.bad{border-color:#ff8f8f}\n.g-zipbox .pin{position:absolute;left:12px;font-size:14px;line-height:1}\n.g-zipbox input{width:100%;height:100%;padding:0;margin:0;text-align:center;border:none;background:transparent;font-family:inherit;font-size:16px;font-weight:800;color:#fff;outline:none;letter-spacing:2px;line-height:normal;box-shadow:none}\n.g-inc{border:1px solid rgba(255,255,255,.14);border-radius:13px;overflow:hidden;margin-bottom:15px;background:rgba(255,255,255,.03)}\n.g-inc>button{width:100%;display:flex;align-items:center;justify-content:space-between;background:transparent;border:none;padding:11px 14px;font-family:inherit;font-size:12.5px;font-weight:800;color:#dfe9f5;cursor:pointer;letter-spacing:.04em}\n.g-inc .car{transition:transform .2s;color:#40C9F3}.g-inc.open .car{transform:rotate(180deg)}\n.g-inc ul{list-style:none;max-height:0;overflow:hidden;transition:max-height .28s;padding:0 16px;margin:0}\n.g-inc.open ul{max-height:420px;padding:2px 16px 12px}\n.g-inc li{font-size:12.5px;color:rgba(223,233,245,.92);padding:4px 0 4px 20px;position:relative;line-height:1.5}\n.g-inc li::before{content:\"\";position:absolute;left:2px;top:11px;width:6px;height:6px;border-radius:50%;background:#2ED87A}\n.g-inc li.you::before{background:#40C9F3}\n.g-inc li.na::before{background:#ff9b9b}\n.g-inc li b{color:#fff;font-weight:800}\n.g-q{margin-bottom:14px}.g-q:last-child{margin-bottom:0}\n.g-q>label{display:block;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#8fa6c0;margin-bottom:8px}\n.g-seg{display:flex;flex-wrap:wrap;gap:7px}\n.g-seg button{flex:1 1 0;min-width:0;font-family:inherit;font-size:13px;font-weight:700;color:#fff;background:rgba(255,255,255,.05);border:1.5px solid rgba(255,255,255,.18);border-radius:10px;padding:10px 8px;cursor:pointer;transition:all .15s;white-space:nowrap}\n.g-seg button.on{border-color:#40C9F3;background:rgba(35,210,255,.12);color:#7FE3FF;box-shadow:0 0 0 3px rgba(35,210,255,.12)}\n.g-seg.four button{flex:1 1 46%}\n.g-step{display:flex;align-items:center;gap:8px}\n.g-step button{width:42px;height:40px;flex:none;border-radius:10px;border:1.5px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);color:#40C9F3;font-size:21px;font-weight:700;cursor:pointer;line-height:1;display:flex;align-items:center;justify-content:center;transition:all .15s}\n.g-step button:hover:not(:disabled){border-color:#40C9F3}.g-step button:disabled{opacity:.3;cursor:not-allowed}\n.g-step .val{flex:1;text-align:center;height:40px;display:flex;align-items:center;justify-content:center;border:1.5px solid rgba(64,201,243,.55);background:rgba(35,210,255,.09);border-radius:10px;font-size:14.5px;font-weight:800;color:#7FE3FF;letter-spacing:.2px}\n.g-step .val span{font-size:11px;font-weight:600;color:#8fa6c0;margin-left:5px}\n.g-rooms{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}\n.g-rooms.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.g-rc{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.13);border-radius:12px;padding:10px 8px;text-align:center}\n.g-rc .rl{font-size:16.5px;font-weight:700;color:#fff;line-height:1.2;min-height:26px;display:flex;align-items:center;justify-content:center}\n.g-rc .rs{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:6px}\n.g-rc .rs button{width:28px;height:28px;border-radius:8px;border:1.5px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);font-size:17px;font-weight:700;color:#40C9F3;cursor:pointer;line-height:1;display:flex;align-items:center;justify-content:center}\n.g-rc .rs button:disabled{opacity:.3;cursor:not-allowed}\n.g-rc .rs .v{font-size:24px;line-height:1;font-weight:800;color:#fff;min-width:20px}\n.g-itemhead{display:flex;justify-content:space-between;font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#6d8199;padding:0 2px 7px}\n.g-item .lbl{min-width:0}\n.g-item{display:flex;align-items:center;justify-content:space-between;gap:10px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.13);border-radius:13px;padding:10px 13px;margin-bottom:8px;transition:all .15s}\n.g-item:last-child{margin-bottom:0}\n.g-item.picked{border-color:rgba(64,201,243,.6);background:rgba(35,210,255,.09)}\n.g-item .lbl{font-size:13.5px;font-weight:700;color:#fff;line-height:1.3}\n.g-item .rs{display:flex;align-items:center;gap:9px;flex:none}\n.g-item .rs button{width:30px;height:30px;border-radius:9px;border:1.5px solid rgba(255,255,255,.25);background:rgba(255,255,255,.06);font-size:17px;font-weight:700;color:#40C9F3;cursor:pointer;line-height:1;display:flex;align-items:center;justify-content:center}\n.g-item .rs button:disabled{opacity:.3;cursor:not-allowed}\n.g-item .rs .v{font-size:16px;font-weight:800;color:#fff;min-width:16px;text-align:center}\n.g-note{font-size:11px;color:#8fa6c0;margin-top:8px;line-height:1.5}\n.g-foot{margin-top:16px;padding-top:15px;border-top:1px solid rgba(255,255,255,.12)}\n.g-row{display:flex;align-items:center;justify-content:space-between;gap:14px}\n.g-pr{text-align:left}\n.g-price{font-size:32px;font-weight:900;letter-spacing:-1.2px;color:#2ED87A;line-height:1}\n.g-price.na{font-size:15px;color:#ff9b9b;font-weight:700;letter-spacing:0}\n.g-est{font-size:11.5px;color:#8fa6c0;margin-top:5px}\n.g-book{flex:none;background:#23D2FF;color:#0F1923;border:none;border-radius:13px;padding:15px 26px;font-family:inherit;font-size:15.5px;font-weight:800;cursor:pointer;box-shadow:0 14px 34px -12px rgba(35,210,255,.6);transition:filter .15s;white-space:nowrap}\n.g-book:hover,.g-book:focus,.g-book:active{background:#23D2FF !important;color:#0F1923 !important;filter:brightness(1.06);outline:none}\n.g-book:disabled{opacity:.45;cursor:not-allowed}\n\/* WP theme sets a red\/pink global button:hover \u2014 pin every control in this block to our palette *\/\n.hfsk-root button:hover,.hfsk-root button:focus,.hfsk-root button:active{color:inherit}\n.hfsk-pill:hover,.hfsk-pill:focus,.hfsk-pill:active{background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.02)) !important;color:#dfe9f5 !important}\n.hfsk-pill.on:hover,.hfsk-pill.on:focus,.hfsk-pill.on:active{background:linear-gradient(180deg,rgba(35,210,255,.26),rgba(35,210,255,.09)) !important;color:#fff !important}\n.g-seg button:hover,.g-seg button:focus,.g-seg button:active{background:rgba(255,255,255,.08) !important;color:#fff !important;outline:none}\n.g-seg button.on:hover,.g-seg button.on:focus,.g-seg button.on:active{background:rgba(35,210,255,.12) !important;color:#7FE3FF !important}\n.g-step button:hover,.g-step button:focus,.g-step button:active{background:rgba(255,255,255,.1) !important;color:#40C9F3 !important;outline:none}\n.g-item .rs button:hover,.g-item .rs button:focus,.g-item .rs button:active{background:rgba(255,255,255,.12) !important;color:#40C9F3 !important;outline:none}\n.g-rc .rs button:hover,.g-rc .rs button:focus,.g-rc .rs button:active{background:rgba(255,255,255,.12) !important;color:#40C9F3 !important;outline:none}\n.g-inc>button:hover,.g-inc>button:focus,.g-inc>button:active{background:rgba(255,255,255,.04) !important;color:#dfe9f5 !important;outline:none}\n.g-fine{font-size:10.5px;color:#6d8199;margin-top:12px;text-align:center}\n\/* flooring extras: pattern preview, stain picker *\/\n.g-flprev{display:flex;align-items:center;gap:10px;margin-top:9px}\n.g-flprev img{width:96px;height:64px;object-fit:cover;border-radius:9px;border:1px solid rgba(255,255,255,.18);background:#fff}\n.g-flprev span{font-size:12px;color:#8fa6c0}\n.g-flstain{display:flex;align-items:center;gap:10px;margin-top:2px}\n.g-flstain img{width:44px;height:44px;object-fit:cover;border-radius:9px;border:1px solid rgba(255,255,255,.22);flex:none}\n.g-select{flex:1;min-width:0;height:42px;padding:0 12px;border-radius:10px;background:rgba(255,255,255,.07);border:1.5px solid rgba(255,255,255,.22);color:#fff;font-family:inherit;font-size:13.5px;font-weight:600;outline:none;appearance:auto;-webkit-appearance:menulist}\n.g-select:focus{border-color:#40C9F3}\n.g-select option{color:#0F1923;background:#fff}\n@media (max-width:980px){\n  .hfsk-hero{padding:calc(34px + var(--hf-header-h, 88px)) 18px 56px}\n  \/* minmax(0,1fr): a bare 1fr track grows to the cell's min-content and the\n     hero's overflow:hidden clips it off the right edge of small phones *\/\n  .hfsk-cols{grid-template-columns:minmax(0,1fr);gap:32px}\n  .hfsk-cols>*{min-width:0;max-width:100%}\n  .hfsk-glass{margin:0 auto;width:100%;max-width:520px}\n  .hfsk-sub{margin-bottom:22px}\n  .hfsk-pills{gap:8px}\n  .hfsk-pill{font-size:12.5px;padding:9px 14px}\n}\n@media (max-width:480px){\n  .hfsk-glass{padding:20px 18px 18px}\n  .g-price{font-size:26px}\n  .g-book{padding:13px 18px;font-size:14px}\n  .g-row{gap:10px}\n  .g-zip{width:132px}\n  .g-top h3{font-size:20px}\n  \/* compress-only-when-needed: identical at 390px+, shrinks on smaller phones *\/\n  .g-seg button{white-space:normal}\n  .hfsk-pills.fixedrow .hfsk-pill{white-space:normal;text-align:center;line-height:1.15}\n  .g-rc{padding:10px 5px}\n  .g-rc .rl{font-size:clamp(13px,4.2vw,16.5px)}\n  .g-rc .rs{gap:5px}\n  .g-rc .rs button{width:26px;height:26px}\n  .g-rc .rs .v{min-width:16px;font-size:22px}\n}\n<\/style>\n\n<div class=\"hfsk-root\">\n<section class=\"hfsk-hero\">\n  <div class=\"hfsk-cols\">\n    <div class=\"hfsk-left\">\n      <div class=\"hfsk-ey\">Flooring Services<\/div>\n      <h1 class=\"hfsk-h1\">Book Trusted <span>Flooring Pros<\/span><\/h1>\n      <p class=\"hfsk-sub\">Pick a service, set the details, and book for the price you see. Upfront pricing, real availability, done in a few taps.<\/p>\n      <div class=\"hfsk-rowlabel\">Choose a service<\/div>\n      <div class=\"hfsk-pills\" id=\"hfskCats\" style=\"display:none\"><\/div>\n      <div class=\"hfsk-divider\" id=\"hfskDiv\" style=\"display:none\"><\/div>\n      <div id=\"hfskSubs\"><\/div>\n    <\/div>\n    <div><div id=\"hfskMount\"><\/div><\/div>\n  <\/div>\n<\/section>\n<\/div>\n\n<script data-no-defer=\"1\" data-no-optimize=\"1\" data-no-minify=\"1\">\n(function(){\n  var APP = '\/account';\n  var CHECKZIP = APP + '\/customer\/booking-assistant\/check-zip';\n  var BOOK = APP + '\/customer\/booking-assistant';\n  var SQ_HOUSE=['Up to 1,000 sq ft','1,001 - 2,000','2,001 - 3,000','3,001 - 4,000','4,001 - 5,000'];\n  var SQ_APT=['Up to 1,000 sq ft','1,001 - 2,000','2,001 - 3,000'];\n  var PROPS=['House \/ Townhouse','Apartment \/ Condo'];\n  var STORIES=['1 Story','2 Story','3 Story'];\n  var HW_TIER_MAX=[1000,1500,2000,2500,3000,3500,4000,4500,5000];\n  var HW_TIER_NAMES=['Up to 1,000','1,001 - 1,500','1,501 - 2,000','2,001 - 2,500','2,501 - 3,000','3,001 - 3,500','3,501 - 4,000','4,001 - 4,500','4,501 - 5,000'];\n  function hwCat(st){ if(st.indexOf('3')>=0)return '730'; if(st.indexOf('2')>=0)return '729'; return '728'; }\n  var PA_SQFT=['Under 1,000','1,000-1,499','1,500-1,999','2,000-2,499','2,500-2,999','3,000-3,499','3,500-3,999','4,000-4,499','4,500-4,999'];\n  var PA_CEILINGS=['Up to 9 ft ceiling','Between 9 and 12 ft ceiling'];\n  var PA_SIDINGS=['Wood','Brick','Stucco \/ Hardie Board','Vinyl'];\n  var PA_STORIES=['1 Story','2 Story','3 Story'];\n  var PA_GAR=['No Garage','Attached','Detached'];\n  var PA_GARSIZE=['Single Car','Two Car','Three Car'];\n  var PA_EXT_CATS={'Wood':['133','136','139'],'Brick':['134','137','140'],'Stucco \/ Hardie Board':['135','138','141'],'Vinyl':['142','143','144']};\n  var GZIP='70124';\n\n  var SERVICE='Flooring';\n  var SHOWCATS=false;\n  var CATS=[];\n  \/\/ Option labels MUST match the booking chat's FL_* lists exactly \u2014 they are\n  \/\/ sent verbatim in the full handoff and matched against DB row titles.\n  var FL_MATS=['Wood','Tile','Vinyl','Carpet'];\n  var FL_WOOD_PATS=['Staggered','Center Offset','Herringbone','Chevron'];\n  var FL_TILE_PATS=['Center Offset','Grid','Diamond','Parquet','Herringbone','Chevron','Mosaic','Staggered'];\n  var FL_VINYL_PATS=['Staggered','Center Offset','Herringbone','Chevron'];\n  var FL_TMATS=['Ceramic \/ Porcelain','Marble \/ Travertine'];\n  var FL_INSTALLS=['Nail','Glue'];\n  var FL_REMTYPES=['Wood','Tile','Vinyl','Carpet'];\n  var FL_SQFTS=['100','200','300','400','500','600','700','800','900','1000','1500','2000','2500','3000'];\n  var FL_WOOD_CATS={'Staggered':'353','Center Offset':'354','Herringbone':'355','Chevron':'356'};\n  var FL_TILE_CATS={'Staggered':'462','Center Offset':'463','Herringbone':'464','Chevron':'465','Grid':'466','Diamond':'467','Parquet':'468','Mosaic':'469'};\n  var FL_VINYL_CATS={'Staggered':'360','Center Offset':'361','Herringbone':'362','Chevron':'363'};\n  var FLIMG='https:\/\/housefly.com\/account\/front_assets\/assets\/images\/';\n  var FL_PAT_IMGS={'Staggered':FLIMG+'staggered.png','Center Offset':FLIMG+'center-offset.png','Herringbone':FLIMG+'herringbone.png','Chevron':FLIMG+'chevron.png','Grid':FLIMG+'grid.png','Diamond':FLIMG+'diamond.png','Parquet':FLIMG+'basket-weave.png','Mosaic':FLIMG+'mosaic.png'};\n  var FL_STAINS=['Natural','Golden Oak','Provincial','Red Oak','Puritan Pine','Ipswich Pine','Sedona Red','Colonial Maple','Special Walnut','Red Mahogany','Early American','Red Chestnut','English Chestnut','Cherry','Fruitwood','Golden Pecan','Pickled Oak','Weathered Oak','Classic Gray','Honey','Espresso','True Black','Simply White','Driftwood'];\n  var FL_STAIN_IMGS={}; FL_STAINS.forEach(function(o,i){ FL_STAIN_IMGS[o]=FLIMG+'texture\/texture-'+(i+1)+'.jpg'; });\n  var FL_STAIN_SKIP=\"I'll decide later\";\n  var FL_INC={\n    'Wood':[ 'Measure, cut, and secure flooring for durable, gap-free results',\n      ['Materials','Nails and glue included'],\n      ['Customer provides','All floorboards (including overage)'],\n      ['Additional costs','Demolition and subfloor repair, flooring wider than 5 inches, moving furniture'] ],\n    'Tile':[ 'Measure, cut, and secure flooring for durable, gap-free results',\n      ['Materials','Thinset tile mortar and spacers included'],\n      ['Customer provides','All tile flooring (including overage) and grout'],\n      ['Additional costs','Demolition and subfloor repair, flooring wider than 21 inches, moving furniture'] ],\n    'Vinyl':[ 'Measure, cut, and secure flooring for durable, gap-free results',\n      ['Customer provides','All floorboards (including overage) and padding'],\n      ['Additional costs','Demolition and subfloor repair, moving furniture'] ],\n    'Carpet':[ 'Measure, cut, and secure flooring for durable, gap-free results',\n      ['Customer provides','All carpet and padding'],\n      ['Additional costs','Demolition and subfloor repair, moving furniture'] ]\n  };\n  var CARDS = [\n    { key:'flnew', row:1, grp:'fl', title:'New Flooring', sub:'New Flooring', badge:'\ud83e\udeb5 Priced per sq ft', flow:'fl', kind:'new', book:'Book This Job',\n      inc:FL_INC['Wood'] },\n    { key:'flsand', row:1, grp:'fl', title:'Sand & Refinish', sub:'Sand & Refinish', badge:'\u2728 Stain included', flow:'fl', kind:'sand', book:'Book This Job',\n      inc:[ 'Sand floors smooth, seal, and coat with a durable finish',\n        ['Materials','Stain included'],\n        ['Additional costs','Extensive repairs or leveling, moving furniture'] ],\n      note:'Stain color does not change the price. Not sure? Pick it later with your pro.' },\n    { key:'flsub', row:1, grp:'fl', title:'Sub-Floor Repair', sub:'Sub-Floor Repair', badge:'\ud83d\udd28 Materials included', flow:'fl', kind:'sub', book:'Book This Job',\n      inc:[ 'Remove damaged panels, install new plywood, and level the surface',\n        ['Materials','Plywood, screws, and nails included'],\n        ['Additional costs','Joist replacement or extensive self-leveling compound, moving furniture'] ],\n      note:'Measure the damaged area. Your pro levels the surface, ready for new flooring.' },\n    { key:'flrem', row:1, grp:'fl', title:'Floor Removal', sub:'Floor Removal', badge:'\ud83e\uddf9 Down to the sub-floor', flow:'fl', kind:'rem', book:'Book This Job',\n      inc:[ 'Remove flooring and underlayment down to the sub-floor',\n        ['Additional costs','Disposal of debris, moving furniture'] ] }\n  ];\n\n  function isApt(p){ return p.indexOf('Apartment')>=0||p.indexOf('Condo')>=0; }\n  function fmt(n){ return '$'+Number(n).toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2}); }\n  function fmtDur(min){ min=Math.round(min); var d=Math.floor(min\/480),r=min%480,h=Math.floor(r\/60),m=r%60,p=[]; if(d)p.push(d+' day'+(d>1?'s':'')); if(h)p.push(h+' hr'); if(m)p.push(m+' min'); if(!p.length)p.push('0 min'); return p.join(' '); }\n  function findRow(items, needle){ items=items||[]; for(var i=0;i<items.length;i++){ if(items[i].title && items[i].title.indexOf(needle)>=0) return items[i]; } return null; }\n  function norm(s){ return (''+s).replace(\/\\s+\/g,' ').trim().toLowerCase(); }\n  function normRow(items, label){ items=items||[]; var n=norm(label); for(var i=0;i<items.length;i++){ if(norm(items[i].title)===n) return items[i]; } return null; }\n  function applyFee(raw, tiers){ tiers=tiers||[]; for(var t=0;t<tiers.length;t++){ if(tiers[t].max===null||raw<=tiers[t].max){ var p=tiers[t].pct||0; return p>0?Math.round(raw*(1+p\/100)*100)\/100:raw; } } return raw; }\n  function sqMeta(s,a){ if(s.indexOf('Up to')>=0)return{p:0.8,s:a?10:0}; if(s.indexOf('1,001')>=0)return{p:0.9,s:a?15:0}; if(s.indexOf('2,001')>=0)return{p:1.0,s:a?15:0}; if(s.indexOf('3,001')>=0)return{p:1.1,s:0}; if(s.indexOf('4,001')>=0)return{p:1.2,s:0}; return{p:1.0,s:0}; }\n  \/\/ Clean visual pricing: round UP to the next $X4.99\/$X9.99 (matches booking chat).\n  function roundClean(p){ p=Math.round(p*100)\/100; return Math.ceil(Math.round((p+0.01)*100)\/500)*5-0.01; }\n  \/\/ SP per-unit durations (\"45 MIN\", \"1 HR 15 MIN\") need fractional hours: never ceil here.\n  function fracHours(str){ if(!str)return 0; var s=(''+str).toUpperCase(); var h=s.match(\/(\\d+)\\s*H(?:OU)?R\/), m=s.match(\/(\\d+)\\s*MIN\/); return (h?parseInt(h[1]):0)+(m?parseInt(m[1])\/60:0); }\n  \/\/ Chat's parseDurationString: whole hours, days=8hr, missing=2, min 1.\n  function pdsHours(str){ if(!str)return 2; var s=(''+str).toUpperCase(); var dm=s.match(\/(\\d+)\\s*-?\\s*DAY\/); if(dm)return parseInt(dm[1])*8; var h=fracHours(s); return Math.max(1,Math.ceil(h||2)); }\n  \/\/ Painting helpers: mirror the booking chat's matchPricingItem \/ paint \/ garage lookups.\n  function paDurH(str){ if(!str)return 2; var s=(''+str).toUpperCase(); var dm=s.match(\/(\\d+)\\s*-?\\s*DAY\/); if(dm)return parseInt(dm[1])*8; var hr=fracHours(s); return Math.max(1,Math.ceil(hr||2)); }\n  function paCat(c,s){ if(c.kind==='whole')return s.ceil===1?'127':'126'; if(c.kind==='rooms')return s.ceil===1?'129':'128'; if(c.kind==='walls')return '124'; if(c.kind==='dry')return '125'; return PA_EXT_CATS[PA_SIDINGS[s.siding]][s.story]; }\n  \/\/ Flooring category resolution \u2014 mirrors the chat's getLastCategoryId Flooring branch.\n  function flCat(c,s){\n    if(c.kind==='new'){\n      var m=FL_MATS[s.mat];\n      if(m==='Wood') return FL_WOOD_CATS[FL_WOOD_PATS[s.wpat]];\n      if(m==='Tile') return FL_TILE_CATS[FL_TILE_PATS[s.tpat]];\n      if(m==='Vinyl') return FL_VINYL_CATS[FL_VINYL_PATS[s.vpat]];\n      return '352';\n    }\n    if(c.kind==='sand') return '342';\n    if(c.kind==='sub') return '757';\n    return '346';\n  }\n  function paMain(rows, terms){\n    var cand=[], i;\n    for(i=0;i<rows.length;i++){ var r=rows[i]; var pp=((r.parent||'')+'').toLowerCase(); if(pp.indexOf('garage')>=0)continue;\n      var fid=parseInt(r.filed_id,10); if(fid===10||fid===11)continue;\n      var rawP=(r.price||'').toString().trim(); if(!rawP||rawP==='$'||rawP.indexOf('%')>=0||parseFloat(rawP)===0)continue;\n      if(fid===1||fid===6||fid===8||fid===12||fid===21||fid===39||fid===52)continue;\n      cand.push(r); }\n    if(!cand.length)return null; if(cand.length===1)return cand[0];\n    for(i=0;i<cand.length;i++){ var t=(cand[i].title||'').toLowerCase().replace(\/,\/g,'');\n      for(var j=0;j<terms.length;j++){ var tm=terms[j].toLowerCase().replace(\/,\/g,''); if(t.indexOf(tm)>=0)return cand[i]; } }\n    return cand[0];\n  }\n  function paPaint(rows, sqft){\n    for(var i=0;i<rows.length;i++){ if(parseInt(rows[i].filed_id,10)===11)return rows[i]; }\n    if(!sqft)return null; var n=sqft.toLowerCase().replace(\/,\/g,'');\n    for(var j=0;j<rows.length;j++){ if(parseInt(rows[j].filed_id,10)!==10)continue; var t=(rows[j].title||'').toLowerCase().replace(\/,\/g,'').trim(); if(!t)continue; if(t.indexOf(n)>=0||n.indexOf(t)>=0)return rows[j]; }\n    for(var k=0;k<rows.length;k++){ if(parseInt(rows[k].filed_id,10)===10&&parseFloat(rows[k].price)>0)return rows[k]; }\n    return null;\n  }\n  function paGarage(rows,type,count){ var tn=type.toLowerCase(),cn=count.toLowerCase();\n    for(var i=0;i<rows.length;i++){ var pp=((rows[i].parent||'')+'').toLowerCase(); if(pp.indexOf('garage')<0)continue; if(pp.indexOf(tn)<0)continue; if(((rows[i].title||'')+'').toLowerCase().indexOf(cn)<0)continue; return rows[i]; } return null; }\n  function paGaragePaint(rows,type,count){ var cn=count.toLowerCase(); var det=type.toLowerCase().indexOf('detached')>=0; var mi=0;\n    for(var i=0;i<rows.length;i++){ if(parseInt(rows[i].filed_id,10)!==52)continue; if(((rows[i].title||'')+'').toLowerCase().indexOf(cn)<0)continue; if(det&&mi===0){mi++;continue;} return rows[i]; } return null; }\n\n  function priceFor(c,s){\n    var d=s.data; if(!d||!d.available) return null;\n    var final=function(raw){ return roundClean(Math.max(d.min||0, applyFee(raw,d.tiers))); };\n    if(c.flow==='hourly'){\n      var row=findRow((d.pricing||{})['439'], s.cleaners===2?'2 Cleaner':'1 Cleaner');\n      var rate=row?parseFloat(row.price):(d.hourly_rate||30);\n      return { price:final(rate*s.hours), dur:s.hours*60 };\n    }\n    if(c.flow==='housewash'){\n      var rows=(d.pricing||{})[hwCat(s.stories)]||[];\n      var rr=findRow(rows,'Per Square Foot'); if(!rr) return null;\n      var hwRate=parseFloat(rr.price)||0;\n      var ti=HW_TIER_MAX.length-1; for(var i=0;i<HW_TIER_MAX.length;i++){ if(s.sqft<=HW_TIER_MAX[i]){ti=i;break;} }\n      var tRow=findRow(rows,HW_TIER_NAMES[ti]);\n      var hrs=tRow?fracHours(tRow.price):0; if(!hrs)hrs=4;\n      return { price:final(hwRate*s.sqft), dur:hrs*60 };\n    }\n    if(c.flow==='pwarea'){\n      var items=(d.pricing||{})[c.cat]||[];\n      var pr=null; for(var j=0;j<items.length;j++){ if(parseFloat(items[j].price)>0){ pr=items[j]; break; } }\n      if(!pr) return null;\n      var uRate=parseFloat(pr.price)||0;\n      var uDur=fracHours(pr.duration); if(!uDur)uDur=0.25;\n      return { price:final(uRate*s.area), dur:uDur*(s.area\/c.unitSize)*60 };\n    }\n    if(c.flow==='loads'){\n      var lItems=(d.pricing||{})[c.cat]||[];\n      var lRow=null; for(var li=0;li<lItems.length;li++){ if(parseFloat(lItems[li].price)>0){ lRow=lItems[li]; break; } }\n      if(!lRow) return null;\n      return { price:final((parseFloat(lRow.price)||0)*s.loads), dur:s.loads*60 };\n    }\n    if(c.flow==='flat'){\n      \/\/ Fixed-price service: match the chat's single-flow path \u2014 pick the named\n      \/\/ row if given, else the first usable priced row in the category.\n      var flRows=(d.pricing||{})[c.cat]||[];\n      var flRow=c.pick?normRow(flRows,c.pick):null;\n      if(!flRow){ for(var fl=0;fl<flRows.length;fl++){ if(parseFloat(flRows[fl].price)>0){ flRow=flRows[fl]; break; } } }\n      if(!flRow) return null;\n      var flDur=fracHours(flRow.duration); if(!flDur)flDur=2;\n      return { price:final(parseFloat(flRow.price)||0), dur:flDur*60 };\n    }\n    if(c.flow==='fl'){\n      \/\/ Flooring: per-sqft rate x sqft; duration is per 100 sq ft (chat parity).\n      \/\/ Skip percentage rows (fid-21 volume-discount tiers are display-only in the chat too).\n      var fcat=flCat(c,s); var frows=((d.pricing||{})[fcat]||[]).filter(function(r){ return ((r.price||'')+'').indexOf('%')<0 && parseFloat(r.price)>0; });\n      if(!frows.length) return null;\n      var frow=null;\n      if(c.kind==='new'){\n        var fmat=FL_MATS[s.mat];\n        if(fmat==='Wood') frow=normRow(frows, FL_INSTALLS[s.inst]);\n        else if(fmat==='Tile') frow=normRow(frows, FL_TMATS[s.tmat]);\n        else frow=frows[0];\n      } else if(c.kind==='rem'){\n        frow=normRow(frows, FL_REMTYPES[s.rt]);\n      } else {\n        frow=frows[0];\n      }\n      if(!frow) return null;\n      var fsq=parseInt(FL_SQFTS[s.sq],10);\n      var fhrs=Math.max(1, Math.ceil(fracHours(frow.duration)*(fsq\/100)));\n      return { price:final((parseFloat(frow.price)||0)*fsq), dur:fhrs*60 };\n    }\n    if(c.flow==='hi'){\n      \/\/ Home Inspection: fid-3 base row by sqft range + house-only surcharges\n      \/\/ (fid-39 raised\/multi-family, fid-12 extra AC\/50yr) \u2014 chat parity.\n      var hRows=(d.pricing||{})[s.prop===0?'37':'38']||[];\n      var hList=s.prop===0?HI_SQFT_HOUSE:HI_SQFT_APT;\n      var hTerm=norm(hList[s.hsq]).replace(\/,\/g,'');\n      var hBase=null, hFirst=null;\n      for(var hb=0;hb<hRows.length;hb++){ var hr=hRows[hb];\n        if(parseInt(hr.filed_id,10)!==3) continue;\n        var ht=norm(hr.title).replace(\/,\/g,'');\n        if(!ht||ht==='sq. feet'||!(parseFloat(hr.price)>0)) continue;\n        if(!hFirst) hFirst=hr;\n        if(ht.indexOf(hTerm)>=0){ hBase=hr; break; }\n        var hn=hTerm.replace(\/[^0-9]\/g,' ').trim(), tn=ht.replace(\/[^0-9]\/g,' ').trim();\n        if(hn&&tn&&hn===tn){ hBase=hr; break; }\n      }\n      if(!hBase) hBase=hFirst;\n      if(!hBase) return null;\n      var hRaw=parseFloat(hBase.price)||0;\n      var hDur=pdsHours(hBase.duration);\n      if(s.prop===0){\n        if(s.raised===0){ for(var h1=0;h1<hRows.length;h1++){ if(parseInt(hRows[h1].filed_id,10)===39&&norm(hRows[h1].title).indexOf('raised')>=0){ hRaw+=parseFloat(hRows[h1].price)||0; hDur+=fracHours(hRows[h1].duration); break; } } }\n        if(s.multi>0){ var hU=[0,2,3,4][s.multi]; for(var h2=0;h2<hRows.length;h2++){ if(parseInt(hRows[h2].filed_id,10)===39&&norm(hRows[h2].title).indexOf('multi')>=0){ hRaw+=(parseFloat(hRows[h2].price)||0)*(hU-1); hDur+=fracHours(hRows[h2].duration)*(hU-1); break; } } }\n        if(s.hvac>0){ for(var h3=0;h3<hRows.length;h3++){ if(parseInt(hRows[h3].filed_id,10)===12&&norm(hRows[h3].title).indexOf('ac')>=0){ hRaw+=(parseFloat(hRows[h3].price)||0)*s.hvac; break; } } }\n        if(s.age===1){ for(var h4=0;h4<hRows.length;h4++){ if(parseInt(hRows[h4].filed_id,10)===12&&norm(hRows[h4].title).indexOf('50')>=0){ hRaw+=parseFloat(hRows[h4].price)||0; break; } } }\n      }\n      return { price:final(hRaw), dur:hDur*60 };\n    }\n    if(c.flow==='pm'){\n      \/\/ Photo & Marketing: flat row matched by photo count or sqft range,\n      \/\/ contains-match in row order, else first candidate \u2014 chat parity.\n      var pRows=((d.pricing||{})[c.cat]||[]).filter(function(r){ return ((r.price||'')+'').indexOf('%')<0 && parseFloat(r.price)>0; });\n      if(!pRows.length) return null;\n      var pTerm=c.kind==='photo' ? PM_COUNTS[s.n].replace(\/\\s*photos?\/i,'') : PM_SQFT[s.n];\n      var pRow=null; var pt=norm(pTerm).replace(\/,\/g,'');\n      for(var p1=0;p1<pRows.length;p1++){ if(norm(pRows[p1].title).replace(\/,\/g,'').indexOf(pt)>=0){ pRow=pRows[p1]; break; } }\n      if(!pRow) pRow=pRows[0];\n      return { price:final(parseFloat(pRow.price)||0), dur:pdsHours(pRow.duration||pRow.title)*60 };\n    }\n    if(c.flow==='items'){\n      var rows2=(d.pricing||{})[c.cat]||[];\n      var total=0, durH=0, n=0;\n      for(var k=0;k<c.items.length;k++){\n        var qy=s.qty[k]||0; if(!qy) continue;\n        var rw=normRow(rows2, c.items[k]);\n        if(!rw) continue;\n        total+=qy*(parseFloat(rw.price)||0);\n        durH+=qy*fracHours(rw.duration);\n        n+=qy;\n      }\n      if(!n) return { none:true };\n      \/\/ booking chat: duration = max(1, ceil(sum)) whole hours\n      return { price:final(total), dur:Math.max(1,Math.ceil(durH))*60 };\n    }\n    if(c.flow==='pa'){\n      var cat=paCat(c,s); var rows=(d.pricing||{})[cat]||[]; if(!rows.length)return null;\n      if(c.kind==='dry'){\n        var tot=0, dh=0, cnt=0;\n        for(var di=0;di<c.items.length;di++){ var qy=s.qty[di]||0; if(!qy)continue; var rw=normRow(rows, c.items[di]); if(!rw)continue;\n          tot+=qy*(parseFloat(rw.price)||0); dh+=qy*fracHours(rw.duration); cnt+=qy; }\n        if(!cnt) return { none:true };\n        return { price:final(tot), dur:Math.max(1,Math.ceil(dh))*60 };\n      }\n      var pq=1; if(c.kind==='rooms'||c.kind==='walls')pq=s.n;\n      var terms=[]; if(c.kind==='whole'||c.kind==='ext'){ terms.push(PA_SQFT[s.sq]); if(c.kind==='whole')terms.push(PA_CEILINGS[s.ceil]); }\n      var main=paMain(rows,terms); if(!main)return null;\n      var durH=paDurH(main.duration||main.title); if(c.kind==='rooms'||c.kind==='walls')durH*=pq;\n      var totP=(parseFloat(main.price)||0)*pq;\n      if(s.paint===1){ var pr=paPaint(rows,(c.kind==='whole'||c.kind==='ext')?PA_SQFT[s.sq]:null); if(pr){ var ppv=parseFloat(pr.price)||0; if(parseInt(pr.filed_id,10)===11)ppv*=pq; totP+=ppv; } }\n      if(c.kind==='ext'&&s.gar>0){ var gt=s.gar===1?'Attached':'Detached', gc=PA_GARSIZE[s.gsize];\n        var g=paGarage(rows,gt,gc); if(g){ totP+=parseFloat(g.price)||0; durH+=paDurH(g.duration); }\n        if(s.paint===1){ var gp=paGaragePaint(rows,gt,gc); if(gp)totP+=parseFloat(gp.price)||0; } }\n      return { price:final(totP), dur:durH*60 };\n    }\n    var spRow=findRow((d.pricing||{})[c.cat], 'Service Price');\n    var rate2=spRow?parseFloat(spRow.price):(d.hourly_rate||30);\n    var m=c.mults, mm=sqMeta(s.sqft,isApt(s.prop));\n    var raw2=(rate2*m.K+rate2*m.B+rate2*m.F)*mm.p+(s.beds-1)*rate2*m.B+(s.full-1)*rate2*m.F+s.half*rate2*m.H+mm.s;\n    var dur=c.kitchen+s.beds*15+s.full*15+s.half*15; if(s.sqft.indexOf('Up to')>=0)dur-=30; else if(s.sqft.indexOf('1,001')>=0)dur-=15; else if(s.sqft.indexOf('3,001')>=0)dur+=15; else if(s.sqft.indexOf('4,001')>=0)dur+=30;\n    return { price:final(raw2), dur:dur };\n  }\n\n  \/\/ GA4 funnel events \u2014 same conventions + host gate as booking-chat's _hfPush.\n  \/\/ GTM 'Custom Event - Booking Funnel Events' trigger already whitelists these.\n  var _hfSeenCards={}, _hfSeenZips={};\n  function _hfHeroPush(eventName, payload){\n    try{\n      var hosts=['housefly.com','www.housefly.com'];\n      var force=false; try{ force=(new URLSearchParams(window.location.search)).get('hf_force_track')==='1'; }catch(_e){}\n      if(!force && hosts.indexOf(window.location.hostname||'')===-1) return;\n      window.dataLayer=window.dataLayer||[];\n      if(eventName.indexOf('hf_')!==0) window.dataLayer.push({ecommerce:null});\n      var o={event:eventName};\n      if(payload && typeof payload==='object'){\n        if(eventName.indexOf('hf_')===0){ for(var k in payload) if(Object.prototype.hasOwnProperty.call(payload,k)) o[k]=payload[k]; }\n        else { o.ecommerce=payload; }\n      }\n      window.dataLayer.push(o);\n    }catch(err){}\n  }\n\n  function incLi(x){\n    if(Object.prototype.toString.call(x)==='[object Array]'){\n      var you=(x[0].indexOf('Customer')>=0||x[0]==='Note')?' class=\"you\"':'';\n      return '<li'+you+'><b>'+x[0]+':<\/b> '+x[1]+'<\/li>';\n    }\n    return '<li'+(x.indexOf('not include')>=0?' class=\"na\"':'')+'>'+x+'<\/li>';\n  }\n\n  function cardHTML(c){\n    var s=stateFor(c);\n    var recBlock = c.recurring\n      ? '<div class=\"g-q\"><label>How often?<\/label><div class=\"g-seg\" id=\"rec_'+c.key+'\"><\/div><\/div>'+\n        '<div class=\"g-q\" id=\"freqq_'+c.key+'\" style=\"display:none\"><label>Frequency<\/label><div class=\"g-seg\" id=\"freq_'+c.key+'\"><\/div><\/div>'\n      : '';\n    var flow;\n    if(c.flow==='hourly'){\n      flow = recBlock+'<div class=\"g-q\"><label>How many cleaners?<\/label><div class=\"g-seg\" id=\"cl_'+c.key+'\"><\/div><\/div>'+\n        '<div class=\"g-q\"><label>How many hours?<\/label><div class=\"g-step\"><button data-a=\"hr-\">&minus;<\/button><div class=\"val\" id=\"hr_'+c.key+'\">2 <span>hours<\/span><\/div><button data-a=\"hr+\">+<\/button><\/div><\/div>';\n    } else if(c.flow==='housewash'){\n      flow = '<div class=\"g-q\"><label>How many stories?<\/label><div class=\"g-seg\" id=\"st_'+c.key+'\"><\/div><\/div>'+\n        '<div class=\"g-q\"><label>How many square feet is the home?<\/label><div class=\"g-step\"><button data-a=\"hsq-\">&minus;<\/button><div class=\"val\" id=\"hsq_'+c.key+'\">1,500<span>sq ft<\/span><\/div><button data-a=\"hsq+\">+<\/button><\/div>'+\n        '<div class=\"g-note\">'+c.note+'<\/div><\/div>';\n    } else if(c.flow==='pwarea'){\n      var qLabel = c.key==='fw' ? 'Approximate linear feet to wash?' : 'Approximate area to wash?';\n      flow = '<div class=\"g-q\"><label>'+qLabel+'<\/label><div class=\"g-step\"><button data-a=\"pwa-\">&minus;<\/button><div class=\"val\" id=\"pwa_'+c.key+'\">'+c.aDef.toLocaleString()+'<span>'+c.unit+'<\/span><\/div><button data-a=\"pwa+\">+<\/button><\/div>'+\n        '<div class=\"g-note\">'+c.note+'<\/div><\/div>';\n    } else if(c.flow==='loads'){\n      flow = '<div class=\"g-q\"><label>How many truckloads?<\/label><div class=\"g-step\"><button data-a=\"ld-\">&minus;<\/button><div class=\"val\" id=\"ld_'+c.key+'\">1<span>truckload<\/span><\/div><button data-a=\"ld+\">+<\/button><\/div>'+\n        '<div class=\"g-note\">'+c.note+'<\/div><\/div>';\n    } else if(c.flow==='pa'){\n      flow = '<div id=\"paq_'+c.key+'\"><\/div>';\n    } else if(c.flow==='flat'){\n      flow = c.note ? '<div class=\"g-q\"><div class=\"g-note\">'+c.note+'<\/div><\/div>' : '';\n    } else if(c.flow==='fl'){\n      flow = '<div id=\"flq_'+c.key+'\"><\/div>';\n    } else if(c.flow==='hi'||c.flow==='pm'){\n      flow = '<div id=\"dq_'+c.key+'\"><\/div>';\n    } else if(c.flow==='items'){\n      flow = '<div class=\"g-q\"><label>'+c.q+'<\/label>'+\n        '<div class=\"g-itemhead\"><span>'+c.colL+'<\/span><span>'+c.colR+'<\/span><\/div>'+\n        '<div id=\"rows_'+c.key+'\"><\/div>'+\n        '<div class=\"g-note\">Add every item you need. The price and duration update as you go.<\/div><\/div>';\n    } else {\n      flow = recBlock+'<div class=\"g-q\"><label>What type of property?<\/label><div class=\"g-seg\" id=\"pr_'+c.key+'\"><\/div><\/div>'+\n        '<div class=\"g-q\"><label>How many square feet?<\/label><div class=\"g-step\"><button data-a=\"sq-\">&minus;<\/button><div class=\"val\" id=\"sq_'+c.key+'\">1,001 - 2,000<span>sq ft<\/span><\/div><button data-a=\"sq+\">+<\/button><\/div><\/div>'+\n        '<div class=\"g-q\"><label>Bedrooms &amp; bathrooms<\/label><div class=\"g-rooms\">'+\n          ['beds','full','half'].map(function(k){var lbl=k==='beds'?'Bedrooms':(k==='full'?'Full Baths':'Half Baths');return '<div class=\"g-rc\"><div class=\"rl\">'+lbl+'<\/div><div class=\"rs\"><button data-a=\"'+k+'-\">&minus;<\/button><span class=\"v\" id=\"'+k+'_'+c.key+'\">'+(k==='beds'?1:(k==='full'?1:0))+'<\/span><button data-a=\"'+k+'+\">+<\/button><\/div><\/div>';}).join('')+\n        '<\/div><\/div>';\n    }\n    return '<div class=\"hfsk-glass\" data-key=\"'+c.key+'\">'+\n      '<div class=\"g-top\"><div><h3>'+c.title+'<\/h3><span class=\"g-badge\">'+c.badge+'<\/span><\/div>'+\n        '<div class=\"g-zip\"><label>Your ZIP code<\/label><div class=\"g-zipbox\" id=\"zb_'+c.key+'\"><span class=\"pin\">\ud83d\udccd<\/span>'+\n        '<input id=\"z_'+c.key+'\" type=\"text\" inputmode=\"numeric\" maxlength=\"5\" value=\"'+GZIP+'\" aria-label=\"ZIP code\"><\/div><\/div><\/div>'+\n      '<div class=\"g-inc'+(c.expand?' open':'')+'\" id=\"inc_'+c.key+'\"><button data-a=\"inc\">SERVICE INCLUDES <span class=\"car\">\u25be<\/span><\/button><ul>'+\n        c.inc.map(incLi).join('')+'<\/ul><\/div>'+\n      flow+\n      '<div class=\"g-foot\"><div class=\"g-row\"><div class=\"g-pr\"><div class=\"g-price\" id=\"pv_'+c.key+'\">&hellip;<\/div><div class=\"g-est\" id=\"est_'+c.key+'\"><\/div><\/div>'+\n        '<button class=\"g-book\" id=\"bk_'+c.key+'\">'+(c.book||'Book This Clean')+'<\/button><\/div>'+\n        '<div class=\"g-fine\">Upfront price &middot; free cancellation up to 24 hours before service<\/div><\/div>'+\n    '<\/div>';\n  }\n\n  var ST={};\n  function stateFor(c){\n    if(!ST[c.key]){\n      if(c.flow==='hourly') ST[c.key]={zip:GZIP,recurring:'One Time',frequency:'Weekly',cleaners:1,hours:2,data:null};\n      else if(c.flow==='housewash') ST[c.key]={zip:GZIP,stories:'1 Story',sqft:1500,data:null};\n      else if(c.flow==='pwarea') ST[c.key]={zip:GZIP,area:c.aDef,data:null};\n      else if(c.flow==='loads') ST[c.key]={zip:GZIP,loads:1,data:null};\n      else if(c.flow==='flat') ST[c.key]={zip:GZIP,data:null};\n      else if(c.flow==='fl'){\n        if(c.kind==='new') ST[c.key]={zip:GZIP,mat:0,wpat:0,tpat:0,vpat:0,tmat:0,inst:0,sq:4,data:null};\n        else if(c.kind==='rem') ST[c.key]={zip:GZIP,rt:0,sq:4,data:null};\n        else if(c.kind==='sand') ST[c.key]={zip:GZIP,sq:4,stain:FL_STAIN_SKIP,data:null};\n        else ST[c.key]={zip:GZIP,sq:4,data:null};\n      }\n      else if(c.flow==='hi') ST[c.key]={zip:GZIP,prop:0,hsq:2,raised:1,multi:0,hvac:0,age:0,data:null};\n      else if(c.flow==='pm') ST[c.key]={zip:GZIP,n:(c.kind==='photo'?3:1),data:null};\n      else if(c.flow==='items') ST[c.key]={zip:GZIP,qty:c.items.map(function(_,i){return i===0?1:0;}),data:null};\n      else if(c.flow==='pa'){\n        if(c.kind==='whole') ST[c.key]={zip:GZIP,ceil:0,sq:1,paint:0,data:null};\n        else if(c.kind==='rooms') ST[c.key]={zip:GZIP,ceil:0,n:1,paint:0,data:null};\n        else if(c.kind==='walls') ST[c.key]={zip:GZIP,n:1,paint:0,data:null};\n        else if(c.kind==='dry') ST[c.key]={zip:GZIP,qty:c.items.map(function(_,i){return i===0?1:0;}),data:null};\n        else ST[c.key]={zip:GZIP,siding:0,story:0,sq:1,gar:0,gsize:0,paint:0,data:null};\n      }\n      else ST[c.key]={zip:GZIP,recurring:'One Time',frequency:'Weekly',prop:'House \/ Townhouse',sqft:'1,001 - 2,000',beds:1,full:1,half:0,data:null};\n    }\n    return ST[c.key];\n  }\n\n  function renderDynamic(c){\n    var s=ST[c.key];\n    if(c.recurring){\n      var rc=document.getElementById('rec_'+c.key); rc.innerHTML='';\n      ['One Time','Recurring'].forEach(function(o){var b=document.createElement('button');b.textContent=o;if(o===s.recurring)b.className='on';b.onclick=function(){s.recurring=o; if(o==='Recurring'&&c.flow==='hourly'&&s.hours>4)s.hours=4; renderDynamic(c);update(c);};rc.appendChild(b);});\n      var fqW=document.getElementById('freqq_'+c.key), fq=document.getElementById('freq_'+c.key);\n      if(s.recurring==='Recurring'){ fqW.style.display=''; fq.innerHTML=''; ['Weekly','Bi-Weekly','Monthly'].forEach(function(o){var b=document.createElement('button');b.textContent=o;if(o===s.frequency)b.className='on';b.onclick=function(){s.frequency=o;renderDynamic(c);update(c);};fq.appendChild(b);}); }\n      else { fqW.style.display='none'; }\n    }\n    if(c.flow==='hourly'){\n      var cl=document.getElementById('cl_'+c.key); cl.innerHTML='';\n      ['1 Cleaner','2 Cleaners'].forEach(function(lbl,i){var n=i+1;var b=document.createElement('button');b.textContent=lbl;if(n===s.cleaners)b.className='on';b.onclick=function(){s.cleaners=n;renderDynamic(c);update(c);};cl.appendChild(b);});\n      document.getElementById('hr_'+c.key).innerHTML=s.hours+' <span>'+(s.hours===1?'hour':'hours')+'<\/span>';\n    } else if(c.flow==='housewash'){\n      var stEl=document.getElementById('st_'+c.key); stEl.innerHTML='';\n      STORIES.forEach(function(o){var b=document.createElement('button');b.textContent=o;if(o===s.stories)b.className='on';b.onclick=function(){s.stories=o;renderDynamic(c);update(c);};stEl.appendChild(b);});\n      document.getElementById('hsq_'+c.key).innerHTML=s.sqft.toLocaleString()+'<span>sq ft<\/span>';\n    } else if(c.flow==='pwarea'){\n      document.getElementById('pwa_'+c.key).innerHTML=s.area.toLocaleString()+'<span>'+c.unit+'<\/span>';\n    } else if(c.flow==='loads'){\n      document.getElementById('ld_'+c.key).innerHTML=s.loads+'<span>truckload'+(s.loads>1?'s':'')+'<\/span>';\n        } else if(c.flow==='pa'){\n      var seg=function(k,opts,sel,four){ return '<div class=\"g-seg'+(four?' four':'')+'\">'+opts.map(function(o,i){return '<button data-a=\"paseg\" data-k=\"'+k+'\" data-i=\"'+i+'\" class=\"'+(i===sel?'on':'')+'\">'+o+'<\/button>';}).join('')+'<\/div>'; };\n      var stp=function(k,txt,unit,atMin,atMax){ return '<div class=\"g-step\"><button data-a=\"pa'+k+'-\" '+(atMin?'disabled':'')+'>&minus;<\/button><div class=\"val\">'+txt+(unit?'<span>'+unit+'<\/span>':'')+'<\/div><button data-a=\"pa'+k+'+\" '+(atMax?'disabled':'')+'>+<\/button><\/div>'; };\n      var paintSeg='<div class=\"g-q\"><label>Should the pro supply the paint?<\/label>'+seg('paint',['No, I have paint','Yes, include paint'],s.paint)+'<\/div>';\n      var h='';\n      if(c.kind==='whole'){ h='<div class=\"g-q\"><label>What is the ceiling height?<\/label>'+seg('ceil',PA_CEILINGS,s.ceil)+'<\/div>'\n        +'<div class=\"g-q\"><label>How many square feet is the home?<\/label>'+stp('sq',PA_SQFT[s.sq],'sq ft',s.sq<=0,s.sq>=8)+'<\/div>'+paintSeg; }\n      else if(c.kind==='rooms'){ h='<div class=\"g-q\"><label>What is the ceiling height?<\/label>'+seg('ceil',PA_CEILINGS,s.ceil)+'<\/div>'\n        +'<div class=\"g-q\"><label>How many rooms?<\/label>'+stp('n',s.n,(s.n===1?'room':'rooms'),s.n<=1,s.n>=10)+'<\/div>'+paintSeg; }\n      else if(c.kind==='walls'){ h='<div class=\"g-q\"><label>How many walls?<\/label>'+stp('n',s.n,(s.n===1?'wall':'walls'),s.n<=1,s.n>=10)+'<\/div>'+paintSeg; }\n      else if(c.kind==='dry'){ h='<div class=\"g-q\"><label>'+c.q+'<\/label>'\n        +'<div class=\"g-itemhead\"><span>'+c.colL+'<\/span><span>'+c.colR+'<\/span><\/div>'\n        +c.items.map(function(lbl,i){var qy=s.qty[i]||0; return '<div class=\"g-item'+(qy>0?' picked':'')+'\"><div class=\"lbl\">'+lbl+'<\/div><div class=\"rs\"><button data-a=\"it-\" data-i=\"'+i+'\" '+(qy<=0?'disabled':'')+'>&minus;<\/button><span class=\"v\">'+qy+'<\/span><button data-a=\"it+\" data-i=\"'+i+'\" '+(qy>=9?'disabled':'')+'>+<\/button><\/div><\/div>';}).join('')+'<\/div>'; }\n      else { h='<div class=\"g-q\"><label>What type of siding?<\/label>'+seg('siding',PA_SIDINGS,s.siding,true)+'<\/div>'\n        +'<div class=\"g-q\"><label>How many stories?<\/label>'+seg('story',PA_STORIES,s.story)+'<\/div>'\n        +'<div class=\"g-q\"><label>How many square feet is the home?<\/label>'+stp('sq',PA_SQFT[s.sq],'sq ft',s.sq<=0,s.sq>=8)+'<\/div>'\n        +'<div class=\"g-q\"><label>Garage?<\/label>'+seg('gar',PA_GAR,s.gar)+'<\/div>'\n        +(s.gar>0?'<div class=\"g-q\"><label>What size is the garage?<\/label>'+seg('gsize',PA_GARSIZE,s.gsize)+'<\/div>':'')\n        +paintSeg; }\n      document.getElementById('paq_'+c.key).innerHTML=h+(c.note?'<div class=\"g-note\">'+c.note+'<\/div>':'');\n    } else if(c.flow==='items'){\n      var rEl=document.getElementById('rows_'+c.key);\n      rEl.innerHTML=c.items.map(function(lbl,i){var qy=s.qty[i]||0;\n        return '<div class=\"g-item'+(qy>0?' picked':'')+'\"><div class=\"lbl\">'+lbl+'<\/div><div class=\"rs\"><button data-a=\"it-\" data-i=\"'+i+'\" '+(qy<=0?'disabled':'')+'>&minus;<\/button><span class=\"v\">'+qy+'<\/span><button data-a=\"it+\" data-i=\"'+i+'\" '+(qy>=9?'disabled':'')+'>+<\/button><\/div><\/div>';}).join('');\n    } else if(c.flow==='flat'){\n    } else if(c.flow==='hi'){\n      \/\/ clamp sqft index when switching House (9 tiers) -> Apartment (5 tiers)\n      var hL=s.prop===0?HI_SQFT_HOUSE:HI_SQFT_APT;\n      if(s.hsq>hL.length-1) s.hsq=hL.length-1;\n      var hSeg=function(k,opts,sel,cls){ return '<div class=\"g-seg'+(cls?' '+cls:'')+'\">'+opts.map(function(o,i){return '<button data-a=\"flseg\" data-k=\"'+k+'\" data-i=\"'+i+'\" class=\"'+(i===sel?'on':'')+'\">'+o+'<\/button>';}).join('')+'<\/div>'; };\n      var hh='<div class=\"g-q\"><label>What type of property?<\/label>'+hSeg('prop',HI_PROPS,s.prop)+'<\/div>'\n        +'<div class=\"g-q\"><label>How many square feet?<\/label><div class=\"g-step\"><button data-a=\"hisq-\" '+(s.hsq<=0?'disabled':'')+'>&minus;<\/button><div class=\"val\">'+hL[s.hsq]+'<span>sq ft<\/span><\/div><button data-a=\"hisq+\" '+(s.hsq>=hL.length-1?'disabled':'')+'>+<\/button><\/div><\/div>';\n      if(s.prop===0){\n        hh+='<div class=\"g-q\"><label>Is the house on a raised foundation?<\/label>'+hSeg('raised',HI_RAISED,s.raised)+'<\/div>'\n          +'<div class=\"g-q\"><label>Multi-family house &amp; AC units<\/label><div class=\"g-rooms two\">'\n            +'<div class=\"g-rc\"><div class=\"rl\">Multi-Family<\/div><div class=\"rs\"><button data-a=\"him-\" '+(s.multi<=0?'disabled':'')+'>&minus;<\/button><span class=\"v\">'+(s.multi===0?'No':String(s.multi+1))+'<\/span><button data-a=\"him+\" '+(s.multi>=HI_MULTI.length-1?'disabled':'')+'>+<\/button><\/div><\/div>'\n            +'<div class=\"g-rc\"><div class=\"rl\">AC Units<\/div><div class=\"rs\"><button data-a=\"hia-\" '+(s.hvac<=0?'disabled':'')+'>&minus;<\/button><span class=\"v\">'+String(s.hvac+1)+'<\/span><button data-a=\"hia+\" '+(s.hvac>=HI_HVAC.length-1?'disabled':'')+'>+<\/button><\/div><\/div>'\n          +'<\/div><\/div>'\n          +'<div class=\"g-q\"><label>How old is the property?<\/label>'+hSeg('age',HI_AGE,s.age)+'<\/div>';\n      }\n      if(c.note) hh+='<div class=\"g-note\">'+c.note+'<\/div>';\n      document.getElementById('dq_'+c.key).innerHTML=hh;\n    } else if(c.flow==='pm'){\n      var pL=c.kind==='photo'?PM_COUNTS:PM_SQFT;\n      var pLbl=c.kind==='photo'?'How many photos?':'How many square feet is the property?';\n      var pUnit=c.kind==='photo'?'':'<span>sq ft<\/span>';\n      var ph='<div class=\"g-q\"><label>'+pLbl+'<\/label><div class=\"g-step\"><button data-a=\"pmn-\" '+(s.n<=0?'disabled':'')+'>&minus;<\/button><div class=\"val\">'+pL[s.n]+pUnit+'<\/div><button data-a=\"pmn+\" '+(s.n>=pL.length-1?'disabled':'')+'>+<\/button><\/div>'\n        +(c.note?'<div class=\"g-note\">'+c.note+'<\/div>':'')+'<\/div>';\n      document.getElementById('dq_'+c.key).innerHTML=ph;\n    } else if(c.flow==='fl'){\n      var fseg=function(k,opts,sel,cls){ return '<div class=\"g-seg'+(cls?' '+cls:'')+'\">'+opts.map(function(o,i){return '<button data-a=\"flseg\" data-k=\"'+k+'\" data-i=\"'+i+'\" class=\"'+(i===sel?'on':'')+'\">'+o+'<\/button>';}).join('')+'<\/div>'; };\n      var fsqStep='<div class=\"g-q\"><label>How many square feet?<\/label><div class=\"g-step\"><button data-a=\"flsq-\" '+(s.sq<=0?'disabled':'')+'>&minus;<\/button><div class=\"val\">'+parseInt(FL_SQFTS[s.sq],10).toLocaleString()+'<span>sq ft<\/span><\/div><button data-a=\"flsq+\" '+(s.sq>=FL_SQFTS.length-1?'disabled':'')+'>+<\/button><\/div><\/div>';\n      var fh='';\n      if(c.kind==='new'){\n        var fmat=FL_MATS[s.mat];\n        fh='<div class=\"g-q\"><label>What flooring material?<\/label>'+fseg('mat',FL_MATS,s.mat)+'<\/div>';\n        var pat=null, pk='', psel=0;\n        if(fmat==='Wood'){ pat=FL_WOOD_PATS; pk='wpat'; psel=s.wpat; }\n        else if(fmat==='Tile'){ pat=FL_TILE_PATS; pk='tpat'; psel=s.tpat; }\n        else if(fmat==='Vinyl'){ pat=FL_VINYL_PATS; pk='vpat'; psel=s.vpat; }\n        if(pat){\n          fh+='<div class=\"g-q\"><label>What pattern?<\/label>'+fseg(pk,pat,psel,'four')\n            +'<div class=\"g-flprev\"><img decoding=\"async\" src=\"'+FL_PAT_IMGS[pat[psel]]+'\" alt=\"'+pat[psel]+' pattern\" loading=\"lazy\"><span>'+pat[psel]+'<\/span><\/div><\/div>';\n        }\n        if(fmat==='Wood') fh+='<div class=\"g-q\"><label>Install method<\/label>'+fseg('inst',FL_INSTALLS,s.inst)+'<\/div>';\n        if(fmat==='Tile') fh+='<div class=\"g-q\"><label>What tile material?<\/label>'+fseg('tmat',FL_TMATS,s.tmat)+'<\/div>';\n        fh+=fsqStep;\n        \/\/ Chat-parity SERVICE INCLUDES per material\n        var fIncEl=document.querySelector('#inc_'+c.key+' ul');\n        if(fIncEl && FL_INC[fmat]) fIncEl.innerHTML=FL_INC[fmat].map(incLi).join('');\n      } else if(c.kind==='sand'){\n        fh=fsqStep\n          +'<div class=\"g-q\"><label>Stain color (your pro confirms on site)<\/label>'\n          +'<div class=\"g-flstain\"><select id=\"stain_'+c.key+'\" class=\"g-select\">'\n          +[FL_STAIN_SKIP].concat(FL_STAINS).map(function(o){return '<option value=\"'+o.replace(\/\"\/g,'&quot;')+'\"'+(o===s.stain?' selected':'')+'>'+o+'<\/option>';}).join('')\n          +'<\/select>'+(s.stain!==FL_STAIN_SKIP?'<img decoding=\"async\" src=\"'+FL_STAIN_IMGS[s.stain]+'\" alt=\"'+s.stain+'\">':'')+'<\/div>'\n          +(c.note?'<div class=\"g-note\">'+c.note+'<\/div>':'')+'<\/div>';\n      } else if(c.kind==='rem'){\n        fh='<div class=\"g-q\"><label>What flooring are we removing?<\/label>'+fseg('rt',FL_REMTYPES,s.rt)+'<\/div>'+fsqStep\n          +(c.note?'<div class=\"g-q\"><div class=\"g-note\">'+c.note+'<\/div><\/div>':'');\n      } else {\n        fh=fsqStep+(c.note?'<div class=\"g-q\"><div class=\"g-note\">'+c.note+'<\/div><\/div>':'');\n      }\n      document.getElementById('flq_'+c.key).innerHTML=fh;\n      var stSel=document.getElementById('stain_'+c.key);\n      if(stSel){ stSel.addEventListener('change',function(){ s.stain=this.value; renderDynamic(c); update(c); }); }\n    } else {\n      var pr=document.getElementById('pr_'+c.key); pr.innerHTML='';\n      PROPS.forEach(function(p){var b=document.createElement('button');b.textContent=p;if(p===s.prop)b.className='on';b.onclick=function(){s.prop=p;var o=isApt(p)?SQ_APT:SQ_HOUSE;if(o.indexOf(s.sqft)<0)s.sqft=o[1]||o[0];renderDynamic(c);update(c);};pr.appendChild(b);});\n      var l=isApt(s.prop)?SQ_APT:SQ_HOUSE, i=l.indexOf(s.sqft); if(i<0){i=1;s.sqft=l[1];}\n      document.getElementById('sq_'+c.key).innerHTML=s.sqft.replace(' sq ft','')+'<span>sq ft<\/span>';\n    }\n  }\n\n  function update(c){\n    var s=ST[c.key], pv=document.getElementById('pv_'+c.key), est=document.getElementById('est_'+c.key), bk=document.getElementById('bk_'+c.key);\n    if(!pv) return;\n    var q=document.querySelector('[data-key=\"'+c.key+'\"]');\n    if(c.flow==='hourly'){ var mxH=(s.recurring==='Recurring')?4:8; var l1=q.querySelector('[data-a=\"hr-\"]'), l2=q.querySelector('[data-a=\"hr+\"]'); if(l1)l1.disabled=s.hours<=1; if(l2)l2.disabled=s.hours>=mxH; }\n    else if(c.flow==='housewash'){ q.querySelector('[data-a=\"hsq-\"]').disabled=s.sqft<=1000; q.querySelector('[data-a=\"hsq+\"]').disabled=s.sqft>=5000; }\n    else if(c.flow==='pwarea'){ q.querySelector('[data-a=\"pwa-\"]').disabled=s.area<=c.aMin; q.querySelector('[data-a=\"pwa+\"]').disabled=s.area>=c.aMax; }\n    else if(c.flow==='loads'){ q.querySelector('[data-a=\"ld-\"]').disabled=s.loads<=1; q.querySelector('[data-a=\"ld+\"]').disabled=s.loads>=10; }\n    else if(c.flow==='items'){ }\n    else if(c.flow==='pa'){ }\n    else if(c.flow==='flat'){ }\n    else if(c.flow==='fl'){ }\n    else if(c.flow==='hi'||c.flow==='pm'){ }\n    else { var sl=isApt(s.prop)?SQ_APT:SQ_HOUSE,si=sl.indexOf(s.sqft); q.querySelector('[data-a=\"sq-\"]').disabled=si<=0; q.querySelector('[data-a=\"sq+\"]').disabled=si>=sl.length-1;\n      ['beds','full','half'].forEach(function(k){var mn=k==='half'?0:1; q.querySelector('[data-a=\"'+k+'-\"]').disabled=s[k]<=mn; q.querySelector('[data-a=\"'+k+'+\"]').disabled=s[k]>=9;}); }\n    if(!s.data){ pv.innerHTML='&hellip;'; pv.className='g-price'; est.textContent=''; bk.disabled=true; return; }\n    if(!s.data.available){ pv.textContent='Not available in your area yet'; pv.className='g-price na'; est.textContent=''; bk.disabled=true; return; }\n    var r=priceFor(c,s);\n    if(!r){ pv.innerHTML='&hellip;'; pv.className='g-price'; est.textContent=''; bk.disabled=true; return; }\n    if(r.none){ pv.textContent='Add an item'; pv.className='g-price na'; est.textContent=''; bk.disabled=true; return; }\n    pv.textContent=fmt(r.price); pv.className='g-price'; est.textContent='est. duration: '+fmtDur(r.dur); bk.disabled=false;\n  }\n\n  function fetchZip(c){\n    var s=ST[c.key]; s.data=null; update(c);\n    var reqZip=s.zip;\n    var body='zip='+encodeURIComponent(s.zip)+'&service_type='+encodeURIComponent(SERVICE)+'&cleaning_type='+encodeURIComponent(c.ct||'')+'&sub_service='+encodeURIComponent(c.sub);\n    fetch(CHECKZIP,{method:'POST',headers:{'X-Requested-With':'XMLHttpRequest','Content-Type':'application\/x-www-form-urlencoded'},body:body,credentials:'same-origin'})\n      .then(function(r){return r.json();})\n      .then(function(res){ if(s.zip!==reqZip)return; s.data={available:!!res.available, pricing:res.pricing||{}, tiers:res.fee_tiers||[], min:res.minimum_size_job||0, hourly_rate:res.hourly_rate||30};\n        if(!_hfSeenZips[reqZip]){ _hfSeenZips[reqZip]=1; _hfHeroPush(res.available?'hf_zip_check_pass':'hf_zip_check_fail', {hf_zip:{service:SERVICE, zip:reqZip, sub_service:c.sub}}); }\n        update(c); })\n      .catch(function(){ if(s.zip!==reqZip)return; s.data={available:false}; update(c); });\n  }\n\n  function bookURL(c){\n    var s=ST[c.key];\n    var p={ service:SERVICE, zip:s.zip, autobook:'1' };\n    if(SERVICE==='Painting'){\n      if(c.kind==='ext'){\n        p.pa_location='Exterior'; p.pa_sidingType=PA_SIDINGS[s.siding]; p.pa_extStories=PA_STORIES[s.story]; p.pa_sqft=PA_SQFT[s.sq];\n        p.pa_hasGarage=s.gar>0?'Yes':'No';\n        if(s.gar>0){ p.pa_garageType=s.gar===1?'Attached':'Detached'; p.pa_garageCount=PA_GARSIZE[s.gsize]; }\n        p.pa_paintSupply=s.paint===1?'Yes':'No';\n      } else {\n        p.pa_location='Interior';\n        if(c.kind==='whole'){ p.pa_intType='Whole Home'; p.pa_ceilingHeight=PA_CEILINGS[s.ceil]; p.pa_sqft=PA_SQFT[s.sq]; p.pa_paintSupply=s.paint===1?'Yes':'No'; }\n        else if(c.kind==='rooms'){ p.pa_intType='Single \/ Multi-Room'; p.pa_ceilingHeight=PA_CEILINGS[s.ceil]; p.pa_rooms=String(s.n); p.pa_paintSupply=s.paint===1?'Yes':'No'; }\n        else if(c.kind==='walls'){ p.pa_intType='Minor Touch Up'; p.pa_walls=String(s.n); p.pa_paintSupply=s.paint===1?'Yes':'No'; }\n        else { p.pa_intType='Drywall Repair'; var sel={}, parts=[];\n          for(var pi=0;pi<c.items.length;pi++){ var pqy=s.qty[pi]||0; if(pqy>0){ sel[c.items[pi]]=pqy; parts.push(pqy+' x '+c.items[pi]); } }\n          p.pa_repairItems_json=JSON.stringify(sel); p.pa_repairItems=parts.join(', '); }\n      }\n    } else if(SERVICE==='Handyman'){\n      p.hm_subService=c.sub;\n      var sel={}, parts=[];\n      for(var i=0;i<c.items.length;i++){ var qy=s.qty[i]||0; if(qy>0){ sel[c.items[i]]=qy; parts.push(qy+' x '+c.items[i]); } }\n      p.hm_items_json=JSON.stringify(sel);\n      p.hm_items=parts.join(', ');\n    } else if(SERVICE==='Plumbing'){\n      p.pl_subService=c.sub;\n      if(c.flow==='items'){\n        var plSel={}, plParts=[];\n        for(var pli=0;pli<c.items.length;pli++){ var plQ=s.qty[pli]||0; if(plQ>0){ plSel[c.items[pli]]=plQ; plParts.push(plQ+' x '+c.items[pli]); } }\n        p.pl_items_json=JSON.stringify(plSel);\n        p.pl_items=plParts.join(', ');\n      }\n    } else if(SERVICE==='Electric'){\n      p.el_subService=c.sub;\n      var elSel={}, elParts=[];\n      for(var eli=0;eli<c.items.length;eli++){ var elQ=s.qty[eli]||0; if(elQ>0){ elSel[c.items[eli]]=elQ; elParts.push(elQ+' x '+c.items[eli]); } }\n      p.el_items_json=JSON.stringify(elSel);\n      p.el_items=elParts.join(', ');\n    } else if(SERVICE==='Flooring'){\n      p.fl_type=c.sub;\n      if(c.kind==='new'){\n        var bMat=FL_MATS[s.mat]; p.fl_material=bMat;\n        if(bMat==='Wood'){ p.fl_woodPattern=FL_WOOD_PATS[s.wpat]; p.fl_installMethod=FL_INSTALLS[s.inst]; }\n        else if(bMat==='Tile'){ p.fl_tileMaterial=FL_TMATS[s.tmat]; p.fl_tilePattern=FL_TILE_PATS[s.tpat]; }\n        else if(bMat==='Vinyl'){ p.fl_vinylPattern=FL_VINYL_PATS[s.vpat]; }\n      } else if(c.kind==='sand'){\n        if(s.stain!==FL_STAIN_SKIP) p.fl_stainColor=s.stain;\n      } else if(c.kind==='rem'){\n        p.fl_removalType=FL_REMTYPES[s.rt];\n      }\n      p.fl_sqft=FL_SQFTS[s.sq];\n    } else if(SERVICE==='Home Inspection'){\n      p.hi_subService=c.sub;\n      if(c.flow==='hi'){\n        p.hi_propertyType=HI_PROPS[s.prop];\n        p.hi_sqft=(s.prop===0?HI_SQFT_HOUSE:HI_SQFT_APT)[s.hsq];\n        if(s.prop===0){\n          p.hi_raised=HI_RAISED[s.raised];\n          p.hi_multiFamily=HI_MULTI[s.multi];\n          p.hi_hvac=HI_HVAC[s.hvac];\n          p.hi_age=HI_AGE[s.age];\n        }\n      }\n    } else if(SERVICE==='Photo & Marketing'){\n      p.pm_subService=c.sub;\n      if(c.flow==='pm'){\n        if(c.kind==='photo') p.pm_photoCount=PM_COUNTS[s.n];\n        else if(c.pmkey==='plan') p.pm_planSqft=PM_SQFT[s.n];\n        else p.pm_tourSqft=PM_SQFT[s.n];\n      }\n    } else if(c.grp==='pw'){\n      p.cleaningType=c.ct; p.pressureWashType=c.sub;\n      if(c.flow==='housewash'){ p.stories=s.stories; p.houseWashSqft=String(s.sqft); }\n      else { p.area=String(s.area); }\n    } else if(c.grp==='junk'){\n      p.cleaningType=c.ct; p.truckloads=String(s.loads);\n    } else {\n      p.cleaningType=c.ct; p.houseCleaningType=c.sub;\n      if(c.recurring){ p.recurring=s.recurring; if(s.recurring==='Recurring') p.frequency=s.frequency; }\n      if(c.flow==='hourly'){ p.cleaners=(s.cleaners===2?'2 Cleaners':'1 Cleaner'); p.hours=s.hours+' HR'; }\n      else { p.propertyType=s.prop; p.sqft=s.sqft; p.bedrooms=String(s.beds); p.fullBaths=String(s.full); p.halfBaths=String(s.half); }\n    }\n    var qs=Object.keys(p).map(function(k){return encodeURIComponent(k)+'='+encodeURIComponent(p[k]);}).join('&');\n    return BOOK+'?'+qs;\n  }\n\n  function wireCard(c){\n    var s=stateFor(c);\n    var root=document.querySelector('[data-key=\"'+c.key+'\"]');\n    root.addEventListener('click',function(e){\n      var t=e.target.closest('[data-a]'); if(!t)return; var a=t.getAttribute('data-a');\n      if(a==='inc'){ document.getElementById('inc_'+c.key).classList.toggle('open'); return; }\n      if(a==='sq-'){ var l=isApt(s.prop)?SQ_APT:SQ_HOUSE,i=l.indexOf(s.sqft); if(i>0){s.sqft=l[i-1];renderDynamic(c);update(c);} }\n      else if(a==='sq+'){ var l2=isApt(s.prop)?SQ_APT:SQ_HOUSE,i2=l2.indexOf(s.sqft); if(i2<l2.length-1){s.sqft=l2[i2+1];renderDynamic(c);update(c);} }\n      else if(a==='hsq-'){ if(s.sqft>1000){s.sqft-=500;renderDynamic(c);update(c);} }\n      else if(a==='hsq+'){ if(s.sqft<5000){s.sqft+=500;renderDynamic(c);update(c);} }\n      else if(a==='pwa-'){ if(s.area>c.aMin){s.area-=c.aStep;renderDynamic(c);update(c);} }\n      else if(a==='pwa+'){ if(s.area<c.aMax){s.area+=c.aStep;renderDynamic(c);update(c);} }\n      else if(a==='ld-'){ if(s.loads>1){s.loads--;renderDynamic(c);update(c);} }\n      else if(a==='ld+'){ if(s.loads<10){s.loads++;renderDynamic(c);update(c);} }\n      else if(a==='it-'||a==='it+'){ var ii=+t.getAttribute('data-i'); var dd=(a==='it+')?1:-1; s.qty[ii]=Math.max(0,Math.min(9,(s.qty[ii]||0)+dd)); renderDynamic(c);update(c); }\n      else if(a==='paseg'){ var kk=t.getAttribute('data-k'), vi=+t.getAttribute('data-i'); s[kk==='ceil'?'ceil':kk==='paint'?'paint':kk==='siding'?'siding':kk==='story'?'story':kk==='gar'?'gar':'gsize']=vi; renderDynamic(c);update(c); }\n      else if(a==='pasq-'){ if(s.sq>0){s.sq--;renderDynamic(c);update(c);} }\n      else if(a==='pasq+'){ if(s.sq<8){s.sq++;renderDynamic(c);update(c);} }\n      else if(a==='flseg'){ var fk=t.getAttribute('data-k'), fvi=+t.getAttribute('data-i'); s[fk]=fvi; renderDynamic(c);update(c); }\n      else if(a==='flsq-'){ if(s.sq>0){s.sq--;renderDynamic(c);update(c);} }\n      else if(a==='flsq+'){ if(s.sq<FL_SQFTS.length-1){s.sq++;renderDynamic(c);update(c);} }\n      else if(a==='hisq-'){ if(s.hsq>0){s.hsq--;renderDynamic(c);update(c);} }\n      else if(a==='hisq+'){ var hMx=(s.prop===0?HI_SQFT_HOUSE:HI_SQFT_APT).length-1; if(s.hsq<hMx){s.hsq++;renderDynamic(c);update(c);} }\n      else if(a==='him-'){ if(s.multi>0){s.multi--;renderDynamic(c);update(c);} }\n      else if(a==='him+'){ if(s.multi<HI_MULTI.length-1){s.multi++;renderDynamic(c);update(c);} }\n      else if(a==='hia-'){ if(s.hvac>0){s.hvac--;renderDynamic(c);update(c);} }\n      else if(a==='hia+'){ if(s.hvac<HI_HVAC.length-1){s.hvac++;renderDynamic(c);update(c);} }\n      else if(a==='pmn-'){ if(s.n>0){s.n--;renderDynamic(c);update(c);} }\n      else if(a==='pmn+'){ var pMx=(c.kind==='photo'?PM_COUNTS:PM_SQFT).length-1; if(s.n<pMx){s.n++;renderDynamic(c);update(c);} }\n      else if(a==='pan-'){ if(s.n>1){s.n--;renderDynamic(c);update(c);} }\n      else if(a==='pan+'){ if(s.n<10){s.n++;renderDynamic(c);update(c);} }\n      else if(a==='hr-'){ if(s.hours>1){s.hours--;renderDynamic(c);update(c);} }\n      else if(a==='hr+'){ var mx=(s.recurring==='Recurring')?4:8; if(s.hours<mx){s.hours++;renderDynamic(c);update(c);} }\n      else if(\/^(beds|full|half)[+-]$\/.test(a)){ var k=a.slice(0,-1),d=a.slice(-1)==='+'?1:-1,mn=k==='half'?0:1; s[k]=Math.max(mn,Math.min(9,s[k]+d)); document.getElementById(k+'_'+c.key).textContent=s[k]; update(c); }\n    });\n    var zi=document.getElementById('z_'+c.key);\n    zi.addEventListener('input',function(){ this.value=this.value.replace(\/\\D\/g,'').slice(0,5); document.getElementById('zb_'+c.key).classList.toggle('bad',this.value.length!==5); if(this.value.length===5){ GZIP=this.value; s.zip=this.value; fetchZip(c);} });\n    document.getElementById('bk_'+c.key).addEventListener('click',function(){\n      if(!s.data||!s.data.available)return;\n      try{ window.dataLayer=window.dataLayer||[]; window.dataLayer.push({event:'hf_card_book', hf_service:c.sub, hf_zip:s.zip}); }catch(e){}\n      var bkVal=0; try{ bkVal=parseFloat((document.getElementById('pv_'+c.key).textContent||'').replace(\/[^0-9.]\/g,''))||0; }catch(e){}\n      _hfHeroPush('begin_checkout', {currency:'USD', value:bkVal, items:[{item_id:'hero_'+c.key, item_name:c.sub, item_category:SERVICE, price:bkVal, quantity:1}]});\n      window.location.href=bookURL(c);\n    });\n    renderDynamic(c); update(c);\n    if(s.zip!==GZIP){ s.zip=GZIP; s.data=null; }\n    if(!s.data) fetchZip(c); else update(c);\n  }\n\n  var currentGrp=CARDS[0].grp;\n  var currentByGrp={};\n  CARDS.forEach(function(x){ if(!currentByGrp[x.grp]) currentByGrp[x.grp]=x.key; });\n  function byKey(k){ for(var i=0;i<CARDS.length;i++){ if(CARDS[i].key===k) return CARDS[i]; } return CARDS[0]; }\n  function renderCats(){\n    if(!SHOWCATS) return;\n    document.getElementById('hfskCats').style.display='';\n    document.getElementById('hfskDiv').style.display='';\n    var el=document.getElementById('hfskCats'); el.innerHTML='';\n    el.className='hfsk-pills fixedrow';\n    CATS.forEach(function(c){\n      var b=document.createElement('button'); b.type='button';\n      b.className='hfsk-pill'+(c.key===currentGrp?' on':'');\n      b.textContent=c.label;\n      b.onclick=function(){ if(currentGrp===c.key)return; currentGrp=c.key;\n        try{ window.dataLayer=window.dataLayer||[]; window.dataLayer.push({event:'hf_hero_select', hf_kind:'category', hf_value:c.label}); }catch(e){}\n        _hfHeroPush('view_item_list', {item_list_name:SERVICE+' - '+c.label, items:CARDS.filter(function(x){return x.grp===c.key;}).map(function(x,i){return {item_id:'hero_'+x.key, item_name:x.sub, item_category:SERVICE, index:i, quantity:1};})});\n        renderCats(); renderSubs(); mountCard(); b.blur(); };\n      el.appendChild(b);\n    });\n  }\n  function renderSubs(){\n    var el=document.getElementById('hfskSubs'); el.innerHTML='';\n    var rows={}, order=[], hasFixed=false;\n    CARDS.forEach(function(x){ if(x.grp!==currentGrp) return; var rk=x.row||1; if(x.row)hasFixed=true; if(!rows[rk]){rows[rk]=[];order.push(rk);} rows[rk].push(x); });\n    order.sort(function(a,b){return a-b;});\n    order.forEach(function(rk){\n      var rowEl=document.createElement('div');\n      var maxLen=0; rows[rk].forEach(function(x){ var L=(x.pt||x.title).length; if(L>maxLen)maxLen=L; });\n      rowEl.className='hfsk-pills'+(hasFixed?' fixedrow':'')+(hasFixed&&maxLen<=14?' compact':'');\n      rows[rk].forEach(function(x){\n        var b=document.createElement('button'); b.type='button';\n        b.className='hfsk-pill'+(x.key===currentByGrp[currentGrp]?' on':'');\n        b.textContent=x.pt||x.title;\n        b.onclick=function(){ if(currentByGrp[currentGrp]===x.key)return; currentByGrp[currentGrp]=x.key;\n          try{ window.dataLayer=window.dataLayer||[]; window.dataLayer.push({event:'hf_hero_select', hf_kind:'sub_service', hf_value:x.sub}); }catch(e){}\n          renderSubs(); mountCard(); b.blur(); };\n        rowEl.appendChild(b);\n      });\n      el.appendChild(rowEl);\n    });\n  }\n  function mountCard(){\n    var c=byKey(currentByGrp[currentGrp]);\n    document.getElementById('hfskMount').innerHTML=cardHTML(c);\n    wireCard(c);\n    if(!_hfSeenCards[c.key]){ _hfSeenCards[c.key]=1;\n      _hfHeroPush('view_item', {currency:'USD', items:[{item_id:'hero_'+c.key, item_name:c.sub, item_category:SERVICE, quantity:1}]}); }\n  }\n  function boot(){ renderCats(); renderSubs(); mountCard(); }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', boot); else boot();\n})();\n<\/script>\n<!-- ================= END HOUSE FLY SMOKE HERO ================= -->\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-21da344 e-flex e-con-boxed e-con e-parent\" data-id=\"21da344\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f9e034a elementor-widget elementor-widget-html\" data-id=\"f9e034a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- flooring-redesign-cleaning-style-2026-05-31 -->\n<style>\n.hf-fl-cards{max-width:1100px;margin:0 auto;padding:75px 24px 20px;font-family:'Inter',-apple-system,sans-serif}\n.hf-fl-cards *{box-sizing:border-box}\n.hf-fl-cards-hdr{text-align:center;margin-bottom:48px}\n.hf-fl-cards-lbl{font-size:27.5px;font-weight:800;letter-spacing:2.5px;text-transform:uppercase;color:#29ABE2;margin-bottom:14px;line-height:1.1}\n.hf-fl-cards-hdr h2{font-size:clamp(1.8rem,3.5vw,2.4rem);font-weight:800;color:#3D4F6F;margin:0 0 12px}\n.hf-fl-cards-hdr p{color:#6b7d93;font-size:1.05rem;max-width:500px;margin:0 auto;line-height:1.6}\n\n.hf-fl-section-hdr{text-align:center;margin:64px 0 32px}\n.hf-fl-section-hdr h2{font-size:clamp(1.6rem,3vw,2rem);font-weight:800;color:#3D4F6F;margin:0;line-height:1.2}\n\n.hf-fl-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}\n.hf-fl-grid-repair{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}\n\n.hf-fl-card{background:#fff;border-radius:16px;border:1px solid #eef2f6;overflow:hidden;transition:all .3s;display:flex;flex-direction:column;box-shadow:0 2px 12px rgba(0,0,0,.08)}\n.hf-fl-card:hover{transform:translateY(-4px);box-shadow:0 12px 32px rgba(0,0,0,.12)}\n.hf-fl-card-img{height:200px;background-size:cover;background-position:center}\n.hf-fl-card-body{padding:20px;flex:1;display:flex;flex-direction:column}\n.hf-fl-card-body h3{font-size:1.15rem;color:#3D4F6F;margin:0 0 12px;font-weight:700;line-height:1.3}\n\n.hf-fl-includes-lbl{font-size:.78rem;font-weight:700;color:#3D4F6F;letter-spacing:1px;text-transform:uppercase;margin:8px 0;padding-top:12px;border-top:1px solid #f0f0f0}\n.hf-fl-card-body ul{list-style:none;padding:0;margin:0}\n.hf-fl-card-body ul li{font-size:.9rem;color:#555;padding:4px 0;padding-left:18px;position:relative;line-height:1.5}\n.hf-fl-card-body ul li::before{content:\"\\2713\";position:absolute;left:0;color:#2ED87A;font-weight:700}\n\n@media(max-width:1024px){.hf-fl-grid,.hf-fl-grid-repair{grid-template-columns:repeat(2,1fr)}}\n@media(max-width:700px){.hf-fl-grid,.hf-fl-grid-repair{grid-template-columns:repeat(2,1fr);gap:16px}.hf-fl-cards-lbl{font-size:25px;letter-spacing:2px;margin-bottom:12px}.hf-fl-section-hdr{margin:48px 0 24px}}\n<\/style>\n\n<div class=\"hf-fl-cards\">\n  <div class=\"hf-fl-cards-hdr\">\n    <div class=\"hf-fl-cards-lbl\">What We Offer<\/div>\n    <h2>New Flooring Services<\/h2>\n    <p>Professional flooring installers for all your home service needs. See job descriptions and upfront prices before booking.<\/p>\n  <\/div>\n\n  <div class=\"hf-fl-grid\">\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-3.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Wood<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Staggered<\/li><li>Center Offset<\/li><li>Herringbone<\/li><li>Chevron<\/li><\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-5.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Tile<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Staggered<\/li><li>Center Offset<\/li><li>Herringbone<\/li><li>Chevron<\/li><li>Grid<\/li><li>Diamond<\/li><li>Parquet or Basket Weave<\/li><li>Mosaic<\/li><\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-4.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Luxury Vinyl<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Staggered<\/li><li>Center Offset<\/li><li>Herringbone<\/li><li>Chevron<\/li><\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-6.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Carpet<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Wall-to-wall carpet installation<\/li><\/ul>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"hf-fl-section-hdr\">\n    <h2>Flooring Repair Services<\/h2>\n  <\/div>\n  <div class=\"hf-fl-grid-repair\">\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-3.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Wood - Sand and Refinish<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Sanding and refinishing existing hardwood floors<\/li><\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-6.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Sub-Floor Repair<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Repairing or replacing damaged sub-flooring<\/li><\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"hf-fl-card\">\n      <div class=\"hf-fl-card-img\" style=\"background-image:url(\/wp-content\/uploads\/2024\/05\/Frame-1000010553-4.png)\"><\/div>\n      <div class=\"hf-fl-card-body\">\n        <h3>Floor Removal<\/h3>\n        <div class=\"hf-fl-includes-lbl\">Service Includes:<\/div>\n        <ul><li>Stripping existing floor coverings down to sub-floor<\/li><\/ul>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b9e699b e-flex e-con-boxed e-con e-parent\" data-id=\"b9e699b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f784d0 elementor-widget elementor-widget-html\" data-id=\"9f784d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>#hf-optimized-faqs{display:none!important}<\/style>\n<!-- flooring-HIW-from-parent-671577f-2026-05-29 -->\n<style>\n.hf-svc-hiw{max-width:1200px;margin:0 auto;padding:42px 24px;font-family:'Inter',-apple-system,sans-serif;text-align:center}\n.hf-svc-hiw *{box-sizing:border-box}\n.hf-svc-hiw-label{font-size:26px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:#40C9F3;margin-bottom:12px}\n.hf-svc-hiw h2{font-size:clamp(28px,4vw,42px);font-weight:800;color:#2D3E50;margin:0 0 12px}\n.hf-svc-hiw-sub{font-size:17px;color:#6b7d93;max-width:560px;margin:0 auto 48px;line-height:1.6}\n.hf-svc-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:32px;position:relative}\n.hf-svc-steps::before{content:'';position:absolute;top:36px;left:12%;right:12%;height:2px;background:linear-gradient(90deg,#2ED87A,#40C9F3);z-index:0}\n.hf-svc-step{position:relative;z-index:1}\n.hf-svc-step-num{width:72px;height:72px;border-radius:50%;background:#fff;border:2px solid #eef2f6;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:13px;font-weight:700;color:#fff;position:relative}\n.hf-svc-step-num-inner{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center}\n.hf-sn-1 .hf-svc-step-num-inner{background:#2ED87A}\n.hf-sn-2 .hf-svc-step-num-inner{background:#40C9F3}\n.hf-sn-3 .hf-svc-step-num-inner{background:#3D4F6F}\n.hf-sn-4 .hf-svc-step-num-inner{background:#2ED87A}\n.hf-svc-step-num svg{width:26px;height:26px;fill:#fff}\n.hf-svc-step h3{font-size:16px;font-weight:700;color:#2D3E50;margin:0 0 8px}\n.hf-svc-step p{font-size:13px;color:#6b7d93;line-height:1.5;margin:0}\n\n\n.hf-svc-trust2 img:hover{opacity:1}\n@media(max-width:768px){\n  \/* hf-svc-hiw-mobile-stack-2026-05-28: mirror home hf-hiw2 mobile stack layout *\/\n  \/* hf-svc-hiw-mobile-top-gap-2026-05-29: breathing room above HIW section under svc-grid *\/\n  .hf-svc-hiw{padding:64px 18px 28px}\n  .hf-svc-hiw-label{font-size:25px;letter-spacing:2px;margin-bottom:12px}\n  .hf-svc-hiw h2{font-size:26px;line-height:1.2;margin-bottom:10px}\n  .hf-svc-hiw-sub{font-size:14px;max-width:340px;margin:0 auto 32px}\n  .hf-svc-steps{grid-template-columns:1fr;gap:0;padding:0 0 0 6px;position:relative;margin-bottom:0}\n  .hf-svc-steps::before{display:block;top:27px;bottom:27px;left:31px;right:auto;width:2px;height:auto;background:linear-gradient(180deg,#2ED87A,#40C9F3,#3D4F6F);border-radius:2px}\n  .hf-svc-step{display:grid;grid-template-columns:64px 1fr;grid-template-rows:auto auto;column-gap:18px;row-gap:6px;align-items:start;text-align:left;padding-bottom:28px}\n  .hf-svc-step:last-child{padding-bottom:0}\n  .hf-svc-step-num{grid-column:1;grid-row:1 \/ span 2;width:54px;height:54px;margin:0;justify-self:start;margin-left:4px;box-shadow:0 4px 12px rgba(41,171,226,.18)}\n  .hf-svc-step-num-inner{width:42px;height:42px}\n  .hf-svc-step-num svg{width:20px;height:20px}\n  .hf-svc-step h3{grid-column:2;grid-row:1;font-size:16.5px;font-weight:700;color:#40C9F3;margin:0;padding-top:4px;line-height:1.25}\n  .hf-svc-step p{grid-column:2;grid-row:2;font-size:13.5px;color:#000;line-height:1.55;margin:0;padding-top:2px}\n}\n<\/style><div class=\"hf-svc-hiw\">\n  <div class=\"hf-svc-hiw-label\">HOW IT WORKS<\/div>\n  <h2>From Selection to Done in Just a Few Taps<\/h2>\n  <p class=\"hf-svc-hiw-sub\">No phone tag. No guessing games. One upfront price, hand-matched pros, and total peace of mind.<\/p>\n  <div class=\"hf-svc-steps\">\n    <div class=\"hf-svc-step hf-sn-1\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"><\/path><\/svg><\/div><\/div>\n      <h3>Select Your Service<\/h3>\n      <p>Pick your service, set the details, and see your real upfront price instantly.<\/p>\n    <\/div>\n    <div class=\"hf-svc-step hf-sn-2\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"><\/path><\/svg><\/div><\/div>\n      <h3>Schedule The Job<\/h3>\n      <p>Select the day and time best for you and checkout with any of our secure payment options.<\/p>\n    <\/div>\n    <div class=\"hf-svc-step hf-sn-3\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z\"><\/path><\/svg><\/div><\/div>\n      <h3>Sit Back And Relax<\/h3>\n      <p>House Fly takes care of all pro-matching, scheduling, communication, and payments.<\/p>\n    <\/div>\n    \n  <\/div>\n  <\/div>\n\n<!-- flooring-Common-Questions-from-parent-68f9d25-2026-05-29 -->\n<div class=\"hf-cq\">\n  <div class=\"hf-cq-head\">\n    <div class=\"hf-cq-eyebrow\">Common Questions<\/div>\n    <h2 class=\"hf-cq-title\">Ask Homer Anything<\/h2>\n    <p class=\"hf-cq-sub\">Select a question to start a chat with Homer.<\/p>\n  <\/div>\n  <div class=\"hf-cq-chips\">\n    <button type=\"button\" class=\"hf-cq-chip\" onclick=\"hfCqAsk(this, &quot;What is your cancellation policy?&quot;)\">\n      <span class=\"hf-cq-q\">What&rsquo;s the cancellation policy?<\/span>\n      <span class=\"hf-cq-arrow\">&#8599;<\/span>\n    <\/button>\n    <button type=\"button\" class=\"hf-cq-chip\" onclick=\"hfCqAsk(this, &quot;Can I book a same-day service?&quot;)\">\n      <span class=\"hf-cq-q\">Same-day booking?<\/span>\n      <span class=\"hf-cq-arrow\">&#8599;<\/span>\n    <\/button>\n    <button type=\"button\" class=\"hf-cq-chip\" onclick=\"hfCqAsk(this, &quot;What payment methods do you accept?&quot;)\">\n      <span class=\"hf-cq-q\">Payment methods?<\/span>\n      <span class=\"hf-cq-arrow\">&#8599;<\/span>\n    <\/button>\n  <\/div>\n<\/div>\n\n<style>\n\/* Match Simple-by-Design header proportions (.hf-hiw2-eyebrow\/.hf-hiw2-title\/.hf-hiw2-sub) *\/\n\/* hf-cq-bottom-gap-2026-05-29: separation from \"We're here to help\" section *\/\n.hf-cq { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; max-width: 1140px; margin: 0 auto; padding: 60px 24px 56px; color: #000; box-sizing: border-box; }\n.hf-cq * { box-sizing: border-box; }\n.hf-cq-head { text-align: center; margin-bottom: 48px; }\n.hf-cq-eyebrow { font-size: 27.5px; font-weight: 800; letter-spacing: 2.5px; text-transform: uppercase; color: #29ABE2; margin: 0 0 14px; line-height: 1.1; font-family: inherit; }\n.hf-cq-title { font-size: 38px; font-weight: 800; color: #000; line-height: 1.18; margin: 0 0 14px; letter-spacing: -0.5px; font-family: inherit; }\n.hf-cq-sub { font-size: 16px; color: #000; max-width: 520px; margin: 0 auto; line-height: 1.6; font-family: inherit; }\n\n\/* Chips \u2014 no card wrapper, sit directly on the page background *\/\n.hf-cq-chips { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; max-width: 680px; margin: 0 auto; padding: 0 16px; }\n.hf-cq-chip { background: #F1F5F9; border: 1px solid #E2E8F0; border-radius: 99px; padding: 12px 20px; font-size: 14px; color: #1E293B; font-weight: 600; cursor: pointer; transition: all .15s; font-family: inherit; display: inline-flex; align-items: center; gap: 8px; }\n.hf-cq-chip:hover { background: #E0F2FE; border-color: #7DD3FC; color: #0C4A6E; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(64,201,243,0.18); }\n.hf-cq-chip:active { transform: translateY(0); }\n.hf-cq-chip.hf-cq-loading { opacity: 0.65; cursor: wait; }\n.hf-cq-arrow { color: #94A3B8; font-size: 12px; }\n.hf-cq-chip:hover .hf-cq-arrow { color: #29ABE2; }\n\n\/* \"View All FAQs \u2192\" Elementor button widget #0ce9e01 \u2014 turn link blue *\/\n.elementor-element-0ce9e01 .elementor-button,\n.elementor-element-0ce9e01 .elementor-button-text,\n.elementor-element-0ce9e01 .elementor-button .elementor-button-text { color: #29ABE2 !important; }\n.elementor-element-0ce9e01 .elementor-button:hover .elementor-button-text { color: #0891B2 !important; }\n\n\/* Hide snippet 3650's invisible-but-present accordion on homepage (was set earlier) *\/\nbody.home #hf-optimized-faqs, body.page-id-2229 #hf-optimized-faqs, body.page-id-538 #hf-optimized-faqs { display: none !important; }\n\n\/* Mobile \u2014 match SBD breakpoints *\/\n@media (max-width: 900px) {\n  .hf-cq { padding: 50px 20px 44px; }\n  .hf-cq-head { margin-bottom: 36px; }\n  .hf-cq-eyebrow { font-size: 25px; letter-spacing: 2px; margin-bottom: 12px; }\n  .hf-cq-sub { font-size: 14px; max-width: 340px; }\n}\n@media (max-width: 700px) {\n  .hf-cq { padding: 40px 18px 36px; }\n  .hf-cq-eyebrow { font-size: 22px; letter-spacing: 1.8px; }\n  .hf-cq-title { font-size: 28px; }\n  .hf-cq-chips { gap: 10px; }\n  .hf-cq-chip { padding: 10px 16px; font-size: 13px; }\n}\n<\/style>\n\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"How does House Fly work for booking home services?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"House Fly is a concierge home services platform serving the Greater New Orleans area. Chat with Homer, pick your date and time, and pay upfront. A local home services pro arrives and completes the work. Transparent pricing, instant booking, and a real rep manages the job from start to finish.\"}},{\"@type\":\"Question\",\"name\":\"Are there any hidden fees with House Fly?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. The service fee is built into the upfront price shown when you book, so there are no surprise charges at checkout or after service. The price you see is the price you pay. Payments are processed securely through Stripe with no extra processing fees added at checkout.\"}},{\"@type\":\"Question\",\"name\":\"What is House Fly's cancellation policy?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"You can cancel any House Fly booking for free up to 24 hours before the scheduled appointment and receive a full refund. Cancellations inside the 24-hour window may incur a small fee depending on the service. Reschedule any time by chatting with Homer or contacting House Fly support.\"}},{\"@type\":\"Question\",\"name\":\"Can I book same-day home services with House Fly?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Most House Fly home services have same-day or next-day availability across the Greater New Orleans coverage area. Available time slots appear in real time when you book through Homer. Emergency services like plumbing leaks are often dispatched within a couple of hours of booking.\"}},{\"@type\":\"Question\",\"name\":\"What payment methods does House Fly accept?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"House Fly accepts all major credit cards, Apple Pay, and PayPal. All payments are processed securely through Stripe's PCI-compliant infrastructure. Your card is charged only when you confirm the booking. You can save a payment method to your account for one-tap rebooking on future services.\"}},{\"@type\":\"Question\",\"name\":\"How does House Fly choose its home services pros?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"House Fly hand-selects local home services pros through a diligence process that includes reviewing each pro's Google Business Profile, customer reviews, and operating history. We work only with pros that demonstrate a strong track record of quality work in their local area.\"}}]}<\/script>\n\n<script>\n(function(){\n  function getInput(){\n    var f = document.getElementById('hfCcFrame');\n    try { return f && f.contentDocument && f.contentDocument.querySelector('#hfAiSearchInput'); }\n    catch(e){ return null; }\n  }\n  function inject(q, btn, tries){\n    var input = getInput();\n    if (input) {\n      try {\n        input.value = q;\n        input.dispatchEvent(new Event('input', {bubbles:true}));\n        var form = input.form || document.getElementById('hfCcFrame').contentDocument.getElementById('hfAiSearchForm');\n        if (form) {\n          if (typeof form.requestSubmit === 'function') form.requestSubmit();\n          else form.dispatchEvent(new Event('submit', {bubbles:true, cancelable:true}));\n        }\n      } catch(e){}\n      if (btn) btn.classList.remove('hf-cq-loading');\n      return;\n    }\n    if (tries > 0) setTimeout(function(){ inject(q, btn, tries - 1); }, 300);\n    else if (btn) btn.classList.remove('hf-cq-loading');\n  }\n  window.hfCqAsk = function(btn, q){\n    if (btn && btn.classList) btn.classList.add('hf-cq-loading');\n    var launcher = document.getElementById('hfCcLauncher');\n    if (launcher) launcher.click();\n    setTimeout(function(){ inject(q, btn, 20); }, 400);\n  };\n})();\n<\/script>\n<!-- flooring-Help-from-parent-7f6a459-2026-05-29 -->\n<style>\n.hf-contact{font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;width:100%;background:linear-gradient(180deg,#f8fbfd 0%,#f1f6fb 100%);padding:48px 20px;text-align:center}\n.hf-contact *{box-sizing:border-box;margin:0;padding:0}\n.hf-contact-inner{max-width:520px;margin:0 auto}\n.hf-contact-heading{font-size:30px;font-weight:800;color:#000;margin:0 0 10px;line-height:1.2;letter-spacing:-.3px}\n.hf-contact-sub{font-size:15px;color:#000;margin:0 auto 26px;max-width:340px;line-height:1.5}\n\n.hf-chat-cta{display:inline-flex;align-items:center;justify-content:center;gap:10px;background:#29ABE2;color:#fff;font-weight:700;font-size:16px;padding:16px 36px;border-radius:12px;border:0;cursor:pointer;text-decoration:none;box-shadow:0 10px 28px rgba(41,171,226,.32);font-family:inherit;line-height:1;transition:transform .2s,box-shadow .2s;position:relative;margin-bottom:24px}\n.hf-chat-cta{-webkit-tap-highlight-color:rgba(46,216,122,.3)}.hf-chat-cta:hover{transform:translateY(-2px);box-shadow:0 14px 32px rgba(46,216,122,.4);background:#2ED87A;color:#fff}.hf-chat-cta:active,.hf-chat-cta:focus,.hf-chat-cta:focus-visible{background:#29ABE2!important;color:#fff!important;outline:2px solid #29ABE2!important;outline-offset:2px;-webkit-tap-highlight-color:transparent}\/* hf-cta-no-red-2026-05-24 *\/\n.hf-chat-cta svg{width:20px;height:20px;fill:#fff}\n.hf-chat-cta-dot{position:absolute;top:13px;right:18px;width:8px;height:8px;border-radius:50%;background:#2ED87A;box-shadow:0 0 0 4px rgba(46,216,122,.25);animation:hfPulse 2s infinite}\n@keyframes hfPulse{0%,100%{box-shadow:0 0 0 4px rgba(46,216,122,.25)}50%{box-shadow:0 0 0 8px rgba(46,216,122,.10)}}\n\n.hf-contact-divider{display:flex;align-items:center;gap:12px;color:#8a9ab0;font-size:11px;letter-spacing:1.8px;text-transform:uppercase;font-weight:700;margin-bottom:18px}\n.hf-contact-divider::before,.hf-contact-divider::after{content:\"\";flex:1;height:1px;background:#d8e0ea}\n\n.hf-contact-links{display:flex;flex-direction:column;gap:10px}\n.hf-contact-link{display:flex;align-items:center;gap:14px;padding:16px 22px;border-radius:14px;color:#fff;text-decoration:none;transition:transform .2s,box-shadow .2s;font-size:15px;font-weight:600;line-height:1.2}\n.hf-contact-link:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.18);color:#fff;text-decoration:none}\n.hf-contact-link .ic{width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;flex-shrink:0}\n.hf-contact-link .ic svg{width:20px;height:20px;fill:#fff}\n.hf-contact-link .lbl{font-weight:700;font-size:15px;color:#fff}\n.hf-contact-link .inf{margin-left:auto;font-weight:700;font-size:15px;color:#fff;letter-spacing:.2px}\n\n.hf-cc-call{background:linear-gradient(135deg,#2ED87A 0%,#24b866 100%)}\n.hf-cc-text{background:linear-gradient(135deg,#40C9F3 0%,#2ba8d4 100%)}\n.hf-cc-email{background:linear-gradient(135deg,#3D4F6F 0%,#2f3e58 100%)}\n\n@media (max-width:600px){\n  .hf-contact{padding:40px 16px}\n  .hf-contact-heading{font-size:26px}\n  .hf-contact-sub{font-size:14px;margin-bottom:22px}\n  .hf-chat-cta{padding:15px 30px;font-size:15px;margin-bottom:20px}\n  .hf-contact-link{padding:14px 18px}\n  .hf-contact-link .lbl{font-size:14px}\n  .hf-contact-link .inf{font-size:14px}\n}\n@media (max-width:380px){\n  .hf-contact-heading{font-size:22px}\n  .hf-contact-link{padding:13px 14px;gap:10px}\n  .hf-contact-link .ic{width:32px;height:32px}\n  .hf-contact-link .ic svg{width:18px;height:18px}\n  .hf-contact-link .lbl{font-size:13px}\n  .hf-contact-link .inf{font-size:13px;letter-spacing:0}\n}\n\n@media (min-width: 768px) {\n  \/* hf-help-desktop-grid-2026-05-28: 3 square cards side-by-side on wide viewports *\/\n  .hf-contact-inner { max-width: 1000px; }\n  .hf-contact-links { flex-direction: row; gap: 20px; align-items: stretch; }\n  .hf-contact-link {\n    flex: 1 1 0;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    padding: 36px 24px;\n    gap: 16px;\n    min-height: 230px;\n    border-radius: 20px;\n  }\n  .hf-contact-link .ic {\n    width: 64px;\n    height: 64px;\n    border-radius: 50%;\n  }\n  .hf-contact-link .ic svg { width: 28px; height: 28px; }\n  .hf-contact-link .lbl { font-size: 22px; font-weight: 800; }\n  .hf-contact-link .lbl::after { content: ' Us'; }\n  .hf-contact-link .inf { margin-left: 0; font-size: 15px; font-weight: 500; opacity: .95; letter-spacing: .2px; }\n}\n<\/style>\n<div class=\"hf-contact\">\n  <div class=\"hf-contact-inner\">\n    <h2 class=\"hf-contact-heading\">We're Here to Help<\/h2>\n    <p class=\"hf-contact-sub\">Reach out however works best for you.<\/p>\n\n    <button type=\"button\" class=\"hf-chat-cta\" onclick=\"var l=document.getElementById('hfCcLauncher');if(l){l.click();}\">\n      <svg viewBox=\"0 0 24 24\"><path d=\"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z\"\/><\/svg>\n      Chat with Homer\n      <span class=\"hf-chat-cta-dot\"><\/span>\n    <\/button>\n\n    <div class=\"hf-contact-divider\">Or Reach Us<\/div>\n\n    <div class=\"hf-contact-links\">\n      <a class=\"hf-contact-link hf-cc-call\" href=\"tel:5044207359\" data-wpel-link=\"internal\" rel=\"follow\">\n        <div class=\"ic\"><svg viewBox=\"0 0 24 24\"><path d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\"\/><\/svg><\/div>\n        <span class=\"lbl\">Call<\/span>\n        <span class=\"inf\">504-420-7359<\/span>\n      <\/a>\n      <a class=\"hf-contact-link hf-cc-text\" href=\"sms:5044207359\" data-wpel-link=\"internal\" rel=\"follow\">\n        <div class=\"ic\"><svg viewBox=\"0 0 24 24\"><path d=\"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z\"\/><\/svg><\/div>\n        <span class=\"lbl\">Text<\/span>\n        <span class=\"inf\">504-420-7359<\/span>\n      <\/a>\n      <a class=\"hf-contact-link hf-cc-email\" href=\"mailto:help@housefly.com\">\n        <div class=\"ic\"><svg viewBox=\"0 0 24 24\"><path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"\/><\/svg><\/div>\n        <span class=\"lbl\">Email<\/span>\n        <span class=\"inf\">help@housefly.com<\/span>\n      <\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FLOORING SERVICES Trusted Flooring Installationwith Upfront Pricing Verified pros, upfront pricing, and instant booking with no surprises 5.0 on Google A+ Better Business Bureau Free cancellation What We Offer Flooring Services Expert installation and refinishing for every type of flooring. New Flooring &#8211; Wood Staggered Center Offset Herringbone Chevron New Flooring &#8211; Tile Staggered Center [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":2733,"parent":538,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3438","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Flooring Installation Services | Book Local Pros | House Fly<\/title>\n<meta name=\"description\" content=\"Compare prices and book trusted flooring installers instantly. Hardwood, tile, laminate, vinyl, and carpet. Upfront pricing and Google-reviewed pros.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/housefly.com\/es\/services\/flooring\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flooring Installation Services | Book Local Pros | House Fly\" \/>\n<meta property=\"og:description\" content=\"Compare prices and book trusted flooring installers instantly. Hardwood, tile, laminate, vinyl, and carpet. Upfront pricing and Google-reviewed pros.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/housefly.com\/es\/services\/flooring\/\" \/>\n<meta property=\"og:site_name\" content=\"House Fly\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/houseflyapp\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-08T03:19:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/housefly.com\/wp-content\/uploads\/2025\/01\/housefly-social-share.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"644\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@houseflyapp\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Flooring Installation Services | Book Local Pros | House Fly","description":"Compare prices and book trusted flooring installers instantly. Hardwood, tile, laminate, vinyl, and carpet. Upfront pricing and Google-reviewed pros.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/housefly.com\/es\/services\/flooring\/","og_locale":"es_MX","og_type":"article","og_title":"Flooring Installation Services | Book Local Pros | House Fly","og_description":"Compare prices and book trusted flooring installers instantly. Hardwood, tile, laminate, vinyl, and carpet. Upfront pricing and Google-reviewed pros.","og_url":"https:\/\/housefly.com\/es\/services\/flooring\/","og_site_name":"House Fly","article_publisher":"https:\/\/www.facebook.com\/houseflyapp","article_modified_time":"2026-07-08T03:19:42+00:00","og_image":[{"width":1024,"height":644,"url":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/01\/housefly-social-share.jpg","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@houseflyapp","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/housefly.com\/services\/flooring\/","url":"https:\/\/housefly.com\/services\/flooring\/","name":"Flooring Installation Services | Book Local Pros | House Fly","isPartOf":{"@id":"https:\/\/housefly.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/housefly.com\/services\/flooring\/#primaryimage"},"image":{"@id":"https:\/\/housefly.com\/services\/flooring\/#primaryimage"},"thumbnailUrl":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/wood-flooring-installation-services-in-new-orleans.png","datePublished":"2026-03-06T01:36:22+00:00","dateModified":"2026-07-08T03:19:42+00:00","description":"Compare prices and book trusted flooring installers instantly. Hardwood, tile, laminate, vinyl, and carpet. Upfront pricing and Google-reviewed pros.","breadcrumb":{"@id":"https:\/\/housefly.com\/services\/flooring\/#breadcrumb"},"inLanguage":"es-MX","potentialAction":[{"@type":"ReadAction","target":["https:\/\/housefly.com\/services\/flooring\/"]}]},{"@type":"ImageObject","inLanguage":"es-MX","@id":"https:\/\/housefly.com\/services\/flooring\/#primaryimage","url":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/wood-flooring-installation-services-in-new-orleans.png","contentUrl":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/wood-flooring-installation-services-in-new-orleans.png","width":1643,"height":1034,"caption":"wood flooring installation services in new orleans"},{"@type":"BreadcrumbList","@id":"https:\/\/housefly.com\/services\/flooring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/housefly.com\/"},{"@type":"ListItem","position":2,"name":"Services","item":"https:\/\/housefly.com\/services\/"},{"@type":"ListItem","position":3,"name":"Flooring Installation Services | Book Local Pros | House Fly"}]},{"@type":"WebSite","@id":"https:\/\/housefly.com\/#website","url":"https:\/\/housefly.com\/","name":"House Fly","description":"On-Demand Home Services Mobile App","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/housefly.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-MX"}]}},"_links":{"self":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/3438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/comments?post=3438"}],"version-history":[{"count":1,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/3438\/revisions"}],"predecessor-version":[{"id":4469,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/3438\/revisions\/4469"}],"up":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/538"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/media\/2733"}],"wp:attachment":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/media?parent=3438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}