!function(){"use strict";var a=document.getElementById("arp-calc");if(a&&!a.__arpV3){a.__arpV3=1;var t=a.getAttribute("data-key")||"",e=a.getAttribute("data-src")||"Roof Cost Calculator",r=a.getAttribute("data-page")||"site",o=a.getAttribute("data-hero")||"Find Out How Much Your New Roof Will Cost",n=a.getAttribute("data-form")||"1",i=[499,550],s=[550,650],p=[650,800],l=1.1,d=12e3,c="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2ecH3N-lb_sJ_g2vBC5ZZ09r6hJK2NNWosgqVdtNaujiY86JbqqToynFkliitAaAi6a_t6TQCl",u="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3q2vLsfxeQX3L_1yP2XaKuzgiPiFDWkTpOao_MppO1CyhtyCrPu21TjfJtC6X6lWbRP7pMLyQ-",m="(509) 236-9583",g=[".arp-calc{--o:#f47a2a;--o2:#d9651a;--b:#1b6fd6;--ok:#12855a;--err:#c62828;--ink:#1f2933;--mut:#6b7680;--bd:#dfe5ea;--bg:#f4f7f8;font-family:Roboto,system-ui,-apple-system,Segoe UI,Arial,sans-serif;color:var(--ink);text-align:left}",".arp-calc *{box-sizing:border-box}",".arp-stage{position:relative;width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);min-height:620px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;padding:40px 16px 34px;overflow:hidden;background:#000}",".arp-card{position:relative;z-index:2;background:#fff;border-radius:10px;width:100%;max-width:520px;box-shadow:0 20px 60px rgba(0,0,0,.55);padding:22px 24px 18px;scroll-margin-top:90px}",'.arp-card [tabindex="-1"]:focus{outline:none}',".arp-prog{display:flex;align-items:flex-start;justify-content:center;margin:0 0 14px;padding:0 6px}",".arp-prog div{position:relative;flex:1;text-align:center;font-size:9px;line-height:1.2;color:#8a949c}",".arp-prog div i{display:block;width:24px;height:24px;margin:0 auto 5px;border-radius:50%;background:#c7ced4;color:#fff;font-style:normal;font-size:13px;line-height:24px;font-weight:700;position:relative;z-index:1}",'.arp-prog div:not(:last-child):after{content:"";position:absolute;top:11px;left:50%;width:100%;height:2px;background:#c7ced4}',".arp-prog div.done i,.arp-prog div.cur i{background:var(--b)}",".arp-prog div.done:after{background:var(--b)}",".arp-prog div.cur{color:var(--b);font-weight:700}",".arp-q{display:none}.arp-q.on{display:block}",".arp-title{font-size:22px;font-weight:700;text-align:center;margin:6px 0 16px;letter-spacing:-.01em}",".arp-sub{text-align:center;color:var(--mut);font-size:13px;margin:-8px 0 14px}",".arp-in{width:100%;padding:13px 14px;border:1px solid var(--bd);border-radius:6px;font-size:16px;background:#fff;color:var(--ink)}",".arp-in:focus{outline:none;border-color:var(--b);box-shadow:0 0 0 3px rgba(27,111,214,.15)}",".arp-opts{display:grid;grid-template-columns:1fr 1fr;gap:10px}.arp-opts.one{grid-template-columns:1fr}",".arp-opt{display:flex;align-items:center;gap:10px;padding:13px 14px;border:1px solid var(--bd);border-radius:6px;background:#fff;font-size:14px;cursor:pointer;text-align:left;color:var(--ink);width:100%}",'.arp-opt:before{content:"";width:16px;height:16px;border-radius:50%;border:2px solid #b8c2ca;flex:0 0 16px}',".arp-opt.on{border-color:var(--b);background:#eef4fd;color:var(--b);font-weight:600}",".arp-opt.on:before{border:5px solid var(--b);background:#fff}",".arp-opt small{display:block;font-weight:400;color:var(--mut);font-size:12px}",".arp-nav{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #eef1f3;margin-top:18px;padding-top:14px}",".arp-nav.hide{display:none}",".arp-back{background:none;border:0;color:#6b7680;font-size:14px;cursor:pointer;padding:8px 6px}",".arp-back:disabled{visibility:hidden}",".arp-next{background:var(--o);color:#fff;border:0;border-radius:6px;padding:12px 34px;font-size:15px;font-weight:600;cursor:pointer;min-width:120px}",".arp-next:hover{background:var(--o2)}.arp-next:disabled{opacity:.5;cursor:default}",".arp-status{font-size:13px;color:var(--mut);margin:10px 0 0;min-height:18px;text-align:center}",".arp-status.err{color:var(--err)}",".arp-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:6px}",".arp-stats div{background:var(--bg);border-radius:6px;padding:10px;text-align:center}",".arp-stats b{display:block;font-size:18px;color:var(--ink)}.arp-stats small{font-size:11px;color:var(--mut)}",".arp-snap{position:relative;height:190px;border-radius:8px;overflow:hidden;background:#dfe5ea center/cover no-repeat;margin-bottom:12px;display:none}",".arp-snap.on{display:block}",".arp-snap .tag{position:absolute;top:10px;left:10px;display:flex;align-items:center;gap:6px;background:rgba(0,0,0,.72);color:#fff;font-size:11.5px;padding:5px 10px;border-radius:99px}",".arp-snap .tag i{width:7px;height:7px;border-radius:50%;background:#2ecc71;display:block}",".arp-measured{display:flex;align-items:center;justify-content:center;gap:8px;background:#e8f6ef;color:var(--ok);font-size:12px;font-weight:500;padding:7px 12px;border-radius:6px;margin-bottom:12px}",".arp-measured i{width:7px;height:7px;border-radius:50%;background:var(--ok);display:block}",".arp-hint{font-size:12px;color:var(--mut);margin:6px 0 0;text-align:center}",".arp-manual{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}",".arp-manual label{font-size:12px;font-weight:600;display:block;margin-bottom:4px}",".arp-hero-t{font-size:26px;font-weight:800;text-align:center;line-height:1.15;margin:6px 0 8px;letter-spacing:-.01em}",".arp-hero-s{text-align:center;color:var(--mut);font-size:14px;margin:0 0 14px}",".arp-checks{list-style:none;padding:0;margin:0 0 16px}",".arp-checks li{padding:6px 0 6px 28px;position:relative;font-size:14px;line-height:1.35}",'.arp-checks li:before{content:"\\2713";position:absolute;left:2px;top:5px;width:18px;height:18px;border-radius:50%;background:var(--b);color:#fff;font-size:11px;line-height:18px;text-align:center;font-weight:700}',".arp-big{display:block;width:100%;background:var(--o);color:#fff;border:0;border-radius:6px;padding:15px 20px;font-size:17px;font-weight:700;cursor:pointer}",".arp-big:hover:not(:disabled){background:var(--o2)}",".arp-big:disabled{background:#dfe5ea;color:#8a949c;cursor:not-allowed}",".arp-trust{text-align:center;font-size:11px;color:var(--mut);margin-top:12px}",".arp-gready{display:inline-flex;align-items:center;gap:7px;background:#e8f6ef;color:var(--ok);font-size:12px;font-weight:500;padding:5px 10px;border-radius:99px}",".arp-gready i{width:6px;height:6px;border-radius:50%;background:var(--ok);display:block}",".arp-recap{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--bd);border:1px solid var(--bd);border-radius:8px;overflow:hidden;margin:12px 0 16px}",".arp-recap div{background:#fff;padding:9px 11px}",".arp-recap span{display:block;font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut)}",".arp-recap b{font-size:14px;font-variant-numeric:tabular-nums}",".arp-syshead{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin-bottom:8px}",".arp-lock{border:1px solid var(--bd);border-radius:99px;padding:4px 9px;letter-spacing:.04em;white-space:nowrap}",".arp-lock.open{color:var(--ok);border-color:var(--ok);background:#e8f6ef}",".arp-systems{display:grid;gap:8px}",".arp-srow{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--bd);border-radius:8px;padding:10px 12px}",".arp-srow.best{border-color:var(--o);background:#fff7f0}",".arp-srow b{font-size:14px;display:block;line-height:1.25}",".arp-srow em{font-style:normal;font-size:9px;background:var(--o);color:#fff;padding:2px 6px;border-radius:4px;letter-spacing:.05em;margin-left:4px;vertical-align:2px}",".arp-srow small{display:block;font-size:11px;color:var(--mut);margin-top:3px;line-height:1.35}",".arp-srow .amt{font-weight:700;font-size:15px;white-space:nowrap;font-variant-numeric:tabular-nums;transition:filter .5s ease,opacity .5s ease}",".arp-systems.locked .amt{filter:blur(6px);opacity:.5;user-select:none}",".arp-gfields{display:grid;gap:11px;margin:16px 0 12px}",".arp-gf label{display:block;font-size:12px;font-weight:600;margin-bottom:4px}",".arp-gh{font-size:11px;color:var(--mut);margin:5px 0 0;line-height:1.35}",".arp-gh:empty{display:none}",".arp-gf.ok .arp-in{border-color:var(--ok)}",".arp-gf.bad .arp-in{border-color:var(--err);background:#fdecec}",".arp-gf.bad .arp-gh{color:var(--err)}",".arp-fix{background:none;border:0;padding:0;font:inherit;font-size:11px;color:var(--o2);text-decoration:underline;cursor:pointer}",".arp-priv{text-align:center;font-size:11px;color:var(--mut);margin:12px 0 0;letter-spacing:.01em}",".arp-total{background:var(--b);color:#fff;border-radius:8px;padding:16px 18px;text-align:center;margin-bottom:12px}",".arp-total .l{font-size:11px;letter-spacing:.08em;text-transform:uppercase;opacity:.85}",".arp-total .n{font-size:30px;font-weight:700;line-height:1.15;margin:4px 0}",".arp-total .s{font-size:12px;opacity:.9}",".arp-cta{display:block;text-align:center;background:var(--o);color:#fff;text-decoration:none;font-weight:700;font-size:15px;padding:13px 16px;border-radius:6px;margin-top:12px}",".arp-cta:hover{background:var(--o2)}",".arp-call{display:block;text-align:center;margin-top:8px;font-size:13px;color:var(--mut)}",".arp-fine{font-size:11px;color:var(--mut);line-height:1.45;margin:12px 0 0}",".arp-quote{margin:14px 0 0;padding:10px 12px;background:var(--bg);border-radius:6px;font-size:12.5px;line-height:1.4;color:#3b4650}",".arp-quote b{display:block;font-size:11px;color:var(--mut);margin-top:4px;font-weight:600}",".arp-offer{background:#fff7f0;border:1px dashed var(--o);border-radius:8px;padding:12px 14px;margin:10px 0 0;font-size:13px;line-height:1.45}",".arp-offer strong{color:var(--o2)}",".arp-rev{position:relative;z-index:2;width:100%;max-width:560px;margin:0 auto}",".arp-rev img{width:100%!important;max-width:560px!important;height:auto!important;object-fit:contain!important;border-radius:0!important;box-shadow:none!important;margin:0 auto!important;display:block!important;filter:drop-shadow(0 6px 18px rgba(0,0,0,.45))}","@media(max-width:1024px){.arp-stage{width:100%;margin-left:0}}","@media(max-width:600px){.arp-opts{grid-template-columns:1fr}.arp-stats{grid-template-columns:1fr 1fr}.arp-prog div{font-size:8px}.arp-stage{min-height:560px;padding:24px 12px}.arp-card{padding:18px 14px 16px}.arp-manual{grid-template-columns:1fr}.arp-rev{display:none}}"].join(""),f=document.createElement("style");f.textContent=g,document.head.appendChild(f),a.className="arp-calc",a.innerHTML='
1Locate Roof
2Roof Size
3Project Details
4Your Estimate
'+o+'
Your roof measured from above and priced in about 60 seconds.
★★★★★ 530+ reviews · CertainTeed ShingleMaster PREMIER
Find your roof
We found your roof
Your roof
Aerial measurement complete
sq ft roof surface
average pitch
roof faces

Which roofing material will you use?
How steep is the roof?
We pre-selected this from the aerial measurement.
How many layers of shingles are on it now?
Your estimate is ready
Roof area
Pitch
Layers
Squares
Locked
'+N("Cascade","Landmark · 50-yr material","arp-g1",!1)+N("Denali","SureStart PLUS · 30-yr labor","arp-g2",!0)+N("Alpine Premium","Landmark PRO · lifetime labor","arp-g3",!1)+'

Private · No obligation · No credit check

Your roof replacement estimate
Estimated cost
$—
squares · sq ft ·
'+N("Cascade System","CertainTeed Landmark · 50-yr material · 10-yr workmanship","arp-t1",!1)+N("Denali System","SureStart PLUS · 30-yr workmanship · priority scheduling","arp-t2",!0)+N("Alpine Premium","Landmark PRO · 5-Star PREMIER · lifetime workmanship","arp-t3",!1)+'
Sent. A copy is on its way to your phone and inbox.
Book My Free On-Site Estimate →or call '+m+'Not in Spokane? Book with our Tri-Cities team →

Estimate only; final pricing follows an on-site inspection. Includes tear-off of one layer, disposal, underlayment, ice and water barrier, starter, ridge cap and ventilation. Excludes decking, extra layers and permits.

Alpine Roofing 532 five-star reviews on Google, BBB, HomeAdvisor and Angi
';var v=function(a){return document.getElementById(a)},x=Array.prototype.slice.call(a.querySelectorAll(".arp-q")),h=0,b={mat:"asphalt",pitch:1.12,layers:"1"},y=null,k="",w="",_=!1,C=!1,z=0,S=!1,q=window.crypto&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)+Math.random().toString(36).slice(2),E={intro:0,addr:0,measure:1,mat:2,pitch:2,layers:2,gate:3,result:3},L=["mailinator.com","guerrillamail.com","10minutemail.com","tempmail.com","temp-mail.org","yopmail.com","trashmail.com","sharklasers.com","getnada.com","dispostable.com","maildrop.cc","fakeinbox.com","throwawaymail.com","test.com","example.com","asdf.com","none.com"],A={"gamil.com":"gmail.com","gmial.com":"gmail.com","gmal.com":"gmail.com","gmali.com":"gmail.com","gnail.com":"gmail.com","gmaill.com":"gmail.com","gmail.co":"gmail.com","gmail.cm":"gmail.com","gmail.om":"gmail.com","yaho.com":"yahoo.com","yahooo.com":"yahoo.com","yahoo.co":"yahoo.com","hotnail.com":"hotmail.com","hotmial.com":"hotmail.com","hotmall.com":"hotmail.com","outlok.com":"outlook.com","iclould.com":"icloud.com","icoud.com":"icloud.com","comcastnet.com":"comcast.net"},M=["test","asdf","fake","none","noname","abc","aaa","xyz","qwerty","baby","googoo","gaga","na","no","anon","anonymous"],T={name:!1,phone:!1,email:!1};["name","phone","email"].forEach(function(a){var t=v("arp-g-"+a);t.addEventListener("input",function(){G(a)}),t.addEventListener("blur",function(){G(a)})});var P=null;a.querySelectorAll(".arp-opts").forEach(function(a){var t=a.getAttribute("data-key");a.querySelectorAll(".arp-opt").forEach(function(e){e.addEventListener("click",function(){a.querySelectorAll(".arp-opt").forEach(function(a){a.classList.remove("on")}),e.classList.add("on"),b[t]="pitch"===t?parseFloat(e.dataset.v):e.dataset.v})})}),v("arp-next").addEventListener("click",function(){var a=O(h);if("addr"!==a)return"measure"!==a||I()?void("mat"!==a||"asphalt"===b.mat?U(h+1):U(j("layers"))):(v("arp-m-note").textContent="Enter a roof size between 300 and 20,000 sq ft.",void F("area_invalid"));ta()}),v("arp-back").addEventListener("click",function(){var a=O(h);"addr"===a&&aa(),"layers"!==a||"asphalt"===b.mat?U(Math.max(0,h-1)):U(j("mat"))}),v("arp-address").addEventListener("keydown",function(a){"Enter"===a.key&&(a.preventDefault(),v("arp-next").click())}),v("arp-start").addEventListener("click",function(){ea(),U(j("addr"));try{v("arp-address").focus({preventScroll:!0})}catch(a){}}),["focus","input"].forEach(function(a){v("arp-address").addEventListener(a,ea)}),v("arp-cta").addEventListener("click",function(){R("calc_book_click",{calc_territory:D()})}),v("arp-cta-alt").addEventListener("click",function(){R("calc_book_click",{calc_territory:"spk"===D()?"tri":"spk"})}),v("arp-unlock").addEventListener("click",function(){var a=v("arp-unlock");if(!a.disabled&&!C)if(G("name"),G("phone"),G("email"),T.name&&T.phone&&T.email){C=!0,a.disabled=!0,a.textContent="Unlocking…";var t=v("arp-g-name").value.trim(),r=Y(v("arp-g-phone").value),o=v("arp-g-email").value.trim().toLowerCase(),i=I(),s=i*l/100,p=H(),d={input_8:t,input_2:r,input_3:o,input_9:k||"(manual entry)",input_11:"Residential Roofing",input_5:e,input_6:location.href,input_7:"Calculator estimate: "+p+" | "+s.toFixed(1)+" squares | "+Math.round(i)+" sq ft | material: "+b.mat+" | layers: "+b.layers+" | territory: "+D()+" | source: "+(y?"aerial":"manual")+" | run: "+q},c=window.AbortController?new AbortController:null,u=setTimeout(function(){c&&c.abort()},1e4);g().catch(function(a){if(a&&"lead_rejected"===a.code)throw a;return new Promise(function(a){setTimeout(a,1500)}).then(g)}).then(function(){clearTimeout(u),R("calc_lead",{calc_estimate:p,calc_territory:D(),calc_source:y?"aerial":"manual"}),ra()}).catch(function(a){clearTimeout(u),F(a&&a.code||"lead_network"),v("arp-sent").innerHTML="Your estimate is below. We could not send the copy just now — call or text "+m+" and we will send it over.",ra()})}else F("gate_invalid");function g(){return fetch("/wp-json/gf/v2/forms/"+n+"/submissions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d),signal:c?c.signal:void 0}).then(function(a){return"opaqueredirect"===a.type||0===a.status||a.redirected?{accepted:!0}:a.text().then(function(t){var e={};try{e=JSON.parse(t)}catch(a){}if(!1===e.is_valid){var r=new Error("lead_rejected");throw r.code="lead_rejected",r}if(!a.ok){var o=new Error("lead_http");throw o.code="lead_http_"+a.status,o}return e})})}}),U(0),R("calc_view",{calc_landing_step:"intro"})}function N(a,t,e,r){return'
'+a+(r?" MOST POPULAR":"")+""+t+'
'}function R(a,t){try{window.dataLayer=window.dataLayer||[];var e={event:a,calc_run_id:q,calc_page:r,calc_version:"v3"};if(t)for(var o in t)e[o]=t[o];window.dataLayer.push(e)}catch(a){}}function F(a){R("calc_step_error",{step_name:O(h),error_code:a})}function O(a){return x[a].getAttribute("data-q")}function j(a){for(var t=0;t=1){try{document.activeElement&&document.activeElement.blur()}catch(a){}try{var i=x[t].querySelector('[tabindex="-1"]');i&&i.focus({preventScroll:!0})}catch(a){}}n!==w&&(w=n,R("calc_step_view",{step_name:n,step_index:t}))}function B(a){return"$"+(50*Math.round(a/50)).toLocaleString("en-US")}function W(a,t){var e=v("arp-status");e.textContent=a,e.className="arp-status"+(t?" err":"")}function I(){if(y&&isFinite(y.areaSqFt)&&y.areaSqFt>=300)return y.areaSqFt;var a=parseFloat(v("arp-sqft").value)||0;return!isFinite(a)||a<300||a>2e4?0:"foot"===v("arp-mode").value?a*b.pitch:a}function D(){if(!y)return"spk";var a=1.27*(47.6-y.lat)-119.3;return y.lng>a?"spk":"tri"}function H(){var a=I()*l/100;return"asphalt"===b.mat?B(a*i[0])+" - "+B(a*p[1]):B(a*i[0])+"+ ("+b.mat+")"}function Z(){!function(){var a=D(),t=v("arp-cta"),e=v("arp-cta-alt");t.href="spk"===a?c:u,e.href="spk"===a?u:c,e.textContent="spk"===a?"Not in Spokane? Book with our Tri-Cities team →":"Closer to Spokane? Book with our Spokane team →"}();var a=I(),t=a*l/100;v("arp-addr-echo").textContent=k||"manual entry",v("arp-squares").textContent=t.toFixed(1),v("arp-area").textContent=Math.round(a).toLocaleString("en-US");var e=v("arp-alt"),r=v("arp-tiers");"asphalt"===b.mat?(r.style.display="",e.style.display="none",v("arp-range").textContent=B(t*i[0])+" – "+B(t*p[1]),v("arp-t1").textContent=B(t*i[0])+" – "+B(t*i[1]),v("arp-t2").textContent=B(t*s[0])+" – "+B(t*s[1]),v("arp-t3").textContent=B(t*p[0])+" – "+B(t*p[1])):(r.style.display="none",e.style.display="",v("arp-range").textContent=B(t*i[0])+"+",e.textContent=("metal"===b.mat?"Standing-seam metal":"flat"===b.mat?"TPO / low-slope":"Tile and wood")+" pricing depends on the profile and details chosen. The figure above is the asphalt baseline for your roof size; we quote it exactly after a free on-site measurement."),_||(_=!0,R("calc_estimate_shown",{calc_estimate:H(),calc_territory:D(),calc_source:y?"aerial":"manual"}))}function Y(a){var t,e,r="";for(a=a||"",t=0;t="0"&&e<="9"&&(r+=e);return 11===r.length&&"1"===r.charAt(0)&&(r=r.slice(1)),r}function J(a){var t;for(t=1;t-1)return{s:"bad",m:"That does not look like a real name."};if(r.length>2&&J(r))return{s:"bad",m:"That does not look like a real name."}}return{s:"ok",m:""}}(v("arp-g-name").value));if("phone"===a){var t=v("arp-g-phone"),e=Y(t.value);return e.length<=10&&document.activeElement===t&&(t.value=(r=e).length<4?r:r.length<7?"("+r.slice(0,3)+") "+r.slice(3):"("+r.slice(0,3)+") "+r.slice(3,6)+"-"+r.slice(6,10)),$("phone",function(a){var t=Y(a);if(!t)return{s:"",m:""};if(t.length<10)return{s:"",m:""};if(11===t.length&&"1"===t.charAt(0)&&(t=t.substring(1)),t.length>10)return{s:"bad",m:"That is too many digits for a US number."};var e=t.substr(0,3),r=t.substr(3,3),o=t.substr(6,4);return J(t)||"1234567890"===t||"0123456789"===t||"9876543210"===t?{s:"bad",m:"That is not a real phone number."}:/^(800|833|844|855|866|877|888|900)$/.test(e)?{s:"bad",m:"Please use a mobile or home number, not a toll-free line."}:",201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,218,219,220,223,224,225,226,227,228,229,231,234,235,236,239,240,248,249,250,251,252,253,254,256,257,260,262,263,267,269,270,272,274,276,279,281,283,289,301,302,303,304,305,306,307,308,309,310,312,313,314,315,316,317,318,319,320,321,323,324,325,326,327,329,330,331,332,334,336,337,339,341,343,346,347,350,351,352,353,354,360,361,363,364,365,367,368,369,380,382,385,386,401,402,403,404,405,406,407,408,409,410,412,413,414,415,416,417,418,419,423,424,425,428,430,431,432,434,435,437,438,440,442,443,445,447,448,450,458,463,464,468,469,470,472,474,475,478,479,480,484,501,502,503,504,505,506,507,508,509,510,512,513,514,515,516,517,518,519,520,530,531,532,534,539,540,541,548,551,557,559,561,562,563,564,567,570,571,572,573,574,575,579,580,581,582,584,585,586,587,601,602,603,604,605,606,607,608,609,610,612,613,614,615,616,617,618,619,620,623,626,628,629,630,631,633,636,639,640,641,645,646,647,650,651,656,657,659,660,661,662,667,669,672,678,680,681,682,683,686,689,701,702,703,704,705,706,707,708,709,712,713,714,715,716,717,718,719,720,724,725,726,727,728,730,731,732,734,737,738,740,742,743,747,748,753,754,757,760,762,763,765,769,770,771,772,773,774,775,778,779,780,781,782,785,786,801,802,803,804,805,806,807,808,810,812,813,814,815,816,817,818,819,820,821,825,826,828,830,831,832,835,838,839,840,843,845,847,848,850,854,856,857,858,859,860,862,863,864,865,867,870,872,873,878,879,901,902,903,904,905,906,907,908,909,910,912,913,914,915,916,917,918,919,920,925,928,929,930,931,934,936,937,938,940,941,942,943,945,947,948,949,951,952,954,956,959,970,971,972,973,975,978,979,980,983,984,985,986,989,".indexOf(","+e+",")>-1?r.charAt(0)<"2"||"555"===r||"1"===r.charAt(1)&&"1"===r.charAt(2)?{s:"bad",m:"That exchange is not a working number."}:"0000"===o||J(r+o)?{s:"bad",m:"That is not a real phone number."}:(function(p){var O=["5092369583","5099877818","5092365880"];if(O.indexOf(p)>-1)return!0;var L=document.querySelectorAll('a[href^="tel:"]'),k,d;for(k=0;k-1)return{s:"bad",m:"No spaces in an email address."};var t=a.indexOf("@");if(t<1)return{s:"",m:""};if(a.indexOf("@",t+1)>-1)return{s:"bad",m:"That address has two @ signs."};var e=a.substring(t+1);return e.indexOf(".")<1?{s:"",m:""}:/^[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,}$/.test(e)?L.indexOf(e)>-1?{s:"bad",m:"A temporary inbox will not receive your estimate."}:A[e]?{s:"bad",m:"",fix:a.substring(0,t+1)+A[e]}:{s:"ok",m:""}:{s:"bad",m:"That domain does not look right."}}(v("arp-g-email").value))}function Q(){return!!(window.google&&google.maps&&google.maps.importLibrary)}function V(a,t,e){return new Promise(function(r,o){var n=setTimeout(function(){var a=new Error(e);a.code=e,o(a)},t);a.then(function(a){clearTimeout(n),r(a)},function(a){clearTimeout(n),o(a)})})}function X(a,e,r,o){var n="maps";return V((window.__arpMaps||(window.__arpMaps=new Promise(function(a,e){if(Q())return a();var r=document.createElement("script");r.src="https://maps.googleapis.com/maps/api/js?key="+t+"&v=weekly&loading=async",r.async=!0,r.onload=function(){var t=0,r=setInterval(function(){Q()?(clearInterval(r),a()):++t>100&&(clearInterval(r),e(new Error("maps_timeout")))},100)},r.onerror=function(){e(new Error("maps_load_error"))},document.head.appendChild(r)}).then(function(){return google.maps.importLibrary("geocoding")}).catch(function(a){throw window.__arpMaps=null,a})),window.__arpMaps),d,"maps_timeout").then(function(){return R("calc_address_status",{status:"maps_ready",elapsed_ms:Math.round(performance.now()-r),attempt:o}),n="geocode",V((new google.maps.Geocoder).geocode({address:a,componentRestrictions:{country:"US"}}),d,"geocode_timeout")}).catch(function(a){var t=a?a.code:"";if("geocode"===n){var e="ZERO_RESULTS"===t?"geocode_zero":"geocode_timeout"===t?"geocode_timeout":"geocode_error",r=new Error(e);throw r.code=e,r}var o=t||a.message||"maps_error",i=new Error(o);throw i.code=o,i}).then(function(a){if(!a||!a.results||!a.results.length){var i=new Error("geocode_zero");throw i.code="geocode_zero",i}R("calc_address_status",{status:"geocoded",elapsed_ms:Math.round(performance.now()-r),attempt:o});var s,p,l=a.results[0],c=l.geometry.location;return n="solar",V((s="https://solar.googleapis.com/v1/buildingInsights:findClosest?location.latitude="+c.lat()+"&location.longitude="+c.lng()+"&requiredQuality=BASE&key="+t,p=e.signal,fetch(s,{signal:p}).then(function(a){return a.text().then(function(t){var e={};try{e=JSON.parse(t)}catch(a){}if(!a.ok){var r=new Error("solar_http_"+a.status);throw r.code=404===a.status?"no_solar_data":403===a.status||429===a.status?"solar_denied":"solar_http",r}return e})})),d,"solar_timeout").then(function(a){var t=a.solarPotential||{},e=t.wholeRoofStats||{};if(!e.areaMeters2){var r=new Error("no_solar_data");throw r.code="no_solar_data",r}var o=a.center?{lat:a.center.latitude,lng:a.center.longitude}:{lat:c.lat(),lng:c.lng()},n=t.roofSegmentStats||[],i=0,s=0;return n.forEach(function(a){var t=(a.stats?a.stats.areaMeters2:0)||0;i+=t*(a.pitchDegrees||0),s+=t}),{lat:o.lat,lng:o.lng,address:l.formatted_address,areaSqFt:10.7639*e.areaMeters2,pitchDeg:s?i/s:0,faces:n.length}})})}function K(e){y=e,k=e.address,function(a){var e=v("arp-snap");if(t&&isFinite(a.lat)&&isFinite(a.lng)){var r="https://maps.googleapis.com/maps/api/staticmap?maptype=satellite&scale=2&key="+t+"¢er="+a.lat+","+a.lng+"&zoom=20&size=640x260";e.style.backgroundImage="url("+r+")",e.className="arp-snap on"}else e.className="arp-snap"}(e),v("arp-stage").classList.add("sat"),v("arp-manual").style.display="none",v("arp-m-area").textContent=Math.round(e.areaSqFt).toLocaleString("en-US");var r,o,n=e.pitchDeg?12*Math.tan(e.pitchDeg*Math.PI/180):5;v("arp-m-pitch").textContent=e.pitchDeg?Math.round(n)+"/12":"—",v("arp-m-faces").textContent=e.faces||"—",v("arp-m-note").textContent=e.address,v("arp-pitch-sub").textContent="We pre-selected this from the aerial measurement.",v("arp-measured").style.display="",v("arp-measured-t").textContent="Aerial measurement complete",a.querySelector('.arp-q[data-q="measure"] .arp-title').textContent="We found your roof",r="pitch",o=n<=3.5?1.05:n<=6.5?1.12:n<=9.5?1.25:1.4,a.querySelector('.arp-opts[data-key="'+r+'"]').querySelectorAll(".arp-opt").forEach(function(a){a.classList.toggle("on",a.dataset.v===String(o))}),b[r]="pitch"===r?parseFloat(o):String(o)}function aa(){if(P){try{P.ctrl.abort()}catch(a){}P=null}v("arp-next").disabled=!1}function ta(){var t=v("arp-address").value.trim();if(!t)return W("Please enter your street address to measure your roof.",!0),void F("address_required");aa();var e=++z,r=window.AbortController?new AbortController:{signal:void 0,abort:function(){}},o=performance.now();P={att:e,ctrl:r},v("arp-next").disabled=!0,W("Locating your roof from aerial imagery…"),R("calc_address_status",{status:"started",elapsed_ms:0,attempt:e}),X(t,r,o,e).then(function(a){P&&P.att===e&&"addr"===O(h)&&(P=null,v("arp-next").disabled=!1,W(""),R("calc_address_status",{status:"success",elapsed_ms:Math.round(performance.now()-o),attempt:e}),K(a),U(j("measure")))}).catch(function(t){if(P&&P.att===e){P=null,v("arp-next").disabled=!1;var r=(t?t.code:"")||"unknown";if(R("calc_address_status",{status:"failed",error_code:r,elapsed_ms:Math.round(performance.now()-o),attempt:e}),"addr"===O(h))!function(t){y=null;var e=v("arp-address").value.trim();k=e?e+" (size entered manually)":"",v("arp-manual").style.display="",v("arp-m-area").textContent="—",v("arp-m-pitch").textContent="—",v("arp-m-faces").textContent="—",v("arp-m-note").textContent=t||"Enter your roof size below. An approximate number is fine.",v("arp-pitch-sub").textContent="Not sure? Medium is right for most homes.",v("arp-measured").style.display="none",v("arp-snap").className="arp-snap",v("arp-stage").classList.remove("sat"),a.querySelector('.arp-q[data-q="measure"] .arp-title').textContent="Tell us about your roof"}(("geocode_zero"===r?"We could not find that address.":"no_solar_data"===r?"No aerial roof data is available for that address yet.":"The aerial lookup is not responding right now.")+" Enter an approximate roof size below and your estimate stays within about 10 percent."),U(j("measure"))}})}function ea(){S||(S=!0,R("calc_start"))}function ra(){v("arp-systems").classList.remove("locked"),v("arp-galt").classList.remove("locked");var a=v("arp-lock");a.textContent="Unlocked",a.className="arp-lock open",setTimeout(function(){U(j("result"))},750)}}();