{"id":2177,"date":"2024-11-26T05:44:08","date_gmt":"2024-11-26T05:44:08","guid":{"rendered":"https:\/\/housefly.com\/?page_id=2177"},"modified":"2026-07-08T03:19:43","modified_gmt":"2026-07-08T03:19:43","slug":"flooring","status":"publish","type":"page","link":"https:\/\/housefly.com\/es\/services\/new-orleans\/flooring\/","title":{"rendered":"Pisos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2177\" class=\"elementor elementor-2177\" 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<style id=\"hfc-css\">\n.hfc,.hfc *{box-sizing:border-box}.hfc{font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;color:#0b172a;position:relative;width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);background:#fff;text-align:left}\n.hfc-hero{position:relative;width:100%;margin-top:calc(-1 * var(--hf-header-h, 88px));padding:calc(84px + var(--hf-header-h, 88px)) 24px 64px;text-align:center;color:#fff;\n background:linear-gradient(180deg,rgba(11,23,42,.40),rgba(11,23,42,.84)),url(\"https:\/\/housefly.com\/wp-content\/uploads\/2026\/03\/hero-flooring-1-1536x864.webp\") 62% 30%\/cover no-repeat,#0b172a}\n.hfc-ey{font-size:20px;font-weight:800;letter-spacing:3px;text-transform:uppercase;color:#41C7F5!important;margin:0}.hfc-lead{color:rgba(255,255,255,.92)!important}#hfc .hfc-hero .hfc-ey{color:#41C7F5!important;-webkit-text-fill-color:#41C7F5}\n.hfc-h1{font-size:60px;font-weight:800;letter-spacing:-1.5px;line-height:1.04;margin:12px 0 14px;color:#fff}.hfc-h1 span{background:linear-gradient(90deg,#41C7F5,#5cd67a);-webkit-background-clip:text;background-clip:text;color:transparent}\n.hfc-lead{font-size:18px;line-height:1.55;max-width:600px;margin:0 auto;color:rgba(255,255,255,.92)}\n.hfc-srch{max-width:660px;margin:28px auto 0;display:flex;align-items:center;background:#fff;border:1.5px solid #40C9F3;border-radius:999px;padding:7px 7px 7px 22px;box-shadow:0 0 0 6px rgba(64,201,243,.16),0 24px 60px -18px rgba(0,0,0,.45)}\n.hfc-srch svg{flex:none;color:#94a3b8;margin-right:10px}\n.hfc-srch input{flex:1;border:0!important;outline:0;font:500 17px Inter,sans-serif;padding:12px 0!important;color:#16233A;min-width:0;background:transparent!important;box-shadow:none!important;height:auto;border-radius:0}\n.hfc-srch input::placeholder{color:#8CA0B8}\n.hfc .hfc-srch button,.hfc .hfc-srch button:focus{flex:none;border:0;border-radius:999px;background:#40C9F3;color:#fff;font:700 16px Inter,sans-serif;padding:14px 30px;cursor:pointer;transition:background .15s}\n.hfc .hfc-srch button:hover{background:#2ED87A;color:#fff}\n.hfc-btn{display:inline-flex;align-items:center;justify-content:center;background:#41C7F5;color:#0b172a!important;font-weight:800;font-size:15px;border-radius:11px;padding:14px 22px;border:0;cursor:pointer;font-family:inherit;text-decoration:none!important;line-height:1.1}\n.hfc-btn:disabled{opacity:.55;cursor:default}\n.hfc-pop{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:20px auto 0;max-width:660px}\n.hfc .hfc-pop button{display:inline-flex;align-items:center;border-radius:999px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.28);padding:9px 16px;font:600 15px Inter,sans-serif;color:#eaf2fa;cursor:pointer;transition:all .15s;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}\n.hfc-wrap{max-width:1240px;margin:0 auto;padding:0 29px}\n.hfc-lay{display:grid;grid-template-columns:minmax(0,1fr) 508px;gap:32px;align-items:stretch;padding:40px 0 58px}.hfc-box{position:relative;align-self:stretch}.hfc-box .hfc-nb{position:relative;top:0}\n.hfc-stp{display:flex;align-items:center;gap:11px;margin:0 0 13px}.hfc-stp i{font-style:normal;width:31px;height:31px;border-radius:5px;background:#0b172a;color:#41C7F5;font-weight:800;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}\n.hfc-stp h3{margin:0;font-size:22px;font-weight:800;letter-spacing:-.3px;color:#0b172a}.hfc-stp span{margin-left:auto;font-size:14px;color:#5a6b85}\n.hfc-blk{margin-bottom:31px}\n.hfc-lay>*,.hfc-sv>*,.hfc-aog>*{min-width:0}.hfc-sv{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}\n.hfc-card{display:flex;gap:11px;align-items:center;border:1.5px solid #e3e9f1;border-radius:13px;padding:13px;background:#fff;cursor:pointer;text-align:left;font-family:inherit;width:100%;transition:border-color .15s,box-shadow .15s}\n.hfc-card:hover{border-color:#9fd6ee}.hfc-card.on{border-color:#29ABE2;background:#eef8fd;box-shadow:0 0 0 3px rgba(41,171,226,.15)}\n.hfc-ic{width:40px;height:40px;border-radius:5px;background:#f2f6fa;display:flex;align-items:center;justify-content:center;font-size:20px;flex:none}\n.hfc-card h4{margin:0;font-size:15px;font-weight:800;color:#0b172a;line-height:1.2}.hfc-card p{margin:2px 0 0;font-size:14px;color:#5a6b85;line-height:1.35}\n.hfc-more{display:flex;justify-content:center;align-items:center;gap:7px;border:1.5px dashed #9fd6ee;border-radius:11px;padding:13px;color:#1580b8;font-weight:800;font-size:14px;margin-top:9px;background:#fff;width:100%;cursor:pointer;font-family:inherit}\n.hfc-more span{font-weight:600;color:#5a6b85}\n.hfc-cat{margin-top:16px}.hfc-cat h5{margin:0 0 7px;font-size:14px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#29ABE2}\n.hfc-aog{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}\n.hfc-ao{display:flex;justify-content:space-between;align-items:center;gap:9px;border:1.5px solid #e3e9f1;border-radius:11px;padding:13px 14px;font-size:14px;font-weight:700;background:#fff;color:#0b172a;cursor:pointer;font-family:inherit;text-align:left;width:100%}\n.hfc-ao b{color:#1f9d55;white-space:nowrap;font-weight:800}.hfc-ao small{font-size:14px;font-weight:600;color:#5a6b85}.hfc-ao.on{border-color:#5cd67a;background:#effbf2}.hfc-ao:disabled{opacity:.45;cursor:default}\n.hfc-note{font-size:14px;color:#5a6b85;margin:0 0 11px}\n.hfc-nb{background:linear-gradient(160deg,#16243a,#0b172a 60%);border:1px solid rgba(65,199,245,.18);border-radius:17px;padding:22px;color:#fff;box-shadow:0 24px 50px rgba(11,23,42,.28)}\n.hfc-nb .t{font-size:23px;font-weight:800;letter-spacing:-.4px;line-height:1.15}\n.hfc-pill{display:inline-block;margin-top:8px;font-size:14px;font-weight:700;color:#8fe0ff;border:1px solid rgba(65,199,245,.4);background:rgba(65,199,245,.1);border-radius:77px;padding:5px 10px}\n.hfc-inc{border:1.5px solid rgba(255,255,255,.16);border-radius:9px;margin-top:12px}.hfc-inc button{display:flex;justify-content:space-between;width:100%;background:none;border:0;color:#fff;padding:12px 14px;font:800 14px Inter,sans-serif;letter-spacing:1.4px;cursor:pointer}\n.hfc-inc button span{color:#41C7F5}.hfc-inc ul{margin:0;padding:0 14px 11px 28px;font-size:14px;line-height:1.5;color:#d7e2ef}.hfc-inc li{margin:3px 0}\n.hfc-lbl{font-size:14px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:#9fb0c6;margin:12px 0 6px}\n.hfc-seg{display:grid;grid-template-columns:1fr 1fr;gap:8px}.hfc-seg.c3{grid-template-columns:repeat(3,1fr)}.hfc-seg.c4{grid-template-columns:1fr 1fr}\n.hfc-seg button{border:1.5px solid rgba(255,255,255,.2);border-radius:9px;padding:10px 6px;text-align:center;font:700 14px Inter,sans-serif;color:#fff;background:transparent;cursor:pointer}\n.hfc-seg button.on{border-color:#41C7F5;background:rgba(65,199,245,.14);color:#8fe0ff}\n.hfc-step{display:grid;grid-template-columns:40px 1fr 40px;gap:8px}.hfc-step button,.hfc-step div{border:1.5px solid rgba(255,255,255,.22);border-radius:9px;height:40px;display:flex;align-items:center;justify-content:center;font:800 15px Inter,sans-serif;color:#fff;background:transparent}\n.hfc-step button{cursor:pointer}.hfc-step button:disabled{opacity:.35;cursor:default}.hfc-step div{border-color:#41C7F5;color:#8fe0ff;font-size:15px}.hfc-step div small{font-size:14px;font-weight:600;margin-left:5px;opacity:.8}\n.hfc-rooms{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.hfc-rooms>div{border:1.5px solid rgba(255,255,255,.2);border-radius:9px;padding:9px 5px;text-align:center;font-weight:700;font-size:14px}\n.hfc-mini{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:5px}.hfc-mini button{width:25px;height:25px;border-radius:6px;border:1.5px solid rgba(255,255,255,.25);background:transparent;color:#8fe0ff;font:800 14px Inter,sans-serif;cursor:pointer}\n.hfc-mini button:disabled{opacity:.3;cursor:default}.hfc-mini b{font-size:19px;min-width:17px}\n.hfc-ex{border-top:1px solid rgba(255,255,255,.14);margin-top:14px;padding-top:5px}\n.hfc-li{display:flex;align-items:center;gap:8px;font-size:14px;padding:5px 0;color:#d7e2ef}.hfc-li span{flex:1}.hfc-li b{color:#5cd67a}.hfc-li .hfc-mini{margin:0}.hfc-li .hfc-mini b{font-size:14px}\n.hfc-li .x{background:none;border:0;color:#8a9bb2;font-size:14px;cursor:pointer;padding:0 2px}\n.hfc-foot{display:flex;align-items:center;justify-content:space-between;gap:9px;border-top:1px solid rgba(255,255,255,.14);margin-top:14px;padding-top:12px}\n.hfc-price{font-size:31px;font-weight:800;color:#5cd67a;letter-spacing:-.5px;line-height:1.05}.hfc-price.na{font-size:14px;color:#ffcf70}.hfc-foot p{margin:3px 0 0;font-size:14px;color:#9fb0c6}\n.hfc-ft{font-size:14px;color:#8a9bb2;text-align:center;margin-top:11px}.hfc-err{font-size:14px;color:#ffcf70;text-align:center;margin-top:8px}\n.hfc-bar{display:none}\n.hfc button{font-family:inherit;text-transform:none;box-shadow:none;outline:none;min-height:0;line-height:1.2}\n.hfc button{white-space:normal;word-break:normal}.hfc .hfc-card h4{color:#0b172a!important}.hfc .hfc-card p{color:#5a6b85!important;font-size:14px!important}.hfc .hfc-card{color:#0b172a!important}.hfc-card>span:last-child{flex:1;min-width:0}.hfc-ao>span{min-width:0}\n.hfc .hfc-card:hover,.hfc .hfc-card:focus{background:#fff;color:#0b172a}.hfc .hfc-card.on:hover,.hfc .hfc-card.on:focus{background:#eef8fd}\n.hfc .hfc-ao:hover,.hfc .hfc-ao:focus{background:#fff;color:#0b172a;border-color:#9fd6ee}.hfc .hfc-ao.on:hover,.hfc .hfc-ao.on:focus{background:#effbf2;border-color:#5cd67a}\n.hfc .hfc-more:hover,.hfc .hfc-more:focus{background:#f4f9fd;color:#1580b8}\n.hfc .hfc-btn:hover,.hfc .hfc-btn:focus{background:#6dd5f8;color:#0b172a}\n.hfc .hfc-seg button:hover,.hfc .hfc-seg button:focus{background:rgba(255,255,255,.06);color:#fff}.hfc .hfc-seg button.on:hover,.hfc .hfc-seg button.on:focus{background:rgba(65,199,245,.14);color:#8fe0ff}\n.hfc .hfc-step button:hover,.hfc .hfc-step button:focus,.hfc .hfc-mini button:hover,.hfc .hfc-mini button:focus{background:rgba(255,255,255,.08);color:#8fe0ff}\n.hfc .hfc-inc button:hover,.hfc .hfc-inc button:focus,.hfc .hfc-li .x:hover,.hfc .hfc-li .x:focus{background:none;color:#fff}\n.hfc .hfc-pop button:hover,.hfc .hfc-pop button:focus{background:rgba(64,201,243,.22);border-color:#40C9F3;color:#fff}\n.hfc-mini button{padding:0;display:inline-flex;align-items:center;justify-content:center}.hfc-step button{padding:0}\n@media(max-width:1100px){.hfc-lay{grid-template-columns:minmax(0,1fr) 454px;gap:22px}}\n@media(max-width:900px){.hfc-lay{grid-template-columns:minmax(0,1fr)}.hfc-box{position:static}.hfc-box .hfc-nb{position:static!important;width:auto!important}}\n@media(max-width:767px){.hfc-rooms{gap:5px}.hfc-rooms>div{padding:8px 2px;font-size:14px}.hfc-mini{gap:3px}.hfc-mini button{width:22px;height:22px;font-size:14px}.hfc-mini b{font-size:15px;min-width:11px}.hfc-li{gap:5px;font-size:14px}.hfc-li .hfc-mini b{font-size:14px}}\n@media(max-width:767px){.hfc-hero{padding:calc(48px + var(--hf-header-h, 70px)) 16px 40px;background-image:linear-gradient(180deg,rgba(11,23,42,.55),rgba(11,23,42,.9)),url(\"https:\/\/housefly.com\/wp-content\/uploads\/2026\/03\/hero-flooring-1-1536x864.webp\")}\n.hfc-ey{font-size:15px;letter-spacing:1.8px}.hfc-h1{font-size:38px;letter-spacing:-1px}.hfc-lead{font-size:16px}\n.hfc-srch{margin-top:22px;padding:5px 5px 5px 16px}.hfc-srch svg{display:none}.hfc-srch input{font-size:16px;padding:10px 0!important}.hfc .hfc-srch button,.hfc .hfc-srch button:focus{padding:12px 16px;font-size:14px}.hfc-pop{gap:6px;margin-top:16px}.hfc .hfc-pop button{padding:8px 13px;font-size:14px}\n.hfc-wrap{padding:0 14px}.hfc-lay{gap:23px;padding:25px 0 0}.hfc-stp h3{font-size:18px}.hfc-sv,.hfc-aog{grid-template-columns:minmax(0,1fr)}\n.hfc-nb{padding:15px;border-radius:14px}.hfc-nb .t{font-size:19px}.hfc-price{font-size:25px}.hfc-btn{font-size:14px;padding:13px 16px}\n.hfc-bar{display:flex;position:sticky;bottom:0;z-index:5;justify-content:space-between;align-items:center;gap:11px;background:#0b172a;color:#fff;padding:11px 14px;margin:22px -14px 0;border-radius:14px 14px 0 0}\n.hfc-bar b{font-size:20px;color:#5cd67a;display:block}.hfc-bar small{display:block;color:#9fb0c6;font-size:14px}}\n@media(max-width:767px){.hfc-mini button{width:30px;height:30px}.hfc-step button,.hfc-step div{height:44px}}\n<\/style>\n<style id=\"hfc-css2\">\n.hfc .hfc-sv{align-items:start}\n.hfc-cw{border:1.5px solid #e3e9f1;border-radius:13px;background:#fff;transition:border-color .15s,box-shadow .15s;min-width:0}\n.hfc-cw:hover{border-color:#9fd6ee}.hfc-cw.on{border-color:#29ABE2;box-shadow:0 0 0 3px rgba(41,171,226,.15)}\n.hfc .hfc-cw>.hfc-card{border:0!important;box-shadow:none!important;border-radius:12px;position:relative;padding-right:40px}\n.hfc .hfc-cw.on>.hfc-card{background:#eef8fd}.hfc .hfc-cw.on>.hfc-card:not(:last-child){border-radius:12px 12px 0 0}\n.hfc-ck{position:absolute;top:12px;right:12px;width:22px;height:22px;border-radius:6px;border:1.5px solid #c9d6e4;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;color:#fff;background:#fff}\n.hfc-cw.on .hfc-ck{background:#29ABE2;border-color:#29ABE2}\n.hfc-opt{padding:4px 14px 14px;border-top:1px solid #e3e9f1}\n.hfc-opt .ol{font-size:14px;font-weight:800;letter-spacing:1.1px;text-transform:uppercase;color:#5a6b85;margin:12px 0 7px}\n.hfc-opt .os{display:flex;flex-wrap:wrap;gap:7px}\n.hfc .hfc-opt .os button{flex:1 1 auto;border:1.5px solid #dbe4ee;border-radius:10px;padding:9px 10px;font:700 14px Inter,sans-serif;color:#0b172a;background:#fff;cursor:pointer;text-align:center}\n.hfc .hfc-opt .os button.on,.hfc .hfc-opt .os button.on:hover{border-color:#29ABE2;background:#eef8fd;color:#0b6c99}\n.hfc .hfc-opt .os button:hover,.hfc .hfc-opt .os button:focus{background:#f6f9fc;color:#0b172a}.hfc .hfc-opt .os button small{font-size:14px;font-weight:600;color:#1f9d55}\n.hfc-opt .orw{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:15px;color:#0b172a}.hfc-opt .orw>span{flex:1;min-width:0}\n.hfc-opt .orw small{display:block;font-size:14px;color:#5a6b85}\n.hfc-opt .om{display:flex;align-items:center;gap:8px;flex:none}\n.hfc .hfc-opt .om button{width:32px;height:32px;border-radius:8px;border:1.5px solid #c9d6e4;background:#fff;color:#1580b8;font:800 18px Inter,sans-serif;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}\n.hfc .hfc-opt .om button:hover,.hfc .hfc-opt .om button:focus{background:#f2f8fc;color:#1580b8}\n.hfc .hfc-opt .om button:disabled{opacity:.35;cursor:default}\n.hfc-opt .om b{min-width:22px;text-align:center;font-size:16px;color:#0b172a}.hfc-opt .om b.z{color:#94a3b8}\n.hfc-opt .ost{display:flex;align-items:center;gap:8px}.hfc-opt .ost .ov{flex:1;text-align:center;border:1.5px solid #dbe4ee;border-radius:10px;padding:7px 6px;font-weight:800;font-size:15px;color:#0b172a}\n.hfc-opt .ost .ov small{font-weight:600;color:#5a6b85;margin-left:5px;font-size:14px}\n.hfc-opt .orm{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.hfc-opt .orm>div{border:1.5px solid #dbe4ee;border-radius:10px;padding:8px 4px;text-align:center;font-size:14px;font-weight:700;color:#0b172a}\n.hfc-opt .orm .om{justify-content:center;margin-top:5px}\n.hfc-opt .oh{font-size:14px;color:#c2410c;margin:8px 0 0}\n.hfc .hfc-opt .oi{display:flex;justify-content:space-between;width:100%;background:none;border:0;padding:12px 0 0;font:800 14px Inter,sans-serif;letter-spacing:1.1px;color:#1580b8;cursor:pointer;text-transform:uppercase}\n.hfc .hfc-opt .oi:hover,.hfc .hfc-opt .oi:focus{background:none;color:#1580b8}\n.hfc-opt ul{margin:6px 0 0;padding-left:20px;font-size:14px;line-height:1.45;color:#3d4d66}\n.hfc-nb .t{font-size:23px}\n.hfc-nb .hfc-emp{font-size:15px;color:#9fb0c6;margin:12px 0 4px;line-height:1.45}\n.hfc-nb .hfc-ln{display:flex;gap:10px;align-items:flex-start;padding:11px 0;border-bottom:1px solid rgba(255,255,255,.1);font-size:15px;color:#fff}\n.hfc-nb .hfc-ln:last-child{border-bottom:0}.hfc-nb .hfc-ln>span{flex:1;min-width:0;font-weight:700;line-height:1.3}\n.hfc-nb .hfc-ln small{display:block;font-weight:500;font-size:14px;color:#9fb0c6;margin-top:2px}\n.hfc-nb .hfc-ln b{color:#5cd67a;white-space:nowrap;font-size:15px}.hfc-nb .hfc-ln b.q{color:#ffcf70}\n.hfc .hfc-nb .x,.hfc .hfc-nb .x:hover,.hfc .hfc-nb .x:focus{border:0!important;box-shadow:none!important;background:none!important;min-width:0;width:auto;height:auto;padding:0 2px;color:#8a9bb2;font-size:18px;line-height:1}.hfc .hfc-nb .x:hover{color:#fff}\n.hfc .hfc-nb .hfc-ln .x{background:none;border:0;color:#8a9bb2;font-size:18px;cursor:pointer;padding:0 2px;line-height:1}\n.hfc .hfc-nb .hfc-ln .x:hover,.hfc .hfc-nb .hfc-ln .x:focus{background:none;color:#fff}\n.hfc-nb .hfc-lns{margin-top:6px;max-height:52vh;overflow-y:auto}\n.hfc-sv{grid-auto-flow:row dense}.hfc-cw.wide{grid-column:1\/-1}.hfc-cw.wide .hfc-card h4{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.hfc-cw.wide .hfc-opt{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:28px}.hfc-cw.wide .hfc-opt>.ol,.hfc-cw.wide .hfc-opt>.os,.hfc-cw.wide .hfc-opt>.ost,.hfc-cw.wide .hfc-opt>.orm,.hfc-cw.wide .hfc-opt>.oh,.hfc-cw.wide .hfc-opt>.oi,.hfc-cw.wide .hfc-opt>ul{grid-column:1\/-1}\n.hfc-cat{margin-top:26px}.hfc-cat .hfc-stp{margin-bottom:12px}\n.hfc-nb .hfc-sg{border-bottom:1px solid rgba(255,255,255,.1);padding:4px 0 8px}.hfc-nb .hfc-sg:last-child{border-bottom:0}\n.hfc-nb .hfc-sg .hfc-ln{border-bottom:0;padding:8px 0}.hfc-nb .hfc-row{padding:6px 0 6px 12px!important;border-left:2px solid rgba(65,199,245,.35)}\n.hfc-nb .hfc-sh{display:flex;align-items:center;gap:10px;padding:10px 0 4px;font-weight:800;font-size:15px;color:#fff}.hfc-nb .hfc-sh>span{flex:1}\n.hfc-bs{display:flex;align-items:center;gap:7px;flex:none}\n.hfc .hfc-bs button{width:28px;height:28px;border-radius:8px;border:1.5px solid rgba(255,255,255,.28);background:transparent;color:#8fe0ff;font:800 16px Inter,sans-serif;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}\n.hfc .hfc-bs button:hover,.hfc .hfc-bs button:focus{background:rgba(255,255,255,.08);color:#8fe0ff}.hfc .hfc-bs button:disabled{opacity:.3;cursor:default}\n.hfc-bs b{min-width:20px;text-align:center;color:#fff!important;font-size:15px}\n.hfc .hfc-sm{background:none;border:0;padding:2px 0;color:#41C7F5;font:700 14px Inter,sans-serif;cursor:pointer}.hfc .hfc-sm:hover,.hfc .hfc-sm:focus{background:none;color:#8fe0ff}\n.hfc-dsc{font-size:14px;line-height:1.5;color:#c9d6e6;padding:4px 0 6px}.hfc-dsc p{margin:0 0 4px}.hfc-dsc ul{margin:0;padding-left:18px}\n\/* HF-2026-10-10v: the hero subtext on ONE line (two at most on phones); the pills ONE row, never wider than the search bar *\/\n.hfc .hfc-hero .hfc-lead{max-width:none;white-space:nowrap}\n.hfc .hfc-pop{flex-wrap:nowrap;overflow:hidden;max-width:660px;width:100%}.hfc .hfc-pop button{flex:none;white-space:nowrap}\n@media(max-width:767px){.hfc .hfc-opt .om button{width:34px;height:34px}.hfc .hfc-hero .hfc-lead{white-space:normal;max-width:350px;font-size:16px}}\n<\/style>\n<!-- ================= 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=\"hfc\" id=\"hfc\">\n<section class=\"hfc-hero\"><div class=\"hfc-ey\">New Orleans Flooring<\/div><h1 class=\"hfc-h1\">Flooring Installation in <span>New Orleans<\/span><\/h1>\n<p class=\"hfc-lead\">Search for what you need or pick a service below, and see your price as you go<\/p>\n<form class=\"hfc-srch\" id=\"hfcSearch\" role=\"search\" autocomplete=\"off\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"m20 20-3.5-3.5\"\/><\/svg><input id=\"hfcQ\" type=\"text\" placeholder=\"Search for what you need\" aria-label=\"What do you need done?\"><button type=\"submit\">Get My Price<\/button><\/form>\n<div class=\"hfc-pop\"><button type=\"button\" data-hq=\"Wood floor installation\">Wood<\/button><button type=\"button\" data-hq=\"Tile floor installation\">Tile<\/button><button type=\"button\" data-hq=\"Vinyl plank flooring\">Vinyl Plank<\/button><button type=\"button\" data-hq=\"Carpet installation\">Carpet<\/button><button type=\"button\" data-hq=\"Hardwood sand and refinish\">Refinish<\/button><\/div><\/section>\n<div class=\"hfc-wrap\"><div class=\"hfc-lay\" id=\"hfcLay\">\n<div class=\"hfc-left\"><div class=\"hfc-blk\" id=\"hfcS1\"><div class=\"hfc-stp\"><h3>Most popular<\/h3><\/div><div class=\"hfc-sv\" id=\"hfcMain\"><\/div><div id=\"hfcAll\" hidden><\/div><button type=\"button\" class=\"hfc-more\" id=\"hfcMore\"><\/button><\/div>\n<\/div>\n<div class=\"hfc-box\" id=\"hfcBox\"><div class=\"hfc-nb\" id=\"hfcNb\"><\/div><\/div>\n<div class=\"hfc-bar\" id=\"hfcBar\"><div><b id=\"hfcBarP\">&hellip;<\/b><small id=\"hfcBarS\"><\/small><\/div><button type=\"button\" class=\"hfc-btn\" id=\"hfcBarB\">Book It<\/button><\/div>\n<\/div><\/div><\/div>\n\n\n\n<!-- ================= END HOUSE FLY SMOKE HERO ================= -->\n<script id=\"hfc-js\" data-no-defer=\"1\" data-no-optimize=\"1\" data-no-minify=\"1\">\n(function(){\n  var D = {\"slug\": \"flooring\", \"st\": \"Flooring\", \"items\": [{\"qdef\": null, \"pstep\": null, \"key\": \"fl_laminate\", \"t\": \"menu\", \"name\": \"Laminate Flooring Installation\", \"icon\": \"\ud83e\udeb5\", \"desc\": \"Click-lock laminate planks cut and floated over a pad\", \"full\": \"Click-lock laminate planks cut and floated over a pad, expansion gaps at the walls, doorways undercut, in the pattern you pick. You supply the planks with overage; the legacy Wood and Vinyl flows cover hardwood and luxury vinyl.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.99, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-LAMINATE\", \"variants\": [{\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 2.99}, {\"key\": \"center\", \"label\": \"Center Offset\", \"price\": 2.99}, {\"key\": \"herringbone\", \"label\": \"Herringbone\", \"price\": 4.49}, {\"key\": \"chevron\", \"label\": \"Chevron\", \"price\": 4.49}, {\"key\": \"diagonal\", \"label\": \"Diagonal\", \"price\": 3.49}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"lm_pad\", \"label\": \"Underlayment\", \"options\": [\"Pad attached to the planks\", \"A separate pad or vapor barrier laid first\"], \"add\": {\"A separate pad or vapor barrier laid first\": 99}}, {\"key\": \"lm_old\", \"label\": \"Floor today\", \"options\": [\"Bare subfloor, ready to go\", \"Old floor to pull up first\"], \"add\": {\"Old floor to pull up first\": 199}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_sheet_vinyl\", \"t\": \"menu\", \"name\": \"Sheet Vinyl or Linoleum Installation\", \"icon\": \"\ud83e\uddfb\", \"desc\": \"A roll of sheet vinyl or linoleum templated, cut\", \"full\": \"A roll of sheet vinyl or linoleum templated, cut, glued and rolled flat with the seams sealed, for a bath, laundry, kitchen or mudroom. You supply the roll; luxury vinyl planks are the legacy Vinyl flow.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.49, \"min_qty\": 50, \"max_qty\": 1500, \"step\": 50, \"code\": \"FL-SHEETVINYL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sv_glue\", \"label\": \"Glue\", \"options\": [\"Perimeter glue, one piece\", \"Full spread glue-down\"], \"add\": {\"Full spread glue-down\": 99}}, {\"key\": \"sv_seams\", \"label\": \"Seams\", \"options\": [\"One piece, no seams\", \"Seamed, room over 12 ft wide\"], \"add\": {\"Seamed, room over 12 ft wide\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_carpet_tile\", \"t\": \"menu\", \"name\": \"Carpet Tile Installation\", \"icon\": \"\ud83d\udfe6\", \"desc\": \"Carpet squares laid from a center line with peel and stick\", \"full\": \"Carpet squares laid from a center line with peel and stick or spread adhesive, edges cut tight, in the layout you pick. You supply the tiles with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 1.99, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-CARPETTILE\", \"variants\": [{\"key\": \"mono\", \"label\": \"Monolithic, all one direction\", \"price\": 1.99}, {\"key\": \"quarter\", \"label\": \"Quarter Turn\", \"price\": 2.29}, {\"key\": \"brick\", \"label\": \"Brick or Ashlar offset\", \"price\": 2.29}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ct_glue\", \"label\": \"Adhesive\", \"options\": [\"Peel and stick or releasable tabs\", \"Full spread pressure sensitive adhesive\"], \"add\": {\"Full spread pressure sensitive adhesive\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_stairs\", \"t\": \"menu\", \"name\": \"Stair Flooring Installation\", \"icon\": \"\ud83e\ude9c\", \"desc\": \"Each step covered in carpet, vinyl plank\", \"full\": \"Each step covered in carpet, vinyl plank, laminate or hardwood treads and risers with a matching nosing, glued and nailed tight. You supply the flooring with overage.\", \"section\": \"Stairs\", \"unit\": \"unit\", \"unit_label\": \"step\", \"price\": 99.99, \"min_qty\": 3, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-STAIRS\", \"variants\": [{\"key\": \"carpet\", \"label\": \"Carpet, waterfall or Hollywood wrap\", \"price\": 59.99}, {\"key\": \"plank\", \"label\": \"Vinyl plank or laminate with nosing\", \"price\": 99.99}, {\"key\": \"wood\", \"label\": \"Hardwood treads and risers\", \"price\": 149.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"st_shape\", \"label\": \"Stairs\", \"options\": [\"Straight run, closed sides\", \"Open side, a landing or winders\"], \"add\": {\"Open side, a landing or winders\": 149}}, {\"key\": \"st_old\", \"label\": \"Steps today\", \"options\": [\"Bare or new steps\", \"Carpet to tear off, staples pulled\"], \"add\": {\"Carpet to tear off, staples pulled\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_stair_refinish\", \"t\": \"menu\", \"name\": \"Stair Sand and Refinish\", \"icon\": \"\ud83e\udeb5\", \"desc\": \"Wood treads hand sanded, stained and finished with 2 coats\", \"full\": \"Wood treads hand sanded, stained and finished with 2 coats of polyurethane, risers and stringers painted or refinished too if you want. The banister and spindles are a Painting job.\", \"section\": \"Stairs\", \"unit\": \"unit\", \"unit_label\": \"step\", \"price\": 69.99, \"min_qty\": 3, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-STAIRREFINISH\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sr_parts\", \"label\": \"Refinish\", \"options\": [\"Treads only\", \"Treads, risers and stringers\"], \"add\": {\"Treads, risers and stringers\": 149}}, {\"key\": \"sr_landing\", \"label\": \"Landing\", \"options\": [\"No landing\", \"A landing or a turn\"], \"add\": {\"A landing or a turn\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_screen_recoat\", \"t\": \"menu\", \"name\": \"Hardwood Screen and Recoat\", \"icon\": \"\u2728\", \"desc\": \"The existing finish buffed with a fine screen and a fresh coat\", \"full\": \"The existing finish buffed with a fine screen and a fresh coat of polyurethane rolled on, no sanding to bare wood: the refresh for dull, lightly scratched floors. A full Sand & Refinish is the legacy flow.\", \"section\": \"Repair & Refinish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 1.99, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-RECOAT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"rc_finish\", \"label\": \"Finish\", \"options\": [\"Water based polyurethane, 1 coat\", \"Oil based or 2 coats\"], \"add\": {\"Oil based or 2 coats\": 99}}, {\"key\": \"rc_furn\", \"label\": \"Furniture\", \"options\": [\"Rooms empty\", \"Furniture to move and cover\"], \"add\": {\"Furniture to move and cover\": 49}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_wood_repair\", \"t\": \"menu\", \"name\": \"Hardwood Board Replacement and Repair\", \"icon\": \"\ud83e\ude9a\", \"desc\": \"Damaged, cupped or water stained boards cut out and replaced\", \"full\": \"Damaged, cupped or water stained boards cut out and replaced with matching boards, gaps filled, then sanded and blended into the finish if you want it invisible. You supply matching boards or the pro sources them.\", \"section\": \"Repair & Refinish\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 349.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-WOODREPAIR\", \"variants\": [{\"key\": \"s\", \"label\": \"Up to 10 sq ft of boards\", \"price\": 349.99}, {\"key\": \"m\", \"label\": \"Up to 25 sq ft\", \"price\": 599.99}, {\"key\": \"l\", \"label\": \"Up to 50 sq ft\", \"price\": 999.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"wr_finish\", \"label\": \"Finish\", \"options\": [\"Boards replaced, you refinish later\", \"Sand and blend the stain and finish\"], \"add\": {\"Sand and blend the stain and finish\": 149}}, {\"key\": \"wr_cause\", \"label\": \"Cause\", \"options\": [\"Scratches, gouges or pet damage\", \"Water damage, subfloor checked and dried\"], \"add\": {\"Water damage, subfloor checked and dried\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_tile_repair\", \"t\": \"menu\", \"name\": \"Cracked or Loose Tile Replacement\", \"icon\": \"\ud83e\uddf1\", \"desc\": \"Cracked, chipped or hollow tiles chiseled out, the bed cleaned\", \"full\": \"Cracked, chipped or hollow tiles chiseled out, the bed cleaned, new tiles set and grouted to match. You supply matching tiles or the pro sources a close match.\", \"section\": \"Tile\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 199.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-TILEREPAIR\", \"variants\": [{\"key\": \"s\", \"label\": \"Up to 3 tiles\", \"price\": 199.99}, {\"key\": \"m\", \"label\": \"Up to 10 tiles\", \"price\": 349.99}, {\"key\": \"l\", \"label\": \"Up to 25 tiles\", \"price\": 599.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"tr_tile\", \"label\": \"Tiles\", \"options\": [\"You have matching tiles\", \"The pro sources a close match\"], \"add\": {\"The pro sources a close match\": 99}}, {\"key\": \"tr_grout\", \"label\": \"Grout\", \"options\": [\"Match and grout the repair\", \"Regrout the surrounding area too\"], \"add\": {\"Regrout the surrounding area too\": 79}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_regrout\", \"t\": \"menu\", \"name\": \"Tile Floor Regrouting\", \"icon\": \"\ud83e\uddfd\", \"desc\": \"Old grout ground out, the joints vacuumed and new grout packed\", \"full\": \"Old grout ground out, the joints vacuumed and new grout packed, tooled and cleaned, sealed after it cures if you want. Cracked tiles are a repair.\", \"section\": \"Tile\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 6.99, \"min_qty\": 20, \"max_qty\": 800, \"step\": 10, \"code\": \"FL-REGROUT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"rg_grout\", \"label\": \"Grout\", \"options\": [\"Sanded cement grout\", \"Epoxy or urethane grout\"], \"add\": {\"Epoxy or urethane grout\": 199}}, {\"key\": \"rg_seal\", \"label\": \"Sealer\", \"options\": [\"No sealer\", \"Sealed after curing\"], \"add\": {\"Sealed after curing\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_stone_polish\", \"t\": \"menu\", \"name\": \"Stone Floor Honing, Polishing and Sealing\", \"icon\": \"\ud83d\udc8e\", \"desc\": \"Marble, travertine, terrazzo or granite floors machine honed\", \"full\": \"Marble, travertine, terrazzo or granite floors machine honed to remove etching and scratches, polished to the sheen you want and sealed. Holes in travertine filled first.\", \"section\": \"Repair & Refinish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 5.99, \"min_qty\": 50, \"max_qty\": 2000, \"step\": 50, \"code\": \"FL-STONEPOLISH\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sp_stone\", \"label\": \"Stone\", \"options\": [\"Marble, granite or terrazzo\", \"Travertine or limestone, holes filled\"], \"add\": {\"Travertine or limestone, holes filled\": 199}}, {\"key\": \"sp_finish\", \"label\": \"Finish\", \"options\": [\"Honed matte, sealed\", \"High gloss polish\"], \"add\": {\"High gloss polish\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_carpet_repair\", \"t\": \"menu\", \"name\": \"Carpet Stretching and Repair\", \"icon\": \"\ud83e\uddf5\", \"desc\": \"Wrinkled, rippled or loose carpet power stretched tight\", \"full\": \"Wrinkled, rippled or loose carpet power stretched tight and re-hooked on the tack strip; seams, burns and pet spots patched with a matching piece.\", \"section\": \"Repair & Refinish\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 199.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-CARPETREPAIR\", \"variants\": [{\"key\": \"one\", \"label\": \"One room\", \"price\": 199.99}, {\"key\": \"two\", \"label\": \"Two rooms\", \"price\": 299.99}, {\"key\": \"three\", \"label\": \"Three or more rooms\", \"price\": 399.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"cr_repair\", \"label\": \"Repair\", \"options\": [\"Stretch only\", \"Patch, seam or burn repair too\"], \"add\": {\"Patch, seam or burn repair too\": 99}}, {\"key\": \"cr_damage\", \"label\": \"Damage\", \"options\": [\"Wrinkles and ripples\", \"Pet damage, pad replaced\"], \"add\": {\"Pet damage, pad replaced\": 79}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_subfloor_replace\", \"t\": \"menu\", \"name\": \"Subfloor Replacement\", \"icon\": \"\ud83e\udeb5\", \"desc\": \"Rotted or soft plywood or OSB cut out and replaced with new\", \"full\": \"Rotted or soft plywood or OSB cut out and replaced with new sheets screwed to the joists, joists sistered where needed, ready for a new floor. The legacy Sub-Floor Repair covers patching.\", \"section\": \"Repair & Refinish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 6.99, \"min_qty\": 20, \"max_qty\": 600, \"step\": 10, \"code\": \"FL-SUBFLOOR\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sf_joists\", \"label\": \"Joists\", \"options\": [\"Sound joists, sheets only\", \"Rotted joists sistered\"], \"add\": {\"Rotted joists sistered\": 299}}, {\"key\": \"sf_cause\", \"label\": \"Cause\", \"options\": [\"Soft spots or old damage\", \"Active water damage or mold, dried first\"], \"add\": {\"Active water damage or mold, dried first\": 199}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_rubber\", \"t\": \"menu\", \"name\": \"Rubber Gym Flooring Installation\", \"icon\": \"\ud83c\udfcb\", \"desc\": \"Interlocking rubber tiles\", \"full\": \"Interlocking rubber tiles, rolled rubber or stall mats laid tight over the slab or existing floor for a home gym, playroom or garage corner. You supply the rubber.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.99, \"min_qty\": 50, \"max_qty\": 2000, \"step\": 50, \"code\": \"FL-RUBBER\", \"variants\": [{\"key\": \"tiles\", \"label\": \"Interlocking tiles\", \"price\": 2.49}, {\"key\": \"rolled\", \"label\": \"Rolled rubber, glued\", \"price\": 2.99}, {\"key\": \"mats\", \"label\": \"Stall mats\", \"price\": 1.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"rb_prep\", \"label\": \"Floor today\", \"options\": [\"Concrete or existing floor, clean\", \"Old carpet to pull first\"], \"add\": {\"Old carpet to pull first\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_large_format\", \"t\": \"menu\", \"name\": \"Large Format Tile Installation\", \"icon\": \"\u2b1c\", \"desc\": \"Tiles over 24 inches (24 x 48 and bigger slabs) set on a flat\", \"full\": \"Tiles over 24 inches (24 x 48 and bigger slabs) set on a flat, leveled floor with a leveling clip system, back buttered and lippage free, in the layout you pick. You supply the tile; the legacy Tile flow covers standard sizes.\", \"section\": \"Tile\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 8.99, \"min_qty\": 50, \"max_qty\": 2000, \"step\": 50, \"code\": \"FL-LARGEFORMAT\", \"variants\": [{\"key\": \"grid\", \"label\": \"Straight Grid\", \"price\": 8.99}, {\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 9.49}, {\"key\": \"diagonal\", \"label\": \"Diagonal\", \"price\": 9.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"lf_tile\", \"label\": \"Tile\", \"options\": [\"Porcelain or ceramic\", \"Marble, stone or a slab\"], \"add\": {\"Marble, stone or a slab\": 199}}, {\"key\": \"lf_floor\", \"label\": \"Floor today\", \"options\": [\"Flat and ready\", \"Self-leveling pour first\"], \"add\": {\"Self-leveling pour first\": 299}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_hex_mosaic\", \"t\": \"menu\", \"name\": \"Hexagon, Penny and Specialty Mosaic Tile\", \"icon\": \"\u2b22\", \"desc\": \"Hexagon, penny round, fish scale or patterned mosaic sheets laid\", \"full\": \"Hexagon, penny round, fish scale or patterned mosaic sheets laid from the center of the room with tight, even joints and clean cuts at every edge, grouted and cleaned. You supply the sheets.\", \"section\": \"Tile\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 9.99, \"min_qty\": 20, \"max_qty\": 600, \"step\": 10, \"code\": \"FL-HEXMOSAIC\", \"variants\": [{\"key\": \"hexlarge\", \"label\": \"Large hexagon, 8 in and up\", \"price\": 8.99}, {\"key\": \"hexsmall\", \"label\": \"Small hexagon sheets\", \"price\": 9.99}, {\"key\": \"penny\", \"label\": \"Penny round sheets\", \"price\": 10.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"hx_grout\", \"label\": \"Grout\", \"options\": [\"Standard grout\", \"Epoxy grout or a contrasting color\"], \"add\": {\"Epoxy grout or a contrasting color\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_bamboo_cork\", \"t\": \"menu\", \"name\": \"Bamboo or Cork Flooring Installation\", \"icon\": \"\ud83c\udf8b\", \"desc\": \"Bamboo planks nailed or glued like hardwood\", \"full\": \"Bamboo planks nailed or glued like hardwood, or cork tiles and planks glued down or floated, acclimated first, doorways undercut, expansion gaps left. You supply the flooring with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 3.99, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-BAMBOOCORK\", \"variants\": [{\"key\": \"bamboo\", \"label\": \"Bamboo, nail or glue\", \"price\": 3.99}, {\"key\": \"cork\", \"label\": \"Cork, glue-down or floating\", \"price\": 3.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"bc_old\", \"label\": \"Floor today\", \"options\": [\"Bare subfloor, ready to go\", \"Old floor to pull up first\"], \"add\": {\"Old floor to pull up first\": 199}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_big_home\", \"t\": \"menu\", \"name\": \"Whole Home Flooring Over 2,000 Sq Ft\", \"icon\": \"\ud83c\udfe1\", \"desc\": \"A whole home or several floors of new flooring\", \"full\": \"A whole home or several floors of new flooring: the layout and transitions planned, one crew scheduled, and a volume price.\", \"section\": \"Large & Custom Jobs\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 6999.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-Q-BIGHOME\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_wall_tile\", \"t\": \"menu\", \"name\": \"Shower, Tub Surround and Wall Tile\", \"icon\": \"\ud83d\udebf\", \"desc\": \"Tile on the walls: a shower, tub surround\", \"full\": \"Tile on the walls: a shower, tub surround, backsplash or feature wall with waterproofing, niches and trim.\", \"section\": \"Tile\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 2499.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-Q-WALLTILE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_inlay\", \"t\": \"menu\", \"name\": \"Custom Inlays, Borders and Medallions\", \"icon\": \"\ud83c\udfa8\", \"desc\": \"A wood or tile medallion, a border\", \"full\": \"A wood or tile medallion, a border, a mixed material inlay or a custom parquet field designed and set by hand.\", \"section\": \"Large & Custom Jobs\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 1499.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-Q-INLAY\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_commercial\", \"t\": \"menu\", \"name\": \"Commercial and Multi-Unit Flooring\", \"icon\": \"\ud83c\udfe2\", \"desc\": \"Offices, stores, restaurants\", \"full\": \"Offices, stores, restaurants, rental turnovers or several apartments: a site visit for the scope, phasing after hours and a volume price.\", \"section\": \"Large & Custom Jobs\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 4999.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-Q-COMMERCIAL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": 500, \"pstep\": 100, \"key\": \"fl_wood_install\", \"t\": \"menu\", \"name\": \"Wood Flooring\", \"icon\": \"\ud83e\udeb5\", \"desc\": \"Wood flooring measured, cut and secured, nails and glue included\", \"full\": \"Wood flooring measured, cut and secured, nails and glue included, flooring supplied by you with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 4.19, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-WOOD\", \"variants\": [{\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 4.19}, {\"key\": \"center_offset\", \"label\": \"Center Offset\", \"price\": 4.19}, {\"key\": \"herringbone\", \"label\": \"Herringbone\", \"price\": 5.69}, {\"key\": \"chevron\", \"label\": \"Chevron\", \"price\": 5.69}], \"rows\": false, \"variant_q\": \"Pattern\", \"variant_default\": \"Staggered\", \"rank\": 50, \"questions\": [{\"key\": \"fl_installMethod\", \"label\": \"Install\", \"options\": [\"Nail\", \"Glue\"], \"add\": {}}]}, {\"qdef\": 300, \"pstep\": 50, \"key\": \"fl_tile_ceramic\", \"t\": \"menu\", \"name\": \"Ceramic \/ Porcelain Tile\", \"icon\": \"\ud83e\uddf1\", \"desc\": \"Ceramic or porcelain tile set, thinset and grout included\", \"full\": \"Ceramic or porcelain tile set, thinset and grout included, tile supplied by you with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 5.39, \"min_qty\": 50, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-TILECERAMIC\", \"variants\": [{\"key\": \"center_offset\", \"label\": \"Center Offset\", \"price\": 5.39}, {\"key\": \"grid\", \"label\": \"Grid\", \"price\": 5.39}, {\"key\": \"diamond\", \"label\": \"Diamond\", \"price\": 5.39}, {\"key\": \"parquet\", \"label\": \"Parquet\", \"price\": 6.49}, {\"key\": \"herringbone\", \"label\": \"Herringbone\", \"price\": 6.49}, {\"key\": \"chevron\", \"label\": \"Chevron\", \"price\": 6.49}, {\"key\": \"mosaic\", \"label\": \"Mosaic\", \"price\": 6.49}, {\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 6.49}], \"rows\": false, \"variant_q\": \"Pattern\", \"variant_default\": \"Center Offset\", \"rank\": 50, \"questions\": []}, {\"qdef\": 300, \"pstep\": 50, \"key\": \"fl_tile_marble\", \"t\": \"menu\", \"name\": \"Marble \/ Travertine Tile\", \"icon\": \"\ud83d\udc8e\", \"desc\": \"Marble or travertine tile set, thinset and grout included\", \"full\": \"Marble or travertine tile set, thinset and grout included, tile supplied by you with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 5.99, \"min_qty\": 50, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-TILEMARBLE\", \"variants\": [{\"key\": \"center_offset\", \"label\": \"Center Offset\", \"price\": 5.99}, {\"key\": \"grid\", \"label\": \"Grid\", \"price\": 5.99}, {\"key\": \"diamond\", \"label\": \"Diamond\", \"price\": 5.99}, {\"key\": \"parquet\", \"label\": \"Parquet\", \"price\": 7.69}, {\"key\": \"herringbone\", \"label\": \"Herringbone\", \"price\": 7.69}, {\"key\": \"chevron\", \"label\": \"Chevron\", \"price\": 7.69}, {\"key\": \"mosaic\", \"label\": \"Mosaic\", \"price\": 7.69}, {\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 7.69}], \"rows\": false, \"variant_q\": \"Pattern\", \"variant_default\": \"Center Offset\", \"rank\": 50, \"questions\": []}, {\"qdef\": 500, \"pstep\": 100, \"key\": \"fl_vinyl_plank\", \"t\": \"menu\", \"name\": \"Vinyl Plank Flooring\", \"icon\": \"\ud83c\udfe0\", \"desc\": \"Luxury vinyl plank laid and locked\", \"full\": \"Luxury vinyl plank laid and locked, flooring supplied by you with overage.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 3.29, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-VINYLPLANK\", \"variants\": [{\"key\": \"staggered\", \"label\": \"Staggered\", \"price\": 3.29}, {\"key\": \"center_offset\", \"label\": \"Center Offset\", \"price\": 3.29}, {\"key\": \"herringbone\", \"label\": \"Herringbone\", \"price\": 3.59}, {\"key\": \"chevron\", \"label\": \"Chevron\", \"price\": 3.59}], \"rows\": false, \"variant_q\": \"Pattern\", \"variant_default\": \"Staggered\", \"rank\": 50, \"questions\": []}, {\"qdef\": 500, \"pstep\": 100, \"key\": \"fl_carpet_install\", \"t\": \"menu\", \"name\": \"Carpet Installation\", \"icon\": \"\ud83e\uddf6\", \"desc\": \"Carpet stretched and installed, carpet supplied by you\", \"full\": \"Carpet stretched and installed, carpet supplied by you. Padding is its own service.\", \"section\": \"New Floors\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 1.49, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-CARPET\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": 500, \"pstep\": 100, \"key\": \"fl_sand_refinish\", \"t\": \"menu\", \"name\": \"Sand & Refinish\", \"icon\": \"\u2728\", \"desc\": \"Hardwood sanded to bare wood and refinished\", \"full\": \"Hardwood sanded to bare wood and refinished.\", \"section\": \"Repair & Refinish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 5.29, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-SANDREFINISH\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": 500, \"pstep\": 100, \"key\": \"fl_removal\", \"t\": \"menu\", \"name\": \"Floor Removal\", \"icon\": \"\ud83d\udee0\", \"desc\": \"Old flooring torn out and the subfloor left ready for the new\", \"full\": \"Old flooring torn out and the subfloor left ready for the new floor.\", \"section\": \"Prep & Materials\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.99, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-REMOVAL\", \"variants\": [{\"key\": \"wood\", \"label\": \"Wood\", \"price\": 2.99}, {\"key\": \"tile\", \"label\": \"Tile\", \"price\": 2.99}, {\"key\": \"vinyl\", \"label\": \"Vinyl\", \"price\": 1.49}, {\"key\": \"carpet\", \"label\": \"Carpet\", \"price\": 0.89}], \"rows\": false, \"variant_q\": \"What is coming out?\", \"variant_default\": \"Wood\", \"rank\": 50, \"questions\": []}, {\"qdef\": 200, \"pstep\": 50, \"key\": \"fl_subfloor\", \"t\": \"menu\", \"name\": \"Sub-Floor Repair\", \"icon\": \"\ud83e\uddf1\", \"desc\": \"Damaged or soft subfloor cut out and replaced\", \"full\": \"Damaged or soft subfloor cut out and replaced.\", \"section\": \"Repair & Refinish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.99, \"min_qty\": 100, \"max_qty\": 5000, \"step\": 50, \"code\": \"FL-SUBFLOOR\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_move_ao\", \"t\": \"menu\", \"name\": \"Move and reset furniture\", \"icon\": \"\ud83d\udecb\", \"desc\": \"Beds, dressers, sofas and tables moved out of the room or to one\", \"full\": \"Beds, dressers, sofas and tables moved out of the room or to one side, then put back when the floor is done. Small items and breakables are boxed by you.\", \"section\": \"Prep & Materials\", \"unit\": \"unit\", \"unit_label\": \"room\", \"price\": 49.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-MOVE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"mv_what\", \"label\": \"Furniture\", \"options\": [\"Sofas, tables and dressers\", \"Beds, a piano or a full room pack-out\"], \"add\": {\"Beds, a piano or a full room pack-out\": 49}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_baseboard_ao\", \"t\": \"menu\", \"name\": \"Baseboards and shoe molding\", \"icon\": \"\ud83d\udccf\", \"desc\": \"Baseboards or shoe molding pulled\", \"full\": \"Baseboards or shoe molding pulled before the floor goes in and nailed back after, nail holes filled. New shoe molding or quarter round cut and nailed if you want a fresh edge.\", \"section\": \"Trim & Finish\", \"unit\": \"unit\", \"unit_label\": \"linear ft\", \"price\": 1.99, \"min_qty\": 20, \"max_qty\": 600, \"step\": 10, \"code\": \"FL-AO-BASEBOARD\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"bb_what\", \"label\": \"Molding\", \"options\": [\"Pull and reinstall the existing baseboards\", \"New shoe molding or quarter round, you supply\", \"New shoe molding, the pro supplies primed pine\"], \"add\": {\"New shoe molding or quarter round, you supply\": 49, \"New shoe molding, the pro supplies primed pine\": 149}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_transition_ao\", \"t\": \"menu\", \"name\": \"Transition strips and thresholds\", \"icon\": \"\ud83d\udeaa\", \"desc\": \"A T-mold, reducer, end cap or threshold cut and set at each\", \"full\": \"A T-mold, reducer, end cap or threshold cut and set at each doorway or floor change so the edges are finished and safe.\", \"section\": \"Trim & Finish\", \"unit\": \"unit\", \"unit_label\": \"doorway\", \"price\": 39.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-TRANSITION\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"tr_type\", \"label\": \"Strip\", \"options\": [\"Matching T-mold, reducer or end cap\", \"Metal, marble or stone threshold\"], \"add\": {\"Metal, marble or stone threshold\": 20}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_underlayment_ao\", \"t\": \"menu\", \"name\": \"Underlayment or moisture barrier\", \"icon\": \"\ud83e\uddf1\", \"desc\": \"A foam, felt or cork pad or a vapor barrier rolled and taped\", \"full\": \"A foam, felt or cork pad or a vapor barrier rolled and taped under a floating or nailed floor before the boards go down, material included.\", \"section\": \"Prep & Materials\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 0.99, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-AO-UNDERLAY\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ul_type\", \"label\": \"Type\", \"options\": [\"Standard foam or felt pad\", \"Vapor barrier for a concrete slab\", \"Acoustic pad for condos and upstairs rooms\"], \"add\": {\"Vapor barrier for a concrete slab\": 49, \"Acoustic pad for condos and upstairs rooms\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_padding_ao\", \"t\": \"menu\", \"name\": \"Carpet padding supplied and installed\", \"icon\": \"\ud83e\uddf6\", \"desc\": \"Rebond or memory foam carpet pad supplied\", \"full\": \"Rebond or memory foam carpet pad supplied, laid and stapled before the carpet, seams taped.\", \"section\": \"Prep & Materials\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 0.79, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-AO-PADDING\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"pd_type\", \"label\": \"Padding\", \"options\": [\"6 lb rebond pad\", \"8 lb rebond or memory foam pad\"], \"add\": {\"8 lb rebond or memory foam pad\": 49}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_haul_ao\", \"t\": \"menu\", \"name\": \"Old flooring haul away\", \"icon\": \"\ud83d\ude9b\", \"desc\": \"The torn out flooring, pad, tack strips and debris bagged\", \"full\": \"The torn out flooring, pad, tack strips and debris bagged, loaded and hauled to the dump, dump fees included.\", \"section\": \"Extras\", \"unit\": \"unit\", \"unit_label\": \"load\", \"price\": 149.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-HAUL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"hl_what\", \"label\": \"Load\", \"options\": [\"Carpet, pad, vinyl or laminate\", \"Tile, stone or hardwood, heavy debris\"], \"add\": {\"Tile, stone or hardwood, heavy debris\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_leveling_ao\", \"t\": \"menu\", \"name\": \"Floor leveling compound\", \"icon\": \"\ud83e\uddea\", \"desc\": \"Low spots ground and filled or a self-leveling compound poured\", \"full\": \"Low spots ground and filled or a self-leveling compound poured so the new floor lies flat, primer and compound included.\", \"section\": \"Prep & Materials\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 2.49, \"min_qty\": 50, \"max_qty\": 1500, \"step\": 50, \"code\": \"FL-AO-LEVEL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"lv_area\", \"label\": \"Area\", \"options\": [\"Spots and low dips\", \"Full floor pour\"], \"add\": {\"Full floor pour\": 199}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_squeak_ao\", \"t\": \"menu\", \"name\": \"Squeaky floor fix\", \"icon\": \"\ud83d\udd0a\", \"desc\": \"Loose subfloor screwed to the joists from above with breakaway\", \"full\": \"Loose subfloor screwed to the joists from above with breakaway screws, or shimmed and glued from below, so the squeak stops.\", \"section\": \"Prep & Materials\", \"unit\": \"unit\", \"unit_label\": \"room\", \"price\": 99.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-SQUEAK\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sq_access\", \"label\": \"Access\", \"options\": [\"From above, through the floor\", \"From below, in a crawlspace or basement\"], \"add\": {\"From below, in a crawlspace or basement\": 99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_appliance_ao\", \"t\": \"menu\", \"name\": \"Appliance and toilet pull and reset\", \"icon\": \"\ud83d\udebd\", \"desc\": \"A fridge, range, washer, dryer or toilet disconnected\", \"full\": \"A fridge, range, washer, dryer or toilet disconnected, moved out of the way and set back on the new floor, a new wax ring for the toilet.\", \"section\": \"Prep & Materials\", \"unit\": \"unit\", \"unit_label\": \"item\", \"price\": 79.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-APPLIANCE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ap_what\", \"label\": \"Item\", \"options\": [\"Fridge, range, washer or dryer\", \"Toilet, new wax ring included\"], \"add\": {\"Toilet, new wax ring included\": 30}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_stair_nosing_ao\", \"t\": \"menu\", \"name\": \"Stair nosing\", \"icon\": \"\ud83e\ude9c\", \"desc\": \"A matching flush or overlap nosing cut\", \"full\": \"A matching flush or overlap nosing cut, glued and nailed on each step edge where a new floor meets the stairs.\", \"section\": \"Trim & Finish\", \"unit\": \"unit\", \"unit_label\": \"step\", \"price\": 49.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-NOSING\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sn_type\", \"label\": \"Nosing\", \"options\": [\"Matching flush or overlap nosing\", \"Metal or LED nosing\"], \"add\": {\"Metal or LED nosing\": 25}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_grout_seal_ao\", \"t\": \"menu\", \"name\": \"Grout sealing\", \"icon\": \"\ud83d\udca7\", \"desc\": \"New or freshly cleaned grout lines sealed with a penetrating\", \"full\": \"New or freshly cleaned grout lines sealed with a penetrating sealer so stains and water stay out.\", \"section\": \"Trim & Finish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 1.49, \"min_qty\": 50, \"max_qty\": 1500, \"step\": 50, \"code\": \"FL-AO-GROUTSEAL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"gs_type\", \"label\": \"Sealer\", \"options\": [\"Penetrating sealer, one coat\", \"Color seal, epoxy based\"], \"add\": {\"Color seal, epoxy based\": 199}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_door_ao\", \"t\": \"menu\", \"name\": \"Door jamb undercut and door trim\", \"icon\": \"\ud83e\ude9a\", \"desc\": \"Door jambs and casings undercut so the new floor slides under\", \"full\": \"Door jambs and casings undercut so the new floor slides under, and a door bottom trimmed when the new floor is thicker.\", \"section\": \"Trim & Finish\", \"unit\": \"unit\", \"unit_label\": \"door\", \"price\": 29.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"FL-AO-DOOR\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"dj_what\", \"label\": \"Work\", \"options\": [\"Undercut the jamb and casing\", \"Trim the door bottom too\"], \"add\": {\"Trim the door bottom too\": 20}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_heated_ao\", \"t\": \"menu\", \"name\": \"Heated floor mat under tile\", \"icon\": \"\ud83d\udd25\", \"desc\": \"An electric radiant mat laid in the thinset under a new tile\", \"full\": \"An electric radiant mat laid in the thinset under a new tile floor with the floor sensor and thermostat set, tested before the tile goes down.\", \"section\": \"Trim & Finish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 9.99, \"min_qty\": 20, \"max_qty\": 300, \"step\": 10, \"code\": \"FL-AO-HEATED\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ht_kit\", \"label\": \"Mat and thermostat\", \"options\": [\"You supply the kit\", \"The pro supplies the mat and thermostat\"], \"add\": {\"The pro supplies the mat and thermostat\": 199}}, {\"key\": \"ht_power\", \"label\": \"Power\", \"options\": [\"A circuit already at the thermostat spot\", \"An electrician runs a new circuit\"], \"add\": {\"An electrician runs a new circuit\": 299}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_diagonal_ao\", \"t\": \"menu\", \"name\": \"Diagonal layout, 45 degrees\", \"icon\": \"\ud83d\udd36\", \"desc\": \"The planks or tiles run at 45 degrees to the walls instead\", \"full\": \"The planks or tiles run at 45 degrees to the walls instead of straight: more cuts, more waste and more layout time, on any wood, laminate, vinyl or tile install.\", \"section\": \"Trim & Finish\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 0.99, \"min_qty\": 100, \"max_qty\": 3000, \"step\": 50, \"code\": \"FL-AO-DIAGONAL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"fl_pickup_ao\", \"t\": \"menu\", \"name\": \"Material pickup and delivery\", \"icon\": \"\ud83d\ude9a\", \"desc\": \"Your flooring, pad and trim picked up at the store or warehouse\", \"full\": \"Your flooring, pad and trim picked up at the store or warehouse, delivered and stacked inside to acclimate before install day.\", \"section\": \"Extras\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 99.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"FL-AO-PICKUP\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"pk_trips\", \"label\": \"Trips\", \"options\": [\"One local pickup\", \"Two trips or over 1,000 sq ft of material\"], \"add\": {\"Two trips or over 1,000 sq ft of material\": 79}}]}], \"extras\": [], \"main\": [\"fl_wood_install\", \"fl_tile_ceramic\", \"fl_vinyl_plank\", \"fl_sand_refinish\", \"fl_laminate\", \"fl_regrout\"], \"sections\": [\"New Floors\", \"Stairs\", \"Repair & Refinish\", \"Tile\", \"Large & Custom Jobs\", \"Prep & Materials\", \"Trim & Finish\", \"Extras\"]};\n  var APP = '\/account', QUOTE = APP + '\/customer\/booking-assistant\/quote', CART = APP + '\/customer\/booking-assistant\/create-cart', ZIP = '70124';\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'], SQ_APT = ['Up to 1,000 sq ft','1,001 - 2,000','2,001 - 3,000'];\n  var I = {}, X = {};\n  D.items.forEach(function(o){ I[o.key] = o; }); (D.extras || []).forEach(function(a){ X[a.key] = a; });\n  var st = { sel: [], c: {}, ex: {}, all: true, inc: {}, desc: {} };\n  var q = { busy: false, res: [], groups: [], seq: 0, err: '' };\n  function $(id){ return document.getElementById(id); }\n  function esc(t){ return String(t == null ? '' : t).replace(\/[&<>\"]\/g, function(c){ return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]; }); }\n  function money(n){ return '$' + Number(n).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}); }\n  function dur(h){ var m = Math.round((Number(h) || 0) * 60), dd = Math.floor(m \/ 480), r = m % 480, hh = Math.floor(r \/ 60), mm = r % 60, p = []; if (dd) p.push(dd + ' day' + (dd > 1 ? 's' : '')); if (hh) p.push(hh + ' hr'); if (mm) p.push(mm + ' min'); return p.join(' ') || '0 min'; }\n  function unitTxt(o){ if (o.unit === 'sqft') return '\/ sq ft'; if (o.unit === 'hour') return '\/ hour'; if (o.unit === 'unit' && o.unit_label) return '\/ ' + o.unit_label; return ''; }\n  function on(k){ return st.sel.indexOf(k) >= 0; }\n  function nOf(o){ return o.unit === 'sqft' ? 'sq ft' : (o.unit === 'hour' ? 'hour' : (o.unit_label || '')); }\n  function pl(o, n){ return n > 1 && (o.unit === 'unit' || o.unit === 'hour') && !\/(ft|s)$\/.test(nOf(o)) ? 's' : ''; }\n  \/\/ per service settings, created with its defaults the first time it is added\n  function cf(o){\n    if (st.c[o.key]) return st.c[o.key];\n    var c = {};\n    if (o.t === 'visit') c = { often: 'One Time', freq: 'Weekly', prop: 0, sq: 1, beds: 1, full: 1, half: 0, cleaners: 1, hours: 2 };\n    else if (o.t === 'legacy') (o.fields || []).forEach(function(f){ if (f.t === 'seg') c[f.n] = f.def != null ? f.def : f.opts[0]; else if (f.t === 'num') c[f.n] = f.def; else if (f.t === 'list') c[f.n] = f.def || 0; else if (f.t === 'items') c.items = f.items.map(function(_, i){ return i === 0 ? 1 : 0; }); });\n    else { c.qty = o.qdef || o.min_qty || 1; c.ans = {}; (o.questions || []).forEach(function(qq){ c.ans[qq.key] = qq.options[0]; }); if ((o.variants || []).length){ var dv = o.variants.filter(function(x){ return x.key === o.variant_default || x.label === o.variant_default; })[0]; c.variant = (dv || o.variants[0]).key; if (o.rows){ c.rows = {}; o.variants.forEach(function(x){ c.rows[x.key] = 0; }); } \/* HF-2026-10-10z (Chris): nothing is picked for the customer, every count starts at 0 *\/ } }\n    st.c[o.key] = c; return c;\n  }\n  function shown(o, f){ if (!f.when) return true; var v = cf(o); for (var k in f.when){ if (f.when[k].indexOf(v[k]) < 0) return false; } return true; }\n  function rowsSum(o){ var c = cf(o), n = 0; for (var k in c.rows) n += c.rows[k]; return n; }\n  \/\/ a service with counted rows needs at least one row above 0 before it can be priced\n  function empty(o){\n    if (o.t === 'legacy'){ var f = (o.fields || []).filter(function(x){ return x.t === 'items'; })[0]; return !!f && !cf(o).items.some(function(n){ return n > 0; }); }\n    if (o.rows) return rowsSum(o) <= 0;\n    return false;\n  }\n  function hintOf(o){\n    if (o.hint) return o.hint;\n    if (o.t === 'quote') return 'custom quote';\n    if ((o.variants || []).length){ var ps = o.variants.map(function(x){ return x.price; }).filter(function(x){ return x > 0; }); if (ps.length) return 'from ' + money(Math.min.apply(null, ps)) + (o.unit !== 'flat' ? ' ' + unitTxt(o) : ''); }\n    return o.price > 0 ? money(o.price) + (o.unit !== 'flat' ? ' ' + unitTxt(o) : '') : 'see price';\n  }\n  \/\/ ---- the options under a picked card (white, on the left) ----\n  function ob(k, name, val, opts){ return '<div class=\"os\">' + opts.map(function(x){ return '<button type=\"button\" data-k=\"' + k + '\" data-fs=\"' + esc(name) + '\" data-v=\"' + esc(x) + '\"' + (x === val ? ' class=\"on\"' : '') + '>' + esc(x) + '<\/button>'; }).join('') + '<\/div>'; }\n  function om(k, name, val, min, max){ return '<div class=\"om\"><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(name) + '\" data-d=\"-1\"' + (val <= min ? ' disabled' : '') + ' aria-label=\"Less\">\u2212<\/button><b' + (val ? '' : ' class=\"z\"') + '>' + val + '<\/b><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(name) + '\" data-d=\"1\"' + (val >= max ? ' disabled' : '') + ' aria-label=\"More\">+<\/button><\/div>'; }\n  function ost(k, name, disp, unit, lo, hi){ return '<div class=\"ost\"><div class=\"om\"><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(name) + '\" data-d=\"-1\"' + (lo ? ' disabled' : '') + ' aria-label=\"Less\">\u2212<\/button><\/div><div class=\"ov\">' + esc(disp) + (unit ? '<small>' + esc(unit) + '<\/small>' : '') + '<\/div><div class=\"om\"><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(name) + '\" data-d=\"1\"' + (hi ? ' disabled' : '') + ' aria-label=\"More\">+<\/button><\/div><\/div>'; }\n  function lbl(t){ return '<div class=\"ol\">' + esc(t) + '<\/div>'; }\n  function optsHTML(o){\n    var c = cf(o), k = o.key, h = '';\n    if (o.t === 'visit'){\n      if (o.recurring){ h += lbl('How often?') + ob(k, 'often', c.often, ['One Time', 'Recurring']); if (c.often === 'Recurring') h += lbl('How frequently?') + ob(k, 'freq', c.freq, ['Weekly', 'Bi-Weekly', 'Monthly']); }\n      if (o.hourly){ var mx = c.often === 'Recurring' ? 4 : 8; if (c.hours > mx) c.hours = mx;\n        h += lbl('How many cleaners?') + ob(k, 'cleaners', c.cleaners === 2 ? '2 Cleaners' : '1 Cleaner', ['1 Cleaner', '2 Cleaners']);\n        h += lbl('How many hours?') + ost(k, 'hours', c.hours, 'hr' + (c.hours > 1 ? 's' : ''), c.hours <= 1, c.hours >= mx);\n      } else { var sl = c.prop ? SQ_APT : SQ_HOUSE; if (c.sq > sl.length - 1) c.sq = sl.length - 1;\n        h += lbl('Type of property') + ob(k, 'prop', c.prop ? 'Apartment \/ Condo' : 'House \/ Townhouse', ['House \/ Townhouse', 'Apartment \/ Condo']);\n        h += lbl('Square feet') + ost(k, 'sq', sl[c.sq].replace(' sq ft', ''), 'sq ft', c.sq <= 0, c.sq >= sl.length - 1);\n        h += lbl('Bedrooms & bathrooms') + '<div class=\"orm\"><div>Bedrooms' + om(k, 'beds', c.beds, 1, 9) + '<\/div><div>Full Baths' + om(k, 'full', c.full, 1, 9) + '<\/div><div>Half Baths' + om(k, 'half', c.half, 0, 9) + '<\/div><\/div>';\n      }\n    } else if (o.t === 'legacy'){\n      (o.fields || []).forEach(function(f){\n        if (!shown(o, f)) return;\n        if (f.t === 'seg') h += lbl(f.label) + ob(k, f.n, c[f.n], f.opts);\n        else if (f.t === 'num') h += lbl(f.label) + ost(k, f.n, Number(c[f.n]).toLocaleString('en-US'), f.unit + (f.unit && c[f.n] > 1 && !\/ft$\/.test(f.unit) ? 's' : ''), c[f.n] <= f.min, c[f.n] >= f.max);\n        else if (f.t === 'list') h += lbl(f.label) + ost(k, f.n, f.vals[c[f.n]], f.unit, c[f.n] <= 0, c[f.n] >= f.vals.length - 1);\n        else if (f.t === 'items') h += lbl(f.label) + f.items.map(function(it, i){ return '<div class=\"orw\"><span>' + esc(it) + '<\/span>' + om(k, 'it:' + i, c.items[i], 0, 20) + '<\/div>'; }).join('');\n      });\n    } else if (o.t === 'menu'){\n      if (o.rows) h += lbl(o.variant_q || 'How many?') + o.variants.map(function(x){ return '<div class=\"orw\"><span>' + esc(x.label) + '<small>' + money(x.price) + ' each<\/small><\/span>' + om(k, 'row:' + x.key, c.rows[x.key] || 0, 0, o.max_qty || 20) + '<\/div>'; }).join('');\n      else {\n        if ((o.variants || []).length){ var cv = o.variants.filter(function(x){ return x.key === c.variant; })[0] || o.variants[0];\n          h += lbl(o.variant_q || 'Which one?') + '<div class=\"os\">' + o.variants.map(function(x){ return '<button type=\"button\" data-k=\"' + k + '\" data-var=\"' + esc(x.key) + '\"' + (x.key === cv.key ? ' class=\"on\"' : '') + '>' + esc(x.label) + '<\/button>'; }).join('') + '<\/div>'; }\n        if (o.unit !== 'flat'){ var lab = nOf(o) + pl(o, c.qty); h += lbl('How many?') + ost(k, 'qty', Number(c.qty).toLocaleString('en-US'), lab, c.qty <= o.min_qty, c.qty >= o.max_qty); }\n        (o.questions || []).forEach(function(qq){ h += lbl(qq.label) + '<div class=\"os\">' + qq.options.map(function(x){ var ad = (qq.add || {})[x]; return '<button type=\"button\" data-k=\"' + k + '\" data-q=\"' + esc(qq.key) + '\" data-v=\"' + esc(x) + '\"' + (c.ans[qq.key] === x ? ' class=\"on\"' : '') + '>' + esc(x) + (ad ? ' <small>+' + money(ad).replace('.00', '') + '<\/small>' : '') + '<\/button>'; }).join('') + '<\/div>'; });\n      }\n    }\n    if (empty(o)) h += '<p class=\"oh\">Add at least one to see your price.<\/p>';\n    if ((o.inc || []).length) h += '<button type=\"button\" class=\"oi\" data-k=\"' + k + '\" data-tog=\"inc\">What is included <span>' + (st.inc[k] ? '\u25b4' : '\u25be') + '<\/span><\/button>' + (st.inc[k] ? '<ul>' + o.inc.map(function(i){ return '<li>' + esc(i) + '<\/li>'; }).join('') + '<\/ul>' : '');\n    return h ? '<div class=\"hfc-opt\">' + h + '<\/div>' : '';\n  }\n  function cardHTML(o){\n    var s = on(o.key), op = s ? optsHTML(o) : '';\n    \/\/ HF-2026-10-10x (Chris): a picked card with options spans both columns and pushes the others down\n    return '<div class=\"hfc-cw' + (s ? ' on' : '') + (op ? ' wide' : '') + '\"><button type=\"button\" class=\"hfc-card' + (s ? ' on' : '') + '\" data-svc=\"' + o.key + '\" aria-pressed=\"' + (s ? 'true' : 'false') + '\"><span class=\"hfc-ic\">' + o.icon + '<\/span><span><h4>' + esc(o.name) + '<\/h4><p>' + esc(o.desc) + (o.desc ? ' \u00b7 ' : '') + hintOf(o) + '<\/p><\/span><span class=\"hfc-ck\">' + (s ? '\u2713' : '') + '<\/span><\/button>' + op + '<\/div>';\n  }\n  function hostVisit(){ for (var i = 0; i < st.sel.length; i++){ var o = I[st.sel[i]]; if (o.t === 'visit' && !o.hourly) return o; } return null; }\n  function renderLeft(){\n    $('hfcMain').innerHTML = D.main.map(function(k){ return cardHTML(I[k]); }).join('');\n    var rest = D.items.filter(function(o){ return D.main.indexOf(o.key) < 0; });\n    \/\/ HF-2026-10-10x (Chris): no numbered steps; \"Most popular\" on top, then every category\n    $('hfcAll').hidden = false;\n    $('hfcAll').innerHTML = D.sections.map(function(sec){\n      var it = rest.filter(function(o){ return o.section === sec; }); if (!it.length) return '';\n      return '<div class=\"hfc-cat\"><div class=\"hfc-stp\"><h3>' + esc(sec) + '<\/h3><\/div><div class=\"hfc-sv\">' + it.map(cardHTML).join('') + '<\/div><\/div>';\n    }).join('');\n    var mb = $('hfcMore'); if (mb) mb.hidden = true;\n    var s2 = $('hfcS2'); if (s2){ s2.hidden = !(D.extras || []).length;\n      if (!s2.hidden){ var hv = hostVisit();\n        $('hfcAo').innerHTML = D.extras.map(function(a){ return '<button type=\"button\" class=\"hfc-ao' + (st.ex[a.key] && hv ? ' on' : '') + '\" data-ex=\"' + a.key + '\"' + (hv ? '' : ' disabled') + '><span>' + esc(a.name) + '<\/span><b>' + money(a.price) + (a.unit !== 'flat' ? ' <small>' + unitTxt(a) + '<\/small>' : '') + '<\/b><\/button>'; }).join('');\n        var nt = $('hfcAoNote'); nt.hidden = !!hv; nt.textContent = 'These ride along with a home cleaning visit. Pick Whole Home, Deep Clean, Move In \/ Out or Airbnb above to add them.';\n        var am = $('hfcAoMore'); if (am) am.hidden = true; } }\n  }\n  \/\/ ---- engine calls: which services price together ----\n  function menuSel(o){ var c = cf(o), m = { key: o.key, qty: 1, variant: null, answers: {} };\n    if (o.rows){ m.qty = rowsSum(o); m.answers = { rows: o.variants.filter(function(x){ return c.rows[x.key] > 0; }).map(function(x){ return x.key + ':' + c.rows[x.key]; }).join(',') }; }\n    else { m.qty = o.unit === 'flat' ? 1 : c.qty; m.variant = (o.variants || []).length ? c.variant : null; for (var qk in (c.ans || {})) m.answers[qk] = c.ans[qk]; }\n    return m; }\n  function groups(){\n    var g = [], menus = [], hv = hostVisit();\n    st.sel.forEach(function(k){ var o = I[k]; if (o.t === 'menu' && !empty(o)) menus.push(o); });\n    if (hv) g.push({ k: 'visit', host: hv, aos: menus, ex: Object.keys(st.ex).filter(function(x){ return st.ex[x]; }) });\n    st.sel.forEach(function(k){ var o = I[k]; if (o.t === 'visit' && o.hourly) g.push({ k: 'visit', host: o, aos: [], ex: [] }); });\n    if (!hv && menus.length) g.push({ k: 'menu', host: menus[0], aos: menus.slice(1), ex: [] });\n    st.sel.forEach(function(k){ var o = I[k]; if (o.t === 'legacy' && !empty(o)) g.push({ k: 'legacy', host: o, aos: [], ex: [] }); });\n    return g;\n  }\n  function selection(gr){\n    var o = gr.host, c = cf(o), p = { service_type: D.st, zip: ZIP, zipcode: ZIP };\n    if (gr.k === 'visit'){\n      p.cleaningType = 'House Cleaning'; p.houseCleaningType = o.hct;\n      if (o.recurring){ p.recurring = c.often; if (c.often === 'Recurring') p.frequency = c.freq; } else p.recurring = 'One Time';\n      if (o.hourly){ p.cleaners = c.cleaners === 2 ? '2 Cleaners' : '1 Cleaner'; p.hours = c.hours + ' HR'; }\n      else { var sl = c.prop ? SQ_APT : SQ_HOUSE; p.propertyType = c.prop ? 'Apartment \/ Condo' : 'House \/ Townhouse'; p.sqft = sl[c.sq]; p.bedrooms = String(c.beds); p.fullBaths = String(c.full); p.halfBaths = String(c.half); }\n    } else if (gr.k === 'legacy'){\n      for (var k in o.sel) p[k] = o.sel[k];\n      (o.fields || []).forEach(function(f){\n        if (!shown(o, f)) return;\n        if (f.t === 'seg'){ var val = c[f.n]; p[f.p] = f.pv ? f.pv[val] : val; if (f.p2 && f.pv2 && f.pv2[val]) p[f.p2] = f.pv2[val]; }\n        else if (f.t === 'num') p[f.p] = String(c[f.n]);\n        else if (f.t === 'list') p[f.p] = f.vals[c[f.n]];\n        else if (f.t === 'items'){ var sel = {}, parts = []; f.items.forEach(function(it, i){ var n = c.items[i] || 0; if (n > 0){ sel[it] = n; parts.push(n + ' x ' + it); } }); p[f.pj] = JSON.stringify(sel); p[f.pt] = parts.join(', '); }\n      });\n    } else {\n      var m = menuSel(o); p.menu_json = JSON.stringify({ key: o.key, code: o.code, qty: m.qty, variant: m.variant, answers: m.answers, name: o.name, extras_only: false }); p.service_code = o.code;\n    }\n    var aos = gr.aos.map(menuSel).concat(gr.ex.map(function(x){ return { key: x, qty: 1 }; }));\n    if (aos.length) p.addons_json = JSON.stringify(aos);\n    return p;\n  }\n  function post(url, body, again){\n    var h = { 'Content-Type': 'application\/json', 'Accept': 'application\/json', 'X-Requested-With': 'XMLHttpRequest' };\n    var t = document.querySelector('meta[name=\"csrf-token\"]'); if (t) h['X-CSRF-TOKEN'] = t.getAttribute('content');\n    \/\/ a price answers in well under a second; one that hangs (about 1 in 60 through the load balancer) is cut at 6 s and\n    \/\/ tried again, twice at most, so the box never sits on \"\u2026\" (cart posts are never retried)\n    var quote = url === QUOTE, ac = (quote && window.AbortController) ? new AbortController() : null, tm = ac ? setTimeout(function(){ ac.abort(); }, 6000) : null;\n    return fetch(url, { method: 'POST', headers: h, credentials: 'same-origin', body: JSON.stringify(body), signal: ac ? ac.signal : undefined }).then(function(r){ clearTimeout(tm); if (!r.ok) throw new Error('HTTP ' + r.status); return r.json(); })\n      .catch(function(e){ clearTimeout(tm); if (quote && (again || 0) < 2) return post(url, body, (again || 0) + 1); throw e; });\n  }\n  var timer = null;\n  function reprice(){\n    q.busy = true; q.err = ''; renderBox(); clearTimeout(timer);\n    timer = setTimeout(function(){\n      var my = ++q.seq, gs = groups();\n      if (!gs.length){ q.busy = false; q.groups = []; q.res = []; renderBox(); return; }\n      Promise.all(gs.map(function(g){ return post(QUOTE, selection(g)); })).then(function(rs){ if (my !== q.seq) return; q.groups = gs; q.res = rs; q.busy = false; renderBox(); })\n        .catch(function(){ if (my !== q.seq) return; q.busy = false; q.groups = []; q.res = []; q.err = 'We could not load a price. Please try again.'; renderBox(); });\n    }, 220);\n  }\n  \/\/ ---- the navy box: only what was added ----\n  function subOf(o){\n    var c = cf(o), sl;\n    if (o.t === 'visit'){ if (o.hourly) return (c.cleaners === 2 ? '2 cleaners' : '1 cleaner') + ' \u00b7 ' + c.hours + ' hr' + (c.hours > 1 ? 's' : '') + (c.often === 'Recurring' ? ' \u00b7 ' + c.freq : '');\n      sl = c.prop ? SQ_APT : SQ_HOUSE; return (c.often === 'Recurring' ? c.freq : 'One time') + ' \u00b7 ' + sl[c.sq].replace(' sq ft', '') + ' sq ft \u00b7 ' + c.beds + ' bd \u00b7 ' + c.full + (c.half ? '.5' : '') + ' ba'; }\n    if (o.t === 'legacy'){ var out = [];\n      (o.fields || []).forEach(function(f){ if (!shown(o, f)) return;\n        if (f.t === 'items') f.items.forEach(function(it, i){ if (c.items[i] > 0) out.push(c.items[i] + ' \u00d7 ' + it); });\n        else if (f.t === 'num') out.push(Number(c[f.n]).toLocaleString('en-US') + ' ' + f.unit + (c[f.n] > 1 && f.unit && !\/ft$\/.test(f.unit) ? 's' : ''));\n        else if (f.t === 'list') out.push(f.vals[c[f.n]] + (f.unit ? ' ' + f.unit : ''));\n        else if (f.t === 'seg') out.push(c[f.n]); });\n      return out.join(' \u00b7 '); }\n    if (o.t === 'quote') return 'Homer builds your quote in chat';\n    if (o.rows) return o.variants.filter(function(x){ return c.rows[x.key] > 0; }).map(function(x){ return c.rows[x.key] + ' \u00d7 ' + x.label; }).join(', ');\n    var v = (o.variants || []).filter(function(x){ return x.key === c.variant; })[0], bits = [];\n    if (v) bits.push(v.label); if (o.unit !== 'flat') bits.push(Number(c.qty).toLocaleString('en-US') + ' ' + nOf(o) + pl(o, c.qty));\n    (o.questions || []).forEach(function(qq){ var a = (c.ans || {})[qq.key]; if (a && a !== qq.options[0]) bits.push(\/^(yes|no)$\/i.test(a) ? qq.label.replace(\/\\?$\/, '') + ': ' + a : a); });\n    return bits.join(' \u00b7 ');\n  }\n  function bst(k, fn, n, min, max){ return '<div class=\"hfc-bs\"><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(fn) + '\" data-d=\"-1\"' + (n <= min ? ' disabled' : '') + ' aria-label=\"Less\">\u2212<\/button><b>' + Number(n).toLocaleString('en-US') + '<\/b><button type=\"button\" data-k=\"' + k + '\" data-fn=\"' + esc(fn) + '\" data-d=\"1\"' + (n >= max ? ' disabled' : '') + ' aria-label=\"More\">+<\/button><\/div>'; }\n  function xb(k){ return '<button type=\"button\" class=\"x\" data-rm=\"' + esc(k) + '\" aria-label=\"Remove\">\u00d7<\/button>'; }\n  function moreOf(o){ var t = o.full || ((o.inc || []).length ? '' : o.desc); if (!t && !(o.inc || []).length) return '';\n    return '<button type=\"button\" class=\"hfc-sm\" data-k=\"' + o.key + '\" data-tog=\"desc\">' + (st.desc[o.key] ? 'See less \u25b4' : 'See more \u25be') + '<\/button>' + (st.desc[o.key] ? '<div class=\"hfc-dsc\">' + (t ? '<p>' + esc(t) + '<\/p>' : '') + ((o.inc || []).length ? '<ul>' + o.inc.map(function(i){ return '<li>' + esc(i) + '<\/li>'; }).join('') + '<\/ul>' : '') + '<\/div>' : ''); }\n  \/\/ HF-2026-10-10x (Chris): every item is its own row with its amount (\u2212 n +) and price; \"See more\" opens the description\n  function groupHTML(o, price, pending){\n    var c = cf(o), P = function(v){ return v != null && !pending ? '<b>' + money(v) + '<\/b>' : '<b>&hellip;<\/b>'; }, h = '<div class=\"hfc-sg\">';\n    if (o.t === 'quote') return h + '<div class=\"hfc-ln\"><span>' + esc(o.name) + '<small>Homer builds your quote in chat<\/small><\/span><b class=\"q\">Custom quote<\/b>' + xb(o.key) + '<\/div>' + moreOf(o) + '<\/div>';\n    if (o.rows){\n      h += '<div class=\"hfc-sh\"><span>' + esc(o.name) + '<\/span>' + xb(o.key) + '<\/div>';\n      o.variants.forEach(function(x){ var n = c.rows[x.key] || 0; if (n <= 0) return;\n        h += '<div class=\"hfc-ln hfc-row\"><span>' + esc(x.label) + '<small>' + money(x.price) + ' each<\/small><\/span>' + bst(o.key, 'row:' + x.key, n, 0, o.max_qty || 20) + P(pending ? null : (function(v){ var nc = Math.round((v + 0.01) \/ 5) * 5 - 0.01; return (nc > 0 && Math.abs(nc - v) < 2.6) ? Math.round(nc * 100) \/ 100 : v; })(Math.round(x.price * n * 100) \/ 100)) + '<\/div>'; });\n      if (empty(o)) h += '<div class=\"hfc-ln hfc-row\"><span><small>Add at least one on the left<\/small><\/span><\/div>';\n    } else {\n      var stp = (o.t === 'menu' && o.unit !== 'flat') ? bst(o.key, 'qty', c.qty, o.min_qty, o.max_qty) : '';\n      h += '<div class=\"hfc-ln\"><span>' + esc(o.name) + '<small>' + esc(subOf(o)) + '<\/small><\/span>' + stp + P(price) + xb(o.key) + '<\/div>';\n    }\n    return h + moreOf(o) + '<\/div>';\n  }\n  function lineHTML(name, sub, price, k){ return '<div class=\"hfc-ln\"><span>' + esc(name) + (sub ? '<small>' + esc(sub) + '<\/small>' : '') + '<\/span>' + price + (k ? '<button type=\"button\" class=\"x\" data-rm=\"' + esc(k) + '\" aria-label=\"Remove\">\u00d7<\/button>' : '') + '<\/div>'; }\n  function renderBox(){\n    var h = '<div class=\"t\">Your services<\/div>', ok = true, total = 0, mins = 0, any = false, na = false, quotes = [];\n    var pending = q.busy || (q.groups.length !== groups().length);\n    if (!st.sel.length) h += '<p class=\"hfc-emp\">Pick one or more services on the left. Everything you add shows here with its price.<\/p>';\n    var lines = '';\n    var priced = {};\n    q.groups.forEach(function(g, i){ var r = q.res[i] || {};\n      if (!r.available){ na = true; ok = false; return; }\n      if (r.needs_quote || !(r.price > 0)){ ok = false; return; }\n      any = true; total += Number(r.price); mins += Number(r.duration) || 0;\n      var aol = r.addons || [], aoSum = 0; aol.forEach(function(l){ aoSum += Number(l.price) || 0; });\n      \/\/ HF-2026-10-11a: every line carries its own engine price and the total is their sum (no rounding on a line)\n      var base = Math.round((r.price - aoSum) * 100) \/ 100;\n      priced[g.host.key] = base;\n      aol.forEach(function(l){ priced[l.key] = Math.round(Number(l.price) * 100) \/ 100; });\n    });\n    st.sel.forEach(function(k){ var o = I[k]; if (o.t === 'quote') quotes.push(o); lines += groupHTML(o, priced[k], pending); });\n    Object.keys(st.ex).forEach(function(x){ if (st.ex[x] && hostVisit()) lines += lineHTML(X[x].name, 'With your home cleaning', priced[x] != null && !pending ? '<b>' + money(priced[x]) + '<\/b>' : '<b>&hellip;<\/b>', 'ex:' + x); });\n    if (lines) h += '<div class=\"hfc-lns\">' + lines + '<\/div>';\n    var onlyQ = st.sel.length && quotes.length === st.sel.length, canBook = !pending && any && ok && !q.err;\n    var ptxt = onlyQ ? 'Custom quote' : (!st.sel.length ? '$0.00' : (pending ? '&hellip;' : (na ? 'Not available yet' : (any ? money(total) : '&hellip;'))));\n    var btn = onlyQ ? 'Get My Quote' : 'Book It';\n    h += '<div class=\"hfc-foot\"><div><div class=\"hfc-price' + (na || onlyQ ? ' na' : '') + '\" id=\"hfcP\">' + ptxt + '<\/div><p>' + (canBook ? 'est. duration: ' + dur(mins) : (onlyQ ? 'Homer builds your quote in chat' : '')) + '<\/p><\/div><button type=\"button\" class=\"hfc-btn\" id=\"hfcBook\"' + (canBook || onlyQ ? '' : ' disabled') + '>' + btn + '<\/button><\/div>';\n    if (quotes.length && !onlyQ) h += '<div class=\"hfc-err\">' + esc(quotes.map(function(o){ return o.name; }).join(', ')) + ' ' + (quotes.length > 1 ? 'are' : 'is') + ' priced by custom quote. Book the rest, then ask Homer for the quote.<\/div>';\n    if (q.err) h += '<div class=\"hfc-err\">' + esc(q.err) + '<\/div>';\n    h += '<div class=\"hfc-ft\">Upfront price \u00b7 free cancellation up to 24 hours before service<\/div>';\n    $('hfcNb').innerHTML = h;\n    $('hfcBarP').innerHTML = ptxt;\n    $('hfcBarS').textContent = st.sel.length ? st.sel.length + ' service' + (st.sel.length > 1 ? 's' : '') : 'Pick a service';\n    $('hfcBarB').disabled = !(canBook || onlyQ); $('hfcBarB').textContent = btn;\n  }\n  function ask(text){\n    try { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'hf_hero_select', hf_kind: 'query', hf_value: text }); } catch (e) {}\n    if (typeof window.hfOpenConcierge === 'function'){ window.hfOpenConcierge({ type: 'query', q: text, big: true }); return; }\n    window.location.href = APP + '\/customer\/ai-booking?embed=1&panel=1&full=1&q=' + encodeURIComponent(text);\n  }\n  function busyBtns(t){ [$('hfcBook'), $('hfcBarB')].forEach(function(b){ if (b){ b.disabled = true; b.textContent = t; } }); }\n  function book(){\n    var quotes = st.sel.filter(function(k){ return I[k].t === 'quote'; });\n    if (quotes.length && quotes.length === st.sel.length){ ask('I need a quote for ' + quotes.map(function(k){ return I[k].name; }).join(' and ')); return; }\n    var gs = q.groups, rs = q.res; if (!gs.length) return;\n    busyBtns('Adding to your cart\u2026');\n    try { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'hf_card_book', hf_service: st.sel.map(function(k){ return I[k].name; }).join(', '), hf_zip: ZIP }); } catch (e) {}\n    var i = 0, last = null;\n    function fail(m){ q.err = m || 'We could not add this to your cart. Please try again.'; renderBox(); }\n    function next(){\n      if (i >= gs.length){ window.location.href = (last && last.redirect) || (APP + '\/customer\/services\/cart'); return; }\n      var g = gs[i], r = rs[i], p = selection(g);\n      p.price = r.price; p.duration = r.duration; p.provider_id = r.provider_id; p.last_category_id = r.last_category_id; p.sacf_id = r.sacf_id || null;\n      p.line_title = ((g.aos.length || g.ex.length) ? '' : r.summary) || g.host.name; \/\/ with extras on the line, each extra gets its own row, so the host line is just its own name p.append = i > 0 ? 1 : 0;\n      if (r.job_items && r.job_items.length) p.job_items = r.job_items;\n      if (r.addons && r.addons.length){ p.addons_json = JSON.stringify(r.addons); var tt = {}; r.addons.forEach(function(l){ if (l.code) tt[l.code] = l.name + ((Number(l.qty) || 1) > 1 ? ' \u00d7 ' + l.qty : ''); }); p.line_titles = JSON.stringify(tt); }\n      post(CART, p).then(function(d){\n        if (d && d.success){ last = d; i++; next(); return; }\n        if (d && d.code === 'quote_only'){ ask('I need a quote for ' + g.host.name); return; }\n        if (d && d.code === 'one_pro_per_booking'){ fail(g.host.name + ' is done by a different pro, so it books separately. Book the rest first, then add it.'); return; }\n        fail(d && d.message);\n      }).catch(function(){ fail(); });\n    }\n    next();\n  }\n  function toggle(k){\n    var o = I[k]; if (!o) return;\n    if (on(k)) st.sel.splice(st.sel.indexOf(k), 1);\n    else { if (o.t === 'visit') st.sel = st.sel.filter(function(x){ return I[x].t !== 'visit'; }); st.sel.push(k); cf(o); }\n    renderLeft(); reprice();\n  }\n  function onClick(e){\n    var t = e.target.closest ? e.target.closest('button') : null; if (!t || !$('hfc').contains(t)) return;\n    if (t.getAttribute('data-hq')){ ask(t.getAttribute('data-hq')); return; }\n    if (t.getAttribute('data-svc')){ toggle(t.getAttribute('data-svc')); return; }\n    var rm = t.getAttribute('data-rm');\n    if (rm){ if (rm.indexOf('ex:') === 0) st.ex[rm.slice(3)] = 0; else if (on(rm)) st.sel.splice(st.sel.indexOf(rm), 1); renderLeft(); reprice(); return; }\n    if (t.getAttribute('data-ex')){ var xk = t.getAttribute('data-ex'); st.ex[xk] = st.ex[xk] ? 0 : 1; renderLeft(); reprice(); return; }\n    if (t.id === 'hfcMore'){ st.all = !st.all; renderLeft(); if (!st.all) $('hfcS1').scrollIntoView({ behavior: 'smooth', block: 'start' }); return; }\n    if (t.id === 'hfcBook' || t.id === 'hfcBarB'){ book(); return; }\n    var o = I[t.getAttribute('data-k')]; if (!o) return; var c = cf(o);\n    if (t.getAttribute('data-tog') === 'inc'){ st.inc[o.key] = !st.inc[o.key]; renderLeft(); return; }\n    if (t.getAttribute('data-tog') === 'desc'){ st.desc[o.key] = !st.desc[o.key]; renderBox(); return; }\n    var fs = t.getAttribute('data-fs');\n    if (fs){ var val = t.getAttribute('data-v');\n      if (o.t === 'visit'){ if (fs === 'prop') c.prop = val === 'Apartment \/ Condo' ? 1 : 0; else if (fs === 'cleaners') c.cleaners = val === '2 Cleaners' ? 2 : 1; else c[fs] = val; }\n      else c[fs] = val;\n      renderLeft(); reprice(); return; }\n    if (t.getAttribute('data-var')){ c.variant = t.getAttribute('data-var'); renderLeft(); reprice(); return; }\n    if (t.getAttribute('data-q')){ c.ans[t.getAttribute('data-q')] = t.getAttribute('data-v'); renderLeft(); reprice(); return; }\n    var fn = t.getAttribute('data-fn'), d = parseInt(t.getAttribute('data-d'), 10); if (!fn) return;\n    if (o.t === 'visit'){\n      if (fn === 'beds' || fn === 'full') c[fn] = Math.max(1, Math.min(9, c[fn] + d)); else if (fn === 'half') c.half = Math.max(0, Math.min(9, c.half + d));\n      else if (fn === 'sq') c.sq = Math.max(0, c.sq + d); else if (fn === 'hours') c.hours = Math.max(1, Math.min(c.often === 'Recurring' ? 4 : 8, c.hours + d));\n    } else if (fn.indexOf('it:') === 0){ var ii = parseInt(fn.slice(3), 10); c.items[ii] = Math.max(0, Math.min(20, (c.items[ii] || 0) + d)); }\n    else if (fn.indexOf('row:') === 0){ var rk = fn.slice(4); c.rows[rk] = Math.max(0, Math.min(o.max_qty || 20, (c.rows[rk] || 0) + d));\n      if ($('hfcNb').contains(t) && rowsSum(o) <= 0 && on(o.key)) st.sel.splice(st.sel.indexOf(o.key), 1); } \/\/ the last row taken to 0 in the box takes the service off\n    else if (fn === 'qty'){ var sp = o.pstep || o.step || 1; c.qty = Math.max(o.min_qty, Math.min(o.max_qty, d > 0 ? Math.floor(c.qty \/ sp) * sp + sp : Math.ceil(c.qty \/ sp) * sp - sp)); }\n    else { var f = (o.fields || []).filter(function(x){ return x.n === fn; })[0]; if (!f) return;\n      if (f.t === 'num') c[fn] = Math.max(f.min, Math.min(f.max, c[fn] + d * f.step)); else if (f.t === 'list') c[fn] = Math.max(0, Math.min(f.vals.length - 1, c[fn] + d)); }\n    renderLeft(); reprice();\n  }\n  \/\/ HF-2026-10-10o (Chris): the booking box stays in view while the left side scrolls, never above the white section's\n  \/\/ top and never below the end of the selections (a WP wrapper's overflow breaks CSS sticky, so it is pinned by hand).\n  function pin(){\n    var col = $('hfcBox'), nb = $('hfcNb'); if (!col || !nb) return;\n    if (window.innerWidth <= 900){ nb.style.position = ''; nb.style.top = ''; nb.style.left = ''; nb.style.width = ''; return; }\n    var hh = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--hf-header-h'), 10) || 88, T = hh + 16;\n    var r = col.getBoundingClientRect(), h = nb.offsetHeight;\n    if (h + T + 16 > window.innerHeight) T = window.innerHeight - 16 - h;\n    if (r.top >= T || r.height <= h + 2){ nb.style.position = 'relative'; nb.style.top = '0px'; nb.style.left = ''; nb.style.width = ''; }\n    else if (r.bottom - h <= T){ nb.style.position = 'absolute'; nb.style.top = (r.height - h) + 'px'; nb.style.left = '0px'; nb.style.width = r.width + 'px'; }\n    else { nb.style.position = 'fixed'; nb.style.top = T + 'px'; nb.style.left = r.left + 'px'; nb.style.width = r.width + 'px'; }\n  }\n  var pinQ = false; function pinSoon(){ if (pinQ) return; pinQ = true; requestAnimationFrame(function(){ pinQ = false; pin(); }); }\n  \/\/ the pills stay one row: the last ones are hidden until the row fits the search bar's width\n  function fitPills(){ var p = document.querySelector('#hfc .hfc-pop'); if (!p) return; var bs = [].slice.call(p.children), w = p.clientWidth, gap = 8;\n    bs.forEach(function(b){ b.style.display = ''; });\n    for (var n = bs.length; n > 1; n--){ var t = 0; for (var i = 0; i < n; i++) t += bs[i].offsetWidth + (i ? gap : 0); if (t <= w) break; bs[n - 1].style.display = 'none'; } }\n  function boot(){\n    if (!$('hfc')) return;\n    fitPills(); window.addEventListener('resize', fitPills); if (document.fonts && document.fonts.ready) document.fonts.ready.then(fitPills);\n    window.addEventListener('scroll', pinSoon, { passive: true }); window.addEventListener('resize', pinSoon);\n    if (window.MutationObserver) new MutationObserver(pinSoon).observe($('hfcLay'), { childList: true, subtree: true });\n    document.addEventListener('click', onClick);\n    $('hfcSearch').addEventListener('submit', function(e){ e.preventDefault(); ask(($('hfcQ').value || '').replace(\/^\\s+|\\s+$\/g, '') || 'I need help with my home'); });\n    \/\/ HF-2026-10-10z (Chris): no service is pre-selected on any page; the customer picks\n    renderLeft(); reprice();\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot();\n})();\n<\/script>\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-ec067bf e-con-full e-flex e-con e-parent\" data-id=\"ec067bf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1988f66 elementor-widget elementor-widget-html\" data-id=\"1988f66\" 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 id=\"hf-city-local-css\">.hf-city-local{background:#fff;padding:64px 24px 24px}.hf-city-local .in{max-width:880px;margin:0 auto}.hf-city-local h2{font-family:Inter,-apple-system,sans-serif;font-size:34px;line-height:1.2;font-weight:800;color:#0b172a;margin:0 0 16px;letter-spacing:-.4px}.hf-city-local p{font-family:Inter,-apple-system,sans-serif;font-size:18px;line-height:1.65;color:#475569;margin:0 0 14px}@media(max-width:767px){.hf-city-local{padding:44px 18px 12px}.hf-city-local h2{font-size:26px}.hf-city-local p{font-size:16px}}<\/style><section class=\"hf-city-local\" data-city=\"new-orleans\"><div class=\"in\"><h2>Flooring Installation in New Orleans<\/h2><p>Heart pine floors in historic homes come back to life with a sand and refinish, while raised homes and damp crawl spaces push many owners toward tile and vinyl plank that stand up to moisture. Flooring covers installs, refinishing, removal and subfloor repair.<\/p><p>Price the job by the square foot, add removal of the old floor, baseboards or furniture moving, and book a start date. Installs run the same from a Bywater cottage to a Lakeview renovation.<\/p><\/div><\/section><script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"Service\", \"name\": \"Flooring Installation in New Orleans\", \"serviceType\": \"Flooring\", \"url\": \"https:\/\/housefly.com\/services\/new-orleans\/flooring\/\", \"provider\": {\"@type\": \"Organization\", \"name\": \"House Fly\", \"url\": \"https:\/\/housefly.com\/\"}, \"areaServed\": {\"@type\": \"City\", \"name\": \"New Orleans\", \"containedInPlace\": {\"@type\": \"State\", \"name\": \"Louisiana\"}}, \"description\": \"Heart pine floors in historic homes come back to life with a sand and refinish, while raised homes and damp crawl spaces push many owners toward tile and vinyl plank that stand up to moisture. Flooring covers installs, refinishing, removal and subfloor repair.\"}<\/script>\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-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\">Real prices. Real people. Real fast. 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 available nationwide, anywhere in the United States. 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, and we are available nationwide, anywhere in the United States. 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>NEW ORLEANS FLOORING SERVICES New Orleans Flooring Prosat Your Service Serving the Greater New Orleans area with verified local flooring pros, upfront pricing, and instant booking 5.0 on Google A+ Better Business Bureau Free cancellation What We Offer Flooring Services in New Orleans Professional flooring installation and repair across the Greater New Orleans area. From [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":2733,"parent":2051,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-2177","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.7 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Flooring Installation in New Orleans | Upfront Prices | House Fly<\/title>\n<meta name=\"description\" content=\"Book flooring in New Orleans, LA with House Fly. Heart pine refinishing, tile and vinyl plank for a humid climate. See your upfront price and book online in minutes.\" \/>\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\/new-orleans\/flooring\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flooring\" \/>\n<meta property=\"og:description\" content=\"Book flooring in New Orleans, LA with House Fly. Heart pine refinishing, tile and vinyl plank for a humid climate. See your upfront price and book online in minutes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/housefly.com\/es\/services\/new-orleans\/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:43+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=\"3 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Instalaci\u00f3n de pisos en Nueva Orleans | Precios por adelantado | House Fly","description":"Book flooring in New Orleans, LA with House Fly. Heart pine refinishing, tile and vinyl plank for a humid climate. See your upfront price and book online in minutes.","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\/new-orleans\/flooring\/","og_locale":"es_MX","og_type":"article","og_title":"Flooring","og_description":"Book flooring in New Orleans, LA with House Fly. Heart pine refinishing, tile and vinyl plank for a humid climate. See your upfront price and book online in minutes.","og_url":"https:\/\/housefly.com\/es\/services\/new-orleans\/flooring\/","og_site_name":"House Fly","article_publisher":"https:\/\/www.facebook.com\/houseflyapp","article_modified_time":"2026-07-08T03:19:43+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":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/housefly.com\/services\/new-orleans\/flooring\/","url":"https:\/\/housefly.com\/services\/new-orleans\/flooring\/","name":"Instalaci\u00f3n de pisos en Nueva Orleans | Precios por adelantado | House Fly","isPartOf":{"@id":"https:\/\/housefly.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/housefly.com\/services\/new-orleans\/flooring\/#primaryimage"},"image":{"@id":"https:\/\/housefly.com\/services\/new-orleans\/flooring\/#primaryimage"},"thumbnailUrl":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/wood-flooring-installation-services-in-new-orleans.png","datePublished":"2024-11-26T05:44:08+00:00","dateModified":"2026-07-08T03:19:43+00:00","description":"Book flooring in New Orleans, LA with House Fly. Heart pine refinishing, tile and vinyl plank for a humid climate. See your upfront price and book online in minutes.","breadcrumb":{"@id":"https:\/\/housefly.com\/services\/new-orleans\/flooring\/#breadcrumb"},"inLanguage":"es-MX","potentialAction":[{"@type":"ReadAction","target":["https:\/\/housefly.com\/services\/new-orleans\/flooring\/"]}]},{"@type":"ImageObject","inLanguage":"es-MX","@id":"https:\/\/housefly.com\/services\/new-orleans\/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\/new-orleans\/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":"New Orleans Home Services","item":"https:\/\/housefly.com\/services\/new-orleans\/"},{"@type":"ListItem","position":4,"name":"Flooring"}]},{"@type":"WebSite","@id":"https:\/\/housefly.com\/#website","url":"https:\/\/housefly.com\/","name":"House Fly","description":"App M\u00f3vil de Servicios para el Hogar Bajo Demanda","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\/2177","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/comments?post=2177"}],"version-history":[{"count":0,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/2177\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/2051"}],"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=2177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}