# Ice Dam Removal

```
<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-ice">

<style>
.rr.rr-ice{--ice:#2F7FB8;--ice-deep:#1D5B8A;--frost:#EEF5FB;--frost-line:#CFE0EF;--heat:#E0A83A;--heat-deep:#B7791F}
.rr.rr-ice .is-frost{background:var(--frost);border-top:1px solid var(--frost-line);border-bottom:1px solid var(--frost-line)}
.rr.rr-ice .rr-eyebrow{color:var(--ice-deep)}
.rr.rr-ice .rr-badgebar .dot{background:var(--ice)}
.rr.rr-ice .rr-arow .num{background:var(--ice)}
.rr.rr-ice .rr-spec-list .rr-arow.rr-row-on{background:rgba(47,127,184,.08);box-shadow:inset 4px 0 0 var(--ice)}
.rr.rr-ice .rr-spec-list .rr-arow.rr-row-on h4{color:var(--ice-deep)}
.rr.rr-ice .rr-spec-list .rr-arow.rr-row-on .num{box-shadow:0 0 0 4px rgba(47,127,184,.2)}
.rr.rr-ice .rr-spec-fig svg .rr-hot-on{filter:drop-shadow(0 1px 5px rgba(47,127,184,.7))}
.rr.rr-ice .rr-spec-tag{color:var(--ice-deep)}
.rr.rr-ice .rr-spec-fig{position:relative}
.rr.rr-ice .rr-eyebrow.on-dark{color:#9FD0F0}
.rr.rr-ice .rr-ctrow{align-items:stretch}
.rr.rr-ice .rr-ctrow>div{display:flex;align-items:center;flex-wrap:wrap}

/* triage band */
.rr.rr-ice .rr-triage{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-top:26px}
.rr.rr-ice .rr-triage div{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:18px 16px}
.rr.rr-ice .rr-triage b{display:block;font-family:'Archivo',sans-serif;font-size:15px;color:#fff;margin-bottom:6px}
.rr.rr-ice .rr-triage p{color:#c9d6e3;font-size:14px;line-height:1.5}
.rr.rr-ice .rr-triage .no b{color:#ffb3a7}
/* fixes */
.rr.rr-ice .rr-fixes{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.rr.rr-ice .rr-fix{background:#fff;border:1px solid var(--frost-line);border-radius:16px;padding:24px 22px;display:flex;flex-direction:column;gap:10px}
.rr.rr-ice .rr-fix .k{font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ice-deep)}
.rr.rr-ice .rr-fix h3{font-family:'Archivo',sans-serif;font-weight:800;font-size:19px;color:var(--navy);line-height:1.2}
.rr.rr-ice .rr-fix p{color:var(--slate-grey);font-size:14.5px;line-height:1.55}
.rr.rr-ice .rr-fix .not{margin-top:auto;padding-top:12px;border-top:1px solid var(--frost-line);font-size:13px;color:var(--slate-grey)}
.rr.rr-ice .rr-fix .not b{color:var(--navy)}
/* self-check */
.rr.rr-ice .rr-selfcheck{background:#fff;border:1px solid var(--frost-line);border-radius:18px;box-shadow:var(--shadow-md);padding:30px;display:grid!important;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)!important;gap:30px;align-items:start;width:100%;max-width:1100px;margin:0 auto}
.rr.rr-ice .rr-sc-list{display:grid!important;grid-template-columns:1fr 1fr!important;gap:10px;width:100%!important;min-width:0}
.rr.rr-ice .rr-sc-list label{display:flex!important;width:100%!important;max-width:none!important;margin:0!important;box-sizing:border-box;gap:12px;align-items:flex-start;border:1px solid var(--frost-line);border-radius:12px;padding:12px 14px;cursor:pointer;font-size:14.5px;font-weight:400;color:var(--slate);line-height:1.4;transition:.15s;text-align:left}
.rr.rr-ice .rr-sc-list label:hover{border-color:var(--ice)}
.rr.rr-ice .rr-sc-list input{margin-top:3px;accent-color:var(--ice);width:16px;height:16px;flex-shrink:0}
.rr.rr-ice .rr-sc-list label.on{background:rgba(47,127,184,.07);border-color:var(--ice)}
.rr.rr-ice .rr-sc-result{background:var(--frost);border:1px solid var(--frost-line);border-radius:14px;padding:22px}
.rr.rr-ice .rr-sc-result .tier{font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ice-deep)}
.rr.rr-ice .rr-sc-result 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-ice .rr-sc-result p{color:var(--slate-grey);font-size:14.5px;line-height:1.55}
.rr.rr-ice .rr-sc-meter{height:8px;border-radius:999px;background:#dfe9f3;margin:14px 0 6px;overflow:hidden}
.rr.rr-ice .rr-sc-meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--ice),var(--heat));transition:width .35s ease}
.rr.rr-ice .rr-sc-count{font-family:'Space Mono',monospace;font-size:11px;color:var(--cool-grey);letter-spacing:.08em;text-transform:uppercase}
/* winter numbers */
.rr.rr-ice .rr-snow{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.rr.rr-ice .rr-snowcard{background:#fff;border:1px solid var(--frost-line);border-radius:16px;padding:24px 18px;text-align:center}
.rr.rr-ice .rr-snowcard .n{font-family:'Archivo',sans-serif;font-weight:800;font-size:40px;color:var(--ice-deep);letter-spacing:-.02em;line-height:1}
.rr.rr-ice .rr-snowcard .n small{font-size:18px;font-weight:700;color:var(--cool-grey)}
.rr.rr-ice .rr-snowcard .l{display:block;margin-top:10px;font-family:'Archivo',sans-serif;font-weight:700;font-size:14px;color:var(--navy)}
.rr.rr-ice .rr-snowcard .s{display:block;margin-top:4px;font-size:12.5px;color:var(--slate-grey)}
.rr.rr-ice .rr-src{margin-top:14px;font-size:12.5px;color:var(--cool-grey);text-align:center}
/* misc */
.rr.rr-ice .rr-wontdo{list-style:none;padding:0;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:12px 40px;max-width:860px;justify-content:center}
.rr.rr-ice .rr-chips{justify-content:center;max-width:940px;margin:0 auto}
.rr.rr-ice .rr-wontdo li{position:relative;padding-left:28px;color:var(--slate);font-size:15px;line-height:1.5}
.rr.rr-ice .rr-wontdo li::before{content:'\2715';position:absolute;left:0;top:1px;color:#c0392b;font-weight:700}
.rr.rr-ice .rr-two-tel{display:flex;gap:12px;flex-wrap:wrap}
.rr.rr-ice .rr-hero .rr-hero-ctas{gap:10px}
.rr.rr-ice .rr-hero .rr-btn{white-space:nowrap;padding:12px 16px;font-size:14.5px}
.rr.rr-ice .rr-ctrow:not(.rr-cthead)>div{background:#fff}
.rr.rr-ice .rr-cthead>div{background:var(--navy)!important;color:#fff!important}
.rr.rr-ice .rr-ctrow.pick>div{background:rgba(47,127,184,.07)}
.rr.rr-ice .rr-ctrow.pick .m{box-shadow:inset 3px 0 0 var(--ice)}
.rr.rr-ice .rr-ctrow .pill{color:var(--ice-deep);background:rgba(47,127,184,.15)}
@media(max-width:980px){.rr.rr-ice .rr-fixes{grid-template-columns:1fr 1fr}.rr.rr-ice .rr-snow{grid-template-columns:1fr 1fr}.rr.rr-ice .rr-triage{grid-template-columns:1fr 1fr}}
@media(max-width:860px){.rr.rr-ice .rr-selfcheck{grid-template-columns:1fr}}
@media(max-width:620px){.rr.rr-ice .rr-fixes,.rr.rr-ice .rr-sc-list,.rr.rr-ice .rr-triage,.rr.rr-ice .rr-wontdo{grid-template-columns:1fr}}

/* mobile polish 2026-09-14 */
@media(hover:none){.rr.rr-ice .rr-spec-hint{display:none!important}}
@media(max-width:760px){.rr.rr-ice .rr-hero{box-shadow:inset 0 0 0 2000px rgba(8,16,26,.40)}.rr.rr-ice .rr-hero .rr-tagline{color:#BFD6F2!important}.rr.rr-ice .rr-spec-fig{padding:10px;border-radius:14px}.rr.rr-ice .rr-spec-fig figcaption{font-size:11px;letter-spacing:.04em}.rr.rr-ice .rr-ctable .cl{font-size:11px}.rr.rr-ice .rr-ctrow .pill{font-size:10px}.rr.rr-ice small,.rr.rr-ice .k,.rr.rr-ice .tag,.rr.rr-ice .v,.rr.rr-ice .who,.rr.rr-ice .cty span,.rr.rr-ice .rr-tick .t span{font-size:11px!important}.rr.rr-ice .rr-section{padding-top:64px;padding-bottom:64px}}
@media(max-width:860px){.rr.rr-ice .rr-selfcheck{grid-template-columns:1fr!important;padding:20px;gap:20px}}
@media(max-width:620px){.rr.rr-ice .rr-sc-list{grid-template-columns:1fr!important}}
</style>
<section class="rr-hero" style="background:linear-gradient(100deg,rgba(9,28,46,.84) 0%,rgba(18,58,92,.66) 45%,rgba(18,58,92,.28) 100%),url('https://reasonablecontractingservices.com/wp-content/uploads/2025/03/image-9.webp') 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/10/reasonable-ice-dam-gutter-michigan.jpg" class="skip-lazy" loading="eager" fetchpriority="high" decoding="sync" alt="Thick ice dam built up along a roof edge and gutter after heavy Michigan snow" srcset="https://reasonablecontractingservices.com/wp-content/uploads/2026/10/reasonable-ice-dam-gutter-michigan-480x318.jpg 480w, https://reasonablecontractingservices.com/wp-content/uploads/2026/10/reasonable-ice-dam-gutter-michigan-510x382.jpg 510w, https://reasonablecontractingservices.com/wp-content/uploads/2026/10/reasonable-ice-dam-gutter-michigan-768x509.jpg 768w, https://reasonablecontractingservices.com/wp-content/uploads/2026/10/reasonable-ice-dam-gutter-michigan.jpg 800w" 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">Ice Dams · Winter Roof Service</div>
      <h1>Your roof isn't leaking. Your attic is.</h1>
      <p class="rr-tagline">Ice dam removal, leak repair · and the fix that stops them coming back.</p>
      <p class="rr-prose" style="color:#dbe4ee">An ice dam is a symptom. Cold weather is the trigger; heat escaping your attic is the cause. We deal with the ice safely, repair what the water reached, and find the heat leak so next February looks different. 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">Since 1984</div><div class="item">Licensed & Insured</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 where the ice is and where the water shows up. 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 spam, ever. No pressure. Just an honest answer about your roof and your attic.</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>Ice Dam Removal & Repair</div>
  <div class="rr-badge"><span class="dot"></span>Attic Air-Sealing & Insulation</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>

<!-- RIGHT NOW: triage -->
<section class="rr-reveal rr-section is-navy"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow on-dark">Water Coming In Now?</span><h2>Five things before we get there.</h2><p>The next hour matters more than the diagnosis. Do these, then call — we'll tell you when we can be there.</p></div>
  <div class="rr-triage">
    <div><b>Catch it and clear it</b><p>Bucket under the drip, plastic on the floor, and move furniture, electronics, and rugs out of the wet zone.</p></div>
    <div><b>Photograph everything</b><p>The ceiling, the ice on the eave, the icicles, and the date. Your insurer will want the timeline.</p></div>
    <div class="no"><b>Don't chip the ice</b><p>Hammers and hatchets break shingles and tear gutters loose. Eave ice drops without warning.</p></div>
    <div class="no"><b>Don't pour hot water</b><p>It refreezes lower down, makes the dam bigger, and glazes the walkway underneath.</p></div>
    <div><b>Rake from the ground</b><p>A roof rake on the first three to four feet above the eave removes the snow that feeds the dam. Ground only, away from power lines.</p></div>
  </div>
</div></section>

<!-- LOOP: the freeze-thaw cycle (hotspot 1) -->
<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="Cross-section of a roof eave showing how attic heat loss melts snow that refreezes into an ice dam">
<defs><linearGradient id="warm" x1="0" y1="1" x2="0" y2="0"><stop offset="0" stop-color="#F6E3B4"/><stop offset="1" stop-color="#FBF1D8"/></linearGradient>
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#EEF5FB"/><stop offset="1" stop-color="#FFFFFF"/></linearGradient></defs>
<rect x="0" y="0" width="640" height="400" fill="url(#sky)"/>
<!-- roof line: ridge (600,70) -> eave (200,190); y = 70 + (600-x)*0.3 -->
<!-- attic (between ceiling y=210 and roof) -->
<polygon points="230,210 600,210 600,70 230,181" fill="#FBF6EA" stroke="#D8C08A"/>
<!-- living space -->
<rect x="230" y="210" width="370" height="170" fill="url(#warm)" stroke="#D8C08A"/>
<text x="415" y="310" text-anchor="middle" font-family="Archivo,sans-serif" font-weight="700" font-size="13" fill="#B7791F">HEATED LIVING SPACE  ~68°F</text>
<!-- ceiling insulation -->
<rect x="230" y="202" width="370" height="10" fill="#F0C9A0"/>
<!-- heat leak arrows (short, in the attic) -->
<path d="M300 200 v-24 M380 200 v-30 M460 200 v-38" stroke="#E0A83A" stroke-width="3" stroke-linecap="round" stroke-dasharray="6 5"/>
<path d="M294 182 l6 -10 l6 10 M374 176 l6 -10 l6 10 M454 168 l6 -10 l6 10" fill="none" stroke="#E0A83A" stroke-width="3" stroke-linecap="round"/>
<text x="596" y="190" text-anchor="end" font-family="Archivo,sans-serif" font-weight="700" font-size="11.5" fill="#8A6A2B">ATTIC</text>
<text x="596" y="203" text-anchor="end" font-family="Archivo,sans-serif" font-weight="600" font-size="10.5" fill="#8A6A2B">warms as air leaks up</text>
<!-- roof deck -->
<polygon points="600,70 600,80 200,200 200,190" fill="#5B6B7C"/>
<!-- snow blanket -->
<path d="M600 54 L262 155 L262 171 L600 70 Z" fill="#FFFFFF" stroke="#CFE0EF"/>
<!-- melt film on the upper slope -->
<path d="M560 82 L380 136" stroke="#9AD0F5" stroke-width="5" stroke-linecap="round"/>
<text x="600" y="40" text-anchor="end" font-family="Archivo,sans-serif" font-weight="700" font-size="11.5" fill="#1D5B8A">deck above 32°F — snow melts from underneath</text>
<!-- meltwater runs down the deck -->
<path d="M376 140 L300 163" stroke="#2F7FB8" stroke-width="3" stroke-dasharray="7 5" fill="none"/>
<path d="M306 154 l-8 10 l12 1" fill="none" stroke="#2F7FB8" stroke-width="3" stroke-linecap="round"/>
<!-- ice dam at the eave + icicles -->
<path d="M198 186 Q216 156 262 156 Q266 190 198 200 Z" fill="#BFE3FA" stroke="#7FB6DE"/>
<path d="M208 200 l4 34 l5 -34 M226 198 l3 48 l5 -48 M244 194 l3 28 l4 -28" fill="#DDF1FC" stroke="#7FB6DE" stroke-width="1"/>
<text x="40" y="150" font-family="Archivo,sans-serif" font-weight="700" font-size="11.5" fill="#1D5B8A">eave below 32°F</text>
<text x="40" y="164" font-family="Archivo,sans-serif" font-weight="600" font-size="10.5" fill="#1D5B8A">meltwater refreezes into a dam</text>
<!-- water backing up under the shingles -->
<path d="M262 168 L318 151" stroke="#2F7FB8" stroke-width="6" stroke-linecap="round" opacity=".55"/>
<path d="M318 151 l-3 8 l8 -3" fill="none" stroke="#2F7FB8" stroke-width="3" stroke-linecap="round"/>
<!-- drip through the ceiling near the outside wall -->
<path d="M262 212 v18 M262 234 v8" stroke="#2F7FB8" stroke-width="3" stroke-linecap="round"/>
<circle cx="262" cy="248" r="4" fill="#2F7FB8"/>
<!-- outside -->
<text x="40" y="70" font-family="Archivo,sans-serif" font-weight="800" font-size="13" fill="#5B6B7C">OUTSIDE</text>
<text x="40" y="86" font-family="Archivo,sans-serif" font-weight="700" font-size="12" fill="#5B6B7C">below freezing</text>
<g><circle cx="380" cy="224" r="13" fill="#2F7FB8"/><text x="380" y="228.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">1</text></g><g><circle cx="470" cy="96" r="13" fill="#2F7FB8"/><text x="470" y="100.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">2</text></g><g><circle cx="222" cy="170" r="13" fill="#2F7FB8"/><text x="222" y="174.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">3</text></g><g><circle cx="304" cy="176" r="13" fill="#2F7FB8"/><text x="304" y="180.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">4</text></g>
</svg><figcaption>The freeze-thaw loop · hover or tap the numbers</figcaption></figure>
    <div>
      <span class="rr-spec-tag">How an ice dam actually forms</span>
      <h2>Warm attic. Cold eave. Water with nowhere to go.</h2>
      <div class="rr-spec-list">
        <div class="rr-arow"><div class="num">1</div><div><h4>Heat leaks up through the ceiling</h4><p>Can lights, the attic hatch, bath fans, plumbing and wiring holes — every one is a chimney for warm air. The attic ends up warmer than the air outside.</p></div></div>
        <div class="rr-arow"><div class="num">2</div><div><h4>The roof deck warms above 32°F</h4><p>Snow melts from underneath, not from the sun. The Department of Energy notes it takes as little as two inches of snow on the roof to start the cycle.</p></div></div>
        <div class="rr-arow"><div class="num">3</div><div><h4>Meltwater refreezes at the cold eave</h4><p>The overhang sits outside the heated house, so it stays below freezing. The water hits it and turns to ice — that ridge along the gutter line is the dam.</p></div></div>
        <div class="rr-arow"><div class="num">4</div><div><h4>The pool climbs under the shingles</h4><p>Shingles shed water running down, not water standing behind a wall of ice. It works under the laps, through the deck, into insulation and drywall — usually along an outside wall.</p></div></div>
      </div>
    </div>
  </div></div>
  <p class="rr-prose" style="margin-top:28px">Three conditions have to line up, and Michigan supplies all three from December to March: snow on the roof, a roof surface above freezing higher up, and a roof surface below freezing at the eave. Two of those are weather. The middle one is your attic.</p>
</div></section>

<!-- MAP: where the heat escapes (hotspot 2) -->
<section class="rr-reveal rr-section is-frost"><div class="rr-wrap">
  <div class="rr-spec"><div class="rr-ana-grid">
    <div>
      <span class="rr-spec-tag">The Heat-Loss Map</span>
      <h2>Eight places the warm air usually gets out.</h2>
      <div class="rr-spec-list">
        <div class="rr-arow"><div class="num">1</div><div><h4>Recessed can lights</h4><p>Older cans are open to the attic and run hot. A few of them across a top-floor ceiling can warm a roof deck by themselves.</p></div></div>
        <div class="rr-arow"><div class="num">2</div><div><h4>The attic hatch or pull-down stairs</h4><p>Usually a thin panel with no gasket and no insulation — a hole in the ceiling the size of a door.</p></div></div>
        <div class="rr-arow"><div class="num">3</div><div><h4>Bath fans that vent into the attic</h4><p>Warm, wet air blown straight onto the underside of the deck. It melts snow and grows frost and mold at the same time.</p></div></div>
        <div class="rr-arow"><div class="num">4</div><div><h4>Plumbing stacks and wiring holes</h4><p>Every pipe and cable that passes through the ceiling leaves a gap around it. Small individually, big together.</p></div></div>
        <div class="rr-arow"><div class="num">5</div><div><h4>The chimney chase</h4><p>Framed chases around chimneys and flues are often open from the basement to the attic — one continuous warm shaft.</p></div></div>
        <div class="rr-arow"><div class="num">6</div><div><h4>Thin insulation at the edges</h4><p>Where the roof meets the wall there's no room for full depth, so the eave end of the ceiling is the least insulated part of the house — directly under where the dam forms.</p></div></div>
        <div class="rr-arow"><div class="num">7</div><div><h4>Kneewalls and dropped soffits</h4><p>Cape Cods, bonus rooms, and kitchen soffits create hidden cavities that connect heated space to the attic.</p></div></div>
        <div class="rr-arow"><div class="num">8</div><div><h4>Blocked soffit vents</h4><p>Insulation pushed into the eaves cuts off the cold air that's supposed to wash the underside of the deck. The attic can't stay cold if it can't breathe.</p></div></div>
      </div>
    </div>
    <figure class="rr-spec-fig"><svg viewBox="0 0 640 380" role="img" aria-label="Attic cross-section showing the eight places warm air usually escapes into the attic">
<rect x="0" y="0" width="640" height="380" fill="#FFFFFF"/>
<!-- roof outline -->
<polygon points="40,200 320,40 600,200" fill="#EEF5FB" stroke="#CFE0EF" stroke-width="2"/>
<!-- soffits -->
<rect x="20" y="196" width="60" height="10" fill="#5B6B7C"/><rect x="560" y="196" width="60" height="10" fill="#5B6B7C"/>
<!-- insulation layer (uneven on purpose) -->
<path d="M80 206 h100 v-10 h60 v18 h90 v-14 h70 v10 h60 v-8 h100 v14 H80 Z" fill="#F0C9A0"/>
<!-- ceiling drywall -->
<rect x="60" y="216" width="520" height="8" fill="#DCD4C4"/>
<!-- living space -->
<rect x="60" y="224" width="520" height="130" fill="#FBF1D8"/>
<text x="320" y="300" text-anchor="middle" font-family="Archivo,sans-serif" font-weight="700" font-size="13" fill="#B7791F">WARM ROOMS BELOW</text>
<!-- chimney chase -->
<rect x="470" y="60" width="34" height="164" fill="#C9A98F" stroke="#A88268"/>
<!-- plumbing stack -->
<rect x="150" y="90" width="10" height="134" fill="#8FA3B5"/>
<!-- bath fan + duct into attic -->
<rect x="360" y="212" width="40" height="12" fill="#9AA9B8"/><path d="M380 212 q0 -40 30 -50" stroke="#9AA9B8" stroke-width="8" fill="none" stroke-linecap="round"/>
<!-- can lights -->
<circle cx="120" cy="222" r="9" fill="#FFF3C4" stroke="#E0A83A" stroke-width="2"/><circle cx="240" cy="222" r="9" fill="#FFF3C4" stroke="#E0A83A" stroke-width="2"/>
<!-- attic hatch -->
<rect x="285" y="214" width="46" height="12" fill="#D8C08A" stroke="#B7791F"/>
<!-- kneewall / dropped soffit -->
<rect x="530" y="150" width="30" height="74" fill="#E3D7BF" stroke="#C9B58F"/>
<!-- heat plumes -->
<g stroke="#E0A83A" stroke-width="3" stroke-linecap="round" fill="none" stroke-dasharray="6 5">
<path d="M120 210 v-28"/><path d="M240 210 v-28"/><path d="M308 210 v-30"/><path d="M155 90 v-22"/><path d="M487 60 v-18"/><path d="M415 160 v-24"/><path d="M545 150 v-24"/><path d="M96 196 v-22"/>
</g>
<!-- insulation stuffed into the right eave (blocked soffit) -->
<path d="M560 206 h44 v-8 h-44 z" fill="#F0C9A0"/>
<g><circle cx="120" cy="250" r="13" fill="#2F7FB8"/><text x="120" y="254.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">1</text></g><g><circle cx="308" cy="250" r="13" fill="#2F7FB8"/><text x="308" y="254.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">2</text></g><g><circle cx="410" cy="250" r="13" fill="#2F7FB8"/><text x="410" y="254.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">3</text></g><g><circle cx="155" cy="60" r="13" fill="#2F7FB8"/><text x="155" y="64.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">4</text></g><g><circle cx="487" cy="34" r="13" fill="#2F7FB8"/><text x="487" y="38.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">5</text></g><g><circle cx="96" cy="160" r="13" fill="#2F7FB8"/><text x="96" y="164.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">6</text></g><g><circle cx="545" cy="120" r="13" fill="#2F7FB8"/><text x="545" y="124.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">7</text></g><g><circle cx="590" cy="232" r="13" fill="#2F7FB8"/><text x="590" y="236.5" text-anchor="middle" font-family="Space Mono,monospace" font-size="12" font-weight="700" fill="#fff">8</text></g>
</svg><figcaption>Attic cross-section · the usual suspects, numbered</figcaption></figure>
  </div></div>
</div></section>

<!-- SELF-CHECK -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">60-Second Self-Check</span><h2>Is your attic the problem?</h2><p>Check everything that's true for your house. No email, no signup — just a straight read on where your ice dams are coming from.</p></div>
  <div class="rr-selfcheck" id="rrIceCheck">
    <div class="rr-sc-list">
      <label><input type="checkbox" id="sc1"> Icicles or the ice ridge are much bigger on one side of the house</label>
      <label><input type="checkbox" id="sc2"> Bare, melted streaks on the roof while the eaves stay snowy</label>
      <label><input type="checkbox" id="sc3"> Recessed can lights in a top-floor ceiling</label>
      <label><input type="checkbox" id="sc4"> The attic hatch has no gasket or insulation on it</label>
      <label><input type="checkbox" id="sc5"> A bathroom fan vents into the attic, or you're not sure where it goes</label>
      <label><input type="checkbox" id="sc6"> Attic insulation sits below the tops of the joists</label>
      <label><input type="checkbox" id="sc7"> The house was built before 2000 and the attic has never been air-sealed</label>
      <label><input type="checkbox" id="sc8"> Dormers, a cathedral ceiling, or a room built into the attic</label>
    </div>
    <div class="rr-sc-result">
      <span class="rr-sc-count" id="scCount">0 of 8 checked</span>
      <div class="rr-sc-meter"><i id="scBar"></i></div>
      <span class="tier" id="scTier">Start checking</span>
      <h3 id="scHead">Every box you check points at the attic.</h3>
      <p id="scText">Most Michigan ice dams trace back to two or three of these. Check the ones that fit and we'll tell you which fix usually comes first.</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>

<!-- FOUR FIXES -->
<section class="rr-reveal rr-section is-frost"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Removal Is the Bandage</span><h2>Four fixes, in the order they actually work.</h2><p>Skip a step and the dam comes back. Do them in order and most houses never see one again.</p></div>
  <div class="rr-fixes">
    <div class="rr-fix"><span class="k">Fix 1 · First</span><h3>Air-seal the ceiling plane</h3><p>Foam and caulk the can lights, hatch, top plates, plumbing and wiring holes, the chimney chase, and the bath-fan duct. This is the cheapest fix and the one that matters most — it stops the warm air before it reaches the deck.</p><div class="not"><b>What it doesn't do:</b> add R-value. Sealing and insulating are two different jobs.</div></div>
    <div class="rr-fix"><span class="k">Fix 2 · Then</span><h3>Insulate to R-49</h3><p>Michigan's code minimum for our counties is R-49 — about 14 to 16 inches of blown insulation — and the newer code cycle points toward R-60. Insulation slows the heat that sealing didn't catch.</p><div class="not"><b>What it doesn't do:</b> stop air leaks. Blowing insulation over an unsealed ceiling just hides them.</div></div>
    <div class="rr-fix"><span class="k">Fix 3 · Then</span><h3>Ventilate so the attic stays cold</h3><p>Baffles at every rafter bay keep a clear channel above the insulation, balanced soffit and ridge venting keeps outside air moving under the deck, and the roof stays as cold as the weather.</p><div class="not"><b>What it doesn't do:</b> fix a leaky ceiling. Venting a warm attic just pulls more heated air up from the house.</div></div>
    <div class="rr-fix"><span class="k">Fix 4 · At Re-roof</span><h3>Ice barrier at the eaves</h3><p>Michigan code requires ice-and-water shield from the eave to at least 24 inches inside the warm wall. When your roof is replaced, that membrane is the last line of defense if a dam ever forms again.</p><div class="not"><b>What it doesn't do:</b> prevent the dam. It limits the damage a dam can do.</div></div>
  </div>
</div></section>

<!-- BARRIER feature -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-feature">
    <div class="rr-feat-media"><img src="https://reasonablecontractingservices.com/wp-content/uploads/2026/03/img_8181562050209274633.jpg" alt="Roofing crew installing ice and water shield underlayment at the eaves of a Michigan roof" loading="lazy"></div>
    <div class="rr-feat-body">
      <span class="rr-spec-tag">If the water already got in</span>
      <h2>We repair what the dam reached — and what let it in.</h2>
      <p>Backed-up water rarely stays at the eave. By the time a ceiling stains, it has usually soaked insulation, wet the top of the wall, and sometimes rotted the first row of decking. Our crews open it up, dry it out, and rebuild it properly.</p>
      <ul class="rr-feat-list">
        <li><b>Eave and deck repair</b> — replace rotted sheathing and fascia, reset drip edge, install ice-and-water shield to code or beyond.</li>
        <li><b>Gutters torn loose by ice load</b> — re-hang, re-pitch, or replace, and fix the fascia behind them.</li>
        <li><b>Interior water damage</b> — wet insulation out, drywall and paint, with photos for your insurance file.</li>
        <li><b>Attic corrections</b> — air-sealing, insulation, baffles, and bath-fan ducting done while the attic is open.</li>
      </ul>
    </div>
  </div>
</div></section>

<!-- REMOVAL compared -->
<section class="rr-reveal rr-section is-frost"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Getting the Ice Off</span><h2>What actually happens to your roof with each method.</h2><p>Every winter we repair roofs that were fine until someone tried to fix the ice dam.</p></div>
  <div class="rr-ctable">
    <div class="rr-ctrow rr-cthead"><div>Method</div><div>Risk to the roof</div><div>Does it work?</div><div>The honest verdict</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Method</span>Hammer, hatchet, or ice pick</div><div><span class="cl">Risk</span><span class="ct">High</span></div><div><span class="cl">Works?</span>Briefly</div><div><span class="cl">Verdict</span>Cracks shingles, tears gutters, and drops eave ice on whoever is swinging. The most expensive way to remove ice.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Method</span>Rock salt or ice-melt pucks</div><div><span class="cl">Risk</span><span class="ct">Medium</span></div><div><span class="cl">Works?</span>Barely</div><div><span class="cl">Verdict</span>Corrodes aluminum gutters, stains siding, kills the plants below, and leaves most of the dam intact.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Method</span>Hot water from a hose</div><div><span class="cl">Risk</span><span class="ct">Medium</span></div><div><span class="cl">Works?</span>No</div><div><span class="cl">Verdict</span>Refreezes lower on the roof and in the gutter. You end up with a bigger dam and an ice rink on the walkway.</div></div>
    <div class="rr-ctrow"><div class="m"><span class="cl">Method</span>Roof rake, from the ground</div><div><span class="cl">Risk</span><span class="ct">Low</span></div><div><span class="cl">Works?</span>Prevents</div><div><span class="cl">Verdict</span>Removes the snow that feeds the dam. The one thing worth doing yourself — ground only, away from power lines.</div></div>
    <div class="rr-ctrow pick"><div class="m"><span class="cl">Method</span>Professional removal<span class="pill">Ours</span></div><div><span class="cl">Risk</span><span class="ct">Low</span></div><div><span class="cl">Works?</span>Yes</div><div><span class="cl">Verdict</span>Roof-safe techniques that take the ice off without wrecking the shingles, quoted before we start — followed by the attic work that keeps it from coming back.</div></div>
  </div>
  <p class="rr-compare-note">Heat cables? They melt drainage channels; they don't stop dams. We'll tell you if your roofline is one of the few that genuinely needs them <b>after</b> the attic is fixed.</p>
</div></section>

<!-- WINTER MATH -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Winter, By County</span><h2>Why our part of Michigan grows ice dams.</h2><p>The dam needs snow on the roof and a swing across 32°F. Our winters deliver both, over and over.</p></div>
  <div class="rr-snow">
    <div class="rr-snowcard"><span class="n">22<small>″</small></span><span class="l">Port Huron</span><span class="s">average annual snowfall · ~36 snow days</span></div>
    <div class="rr-snowcard"><span class="n">31<small>″</small></span><span class="l">Harbor Beach · the Thumb</span><span class="s">Lake Huron adds snow to every northeast wind</span></div>
    <div class="rr-snowcard"><span class="n">38<small>″</small></span><span class="l">Detroit · Oakland & Macomb</span><span class="s">average annual snowfall · ~45 snow days</span></div>
    <div class="rr-snowcard"><span class="n">32<small>/18°</small></span><span class="l">January in Metro Detroit</span><span class="s">average high / low — the freeze-thaw sweet spot</span></div>
  </div>
  <p class="rr-src">Snowfall and temperature figures are NOAA 1991–2020 climate normals for the nearest reporting stations.</p>
  <p class="rr-prose" style="margin-top:24px">The dangerous winter isn't the coldest one. It's the one that snows, thaws to 34°F for an afternoon, and freezes hard again that night — a January pattern Metro Detroit and the Thumb repeat a dozen times a season. Every cycle melts a little more from the top of the roof and adds a little more ice at the bottom.</p>
</div></section>

<!-- INSURANCE -->
<section class="rr-reveal rr-section is-navy"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow on-dark">Insurance, Straight</span><h2>What's usually covered, and what isn't.</h2></div>
  <p class="rr-prose" style="color:#dbe4ee"><b style="color:#fff">Usually covered:</b> the sudden interior damage — stained ceilings, wet drywall, soaked insulation, ruined flooring — and the roof repair where the water forced its way in. Most Michigan policies treat an ice-dam backup as a covered peril.</p>
  <p class="rr-prose" style="color:#dbe4ee"><b style="color:#fff">Usually not covered:</b> removing the ice, and the attic air-sealing, insulation, and ventilation that prevent the next one. Carriers call that maintenance, and some will argue the whole loss was maintenance if the paperwork is thin.</p>
  <p class="rr-prose" style="color:#dbe4ee"><b style="color:#fff">What protects you:</b> photos of the ice and the damage with dates, a written cause-of-loss from us, and prompt notice to your carrier. Michigan law gives you at least one year from the date of loss to bring a claim (MCL 500.2833), and the state's insurance regulator, DIFS, takes consumer complaints at 877-999-6442 if a settlement doesn't add up.</p>
</div></section>

<!-- WON'T DO + related -->
<section class="rr-reveal rr-section"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">The Reasonable Standard</span><h2>What we won't do to your house.</h2></div>
  <ul class="rr-wontdo">
    <li>Chip, hack, or salt your roof to get the ice off.</li>
    <li>Walk an icy roof to make a point.</li>
    <li>Sell you heat cables as a cure.</li>
    <li>Blow insulation over a ceiling nobody sealed.</li>
    <li>Promise a time we can't keep — we tell you when we can be there.</li>
    <li>Pretend the ice is the problem when the attic is.</li>
  </ul>
  <div class="rr-shead" style="margin-top:44px"><span class="rr-eyebrow">Keep Reading</span><h2 style="font-size:24px">More on ice dams and attics from our crew.</h2></div>
  <div class="rr-chips">
    <a href="https://reasonablecontractingservices.com/ice-dam-formation-reasons/">7 causes of ice dams in Michigan</a>
    <a href="https://reasonablecontractingservices.com/ice-dam-prevention-roofing/">Can new roofing materials prevent ice dams?</a>
    <a href="https://reasonablecontractingservices.com/attic-ventilation-troy-michigan/">Attic ventilation in Troy: what it costs</a>
    <a href="https://reasonablecontractingservices.com/ridge-vent-vs-box-vent-port-huron-michigan/">Ridge vent vs. box vent</a>
    <a href="https://reasonablecontractingservices.com/gutter-repair/">Gutters pulled loose by ice</a>
    <a href="https://reasonablecontractingservices.com/emergency-roof-leak/">Water coming in from somewhere else?</a>
  </div>
</div></section>

<!-- FAQ -->
<section class="rr-reveal rr-section is-frost"><div class="rr-wrap">
  <div class="rr-shead"><span class="rr-eyebrow">Ice Dam Questions</span><h2>Straight answers for a Michigan winter.</h2></div>
  <div class="rr-faq-list"><div class="rr-qa"><button class="rr-qa-q" type="button">Why do ice dams keep coming back every winter?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Because the cause is inside the house. Warm air leaking into the attic melts snow from underneath, and the meltwater refreezes at the cold eave. Removing the ice buys you this week; until the attic is air-sealed and insulated, the next thaw rebuilds the dam in the same spot.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Is ice dam damage covered by homeowner's insurance in Michigan?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Usually the interior water damage is - a sudden backup into ceilings, walls, and insulation is a covered peril on most policies. Removing the ice and fixing the attic usually are not. Document the storm dates and the damage with photos, and call your carrier early. If you disagree with the settlement, Michigan's DIFS consumer line is 877-999-6442.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Can I just knock the ice off myself?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Please don't. Hammers, hatchets, and hot water break shingles and pull gutters loose, and eave ice falls unpredictably. Rock salt and ice-melt pucks corrode aluminum gutters and stain siding while leaving most of the dam in place. The one safe DIY move is a roof rake used from the ground.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Do heat cables work?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">They melt drainage channels so water has a way off the roof - they do not stop dams from forming, and they draw power all winter. They earn their keep only after the attic is sealed and insulated, on spots the architecture forces ice into anyway: north-facing valleys, dormers, and low-slope eaves. Ask us before you buy them.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">How much attic insulation does a Michigan home need?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">The current Michigan code minimum for our counties is R-49, which is roughly 14 to 16 inches of blown insulation, and the newer code cycle heads toward R-60. Insulation alone will not stop ice dams - air-sealing the ceiling plane first is what makes the insulation work.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Does ice-and-water shield stop ice dams?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">No - it stops leaks. Michigan code requires it from the eave to at least 24 inches inside the exterior wall line so backed-up water can't reach the deck. We treat it as the last line of defense at re-roof, not the fix.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Is it safe to rake my roof?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">From the ground, yes. Rake the first three to four feet above the eave after a heavy snow, keep the pole well away from power lines, and never do it from a ladder or the roof. Clearing that band removes the snow that feeds the dam.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">Water is coming in right now. What do I do?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Catch it and move what's underneath. Don't chip at the ice and don't pour hot water on the roof. If snow is on the eave, rake it from the ground. Then call - we'll tell you when we can be there and what to do in the meantime.</div></div></div><div class="rr-qa"><button class="rr-qa-q" type="button">My icicles are huge but nothing is leaking. Is that a problem?<span class="mk"></span></button><div class="rr-qa-a"><div class="inner">Oversized icicles and a ridge of ice along the gutter line are the dam telling you the attic is losing heat. It may not leak this week, but the same conditions that built the icicles are backing water up under the shingles. It's the right moment to find the heat leak, not the moment to ignore it.</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. Removal and prevention work are quoted clearly before anything starts, and if the honest answer is that your roof is fine and the attic needs $300 of air-sealing, that's exactly what we'll tell you.</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>Ice dam help 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">Before the Next Thaw</span><h2>Get the ice handled and the cause found.</h2><p>One call covers the removal, the repair, and the attic work that ends it. 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 r=document.getElementById('rrIceCheck');if(!r)return;var boxes=[].slice.call(r.querySelectorAll('input[type=checkbox]'));
var T=[
 ['Start here','A closer look, not a big project.','With little pointing at the attic, the dam may be a roofline issue \u2014 a north valley, a low-slope eave, a gutter that traps ice. Worth a look before winter, not a rebuild.'],
 ['Fix 1 first','Air-sealing is probably your fix.','Two or three of these usually mean warm air is finding a path into the attic. Sealing the ceiling plane is the cheapest fix and the one that matters most. Insulation comes after.'],
 ['Fix 1 + Fix 2','Seal the ceiling, then bring insulation up to R-49.','Four or five of these say the attic is warm and thin. Air-seal first, then blow insulation to code depth with baffles so the eaves keep breathing.'],
 ['The full attic','Seal, insulate, ventilate \u2014 and ice barrier at re-roof.','This many says the attic has been running warm for years. Do all three attic fixes in order, and make sure the next roof gets ice-and-water shield well past the warm wall.']];
function upd(){var n=boxes.filter(function(b){return b.checked}).length;boxes.forEach(function(b){b.parentNode.classList.toggle('on',b.checked)});
document.getElementById('scCount').textContent=n+' of 8 checked';document.getElementById('scBar').style.width=(n/8*100)+'%';
var t=n<=1?T[0]:n<=3?T[1]:n<=5?T[2]:T[3];if(n===0){t=['Start checking','Every box you check points at the attic.','Most Michigan ice dams trace back to two or three of these. Check the ones that fit and we\u2019ll tell you which fix usually comes first.']}
document.getElementById('scTier').textContent=t[0];document.getElementById('scHead').textContent=t[1];document.getElementById('scText').textContent=t[2];}
boxes.forEach(function(b){b.addEventListener('change',upd)});})();
</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "Service", "name": "Ice Dam Removal, Repair and Prevention", "serviceType": "Ice dam removal, roof leak repair, and attic air-sealing, insulation and ventilation to prevent ice dams", "description": "Safe ice dam removal, repair of the roof and interior damage the water caused, and the attic air-sealing, insulation, and ventilation fixes that stop ice dams from coming back. 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/ice-dam-removal/"}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Why do ice dams keep coming back every winter?", "acceptedAnswer": {"@type": "Answer", "text": "Because the cause is inside the house. Warm air leaking into the attic melts snow from underneath, and the meltwater refreezes at the cold eave. Removing the ice buys you this week; until the attic is air-sealed and insulated, the next thaw rebuilds the dam in the same spot."}}, {"@type": "Question", "name": "Is ice dam damage covered by homeowner's insurance in Michigan?", "acceptedAnswer": {"@type": "Answer", "text": "Usually the interior water damage is - a sudden backup into ceilings, walls, and insulation is a covered peril on most policies. Removing the ice and fixing the attic usually are not. Document the storm dates and the damage with photos, and call your carrier early. If you disagree with the settlement, Michigan's DIFS consumer line is 877-999-6442."}}, {"@type": "Question", "name": "Can I just knock the ice off myself?", "acceptedAnswer": {"@type": "Answer", "text": "Please don't. Hammers, hatchets, and hot water break shingles and pull gutters loose, and eave ice falls unpredictably. Rock salt and ice-melt pucks corrode aluminum gutters and stain siding while leaving most of the dam in place. The one safe DIY move is a roof rake used from the ground."}}, {"@type": "Question", "name": "Do heat cables work?", "acceptedAnswer": {"@type": "Answer", "text": "They melt drainage channels so water has a way off the roof - they do not stop dams from forming, and they draw power all winter. They earn their keep only after the attic is sealed and insulated, on spots the architecture forces ice into anyway: north-facing valleys, dormers, and low-slope eaves. Ask us before you buy them."}}, {"@type": "Question", "name": "How much attic insulation does a Michigan home need?", "acceptedAnswer": {"@type": "Answer", "text": "The current Michigan code minimum for our counties is R-49, which is roughly 14 to 16 inches of blown insulation, and the newer code cycle heads toward R-60. Insulation alone will not stop ice dams - air-sealing the ceiling plane first is what makes the insulation work."}}, {"@type": "Question", "name": "Does ice-and-water shield stop ice dams?", "acceptedAnswer": {"@type": "Answer", "text": "No - it stops leaks. Michigan code requires it from the eave to at least 24 inches inside the exterior wall line so backed-up water can't reach the deck. We treat it as the last line of defense at re-roof, not the fix."}}, {"@type": "Question", "name": "Is it safe to rake my roof?", "acceptedAnswer": {"@type": "Answer", "text": "From the ground, yes. Rake the first three to four feet above the eave after a heavy snow, keep the pole well away from power lines, and never do it from a ladder or the roof. Clearing that band removes the snow that feeds the dam."}}, {"@type": "Question", "name": "Water is coming in right now. What do I do?", "acceptedAnswer": {"@type": "Answer", "text": "Catch it and move what's underneath. Don't chip at the ice and don't pour hot water on the roof. If snow is on the eave, rake it from the ground. Then call - we'll tell you when we can be there and what to do in the meantime."}}, {"@type": "Question", "name": "My icicles are huge but nothing is leaking. Is that a problem?", "acceptedAnswer": {"@type": "Answer", "text": "Oversized icicles and a ridge of ice along the gutter line are the dam telling you the attic is losing heat. It may not leak this week, but the same conditions that built the icicles are backing water up under the shingles. It's the right moment to find the heat leak, not the moment to ignore it."}}]}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "HowTo", "name": "What to do when an ice dam is leaking into your house", "step": [{"@type": "HowToStep", "name": "Catch and clear", "text": "Put a bucket under the drip, protect the floor, and move furniture and electronics out of the wet zone."}, {"@type": "HowToStep", "name": "Photograph everything", "text": "Photograph the ceiling, the ice on the eave, and the icicles, with dates, for your insurance file."}, {"@type": "HowToStep", "name": "Do not chip the ice or pour hot water", "text": "Hammers and hatchets break shingles and tear gutters; hot water refreezes lower down and makes the dam bigger."}, {"@type": "HowToStep", "name": "Rake the eave from the ground", "text": "Use a roof rake on the first three to four feet above the eave, from the ground, away from power lines."}, {"@type": "HowToStep", "name": "Call a roofer", "text": "Call Reasonable Roofing & Contracting at (810) 984-3420 or (248) 800-3269; we will tell you when we can be there and what to do in the meantime."}]}</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": "Roof Repair", "item": "https://reasonablecontractingservices.com/storm-damage-roof-repair/"}, {"@type": "ListItem", "position": 3, "name": "Ice Dam Removal", "item": "https://reasonablecontractingservices.com/ice-dam-removal/"}]}</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>
```
