# Hail Damage Roof Repair

```
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Archivo:wght@500;600;700;800&family=Public+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Newsreader:ital,wght@1,400;1,500&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
<style>
/* ===== DIRECTION A — DESIGN TOKENS (scoped) ===== */
.rr{
  --navy:#1F4068; --royal:#355EA4; --sky:#6A9FDB;
  --white:#FFFFFF; --offwhite:#FAF7F1; --slate:#2C3742; --slate-grey:#5A6672; --cool-grey:#9AA6B2;
  --orange:#FF8C42; --orange-deep:#E87A35;
  --line:#e4ddd0; --line-cool:#e7eaee; --navy-deep:#15314F;
  --r-sm:6px; --r-md:10px; --r-lg:16px; --r-pill:999px;
  --shadow-sm:0 2px 10px rgba(20,46,71,.08);
  --shadow-md:0 10px 30px rgba(20,46,71,.12);
  --shadow-lg:0 24px 60px rgba(20,46,71,.18);
  --maxw:1200px;
  font-family:'Public Sans',system-ui,-apple-system,sans-serif;
  color:var(--slate); line-height:1.6; -webkit-font-smoothing:antialiased;
}
.rr *{box-sizing:border-box;margin:0;padding:0}
.rr img{max-width:100%;display:block}
.rr .rr-wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
.rr h1,.rr h2,.rr h3,.rr h4{font-family:'Archivo',sans-serif;font-weight:800;color:var(--navy);line-height:1.06;letter-spacing:-.01em}
.rr section{position:relative}

.rr-eyebrow{font-family:'Public Sans';font-weight:600;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--royal);display:inline-block;margin-bottom:16px}
.rr-eyebrow.on-dark{color:var(--sky)}
.rr-section{padding:86px 0}
.rr-section.is-navy{background:var(--navy);color:#dbe4ee}
.rr-section.is-navy h2,.rr-section.is-navy h3{color:#fff}
.rr-shead{max-width:680px;margin:0 auto 52px;text-align:center}
.rr-shead h2{font-size:clamp(28px,3.6vw,44px)}
.rr-shead p{margin-top:16px;color:var(--slate-grey);font-size:17px}
.rr-section.is-navy .rr-shead p{color:#aab8c7}

.rr-btn{display:inline-flex;align-items:center;gap:10px;font-family:'Public Sans';font-weight:700;font-size:16px;text-decoration:none;border-radius:var(--r-sm);padding:16px 30px;border:2px solid transparent;cursor:pointer;transition:.18s ease;text-align:center;line-height:1.1}
.rr-btn-primary{background:var(--orange);color:#fff}
.rr-btn-primary:hover{background:var(--orange-deep);transform:translateY(-1px)}
.rr-btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.5)}
.rr-btn-ghost:hover{border-color:#fff;background:rgba(255,255,255,.08)}
.rr-stars{color:var(--sky);letter-spacing:2px;font-size:15px}

/* ===== HERO ===== */
.rr-hero{background:linear-gradient(100deg,rgba(14,25,36,.78) 0%,rgba(20,46,71,.60) 45%,rgba(20,46,71,.24) 100%),url('IMG') center/cover no-repeat;color:#fff;padding:64px 0 72px;overflow:hidden}
.rr-hero-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:48px;align-items:start}@media(min-width:981px){.rr-hero-grid>.rr-hero-form{margin-top:36px}}
.rr-hero-eyebrow{font-family:'Space Mono';font-weight:700;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--sky);margin-bottom:18px}
.rr-hero h1{color:#fff;font-size:clamp(34px,4.6vw,58px);line-height:1.02}
.rr-hero .rr-tagline{font-family:'Archivo';font-weight:700;font-size:clamp(18px,2vw,24px);color:var(--sky);margin-top:14px;letter-spacing:-.01em}
.rr-hero-services{margin-top:16px;font-family:'Public Sans';font-weight:600;font-size:13px;letter-spacing:.04em;color:#bcd0e4;text-transform:uppercase}
.rr-hero .rr-sub{margin-top:22px;font-size:18px;color:#d6e0ea;max-width:560px}
.rr-hero-ctas{display:flex;flex-wrap:wrap;gap:14px;margin-top:30px}
.rr-trustline{display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;margin-top:34px;padding-top:26px;border-top:1px solid rgba(255,255,255,.18)}
.rr-trustline .item{font-size:13px;font-weight:600;color:#d2dde8;white-space:nowrap}
.rr-trustline .trust-pills{flex-basis:100%;display:flex;flex-wrap:wrap;gap:10px}
.rr-trustline .g-rating{display:flex;align-items:center;gap:8px;font-weight:700;color:#fff}

.rr-hero-form{background:#fff;border-radius:var(--r-lg);padding:30px;box-shadow:var(--shadow-lg);color:var(--slate)}
.rr-hero-form .fh{margin-bottom:18px}
.rr-hero-form .fh h3{font-size:22px}
.rr-hero-form .fh p{font-size:14px;color:var(--slate-grey);margin-top:6px}
.rr-hero-form .privacy{font-size:12px;color:var(--cool-grey);margin-top:14px;text-align:center}
.rr-hero-form .frm_forms input[type=text],.rr-hero-form .frm_forms input[type=email],.rr-hero-form .frm_forms input[type=tel],.rr-hero-form .frm_forms select,.rr-hero-form .frm_forms textarea,.rr-hero-form .mock-field{width:100%;font-family:'Public Sans';font-size:15px;color:var(--slate);background:var(--offwhite);border:1.5px solid var(--line-cool);border-radius:var(--r-sm);padding:13px 14px;margin-bottom:12px;transition:.15s ease}
.rr-hero-form .frm_forms input:focus,.rr-hero-form .mock-field:focus{outline:none;border-color:var(--royal);background:#fff;box-shadow:0 0 0 3px rgba(53,94,164,.12)}
.rr-hero-form .frm_forms .frm_submit button,.rr-hero-form .mock-submit{width:100%;font-family:'Public Sans';font-weight:700;font-size:16px;color:#fff;background:var(--royal);border:none;border-radius:var(--r-sm);padding:15px;cursor:pointer;transition:.18s ease}
.rr-hero-form .frm_forms .frm_submit button:hover,.rr-hero-form .mock-submit:hover{background:var(--navy)}
.rr-hero-form .frm_forms .frm_submit{margin:0}

/* ===== TRUST BADGE BAR ===== */
.rr-badgebar{background:var(--white);border-bottom:1px solid var(--line-cool);padding:22px 0}
.rr-badgebar .row{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:18px 38px}
.rr-badge{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600;color:var(--slate);white-space:nowrap}
.rr-badge .dot{width:7px;height:7px;border-radius:50%;background:var(--sky)}
.rr-badge strong{color:var(--navy)}

/* ===== STATS BAND ===== */
.rr-stats{background:var(--navy);color:#fff;padding:54px 0}
.rr-stats .grid{display:grid;grid-template-columns:repeat(5,1fr);gap:18px;text-align:center}
.rr-stat .num{font-family:'Archivo';font-weight:800;font-size:clamp(30px,4vw,46px);color:var(--sky);line-height:1}
.rr-stat .lbl{font-size:12.5px;font-weight:600;color:#aebccb;margin-top:8px;letter-spacing:.02em}

/* ===== THE REASONABLE STANDARD ===== */
.rr-standard{background:var(--offwhite)}
.rr-steps{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line)}
.rr-step{padding:34px 26px 8px;border-right:1px solid var(--line)}
.rr-step:last-child{border-right:none}
.rr-step .idx{font-family:'Space Mono';font-weight:700;font-size:15px;color:var(--royal)}
.rr-step .tick{width:26px;height:2px;background:var(--sky);margin:14px 0 16px}
.rr-step h3{font-size:20px;text-transform:uppercase;letter-spacing:.01em}
.rr-step p{margin-top:10px;color:var(--slate-grey);font-size:14.5px}

/* ===== SERVICES ===== */
.rr-services-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.rr-card{background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);overflow:hidden;text-decoration:none;color:inherit;transition:.2s ease;display:flex;flex-direction:column}
.rr-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--sky)}
.rr-card .img{aspect-ratio:16/10;background:linear-gradient(135deg,#1d3a57,var(--navy));position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}
.rr-card .img img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.rr-card:hover .img img{transform:scale(1.04)}
.rr-card .body{padding:22px}
.rr-card h3{font-size:19px}
.rr-card p{margin-top:8px;color:var(--slate-grey);font-size:14.5px}
.rr-card .more{margin-top:14px;font-weight:700;font-size:14px;color:var(--royal)}
.ph-label{font-family:'Space Mono';font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.66);text-align:center;padding:10px 14px;border:1px dashed rgba(255,255,255,.3);border-radius:6px;max-width:80%}

/* ===== WHY ===== */
.rr-why{background:var(--offwhite)}
.rr-pillars{display:grid;grid-template-columns:repeat(2,1fr);gap:22px}
.rr-pillar{background:#fff;border:1px solid var(--line);border-radius:var(--r-md);padding:30px}
.rr-pillar .pidx{font-family:'Space Mono';font-weight:700;color:var(--sky);font-size:13px}
.rr-pillar h3{font-size:21px;margin-top:6px}
.rr-pillar .promise{color:var(--slate);margin-top:10px;font-size:15.5px}
.rr-pillar .proof{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);font-size:13.5px;color:var(--slate-grey)}
.rr-pillar .proof b{color:var(--navy)}

/* ===== WORK + MAP ===== */
.rr-work-grid{display:grid;grid-template-columns:2fr 1fr;gap:22px}
.rr-work-main,.rr-work-map{border-radius:var(--r-md);overflow:hidden;min-height:360px;display:flex;align-items:center;justify-content:center;position:relative}
.rr-work-main img{width:100%;height:100%;object-fit:cover}
.rr-work-map{background:linear-gradient(135deg,#274a6c,#27517f)}

/* ===== REVIEWS ===== */
.rr-reviews .topline{text-align:center;margin-bottom:40px}
.rr-reviews .topline .big{font-family:'Archivo';font-weight:800;font-size:40px;color:#fff;display:flex;align-items:center;justify-content:center;gap:12px}
.rr-reviews .topline .sub{color:#aab8c7;font-size:14px;margin-top:6px}
.rr-quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.rr-quote{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:var(--r-md);padding:26px}
.rr-quote .rr-stars{margin-bottom:14px}
.rr-quote blockquote{font-family:'Newsreader';font-style:italic;font-size:18px;line-height:1.5;color:#eaf0f6}
.rr-quote .who{margin-top:16px;font-size:13px;font-weight:600;color:var(--sky)}

/* ===== FINANCING ===== */
.rr-fin{background:var(--offwhite)}
.rr-fin-grid{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}
.rr-fin .lead{font-family:'Archivo';font-weight:800;font-size:clamp(26px,3vw,38px);color:var(--navy)}
.rr-fin p{margin-top:16px;color:var(--slate-grey);font-size:16px}
.rr-fin .paycard{background:var(--navy);color:#fff;border-radius:var(--r-lg);padding:34px;text-align:center;box-shadow:var(--shadow-md)}
.rr-fin .paycard .est{font-size:13px;color:#aebccb;letter-spacing:.04em;text-transform:uppercase}
.rr-fin .paycard .amt{font-family:'Archivo';font-weight:800;font-size:46px;color:var(--sky);margin:8px 0}
.rr-fin .paycard .note{font-size:13px;color:#aebccb}

/* ===== COMMUNITIES ===== */
.rr-comm-grid{display:grid;grid-template-columns:1fr 1.2fr;gap:40px;align-items:center}
.rr-counties{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}
.rr-county{font-family:'Public Sans';font-weight:600;font-size:13px;color:var(--navy);background:#fff;border:1px solid var(--sky);border-radius:var(--r-pill);padding:8px 16px}
.rr-comm-map{min-height:320px;border-radius:var(--r-md);background:linear-gradient(135deg,#274a6c,#27517f);display:flex;align-items:center;justify-content:center}

/* ===== FINAL CTA ===== */
.rr-final{background:linear-gradient(160deg,var(--navy) 0%,var(--navy-deep) 100%);color:#fff;text-align:center;padding:80px 0}
.rr-final h2{color:#fff;font-size:clamp(28px,3.4vw,42px)}
.rr-final p{color:#c6d3e0;font-size:17px;margin-top:14px;max-width:560px;margin-left:auto;margin-right:auto}
.rr-final .rr-hero-ctas{justify-content:center}
.rr-final .phones{margin-top:22px;font-size:14px;color:#aab8c7}
.rr-final .phones a{color:#fff;text-decoration:none;font-weight:700}

.rr .rr-reveal{opacity:0;transform:translateY(16px);transition:opacity .6s ease,transform .6s ease}
.rr .rr-reveal.is-in{opacity:1;transform:none}

@media(max-width:980px){
  .rr-hero-grid{grid-template-columns:1fr;gap:34px}
  .rr-stats .grid{grid-template-columns:repeat(2,1fr);gap:28px 18px}
  .rr-services-grid,.rr-quotes{grid-template-columns:1fr 1fr}
  .rr-steps{grid-template-columns:1fr 1fr}
  .rr-step{border-bottom:1px solid var(--line)}
  .rr-step:nth-child(odd){border-right:1px solid var(--line)}
  .rr-pillars,.rr-work-grid,.rr-fin-grid,.rr-comm-grid{grid-template-columns:1fr}
}
@media(max-width:620px){
  .rr-section{padding:60px 0}
  .rr-services-grid,.rr-quotes,.rr-stats .grid,.rr-steps{grid-template-columns:1fr}
  .rr-step{border-right:none}
  .rr-btn{width:100%;justify-content:center}
}

/* ================= HEADER ================= */
.rr{--util-h:38px}
.rr section{scroll-margin-top:118px}
.rr-header{position:sticky;top:0;z-index:1000;font-family:'Public Sans',sans-serif}
/* utility bar */
.rr-util{background:var(--navy-deep);color:#aebccb;font-size:12.5px;transition:max-height .3s ease,opacity .25s ease;max-height:60px;overflow:hidden}
.rr-util-row{display:flex;align-items:center;justify-content:space-between;height:var(--util-h)}
.rr-util-left{display:flex;gap:22px}
.rr-util-left span{display:flex;align-items:center;gap:6px;font-weight:600;letter-spacing:.02em}
.rr-util-left .star{color:var(--sky)}
.rr-util-right{display:flex;align-items:center;gap:14px}
.rr-util-right a{color:#cdd9e6;text-decoration:none;font-weight:600}
.rr-util-right a:hover{color:#fff}
.rr-util-right .sep{color:#3c5573}
.rr-util-right .hours{color:#7e93ab}
/* main nav */
.rr-nav{background:#fff;border-bottom:1px solid var(--line-cool);transition:box-shadow .25s ease,padding .25s ease}
.rr-nav-row{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;transition:padding .25s ease}
.rr-logo img{height:46px;width:auto;transition:height .25s ease}
.rr-navlinks{display:flex;align-items:center;gap:26px}
.rr-navlinks a{color:var(--navy);text-decoration:none;font-weight:600;font-size:15px;letter-spacing:-.01em;transition:color .15s ease}
.rr-navlinks a:hover{color:var(--royal)}
.rr-nav-item{position:relative}
.rr-nav-item>a{display:inline-flex;align-items:center;gap:5px}
.rr-mega{position:absolute;top:calc(100% + 14px);left:50%;transform:translateX(-50%) translateY(8px);background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:14px;display:grid;grid-template-columns:1fr 1fr;gap:4px;width:430px;opacity:0;visibility:hidden;transition:.2s ease}
.rr-nav-item:hover .rr-mega{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.rr-mega::before{content:"";position:absolute;top:-14px;left:0;right:0;height:14px}
.rr-mega a{display:block;padding:11px 13px;border-radius:var(--r-sm);transition:background .15s ease}
.rr-mega a:hover{background:var(--offwhite)}
.rr-mega a .mt{font-weight:700;font-size:14.5px;color:var(--navy);display:block}
.rr-mega a .md{font-size:12px;color:var(--slate-grey);margin-top:2px}
.rr-nav-cta{display:flex;align-items:center;gap:18px}
.rr-nav-phone{color:var(--navy);text-decoration:none;font-weight:800;font-size:16px;white-space:nowrap}
.rr-nav-phone:hover{color:var(--royal)}
.rr-nav-btn{padding:12px 22px;font-size:14.5px}
.rr-burger{display:none;background:none;border:none;cursor:pointer;width:42px;height:42px;flex-direction:column;justify-content:center;gap:5px;padding:9px}
.rr-burger span{display:block;height:2.5px;background:var(--navy);border-radius:2px;transition:.25s ease}
/* stuck state */
.rr-header.is-stuck .rr-util{max-height:0;opacity:0}
.rr-header.is-stuck .rr-nav{box-shadow:0 6px 24px rgba(20,46,71,.12)}
.rr-header.is-stuck .rr-nav-row{padding-top:11px;padding-bottom:11px}
.rr-header.is-stuck .rr-logo img{height:38px}
/* mobile drawer */
.rr-drawer{position:fixed;top:0;right:0;height:100%;width:88%;max-width:360px;background:#fff;z-index:1200;transform:translateX(100%);transition:transform .3s ease;box-shadow:-20px 0 60px rgba(20,46,71,.25);display:flex;flex-direction:column;padding:22px}
.rr-drawer.is-open{transform:translateX(0)}
.rr-drawer .dhead{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line-cool);padding-bottom:18px;margin-bottom:8px}
.rr-drawer .dhead img{height:40px}
.rr-drawer .dclose{background:none;border:none;font-size:26px;color:var(--navy);cursor:pointer;line-height:1}
.rr-drawer nav{display:flex;flex-direction:column;padding:8px 0}
.rr-drawer nav a{padding:14px 4px;color:var(--navy);text-decoration:none;font-weight:600;font-size:17px;border-bottom:1px solid var(--line-cool)}
.rr-drawer .dcta{margin-top:18px;display:flex;flex-direction:column;gap:12px}
.rr-drawer .dphones{margin-top:18px;font-size:14px;color:var(--slate-grey);line-height:2}
.rr-drawer .dphones a{color:var(--navy);font-weight:700;text-decoration:none}
.rr-scrim{position:fixed;inset:0;background:rgba(14,25,36,.5);z-index:1150;opacity:0;visibility:hidden;transition:.3s ease}
.rr-scrim.is-open{opacity:1;visibility:visible}
/* sticky mobile CTA */
.rr-mcta{position:fixed;bottom:0;left:0;right:0;z-index:900;display:none;gap:10px;padding:10px 14px;background:#fff;border-top:1px solid var(--line-cool);box-shadow:0 -8px 24px rgba(20,46,71,.1);transform:translateY(110%);transition:transform .3s ease}
.rr-mcta.is-show{transform:translateY(0)}
.rr-mcta a{flex:1;justify-content:center;padding:14px}

/* ====== ELEVATION: editorial eyebrows ====== */
.rr-shead .rr-eyebrow{display:inline-flex;align-items:center}
.rr-shead .rr-eyebrow::before,.rr-shead .rr-eyebrow::after{content:"";display:inline-block;width:26px;height:1px;background:var(--royal);margin:0 12px}
.rr-section.is-navy .rr-shead .rr-eyebrow::before,.rr-section.is-navy .rr-shead .rr-eyebrow::after{background:var(--sky)}
.rr-fin .rr-eyebrow::before,.rr-comm-grid .rr-eyebrow::before{content:"";display:inline-block;width:26px;height:1px;background:var(--royal);vertical-align:middle;margin-right:12px}
/* hero trust chips + depth */
.rr-hero{position:relative}
.rr-hero::after{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 78% 12%,transparent 40%,rgba(14,25,36,.35) 100%);pointer-events:none}
.rr-hero .rr-wrap{position:relative;z-index:1}
.rr-trustline .item{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);border-radius:var(--r-pill);padding:6px 14px;backdrop-filter:blur(2px)}
.rr-tagline-rule{width:54px;height:2px;background:var(--sky);margin-top:16px;border-radius:2px}
/* premium trust strip dividers */
.rr-badgebar .row{gap:0}
.rr-badge{padding:4px 26px;border-right:1px solid var(--line-cool)}
.rr-badge:last-child{border-right:none}
@media(max-width:980px){
  .rr-navlinks,.rr-nav-cta{display:none}
  .rr-burger{display:flex}
  .rr-mcta{display:flex}
  .rr-util-left span:nth-child(2),.rr-util-right .hours{display:none}
  .rr-badge{border-right:none;padding:4px 14px}
}
@media(max-width:620px){
  .rr-util-left span:nth-child(3){display:none}
  .rr-util{font-size:11.5px}
}

/* ===== TOP-THIRD REFINEMENT (final) ===== */
.rr{--util-h:34px}
.rr-util{background:var(--navy-deep);font-size:12px}
.rr-util-row{height:34px}
.rr-util-left{color:#8ea2b7}
.rr-util-left span{font-weight:500;letter-spacing:.01em}
.rr-util-left .star{color:var(--sky)}
.rr-util-right{gap:12px}
.rr-util-right a{color:#bccadb;font-weight:600}
.rr-util-right .sep{color:#39516e}
.rr-util-right .hours{color:#6f8095;font-weight:500}
.rr-nav-row{padding:20px 24px}
.rr-logo img{height:44px}
.rr-navlinks{gap:30px}
.rr-navlinks a{font-size:15px;font-weight:600;letter-spacing:-.005em}
.rr-nav-cta{gap:18px;padding-left:26px;margin-left:6px;border-left:1px solid var(--line-cool)}
.rr-nav-btn{padding:13px 24px}
.rr-header.is-stuck .rr-nav-row{padding-top:12px;padding-bottom:12px}
/* calm WHITE proof strip (replaces the second dark banner) */
.rr-stats{background:#fff;color:var(--slate);padding:64px 0;border-bottom:1px solid var(--line-cool)}
.rr-stats .grid{gap:0}
.rr-stat{position:relative;padding:6px 14px}
.rr-stat + .rr-stat::before{content:"";position:absolute;left:0;top:16%;height:68%;width:1px;background:var(--line-cool)}
.rr-stat .num{color:var(--navy)}
.rr-stat .lbl{color:var(--slate-grey);text-transform:uppercase;letter-spacing:.08em;font-size:11.5px}
@media(max-width:980px){.rr-stat + .rr-stat::before{display:none}}

/* ===== FIXES PASS ===== */
.rr-hero{padding-top:98px;padding-bottom:84px}
.rr-reviews .topline .topline-stars{display:block;font-size:30px;letter-spacing:7px;line-height:1;margin-bottom:10px;color:var(--sky)}
.rr-reviews .topline .big{display:block;gap:0;font-size:54px;line-height:1}
.rr-reviews .topline .big .of5{font-size:24px;color:#7d93ab;font-weight:700}
.rr-reviews .topline .sub{margin-top:12px}

/* ===== NAV REFINEMENT (research-led) ===== */
.rr-navlinks{gap:34px}
.rr-navlinks a{font-size:15px}
.caret{font-size:10px;opacity:.65;margin-left:2px}
.rr-mega.rr-mega-sm{grid-template-columns:1fr;width:250px}
.rr-nav-row{padding:22px 28px}
.rr-nav-cta{gap:20px;padding-left:28px}

/* ===== HEADER v3 — big-brand calm/spacious ===== */
.rr-util{background:var(--navy-deep);font-size:12px}
.rr-util-row{height:36px}
.rr-util-left{color:#93a6ba;font-weight:500;letter-spacing:.02em}
.rr-util-left .star{color:var(--sky)}
.rr-util-right{gap:14px}
.rr-util-right a{color:#c4d2df;font-weight:600}
.rr-util-right .sep{color:#39516e}
.rr-util-right .hours{color:#6f8095;font-weight:500}
.rr-nav{border-bottom:1px solid #eef1f4}
.rr-nav-row{padding:22px 30px}
.rr-logo img{height:44px}
.rr-navlinks{gap:34px}
.rr-navlinks a{font-size:15px;font-weight:600;color:var(--navy);letter-spacing:-.005em}
.rr-navlinks a:hover{color:var(--royal)}
.rr-navlinks .caret{font-size:9px;opacity:.55;margin-left:3px;vertical-align:middle}
.rr-nav-cta{gap:24px;padding-left:0;margin-left:0;border-left:none}
.rr-nav-phone{font-size:16px;font-weight:800;color:var(--navy)}
.rr-nav-phone:hover{color:var(--royal)}
.rr-nav-btn{padding:12px 26px;font-size:14.5px;border-radius:8px;box-shadow:0 6px 16px rgba(255,140,66,.26)}
.rr-nav-btn:hover{box-shadow:0 8px 22px rgba(255,140,66,.34);transform:translateY(-1px)}
.rr-header.is-stuck .rr-nav-row{padding-top:13px;padding-bottom:13px}
.rr-header.is-stuck .rr-logo img{height:38px}
/* refined mega */
.rr-mega{width:440px;padding:12px;gap:2px}
.rr-mega a{padding:12px 14px}
.rr-mega a .mt{font-size:14.5px}
.rr-mega a .md{font-size:11.5px;margin-top:3px}

/* ===== UNIFIED VERTICAL RHYTHM (one system) ===== */
.rr{--sp-section:clamp(72px,8vw,108px); --sp-head:clamp(40px,5vw,56px)}
.rr-section{padding:var(--sp-section) 0}
.rr-final{padding:var(--sp-section) 0}
.rr-stats{padding:clamp(52px,6vw,76px) 0}
.rr-shead{margin-bottom:var(--sp-head)}
.rr-services-grid,.rr-pillars,.rr-quotes,.rr-work-grid{gap:24px}
.rr-reviews .topline{margin-bottom:clamp(36px,4vw,48px)}
.rr-hero{padding-top:clamp(72px,8vw,104px);padding-bottom:clamp(64px,7vw,92px)}
@media(max-width:620px){.rr{--sp-section:60px;--sp-head:36px}}

</style>
<style>
/* ===== ADDITIONS — reusable components for secondary pages (added to the .rr library) ===== */
.rr .rr-btn-navy{background:transparent;color:var(--navy);border-color:var(--line-cool)}
.rr .rr-btn-navy:hover{border-color:var(--royal);color:var(--royal);background:var(--offwhite)}

/* SLIM HERO — tier-2 secondary-page banner (bg photo + navy overlay + inline trust) */
.rr .rr-hero-slim{position:relative;background:linear-gradient(180deg,rgba(14,25,36,.74),rgba(20,46,71,.80)),#1F4068 center/cover no-repeat;color:#fff;text-align:center;padding:clamp(74px,9vw,116px) 0 clamp(58px,7vw,88px)}
.rr .rr-hero-slim .rr-hero-eyebrow{font-family:'Space Mono';font-weight:700;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--sky);margin-bottom:16px}
.rr .rr-hero-slim h1{color:#fff;font-size:clamp(32px,4.4vw,52px);line-height:1.04;max-width:880px;margin:0 auto}
.rr .rr-hero-slim .rr-tagline-rule{margin:16px auto 0}
.rr .rr-hero-slim .rr-sub{margin:18px auto 0;max-width:620px;color:#d6e0ea;font-size:18px}
.rr .rr-hero-slim .rr-hero-ctas{justify-content:center;margin-top:28px}
.rr .rr-slim-trust{margin-top:26px;font-size:13.5px;font-weight:600;color:#cdd9e6;display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;justify-content:center}
.rr .rr-slim-trust .rr-stars{font-size:15px}

/* Offer cards */
.rr .rr-offer-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.rr .rr-offer{background:#fff;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;display:flex;flex-direction:column;transition:.2s ease}
.rr .rr-offer:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--sky)}
.rr .rr-offer-head{background:var(--navy);color:#fff;padding:26px 28px;display:flex;align-items:center;gap:18px}
.rr .rr-offer.is-fin .rr-offer-head{background:var(--royal)}
.rr .rr-offer-tag{font-family:'Archivo';font-weight:800;font-size:30px;color:var(--sky);line-height:1;white-space:nowrap}
.rr .rr-offer-head h3{color:#fff;font-size:20px;line-height:1.15}
.rr .rr-offer-head p{color:#c6d3e0;font-size:13px;margin-top:4px}
.rr .rr-offer-body{padding:26px 28px;display:flex;flex-direction:column;flex:1}
.rr .rr-checks{list-style:none;display:flex;flex-direction:column;gap:12px}
.rr .rr-checks li{position:relative;padding-left:30px;font-size:15px;color:var(--slate)}
.rr .rr-checks li::before{content:"";position:absolute;left:0;top:3px;width:18px;height:18px;border-radius:50%;background:rgba(106,159,219,.16)}
.rr .rr-checks li::after{content:"";position:absolute;left:6px;top:7px;width:5px;height:9px;border:solid var(--royal);border-width:0 2px 2px 0;transform:rotate(45deg)}
.rr .rr-offer .fine{font-size:12px;color:var(--cool-grey);margin-top:18px}
.rr .rr-offer .rr-btn{margin-top:20px;justify-content:center}

/* Quick compare */
.rr .rr-compare{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.rr .rr-cmp{border:1px solid var(--line-cool);border-radius:var(--r-md);padding:30px;background:#fff}
.rr .rr-cmp .lbl{font-family:'Archivo';font-weight:800;font-size:22px;color:var(--navy)}
.rr .rr-cmp .lbl .pin{display:inline-block;font-family:'Space Mono';font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--royal);background:var(--offwhite);border:1px solid var(--line);border-radius:var(--r-pill);padding:4px 12px;margin-left:8px;vertical-align:middle}
.rr .rr-cmp p{margin-top:12px;color:var(--slate-grey);font-size:15.5px}
.rr .rr-compare-note{margin-top:24px;text-align:center;color:var(--slate-grey);font-size:15.5px}
.rr .rr-compare-note b{color:var(--navy)}

/* FAQ accordion */
.rr .rr-faq-list{max-width:820px;margin:0 auto;border-top:1px solid var(--line)}
.rr .rr-qa{border-bottom:1px solid var(--line)}
.rr .rr-qa-q{width:100%;background:none;border:none;cursor:pointer;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 4px;font-family:'Public Sans';font-weight:700;font-size:17px;color:var(--navy)}
.rr .rr-qa-q .mk{flex:0 0 auto;width:22px;height:22px;position:relative;transition:transform .25s ease}
.rr .rr-qa-q .mk::before,.rr .rr-qa-q .mk::after{content:"";position:absolute;background:var(--royal);border-radius:2px}
.rr .rr-qa-q .mk::before{left:0;right:0;top:10px;height:2px}
.rr .rr-qa-q .mk::after{top:0;bottom:0;left:10px;width:2px}
.rr .rr-qa.is-open .rr-qa-q .mk{transform:rotate(135deg)}
.rr .rr-qa-a{max-height:0;overflow:hidden;transition:max-height .3s ease}
.rr .rr-qa-a .inner{padding:0 4px 24px;color:var(--slate-grey);font-size:15.5px;line-height:1.65}
.rr .rr-qa-a .inner b{color:var(--navy)}
.rr .rr-section.is-mist{background:var(--offwhite)}

@media(max-width:980px){ .rr .rr-offer-grid,.rr .rr-compare{grid-template-columns:1fr} }

/* ===== font lock (beat Divi theme fonts) ===== */
.rr, .rr p, .rr li, .rr a, .rr span, .rr div, .rr button, .rr input{font-family:'Public Sans',system-ui,-apple-system,sans-serif !important}
.rr h1, .rr h2, .rr h3, .rr h4, .rr .rr-offer-tag, .rr .rr-hero-offer .pct, .rr .rr-cmp .lbl, .rr .num{font-family:'Archivo',sans-serif !important}
.rr .rr-hero-eyebrow, .rr .rr-step .idx, .rr .rr-cmp .pin, .rr .ph-label, .rr .rr-hero-offer .ey{font-family:'Space Mono',monospace !important}
.rr .rr-quote blockquote{font-family:'Newsreader',serif !important}
/* ===== hero featured-offer card (full hero, right column) ===== */
.rr .rr-hero-offer{background:#fff;border-radius:var(--r-lg);padding:32px;box-shadow:var(--shadow-lg);color:var(--slate);text-align:center}
.rr .rr-hero-offer .ey{font-weight:700;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--royal)}
.rr .rr-hero-offer .pct{font-weight:800;font-size:64px;color:var(--navy);line-height:1;margin:10px 0 4px}
.rr .rr-hero-offer .pct small{font-size:24px;color:var(--royal);vertical-align:super}
.rr .rr-hero-offer h3{font-size:20px}
.rr .rr-hero-offer .or{margin:18px 0;font-size:13px;font-weight:700;letter-spacing:.1em;color:var(--cool-grey);text-transform:uppercase;position:relative}
.rr .rr-hero-offer .or::before,.rr .rr-hero-offer .or::after{content:"";position:absolute;top:50%;width:34%;height:1px;background:var(--line-cool)}
.rr .rr-hero-offer .or::before{left:0}.rr .rr-hero-offer .or::after{right:0}
.rr .rr-hero-offer .fin{font-size:15px;color:var(--slate-grey)}
.rr .rr-hero-offer .fin b{color:var(--navy)}
.rr .rr-hero-offer .rr-btn{width:100%;justify-content:center;margin-top:20px}
.rr .rr-hero-offer .fine{font-size:11.5px;color:var(--cool-grey);margin-top:14px}
/* ===== robust 2-up services (never stack on desktop) ===== */
.rr-specials .rr-services-grid{display:grid !important;grid-template-columns:1fr 1fr !important;gap:24px}.rr-specials .rr-services-grid>.rr-card{min-width:0}.rr-specials .rr-final{margin-bottom:0 !important}
@media(max-width:620px){.rr-services-grid{grid-template-columns:1fr !important}}
.rr .rr-card .img img{width:100%;height:100%;object-fit:cover}
/* MOBILE-OPT v1 — homepage parity: center hero + hide trust pills on phone */@media(max-width:980px){.rr .rr-hero-left{text-align:center}.rr .rr-hero .rr-tagline-rule{margin-left:auto;margin-right:auto}.rr .rr-hero .rr-sub{margin-left:auto;margin-right:auto}.rr .rr-hero .rr-hero-ctas{justify-content:center}.rr .rr-hero .rr-trustline{justify-content:center}.rr .rr-hero .rr-trustline .trust-pills{justify-content:center}}@media(max-width:620px){.rr .rr-hero .rr-trustline .trust-pills{display:none}.rr .rr-hero .rr-sub{font-size:16px}}</style><style>.rr .rr-cards-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.rr .rr-card2{background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);padding:26px;transition:.2s ease}.rr .rr-card2:hover{border-color:var(--sky);box-shadow:var(--shadow-md);transform:translateY(-3px)}.rr .rr-card2-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}.rr .rr-card2-top h3{font-size:19px}.rr .rr-card2 .badge{font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--royal);background:rgba(106,159,219,.14);border-radius:999px;padding:5px 12px;white-space:nowrap}.rr .rr-card2 p{color:var(--slate-grey);font-size:15px;line-height:1.6}.rr .rr-card2 p a{color:var(--royal);font-weight:600;text-decoration:none}@media(max-width:900px){.rr .rr-cards-grid{grid-template-columns:1fr 1fr}}@media(max-width:580px){.rr .rr-cards-grid{grid-template-columns:1fr}}.rr .rr-signs{display:grid;grid-template-columns:1fr 1fr;gap:20px}.rr .rr-sign{display:flex;gap:16px;background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);padding:24px}.rr .rr-sign .sk{flex-shrink:0;width:42px;height:42px;border-radius:11px;background:rgba(255,140,66,.12);display:flex;align-items:center;justify-content:center}.rr .rr-sign .sk svg{width:22px;height:22px;stroke:var(--orange-deep);fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.rr .rr-sign h3{font-size:16.5px}.rr .rr-sign p{margin-top:6px;color:var(--slate-grey);font-size:14.5px;line-height:1.6}@media(max-width:760px){.rr .rr-signs{grid-template-columns:1fr}}.rr .rr-values{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}.rr .rr-value{background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);padding:28px}.rr .rr-value .ic{width:46px;height:46px;border-radius:12px;background:rgba(106,159,219,.14);display:flex;align-items:center;justify-content:center;margin-bottom:16px}.rr .rr-value .ic svg{width:23px;height:23px;stroke:var(--royal);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.rr .rr-value h3{font-size:18px}.rr .rr-value p{margin-top:8px;color:var(--slate-grey);font-size:15px;line-height:1.6}.rr .rr-value p a{color:var(--royal);font-weight:600;text-decoration:none}@media(max-width:880px){.rr .rr-values{grid-template-columns:1fr 1fr}}@media(max-width:560px){.rr .rr-values{grid-template-columns:1fr}}.rr .rr-areas{display:grid;grid-template-columns:repeat(5,1fr);gap:18px}.rr .rr-area .cty{font-family:'Archivo',sans-serif;font-weight:800;font-size:16px;color:var(--navy);text-decoration:none;display:block;border-bottom:1px solid var(--line-cool);padding-bottom:8px}.rr .rr-area .cty:hover{color:var(--royal)}.rr .rr-area p{margin-top:10px;color:var(--slate-grey);font-size:13px;line-height:1.9}.rr .rr-area p a{color:var(--slate-grey);text-decoration:none;border-bottom:1px solid var(--line-cool);transition:.15s ease}.rr .rr-area p a:hover{color:var(--royal);border-bottom-color:var(--royal)}@media(max-width:980px){.rr .rr-areas{grid-template-columns:1fr 1fr 1fr}}@media(max-width:620px){.rr .rr-areas{grid-template-columns:1fr 1fr}}.rr .rr-prose{max-width:780px;margin:0 auto;color:var(--slate-grey);font-size:17px;line-height:1.8}.rr .rr-prose b{color:var(--navy)}.rr .rr-prose a{color:var(--royal);font-weight:600;text-decoration:none}.rr .rr-prose+.rr-prose{margin-top:18px}.rr .rr-hero-form .frm_forms input[type=text],.rr .rr-hero-form .frm_forms input[type=email],.rr .rr-hero-form .frm_forms input[type=tel],.rr .rr-hero-form .frm_forms input[type=number],.rr .rr-hero-form .frm_forms select,.rr .rr-hero-form .frm_forms textarea{width:100%;font-family:'Public Sans',system-ui,sans-serif;font-size:15px;color:var(--slate);background:var(--offwhite);border:1.5px solid var(--line-cool);border-radius:var(--r-sm);padding:13px 14px;box-sizing:border-box;margin-bottom:0}.rr .rr-hero-form .frm_forms input:focus,.rr .rr-hero-form .frm_forms select:focus,.rr .rr-hero-form .frm_forms textarea:focus{outline:none;border-color:var(--royal);background:#fff;box-shadow:0 0 0 3px rgba(53,94,164,.12)}.rr .rr-hero-form .frm_forms .frm_submit button,.rr .rr-hero-form .frm_forms .frm_button_submit{width:100%;font-family:'Public Sans',sans-serif;font-weight:700;font-size:16px;color:#fff !important;background:var(--royal) !important;border:none !important;border-radius:var(--r-sm) !important;padding:15px;cursor:pointer;transition:.18s ease}.rr .rr-hero-form .frm_forms .frm_submit button:hover,.rr .rr-hero-form .frm_forms .frm_button_submit:hover{background:#2A5BAE !important}.rr .rr-hero-form .frm_forms,.rr .rr-hero-form form{margin:0;padding:0}.rr .rr-hero-form .frm_form_field{width:100%;margin:0 0 12px}.rr .rr-hero-form .frm_primary_label{font-weight:600;color:var(--slate);font-size:14px;margin-bottom:5px;display:block}.rr .rr-hero-form .frm_forms select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6672' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:16px;padding-right:40px}.rr .rr-hero-form .frm_forms input::placeholder,.rr .rr-hero-form .frm_forms textarea::placeholder{color:var(--cool-grey);opacity:1}</style><div class="rr rr-specials"><style>.rr-js .rr-reveal{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s ease}.rr-js .rr-reveal.in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){.rr-js .rr-reveal{opacity:1 !important;transform:none !important;transition:none}}.rr .rr-ana-grid{display:grid;grid-template-columns:1.04fr .96fr;gap:46px;align-items:center}.rr .rr-spec-fig{margin:0;background:#fff;border:1px solid var(--line-cool);border-radius:18px;padding:24px;box-shadow:var(--shadow-md)}.rr .rr-spec-fig svg{width:100%;height:auto;display:block}.rr .rr-spec-fig figcaption{margin-top:12px;text-align:center;font-family:'Space Mono',monospace;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--cool-grey)}.rr .rr-spec-tag{display:inline-block;font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--orange-deep);margin-bottom:10px}.rr .rr-arow{display:flex;gap:16px;padding:17px 0;border-top:1px solid var(--line-cool)}.rr .rr-arow .num{flex-shrink:0;width:27px;height:27px;border-radius:50%;background:var(--orange);color:#fff;font-family:'Space Mono',monospace;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}.rr .rr-arow h4{font-family:'Archivo',sans-serif;font-weight:700;font-size:16.5px;color:var(--navy);margin-bottom:4px}.rr .rr-arow p{color:var(--slate-grey);font-size:14px;line-height:1.55}@media(max-width:860px){.rr .rr-ana-grid{grid-template-columns:1fr;gap:26px}}.rr .rr-svcstats{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}.rr .rr-svcstat{background:#fff;border:1px solid var(--line-cool);border-radius:16px;padding:30px 16px;text-align:center}.rr .rr-svcstatnum{font-family:'Archivo',sans-serif;font-weight:800;font-size:46px;line-height:1;color:var(--navy);letter-spacing:-.02em;display:inline-block}.rr .rr-svcstat .star{font-family:'Archivo',sans-serif;font-size:30px;color:var(--orange);display:inline-block;margin-left:1px;vertical-align:2px}.rr .rr-svcstat .lbl{display:block;margin-top:12px;font-family:'Archivo',sans-serif;font-weight:700;font-size:15px;color:var(--slate)}.rr .rr-svcstat .sub{display:block;margin-top:3px;font-size:12.5px;color:var(--cool-grey)}@media(max-width:760px){.rr .rr-svcstats{grid-template-columns:1fr 1fr;gap:14px}.rr .rr-svcstatnum{font-size:40px}}.rr .rr-ctable{border:1px solid var(--line-cool);border-radius:16px;overflow:hidden;background:#fff;box-shadow:var(--shadow-md)}.rr .rr-ctrow{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.7fr;align-items:center}.rr .rr-ctrow>div{padding:18px 20px;border-bottom:1px solid var(--line-cool);font-size:15px;color:var(--slate-grey)}.rr .rr-cthead>div{background:var(--navy);color:#fff;font-family:'Archivo',sans-serif;font-weight:700;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;border-bottom:none}.rr .rr-ctrow .m{font-family:'Archivo',sans-serif;font-weight:700;color:var(--navy);font-size:16px}.rr .rr-ctrow .ls,.rr .rr-ctrow .ct{font-family:'Space Mono',monospace;color:var(--navy);font-size:14px}.rr .rr-ctrow.pick>div{background:rgba(255,140,66,.06)}.rr .rr-ctrow.pick .m{box-shadow:inset 3px 0 0 var(--orange)}.rr .rr-ctrow .pill{display:inline-block;font-family:'Space Mono',monospace;font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--orange-deep);background:rgba(255,140,66,.15);border-radius:999px;padding:3px 8px;margin-left:8px;vertical-align:middle}.rr .rr-ctrow:last-child>div{border-bottom:none}.rr .rr-ctable .cl{display:none;font-family:'Space Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--cool-grey);margin-right:8px}@media(max-width:760px){.rr .rr-cthead{display:none}.rr .rr-ctrow{grid-template-columns:1fr;border-bottom:7px solid var(--offwhite)}.rr .rr-ctrow:last-child{border-bottom:none}.rr .rr-ctrow>div{border-bottom:1px solid var(--line-cool);padding:11px 18px}.rr .rr-ctrow .m{padding-top:15px}.rr .rr-ctable .cl{display:inline-block}.rr .rr-ctrow.pick .m{box-shadow:inset 0 3px 0 var(--orange)}}.rr .rr-ror{display:grid;grid-template-columns:1fr 1fr;gap:22px}.rr .rr-ror-card{background:#fff;border:1px solid var(--line-cool);border-radius:16px;padding:30px;box-shadow:var(--shadow-md)}.rr .rr-ror-tag{display:inline-block;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:4px 10px;border-radius:999px;margin-bottom:12px}.rr .rr-ror-card.rep .rr-ror-tag{color:#1f7a52;background:rgba(46,158,107,.13)}.rr .rr-ror-card.rep2 .rr-ror-tag{color:var(--orange-deep);background:rgba(255,140,66,.15)}.rr .rr-ror-card h3{font-family:'Archivo',sans-serif;font-weight:800;font-size:20px;color:var(--navy);margin-bottom:14px}.rr .rr-ror-card ul{list-style:none;margin:0;padding:0}.rr .rr-ror-card li{position:relative;padding:10px 0 10px 30px;font-size:14.5px;color:var(--slate-grey);line-height:1.5;border-top:1px solid var(--line-cool)}.rr .rr-ror-card li:first-child{border-top:none}.rr .rr-ror-card li:before{position:absolute;left:0;top:9px;font-family:'Archivo',sans-serif;font-weight:700;font-size:15px}.rr .rr-ror-card.rep li:before{content:'\2713';color:#2e9e6b}.rr .rr-ror-card.rep2 li:before{content:'\21BB';color:var(--orange-deep)}@media(max-width:760px){.rr .rr-ror{grid-template-columns:1fr}}.rr .rr-edband{background:#15314F;padding:74px 0;text-align:center}.rr .rr-edband .rr-wrap{max-width:880px}.rr .rr-edband .eb-ey{font-family:'Space Mono',monospace;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--orange)}.rr .rr-edband .eb-q{font-family:'Newsreader',Georgia,serif;font-style:italic;font-weight:400;font-size:clamp(24px,3.4vw,37px);line-height:1.32;color:#fff;margin:20px 0 20px}.rr .rr-edband .eb-s{color:#bccadb;font-size:16px;line-height:1.75;max-width:640px;margin:0 auto}.rr .rr-ctaband{padding:70px 0;background:var(--offwhite);border-top:1px solid var(--line-cool);border-bottom:1px solid var(--line-cool);text-align:center}.rr .rr-ctaband .rr-wrap{max-width:720px}.rr .rr-ctaband .ey{display:inline-block;font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--orange-deep);margin-bottom:16px}.rr .rr-ctaband h3{font-family:'Archivo',sans-serif;font-weight:800;font-size:clamp(26px,3.3vw,34px);color:var(--navy);letter-spacing:-.025em;line-height:1.16}.rr .rr-ctaband p{color:var(--slate-grey);font-size:16px;line-height:1.6;margin:16px auto 28px;max-width:560px}.rr .rr-ctaband .rr-btn-primary{white-space:nowrap}.rr .rr-locserv{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.rr .rr-locserv a{display:block;background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);padding:24px;text-decoration:none;transition:.2s ease}.rr .rr-locserv a:hover{border-color:var(--sky);box-shadow:var(--shadow-md);transform:translateY(-3px)}.rr .rr-locserv .ic{width:44px;height:44px;border-radius:11px;background:rgba(106,159,219,.14);display:flex;align-items:center;justify-content:center;margin-bottom:14px}.rr .rr-locserv .ic svg{width:22px;height:22px;stroke:var(--royal);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.rr .rr-locserv h3{font-size:18px;color:var(--navy);margin-bottom:6px}.rr .rr-locserv p{color:var(--slate-grey);font-size:14.5px;line-height:1.55}.rr .rr-locserv .go{display:inline-block;margin-top:10px;font-family:'Space Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--royal)}@media(max-width:880px){.rr .rr-locserv{grid-template-columns:1fr 1fr}}@media(max-width:560px){.rr .rr-locserv{grid-template-columns:1fr}}.rr .rr-chips{display:flex;flex-wrap:wrap;gap:10px}.rr .rr-chips a{display:inline-block;background:#fff;border:1px solid var(--line-cool);border-radius:999px;padding:9px 16px;font-size:14px;font-weight:600;color:var(--navy);text-decoration:none;transition:.15s ease}.rr .rr-chips a:hover{border-color:var(--royal);color:var(--royal);box-shadow:var(--shadow-sm)}.rr .rr-projects{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.rr .rr-proj{position:relative;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--line-cool);box-shadow:var(--shadow-md);aspect-ratio:4/3;background:var(--navy)}.rr .rr-proj img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s ease}.rr .rr-proj:hover img{transform:scale(1.06)}.rr .rr-proj .cap{position:absolute;left:0;right:0;bottom:0;padding:16px 16px 14px;background:linear-gradient(to top,rgba(15,30,45,.92),rgba(15,30,45,.4) 55%,rgba(15,30,45,0))}.rr .rr-proj .cap h4{font-family:'Archivo',sans-serif;font-weight:700;font-size:16px;color:#fff}.rr .rr-proj .cap span{display:block;margin-top:3px;font-family:'Space Mono',monospace;font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:#bcd6ea}@media(max-width:880px){.rr .rr-projects{grid-template-columns:1fr 1fr}}@media(max-width:560px){.rr .rr-projects{grid-template-columns:1fr}}.rr .rr-creds{display:grid;grid-template-columns:repeat(5,1fr);gap:16px}.rr .rr-cred{background:#fff;border:1px solid var(--line-cool);border-radius:var(--r-md);padding:22px 14px 20px;text-align:center;display:flex;flex-direction:column;align-items:center}.rr .rr-cred-logo{height:56px;display:flex;align-items:center;justify-content:center;margin-bottom:14px}.rr .rr-cred-logo img{max-height:56px;max-width:100%;width:auto;object-fit:contain;display:block}.rr .rr-cred h4{font-family:'Archivo',sans-serif;font-weight:700;font-size:13px;color:var(--navy);line-height:1.3}.rr .rr-cred p{font-family:'Space Mono',monospace;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--cool-grey);margin-top:5px}@media(max-width:860px){.rr .rr-creds{grid-template-columns:1fr 1fr 1fr}}@media(max-width:520px){.rr .rr-creds{grid-template-columns:1fr 1fr}}.rr .rr-feature{display:grid;grid-template-columns:1fr 1fr;gap:46px;align-items:center}.rr .rr-feat-media{border-radius:18px;overflow:hidden;border:1px solid var(--line-cool);box-shadow:var(--shadow-md);aspect-ratio:4/3}.rr .rr-feat-media img{width:100%;height:100%;object-fit:cover;display:block}.rr .rr-feature.rev .rr-feat-media{order:2}.rr .rr-feat-body h2{font-family:'Archivo',sans-serif;font-weight:800;font-size:clamp(24px,3vw,32px);color:var(--navy);letter-spacing:-.02em;line-height:1.14;margin:8px 0 14px}.rr .rr-feat-body>p{color:var(--slate-grey);font-size:16px;line-height:1.7;margin-bottom:18px}.rr .rr-feat-list{list-style:none;margin:0;padding:0}.rr .rr-feat-list li{position:relative;padding:9px 0 9px 30px;color:var(--slate-grey);font-size:15px;line-height:1.5;border-top:1px solid var(--line-cool)}.rr .rr-feat-list li:first-child{border-top:none}.rr .rr-feat-list li:before{content:'\2713';position:absolute;left:0;top:9px;color:var(--orange-deep);font-weight:700}.rr .rr-feat-list li b{color:var(--navy)}@media(max-width:820px){.rr .rr-feature{grid-template-columns:1fr;gap:24px}.rr .rr-feature.rev .rr-feat-media{order:0}}.rr .rr-spec-fig svg .rr-hot{cursor:pointer;transition:transform .25s cubic-bezier(.34,1.56,.64,1),opacity .25s ease;transform-box:fill-box;transform-origin:center}.rr .rr-spec-fig svg .rr-hot-on{transform:scale(1.28);filter:drop-shadow(0 1px 5px rgba(214,109,38,.65))}.rr .rr-spec-fig svg .rr-hot-dim{opacity:.3}.rr .rr-spec-fig{position:relative}.rr .rr-spec-hint{position:absolute;top:14px;right:16px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--cool-grey);background:var(--offwhite);border:1px solid var(--line-cool);border-radius:999px;padding:5px 11px;pointer-events:none;transition:opacity .4s ease}.rr .rr-spec-hint.hide{opacity:0}.rr .rr-spec-list .rr-arow{cursor:pointer;transition:background .22s ease,opacity .22s ease,box-shadow .22s ease;padding-left:14px;margin-left:-14px;border-radius:0 10px 10px 0}.rr .rr-spec-list .rr-arow.rr-row-on{background:rgba(255,140,66,.08);box-shadow:inset 4px 0 0 var(--orange)}.rr .rr-spec-list .rr-arow.rr-row-dim{opacity:.5}.rr .rr-spec-list .rr-arow .num{transition:transform .2s ease,box-shadow .2s ease}.rr .rr-spec-list .rr-arow.rr-row-on .num{transform:scale(1.14);box-shadow:0 0 0 4px rgba(255,140,66,.2)}.rr .rr-spec-list .rr-arow.rr-row-on h4{color:var(--orange-deep)}.rr .rr-arow:focus,.rr .rr-spec-fig svg .rr-hot:focus{outline:none}@media(prefers-reduced-motion:reduce){.rr .rr-spec-fig svg .rr-hot{transition:none}}</style><script>document.documentElement.classList.add("rr-js");</script>
<div class="rr rr-hail">

<style>
.rr.rr-hail{--slate2:#3F5468;--slate-deep:#2A3A4B;--chalk:#F3F5F7;--chalk-line:#D8DEE5;--tag:#D66D26}
.rr.rr-hail .is-chalk{background:var(--chalk);border-top:1px solid var(--chalk-line);border-bottom:1px solid var(--chalk-line)}
.rr.rr-hail .rr-eyebrow{color:var(--slate2)}
.rr.rr-hail .rr-eyebrow.on-dark{color:#B9C8D8}
.rr.rr-hail .rr-badgebar .dot{background:var(--slate2)}
.rr.rr-hail .rr-arow .num{background:var(--slate2)}
.rr.rr-hail .rr-spec-list .rr-arow.rr-row-on{background:rgba(63,84,104,.08);box-shadow:inset 4px 0 0 var(--slate2)}
.rr.rr-hail .rr-spec-list .rr-arow.rr-row-on h4{color:var(--slate-deep)}
.rr.rr-hail .rr-spec-list .rr-arow.rr-row-on .num{box-shadow:0 0 0 4px rgba(63,84,104,.2)}
.rr.rr-hail .rr-spec-fig svg .rr-hot-on{filter:drop-shadow(0 1px 5px rgba(63,84,104,.7))}
.rr.rr-hail .rr-spec-tag{color:var(--slate2)}
.rr.rr-hail .rr-spec-fig{position:relative}
.rr.rr-hail .rr-hero .rr-hero-ctas{gap:10px}
.rr.rr-hail .rr-hero .rr-btn{white-space:nowrap;padding:12px 16px;font-size:14.5px}
.rr.rr-hail .rr-ctrow{align-items:stretch}
.rr.rr-hail .rr-ctrow>div{display:flex;align-items:center;flex-wrap:wrap}
.rr.rr-hail .rr-ctrow:not(.rr-cthead)>div{background:#fff}
.rr.rr-hail .rr-cthead>div{background:var(--navy)!important;color:#fff!important}
/* evidence tag */
.rr.rr-hail .ev{display:inline-block;font-family:'Space Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--tag);border:1px solid var(--tag);border-radius:4px;padding:3px 8px}
/* gauge */
.rr.rr-hail .rr-gauge{background:#fff;border:1px solid var(--chalk-line);border-radius:18px;box-shadow:var(--shadow-md);padding:28px;max-width:1100px;margin:0 auto}
.rr.rr-hail .rr-gauge-row{display:grid!important;grid-template-columns:repeat(10,1fr)!important;gap:6px;align-items:end}
.rr.rr-hail .rr-gauge-row button{appearance:none;border:1px solid var(--chalk-line);background:var(--chalk);border-radius:10px;padding:10px 4px 8px;cursor:pointer;font-family:'Public Sans',sans-serif;color:var(--navy);display:flex;flex-direction:column;align-items:center;gap:6px;transition:.15s}
.rr.rr-hail .rr-gauge-row button i{display:block;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff,#C9D3DD 60%,#8FA0B1);border:1px solid #8FA0B1}
.rr.rr-hail .rr-gauge-row button b{font-family:'Archivo',sans-serif;font-size:12px;font-weight:700;line-height:1.1;text-align:center}
.rr.rr-hail .rr-gauge-row button small{font-family:'Space Mono',monospace;font-size:10px;color:var(--cool-grey)}
.rr.rr-gauge-row button.on,.rr.rr-hail .rr-gauge-row button:hover{border-color:var(--slate2);background:#fff;box-shadow:var(--shadow-sm)}
.rr.rr-hail .rr-gauge-row button.on{outline:2px solid var(--slate2)}
.rr.rr-hail .rr-gauge-out{margin-top:22px;display:grid!important;grid-template-columns:1fr 1fr 1fr!important;gap:14px}
.rr.rr-hail .rr-gauge-out div{background:var(--chalk);border:1px solid var(--chalk-line);border-radius:12px;padding:16px 18px}
.rr.rr-hail .rr-gauge-out .k{font-family:'Space Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--slate2);display:block;margin-bottom:6px}
.rr.rr-hail .rr-gauge-out p{color:var(--slate);font-size:14.5px;line-height:1.5;margin:0}
.rr.rr-hail .rr-gauge-head{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.rr.rr-hail .rr-gauge-head h3{font-family:'Archivo',sans-serif;font-weight:800;font-size:22px;color:var(--navy)}
.rr.rr-hail .rr-gauge-head .sev{font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:#E6EEF5;color:var(--slate2)}
.rr.rr-hail .rr-gauge-head .sev.hot{background:#FBE3D3;color:#A64E14}
/* record timeline */
.rr.rr-hail .rr-record{max-width:980px;margin:0 auto;display:grid;gap:12px}
.rr.rr-hail .rr-rec{display:grid;grid-template-columns:120px 1fr;gap:22px;background:#fff;border:1px solid var(--chalk-line);border-radius:14px;padding:18px 22px;align-items:start}
.rr.rr-hail .rr-rec .d{font-family:'Archivo',sans-serif;font-weight:800;font-size:18px;color:var(--navy);line-height:1.15}
.rr.rr-hail .rr-rec .d small{display:block;font-family:'Space Mono',monospace;font-weight:400;font-size:11px;letter-spacing:.1em;color:var(--cool-grey);margin-top:4px}
.rr.rr-hail .rr-rec p{color:var(--slate);font-size:14.5px;line-height:1.55;margin:0}
.rr.rr-hail .rr-rec .cty{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.rr.rr-hail .rr-rec .cty span{font-family:'Space Mono',monospace;font-size:10px;letter-spacing:.08em;text-transform:uppercase;background:var(--chalk);border:1px solid var(--chalk-line);border-radius:999px;padding:3px 9px;color:var(--slate2)}
.rr.rr-hail .rr-src{margin-top:14px;font-size:12.5px;color:var(--cool-grey);text-align:center}
/* decision tool */
.rr.rr-hail .rr-decide{background:#fff;border:1px solid var(--chalk-line);border-radius:18px;box-shadow:var(--shadow-md);padding:30px;display:grid!important;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)!important;gap:30px;max-width:1100px;margin:0 auto}
.rr.rr-hail .rr-q{border-top:1px solid var(--chalk-line);padding:14px 0}
.rr.rr-hail .rr-q:first-child{border-top:none;padding-top:0}
.rr.rr-hail .rr-q .ql{font-family:'Archivo',sans-serif;font-weight:700;font-size:15px;color:var(--navy);display:block;margin-bottom:8px}
.rr.rr-hail .rr-q .opts{display:flex;flex-wrap:wrap;gap:8px}
.rr.rr-hail .rr-q label{display:inline-flex!important;width:auto!important;max-width:none!important;margin:0!important;align-items:center;gap:6px;border:1px solid var(--chalk-line);border-radius:999px;padding:7px 12px;font-size:13.5px;font-weight:400;color:var(--slate);cursor:pointer;background:var(--chalk)}
.rr.rr-hail .rr-q label.on{border-color:var(--slate2);background:#fff;color:var(--navy);font-weight:600}
.rr.rr-hail .rr-q input{accent-color:var(--slate2);margin:0}
.rr.rr-hail .rr-verdict{background:var(--chalk);border:1px solid var(--chalk-line);border-radius:14px;padding:22px}
.rr.rr-hail .rr-verdict .k{font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--slate2)}
.rr.rr-hail .rr-verdict h3{font-family:'Archivo',sans-serif;font-weight:800;font-size:22px;color:var(--navy);margin:8px 0 10px;line-height:1.2}
.rr.rr-hail .rr-verdict p{color:var(--slate-grey);font-size:14.5px;line-height:1.55}
/* law cards */
.rr.rr-hail .rr-law{display:grid!important;grid-template-columns:repeat(4,1fr)!important;gap:16px;max-width:1100px;margin:0 auto}
.rr.rr-hail .rr-law div{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:20px 18px}
.rr.rr-hail .rr-law b{display:block;font-family:'Archivo',sans-serif;font-size:16px;color:#fff;margin-bottom:6px}
.rr.rr-hail .rr-law p{color:#c9d6e3;font-size:14px;line-height:1.5;margin:0}
.rr.rr-hail .rr-law small{display:block;margin-top:8px;font-family:'Space Mono',monospace;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#8FA8C2}
/* checklist */
.rr.rr-hail .rr-prep{list-style:none;margin:0 auto;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:10px 36px;max-width:900px}
.rr.rr-hail .rr-prep li{position:relative;padding-left:30px;font-size:15px;color:var(--slate);line-height:1.5}
.rr.rr-hail .rr-prep li::before{content:"";position:absolute;left:0;top:3px;width:18px;height:18px;border-radius:4px;border:2px solid var(--slate2)}
.rr.rr-hail .rr-chips{justify-content:center;max-width:940px;margin:0 auto}
.rr.rr-hail .rr-two-tel{display:flex;gap:12px;flex-wrap:wrap}
@media(max-width:980px){.rr.rr-hail .rr-gauge-row{grid-template-columns:repeat(5,1fr)!important}.rr.rr-hail .rr-law{grid-template-columns:1fr 1fr!important}}
@media(max-width:860px){.rr.rr-hail .rr-decide{grid-template-columns:1fr!important}.rr.rr-hail .rr-gauge-out{grid-template-columns:1fr!important}}
@media(max-width:620px){.rr.rr-hail .rr-rec{grid-template-columns:1fr;gap:8px}.rr.rr-hail .rr-prep{grid-template-columns:1fr}.rr.rr-hail .rr-law{grid-template-columns:1fr!important}}

/* mobile polish 2026-09-14 */
@media(hover:none){.rr.rr-hail .rr-spec-hint{display:none!important}}
@media(max-width:760px){.rr.rr-hail .rr-hero{box-shadow:inset 0 0 0 2000px rgba(8,16,26,.40)}.rr.rr-hail .rr-hero .rr-tagline{color:#BFD6F2!important}.rr.rr-hail .rr-spec-fig{padding:10px;border-radius:14px}.rr.rr-hail .rr-spec-fig figcaption{font-size:11px;letter-spacing:.04em}.rr.rr-hail .rr-ctable .cl{font-size:11px}.rr.rr-hail .rr-ctrow .pill{font-size:10px}.rr.rr-hail small,.rr.rr-hail .k,.rr.rr-hail .tag,.rr.rr-hail .v,.rr.rr-hail .who,.rr.rr-hail .cty span,.rr.rr-hail .rr-tick .t span{font-size:11px!important}.rr.rr-hail .rr-section{padding-top:64px;padding-bottom:64px}}
@media(max-width:620px){.rr.rr-hail .rr-decide{padding:20px!important}.rr.rr-hail .rr-gauge{padding:18px!important}}
</style>
<section class="rr-hero" style="background:linear-gradient(100deg,rgba(14,22,32,.86) 0%,rgba(42,58,75,.66) 45%,rgba(42,58,75,.28) 100%),url('https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3.jpg') center/cover no-repeat">
  <div class="rr-wrap"><div class="rr-hero-grid">
    <div class="rr-hero-left">
      <div class="rrs-m rrs-band"><img src="https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3.jpg" class="skip-lazy" loading="eager" fetchpriority="high" decoding="sync" alt="Hail impact marks circled on a Michigan asphalt shingle roof during inspection" srcset="https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-480x291.jpg 480w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-510x382.jpg 510w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-768x465.jpg 768w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-980x594.jpg 980w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-1024x621.jpg 1024w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-1080x654.jpg 1080w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-1280x776.jpg 1280w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3-1536x931.jpg 1536w, https://reasonablecontractingservices.com/wp-content/uploads/2026/09/Untitled-design-3.jpg 2000w" sizes="100vw"><span class="rrs-fade"></span></div><div class="rrs-m rrs-pill"><svg class="rrs-g" viewBox="0 0 48 48" aria-hidden="true"><path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"/><path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"/><path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"/><path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"/></svg><b><span data-rr-live="avg">4.8</span></b><span class="rrs-stars">★★★★★</span><span class="rrs-pilltxt"><span data-rr-live="total">255</span> Google reviews</span></div><div class="rrs-m rrs-cta"><a class="rrs-call" href="tel:8109843420"><span class="rrs-callrow"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z"/></svg><b>Call Now</b><span class="rrs-num">(810) 984-3420</span></span><span class="rrs-callsub">Free estimate · No pressure</span></a><a class="rrs-alt" href="#estimate">Can’t talk? Request your estimate →</a><div class="rrs-trust"><span><b>1984</b>Family-run</span><span><b>A+</b>BBB Rated</span><span><b>Dual-Elite</b>Certified</span></div></div><div class="rr-hero-eyebrow">Hail Damage · Roof Repair</div>
      <h1>Hail damage, documented like an adjuster would.</h1>
      <p class="rr-tagline">Sizes, dates, test squares, photos · HAAG-certified · free estimates.</p>
      <p class="rr-prose" style="color:#dbe4ee">Hail claims are won or lost on the record: what size fell, when, and what it did to each slope. We build that record the way insurance adjusters are trained to read it, tell you straight whether it's cosmetic or claimable, and restore the whole exterior on one claim. Two Michigan offices, family-owned since 1984.</p>
      <div class="rr-hero-ctas"><a class="rr-btn rr-btn-primary" href="#estimate">Get My Free Estimate</a><a class="rr-btn rr-btn-ghost" href="tel:8109843420">Port Huron (810) 984-3420</a><a class="rr-btn rr-btn-ghost" href="tel:2488003269">Troy (248) 800-3269</a></div>
      <div class="rr-trustline"><div class="g-rating"><span class="rr-stars">★★★★★</span> <span data-rr-live="avg">4.8</span> · <span data-rr-live="total">255</span> Reviews</div><div class="trust-pills"><div class="item">HAAG-Certified Inspectors</div><div class="item">Since 1984</div></div></div>
    </div>
    <div class="rr-hero-form" id="estimate">
      <div class="fh"><span class="rrs-m rrs-eyebrow">Free, no-obligation estimate</span><h3>Get your free estimate</h3><p>Tell us when the hail hit and what you've noticed. A local expert calls you back.</p></div>

Service Type Form Fill

GET IN TOUCH

If you are human, leave this field blank.			

<div class="privacy">No door-knockers, no pressure. Office lines are voice only — call or use this form.</div>
    </div>
  </div></div>
</section>
<div class="rr-badgebar"><div class="rr-wrap"><div class="row">
  <div class="rr-badge"><span class="dot"></span><strong>Since 1984</strong></div>
  <div class="rr-badge"><span class="dot"></span>HAAG-Certified Inspectors</div>
  <div class="rr-badge"><span class="dot"></span>Insurance Claim Support</div>
  <div class="rr-badge"><span class="dot"></span>Free Estimates</div>
  <div class="rr-badge"><span class="dot"></span><span data-rr-live="avg">4.8</span>★ <span data-rr-live="total">255</span> Reviews</div>
</div></div></div>

<!-- GAUGE -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">The Hail-Size Gauge</span><h2>How big was it? Tap the closest match.</h2><p>Size is the first line in the ledger. It predicts what happened to each material on your house.</p></div>
  <div class="rr-gauge" id="rrGauge">
    <div class="rr-gauge-row"><button type="button" data-i="0"><i style="width:8px;height:8px"></i><b>Pea</b><small>¼″</small></button><button type="button" data-i="1"><i style="width:12px;height:12px"></i><b>Dime</b><small>0.70″</small></button><button type="button" data-i="2"><i style="width:13px;height:13px"></i><b>Penny</b><small>¾″</small></button><button type="button" data-i="3"><i style="width:15px;height:15px"></i><b>Nickel</b><small>0.88″</small></button><button type="button" data-i="4"><i style="width:17px;height:17px"></i><b>Quarter</b><small>1″</small></button><button type="button" data-i="5"><i style="width:21px;height:21px"></i><b>Half dollar</b><small>1¼″</small></button><button type="button" data-i="6"><i style="width:25px;height:25px"></i><b>Ping-pong</b><small>1½″</small></button><button type="button" data-i="7"><i style="width:29px;height:29px"></i><b>Golf ball</b><small>1¾″</small></button><button type="button" data-i="8"><i style="width:33px;height:33px"></i><b>Lime</b><small>2″</small></button><button type="button" data-i="9"><i style="width:40px;height:40px"></i><b>Tennis ball</b><small>2½″</small></button></div>
    <div class="rr-gauge-head" style="margin-top:22px"><h3 id="gName">Quarter · 1 inch</h3><span class="sev hot" id="gSev">NWS severe threshold</span></div>
    <div class="rr-gauge-out">
      <div><span class="k">Asphalt shingles</span><p id="gShingle">Functional damage likely on 3-tab roofs and older laminated roofs: bruising and granule loss. New laminated shingles may show only granule scuffing.</p></div>
      <div><span class="k">Siding, wraps & screens</span><p id="gSoft">Dents in aluminum gutters, downspouts, window wraps, and AC fins. Vinyl siding chips on the north and west faces. Screens tear.</p></div>
      <div><span class="k">What to do</span><p id="gDo">Photograph the gutters, downspouts, and AC fins from the ground with the date. Get the roof documented before the next storm muddies the record.</p></div>
    </div>
  </div>
</div></section>

<!-- RECORD -->
<section class="rr-reveal rr-section is-chalk"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">The Michigan Hail Record</span><h2>Dates, sizes, counties. The storms adjusters can look up.</h2><p>A claim is anchored to a date of loss. These are the recent hail events in our Michigan service area, from National Weather Service storm reports — this record updates automatically when a new severe hail event is reported.</p></div>
  <div class="rr-record"><div class="rr-rec"><div class="d">Sept 2–3, 2026<small>Latest</small></div><div><p>Golf-ball-plus hail and a tornado in one night: 2.00-inch hail northwest of Capac and 1.50-inch in Kimball, 1.00-inch at Otter Lake, an EF-0 tornado through Marysville, and roughly 300,000 outages across the region.</p><div class="cty"><span>St. Clair</span><span>Lapeer</span></div></div></div><div class="rr-rec"><div class="d">July 15, 2026<small>NWS storm reports</small></div><div><p>NWS storm reports: 1-inch hail in Holly (Oakland County).</p><div class="cty"><span>Oakland</span></div></div></div><div class="rr-rec"><div class="d">June 25, 2026<small>NWS storm reports</small></div><div><p>NWS storm reports: 1.75-inch hail in Capac (St. Clair County); 1.75-inch hail in Emmett (St. Clair County); 1-inch hail south of Deerfield Township (Lapeer County); 1-inch hail west of Capac (St. Clair County), among 6 hail reports.</p><div class="cty"><span>Lapeer</span><span>St. Clair</span></div></div></div><div class="rr-rec"><div class="d">June 16, 2026<small>NWS storm reports</small></div><div><p>NWS storm reports: 1-inch hail southwest of Highland (Oakland County); 1-inch hail northeast of Franklin (Oakland County).</p><div class="cty"><span>Oakland</span></div></div></div><div class="rr-rec"><div class="d">May 9, 2026<small>NWS storm reports</small></div><div><p>NWS storm reports: 1-inch hail east of Clarkston (Oakland County).</p><div class="cty"><span>Oakland</span></div></div></div><div class="rr-rec"><div class="d">Mar 6, 2026<small>NWS storm reports</small></div><div><p>NWS storm reports: 1-inch hail northwest of Macomb (Macomb County).</p><div class="cty"><span>Macomb</span></div></div></div><div class="rr-rec"><div class="d">June 24, 2025<small>NWS storm reports</small></div><div><p>NWS storm reports: 1-inch hail north of Wixom (Oakland County).</p><div class="cty"><span>Oakland</span></div></div></div><div class="rr-rec"><div class="d">Aug 30, 2024<small>NWS storm reports</small></div><div><p>NWS storm reports: 1.5-inch hail in Casco (St. Clair County).</p><div class="cty"><span>St. Clair</span></div></div></div><div class="rr-rec"><div class="d">Mar 27, 1991<small>State record</small></div><div><p>The Michigan state-record hailstone: 4.5 inches at Stony Point. Michigan counties average two or more hail events a year, and about half of the damaging ones fall in June and July.</p><div class="cty"><span>Michigan</span></div></div></div></div>
  <p class="rr-src">Sources: NWS Detroit/Pontiac severe-weather event summaries; 2024 Michigan Hazard Analysis. Michigan hail season runs April through September and peaks May through July.</p>
</div></section>

<!-- TEST SQUARE (hotspot) -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-spec"><div class="rr-ana-grid">
    <figure class="rr-spec-fig"><svg viewBox="0 0 640 400" role="img" aria-label="Diagram of a roof slope showing how a HAAG-style hail inspection is laid out">
<rect x="0" y="0" width="640" height="400" fill="#FFFFFF"/>
<rect x="0" y="0" width="640" height="230" fill="#F3F5F7"/>
<!-- roof slope -->
<polygon points="60,230 340,80 620,230" fill="#5B6B7C"/>
<polygon points="76,224 340,92 604,224" fill="#6C7D8F"/>
<!-- shingle courses -->
<g stroke="#4A5A6B" stroke-width="1.5" fill="none"><path d="M118 200 L562 200"/><path d="M160 178 L520 178"/><path d="M200 156 L480 156"/><path d="M240 134 L440 134"/><path d="M282 112 L398 112"/></g>
<!-- chalk test square 10x10 -->
<rect x="360" y="140" width="96" height="76" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-dasharray="7 5"/>
<text x="408" y="132" text-anchor="middle" font-family="Space Mono,monospace" font-size="10" fill="#FFFFFF">10' x 10'</text>
<!-- impact marks inside square -->
<g fill="#2A3A4B"><circle cx="380" cy="160" r="4"/><circle cx="402" cy="188" r="4"/><circle cx="430" cy="166" r="4"/><circle cx="444" cy="204" r="4"/><circle cx="372" cy="204" r="4"/></g>
<g fill="none" stroke="#FFFFFF" stroke-width="1.5"><circle cx="380" cy="160" r="9"/><circle cx="402" cy="188" r="9"/><circle cx="430" cy="166" r="9"/><circle cx="444" cy="204" r="9"/><circle cx="372" cy="204" r="9"/></g>
<!-- soft-metal vent -->
<rect x="200" y="150" width="26" height="18" fill="#9AA9B8" stroke="#5B6B7C"/><circle cx="209" cy="157" r="2.2" fill="#2A3A4B"/><circle cx="218" cy="161" r="2.2" fill="#2A3A4B"/>
<!-- gutter with dents + downspout with granules -->
<rect x="56" y="226" width="568" height="10" fill="#3E4C5A"/>
<g fill="#1f2a36"><circle cx="150" cy="231" r="2.5"/><circle cx="176" cy="231" r="2.5"/><circle cx="240" cy="231" r="2.5"/><circle cx="470" cy="231" r="2.5"/><circle cx="530" cy="231" r="2.5"/></g>
<rect x="600" y="236" width="12" height="110" fill="#3E4C5A"/>
<path d="M590 352 q16 -8 34 0 q-8 6 -34 0z" fill="#8FA0B1"/>
<!-- AC unit -->
<rect x="120" y="300" width="70" height="52" fill="#DDE3E9" stroke="#8FA0B1"/><g stroke="#8FA0B1" stroke-width="1"><path d="M126 306 v40 M134 306 v40 M142 306 v40 M150 306 v40 M158 306 v40 M166 306 v40 M174 306 v40 M182 306 v40"/></g>
<!-- house wall -->
<rect x="76" y="236" width="528" height="140" fill="#F6F1E6" stroke="#D9CFBD" opacity=".55"/>
<!-- blister / wear (NOT hail) -->
<ellipse cx="300" cy="196" rx="9" ry="5" fill="#8FA0B1"/>
<g><circle cx="480" cy="246" r="13" fill="#3F5468"/><text x="480" y="250.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">1</text></g><g><circle cx="213" cy="132" r="13" fill="#3F5468"/><text x="213" y="136.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">2</text></g><g><circle cx="408" cy="226" r="13" fill="#3F5468"/><text x="408" y="230.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">3</text></g><g><circle cx="380" cy="160" r="13" fill="#3F5468"/><text x="380" y="164.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">4</text></g><g><circle cx="606" cy="300" r="13" fill="#3F5468"/><text x="606" y="304.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">5</text></g><g><circle cx="300" cy="176" r="13" fill="#3F5468"/><text x="300" y="180.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">6</text></g>
</svg><figcaption>How a hail inspection is laid out · hover or tap the numbers</figcaption></figure>
    <div>
      <span class="rr-spec-tag">The Test Square, Explained</span>
      <h2>What a HAAG-certified inspection actually looks like.</h2>
      <div class="rr-spec-list">
        <div class="rr-arow"><div class="num">1</div><div><h4>Collateral first: gutters and downspouts</h4><p>Dented aluminum tells us the hail size and which direction it came from before anyone climbs a ladder. Granules piled at the downspout mean the roof shed its surface.</p></div></div>
        <div class="rr-arow"><div class="num">2</div><div><h4>Soft metals on the roof</h4><p>Vents, flashing, and pipe collars dent at smaller sizes than shingles bruise. They're the roof's own hail gauge.</p></div></div>
        <div class="rr-arow"><div class="num">3</div><div><h4>The ten-by-ten test square</h4><p>One chalked square on each slope facing the storm. Every shingle inside it is hand-checked. The count in the square is extrapolated across the roof — that number is what the claim is built on.</p></div></div>
        <div class="rr-arow"><div class="num">4</div><div><h4>The bruise</h4><p>A fractured mat under a dark circle of granule loss. Soft to the touch, and the reason hail-hit roofs leak a year later. This is functional damage.</p></div></div>
        <div class="rr-arow"><div class="num">5</div><div><h4>AC fins, screens, and the rest of the exterior</h4><p>Hail doesn't stop at the roof. Bent condenser fins, torn screens, chipped siding, and dented wraps all belong on the same claim.</p></div></div>
        <div class="rr-arow"><div class="num">6</div><div><h4>What isn't hail</h4><p>Blisters, foot scuffs, nail pops, and normal granule wear get ruled out on purpose. A report that calls everything hail is a report an adjuster throws out.</p></div></div>
      </div>
    </div>
  </div></div>
</div></section>

<!-- DECISION TOOL -->
<section class="rr-reveal rr-section is-chalk"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Cosmetic or Claimable?</span><h2>Four questions before you call anyone.</h2><p>A straight read on whether what you're seeing is worth a claim — no email, no signup.</p></div>
  <div class="rr-decide" id="rrDecide">
    <div>
      <div class="rr-q"><span class="ql">1. Biggest hail you saw or heard about nearby?</span><div class="opts"><label><input type="radio" name="q1" value="0"> Smaller than a dime</label><label><input type="radio" name="q1" value="1"> Dime to nickel</label><label><input type="radio" name="q1" value="2"> Quarter or larger</label></div></div>
      <div class="rr-q"><span class="ql">2. Dents in gutters, downspouts, or AC fins?</span><div class="opts"><label><input type="radio" name="q2" value="0"> None</label><label><input type="radio" name="q2" value="1"> A few</label><label><input type="radio" name="q2" value="2"> Plenty</label></div></div>
      <div class="rr-q"><span class="ql">3. Granules piling at the downspouts or in the gutters?</span><div class="opts"><label><input type="radio" name="q3" value="0"> No</label><label><input type="radio" name="q3" value="1"> Some</label><label><input type="radio" name="q3" value="2"> A lot</label></div></div>
      <div class="rr-q"><span class="ql">4. Roof age and type?</span><div class="opts"><label><input type="radio" name="q4" value="0"> Under 10 yrs, laminated</label><label><input type="radio" name="q4" value="1"> 10–15 years</label><label><input type="radio" name="q4" value="2"> 15+ years or 3-tab</label></div></div>
    </div>
    <div class="rr-verdict">
      <span class="k" id="dvK">Answer the four questions</span>
      <h3 id="dvH">We'll tell you which way it leans.</h3>
      <p id="dvP">Hail claims are decided by size, collateral evidence, and how brittle the roof already was. Pick the closest answer for each.</p>
      <p style="margin-top:16px"><a class="rr-btn rr-btn-primary" href="#estimate">Get My Free Estimate</a></p>
    </div>
  </div>
</div></section>

<!-- SHOULD YOU FILE -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Should You File?</span><h2>The math, not the pitch.</h2></div>
  <p class="rr-prose">A hail claim makes sense when the documented damage clearly exceeds your deductible and the roof's remaining life is worth protecting. Many Michigan policies now carry a <b>separate wind-and-hail deductible</b>, often one percent of the dwelling coverage — three thousand dollars on a three-hundred-thousand-dollar house. Eight thousand dollars of documented damage against that deductible is a claim. A few hundred dollars of cosmetic dings is not, and we'll say so.</p>
  <p class="rr-prose">Two more numbers matter. A single weather claim raises premiums about <b>18 percent on average</b> nationally, less than water or fire claims, and some carriers don't surcharge one act-of-God claim at all. And Michigan law guarantees you <b>at least one year from the date of loss</b> to bring a claim — but a claim documented within weeks of the storm is a very different claim from one documented next spring.</p>
</div></section>

<!-- MICHIGAN LAW -->
<section class="rr-reveal rr-section is-navy"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow on-dark">What Your Policy Really Pays</span><h2>Michigan rules worth knowing before the adjuster arrives.</h2></div>
  <div class="rr-law">
    <div><b>RCV vs. ACV</b><p>Replacement-cost policies pay what it costs to replace the roof, often holding back depreciation until the work is done. Actual-cash-value policies pay the depreciated value only. Older roofs are increasingly endorsed to ACV.</p><small>Check your declarations page</small></div>
    <div><b>No surprise labor depreciation</b><p>For policies issued or renewed on or after January 1, 2025, Michigan insurers may not depreciate labor, taxes, or overhead in an ACV settlement unless you bought a specific endorsement allowing it.</p><small>DIFS Bulletin 2024-26-INS</small></div>
    <div><b>60 days, or 12 percent</b><p>Once you've submitted satisfactory proof of loss, the insurer has 60 days to pay. After that, the amount owed bears 12 percent simple interest.</p><small>MCL 500.2006</small></div>
    <div><b>Appraisal on demand</b><p>If you and the carrier agree there's a loss but disagree on the amount, Michigan policies must offer appraisal: each side names an appraiser, they pick an umpire, and the number is binding.</p><small>MCL 500.2833(1)(m)</small></div>
  </div>
  <p class="rr-prose" style="color:#dbe4ee;margin-top:26px">One more rule, about us: Michigan does not allow a repair contractor to act as your insurance adjuster (MCL 500.1224). We <b style="color:#fff">support</b> your claim — document it, meet the adjuster on your roof, and walk the evidence slope by slope — and we never adjust it. Disputes go to the state regulator, DIFS, at 877-999-6442.</p>
</div></section>

<!-- ADJUSTER PREP -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">The Adjuster Meeting</span><h2>What to have ready. We'll be on the roof with you.</h2><p>Most homeowners file one storm claim in a lifetime. We've supported hundreds. Here's the file that makes the meeting short.</p></div>
  <ul class="rr-prep">
    <li>Your policy's declarations page — deductible, RCV or ACV, any roof-age endorsement</li>
    <li>The date of loss and the NWS event it matches (see the record above)</li>
    <li>Ground photos of dented gutters, downspouts, AC fins, and screens, taken the week of the storm</li>
    <li>Our dated inspection report: test-square counts by slope, soft-metal evidence, photos</li>
    <li>Photos of anything already leaking inside, with dates</li>
    <li>Your claim number and the adjuster's name and appointment time — we meet them there</li>
    <li>A list of everything hail touched: roof, siding, gutters, wraps, screens, AC, fence, mailbox</li>
    <li>Nothing signed with anyone else — no assignment of benefits, no contingency agreement</li>
  </ul>
</div></section>

<!-- CLASS 4 -->
<section class="rr-reveal rr-section is-chalk"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Rebuild It Hail-Tougher</span><h2>Class 4 impact-resistant shingles we're certified to install.</h2><p>If hail took the roof, the replacement can be built for the next storm. UL 2218 Class 4 is the top impact rating — a two-inch steel ball dropped from twenty feet without cracking the mat.</p></div>
  <div class="rr-ctable">
    <div class="rr-ctrow rr-cthead"><div>Line</div><div>Technology</div><div>Rating</div><div>Why it matters</div></div>
    <div class="rr-ctrow pick"><div class="m"><span class="cl">Line</span>Owens Corning Duration FLEX<span class="pill">Platinum installer</span></div><div><span class="cl">Tech</span>SBS polymer-modified asphalt</div><div><span class="cl">Rating</span><span class="ct">UL 2218 Class 4</span></div><div><span class="cl">Why</span>Rubberized asphalt flexes on impact instead of fracturing. Our Platinum status carries Owens Corning's strongest warranty tier.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Line</span>GAF Timberline AS II</div><div><span class="cl">Tech</span>SBS-modified with LayerLock</div><div><span class="cl">Rating</span><span class="ct">UL 2218 Class 4</span></div><div><span class="cl">Why</span>Impact resistance on the country's best-selling shingle profile. Installed under our GAF Master Elite certification.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Line</span>CertainTeed Landmark ClimateFlex / NorthGate</div><div><span class="cl">Tech</span>SBS-modified asphalt</div><div><span class="cl">Rating</span><span class="ct">UL 2218 Class 4</span></div><div><span class="cl">Why</span>CertainTeed's cold-climate line: flexible in Michigan winters, impact-rated for Michigan summers.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Line</span>DaVinci composite slate & shake</div><div><span class="cl">Tech</span>Engineered polymer</div><div><span class="cl">Rating</span><span class="ct">UL 2218 Class 4</span></div><div><span class="cl">Why</span>The look of slate or cedar with a 50-year limited warranty and no granules to lose.</div></div>
  </div>
  <p class="rr-compare-note">Many carriers discount the wind-and-hail portion of a premium for a Class 4 roof. Ask your agent before you choose — and know that the Class 4 test measures mat fracture, not dents or granule loss, so no shingle is hail-proof.</p>
</div></section>

<!-- STORM CHASERS -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">After the Storm, the Trucks</span><h2>How to read the roofer at your door.</h2><p>Hail brings out-of-state crews the way it brings adjusters. A few rules keep you safe.</p></div>
  <ul class="rr-prep">
    <li>Look up the license. Every Michigan builder has one you can check with LARA. Ours is #262000657.</li>
    <li>“We'll cover your deductible” is a felony offer in Michigan. Walk away.</li>
    <li>Never sign an assignment of benefits or a contingency agreement on your porch.</li>
    <li>Ask where they were five years ago and where the warranty lives in five more.</li>
    <li>A free roof is not a thing. A free estimate is.</li>
    <li>Get the inspection report in writing with photos and dates — then decide.</li>
  </ul>
  <div class="rr-shead" style="margin-top:44px"><span class="rr-eyebrow">Related</span><h2 style="font-size:24px">Read more before you file.</h2></div>
  <div class="rr-chips">
    <a href="https://reasonablecontractingservices.com/signs-hail-damage-roof/">Signs of hail damage: the photo guide</a>
    <a href="https://reasonablecontractingservices.com/roof-insurance-claim-after-storm-damage/">Filing a roof insurance claim in Michigan</a>
    <a href="https://reasonablecontractingservices.com/impact-resistant-shingles-st-clair-michigan/">Impact-resistant shingles explained</a>
    <a href="https://reasonablecontractingservices.com/wind-damage/">Wind came with the hail?</a>
    <a href="https://reasonablecontractingservices.com/siding-repair/">Hail-damaged siding</a>
    <a href="https://reasonablecontractingservices.com/gutter-repair/">Dented gutters</a>
  </div>
</div></section>

<!-- FAQ -->
<section class="rr-reveal rr-section is-chalk"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Hail Questions</span><h2>Answered with the numbers.</h2></div>
  <div class="rr-faq-list"><div class="rr-qa"><button class="rr-qa-q" type="button">What size hail damages an asphalt roof?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">HAAG's field thresholds are about one inch (quarter-sized) for 3-tab shingles and about 1.25 inches for laminated shingles, and the National Weather Service calls one-inch hail severe. Softer targets — vinyl siding, aluminum wraps, AC fins, window screens — dent at smaller sizes, and older brittle roofs bruise more easily than new ones.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">My roof looks fine from the ground. Can it still be damaged?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Yes — that is the whole problem with hail. The most common damage is bruising: the impact fractures the fiberglass mat under the granules without leaving a hole. It looks fine from the driveway and leaks a year or two later. The collateral evidence — dented gutters, downspout granules, beat-up soft metals — is what tells us to look closer.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">How long do I have to file a hail claim in Michigan?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Michigan law requires insurers to allow at least one year from the date of loss to bring a claim to court (MCL 500.2833), and your policy sets its own notice window — usually “prompt.” Adjusters weigh documentation dated close to the storm far more heavily, so the practical answer is weeks, not months.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">What does a HAAG-certified inspector actually do?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Reads the collateral surfaces first — gutters, AC fins, vents, fences — to establish hail size and direction. Lays out a ten-by-ten test square on each slope and hand-checks every shingle inside it for mat fractures, then extrapolates the count across the roof. Rules out wear, blisters, and foot scuffs that are not hail. The result is a dated, photographed report an adjuster recognizes.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Will one hail claim raise my premium?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Weather claims average an increase of roughly 18 percent nationally on the first claim, versus 25 to 28 percent for water or fire, and some carriers don't surcharge a single act-of-God claim at all. Regional rate changes after a big storm hit everyone in the area whether they filed or not.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Can my insurer depreciate labor on the payout?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Not in Michigan for policies issued or renewed on or after January 1, 2025, unless you bought a specific reduced-premium endorsement allowing it. The state insurance regulator's 2024 bulletin ended surprise labor depreciation on actual-cash-value settlements.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">My roof is over fifteen years old. Will they pay full replacement cost?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Increasingly, carriers endorse older roofs to actual cash value or a payment schedule tied to age. Check the declarations page for a roof-surfacing endorsement before you file — we'll read it with you. It changes the math on what a claim is worth.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">What if the adjuster says it's only cosmetic?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Functional damage means the mat is fractured or enough asphalt is exposed to shorten the roof's life; cosmetic means appearance only. If you disagree on the amount, Michigan policies must offer an appraisal process on written demand — each side names an appraiser and they pick an umpire. Our test-square documentation is what that conversation runs on.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Can a roofer cover my deductible?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">No. Waiving or absorbing a deductible is insurance fraud in Michigan and a felony. We also never ask you to sign an assignment of benefits. Any contractor offering either is telling you what kind of company they are.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Is the estimate really free?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Yes - the estimate is free, no strings. If the damage supports a claim, we document it, meet your adjuster on the roof, and restore the roof, siding, gutters, and wraps on one claim. And if it's cosmetic, we say so in writing.</div></div></div></div>
</div></section>

<!-- AREAS -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Across Michigan</span><h2>Hail documentation from Port Huron to Troy.</h2><p>Port Huron covers St. Clair, Sanilac, and Lapeer counties and the Thumb. Troy covers Oakland and Macomb. Call the office nearest you. Storm and hail claims in <a href="https://reasonablecontractingservices.com/kalamazoo-county-hail-storm-damage/">Kalamazoo County and Southwest Michigan</a> are handled by the same crews.</p></div>
  <div class="rr-areas">
    <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/st-clair-county-roofers/">St. Clair County</a><p><a href="https://reasonablecontractingservices.com/roofers-in-port-huron-mi/">Port Huron</a> · <a href="https://reasonablecontractingservices.com/marysville-roofers/">Marysville</a> · <a href="https://reasonablecontractingservices.com/fort-gratiot-roofers/">Fort Gratiot</a> · <a href="https://reasonablecontractingservices.com/st-clair-roofers/">St. Clair</a></p></div>
    <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/sanilac-county-roofers/">Sanilac County</a><p><a href="https://reasonablecontractingservices.com/sandusky-roofers/">Sandusky</a> · <a href="https://reasonablecontractingservices.com/lexington-roofers/">Lexington</a> · <a href="https://reasonablecontractingservices.com/croswell-roofers/">Croswell</a> · <a href="https://reasonablecontractingservices.com/marlette-roofers/">Marlette</a></p></div>
    <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/lapeer-county/">Lapeer County</a><p><a href="https://reasonablecontractingservices.com/lapeer-roofers/">Lapeer</a> · <a href="https://reasonablecontractingservices.com/imlay-city-roofers/">Imlay City</a> · <a href="https://reasonablecontractingservices.com/almont-roofers/">Almont</a> · <a href="https://reasonablecontractingservices.com/north-branch-roofers/">North Branch</a></p></div>
    <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/roofing-contractors-oakland-county-mi/">Oakland County</a><p><a href="https://reasonablecontractingservices.com/roofers-troy-mi/">Troy</a> · <a href="https://reasonablecontractingservices.com/rochester-michigan-roofers/">Rochester</a> · <a href="https://reasonablecontractingservices.com/roofers-birmingham-mi/">Birmingham</a> · <a href="https://reasonablecontractingservices.com/auburn-hills-roofers/">Auburn Hills</a></p></div>
    <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/macomb-county/">Macomb County</a><p><a href="https://reasonablecontractingservices.com/clinton-township-roofers/">Clinton Township</a> · <a href="https://reasonablecontractingservices.com/shelby-township-roofers/">Shelby Township</a> · <a href="https://reasonablecontractingservices.com/macomb-township-roofers/">Macomb Township</a> · <a href="https://reasonablecontractingservices.com/roofing-companies-warren-mi/">Warren</a></p></div>
  <div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/kalamazoo-roofers/">Kalamazoo Area</a><p><a href="https://reasonablecontractingservices.com/kalamazoo-city-roofers/">Kalamazoo</a> · <a href="https://reasonablecontractingservices.com/portage-roofers/">Portage</a> · <a href="https://reasonablecontractingservices.com/battle-creek-roofers/">Battle Creek</a> · <a href="https://reasonablecontractingservices.com/texas-township-roofers/">Texas Township</a> · <a href="https://reasonablecontractingservices.com/oshtemo-roofers/">Oshtemo Township</a> · <a href="https://reasonablecontractingservices.com/richland-roofers/">Richland & Gull Lake</a> · <a href="https://reasonablecontractingservices.com/comstock-roofers/">Comstock</a></p></div><div class="rr-area"><a class="cty" href="https://reasonablecontractingservices.com/grand-rapids-roofers/">Grand Rapids Area</a><p><a href="https://reasonablecontractingservices.com/grand-rapids-roofers/">Grand Rapids</a> · <a href="https://reasonablecontractingservices.com/wyoming-roofers/">Wyoming</a> · <a href="https://reasonablecontractingservices.com/kentwood-roofers/">Kentwood</a> · <a href="https://reasonablecontractingservices.com/holland-roofers/">Holland</a> · <a href="https://reasonablecontractingservices.com/grandville-roofers/">Grandville</a> · <a href="https://reasonablecontractingservices.com/jenison-roofers/">Jenison</a> · <a href="https://reasonablecontractingservices.com/byron-center-roofers/">Byron Center</a></p></div></div>
</div></section>

<!-- FINAL -->
<section class="rr-reveal rr-section is-navy"><div class="rr-wrap" style="text-align:center">
  <div class="rr-shead" style="margin-bottom:28px"><span class="rr-eyebrow on-dark">Start the Ledger</span><h2>Get it documented while the date still matters.</h2><p>HAAG-certified documentation, a straight cosmetic-or-claimable answer, and the whole exterior restored on one claim. Estimates are free.</p></div>
  <div class="rr-two-tel" style="justify-content:center">
    <a class="rr-btn rr-btn-primary" href="#estimate">Get My Free Estimate</a>
    <a class="rr-btn rr-btn-ghost" href="tel:8109843420">Port Huron (810) 984-3420</a>
    <a class="rr-btn rr-btn-ghost" href="tel:2488003269">Troy (248) 800-3269</a>
  </div>
  <p style="margin-top:22px;color:#aab8c7;font-size:14px">Family-owned since 1984 · Michigan Builders License #262000657 · Licensed & insured · Office lines are voice only — please call.</p>
</div></section>
<div class="rr-mcta" id="rrMcta"><a href="tel:8109843420" class="rr-btn rr-btn-ghost" style="color:var(--navy);border-color:rgba(20,46,71,.3)">Call Now</a><a href="#estimate" class="rr-btn rr-btn-primary">Free Estimate</a></div>
</div>
<script>
(function(){
var G=[
 ['Pea \u00b7 \u00bc inch','Below damage threshold','Rarely damages shingles of any age. Can mark soft vinyl and tender plants.','Almost never. Aluminum may show pinpricks on close inspection.','Note the date. No action unless something larger fell nearby.'],
 ['Dime \u00b7 0.70 inch','Below severe threshold','Granule scuffing on older 3-tab roofs; laminated shingles usually unaffected.','Light dents possible in thin aluminum and AC fins.','Walk the yard for dents in gutters and fins. If you find them, the hail was bigger than you thought.'],
 ['Penny \u00b7 \u00be inch','Below severe threshold','Bruising possible on aged or brittle 3-tab roofs; laminated roofs usually fine.','Dents in gutters, downspouts, AC fins. Vinyl siding can chip on the weather side.','Photograph collateral dents with the date; get older roofs documented.'],
 ['Nickel \u00b7 0.88 inch','Approaching severe','Functional damage likely on 3-tab; laminated roofs bruise if older than about 10 years.','Widespread soft-metal dents; screens tear; vinyl chips.','Get the roof documented. Collateral evidence at this size supports a claim on older roofs.'],
 ['Quarter \u00b7 1 inch','NWS severe threshold','HAAG threshold for 3-tab: functional damage likely. Older laminated roofs bruise. New laminated may show only scuffing.','Dents in gutters, wraps, fins; vinyl siding chips on north and west faces; screens tear.','Photograph gutters, downspouts, and fins from the ground with the date. Document the roof before the next storm.'],
 ['Half dollar \u00b7 1\u00bc inch','Severe','HAAG threshold for laminated shingles: bruising and mat fractures likely on most roofs.','Heavy soft-metal damage; cracked vinyl; broken skylight domes possible.','This is a claim-sized event for most roofs. Document it this week.'],
 ['Ping-pong \u00b7 1\u00bd inch','Severe','Mat fractures on nearly all asphalt roofs; punctures on old 3-tab.','Cracked siding, dented steel doors, damaged AC units.','File. Document the whole exterior, not just the roof.'],
 ['Golf ball \u00b7 1\u00be inch','Severe \u2014 damaging','Punctures and exposed mat common; even new Class 4 shingles can show dents.','Broken windows and skylights; cracked fiber-cement; vehicle damage.','File promptly and keep every receipt for emergency repairs.'],
 ['Lime \u00b7 2 inch','Severe \u2014 damaging','Widespread punctures; decking can be cracked under thin roofs.','Broken glass, holed vinyl, crushed vents.','Tarp anything open. Treat as a total-exterior claim.'],
 ['Tennis ball \u00b7 2\u00bd inch','Extreme','Roof replacement almost certain; structural check of decking.','Broken windows, dented steel, destroyed outdoor equipment.','Safety first, then tarp, then document everything with dates.']];
var g=document.getElementById('rrGauge');if(g){var bs=[].slice.call(g.querySelectorAll('button'));
function pick(i){bs.forEach(function(b,j){b.classList.toggle('on',j===i)});var r=G[i];document.getElementById('gName').textContent=r[0];var s=document.getElementById('gSev');s.textContent=r[1];s.classList.toggle('hot',i>=4);document.getElementById('gShingle').textContent=r[2];document.getElementById('gSoft').textContent=r[3];document.getElementById('gDo').textContent=r[4];}
bs.forEach(function(b){b.addEventListener('click',function(){pick(parseInt(b.getAttribute('data-i'),10))})});pick(4);}
var d=document.getElementById('rrDecide');if(d){var rs=[].slice.call(d.querySelectorAll('input[type=radio]'));
function upd(){var t=0,n=0;['q1','q2','q3','q4'].forEach(function(q){var c=d.querySelector('input[name='+q+']:checked');if(c){t+=parseInt(c.value,10);n++;}});rs.forEach(function(r){r.parentNode.classList.toggle('on',r.checked)});
var K=document.getElementById('dvK'),H=document.getElementById('dvH'),P=document.getElementById('dvP');
if(n<4){K.textContent=n+' of 4 answered';H.textContent='Keep going.';P.textContent='Two more answers and the ledger has enough to lean one way.';if(n===0){K.textContent='Answer the four questions';H.textContent='We\u2019ll tell you which way it leans.';P.textContent='Hail claims are decided by size, collateral evidence, and how brittle the roof already was. Pick the closest answer for each.';}return;}
if(t<=2){K.textContent='Leans cosmetic';H.textContent='Probably record it and monitor.';P.textContent='Small hail, little collateral evidence, and a roof with life left rarely adds up to functional damage. Photograph what you see with the date so the record exists, and call us if something larger falls this season.';}
else if(t<=5){K.textContent='Unclear \u2014 worth documenting';H.textContent='This is exactly what the test square is for.';P.textContent='There is enough collateral evidence to justify a proper look. A dated inspection settles it either way, and if it is cosmetic we will say so in writing.';}
else{K.textContent='Leans functional';H.textContent='Document it now, while the date still matters.';P.textContent='Quarter-plus hail, dented metals, and granule loss on an older roof is the profile of a claimable loss. Get the roof documented before the next storm and before the crews at your door do.';}}
rs.forEach(function(r){r.addEventListener('change',upd)});}
})();
</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "Service", "name": "Hail Damage Roof Repair and Documentation", "serviceType": "Hail damage roof inspection, documentation, insurance claim support and restoration", "description": "HAAG-certified hail damage documentation (test squares, dated photos, collateral evidence), a straight cosmetic-or-claimable answer, insurance claim support, and restoration of hail-damaged roofs, siding, gutters and wraps. Free estimates from two Michigan offices, Port Huron and Troy.", "areaServed": [{"@type": "AdministrativeArea", "name": "St. Clair County, MI"}, {"@type": "AdministrativeArea", "name": "Sanilac County, MI"}, {"@type": "AdministrativeArea", "name": "Lapeer County, MI"}, {"@type": "AdministrativeArea", "name": "Macomb County, MI"}, {"@type": "AdministrativeArea", "name": "Oakland County, MI"}], "provider": {"@type": "RoofingContractor", "name": "Reasonable Roofing & Contracting", "@id": "https://reasonablecontractingservices.com/#organization", "telephone": ["(810) 984-3420", "(248) 800-3269"], "address": {"@type": "PostalAddress", "streetAddress": "1605 Beard St", "addressLocality": "Port Huron", "addressRegion": "MI", "postalCode": "48060", "addressCountry": "US"}, "location": [{"@type": "Place", "name": "Reasonable Roofing & Contracting - Port Huron", "telephone": "(810) 984-3420", "address": {"@type": "PostalAddress", "streetAddress": "1605 Beard St", "addressLocality": "Port Huron", "addressRegion": "MI", "postalCode": "48060", "addressCountry": "US"}}, {"@type": "Place", "name": "Reasonable Roofing & Contracting - Troy", "telephone": "(248) 800-3269", "address": {"@type": "PostalAddress", "streetAddress": "1470 Souter Blvd", "addressLocality": "Troy", "addressRegion": "MI", "postalCode": "48083", "addressCountry": "US"}}], "hasCredential": {"@type": "EducationalOccupationalCredential", "name": "Michigan Residential Builders License", "identifier": "262000657"}}, "url": "https://reasonablecontractingservices.com/hail-damage/"}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What size hail damages an asphalt roof?", "acceptedAnswer": {"@type": "Answer", "text": "HAAG's field thresholds are about one inch (quarter-sized) for 3-tab shingles and about 1.25 inches for laminated shingles, and the National Weather Service calls one-inch hail severe. Softer targets - vinyl siding, aluminum wraps, AC fins, window screens - dent at smaller sizes, and older brittle roofs bruise more easily than new ones."}}, {"@type": "Question", "name": "My roof looks fine from the ground. Can it still be damaged?", "acceptedAnswer": {"@type": "Answer", "text": "Yes - that is the whole problem with hail. The most common damage is bruising: the impact fractures the fiberglass mat under the granules without leaving a hole. It looks fine from the driveway and leaks a year or two later. The collateral evidence - dented gutters, downspout granules, beat-up soft metals - is what tells us to look closer."}}, {"@type": "Question", "name": "How long do I have to file a hail claim in Michigan?", "acceptedAnswer": {"@type": "Answer", "text": "Michigan law requires insurers to allow at least one year from the date of loss to bring a claim to court (MCL 500.2833), and your policy sets its own notice window - usually \"prompt.\" Adjusters weigh documentation dated close to the storm far more heavily, so the practical answer is weeks, not months."}}, {"@type": "Question", "name": "What does a HAAG-certified inspector actually do?", "acceptedAnswer": {"@type": "Answer", "text": "Reads the collateral surfaces first - gutters, AC fins, vents, fences - to establish hail size and direction. Lays out a ten-by-ten test square on each slope and hand-checks every shingle inside it for mat fractures, then extrapolates the count across the roof. Rules out wear, blisters, and foot scuffs that are not hail. The result is a dated, photographed report an adjuster recognizes."}}, {"@type": "Question", "name": "Will one hail claim raise my premium?", "acceptedAnswer": {"@type": "Answer", "text": "Weather claims average an increase of roughly 18 percent nationally on the first claim, versus 25 to 28 percent for water or fire, and some carriers don't surcharge a single act-of-God claim at all. Regional rate changes after a big storm hit everyone in the area whether they filed or not."}}, {"@type": "Question", "name": "Can my insurer depreciate labor on the payout?", "acceptedAnswer": {"@type": "Answer", "text": "Not in Michigan for policies issued or renewed on or after January 1, 2025, unless you bought a specific reduced-premium endorsement allowing it. The state insurance regulator's 2024 bulletin ended surprise labor depreciation on actual-cash-value settlements."}}, {"@type": "Question", "name": "My roof is over fifteen years old. Will they pay full replacement cost?", "acceptedAnswer": {"@type": "Answer", "text": "Increasingly, carriers endorse older roofs to actual cash value or a payment schedule tied to age. Check the declarations page for a roof-surfacing endorsement before you file - we'll read it with you. It changes the math on what a claim is worth."}}, {"@type": "Question", "name": "What if the adjuster says it's only cosmetic?", "acceptedAnswer": {"@type": "Answer", "text": "Functional damage means the mat is fractured or enough asphalt is exposed to shorten the roof's life; cosmetic means appearance only. If you disagree on the amount, Michigan policies must offer an appraisal process on written demand - each side names an appraiser and they pick an umpire. Our test-square documentation is what that conversation runs on."}}, {"@type": "Question", "name": "Can a roofer cover my deductible?", "acceptedAnswer": {"@type": "Answer", "text": "No. Waiving or absorbing a deductible is insurance fraud in Michigan and a felony. We also never ask you to sign an assignment of benefits. Any contractor offering either is telling you what kind of company they are."}}]}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "HowTo", "name": "How to document hail damage for an insurance claim in Michigan", "step": [{"@type": "HowToStep", "name": "Record the date and hail size", "text": "Note the date of the storm and the largest hail you saw; match it to the National Weather Service event summary."}, {"@type": "HowToStep", "name": "Photograph collateral damage from the ground", "text": "Photograph dented gutters, downspouts, window wraps, AC fins, torn screens and chipped siding with dates."}, {"@type": "HowToStep", "name": "Get a HAAG-certified inspection", "text": "Have each slope inspected with a ten-by-ten test square and the count documented with photos."}, {"@type": "HowToStep", "name": "Read your policy", "text": "Check the declarations page for the wind-and-hail deductible, replacement cost vs actual cash value, and any roof-age endorsement."}, {"@type": "HowToStep", "name": "File and meet the adjuster", "text": "File promptly, share the dated report, and have your contractor meet the adjuster on the roof."}]}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://reasonablecontractingservices.com/"}, {"@type": "ListItem", "position": 2, "name": "Storm Damage", "item": "https://reasonablecontractingservices.com/storm-damage-roof-repair/"}, {"@type": "ListItem", "position": 3, "name": "Hail Damage", "item": "https://reasonablecontractingservices.com/hail-damage/"}]}</script><script>document.documentElement.classList.add("rr-js");</script><script>(function(){var D=document;D.documentElement.classList.add("rr-js");function ready(fn){if(D.readyState!="loading")fn();else D.addEventListener("DOMContentLoaded",fn);}ready(function(){var rm=window.matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;var rev=[].slice.call(D.querySelectorAll(".rr-reveal"));if(rm||!("IntersectionObserver"in window)){rev.forEach(function(e){e.classList.add("in");});}else{var io=new IntersectionObserver(function(es){es.forEach(function(en){if(en.isIntersecting){en.target.classList.add("in");io.unobserve(en.target);}});},{threshold:0.12,rootMargin:"0px 0px -8% 0px"});rev.forEach(function(e){io.observe(e);});}var nums=[].slice.call(D.querySelectorAll(".rr-svcstatnum[data-to]"));function run(el){var to=parseFloat(el.getAttribute("data-to")),suf=el.getAttribute("data-suf")||"",dec=to%1!=0,t0=null,dur=1400;function st(ts){if(!t0)t0=ts;var p=Math.min((ts-t0)/dur,1),e=1-Math.pow(1-p,3),v=to*e;el.textContent=(dec?v.toFixed(1):Math.round(v))+suf;if(p<1)requestAnimationFrame(st);}requestAnimationFrame(st);}if(rm||!("IntersectionObserver"in window)){nums.forEach(function(el){el.textContent=el.getAttribute("data-to")+(el.getAttribute("data-suf")||"");});}else{var io2=new IntersectionObserver(function(es){es.forEach(function(en){if(en.isIntersecting){run(en.target);io2.unobserve(en.target);}});},{threshold:0.6});nums.forEach(function(el){io2.observe(el);});}});})();</script><script>(function(){var D=document;function init(spec){var fig=spec.querySelector('.rr-spec-fig svg');if(!fig)return;var rows=[].slice.call(spec.querySelectorAll('.rr-arow'));var hotByNum={},rowByNum={};rows.forEach(function(r){var x=r.querySelector('.num');if(x){rowByNum[parseInt(x.textContent,10)]=r;}});[].slice.call(fig.querySelectorAll('g')).forEach(function(g){var t=g.querySelector('text'),c=g.querySelector('circle');if(t&&c){var nn=parseInt(t.textContent,10);if(nn){hotByNum[nn]=g;g.setAttribute('class',(g.getAttribute('class')||'')+' rr-hot');g.setAttribute('tabindex','0');}}});var nums=Object.keys(rowByNum).map(Number).filter(function(x){return hotByNum[x];}).sort(function(a,b){return a-b;});if(!nums.length)return;var fc=spec.querySelector('.rr-spec-fig');var hint=null;if(fc){hint=D.createElement('span');hint.className='rr-spec-hint';hint.textContent='Hover to explore';fc.appendChild(hint);}var cur=-1,timer=null,locked=false;function paint(num){nums.forEach(function(k){var on=(k===num);hotByNum[k].classList.toggle('rr-hot-on',on);hotByNum[k].classList.toggle('rr-hot-dim',!on);rowByNum[k].classList.toggle('rr-row-on',on);rowByNum[k].classList.toggle('rr-row-dim',!on);});cur=num;}function stop(){if(timer){clearInterval(timer);timer=null;}}nums.forEach(function(k){function act(){locked=true;stop();if(hint)hint.classList.add('hide');paint(k);}hotByNum[k].addEventListener('mouseenter',act);hotByNum[k].addEventListener('click',act);hotByNum[k].addEventListener('focus',act);rowByNum[k].setAttribute('tabindex','0');rowByNum[k].addEventListener('mouseenter',act);rowByNum[k].addEventListener('click',act);rowByNum[k].addEventListener('focus',act);});paint(nums[0]);var rm=window.matchMedia&&matchMedia('(prefers-reduced-motion: reduce)').matches;if(!rm){timer=setInterval(function(){if(locked){stop();return;}var i=nums.indexOf(cur);paint(nums[(i+1)%nums.length]);},2600);}}function ready(fn){if(D.readyState!='loading')fn();else D.addEventListener('DOMContentLoaded',fn);}ready(function(){[].slice.call(D.querySelectorAll('.rr-spec')).forEach(init);});})();</script><script>
(function(){
  'use strict';
  function tryOpenQuoteWidget(){
    var apis=[
      function(){return window.RoofleWidget&&typeof window.RoofleWidget.open==='function'&&(window.RoofleWidget.open(),true);},
      function(){return window.Roofle&&typeof window.Roofle.open==='function'&&(window.Roofle.open(),true);},
      function(){return typeof window.openRoofleWidget==='function'&&(window.openRoofleWidget(),true);}
    ];
    for(var i=0;i<apis.length;i++){try{if(apis[i]())return true;}catch(e){}}
    var sel=['[data-roofle-widget]','.roofle-widget-trigger','.roofle-launcher','.roofle-trigger','iframe[src*="roofle"]'];
    for(var j=0;j<sel.length;j++){try{var el=document.querySelector(sel[j]);if(el&&el.click){el.click();return true;}}catch(e){}}
    return false;
  }
  document.addEventListener('click',function(e){var t=e.target.closest&&e.target.closest('[data-rr-quote]');if(!t)return;if(tryOpenQuoteWidget())e.preventDefault();},false);
  function initReveal(){
    var targets=document.querySelectorAll('.rr-specials .rr-shead, .rr-specials .rr-offer, .rr-specials .rr-cmp, .rr-specials .rr-step, .rr-specials .rr-card, .rr-specials .rr-final');
    if(!targets.length||!('IntersectionObserver' in window))return;
    targets.forEach(function(el){el.classList.add('rr-reveal');});
    var io=new IntersectionObserver(function(ents){ents.forEach(function(en){if(en.isIntersecting){en.target.classList.add('is-in');io.unobserve(en.target);}});},{threshold:.12,rootMargin:'0px 0px -40px 0px'});
    targets.forEach(function(el){io.observe(el);});
  }
  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',initReveal);else initReveal();
})();
</script><script>
(function(){
  document.querySelectorAll('.rr-specials .rr-qa-q').forEach(function(b){
    b.addEventListener('click',function(){
      var qa=b.closest('.rr-qa'),a=qa.querySelector('.rr-qa-a'),open=qa.classList.contains('is-open');
      qa.classList.toggle('is-open',!open); a.style.maxHeight=open?null:a.scrollHeight+'px';
    });
  });
  var mcta=document.getElementById('rrMcta');
  function onScroll(){if(mcta){mcta.classList.toggle('is-show',window.pageYOffset>520);}}
  window.addEventListener('scroll',onScroll,{passive:true});onScroll();
})();
</script>
```
