1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,60345,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return i},searchParamsToUrlQuery:function(){return s},urlQueryToSearchParams:function(){return o}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});function s(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}function i(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},14561,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return g},MiddlewareNotFoundError:function(){return w},MissingStaticPage:function(){return v},NormalizeError:function(){return y},PageNotFoundError:function(){return b},SP:function(){return m},ST:function(){return x},WEB_VITALS:function(){return s},execOnce:function(){return a},getDisplayName:function(){return d},getLocationOrigin:function(){return c},getURL:function(){return u},isAbsoluteUrl:function(){return i},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return j}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let s=["CLS","FCP","FID","INP","LCP","TTFB"];function a(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>o.test(e);function c(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function u(){let{href:e}=window.location,t=c();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let m="u">typeof performance,x=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class y extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class w extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function j(e){return JSON.stringify({message:e.message,stack:e.stack})}},7869,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},15119,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return o},formatWithValidation:function(){return c},urlObjectKeys:function(){return i}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let s=e.r(90613)._(e.r(60345)),a=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,n=e.protocol||"",l=e.pathname||"",o=e.hash||"",i=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:r&&(c=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(c+=":"+e.port)),i&&"object"==typeof i&&(i=String(s.urlQueryToSearchParams(i)));let u=e.search||i&&`?${i}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||a.test(n))&&!1!==c?(c="//"+(c||""),l&&"/"!==l[0]&&(l="/"+l)):c||(c=""),o&&"#"!==o[0]&&(o="#"+o),u&&"?"!==u[0]&&(u="?"+u),l=l.replace(/[?#]/g,encodeURIComponent),u=u.replace("#","%23"),`${n}${c}${l}${u}${o}`}let i=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return o(e)}},64213,(e,t,r)=>{"use strict";
1Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return l}});let n=e.r(56209);function l(e,t){let r=(0,n.useRef)(null),l=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=l.current;t&&(l.current=null,t())}else e&&(r.current=s(e,n)),t&&(l.current=s(t,n))},[e,t])}function s(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},64162,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return s}});let n=e.r(14561),l=e.r(4057);function s(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,l.hasBasePath)(r.pathname)}catch(e){return!1}}},32537,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},86291,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return g},useLinkStatus:function(){return b}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let s=e.r(90613),a=e.r(96269),o=s._(e.r(56209)),i=e.r(15119),c=e.r(92790),u=e.r(64213),d=e.r(14561),f=e.r(22658);e.r(7869);let p=e.r(36143),h=e.r(27717),m=e.r(64162),x=e.r(26037);function g(t){var r,n;let l,s,g,[b,v]=(0,o.useOptimistic)(h.IDLE_LINK_STATUS),w=(0,o.useRef)(null),{href:j,as:_,children:N,prefetch:k=null,passHref:C,replace:S,shallow:O,scroll:E,onClick:L,onMouseEnter:M,onTouchStart:R,legacyBehavior:P=!1,onNavigate:I,transitionTypes:T,ref:A,unstable_dynamicOnHover:B,...F}=t;l=N,P&&("string"==typeof l||"number"==typeof l)&&(l=(0,a.jsx)("a",{children:l}));let $=o.default.useContext(c.AppRouterContext),U=!1!==k,D=!1!==k?null===(n=k)||"auto"===n?x.FetchStrategy.PPR:x.FetchStrategy.Full:x.FetchStrategy.PPR,z="string"==typeof(r=_||j)?r:(0,i.formatUrl)(r);if(P){if(l?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});s=o.default.Children.only(l)}let q=P?s&&"object"==typeof s&&s.ref:A,H=o.default.useCallback(e=>(null!==$&&(w.current=(0,h.mountLinkInstance)(e,z,$,D,U,v)),()=>{w.current&&((0,h.unmountLinkForCurrentNavigation)(w.current),w.current=null),(0,h.unmountPrefetchableInstance)(e)}),[U,z,$,D,v]),V={ref:(0,u.useMergedRef)(H,q),onClick(t){P||"function"!=typeof L||L(t),P&&s.props&&"function"==typeof s.props.onClick&&s.props.onClick(t),!$||t.defaultPrevented||function(t,r,n,l,s,a,i){if("u">typeof window){let c,{nodeName:u}=t.currentTarget;if("A"===u.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,m.isLocalURL)(r)){l&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),a){let e=!1;if(a({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:d}=e.r(53400);o.default.startTransition(()=>{d(r,l?"replace":"push",!1===s?p.ScrollBehavior.NoScroll:p.ScrollBehavior.Default,n.current,i)})}}(t,z,w,S,E,I,T)},onMouseEnter(e){P||"function"!=typeof M||M(e),P&&s.props&&"function"==typeof s.props.onMouseEnter&&s.props.onMouseEnter(e),$&&U&&(0,h.onNavigationIntent)(e.currentTarget,!0===B)},onTouchStart:function(e){P||"function"!=typeof R||R(e),P&&s.props&&"function"==typeof s.props.onTouchStart&&s.props.onTouchStart(e),$&&U&&(0,h.onNavigationIntent)(e.currentTarget,!0===B)}};return(0,d.isAbsoluteUrl)(z)?V.href=z:P&&!C&&("a"!==s.type||"href"in s.props)||(V.href=(0,f.addBasePath)(z)),g=P?o.default.cloneElement(s,V):(0,a.jsx)("a",{...F,...V,children:l}),(0,a.jsx)(y.Provider,{value:b,children:g})}e.r(32537);let y=(0,o.createContext)(h.IDLE_LINK_STATUS),b=()=>(0,o.useContext)(y);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esMo
1dule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},42522,e=>{"use strict";let t=["gclid","gbraid","wbraid","msclkid","fbclid","utm_source","utm_medium","utm_campaign","utm_term","utm_content"],r="rd_attr";function n(e){if("u"<typeof document)return null;let t=document.cookie.split("; ").find(t=>t.startsWith(e+"="));return t?decodeURIComponent(t.slice(e.length+1)):null}function l(){let e=n("_ga");if(!e)return;let t=e.split(".");return t.length>=4?t.slice(-2).join("."):void 0}e.s(["attributionQuery",0,function(){let e=function(){try{let e=JSON.parse(n(r)||"{}"),t=l();return t&&!e.ga_client_id&&(e.ga_client_id=t),e}catch{return{}}}(),t=new URLSearchParams;for(let[r,n]of Object.entries(e))n&&t.set(r,String(n));return t.toString()},"captureAttribution",0,function(){let e={};try{e=JSON.parse(n(r)||"{}")}catch{e={}}let s=new URLSearchParams(window.location.search),a={};for(let e of t){let t=s.get(e);t&&(a[e]=t.slice(0,200))}let o=a.gclid||a.gbraid||a.wbraid||a.msclkid||a.utm_source?{...e,...a,landing_page:window.location.pathname,referrer:document.referrer||void 0,first_seen:e.first_seen||new Date().toISOString()}:{...a,...e,landing_page:e.landing_page||window.location.pathname,referrer:e.referrer??(document.referrer||void 0),first_seen:e.first_seen||new Date().toISOString()},i=l();i&&(o.ga_client_id=i);try{!function(e,t){if("u"<typeof document)return;let r=new Date(Date.now()+7776e6).toUTCString();document.cookie=`${e}=${encodeURIComponent(t)};expires=${r};path=/;SameSite=Lax`}(r,JSON.stringify(o))}catch{}return o}])},19739,e=>{"use strict";var t=e.i(96269),r=e.i(86291),n=e.i(56209);let l=[{href:"/guides/",label:"Roofing Guides"},{href:"/learn/",label:"Learn"},{href:"/faqs/",label:"FAQs"},{href:"/glossary/",label:"Glossary"}],s=[{href:"/services/roof-repair/",label:"Roof Repair"},{href:"/services/roof-replacement/",label:"Roof Replacement"},{href:"/services/roof-inspection/",label:"Roof Inspection"},{href:"/services/gutter-installation/",label:"Gutter Installation"},{href:"/services/storm-damage/",label:"Storm Damage Repair"},{href:"/services/emergency-roofing/",label:"Emergency Roofing"}],a=[{href:"/locations/rehoboth-ma/",label:"Rehoboth, MA"},{href:"/locations/fall-river-ma/",label:"Fall River, MA"},{href:"/locations/canton-ma/",label:"Canton, MA"},{href:"/locations/easton-ma/",label:"South Easton, MA"},{href:"/locations/norfolk-ma/",label:"Norfolk, MA"},{href:"/locations/medfield-ma/",label:"Medfield, MA"}],o=[{href:"/locations/barrington-ri/",label:"Barrington, RI"}];function i({open:e}){return(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 20 20",fill:"currentColor",className:"inline-block ml-1 transition-transform duration-200",style:{transform:e?"rotate(180deg)":"rotate(0deg)"},children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",clipRule:"evenodd"})})}function c(){return(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",className:"flex-shrink-0",style:{color:"#c8102e"},children:(0,t.jsx)("path",{d:"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"})})}function u(){return(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",className:"flex-shrink-0",style:{color:"#c8102e"},children:(0,t.jsx)("path",{d:"M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"})})}function d(){return(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",className:"flex-shrink-0",style:{color:"#c8102e"},children:(0,t.jsx)("path",{d:"M15.5 2.1L11 6.6l1.4 4L7 16H4l-2 4 2 2 4-2v-3l5.4-5.4 4 1.4 4.5-4.5C19.5 4.6 17.4 1.5 15.5 2.1z"})})}function f({label:e,href:l,children:s}){let[a,o]=(0,n.useState)(!1),c=(0,n.useRef)(null),u=(0,n.useRef)(null);return(0,n.useEffect)(()=>{let e=e=>{c.current&&!c.current.contains(e.target)&&o(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,t.jsxs)("div",{ref:c,className:"relative",onMouseEnter:()=>{u.current&&clearTimeout(u.current),o(!0)},onMouseLeave:()=>{u.current=setTimeout(()=>
1o(!1),120)},children:[(0,t.jsxs)(r.default,{href:l,className:"flex items-center gap-0.5 text-sm font-bold uppercase tracking-wide hover:text-yellow-300 transition-colors py-1",style:{letterSpacing:"0.08em",fontFamily:"var(--font-display), Oswald, sans-serif"},children:[e,(0,t.jsx)(i,{open:a})]}),(0,t.jsxs)("div",{className:"absolute z-50",style:{top:"calc(100% + 8px)",left:0,opacity:+!!a,pointerEvents:a?"auto":"none",transform:a?"translateY(0)":"translateY(-6px)",transition:"opacity 0.18s ease, transform 0.18s ease",minWidth:"220px"},children:[(0,t.jsx)("div",{style:{width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent",borderBottom:"7px solid #1a3a5c",marginLeft:"12px"}}),(0,t.jsx)("div",{className:"rounded-2xl overflow-hidden",style:{background:"#0d2137",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 24px 64px rgba(0,0,0,0.45), 0 4px 16px rgba(0,0,0,0.25)"},children:s})]})]})}function p({label:e,href:l,onClose:s,children:a}){let[o,c]=(0,n.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b",style:{borderColor:"rgba(255,255,255,0.08)"},children:[(0,t.jsx)(r.default,{href:l,className:"flex-1 py-3 px-2 font-semibold hover:text-red-400 transition-colors",onClick:s,children:e}),(0,t.jsx)("button",{className:"px-3 py-3 text-blue-300 hover:text-white",onClick:()=>c(!o),"aria-label":`Expand ${e}`,children:(0,t.jsx)(i,{open:o})})]}),o&&(0,t.jsx)("div",{className:"py-2 px-4",style:{background:"rgba(0,0,0,0.2)"},children:a})]})}e.s(["default",0,function(){let[e,i]=(0,n.useState)(!1),h=()=>i(!1);return(0,t.jsxs)("header",{className:"sticky top-0 z-40 text-white",style:{backgroundColor:"var(--navy, #071d49)"},children:[(0,t.jsx)("div",{className:"hidden md:block px-4 py-2 text-xs",style:{backgroundColor:"var(--navy-dark)",borderBottom:"1px solid rgba(255,255,255,0.06)"},children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-5 font-medium",style:{color:"rgba(255,255,255,0.6)",fontFamily:"var(--font-poppins), Poppins, sans-serif"},children:[(0,t.jsx)("span",{children:"â Licensed & Insured MA & RI"}),(0,t.jsx)("span",{className:"opacity-30",children:"|"}),(0,t.jsx)("span",{children:"â Free Roof Inspection"}),(0,t.jsx)("span",{className:"opacity-30",children:"|"}),(0,t.jsx)("span",{children:"â 24/7 Emergency Service"})]}),(0,t.jsxs)("a",{href:"tel:5082577972",className:"flex items-center gap-1.5 font-bold text-white hover:opacity-80 transition-opacity",style:{fontFamily:"var(--font-display), Oswald, sans-serif",letterSpacing:"0.05em"},children:[(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",children:(0,t.jsx)("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"})}),"508-257-7972"]})]})}),(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:(0,t.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,t.jsxs)(r.default,{href:"/",className:"flex items-center gap-2 flex-shrink-0","aria-label":"Roofing Doctor â home",children:[(0,t.jsx)("span",{className:"w-9 h-9 rounded-lg flex items-center justify-center flex-shrink-0",style:{background:"linear-gradient(135deg, #c8102e, #a50d26)"},children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",fill:"white",className:"w-5 h-5",children:(0,t.jsx)("path",{d:"M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z"})})}),(0,t.jsxs)("span",{className:"leading-none",children:[(0,t.jsx)("span",{className:"block text-white font-extrabold text-lg tracking-tight",style:{fontFamily:"var(--font-display), Oswald, sans-serif"},children:"ROOFING DOCTOR"}),(0,t.jsx)("span",{className:"block text-[10px] font-semibold tracking-widest uppercase",style:{color:"var(--gold)"},children:"MA & RI Roofing Contractors"})]})]}),(0,t.jsxs)("nav",{className:"hidden md:flex items-center gap-6 text-sm",children:[(0,t.jsx)(f,{label:"Services",href:"/services/",children:(0,t.jsxs)("div",{className:"p-2",children:[s.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2.5 px-3 py-2.5 rounded-xl text-sm font-medium text-blue-100 hover:bg-white/10 hover:text-white transition-all",children:[(0,t.jsx)(d,{}),e.label]},e.href)),(0,t.jsx)("div",{className:"mt-2 pt-2",style:{borderTop:"1px solid rgba(255,255,255,0.08)"},children:(0,t.jsxs)(r.default,{href:"/services/",className:"flex items-center justify-between px-3 py-2 rounded-xl text-xs font-bold text-red-400 hover:bg-white/10 transition-all",children:[(0,t.jsx)("span",{children:"View All Services"}),(0,t.jsx)("span",{children:"â"})]})})]})}),(0,t.jsx)(f,{label:"Locations",href:"/locations/",children:(0,t.jsxs)("div",{className:"p-2",style:{minWidth:"240px"},children:[(0,t.jsx)("p",{className:"px-3 pb-1 pt-1 text-xs font-extrabold uppercase tracking-widest",style:{color:"rgba(201,168,76,0.8)"},children:"Massachusetts"}),a.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-blue-100 hover:bg-white/10 hover:text-white transition-all",children:[(0,t.jsx)(c,{}),e.label]},e.href)),(0,t.jsxs)("div",{className:"mt-2 pt-2",style:{borderTop:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("p",{className:"px-3 pb-1 text-xs font-extrabold uppercase tracking-widest",style:{color:"rgba(201,168,76,0.8)"},children:"Rhode Island"}),o.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-blue-100 hover:bg-white/10 hover:text-white transition-all",children:[(0,t.jsx)(c,{}),e.label]},e.href))]}),(0,t.jsxs)("div",{className:"mt-2 pt-2",style:{borderTop:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)(r.default,{href:"/locations/",className:"flex items-center justify-between px-3 py-2 rounded-xl text-xs font-bold text-red-400 hover:bg-white/10 transition-all",children:[(0,t.jsx)("span",{children:"All Locations"}),(0,t.jsx)("span",{children:"â"})]}),(0,t.jsxs)(r.default,{href:"/service-areas/",className:"flex items-center justify-between px-3 py-2 rounded-xl text-xs font-bold text-red-400 hover:bg-white/10 transition-all",children:[(0,t.jsx)("span",{children:"County Service Areas"}),(0,t.jsx)("span",{children:"â"})]})]})]})}),(0,t.jsx)(f,{label:"Resources",href:"/guides/",children:(0,t.jsx)("div",{className:"p-2",children:l.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2.5 px-3 py-2.5 rounded-xl text-sm font-medium text-blue-100 hover:bg-white/10 hover:text-white transition-all",children:[(0,t.jsx)(u,{}),e.label]},e.href))})}),(0,t.jsx)(r.default,{href:"/about/",className:"text-sm font-bold uppercase tracking-wide hover:text-yellow-300 transition-colors",style:{letterSpacing:"0.08em",fontFamily:"var(--font-display), Oswald, sans-serif"},children:"About"}),(0,t.jsx)(r.default,{href:"/contact/",className:"text-sm font-bold uppercase tracking-wide hover:text-yellow-300 transition-colors",style:{letterSpacing:"0.08em",fontFamily:"var(--font-display), Oswald, sans-serif"},children:"Contact"}),(0,t.jsxs)("a",{href:"tel:5082577972",className:"flex items-center gap-2 text-white font-bold text-sm px-5 py-3 transition-all ml-2",style:{background:"var(--red)",fontFamily:"var(--font-display), Oswald, sans-serif",letterSpacing:"0.06em"},children:[(0,t.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"white",children:(0,t.jsx)("path",{d:"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.
167-.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"})}),"508-257-7972"]})]}),(0,t.jsx)("button",{className:"md:hidden p-2 rounded-lg hover:bg-white/10 transition-colors",onClick:()=>i(!e),"aria-label":"Toggle menu",children:(0,t.jsx)("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e?(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"}):(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})]})}),e&&(0,t.jsx)("div",{className:"md:hidden px-4 pb-4",style:{background:"#0a1929",borderTop:"1px solid rgba(255,255,255,0.08)"},children:(0,t.jsxs)("nav",{className:"flex flex-col text-sm font-medium text-white pt-2",children:[(0,t.jsx)(p,{label:"Services",href:"/services/",onClose:h,children:s.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2 py-2.5 text-sm text-blue-200 hover:text-white transition-colors",onClick:h,children:[(0,t.jsx)(d,{}),e.label]},e.href))}),(0,t.jsxs)(p,{label:"Locations",href:"/locations/",onClose:h,children:[(0,t.jsx)("p",{className:"text-xs font-bold uppercase tracking-widest pt-1 pb-2",style:{color:"rgba(201,168,76,0.8)"},children:"Massachusetts"}),a.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2 py-2.5 text-sm text-blue-200 hover:text-white transition-colors",onClick:h,children:[(0,t.jsx)(c,{}),e.label]},e.href)),(0,t.jsx)("p",{className:"text-xs font-bold uppercase tracking-widest pt-3 pb-2",style:{color:"rgba(201,168,76,0.8)"},children:"Rhode Island"}),o.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2 py-2.5 text-sm text-blue-200 hover:text-white transition-colors",onClick:h,children:[(0,t.jsx)(c,{}),e.label]},e.href)),(0,t.jsx)(r.default,{href:"/service-areas/",className:"flex items-center gap-2 py-2.5 text-sm font-bold text-red-400 hover:text-white transition-colors",onClick:h,children:"County Service Areas â"})]}),(0,t.jsx)(p,{label:"Resources",href:"/guides/",onClose:h,children:l.map(e=>(0,t.jsxs)(r.default,{href:e.href,className:"flex items-center gap-2 py-2.5 text-sm text-blue-200 hover:text-white transition-colors",onClick:h,children:[(0,t.jsx)(u,{}),e.label]},e.href))}),(0,t.jsx)(r.default,{href:"/about/",className:"py-3 px-2 hover:text-red-400 border-b transition-colors",style:{borderColor:"rgba(255,255,255,0.08)"},onClick:h,children:"About"}),(0,t.jsx)(r.default,{href:"/contact/",className:"py-3 px-2 hover:text-red-400 border-b transition-colors",style:{borderColor:"rgba(255,255,255,0.08)"},onClick:h,children:"Contact"}),(0,t.jsxs)("a",{href:"tel:5082577972",className:"mt-4 flex items-center justify-center gap-2 text-white font-bold text-lg py-4 rounded-xl",style:{background:"linear-gradient(135deg, #c8102e, #a50d26)",boxShadow:"0 4px 14px rgba(200,16,46,0.4)",minHeight:"56px"},onClick:h,children:[(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"white",children:(0,t.jsx)("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"})}),"Call Now â 508-257-7972"]})]})})]})}])},62396,e=>{"use strict";var t=e.i(96269);e.s(["default",0,function(){return(0,t.jsx)("div",{className:"fixed bottom-0 left-0 right-0 z-50 md:hidden",children:(0,t.jsxs)("a",{href:"tel:5082577972",className:"flex items-center justify-center gap-3 w-full bg-red-600 hover:bg-red-700 active:bg-red-800 text-white font-bold text-lg py-4 px-6 shadow-2xl transition-colors",style:{minHeight:"64px"},"aria-label":"Call Roofing Doctor now for a free roof inspection",children:[(0,t.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-6 h-6 flex-shrink-0 animate-pulse","aria-hidden":"true",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M1.5 4.5a3 3 0 013-3h1.372c.86 0 1.61.586 1.819 1.42l1.105 4.423a1.875 1.875 0 01-.694 1.955l-1.293.97c-.135.101-.164.249-.126.352a11.285 11.285 0 006.697 6.697c.103.038.25.009.352-.126l.97-1.293a1.875 1.875 0 011.955-.694l4.423 1.105c.834.209 1.42.959 1.42 1.82V19.5a3 3 0 01-3 3h-2.25C8.552 22.5 1.5 15.448 1.5 6.75V4.5z",clipRule:"evenodd"})}),(0,t.jsx)("span",{children:"Call Now â Free Roof Inspection"}),(0,t.jsx)("span",{className:"text-red-200 text-base font-semibold",children:"508-257-7972"})]})})}])},92849,(e,t,r)=>{"use strict";
1Object.defineProperty(r,"__esModule",{value:!0});var n={cancelIdleCallback:function(){return a},requestIdleCallback:function(){return s}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let s="u">typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)},a="u">typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},96994,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return b},handleClientScriptLoad:function(){return x},initScriptLoader:function(){return g}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let s=e.r(70275),a=e.r(90613),o=e.r(96269),i=s._(e.r(28217)),c=a._(e.r(56209)),u=e.r(61493),d=e.r(76248),f=e.r(92849),p=new Map,h=new Set,m=e=>{let{src:t,id:r,onLoad:n=()=>{},onReady:l=null,dangerouslySetInnerHTML:s,children:a="",strategy:o="afterInteractive",onError:c,stylesheets:u}=e,f=r||t;if(f&&h.has(f))return;if(p.has(t)){h.add(f),p.get(t).then(n,c);return}let m=()=>{l&&l(),h.add(f)},x=document.createElement("script"),g=new Promise((e,t)=>{x.addEventListener("load",function(t){e(),n&&n.call(this,t),m()}),x.addEventListener("error",function(e){t(e)})}).catch(function(e){c&&c(e)});s?(x.innerHTML=s.__html||"",m()):a?(x.textContent="string"==typeof a?a:Array.isArray(a)?a.join(""):"",m()):t&&(x.src=t,p.set(t,g)),(0,d.setAttributesFromProps)(x,e),"worker"===o&&x.setAttribute("type","text/partytown"),x.setAttribute("data-nscript",o),u&&(e=>{if(i.default.preinit)return e.forEach(e=>{i.default.preinit(e,{as:"style"})});if("u">typeof window){let t=document.head;e.forEach(e=>{let r=document.createElement("link");r.type="text/css",r.rel="stylesheet",r.href=e,t.appendChild(r)})}})(u),document.body.appendChild(x)};function x(e){let{strategy:t="afterInteractive"}=e;"lazyOnload"===t?window.addEventListener("load",()=>{(0,f.requestIdleCallback)(()=>m(e))}):m(e)}function g(e){e.forEach(x),[...document.querySelectorAll('[data-nscript="beforeInteractive"]'),...document.querySelectorAll('[data-nscript="beforePageRender"]')].forEach(e=>{let t=e.id||e.getAttribute("src");h.add(t)})}function y(e){let{id:t,src:r="",onLoad:n=()=>{},onReady:l=null,strategy:s="afterInteractive",onError:a,stylesheets:d,...p}=e,{updateScripts:x,scripts:g,getIsSsr:y,appDir:b,nonce:v}=(0,c.useContext)(u.HeadManagerContext);v=p.nonce||v;let w=(0,c.useRef)(!1);(0,c.useEffect)(()=>{let e=t||r;w.current||(l&&e&&h.has(e)&&l(),w.current=!0)},[l,t,r]);let j=(0,c.useRef)(!1);if((0,c.useEffect)(()=>{if(!j.current){if("afterInteractive"===s)m(e);else"lazyOnload"===s&&("complete"===document.readyState?(0,f.requestIdleCallback)(()=>m(e)):window.addEventListener("load",()=>{(0,f.requestIdleCallback)(()=>m(e))}));j.current=!0}},[e,s]),("beforeInteractive"===s||"worker"===s)&&(x?(g[s]=(g[s]||[]).concat([{id:t,src:r,onLoad:n,onReady:l,onError:a,...p,nonce:v}]),x(g)):y&&y()?h.add(t||r):y&&!y()&&m({...e,nonce:v})),b){if(d&&d.forEach(e=>{i.default.preinit(e,{as:"style"})}),"beforeInteractive"===s)if(!r)return p.dangerouslySetInnerHTML&&(p.children=p.dangerouslySetInnerHTML.__html,delete p.dangerouslySetInnerHTML),(0,o.jsx)("script",{nonce:v,dangerouslySetInnerHTML:{__html:`(self.__next_s=self.__next_s||[]).push(${JSON.stringify([0,{...p,id:t}])})`}});else return i.default.preload(r,p.integrity?{as:"script",integrity:p.integrity,nonce:v,crossOrigin:p.crossOrigin}:{as:"script",nonce:v,crossOrigin:p.crossOrigin}),(0,o.jsx)("script",{nonce:v,dangerouslySetInnerHTML:{__html:`(self.__next_s=self.__next_s||[]).push(${JSON.stringify([r,{...p,id:t}])})`}});"afterInteractive"===s&&r&&i.default.preload(r,p.integrity?{as:"script",integrity:p.integrity,nonce:v,crossOrigin:p.crossOrigin}:{as:"script",nonce:v,crossOrigin:p.crossOrigin})}return null}Object.defineProperty(y,"__nextScript",{value:!0});let b=y;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esMo
1dule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},69499,(e,t,r)=>{t.exports=e.r(96994)},28571,(e,t,r)=>{t.exports=e.r(79765)},35299,e=>{"use strict";var t=e.i(96269),r=e.i(69499),n=e.i(28571),l=e.i(42522),s=e.i(56209);let a="GTM-57B6HMVJ";function o(e){window.dataLayer=window.dataLayer||[],window.dataLayer.push(e)}function i(e){let t=e.split("/").filter(Boolean);return"locations"===t[0]&&t[1]?{page_type:t[2]?t[2].includes("roof")||t[2].includes("storm")?"geo_service":"spoke":"city",city_slug:t[1],service_slug:t[2]??null}:"services"===t[0]?{page_type:"service",city_slug:null,service_slug:t[1]??null}:"service-areas"===t[0]?{page_type:"county",city_slug:null,service_slug:null}:"best"===t[0]?{page_type:"listicle",city_slug:null,service_slug:null}:0===t.length?{page_type:"home",city_slug:null,service_slug:null}:{page_type:t[0],city_slug:null,service_slug:null}}function c(e){return e.closest("[data-track-placement]")?e.closest("[data-track-placement]").getAttribute("data-track-placement"):e.closest("nav")?"nav":e.closest("footer")?"footer":e.closest("header")?"header":"body"}e.s(["GTMNoScript",0,function(){return(0,t.jsx)("noscript",{children:(0,t.jsx)("iframe",{src:`https://www.googletagmanager.com/ns.html?id=${a}`,height:"0",width:"0",style:{display:"none",visibility:"hidden"},title:"Google Tag Manager"})})},"GTM_ID",0,a,"default",0,function(){let e=(0,n.usePathname)(),u=(0,s.useRef)(null),d=(0,s.useRef)(new Set);return(0,s.useEffect)(()=>{if(u.current===e)return;u.current=e,d.current=new Set;let t=(0,l.captureAttribution)();o({event:"page_context",...i(e),page_path:e,gclid:t.gclid??null,utm_source:t.utm_source??null,utm_campaign:t.utm_campaign??null})},[e]),(0,s.useEffect)(()=>{let e=()=>i(window.location.pathname),t=t=>{let r=t.target?.closest?.("a,button");if(!r)return;let n=r.getAttribute("href")||"";if(n.startsWith("tel:"))return void o({event:"phone_click",phone_number:n.replace("tel:","").trim(),placement:c(r),link_text:(r.textContent||"").trim().slice(0,80),...e()});let l=(r.textContent||"").trim().slice(0,80);/estimate|inspection|quote|schedule|get started|contact us|free roof/i.test(l)?o({event:"cta_click",cta_label:l,cta_destination:n||null,placement:c(r),...e()}):/^https?:\/\//.test(n)&&!n.includes("callroofdoctors.com")&&o({event:"outbound_click",outbound_url:n,link_text:l,...e()})},r=()=>{let t=document.documentElement,r=Math.round((t.scrollTop+window.innerHeight)/t.scrollHeight*100);for(let t of[25,50,75,90])r>=t&&!d.current.has(t)&&(d.current.add(t),o({event:"scroll_depth",percent_scrolled:t,...e()}))},n=t=>{if(!/leadconnectorhq\.com|msgsndr\.com/.test(t.origin))return;let r="string"==typeof t.data?t.data:JSON.stringify(t.data??"");/submit|success|complete|thank/i.test(r)&&o({event:"form_submit",form_id:"vo5X1uyU8V4v6WvQj2PN",form_name:"Request a Free Roofing Estimate",form_signal:r.slice(0,200),...e()})};return document.addEventListener("click",t,{capture:!0}),window.addEventListener("scroll",r,{passive:!0}),window.addEventListener("message",n),()=>{document.removeEventListener("click",t,{capture:!0}),window.removeEventListener("scroll",r),window.removeEventListener("message",n)}},[]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.default,{id:"dl-seed",strategy:"beforeInteractive",children:`window.dataLayer=window.dataLayer||[];(function(){var s=location.pathname.split('/').filter(Boolean); 2var t='home',c=null,v=null; 3if(s[0]==='locations'&&s[1]){c=s[1];v=s[2]||null;t=s[2]?((s[2].indexOf('roof')>-1||s[2].indexOf('storm')>-1)?'geo_service':'spoke'):'city';} 4else if(s[0]==='services'){t='service';v=s[1]||null;} 5else if(s[0]==='service-areas'){t='county';} 6else if(s[0]==='best'){t='listicle';} 7else if(s.length){t=s[0];} 8window.dataLayer.push({page_type:t,city_slug:c,service_slug:v,page_path:location.pathname});})();`}),(0,t.jsx)(r.default,{id:"gtm-init",strategy:"afterInteractive",children:`(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'}); 9var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:''; 10j.async=true;
10j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 11})(window,document,'script','dataLayer','${a}');`})]})},"pageContext",0,i])}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.