{"id":3436,"date":"2026-03-06T01:34:49","date_gmt":"2026-03-06T01:34:49","guid":{"rendered":"https:\/\/housefly1stg.wpenginepowered.com\/?page_id=3436"},"modified":"2026-08-17T07:41:34","modified_gmt":"2026-08-17T07:41:34","slug":"electric","status":"publish","type":"page","link":"https:\/\/housefly.com\/es\/services\/electric\/","title":{"rendered":"Electricidad"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3436\" class=\"elementor elementor-3436\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-37e50c8 e-con-full e-flex e-con e-parent\" data-id=\"37e50c8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-de079ad elementor-widget elementor-widget-html\" data-id=\"de079ad\" 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-electric-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-electric-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-37e50c8,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-37e50c8::before,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-37e50c8::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-37e50c8::before,\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-37e50c8::after{display:none !important;background:transparent !important;content:none !important}\nbody [class*=\"elementor-\"] .elementor-element.elementor-element-de079ad .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-electric-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-electric-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\">Electrical Services<\/div><h1 class=\"hfc-h1\">Book Trusted <span>Electricians<\/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=\"Light fixture install\">Light Fixture<\/button><button type=\"button\" data-hq=\"Ceiling fan install\">Ceiling Fan<\/button><button type=\"button\" data-hq=\"Outlet replacement\">Outlets<\/button><button type=\"button\" data-hq=\"EV charger install\">EV Charger<\/button><button type=\"button\" data-hq=\"Smoke detector install\">Smoke Detector<\/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\n<!-- HF deep-link preselect 2026-08-17 (live) -->\n<script>\n(function(){\n  var q = new URLSearchParams(window.location.search);\n  var svc = q.get('hf_svc'), task = q.get('hf_task');\n  if(!svc && !task) return;\n  var tries = 0;\n  function norm(s){return (s||'').replace(\/\\s+\/g,' ').trim().toLowerCase()}\n  function findPill(label){\n    var pills = [].slice.call(document.querySelectorAll('button.hfsk-pill'));\n    var n = norm(label);\n    return pills.find(function(p){return norm(p.textContent)===n}) ||\n           pills.find(function(p){return norm(p.textContent).indexOf(n)===0}) ||\n           pills.find(function(p){return n.indexOf(norm(p.textContent))===0});\n  }\n  function go(){\n    tries++;\n    var pills = document.querySelectorAll('button.hfsk-pill');\n    if(!pills.length){ if(tries<40) return setTimeout(go,250); return; }\n    var s = svc && findPill(svc);\n    if(s && s.className.indexOf('on')<0){ s.click(); }\n    setTimeout(function(){\n      var t = task && findPill(task);\n      if(t && t.className.indexOf('on')<0){ t.click(); }\n    }, s ? 400 : 0);\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',function(){setTimeout(go,300)});\n  else setTimeout(go,300);\n})();\n<\/script><script id=\"hfc-js\" data-no-defer=\"1\" data-no-optimize=\"1\" data-no-minify=\"1\">\n(function(){\n  var D = {\"slug\": \"electric\", \"st\": \"Electric\", \"items\": [{\"qdef\": null, \"pstep\": null, \"key\": \"el_ev_charger\", \"t\": \"menu\", \"name\": \"EV Charger Installation\", \"icon\": \"\ud83d\udd0b\", \"desc\": \"A Level 2 charging outlet or hardwired charger on its own 40\", \"full\": \"A Level 2 charging outlet or hardwired charger on its own 40 to 60 amp circuit, breaker included, charger supplied by you.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 549.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-EVCHARGER\", \"variants\": [{\"key\": \"outlet\", \"label\": \"NEMA 14-50 outlet for a plug-in charger\", \"price\": 549.99}, {\"key\": \"hardwired\", \"label\": \"Hardwired Level 2 charger\", \"price\": 749.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ev_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from the panel\", \"25 to 50 ft from the panel\", \"Over 50 ft from the panel\"], \"add\": {\"25 to 50 ft from the panel\": 150, \"Over 50 ft from the panel\": 350}}, {\"key\": \"ev_panel\", \"label\": \"Panel\", \"options\": [\"Panel has space\", \"Needs a tandem breaker or subpanel\"], \"add\": {\"Needs a tandem breaker or subpanel\": 250}}, {\"key\": \"ev_where\", \"label\": \"Where?\", \"options\": [\"Garage\", \"Outside, weatherproof\"], \"add\": {\"Outside, weatherproof\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_fan_new\", \"t\": \"menu\", \"name\": \"Ceiling Fan, New Location\", \"icon\": \"\ud83c\udf00\", \"desc\": \"A fan rated box and new wiring where there was no fixture\", \"full\": \"A fan rated box and new wiring where there was no fixture, fan hung and balanced, fan supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 349.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-FANNEW\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"fn_ceiling\", \"label\": \"Ceiling\", \"options\": [\"Standard, up to 10 ft\", \"10 to 14 ft\", \"Vaulted or over 14 ft\"], \"add\": {\"10 to 14 ft\": 75, \"Vaulted or over 14 ft\": 150}}, {\"key\": \"fn_switch\", \"label\": \"Switch\", \"options\": [\"Use an existing switch\", \"Add a new switch\"], \"add\": {\"Add a new switch\": 100}}, {\"key\": \"fn_access\", \"label\": \"Access above\", \"options\": [\"Attic above\", \"No attic access\"], \"add\": {\"No attic access\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_fixture_new\", \"t\": \"menu\", \"name\": \"Light Fixture, New Location\", \"icon\": \"\ud83d\udca1\", \"desc\": \"A new box and wiring for a ceiling or wall light where there was\", \"full\": \"A new box and wiring for a ceiling or wall light where there was none, fixture supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 249.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-FIXNEW\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"fx_ceiling\", \"label\": \"Ceiling\", \"options\": [\"Standard, up to 10 ft\", \"Over 10 ft\"], \"add\": {\"Over 10 ft\": 75}}, {\"key\": \"fx_switch\", \"label\": \"Switch\", \"options\": [\"Use an existing switch\", \"Add a new switch\"], \"add\": {\"Add a new switch\": 100}}, {\"key\": \"fx_access\", \"label\": \"Access above\", \"options\": [\"Attic above\", \"No attic access\"], \"add\": {\"No attic access\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_chandelier\", \"t\": \"menu\", \"name\": \"Chandelier and Heavy Fixture Install\", \"icon\": \"\ud83c\udf1f\", \"desc\": \"A chandelier or a fixture over 50 lb hung on a braced box\", \"full\": \"A chandelier or a fixture over 50 lb hung on a braced box, assembled and leveled, fixture supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 299.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-CHANDELIER\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ch_height\", \"label\": \"Ceiling height\", \"options\": [\"Under 12 ft\", \"12 to 20 ft\", \"Over 20 ft\"], \"add\": {\"12 to 20 ft\": 150, \"Over 20 ft\": 300}}, {\"key\": \"ch_weight\", \"label\": \"Weight\", \"options\": [\"Under 50 lb\", \"Over 50 lb, needs a brace\"], \"add\": {\"Over 50 lb, needs a brace\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_recessed\", \"t\": \"menu\", \"name\": \"Recessed Lighting Installation\", \"icon\": \"\ud83d\udd26\", \"desc\": \"LED recessed lights cut in and wired to one switch\", \"full\": \"LED recessed lights cut in and wired to one switch, lights supplied by you or the pro at cost.\", \"section\": \"Lighting & Fans\", \"unit\": \"unit\", \"unit_label\": \"light\", \"price\": 149.99, \"min_qty\": 4, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-RECESSED\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"rc_access\", \"label\": \"Access above\", \"options\": [\"Attic above\", \"No attic access, remodel cans\"], \"add\": {\"No attic access, remodel cans\": 150}}, {\"key\": \"rc_dimmer\", \"label\": \"Dimmer\", \"options\": [\"No dimmer\", \"Add a dimmer\"], \"add\": {\"Add a dimmer\": 59.99}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_under_cabinet\", \"t\": \"menu\", \"name\": \"Under Cabinet Lighting\", \"icon\": \"\ud83c\udf2c\", \"desc\": \"LED strip or puck lights mounted under the kitchen cabinets\", \"full\": \"LED strip or puck lights mounted under the kitchen cabinets, hidden wiring, one switch or plug.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 299.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-UNDERCAB\", \"variants\": [{\"key\": \"small\", \"label\": \"Up to 10 ft of cabinets\", \"price\": 299.99}, {\"key\": \"medium\", \"label\": \"10 to 20 ft of cabinets\", \"price\": 449.99}, {\"key\": \"large\", \"label\": \"Over 20 ft of cabinets\", \"price\": 599.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"uc_power\", \"label\": \"Power\", \"options\": [\"Plug in\", \"Hardwired to a switch\"], \"add\": {\"Hardwired to a switch\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_outdoor_lighting\", \"t\": \"menu\", \"name\": \"Outdoor and Landscape Lighting\", \"icon\": \"\ud83c\udfe1\", \"desc\": \"Porch, flood, security or low voltage path lights wired\", \"full\": \"Porch, flood, security or low voltage path lights wired and aimed, fixtures supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 349.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-OUTDOORLIGHT\", \"variants\": [{\"key\": \"porch\", \"label\": \"Porch, flood or security lights, up to 4\", \"price\": 349.99}, {\"key\": \"path\", \"label\": \"Landscape path lights, up to 10\", \"price\": 749.99}, {\"key\": \"both\", \"label\": \"Both\", \"price\": 999.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ol_power\", \"label\": \"Power\", \"options\": [\"Existing outdoor power\", \"Needs a new circuit or transformer\"], \"add\": {\"Needs a new circuit or transformer\": 200}}, {\"key\": \"ol_motion\", \"label\": \"Motion sensors\", \"options\": [\"No\", \"Yes\"], \"add\": {\"Yes\": 50}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_smart_home\", \"t\": \"menu\", \"name\": \"Smart Home Device Installation\", \"icon\": \"\ud83c\udfe0\", \"desc\": \"Smart switches, dimmers, plugs\", \"full\": \"Smart switches, dimmers, plugs, a video doorbell or a smart thermostat installed and paired to your app.\", \"section\": \"Smart Home & Security\", \"unit\": \"unit\", \"unit_label\": \"device\", \"price\": 89.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-SMARTHOME\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sh_type\", \"label\": \"Devices\", \"options\": [\"Switches, dimmers or plugs\", \"Video doorbell or camera\", \"Smart thermostat\"], \"add\": {\"Video doorbell or camera\": 20, \"Smart thermostat\": 30}}, {\"key\": \"sh_neutral\", \"label\": \"Neutral wire in the boxes?\", \"options\": [\"Yes\", \"Not sure\"], \"add\": {\"Not sure\": 20}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_camera\", \"t\": \"menu\", \"name\": \"Security Camera Installation\", \"icon\": \"\ud83d\udcf7\", \"desc\": \"Cameras mounted, wired or paired, aimed and added to your app\", \"full\": \"Cameras mounted, wired or paired, aimed and added to your app, cameras supplied by you.\", \"section\": \"Smart Home & Security\", \"unit\": \"unit\", \"unit_label\": \"camera\", \"price\": 99.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-CAMERA\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"cm_power\", \"label\": \"Power\", \"options\": [\"Plug in or battery\", \"Hardwired or PoE cable run\"], \"add\": {\"Hardwired or PoE cable run\": 60}}, {\"key\": \"cm_height\", \"label\": \"Mounting height\", \"options\": [\"Under 12 ft\", \"Over 12 ft\"], \"add\": {\"Over 12 ft\": 30}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_240v\", \"t\": \"menu\", \"name\": \"240V Outlet Installation\", \"icon\": \"\u26a1\", \"desc\": \"A dedicated 240 volt circuit and outlet for a dryer, range, RV\", \"full\": \"A dedicated 240 volt circuit and outlet for a dryer, range, RV, welder or hot tub, breaker included.\", \"section\": \"Switches & Outlets\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 399.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-240V\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"hv_type\", \"label\": \"For\", \"options\": [\"Dryer or range\", \"RV or welder, 50 amp\", \"Hot tub with GFCI disconnect\"], \"add\": {\"RV or welder, 50 amp\": 100, \"Hot tub with GFCI disconnect\": 250}}, {\"key\": \"hv_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from the panel\", \"25 to 50 ft from the panel\", \"Over 50 ft from the panel\"], \"add\": {\"25 to 50 ft from the panel\": 150, \"Over 50 ft from the panel\": 350}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_dedicated_circuit\", \"t\": \"menu\", \"name\": \"Dedicated Circuit\", \"icon\": \"\ud83d\udd17\", \"desc\": \"A new 20 amp circuit from the panel for a microwave, garage\", \"full\": \"A new 20 amp circuit from the panel for a microwave, garage, office, sauna or workshop, breaker included.\", \"section\": \"Switches & Outlets\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 349.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-CIRCUIT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"dc_for\", \"label\": \"For\", \"options\": [\"Appliance, microwave or garage\", \"Workshop, sauna or hot tub\"], \"add\": {\"Workshop, sauna or hot tub\": 150}}, {\"key\": \"dc_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from the panel\", \"25 to 50 ft from the panel\", \"Over 50 ft from the panel\"], \"add\": {\"25 to 50 ft from the panel\": 150, \"Over 50 ft from the panel\": 350}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_outdoor_outlet\", \"t\": \"menu\", \"name\": \"Outdoor Outlet Installation\", \"icon\": \"\ud83c\udf33\", \"desc\": \"A weatherproof GFCI outlet on an exterior wall\", \"full\": \"A weatherproof GFCI outlet on an exterior wall, fed from an inside circuit or a new one.\", \"section\": \"Switches & Outlets\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 199.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-OUTDOOROUT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"oo_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from power\", \"Over 25 ft or a new circuit\"], \"add\": {\"Over 25 ft or a new circuit\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_tv_outlet\", \"t\": \"menu\", \"name\": \"Recessed TV Outlet and In-wall Cable Concealment\", \"icon\": \"\ud83d\udcfa\", \"desc\": \"A recessed power and cable box behind the TV\", \"full\": \"A recessed power and cable box behind the TV so the cords disappear into the wall.\", \"section\": \"Switches & Outlets\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 199.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-TVOUTLET\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"tv_wall\", \"label\": \"Wall\", \"options\": [\"Drywall\", \"Brick, plaster or above a fireplace\"], \"add\": {\"Brick, plaster or above a fireplace\": 150}}, {\"key\": \"tv_power\", \"label\": \"Power\", \"options\": [\"New outlet behind the TV\", \"Relocate an existing outlet\"], \"add\": {\"Relocate an existing outlet\": 50}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_surge\", \"t\": \"menu\", \"name\": \"Whole Home Surge Protector\", \"icon\": \"\ud83c\udf29\", \"desc\": \"A type 2 surge protector wired at the panel to protect\", \"full\": \"A type 2 surge protector wired at the panel to protect every appliance and electronic in the home.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 349.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-SURGE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sp_panel\", \"label\": \"Panels\", \"options\": [\"Main panel only\", \"Main panel and a subpanel\"], \"add\": {\"Main panel and a subpanel\": 150}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_exhaust_fan_new\", \"t\": \"menu\", \"name\": \"Bathroom Exhaust Fan, New Install\", \"icon\": \"\ud83c\udf2b\", \"desc\": \"A new exhaust fan cut in, ducted outside and wired to a switch\", \"full\": \"A new exhaust fan cut in, ducted outside and wired to a switch, fan supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 449.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-EXHAUSTNEW\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ef_duct\", \"label\": \"Duct\", \"options\": [\"Attic above, easy duct\", \"No attic, duct through a wall or roof\"], \"add\": {\"No attic, duct through a wall or roof\": 200}}, {\"key\": \"ef_switch\", \"label\": \"Switch\", \"options\": [\"Use an existing switch\", \"Add a switch or timer\"], \"add\": {\"Add a switch or timer\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_attic_fan\", \"t\": \"menu\", \"name\": \"Attic or Whole House Fan Installation\", \"icon\": \"\ud83c\udf21\", \"desc\": \"A powered attic fan or a whole house fan mounted\", \"full\": \"A powered attic fan or a whole house fan mounted, wired and on a thermostat or switch, fan supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 449.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-ATTICFAN\", \"variants\": [{\"key\": \"attic\", \"label\": \"Attic fan\", \"price\": 449.99}, {\"key\": \"whole\", \"label\": \"Whole house fan\", \"price\": 899.99}], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"af_power\", \"label\": \"Power\", \"options\": [\"Existing attic power\", \"Needs a new circuit\"], \"add\": {\"Needs a new circuit\": 200}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_generator\", \"t\": \"menu\", \"name\": \"Generator Transfer Switch and Inlet\", \"icon\": \"\ud83d\udd0c\", \"desc\": \"A manual transfer switch and outdoor inlet\", \"full\": \"A manual transfer switch and outdoor inlet so a portable generator powers the essentials in an outage.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 899.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-GENERATOR\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ge_size\", \"label\": \"Circuits\", \"options\": [\"Up to 6 circuits\", \"Up to 10 circuits\"], \"add\": {\"Up to 10 circuits\": 200}}, {\"key\": \"ge_dist\", \"label\": \"Inlet\", \"options\": [\"Within 10 ft of the panel\", \"Farther from the panel\"], \"add\": {\"Farther from the panel\": 200}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_hot_tub\", \"t\": \"menu\", \"name\": \"Hot Tub, Sauna or Pool Equipment Hookup\", \"icon\": \"\ud83d\udec1\", \"desc\": \"A dedicated circuit with a GFCI disconnect run to a hot tub\", \"full\": \"A dedicated circuit with a GFCI disconnect run to a hot tub, sauna or pool pump, breaker included.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 699.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-HOTTUB\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ht_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from the panel\", \"25 to 50 ft from the panel\", \"Over 50 ft from the panel\"], \"add\": {\"25 to 50 ft from the panel\": 150, \"Over 50 ft from the panel\": 350}}, {\"key\": \"ht_disconnect\", \"label\": \"Disconnect\", \"options\": [\"Already has a GFCI disconnect\", \"Add one\"], \"add\": {\"Add one\": 150}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_safety_inspection\", \"t\": \"menu\", \"name\": \"Electrical Safety Inspection\", \"icon\": \"\ud83d\udd0d\", \"desc\": \"Panel, outlets, GFCIs, smoke detectors and visible wiring checked\", \"full\": \"Panel, outlets, GFCIs, smoke detectors and visible wiring checked with a written summary of what needs attention.\", \"section\": \"Safety & Repair\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 149.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-INSPECT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"si_size\", \"label\": \"Home\", \"options\": [\"Under 2,500 sq ft\", \"Over 2,500 sq ft\"], \"add\": {\"Over 2,500 sq ft\": 50}}, {\"key\": \"si_report\", \"label\": \"Report\", \"options\": [\"Summary\", \"Written report with photos\"], \"add\": {\"Written report with photos\": 50}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_troubleshoot\", \"t\": \"menu\", \"name\": \"Electrical Troubleshooting and Repair\", \"icon\": \"\ud83d\udd27\", \"desc\": \"An electrician finds the fault and fixes it on the spot\", \"full\": \"An electrician finds the fault and fixes it on the spot when parts allow: dead outlets, tripping breakers, flickering lights.\", \"section\": \"Safety & Repair\", \"unit\": \"hour\", \"unit_label\": \"hour\", \"price\": 129.99, \"min_qty\": 1, \"max_qty\": 6, \"step\": 1, \"code\": \"EL-REPAIR\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"tr_issue\", \"label\": \"The problem\", \"options\": [\"Outlet, switch or light not working\", \"Breaker tripping or partial power out\", \"Flickering, buzzing or a burning smell\"], \"add\": {}}, {\"key\": \"tr_when\", \"label\": \"When\", \"options\": [\"Regular hours\", \"Same day or after hours\"], \"add\": {\"Same day or after hours\": 79}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_panel_upgrade\", \"t\": \"menu\", \"name\": \"Electrical Panel Upgrade\", \"icon\": \"\ud83d\udce6\", \"desc\": \"The panel replaced or upgraded to 200 amp with new breakers\", \"full\": \"The panel replaced or upgraded to 200 amp with new breakers, permit and inspection.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 2499.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-PANEL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"pu_amps\", \"label\": \"Service size\", \"options\": [\"200 amp\", \"400 amp\"], \"add\": {\"400 amp\": 2500}}, {\"key\": \"pu_entrance\", \"label\": \"Service entrance\", \"options\": [\"Overhead\", \"Underground\"], \"add\": {\"Underground\": 500}}, {\"key\": \"pu_meter\", \"label\": \"Meter\", \"options\": [\"Same location\", \"Relocate the panel or meter\"], \"add\": {\"Relocate the panel or meter\": 800}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_subpanel\", \"t\": \"menu\", \"name\": \"Subpanel Installation\", \"icon\": \"\ud83d\uddc4\", \"desc\": \"A 60 to 100 amp subpanel added for a garage, shop\", \"full\": \"A 60 to 100 amp subpanel added for a garage, shop, addition or EV charger.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 1499.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-SUBPANEL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sb_amps\", \"label\": \"Size\", \"options\": [\"60 amp\", \"100 amp\"], \"add\": {\"100 amp\": 400}}, {\"key\": \"sb_dist\", \"label\": \"Distance\", \"options\": [\"Under 25 ft from the main panel\", \"Over 25 ft or a detached building\"], \"add\": {\"Over 25 ft or a detached building\": 600}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_rewire\", \"t\": \"menu\", \"name\": \"Whole Home Rewiring\", \"icon\": \"\ud83c\udfd7\", \"desc\": \"Old, aluminum or knob and tube wiring replaced room by room\", \"full\": \"Old, aluminum or knob and tube wiring replaced room by room with new cable, boxes and devices.\", \"section\": \"Panels & Power\", \"unit\": \"sqft\", \"unit_label\": \"sq ft\", \"price\": 4.99, \"min_qty\": 500, \"max_qty\": 6000, \"step\": 100, \"code\": \"EL-REWIRE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"rw_walls\", \"label\": \"Walls\", \"options\": [\"Open walls, mid remodel\", \"Finished walls\"], \"add\": {\"Finished walls\": 1500}}, {\"key\": \"rw_type\", \"label\": \"Existing wiring\", \"options\": [\"Copper, after 1970\", \"Aluminum, knob and tube or cloth\"], \"add\": {\"Aluminum, knob and tube or cloth\": 1000}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_standby_generator\", \"t\": \"menu\", \"name\": \"Standby Generator Installation\", \"icon\": \"\ud83c\udfed\", \"desc\": \"A whole home standby generator set\", \"full\": \"A whole home standby generator set, wired through an automatic transfer switch and connected to gas.\", \"section\": \"Panels & Power\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 8999.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-STANDBY\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"sg_size\", \"label\": \"Size\", \"options\": [\"Up to 14 kW\", \"18 to 24 kW\"], \"add\": {\"18 to 24 kW\": 2000}}, {\"key\": \"sg_fuel\", \"label\": \"Fuel\", \"options\": [\"Natural gas\", \"Propane\"], \"add\": {\"Propane\": 500}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_lights_fans\", \"t\": \"menu\", \"name\": \"Light Fixtures & Fans\", \"icon\": \"\ud83d\udca1\", \"desc\": \"A light fixture, ceiling fan or bath heater and vent replaced\", \"full\": \"A light fixture, ceiling fan or bath heater and vent replaced on the existing wiring and box, fixture supplied by you.\", \"section\": \"Lighting & Fans\", \"unit\": \"unit\", \"unit_label\": \"item\", \"price\": 179.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-LIGHTSFANS\", \"variants\": [{\"key\": \"light\", \"label\": \"Light Fixture Ceiling or Wall\", \"price\": 179.99}, {\"key\": \"fan\", \"label\": \"Ceiling Fan with Lights\", \"price\": 179.99}, {\"key\": \"heater\", \"label\": \"Bathroom Heater \/ Vent\", \"price\": 419.99}], \"rows\": true, \"variant_q\": \"Fixture\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_outlets_switches\", \"t\": \"menu\", \"name\": \"Outlets & Switches\", \"icon\": \"\ud83d\udd0c\", \"desc\": \"Outlets and switches of any type replaced on the existing wiring\", \"full\": \"Outlets and switches of any type replaced on the existing wiring, the electrical service minimum applies.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"item\", \"price\": 39.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-OUTLETSW\", \"variants\": [{\"key\": \"outlet\", \"label\": \"Outlet Any Type\", \"price\": 39.99}, {\"key\": \"switch\", \"label\": \"Switch Any Type\", \"price\": 39.99}], \"rows\": true, \"variant_q\": \"Device\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_kitchen_appl\", \"t\": \"menu\", \"name\": \"Kitchen Appliances\", \"icon\": \"\ud83c\udf73\", \"desc\": \"Kitchen appliances hooked up and wired to an existing circuit\", \"full\": \"Kitchen appliances hooked up and wired to an existing circuit, appliance supplied by you.\", \"section\": \"Panels & Power\", \"unit\": \"unit\", \"unit_label\": \"appliance\", \"price\": 99.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-KITCHENAPPL\", \"variants\": [{\"key\": \"fridge\", \"label\": \"Refrigerator\", \"price\": 99.99}, {\"key\": \"micro\", \"label\": \"Microwave\", \"price\": 99.99}, {\"key\": \"disposal\", \"label\": \"Garbage Disposal\", \"price\": 179.99}, {\"key\": \"dish\", \"label\": \"Dishwasher\", \"price\": 179.99}, {\"key\": \"stove\", \"label\": \"Electric Stove\", \"price\": 179.99}, {\"key\": \"hood\", \"label\": \"Hood \/ Vent\", \"price\": 229.99}], \"rows\": true, \"variant_q\": \"Appliance\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_low_voltage\", \"t\": \"menu\", \"name\": \"Low Voltage\", \"icon\": \"\ud83d\udd14\", \"desc\": \"Doorbells, thermostats and smoke detectors installed or replaced\", \"full\": \"Doorbells, thermostats and smoke detectors installed or replaced, device supplied by you.\", \"section\": \"Smart Home & Security\", \"unit\": \"unit\", \"unit_label\": \"device\", \"price\": 89.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-LOWVOLT\", \"variants\": [{\"key\": \"doorbell\", \"label\": \"Doorbell\", \"price\": 89.99}, {\"key\": \"thermostat\", \"label\": \"Thermostat\", \"price\": 89.99}, {\"key\": \"smoke\", \"label\": \"Smoke Detector\", \"price\": 49.99}], \"rows\": true, \"variant_q\": \"Device\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_dimmer_ao\", \"t\": \"menu\", \"name\": \"Dimmer switch upgrade\", \"icon\": \"\ud83d\udd06\", \"desc\": \"An existing switch swapped for a dimmer, LED compatible\", \"full\": \"An existing switch swapped for a dimmer, LED compatible, tested with your bulbs.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"switch\", \"price\": 59.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-DIMMER\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"dm_type\", \"label\": \"Type\", \"options\": [\"Standard dimmer\", \"Smart or WiFi dimmer\"], \"add\": {\"Smart or WiFi dimmer\": 25}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_smart_switch_ao\", \"t\": \"menu\", \"name\": \"Smart switch or smart plug setup\", \"icon\": \"\ud83d\udcf1\", \"desc\": \"A smart switch installed in place of the old one and paired\", \"full\": \"A smart switch installed in place of the old one and paired to your phone before the pro leaves.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"device\", \"price\": 79.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-SMARTSW\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"ss_neutral\", \"label\": \"Neutral wire in the box?\", \"options\": [\"Yes\", \"Not sure\"], \"add\": {\"Not sure\": 20}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_usb_outlet_ao\", \"t\": \"menu\", \"name\": \"USB outlet upgrade\", \"icon\": \"\ud83d\udd0c\", \"desc\": \"A standard outlet replaced with a USB-A and USB-C charging outlet\", \"full\": \"A standard outlet replaced with a USB-A and USB-C charging outlet.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"outlet\", \"price\": 49.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-USB\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_gfci_ao\", \"t\": \"menu\", \"name\": \"GFCI outlet upgrade\", \"icon\": \"\ud83d\udee1\", \"desc\": \"A kitchen, bath, garage or outdoor outlet replaced\", \"full\": \"A kitchen, bath, garage or outdoor outlet replaced with a code-required GFCI.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"outlet\", \"price\": 79.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-GFCI\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"gf_where\", \"label\": \"Where?\", \"options\": [\"Kitchen, bath or garage\", \"Outdoor, weatherproof\"], \"add\": {\"Outdoor, weatherproof\": 30}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_fan_remote_ao\", \"t\": \"menu\", \"name\": \"Ceiling fan remote or wall control\", \"icon\": \"\ud83c\udf9b\", \"desc\": \"A remote receiver or wall control added to a fan\", \"full\": \"A remote receiver or wall control added to a fan so the pull chains retire.\", \"section\": \"Lighting & Fans\", \"unit\": \"unit\", \"unit_label\": \"fan\", \"price\": 49.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-FANREMOTE\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_fixture_high_ao\", \"t\": \"menu\", \"name\": \"High ceiling, over 12 ft\", \"icon\": \"\ud83e\ude9c\", \"desc\": \"Ladder, scaffold or lift work for a fixture or fan on a vaulted\", \"full\": \"Ladder, scaffold or lift work for a fixture or fan on a vaulted or two story ceiling.\", \"section\": \"Lighting & Fans\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 99.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-AO-HIGH\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"hi_height\", \"label\": \"Height\", \"options\": [\"12 to 16 ft\", \"Over 16 ft\"], \"add\": {\"Over 16 ft\": 100}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_haul_ao\", \"t\": \"menu\", \"name\": \"Haul away the old fixture or appliance\", \"icon\": \"\ud83d\ude9a\", \"desc\": \"The old fan, fixture, disposal or appliance taken away\", \"full\": \"The old fan, fixture, disposal or appliance taken away and recycled.\", \"section\": \"Extras\", \"unit\": \"unit\", \"unit_label\": \"item\", \"price\": 19.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-HAUL\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_co_detector_ao\", \"t\": \"menu\", \"name\": \"Carbon monoxide or combo detector\", \"icon\": \"\ud83d\udea8\", \"desc\": \"A CO or smoke and CO combo detector added, battery or hardwired\", \"full\": \"A CO or smoke and CO combo detector added, battery or hardwired.\", \"section\": \"Safety & Repair\", \"unit\": \"unit\", \"unit_label\": \"detector\", \"price\": 59.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-CO\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": [{\"key\": \"co_type\", \"label\": \"Type\", \"options\": [\"Battery\", \"Hardwired with battery backup\"], \"add\": {\"Hardwired with battery backup\": 30}}]}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_permit_ao\", \"t\": \"menu\", \"name\": \"Permit and inspection filing\", \"icon\": \"\ud83d\udcdd\", \"desc\": \"The electrical permit pulled and the inspection scheduled where\", \"full\": \"The electrical permit pulled and the inspection scheduled where the city requires one.\", \"section\": \"Extras\", \"unit\": \"flat\", \"unit_label\": \"\", \"price\": 149.99, \"min_qty\": 1, \"max_qty\": 1, \"step\": 1, \"code\": \"EL-AO-PERMIT\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_outlet_cover_ao\", \"t\": \"menu\", \"name\": \"Outdoor in-use outlet cover\", \"icon\": \"\ud83c\udf27\", \"desc\": \"A weatherproof bubble cover fitted\", \"full\": \"A weatherproof bubble cover fitted so the outlet stays protected with a cord plugged in.\", \"section\": \"Switches & Outlets\", \"unit\": \"unit\", \"unit_label\": \"cover\", \"price\": 29.99, \"min_qty\": 1, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-COVER\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}, {\"qdef\": null, \"pstep\": null, \"key\": \"el_led_bulb_ao\", \"t\": \"menu\", \"name\": \"LED bulb replacement, hard to reach\", \"icon\": \"\ud83d\udca1\", \"desc\": \"Bulbs swapped in high fixtures\", \"full\": \"Bulbs swapped in high fixtures, recessed cans or over stairs while the pro is already on the ladder.\", \"section\": \"Lighting & Fans\", \"unit\": \"unit\", \"unit_label\": \"bulb\", \"price\": 9.99, \"min_qty\": 4, \"max_qty\": 99, \"step\": 1, \"code\": \"EL-AO-BULBS\", \"variants\": [], \"rows\": false, \"variant_q\": \"\", \"variant_default\": \"\", \"rank\": 50, \"questions\": []}], \"extras\": [], \"main\": [\"el_lights_fans\", \"el_outlets_switches\", \"el_kitchen_appl\", \"el_low_voltage\", \"el_ev_charger\", \"el_troubleshoot\"], \"sections\": [\"Lighting & Fans\", \"Smart Home & Security\", \"Switches & Outlets\", \"Safety & Repair\", \"Panels & Power\", \"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-8f399fc e-con-full e-flex e-con e-parent\" data-id=\"8f399fc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9ec2214 elementor-widget elementor-widget-html\" data-id=\"9ec2214\" 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<!-- electric-HIW-from-parent-671577f-2026-05-29 -->\n<style>\n.hf-svc-hiw{max-width:1200px;margin:0 auto;padding:42px 24px;font-family:'Inter',-apple-system,sans-serif;text-align:center}\n.hf-svc-hiw *{box-sizing:border-box}\n.hf-svc-hiw-label{font-size:26px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:#40C9F3;margin-bottom:12px}\n.hf-svc-hiw h2{font-size:clamp(28px,4vw,42px);font-weight:800;color:#2D3E50;margin:0 0 12px}\n.hf-svc-hiw-sub{font-size:17px;color:#6b7d93;max-width:560px;margin:0 auto 48px;line-height:1.6}\n.hf-svc-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:32px;position:relative}\n.hf-svc-steps::before{content:'';position:absolute;top:36px;left:12%;right:12%;height:2px;background:linear-gradient(90deg,#2ED87A,#40C9F3);z-index:0}\n.hf-svc-step{position:relative;z-index:1}\n.hf-svc-step-num{width:72px;height:72px;border-radius:50%;background:#fff;border:2px solid #eef2f6;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:13px;font-weight:700;color:#fff;position:relative}\n.hf-svc-step-num-inner{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center}\n.hf-sn-1 .hf-svc-step-num-inner{background:#2ED87A}\n.hf-sn-2 .hf-svc-step-num-inner{background:#40C9F3}\n.hf-sn-3 .hf-svc-step-num-inner{background:#3D4F6F}\n.hf-sn-4 .hf-svc-step-num-inner{background:#2ED87A}\n.hf-svc-step-num svg{width:26px;height:26px;fill:#fff}\n.hf-svc-step h3{font-size:16px;font-weight:700;color:#2D3E50;margin:0 0 8px}\n.hf-svc-step p{font-size:13px;color:#6b7d93;line-height:1.5;margin:0}\n\n\n.hf-svc-trust2 img:hover{opacity:1}\n@media(max-width:768px){\n  \/* hf-svc-hiw-mobile-stack-2026-05-28: mirror home hf-hiw2 mobile stack layout *\/\n  \/* hf-svc-hiw-mobile-top-gap-2026-05-29: breathing room above HIW section under svc-grid *\/\n  .hf-svc-hiw{padding:64px 18px 28px}\n  .hf-svc-hiw-label{font-size:25px;letter-spacing:2px;margin-bottom:12px}\n  .hf-svc-hiw h2{font-size:26px;line-height:1.2;margin-bottom:10px}\n  .hf-svc-hiw-sub{font-size:14px;max-width:340px;margin:0 auto 32px}\n  .hf-svc-steps{grid-template-columns:1fr;gap:0;padding:0 0 0 6px;position:relative;margin-bottom:0}\n  .hf-svc-steps::before{display:block;top:27px;bottom:27px;left:31px;right:auto;width:2px;height:auto;background:linear-gradient(180deg,#2ED87A,#40C9F3,#3D4F6F);border-radius:2px}\n  .hf-svc-step{display:grid;grid-template-columns:64px 1fr;grid-template-rows:auto auto;column-gap:18px;row-gap:6px;align-items:start;text-align:left;padding-bottom:28px}\n  .hf-svc-step:last-child{padding-bottom:0}\n  .hf-svc-step-num{grid-column:1;grid-row:1 \/ span 2;width:54px;height:54px;margin:0;justify-self:start;margin-left:4px;box-shadow:0 4px 12px rgba(41,171,226,.18)}\n  .hf-svc-step-num-inner{width:42px;height:42px}\n  .hf-svc-step-num svg{width:20px;height:20px}\n  .hf-svc-step h3{grid-column:2;grid-row:1;font-size:16.5px;font-weight:700;color:#40C9F3;margin:0;padding-top:4px;line-height:1.25}\n  .hf-svc-step p{grid-column:2;grid-row:2;font-size:13.5px;color:#000;line-height:1.55;margin:0;padding-top:2px}\n}\n<\/style><div class=\"hf-svc-hiw\">\n  <div class=\"hf-svc-hiw-label\">HOW IT WORKS<\/div>\n  <h2>From Selection to Done in Just a Few Taps<\/h2>\n  <p class=\"hf-svc-hiw-sub\">No phone tag. No guessing games. One upfront price, hand-matched pros, and total peace of mind.<\/p>\n  <div class=\"hf-svc-steps\">\n    <div class=\"hf-svc-step hf-sn-1\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"><\/path><\/svg><\/div><\/div>\n      <h3>Select Your Service<\/h3>\n      <p>Pick your service, set the details, and see your real upfront price instantly.<\/p>\n    <\/div>\n    <div class=\"hf-svc-step hf-sn-2\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"><\/path><\/svg><\/div><\/div>\n      <h3>Schedule The Job<\/h3>\n      <p>Select the day and time best for you and checkout with any of our secure payment options.<\/p>\n    <\/div>\n    <div class=\"hf-svc-step hf-sn-3\">\n      <div class=\"hf-svc-step-num\"><div class=\"hf-svc-step-num-inner\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z\"><\/path><\/svg><\/div><\/div>\n      <h3>Sit Back And Relax<\/h3>\n      <p>House Fly takes care of all pro-matching, scheduling, communication, and payments.<\/p>\n    <\/div>\n    \n  <\/div>\n  <\/div>\n\n<!-- electric-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<!-- electric-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<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>ELECTRIC SERVICES Trusted Electrician Serviceswith Upfront Pricing Verified pros, upfront pricing, and instant booking with no surprises 5.0 on Google A+ Better Business Bureau Free cancellation Our Electrical Services Licensed, trusted electricians for every job Kitchen Appliances Refrigerator Microwave Garbage Disposal Dishwasher Electric Stove Hood \/ Vent Light Fixtures and Ceiling Fans Light Fixture (Ceiling [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":2704,"parent":538,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3436","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>Electrician Services | Book Local Electricians | House Fly<\/title>\n<meta name=\"description\" content=\"Find and instantly book an electrician with upfront pricing. Outlets, panels, wiring, lighting, and more. Trusted pros on House Fly.\" \/>\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\/electric\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Electric\" \/>\n<meta property=\"og:description\" content=\"Find and instantly book an electrician with upfront pricing. Outlets, panels, wiring, lighting, and more. Trusted pros on House Fly.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/housefly.com\/es\/services\/electric\/\" \/>\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-08-17T07:41:34+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=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"503\" \/>\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":"Servicios de electricista | Reserva electricistas locales | House Fly","description":"Find and instantly book an electrician with upfront pricing. Outlets, panels, wiring, lighting, and more. Trusted pros on House Fly.","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\/electric\/","og_locale":"es_MX","og_type":"article","og_title":"Electric","og_description":"Find and instantly book an electrician with upfront pricing. Outlets, panels, wiring, lighting, and more. Trusted pros on House Fly.","og_url":"https:\/\/housefly.com\/es\/services\/electric\/","og_site_name":"House Fly","article_publisher":"https:\/\/www.facebook.com\/houseflyapp","article_modified_time":"2026-08-17T07:41:34+00:00","og_image":[{"url":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/01\/housefly-social-share.jpg","width":800,"height":503,"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\/electric\/","url":"https:\/\/housefly.com\/services\/electric\/","name":"Servicios de electricista | Reserva electricistas locales | House Fly","isPartOf":{"@id":"https:\/\/housefly.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/housefly.com\/services\/electric\/#primaryimage"},"image":{"@id":"https:\/\/housefly.com\/services\/electric\/#primaryimage"},"thumbnailUrl":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/new-orleans-electrician-light-fixture-replacement.png","datePublished":"2026-03-06T01:34:49+00:00","dateModified":"2026-08-17T07:41:34+00:00","description":"Find and instantly book an electrician with upfront pricing. Outlets, panels, wiring, lighting, and more. Trusted pros on House Fly.","breadcrumb":{"@id":"https:\/\/housefly.com\/services\/electric\/#breadcrumb"},"inLanguage":"es-MX","potentialAction":[{"@type":"ReadAction","target":["https:\/\/housefly.com\/services\/electric\/"]}]},{"@type":"ImageObject","inLanguage":"es-MX","@id":"https:\/\/housefly.com\/services\/electric\/#primaryimage","url":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/new-orleans-electrician-light-fixture-replacement.png","contentUrl":"https:\/\/housefly.com\/wp-content\/uploads\/2025\/08\/new-orleans-electrician-light-fixture-replacement.png","width":1011,"height":636,"caption":"new orleans electrician light fixture replacement"},{"@type":"BreadcrumbList","@id":"https:\/\/housefly.com\/services\/electric\/#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":"Electric"}]},{"@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\/3436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/comments?post=3436"}],"version-history":[{"count":0,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/3436\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/pages\/538"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/media\/2704"}],"wp:attachment":[{"href":"https:\/\/housefly.com\/es\/wp-json\/wp\/v2\/media?parent=3436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}