PageSourceSearch

https://www.fraleyshomeimprovement.com/about

html fraleyshomeimprovement.com collected 2026-10-09 03:26:14 UTC 139,797 bytes, 382 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="generator" content="Astro v6.2.1"><!-- Primary SEO --><title>About Fraley&#39;s Home Improvement | Roofing Contractor in Henderson, KY</title><meta name="description" content="Meet the team behind Fraley's Home Improvement. Backed by 55 years of local experience across Henderson."><link rel="canonical" href="https://www.fraleyshomeimprovement.com/about"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:title" content="About Fraley's Home Improvement | Roofing Contractor in Henderson, KY"><meta property="og:description" content="Meet the team behind Fraley's Home Improvement. Backed by 55 years of local experience across Henderson."><meta property="og:url" content="https://www.fraleyshomeimprovement.com/about"><meta property="og:image" content="/images/og-home.webp"><meta property="og:site_name" content="Fraley's Home Improvement"><meta property="og:locale" content="en_US"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="About Fraley's Home Improvement | Roofing Contractor in Henderson, KY"><meta name="twitter:description" content="Meet the team behind Fraley's Home Improvement. Backed by 55 years of local experience across Henderson."><meta name="twitter:image" content="/images/og-home.webp"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- LCP preload for above-the-fold image --><!-- JSON-LD Schema -->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":["LocalBusiness","RoofingContractor"],"@id":"https://www.fraleyshomeimprovement.com/#business","name":"Fraley's Home Improvement","description":"Fraley's Home Improvement has served Henderson, Kentucky and the tri-state region since 1971 with expert roofing, siding, windows, and gutter services. A GAF Factory Certified Roofer with a BBB A+ Rating, we deliver quality craftsmanship and dependable service to every homeowner.","url":"https://www.fraleyshomeimprovement.com","telephone":"(270) 826-0627","email":"[email protected]","address":{"@type":"PostalAddress","addressLocality":"Henderson","addressRegion":"KY","addressCountry":"US"},"geo":{"@type":"GeoCoordinates","latitude":37.836154,"longitude":-87.590013},"image":"https://www.fraleyshomeimprovement.com/images/og-home.webp","priceRange":"$$","areaServed":[{"@type":"AdministrativeArea","name":"Owensboro, KY"},{"@type":"AdministrativeArea","name":"Madisonville, KY"},{"@type":"AdministrativeArea","name":"Henderson, KY"},{"@type":"AdministrativeArea","name":"Princeton, KY"},{"@type":"AdministrativeArea","name":"Cairo, KY"},{"@type":"AdministrativeArea","name":"Dawson Springs, KY"},{"@type":"AdministrativeArea","name":"Calhoun, KY"},{"@type":"AdministrativeArea","name":"Morganfield, KY"}],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Fraley's Home Improvement Services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Roofing Contractor","description":"Professional roofing installation, repair, and replacement for residential homes across western Kentucky."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Siding Contractor","description":"Expert siding installation and repair to protect and beautify your home's exterior."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Window Installation Service","description":"Professional window installation and replacement to improve energy efficiency and home comfort."}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Gutter Services","description":"Gutter installation, repair, and maintenance to protect your home from water damage."}}]},"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.9","reviewCount":"91","bestRating":"5","worstRating":"1"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Kasie Gomez"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"When we purchased our second home & needed a new roof quickly prior to moving in, we knew to call Mike Fraley and his roofing crew. Professional & timely service and done in one day! The crew cleaned up wonderfully and were very efficient. Mike has extensive knowledge of roofing and we always trust his suggestions - we went with GAF Timberline HDZ in Charcoal.","datePublished":"March 2026"},{"@type":"Review","author":{"@type":"Person","name":"Donna"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"Fraley’s replaced the roof on my house and shed after hail damage. They did an excellent job! They did a complete tear off, Roof replacement and cleaned up the site afterwards. The crew was very organized and it took just a few hours to complete. I am very pleased with their work and I will recommend them to all my friends and family.","datePublished":"February 2026"},{"@type":"Review","author":{"@type":"Person","name":"Tonya Leslie"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"Fraley's Home Improvement removed two old roofs from my garage. They did an exceptional job I would highly recommend them if you need roof work. Mike was very easy to talk to and his crew does good work.","datePublished":"July 2026"}],"sameAs":["https://www.facebook.com/callroofus","https://www.instagram.com/fraleyshomeimprovement/"]}</script>
1<!-- Google Fonts --><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=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=PT+Serif+Caption:ital@0;1&display=swap" rel="stylesheet"><!-- GHL iframe auto-resize via postMessage (replaces form_embed.js which creates unwanted popups) -->
1<script type="module">window.addEventListener("message",e=>{if(!e.data||typeof e.data!="object")return;const t=e.data,d=t.height??t.data?.height,i=t["g-form-embed-iframe-id"]??t.iframeId??t["layout-iframe-id"];if(d&&i){const a=document.getElementById(i);a&&(a.style.height=d+"px")}});</script>
1<link rel="stylesheet" href="/_astro/Footer.Bmsgdo3-.css"></head> <body>  <header data-site-header class="site-header site-header--overlay fixed inset-x-0 top-0 z-[100] transition-[background-color,border-color,box-shadow] duration-[420ms] [transition-timing-function:var(--ease-out-expo)] is-scrolled bg-surface-raised border-b border-border shadow-sm" role="banner" data-astro-cid-3ef6ksr2> <div class="container-site xl:max-w-[1400px] 2xl:max-w-[1560px] relative flex lg:grid lg:grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-4 xl:gap-6 h-[88px]" data-astro-cid-3ef6ksr2> <!-- Logo --> <a href="/" class="flex items-center shrink-0 no-underline" aria-label="Fraley's Home Improvement — Home" data-astro-cid-3ef6ksr2> <span class="header-logo-slot relative shrink-0 w-[clamp(5rem,_28vw,_7rem)] h-16 lg:w-[clamp(7rem,_12vw,_10rem)] lg:h-[4.5rem] flex items-center justify-start" aria-hidden="true" data-astro-cid-3ef6ksr2>  <img src="/images/logo.png" alt="Fraley's Home Improvement logo" title="Fraley's Home Improvement logo" width="160" height="72" class="logo-scrolled max-w-full max-h-full w-auto h-auto object-contain object-left" loading="eager" decoding="async" fetchpriority="high" data-astro-cid-3ef6ksr2> </span> </a> <!-- Desktop Navigation --> <nav class="hidden lg:flex justify-self-center min-w-0" aria-label="Main navigation" data-astro-cid-3ef6ksr2> <ul role="list" class="flex items-center gap-1 list-none m-0 p-0" data-astro-cid-3ef6ksr2> <!-- Services mega-dropdown --> <li class="relative group/services" data-astro-cid-3ef6ksr2> <a href="/#services" class="flex items-center gap-1 px-4 py-2 text-base font-[900] text-text-secondary  transition-colors duration-150 no-underline hover:text-accent hover:bg-accent-light" data-astro-cid-3ef6ksr2>
2Services
3<svg class="transition-transform duration-200 group-hover/services:rotate-180 shrink-0" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M2 4l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </a> <!-- Invisible bridge — prevents hover gap from closing the dropdown --> <div class="absolute top-full left-0 right-0 h-2 pointer-events-auto opacity-0 group-hover/services:pointer-events-auto" data-astro-cid-3ef6ksr2></div> <!-- Services mega-menu panel --> <div class="absolute top-[calc(100%+0.5rem)] left-1/2 -translate-x-1/2 bg-surface-raised border border-border border-t-2 border-t-accent  shadow-xl z-50 overflow-hidden opacity-0 pointer-events-none transition-[opacity,transform] duration-150 origin-top scale-[0.98] group-hover/services:opacity-100 group-hover/services:pointer-events-auto group-hover/services:scale-100 group-focus-within/services:opacity-100 group-focus-within/services:pointer-events-auto group-focus-within/services:scale-100" style="width: 760px" data-astro-cid-3ef6ksr2> <!-- Transparent bridge covers the gap --> <div class="absolute -top-2 left-0 right-0 h-2" data-astro-cid-3ef6ksr2></div> <!-- Category columns with dividers --> <div class="grid divide-x divide-border grid-cols-4" data-astro-cid-3ef6ksr2> <div class="p-5 flex flex-col" data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor" class="group/cat no-underline flex items-center min-h-[2.75rem] mb-3" data-astro-cid-3ef6ksr2> <span class="text-base font-[900] tracking-[0.055em] uppercase text-text leading-tight group-hover/cat:text-accent transition-colors duration-150" data-astro-cid-3ef6ksr2> Roofing Contractor </span> </a> <!-- Thin rule under category header --> <div class="h-px bg-border mb-2.5" data-astro-cid-3ef6ksr2></div> <!-- Service links --> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-px flex-1" data-astro-cid-3ef6ksr2> <li data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor/roof-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Roof Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor/roof-replacement" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Roof Replacement </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor/roof-inspection" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Roof Inspection </a> </li> </ul> <!-- Per-column category link --> <a href="/services/roofing-contractor" class="mt-3 pt-3 border-t border-border flex items-center gap-1 text-[0.9375rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>
4Show all
5<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> </div><div class="p-5 flex flex-col" data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor" class="group/cat no-underline flex items-center min-h-[2.75rem] mb-3" data-astro-cid-3ef6ksr2> <span class="text-base font-[900] tracking-[0.055em] uppercase text-text leading-tight group-hover/cat:text-accent transition-colors duration-150" data-astro-cid-3ef6ksr2> Siding Contractor </span> </a> <!-- Thin rule under category header --> <div class="h-px bg-border mb-2.5" data-astro-cid-3ef6ksr2></div> <!-- Service links --> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-px flex-1" data-astro-cid-3ef6ksr2> <li data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/siding-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Siding Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/siding-repair" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Siding Repair </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/siding-replacement" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Siding Replacement </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/vinyl-siding-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Vinyl Siding Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/siding-inspection" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Siding Inspection </a> </li> </ul> <!-- Per-column category link --> <a href="/services/siding-contractor" class="mt-3 pt-3 border-t border-border flex items-center gap-1 text-[0.9375rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>
6Show all
7<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> </div><div class="p-5 flex flex-col" data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service" class="group/cat no-underline flex items-center min-h-[2.75rem] mb-3" data-astro-cid-3ef6ksr2> <span class="text-base font-[900] tracking-[0.055em] uppercase text-text leading-tight group-hover/cat:text-accent transition-colors duration-150" data-astro-cid-3ef6ksr2> Window Installation Service </span> </a> <!-- Thin rule under category header --> <div class="h-px bg-border mb-2.5" data-astro-cid-3ef6ksr2></div> <!-- Service links --> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-px flex-1" data-astro-cid-3ef6ksr2> <li data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service/window-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Window Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service/window-replacement" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Window Replacement </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service/residential-window-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Residential Window Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service/window-inspection" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Window Inspection </a> </li> </ul> <!-- Per-column category link --> <a href="/services/window-installation-service" class="mt-3 pt-3 border-t border-border flex items-center gap-1 text-[0.9375rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>
8Show all
9<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> </div><div class="p-5 flex flex-col" data-astro-cid-3ef6ksr2> <a href="/services/gutter-services" class="group/cat no-underline flex items-center min-h-[2.75rem] mb-3" data-astro-cid-3ef6ksr2> <span class="text-base font-[900] tracking-[0.055em] uppercase text-text leading-tight group-hover/cat:text-accent transition-colors duration-150" data-astro-cid-3ef6ksr2> Gutter Services </span> </a> <!-- Thin rule under category header --> <div class="h-px bg-border mb-2.5" data-astro-cid-3ef6ksr2></div> <!-- Service links --> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-px flex-1" data-astro-cid-3ef6ksr2> <li data-astro-cid-3ef6ksr2> <a href="/services/gutter-services/gutter-installation" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Gutter Installation </a> </li><li data-astro-cid-3ef6ksr2> <a href="/services/gutter-services/gutter-replacement" class="block px-2 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light leading-snug capitalize" data-astro-cid-3ef6ksr2> Gutter Replacement </a> </li> </ul> <!-- Per-column category link --> <a href="/services/gutter-services" class="mt-3 pt-3 border-t border-border flex items-center gap-1 text-[0.9375rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>
10Show all
11<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> </div> </div> <!-- Footer: service areas breadcrumb --> <div class="px-5 py-3 bg-surface border-t border-border flex items-center gap-2 flex-wrap" data-astro-cid-3ef6ksr2>
11 <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-text-muted shrink-0" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="text-[0.8125rem] text-text-muted font-medium" data-astro-cid-3ef6ksr2>Serving</span>  <a href="/areas/owensboro-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Owensboro, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/madisonville-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Madisonville, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/henderson-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Henderson, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/princeton-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Princeton, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/cairo-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Cairo, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/dawson-springs-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Dawson Springs, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/calhoun-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Calhoun, KY</a> <span class="text-text-muted select-none" aria-hidden="true" data-astro-cid-3ef6ksr2>·</span> <a href="/areas/morganfield-ky" class="text-[0.8125rem] text-text-secondary no-underline hover:text-accent transition-colors duration-150 capitalize" data-astro-cid-3ef6ksr2>Morganfield, KY</a>  <a href="/#service-areas" class="ml-auto text-[0.8125rem] font-semibold text-accent no-underline hover:underline shrink-0" data-astro-cid-3ef6ksr2>
12All areas →
13</a> </div> </div> </li> <!-- About --> <li data-astro-cid-3ef6ksr2> <a href="/about" class="flex items-center gap-1 px-4 py-2 text-base font-[900]  transition-colors duration-150 no-underline hover:text-accent hover:bg-accent-light text-text-secondary" data-astro-cid-3ef6ksr2>
14About
15</a> </li>  <!-- Service Areas dropdown --> <li class="relative group/areas" data-astro-cid-3ef6ksr2> <a href="/#service-areas" class="flex items-center gap-1 px-4 py-2 text-base font-[900] text-text-secondary  transition-colors duration-150 no-underline hover:text-accent hover:bg-accent-light" data-astro-cid-3ef6ksr2>
16Service Areas
17<svg class="transition-transform duration-200 group-hover/areas:rotate-180 shrink-0" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M2 4l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </a> <!-- Areas dropdown panel --> <div class="absolute top-[calc(100%+0.5rem)] left-1/2 -translate-x-1/2 min-w-[220px] bg-surface-raised border border-border  shadow-xl z-50 opacity-0 pointer-events-none transition-[opacity,transform] duration-150 origin-top scale-[0.98] group-hover/areas:opacity-100 group-hover/areas:pointer-events-auto group-hover/areas:scale-100 group-focus-within/areas:opacity-100 group-focus-within/areas:pointer-events-auto group-focus-within/areas:scale-100" data-astro-cid-3ef6ksr2> <!-- Transparent bridge covers the gap --> <div class="absolute -top-2 left-0 right-0 h-2" data-astro-cid-3ef6ksr2></div> <div class="p-2" data-astro-cid-3ef6ksr2> <a href="/areas/owensboro-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Owensboro, KY </a><a href="/areas/madisonville-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Madisonville, KY </a><a href="/areas/henderson-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Henderson, KY </a><a href="/areas/princeton-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Princeton, KY </a><a href="/areas/cairo-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Cairo, KY </a><a href="/areas/dawson-springs-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Dawson Springs, KY </a><a href="/areas/calhoun-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Calhoun, KY </a><a href="/areas/morganfield-ky" class="flex items-center gap-2.5 px-4 py-2 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:text-accent hover:bg-accent-light capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> Morganfield, KY </a> <div class="mt-1 pt-2 border-t border-border px-[0.875rem] pb-1 flex flex-col gap-2" data-astro-cid-3ef6ksr2> <a href="/service-area-map" class="text-[0.8125rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>Service Area Map</a> <a href="/#service-areas" class="text-[0.8125rem] font-semibold text-accent no-underline hover:underline" data-astro-cid-3ef6ksr2>See all service areas →</a> </div> </div> </div> </li> <!-- Contact --> <li data-astro-cid-3ef6ksr2> <a href="/contact" class="flex items-center gap-1 px-4 py-2 text-base font-[900]  transition-colors duration-150 no-underline hover:text-accent hover:bg-accent-light text-text-secondary" data-astro-cid-3ef6ksr2>
18Contact
19</a> </li> <!-- Instant Quote --> <li data-astro-cid-3ef6ksr2> <a href="/instant-quote" class="nav-instant-quote flex items-center gap-1 px-4 py-2 text-base font-[900] rounded-none transition-colors duration-150 no-underline bg-accent text-accent-fg border-2 border-accent hover:bg-accent-hover hover:border-accent-hover hover:text-accent-fg" data-astro-cid-3ef6ksr2>
20Instant Quote
21</a> </li>  </ul> </nav> <!-- Header CTAs --> <div class="hidden lg:flex items-center gap-3 justify-self-end" data-astro-cid-3ef6ksr2> <a href="tel:(270) 826-0627" class="btn-phone text-base font-[900] py-[0.625rem] px-[1.125rem]" aria-label="Call us at (270) 826-0627" data-astro-cid-3ef6ksr2>
21 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.44 2 2 0 0 1 3.59 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.69a16 16 0 0 0 6.29 6.29l.86-.86a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-3ef6ksr2></path> </svg> (270) 826-0627 </a> <button type="button" data-open-quote-modal class="btn-primary py-[0.625rem] px-[1.25rem] text-base font-[900]" data-astro-cid-3ef6ksr2> Get a Free Estimate </button> </div> <!-- Mobile Call Button --> <a href="tel:(270) 826-0627" class="flex lg:hidden items-center gap-2 h-10 px-3 bg-accent  text-accent-fg ml-auto shrink-0 transition-colors duration-150 hover:bg-accent-hover active:bg-accent-active" aria-label="Call us at (270) 826-0627" data-astro-cid-3ef6ksr2> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="shrink-0" data-astro-cid-3ef6ksr2> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.44 2 2 0 0 1 3.59 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.69a16 16 0 0 0 6.29 6.29l.86-.86a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-3ef6ksr2></path> </svg> <span class="text-base font-[900]" data-astro-cid-3ef6ksr2>(270) 826-0627</span> </a> <!-- Mobile Toggle --> <button id="nav-toggle" class="flex lg:hidden flex-col justify-center gap-[5px] w-10 h-10 p-2 bg-transparent border border-border  cursor-pointer ml-2" aria-label="Open navigation menu" aria-expanded="false" aria-controls="mobile-nav" data-astro-cid-3ef6ksr2> <span class="block w-full h-[1.5px] bg-text  transition-[transform,opacity] duration-200" data-astro-cid-3ef6ksr2></span> <span class="block w-full h-[1.5px] bg-text  transition-[transform,opacity] duration-200" data-astro-cid-3ef6ksr2></span> <span class="block w-full h-[1.5px] bg-text  transition-[transform,opacity] duration-200" data-astro-cid-3ef6ksr2></span> </button> </div> </header> <!-- Mobile Navigation Overlay --> <div id="mobile-overlay" class="mobile-overlay fixed inset-0 bg-overlay/50 z-[9100]" aria-hidden="true" data-astro-cid-3ef6ksr2></div> <!-- Mobile Navigation Drawer --> <nav id="mobile-nav" class="mobile-nav fixed top-0 right-0 bottom-0 w-[min(340px,92vw)] bg-surface-raised z-[9200] overflow-y-auto flex flex-col" aria-label="Mobile navigation" aria-hidden="true" data-astro-cid-3ef6ksr2> <!-- Drawer header --> <div class="flex items-center justify-between px-5 py-4 border-b border-border shrink-0" data-astro-cid-3ef6ksr2> <span class="font-heading text-base font-bold text-text" data-astro-cid-3ef6ksr2>Fraley&#39;s Home Improvement</span> <button id="nav-close" class="flex items-center justify-center w-9 h-9 bg-transparent border border-border  cursor-pointer text-text-secondary hover:bg-accent-light hover:text-accent transition-colors duration-150" aria-label="Close navigation menu" onclick="document.getElementById('nav-toggle').click()" data-astro-cid-3ef6ksr2> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-3ef6ksr2></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-3ef6ksr2></line> </svg> </button> </div> <div class="p-5 flex flex-col gap-1 flex-1 overflow-y-auto" data-astro-cid-3ef6ksr2> <!-- Main links --> <a href="/about" class="block px-4 py-2.5 text-base font-[900]  transition-colors duration-150 no-underline text-text hover:bg-accent-light hover:text-accent" data-astro-cid-3ef6ksr2>About</a> <a href="/instant-quote" class="block px-4 py-2.5 text-base font-[900] rounded-none transition-colors duration-150 no-underline bg-accent text-accent-fg hover:bg-accent-hover hover:text-accent-fg" data-astro-cid-3ef6ksr2>Instant Quote</a>  <a href="/contact" class="block px-4 py-2.5 text-base font-[900]  transition-colors duration-150 no-underline text-text hover:bg-accent-light hover:text-accent" data-astro-cid-3ef6ksr2>Contact</a>  <!-- Services section --> <div class="mt-4 pt-4 border-t border-border" data-astro-cid-3ef6ksr2> <div class="flex items-center justify-between px-4 mb-1" data-astro-cid-3ef6ksr2> <p class="text-[0.6875rem] font-bold tracking-[0.12em] uppercase text-text-muted" data-astro-cid-3ef6ksr2>Services</p> <a href="/#services" class="text-[0.75rem] text-accent font-semibold no-underline hover:underline" data-astro-cid-3ef6ksr2>All →</a> </div> <div class="mb-0.5" data-astro-cid-3ef6ksr2> <!-- Category row: link + chevron (right) --> <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 min-w-0 px-4" data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor" class="min-w-0 max-w-full w-max justify-self-start py-2.5 text-base font-[900] text-text  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent truncate" data-astro-cid-3ef6ksr2> Roofing Contractor </a> <button type="button" class="cat-toggle flex items-center justify-center w-9 h-9 shrink-0 text-text-muted  transition-colors duration-150 hover:bg-accent-light hover:text-accent" aria-expanded="false" aria-controls="cat-panel-0" aria-label="Toggle Roofing Contractor services" data-astro-cid-3ef6ksr2> <svg class="cat-chevron" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M3 5l4 4 4-4" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> <!-- Collapsible services panel — animated via grid-template-rows --> <div id="cat-panel-0" class="cat-panel grid overflow-hidden" style="grid-template-rows: 0fr" data-astro-cid-3ef6ksr2> <div class="min-h-0" data-astro-cid-3ef6ksr2> <div class="pl-4 flex flex-col gap-0.5 pt-0.5 pb-2" data-astro-cid-3ef6ksr2> <a href="/services/roofing-contractor/roof-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Roof Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/roofing-contractor/roof-replacement" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Roof Replacement</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/roofing-contractor/roof-inspection" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Roof Inspection</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a>  </div> </div> </div> </div><div class="mb-0.5" data-astro-cid-3ef6ksr2> <!-- Category row: link + chevron (right) --> <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 min-w-0 px-4" data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor" class="min-w-0 max-w-full w-max justify-self-start py-2.5 text-base font-[900] text-text  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent truncate" data-astro-cid-3ef6ksr2> Siding Contractor </a> <button type="button" class="cat-toggle flex items-center justify-center w-9 h-9 shrink-0 text-text-muted  transition-colors duration-150 hover:bg-accent-light hover:text-accent" aria-expanded="false" aria-controls="cat-panel-1" aria-label="Toggle Siding Contractor services" data-astro-cid-3ef6ksr2> <svg class="cat-chevron" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M3 5l4 4 4-4" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> <!-- Collapsible services panel — animated via grid-template-rows --> <div id="cat-panel-1" class="cat-panel grid overflow-hidden" style="grid-template-rows: 0fr" data-astro-cid-3ef6ksr2> <div class="min-h-0" data-astro-cid-3ef6ksr2> <div class="pl-4 flex flex-col gap-0.5 pt-0.5 pb-2" data-astro-cid-3ef6ksr2> <a href="/services/siding-contractor/siding-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Siding Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/siding-contractor/siding-repair" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Siding Repair</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/siding-contractor/siding-replacement" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Siding Replacement</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/siding-contractor/vinyl-siding-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Vinyl Siding Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/siding-contractor/siding-inspection" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Siding Inspection</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a>  </div> </div> </div> </div><div class="mb-0.5" data-astro-cid-3ef6ksr2> <!-- Category row: link + chevron (right) --> <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 min-w-0 px-4" data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service" class="min-w-0 max-w-full w-max justify-self-start py-2.5 text-base font-[900] text-text  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent truncate" data-astro-cid-3ef6ksr2> Window Installation Service </a> <button type="button" class="cat-toggle flex items-center justify-center w-9 h-9 shrink-0 text-text-muted  transition-colors duration-150 hover:bg-accent-light hover:text-accent" aria-expanded="false" aria-controls="cat-panel-2" aria-label="Toggle Window Installation Service services" data-astro-cid-3ef6ksr2> <svg class="cat-chevron" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M3 5l4 4 4-4" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> <!-- Collapsible services panel — animated via grid-template-rows --> <div id="cat-panel-2" class="cat-panel grid overflow-hidden" style="grid-template-rows: 0fr" data-astro-cid-3ef6ksr2> <div class="min-h-0" data-astro-cid-3ef6ksr2> <div class="pl-4 flex flex-col gap-0.5 pt-0.5 pb-2" data-astro-cid-3ef6ksr2> <a href="/services/window-installation-service/window-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Window Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/window-installation-service/window-replacement" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Window Replacement</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/window-installation-service/residential-window-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Residential Window
21 Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/window-installation-service/window-inspection" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Window Inspection</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a>  </div> </div> </div> </div><div class="mb-0.5" data-astro-cid-3ef6ksr2> <!-- Category row: link + chevron (right) --> <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 min-w-0 px-4" data-astro-cid-3ef6ksr2> <a href="/services/gutter-services" class="min-w-0 max-w-full w-max justify-self-start py-2.5 text-base font-[900] text-text  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent truncate" data-astro-cid-3ef6ksr2> Gutter Services </a> <button type="button" class="cat-toggle flex items-center justify-center w-9 h-9 shrink-0 text-text-muted  transition-colors duration-150 hover:bg-accent-light hover:text-accent" aria-expanded="false" aria-controls="cat-panel-3" aria-label="Toggle Gutter Services services" data-astro-cid-3ef6ksr2> <svg class="cat-chevron" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M3 5l4 4 4-4" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> <!-- Collapsible services panel — animated via grid-template-rows --> <div id="cat-panel-3" class="cat-panel grid overflow-hidden" style="grid-template-rows: 0fr" data-astro-cid-3ef6ksr2> <div class="min-h-0" data-astro-cid-3ef6ksr2> <div class="pl-4 flex flex-col gap-0.5 pt-0.5 pb-2" data-astro-cid-3ef6ksr2> <a href="/services/gutter-services/gutter-installation" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Gutter Installation</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/services/gutter-services/gutter-replacement" class="flex items-center justify-between px-3 py-1.5 text-[0.875rem] text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2>Gutter Replacement</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a>  </div> </div> </div> </div> </div> <!-- Service Areas section --> <div class="mt-2 pt-4 border-t border-border" data-astro-cid-3ef6ksr2> <div class="flex items-center justify-between px-4 mb-2" data-astro-cid-3ef6ksr2> <p class="text-[0.6875rem] font-bold tracking-[0.12em] uppercase text-text-muted" data-astro-cid-3ef6ksr2>Service Areas</p> <a href="/#service-areas" class="text-[0.75rem] text-accent font-semibold no-underline hover:underline" data-astro-cid-3ef6ksr2>All →</a> </div> <a href="/service-area-map" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent text-text-secondary" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Service Area Map</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> <a href="/areas/owensboro-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Owensboro, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/madisonville-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Madisonville, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/henderson-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Henderson, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/princeton-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Princeton, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/cairo-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Cairo, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/dawson-springs-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Dawson Springs, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/calhoun-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Calhoun, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a><a href="/areas/morganfield-ky" class="flex items-center gap-2.5 px-4 py-2.5 text-[0.9375rem] font-medium text-text-secondary  no-underline transition-colors duration-150 hover:bg-accent-light hover:text-accent capitalize" data-astro-cid-3ef6ksr2> <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 text-text-muted" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" data-astro-cid-3ef6ksr2></path> <circle cx="12" cy="10" r="3" data-astro-cid-3ef6ksr2></circle> </svg> <span class="flex-1" data-astro-cid-3ef6ksr2>Morganfield, KY</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="shrink-0 opacity-40" aria-hidden="true" data-astro-cid-3ef6ksr2> <line x1="5" y1="12" x2="19" y2="12" data-astro-cid-3ef6ksr2></line><polyline points="12 5 19 12 12 19" data-astro-cid-3ef6ksr2></polyline> </svg> </a> </div> <!-- Bottom CTAs --> <div class="flex flex-col gap-3 mt-auto pt-5 border-t border-border" data-astro-cid-3ef6ksr2> <a href="tel:(270) 826-0627" class="btn-phone w-full justify-center" data-astro-cid-3ef6ksr2>
21 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.44 2 2 0 0 1 3.59 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.69a16 16 0 0 0 6.29 6.29l.86-.86a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-3ef6ksr2></path> </svg> (270) 826-0627 </a> <a href="/instant-quote" class="btn-primary w-full justify-center rounded-none" data-astro-cid-3ef6ksr2>
22Instant Quote
23</a> <button type="button" data-open-quote-modal class="btn-primary w-full justify-center" data-astro-cid-3ef6ksr2> Get a Free Estimate </button> </div> </div> </nav> <main id="main-content"> <!-- Page hero --> <section class="bg-dark-bg relative overflow-hidden pt-[max(6rem,_clamp(3.5rem,_7vw,_6rem))] pb-[clamp(3.5rem,_7vw,_6rem)]" aria-label="About page header"> <div class="absolute inset-0 bg-cover bg-center bg-no-repeat opacity-[0.24] [filter:saturate(0.8)] hero-bg-zoom" style="background-image: url('/images/hero-bg.webp')" role="presentation"></div> <div class="absolute inset-0 bg-[linear-gradient(90deg,oklch(from_var(--color-overlay)_l_c_h/0.60)_0%,oklch(from_var(--color-overlay)_l_c_h/0.36)_48%,oklch(from_var(--color-overlay)_l_c_h/0.08)_100%)]" aria-hidden="true"></div> <div class="container-site relative z-10"> <nav aria-label="Breadcrumb" class="flex items-center gap-x-2 gap-y-1 text-[0.8125rem] mb-8 hero-fade-up" style="animation-delay: 0ms"> <a href="/" class="text-text-on-dark-dim hover:text-accent-light transition-colors duration-150 no-underline shrink-0">Home</a> <svg class="text-text-on-dark-dim shrink-0" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"></polyline></svg> <span aria-current="page" class="text-text-on-dark-muted">About Us</span> </nav> <div class="max-w-[780px]"> <span class="section-label section-label-dark hero-fade-up" style="animation-delay: 80ms">Our Company</span> <h1 class="text-[clamp(1.875rem,_4.5vw,_3rem)] font-bold text-text-on-dark leading-[1.1] mb-4 hero-fade-up" style="animation-delay: 150ms"> <span class="capitalize">Roofing Contractor</span> backed by Since 1971 years of local experience
24</h1> <p class="text-[1.0625rem] text-text-on-dark leading-[1.65] max-w-[56ch] hero-fade-up" style="animation-delay: 270ms"> Fraley&#39;s Home Improvement has served western Kentucky homeowners since 1971, building a reputation one roof, one window, and one satisfied customer at a time. We&#39;re a family-rooted business with over 55 years of experience in roofing, siding, gutters, and windows. When you call us, you talk to people who take your home as seriously as you do. </p> <!-- Bold typographic stat row --> <div class="grid grid-cols-3 gap-x-8 gap-y-5 mt-10 pt-10 border-t border-white/10 hero-fade-up" style="animation-delay: 390ms" aria-label="Company highlights"> <div> <p class="font-heading text-[3rem] font-bold text-text-on-dark leading-none m-0 max-w-none">Since 1971</p> <p class="text-[0.6875rem] font-semibold tracking-[0.1em] uppercase text-text-on-dark-muted mt-2 m-0 max-w-none">Serving locally</p> </div> <div> <p class="font-heading text-[3rem] font-bold text-text-on-dark leading-none m-0 max-w-none">8</p> <p class="text-[0.6875rem] font-semibold tracking-[0.1em] uppercase text-text-on-dark-muted mt-2 m-0 max-w-none">Service Areas</p> </div> <div> <p class="font-heading text-[3rem] font-bold text-text-on-dark leading-none m-0 max-w-none">14+</p> <p class="text-[0.6875rem] font-semibold tracking-[0.1em] uppercase text-text-on-dark-muted mt-2 m-0 max-w-none">Services Offered</p> </div> </div> </div> </div> </section> <!-- Full backstory --> <section class="section-pad bg-bg-warm" id="about" aria-labelledby="about-heading"> <div class="container-site grid grid-cols-1 md:grid-cols-2 gap-16 items-center"> <!-- Image column --> <div class="max-w-[540px] mx-auto w-full md:max-w-none reveal"> <div class="relative"> <img src="/images/about-team.webp" alt="Exterior home improvement crew and tools on display, showcasing roofing, siding, and gutter installation equipment." title="Exterior home improvement crew and tools on display, showcasing roofing, siding, and gutter installation equipment." width="960" height="540" loading="lazy" decoding="async" class="w-full aspect-[16/9] object-cover object-center  shadow-xl"> <!-- Floating stat card --> <div class="absolute bottom-8 right-4 md:-right-8 bg-secondary text-secondary-fg px-6 py-5  shadow-[var(--shadow-lg-warm)] text-center min-w-[120px]"> <p class="font-heading text-[2.5rem] font-bold leading-none m-0 max-w-none">Since 1971</p> <p class="text-xs font-semibold leading-[1.3] text-secondary-muted mt-2 m-0 max-w-none">Serving locally<br>Henderson County</p> </div> <!-- Accent block decoration --> <div class="absolute -top-6 -left-6 w-[60%] h-[60%] bg-secondary-light  z-[-1]" aria-hidden="true"></div> </div> </div> <!-- Content column --> <div class="reveal" style="transition-delay: 120ms;"> <span class="section-label">Our Story</span> <h2 id="about-heading" class="text-[clamp(1.875rem,_4vw,_2.5rem)] font-bold text-text mb-2"> Serving homeowners since<br> <em class="italic text-accent">1971</em> </h2> <span class="accent-bar"></span> <div class="mt-6 flex flex-col gap-4"> <p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">Fraley&#39;s Home Improvement has been protecting homes across western Kentucky and the tri-state region since 1971. What started as a small, family-operated business in Henderson has grown into a trusted name built almost entirely on word-of-mouth referrals and repeat customers. Over 55 years later, that foundation has never changed.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">We started with a simple belief: homeowners deserve honest work, fair pricing, and a crew that shows up when they say they will. That belief still drives every estimate we write and every job we finish. We treat your home the way 
24we&#39;d treat our own, and we don&#39;t cut corners to save time.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">Our services cover the exterior of your home from top to bottom. We install and replace roofing, siding, windows, and gutters for homeowners and property managers throughout the region. Whether you&#39;re dealing with storm damage, aging materials, or just ready for an upgrade, we have the experience to get it done right.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">As a GAF Factory Certified roofer, we meet manufacturer standards that most local contractors don&#39;t. That certification matters because it affects both the quality of the installation and the warranty coverage available to you. We hold ourselves to that standard on every roofing project we take on.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">We serve a wide stretch of western Kentucky, including Henderson, Owensboro, Madisonville, Morganfield, Princeton, Marion, Dixon, Providence, Dawson Springs, and the surrounding communities. If you&#39;re not sure whether we cover your area, just call us. Chances are, we do.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">Our BBB A+ rating reflects what our customers already know: we show up, we communicate, and we stand behind our work. Free, no-hassle estimates are available by appointment. We answer the phone Monday through Friday during normal business hours, and we meet clients at the office by appointment only. There&#39;s no pressure and no obligation.</p><p class="text-base text-text-secondary leading-[1.7] max-w-[65ch]">If your home needs attention on the outside, we&#39;d like to help. Call us at 270-826-0627 or email [email protected] to request your free estimate today.</p> </div>   </div> </div> </section> <!-- Values section --> <section class="section-pad" aria-labelledby="values-heading"> <div class="container-site"> <div class="max-w-[520px] mb-10 reveal"> <span class="section-label">How We Work</span> <h2 id="values-heading" class="text-[clamp(1.75rem,_4vw,_2.25rem)] font-bold">What you can count on</h2> </div> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5 reveal-stagger"> <div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">55+ Years of Experience</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">Fraley&#39;s Home Improvement has been protecting homes across western Kentucky since 1971. That depth of experience shows in every roof, window, and siding job we complete.</p> </div><div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">GAF Factory Certified</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">Our GAF Factory Certified status means we meet strict installation standards set by one of the industry&#39;s leading roofing manufacturers. That certification backs the work we do on your roof.</p> </div><div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">BBB A+ Rated</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">We hold an A+ rating with the Better Business Bureau, earned through consistent, honest work and responsive customer service. You can verify our standing before you call.</p> </div><div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">Free, No-Pressure Estimates</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">
24We come to your home, assess what needs to be done, and give you a clear estimate at no charge. No sales tactics, no obligation.</p> </div><div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">Word-of-Mouth Built</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">Most of our new customers come from neighbors and friends who referred us. That kind of trust is only earned by doing the job right and treating people fairly.</p> </div><div class="card p-8 flex flex-col gap-[0.875rem]"> <div class="w-10 h-10 bg-accent-light  flex items-center justify-center text-accent" aria-hidden="true"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <h3 class="font-heading text-[1.0625rem] font-bold text-text leading-[1.25]">Clean, Respectful Jobsites</h3> <p class="text-[0.9rem] text-text-secondary leading-[1.65]">We treat your property with care from the first day on-site to the final walkthrough. Debris is cleared and your yard is left the way we found it.</p> </div> </div> </div> </section> <!-- Reviews --> <section class="section-pad relative bg-bg-warm overflow-hidden" id="reviews" aria-labelledby="reviews-heading"> <!-- Faint green radial wash from top — breaks the flat warm background --> <div class="pointer-events-none absolute inset-0" style="background: radial-gradient(ellipse 90% 55% at 50% -5%, oklch(93% 0.04 145 / 0.10), transparent 70%)" aria-hidden="true"></div> <!-- Decorative large opening quote — section level --> <div class="pointer-events-none absolute right-[clamp(1rem,6vw,5rem)] top-[clamp(1rem,4vw,2.5rem)] select-none font-heading leading-none text-accent" style="font-size: clamp(7rem, 16vw, 13rem); opacity: 0.045; line-height: 1" aria-hidden="true">&#8220;</div> <div class="container-site relative"> <div class="mb-10 reveal"> <span class="section-label">Client Reviews</span> <h2 id="reviews-heading" class="text-[clamp(1.875rem,_4vw,_2.5rem)] font-bold mb-5">
25What Henderson County homeowners <em class="italic text-accent">say.</em> </h2> <!-- Summary bar with Google badge --> <div class="flex items-center justify-between gap-6 flex-wrap"> <!-- Rating block --> <div class="flex items-center gap-4"> <span class="font-heading text-5xl font-bold text-accent leading-none">4.9</span> <div class="flex flex-col gap-1.5"> <div class="star-rating" role="img" aria-label="4.9 out of 5 stars"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <div class="flex items-center gap-1.5"> <svg width="13" height="13" viewBox="0 0 24 24" aria-hidden="true" class="shrink-0"> <path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" fill="#4285F4"></path> <path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"></path> <path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z" fill="#FBBC05"></path> <path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"></path> </svg> <span class="text-sm text-text-secondary">91 Google reviews</span> </div> </div> </div> <!-- Leave a review CTA --> <div class="flex flex-col items-start sm:items-end gap-1.5"> <p class="text-xs font-semibold uppercase tracking-[0.1em] text-text-muted m-0">Worked with us?</p> <a href="/review" class="btn-primary flex items-center gap-2"> <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg>
26Leave a Review
27</a> </div> </div> </div> <!-- Review cards --> <div class="relative mb-12"> <div id="reviews-track" class="reveal-stagger flex items-start gap-5 overflow-x-auto snap-x snap-mandatory pb-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden max-md:-mx-[clamp(1rem,5vw,2rem)] max-md:w-[calc(100%+2*clamp(1rem,5vw,2rem))] max-md:px-[clamp(1rem,5vw,2rem)] max-md:[scroll-padding-inline-start:clamp(1rem,5vw,2rem)]"> <article data-review-card class="snap-start shrink-0 grow-0 basis-[min(calc(85vw-0.5rem),340p
27x)] md:basis-[calc((100%-1.25rem)/2)] lg:basis-[calc((100%-2*1.25rem)/3)] relative flex flex-col gap-4 overflow-hidden p-7 bg-surface-raised  border border-card-warm-border shadow-sm-warm" aria-label="Review from Kasie Gomez"> <!-- Decorative opening quote --> <div class="pointer-events-none absolute bottom-3 right-4 select-none font-heading leading-none text-secondary" style="font-size: 5.5rem; opacity: 0.10; line-height: 1" aria-hidden="true">&#8221;</div> <!-- Stars --> <div class="star-rating gap-[3px]" role="img" aria-label="5 out of 5 stars"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <!-- Quote --> <blockquote class="m-0 flex-1"> <p id="review-text-0" class="text-[0.9375rem] text-text-secondary leading-[1.7] italic m-0" data-review-text> When we purchased our second home &amp; needed a new roof quickly prior to moving in, we knew to call Mike Fraley and his roofing crew. Professional &amp; timely service and done in one day! The crew cleaned up wonderfully and were very efficient. Mike has extensive knowledge of roofing and we always trust his suggestions - we went with GAF Timberline HDZ in Charcoal. </p> </blockquote> <button type="button" class="text-sm font-semibold text-accent self-start -mt-2" data-review-toggle aria-controls="review-text-0" aria-expanded="false" hidden>
28See more
29</button> <!-- Author --> <footer class="flex items-center gap-3 pt-4 border-t border-border"> <div class="w-10 h-10  flex items-center justify-center font-heading text-base font-bold flex-shrink-0 bg-accent text-accent-fg" aria-hidden="true"> K </div> <div class="flex flex-col gap-[2px]"> <span class="text-[0.9rem] font-semibold text-text">Kasie Gomez</span> <span class="text-xs text-text-muted">
29 Google review   · March 2026 </span> </div> </footer> </article><article data-review-card class="snap-start shrink-0 grow-0 basis-[min(calc(85vw-0.5rem),340px)] md:basis-[calc((100%-1.25rem)/2)] lg:basis-[calc((100%-2*1.25rem)/3)] relative flex flex-col gap-4 overflow-hidden p-7 bg-surface-raised  border border-card-warm-border shadow-sm-warm" aria-label="Review from Donna"> <!-- Decorative opening quote --> <div class="pointer-events-none absolute bottom-3 right-4 select-none font-heading leading-none text-secondary" style="font-size: 5.5rem; opacity: 0.10; line-height: 1" aria-hidden="true">&#8221;</div> <!-- Stars --> <div class="star-rating gap-[3px]" role="img" aria-label="5 out of 5 stars"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <!-- Quote --> <blockquote class="m-0 flex-1"> <p id="review-text-1" class="text-[0.9375rem] text-text-secondary leading-[1.7] italic m-0" data-review-text> Fraley’s replaced the roof on my house and shed after hail damage. They did an excellent job! They did a complete tear off, Roof replacement and cleaned up the site afterwards. The crew was very organized and it took just a few hours to complete. I am very pleased with their work and I will recommend them to all my friends and family. </p> </blockquote> <button type="button" class="text-sm font-semibold text-accent self-start -mt-2" data-review-toggle aria-controls="review-text-1" aria-expanded="false" hidden>
30See more
31</button> <!-- Author --> <footer class="flex items-center gap-3 pt-4 border-t border-border"> <div class="w-10 h-10  flex items-center justify-center font-heading text-base font-bold flex-shrink-0 bg-secondary text-secondary-fg" aria-hidden="true"> D </div> <div class="flex flex-col gap-[2px]"> <span class="text-[0.9rem] font-semibold text-text">Donna</span> <span class="text-xs text-text-muted">
31 Google review   · February 2026 </span> </div> </footer> </article><article data-review-card class="snap-start shrink-0 grow-0 basis-[min(calc(85vw-0.5rem),340px)] md:basis-[calc((100%-1.25rem)/2)] lg:basis-[calc((100%-2*1.25rem)/3)] relative flex flex-col gap-4 overflow-hidden p-7 bg-surface-raised  border border-card-warm-border shadow-sm-warm" aria-label="Review from Tonya Leslie"> <!-- Decorative opening quote --> <div class="pointer-events-none absolute bottom-3 right-4 select-none font-heading leading-none text-secondary" style="font-size: 5.5rem; opacity: 0.10; line-height: 1" aria-hidden="true">&#8221;</div> <!-- Stars --> <div class="star-rating gap-[3px]" role="img" aria-label="5 out of 5 stars"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <!-- Quote --> <blockquote class="m-0 flex-1"> <p id="review-text-2" class="text-[0.9375rem] text-text-secondary leading-[1.7] italic m-0" data-review-text> Fraley&#39;s Home Improvement removed two old roofs from my garage. They did an exceptional job I would highly recommend them if you need roof work. Mike was very easy to talk to and his crew does good work. </p> </blockquote> <button type="button" class="text-sm font-semibold text-accent self-start -mt-2" data-review-toggle aria-controls="review-text-2" aria-expanded="false" hidden>
32See more
33</button> <!-- Author --> <footer class="flex items-center gap-3 pt-4 border-t border-border"> <div class="w-10 h-10  flex items-center justify-center font-heading text-base font-bold flex-shrink-0 bg-accent text-accent-fg" aria-hidden="true"> T </div> <div class="flex flex-col gap-[2px]"> <span class="text-[0.9rem] font-semibold text-text">Tonya Leslie</span> <span class="text-xs text-text-muted">
33 Google review   · July 2026 </span> </div> </footer> </article><article data-review-card class="snap-start shrink-0 grow-0 basis-[min(calc(85vw-0.5rem),340px)] md:basis-[calc((100%-1.25rem)/2)] lg:basis-[calc((100%-2*1.25rem)/3)] relative flex flex-col gap-4 overflow-hidden p-7 bg-surface-raised  border border-card-warm-border shadow-sm-warm" aria-label="Review from Jennifer Damrath"> <!-- Decorative opening quote --> <div class="pointer-events-none absolute bottom-3 right-4 select-none font-heading leading-none text-secondary" style="font-size: 5.5rem; opacity: 0.10; line-height: 1" aria-hidden="true">&#8221;</div> <!-- Stars --> <div class="star-rating gap-[3px]" role="img" aria-label="5 out of 5 stars"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <!-- Quote --> <blockquote class="m-0 flex-1"> <p id="review-text-3" class="text-[0.9375rem] text-text-secondary leading-[1.7] italic m-0" data-review-text> Called for an estimate and Mike was out to my place within 24 hours. Ended up with hail damage and he answered all my questions quickly and I made a claim to my insurance company.  Roof was put on within 2 weeks after him coming out. Estimate was reasonable.  Roof looks great and all the mess was cleaned up. I highly recommend. </p> </blockquote> <button type="button" class="text-sm font-semibold text-accent self-start -mt-2" data-review-toggle aria-controls="review-text-3" aria-expanded="false" hidden>
34See more
35</button> <!-- Author --> <footer class="flex items-center gap-3 pt-4 border-t border-border"> <div class="w-10 h-10  flex items-center justify-center font-heading text-base font-bold flex-shrink-0 bg-secondary text-secondary-fg" aria-hidden="true"> J </div> <div class="flex flex-col gap-[2px]"> <span class="text-[0.9rem] font-semibold text-text">Jennifer Damrath</span> <span class="text-xs text-text-muted">
35 Google review   · March 2026 </span> </div> </footer> </article><article data-review-card class="snap-start shrink-0 grow-0 basis-[min(calc(85vw-0.5rem),340px)] md:basis-[calc((100%-1.25rem)/2)] lg:basis-[calc((100%-2*1.25rem)/3)] relative flex flex-col gap-4 overflow-hidden p-7 bg-surface-raised  border border-card-warm-border shadow-sm-warm" aria-label="Review from Terry Horn"> <!-- Decorative opening quote --> <div class="pointer-events-none absolute bottom-3 right-4 select-none font-heading leading-none text-secondary" style="font-size: 5.5rem; opacity: 0.10; line-height: 1" aria-hidden="true">&#8221;</div> <!-- Stars --> <div class="star-rating gap-[3px]" role="img" aria-label="5 out of 5 stars"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="0" aria-hidden="true"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <!-- Quote --> <blockquote class="m-0 flex-1"> <p id="review-text-4" class="text-[0.9375rem] text-text-secondary leading-[1.7] italic m-0" data-review-text> Mike was wonderful to work with.  He worked directly with the insurance company for concerns that had to be addressed. Very efficient in their work.
36
37We planned to sell our home within a few months and the work he did replacing our roof and gutters gave our home a nice curb appeal.  His work warranty was even transferred to the new owners.
38
39We highly recommend Fraley’s. </p> </blockquote> <button type="button" class="text-sm font-semibold text-accent self-start -mt-2" data-review-toggle aria-controls="review-text-4" aria-expanded="false" hidden>
40See more
41</button> <!-- Author --> <footer class="flex items-center gap-3 pt-4 border-t border-border"> <div class="w-10 h-10  flex items-center justify-center font-heading text-base font-bold flex-shrink-0 bg-accent text-accent-fg" aria-hidden="true"> T </div> <div class="flex flex-col gap-[2px]"> <span class="text-[0.9rem] font-semibold text-text">Terry Horn</span> <span class="text-xs text-text-muted">
41 Google review   · February 2026 </span> </div> </footer> </article> </div> <!-- Dots + nav — always visible --> <div class="flex items-center justify-center gap-3 mt-6"> <button id="reviews-prev-m" type="button" class="flex size-10 shrink-0 cursor-pointer items-center justify-center  border border-border bg-surface-raised text-text-secondary transition-[color,background-color,border-color] duration-150 hover:border-accent hover:bg-accent-light hover:text-accent" aria-label="Previous reviews"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline> </svg> </button> <div id="reviews-dots" class="flex items-center gap-[6px]" role="tablist" aria-label="Review navigation"></div> <button id="reviews-next-m" type="button" class="flex size-10 shrink-0 cursor-pointer items-center justify-center  border border-border bg-surface-raised text-text-secondary transition-[color,background-color,border-color] duration-150 hover:border-accent hover:bg-accent-light hover:text-accent" aria-label="Next reviews"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline> </svg> </button> </div> </div> <!-- CTA — shown only on homepage -->  </div> </section> 
41<script>
42  (() => {
43    const COLLAPSED_MAX = '6.5rem';
44    const DURATION = '380ms cubic-bezier(0.16, 1, 0.3, 1)';
45    const DOT_BASE =
46      'h-2 shrink-0 cursor-pointer  border-0 p-0 transition-[width,background-color] duration-220 ease-in-out';
47    const DOT_ACTIVE = 'w-5.5 bg-accent';
48    const DOT_INACTIVE = 'w-2 bg-border';
49    let allItems = [];
50
51    const prefersReduced = () => window.matchMedia('(prefers-reduced-motion: reduce)').matches;
52
53    function expandItem(item) {
54      item.toggle.setAttribute('aria-expanded', 'true');
55      item.toggle.textContent = 'See less';
56      if (prefersReduced()) {
57        item.text.style.maxHeight = 'none';
58        return;
59      }
60      const targetHeight = item.text.scrollHeight;
61      item.text.style.transition = `max-height ${DURATION}`;
62      item.text.style.maxHeight = targetHeight + 'px';
63      item.text.addEventListener('transitionend', () => {
64        item.text.style.maxHeight = 'none';
65      }, { once: true });
66    }
67
68    function collapseItem(item) {
69      item.toggle.setAttribute('aria-expanded', 'false');
70      item.toggle.textContent = 'See more';
71      const currentHeight = item.text.scrollHeight;
72      item.text.style.transition = 'none';
73      item.text.style.maxHeight = currentHeight + 'px';
74      requestAnimationFrame(() => {
75        if (!prefersReduced()) {
76          item.text.style.transition = `max-height ${DURATION}`;
77        }
78        item.text.style.maxHeight = COLLAPSED_MAX;
79      });
80    }
81
82    function setupReviewToggles() {
83      document.querySelectorAll('[data-review-toggle]').forEach(t => {
84        delete t.dataset.bound;
85      });
86      allItems = [];
87
88      const cards = document.querySelectorAll('[data-review-card]');
89      for (const card of cards) {
90        const text = card.querySelector('[data-review-text]');
91        const toggle = card.querySelector('[data-review-toggle]');
92        if (!(text instanceof HTMLElement) || !(toggle instanceof HTMLButtonElement)) continue;
93
94        text.style.transition = 'none';
95        text.style.overflow = 'hidden';
96        text.style.maxHeight = COLLAPSED_MAX;
97
98        const isOverflowing = text.scrollHeight > text.clientHeight + 2;
99
100        if (!isOverflowing) {
101          toggle.hidden = true;
102          text.style.maxHeight = 'none';
103          text.style.overflow = '';
104          text.style.transition = '';
105          continue;
106        }
107
108        toggle.hidden = false;
109        const item = { text, toggle };
110        allItems.push(item);
111
112        if (toggle.dataset.bound) continue;
113        toggle.dataset.bound = '1';
114
115        toggle.addEventListener('click', () => {
116          const isExpanded = toggle.getAttribute('aria-expanded') === 'true';
117          if (!isExpanded) {
118            allItems.forEach(other => {
119              if (other !== item && other.toggle.getAttribute('aria-expanded') === 'true') {
120                collapseItem(other);
121              }
122            });
123            expandItem(item);
124          } else {
125            collapseItem(item);
126          }
127        });
128      }
129    }
130
131    function setupCarousel(trackId, dotsId) {
132      const track = document.getElementById(trackId);
133      const dotsContainer = document.getElementById(dotsId);
134      const prev = document.getElementById('reviews-prev-m');
135      const next = document.getElementById('reviews-next-m');
136      if (!track) return;
137
138      const cards = [...track.querySelectorAll('[data-review-card]')];
139      if (cards.length === 0) return;
140
141      track.__reviewsCarouselAbort?.abort();
142      const abort = new AbortController();
143      track.__reviewsCarouselAbort = abort;
144      const { signal } = abort;
145
146      /** Matches md/lg breakpoints in card basis classes */
147      const getCardsPerView = () => {
148        const w = window.innerWidth;
149        if (w < 768) return 1;
150        if (w < 1024) return 2;
151        return 3;
152      };
153
154      const getScrollStride = () =>
155        cards[0].offsetWidth + (parseFloat(getComputedStyle(track).columnGap) || 20);
156
157      const getPageCount = () => Math.max(1, cards.length - getCardsPerView() + 1);
158
159      const getCurrentPage = () => {
160        const stride = getScrollStride();
161        if (!stride) return 0;
162        const page = Math.round(track.scrollLeft / stride);
163        return Math.min(getPageCount() - 1, Math.max(0, page));
164      };
165
166      const scrollToPage = (page) => {
167        track.scrollTo({ left: page * getScrollStride(), behavior: 'smooth' });
168      };
169
170      const doScroll = (dir) => track.scrollBy({ left: dir * getScrollStride(), behavior: 'smooth' });
171
172      prev?.addEventListener('click', () => doScroll(-1), { signal });
173      next?.addEventListener('click', () => doScroll(1), { signal });
174
175      const renderDots = () => {
176        if (!dotsContainer) return;
177        const pageCount = getPageCount();
178        const activePage = getCurrentPage();
179
180        dotsContainer.innerHTML = '';
181        dotsContainer.hidden = pageCount <= 1;
182
183        for (let i = 0; i < pageCount; i++) {
184          const dot = document.createElement('button');
185          dot.type = 'button';
186          dot.className = `${DOT_BASE} ${i === activePage ? DOT_ACTIVE : DOT_INACTIVE}`;
187          dot.setAttribute('role', 'tab');
188          dot.setAttribute('aria-selected', i === activePage ? 'true' : 'false');
189          dot.setAttribute('aria-label', `Review page ${i + 1} of ${pageCount}`);
190          dot.addEventListener('click', () => scrollToPage(i), { signal });
191          dotsContainer.appendChild(dot);
192        }
193      };
194
195      const updateActiveDot = () => {
196        if (!dotsContainer || dotsContainer.hidden) return;
197        const page = getCurrentPage();
198        [...dotsContainer.querySelectorAll('button')].forEach((dot, i) => {
199          const isActive = i === page;
200          dot.className = `${DOT_BASE} ${isActive ? DOT_ACTIVE : DOT_INACTIVE}`;
201          dot.setAttribute('aria-selected', isActive ? 'true' : 'false');
202        });
203      };
204
205      renderDots();
206
207      let scrollTimer;
208      track.addEventListener(
209        'scroll',
210        () => {
211          clearTimeout(scrollTimer);
212          scrollTimer = setTimeout(updateActiveDot, 60);
213        },
214        { passive: true, signal },
215      );
216
217      let resizeTimer;
218      window.addEventListener(
219        'resize',
220        () => {
221          clearTimeout(resizeTimer);
222          resizeTimer = setTimeout(() => {
223            const page = Math.min(getCurrentPage(), getPageCount() - 1);
224            renderDots();
225            scrollToPage(page);
226            updateActiveDot();
227          }, 150);
228        },
229        { signal },
230      );
231
232      updateActiveDot();
233    }
234
235    function init() {
236      setupReviewToggles();
237      setupCarousel('reviews-track', 'reviews-dots');
238    }
239
240    if (document.readyState === 'loading') {
241      document.addEventListener('DOMContentLoaded', init, { once: true });
242    } else {
243      init();
244    }
245    document.addEventListener('astro:page-load', init);
246  })();
247</script>
247 <!-- Map — location and hours --> <section class="section-pad bg-surface" id="find-us" aria-labelledby="map-heading"> <div class="container-site"> <div class="max-w-[640px] mb-12 reveal"> <span class="section-label">Find Us</span> <h2 id="map-heading" class="text-[clamp(1.875rem,4vw,2.5rem)] font-bold mb-4">
248Proudly Based in Henderson, KY </h2> <p class="text-[1.0625rem] text-text-secondary leading-[1.65]"> Phone answered Mon–Fri during normal business hours. Office visits by appointment only. </p> </div> <div class="grid md:grid-cols-[1fr_1.4fr] gap-8 lg:gap-12 items-stretch reveal"> <!-- ── Info panel ───────────────────────────────────────── --> <div class="bg-surface-raised border border-border  p-8 flex flex-col gap-8"> <!-- Phone --> <div class="flex gap-4"> <div class="shrink-0 w-10 h-10  bg-accent/10 flex items-center justify-center"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-accent" aria-hidden="true"> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.44 2 2 0 0 1 3.59 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.69a16 16 0 0 0 6.29 6.29l.86-.86a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"></path> </svg> </div> <div> <p class="text-[0.75rem] font-semibold tracking-[0.08em] uppercase text-text-muted mb-1">Phone</p> <a href="tel:(270) 826-0627" class="font-semibold text-text hover:text-accent transition-colors"> (270) 826-0627 </a> </div> </div> <!-- Hours --> <div class="flex gap-4"> <div class="shrink-0 w-10 h-10  bg-accent/10 flex items-center justify-center"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-accent" aria-hidden="true"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg> </div> <div class="flex-1"> <p class="text-[0.75rem] font-semibold tracking-[0.08em] uppercase text-text-muted mb-2">Hours</p> <ul class="space-y-1" role="list"> <li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Monday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Tuesday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Wednesday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Thursday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Friday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Saturday</span> <span class="font-medium text-text">By Appointment</span> </li><li class="flex justify-between gap-4 text-[0.875rem]"> <span class="text-text-secondary">Sunday</span> <span class="font-medium text-text">By Appointment</span> </li> </ul> <p class="text-[0.75rem] text-text-muted leading-relaxed mt-3 mb-0">Phone answered Mon–Fri during normal business hours. Office visits by appointment only.</p> </div> </div> </div> <!-- ── Map ──────────────────────────────────────────────── --> <div class=" overflow-hidden border border-border shadow-md min-h-[340px] md:min-h-0"> <iframe src="https://www.google.com/maps/embed/v1/place?key=AIzaSyCCiVHrUGwZYxYen0nL4t6FX1qsujiwYGg&#38;q=place_id:ChIJAQBceNoocIgRLIaFDilcnmQ&#38;zoom=15" title="Map showing Fraley's Home Improvement location in Henderson, KY" style="width:100%;height:100%;min-height:340px;border:0;" allowfullscreen loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe> </div> </div> </div> </section> <!-- Closing CTA --> <section class="bg-dark-bg py-[clamp(3.5rem,_7vw,_5.5rem)]" aria-labelledby="about-cta-heading"> <div class="container-site max-w-[680px] mx-auto text-center flex flex-col items-center gap-6"> <span class="inline-flex items-center gap-2  border border-border-on-dark px-4 py-[0.375rem] text-[0.6875rem] font-semibold uppercase tracking-[0.1em] text-accent-on-dark">
249Free, No-Obligation Estimate
250</span> <h2 id="about-cta-heading" class="font-heading text-[clamp(1.875rem,_4.5vw,_2.75rem)] font-bold text-text-on-dark leading-[1.1] m-0 max-w-none"> Ready to Work With a Team You Can Trust? </h2> <p class="text-[1.0625rem] text-text-on-dark-muted leading-[1.65] max-w-[52ch] m-0"> We&#39;ve been serving western Kentucky homeowners since 1971, and every free estimate comes with straight answers and zero pressure. Call 270-826-0627 or email [email protected] to get started. </p> <div class="flex flex-wrap gap-3 justify-center items-center"> <button type="button" data-open-quote-modal class="btn-primary py-3.5 px-8"> Get a Free Estimate </button> <a href="tel:(270) 826-0627" class="btn-ghost-light py-3.5 px-7">
251Call (270) 826-0627 </a> </div> <div class="flex flex-wrap items-center justify-center gap-x-5 gap-y-2 pt-4 border-t border-border-on-dark mt-2 w-full"> <span class="flex items-center gap-1.5 text-xs text-text-on-dark-muted"> <svg class="text-accent-on-dark shrink-0" width="11" height="11" viewB
251ox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> 55+ Years of Business </span><span class="flex items-center gap-1.5 text-xs text-text-on-dark-muted"> <svg class="text-accent-on-dark shrink-0" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> GAF Factory Certified Roofer </span><span class="flex items-center gap-1.5 text-xs text-text-on-dark-muted"> <svg class="text-accent-on-dark shrink-0" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> Free No Hassle Estimates </span> </div> </div> </section> </main> <footer class="bg-dark-surface text-text-on-dark" role="contentinfo"> <!-- Main Footer Grid --> <div class="container-site grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-[1.5fr_1fr_1fr_1.25fr] gap-8 lg:gap-12 py-12 sm:py-16"> <!-- Column 1: Brand --> <div> <a href="/" class="inline-flex items-center no-underline mb-5" aria-label="Fraley's Home Improvement — Home"> <img src="/images/uploads/1787284508186-logo-before-scroll.webp" alt="Fraley's Home Improvement logo" title="Fraley's Home Improvement logo" width="160" height="72" class="w-[clamp(7rem,_28vw,_10rem)] h-auto max-h-[4.5rem] object-contain" loading="lazy" decoding="async" data-custom-image="logo-before-scroll"> </a> <p class="text-sm text-text-on-dark-muted leading-relaxed max-w-[30ch] mb-5">Fraley&#39;s Home Improvement has served Henderson, Kentucky and the tri-state region since 1971 with expert roofing, siding, windows, and gutter services. A GAF Factory Certified Roofer with a BBB A+ Rating, we deliver quality craftsmanship and dependable service to every homeowner.</p> <div class="flex flex-wrap gap-2 mb-4"> <span class="badge bg-surface-footer text-text-on-dark-muted text-[0.6875rem] border border-border-on-dark">55+ Years of Business</span><span class="badge bg-surface-footer text-text-on-dark-muted text-[0.6875rem] border border-border-on-dark">GAF Factory Certified Roofer</span><span class="badge bg-surface-footer text-text-on-dark-muted text-[0.6875rem] border border-border-on-dark">Free No Hassle Estimates</span><span class="badge bg-surface-footer text-text-on-dark-muted text-[0.6875rem] border border-border-on-dark">BBB A+ Rating</span> </div>   <div class="flex gap-2"> <a href="https://www.facebook.com/callroofus" target="_blank" rel="noopener noreferrer" aria-label="Facebook" class="flex items-center justify-center w-9 h-9 bg-surface-footer border border-border-on-dark  text-text-on-dark-muted no-underline transition-colors duration-150 hover:bg-accent hover:border-accent hover:text-accent-fg"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> <path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path> </svg> </a> <a href="https://www.instagram.com/fraleyshomeimprovement/" target="_blank" rel="noopener noreferrer" aria-label="Instagram" class="flex items-center justify-center w-9 h-9 bg-surface-footer border border-border-on-dark  text-text-on-dark-muted no-underline transition-colors duration-150 hover:bg-accent hover:border-accent hover:text-accent-fg"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <rect x="2" y="2" width="20" height="20" rx="0" ry="0"></rect> <circle cx="12" cy="12" r="4"></circle> <line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line> </svg> </a>  </div> </div> <!-- Column 2: Services --> <div> <h3 class="font-body text-[0.6875rem] font-semibold tracking-[0.12em] uppercase text-text-on-dark-muted mb-4">Services</h3> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-2"> <li> <a href="/services/roofing-contractor" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Roofing Contractor</a> </li><li> <a href="/services/siding-contractor" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Siding Contractor</a> </li><li> <a href="/services/window-installation-service" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Window Installation Service</a> </li><li> <a href="/services/gutter-services" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Gutter Services</a> </li>  </ul> </div> <!-- Column 3: Service Areas --> <div> <h3 class="font-body text-[0.6875rem] font-semibold tracking-[0.12em] uppercase text-text-on-dark-muted mb-4">Service Areas</h3> <ul role="list" class="list-none m-0 p-0 flex flex-col gap-2"> <li> <a href="/areas/owensboro-ky" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Owensboro, KY</a> </li><li> <a href="/areas/madisonville-ky" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Madisonville, KY</a> </li><li> <a href="/areas/henderson-ky" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Henderson, KY</a> </li><li> <a href="/areas/princeton-ky" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Princeton, KY</a> </li><li> <a href="/areas/cairo-ky" class="text-[0.9rem] text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">Cairo, KY</a> </li> <li> <a href="/service-area-map" class="text-[0.9rem] font-semibold text-accent-light no-underline transition-colors duration-150 hover:text-text-on-dark">Service Area Map</a> </li> </ul> </div> <!-- Column 4: Contact & Hours --> <div> <h3 class="font-body text-[0.6875rem] font-semibold tracking-[0.12em] uppercase text-text-on-dark-muted mb-4">Contact</h3> <address class="not-italic flex flex-col gap-3"> <div class="flex items-start gap-[0.625rem] text-sm text-text-footer">
251 <svg class="shrink-0 mt-[2px]" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.44 2 2 0 0 1 3.59 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.69a16 16 0 0 0 6.29 6.29l.86-.86a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"></path> </svg> <a href="tel:(270) 826-0627" class="text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">(270) 826-0627</a> </div> <div class="flex items-start gap-[0.625rem] text-sm text-text-footer"> <svg class="shrink-0 mt-[2px]" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path> <polyline points="22,6 12,13 2,6"></polyline> </svg> <a href="mailto:[email protected]" class="text-text-footer no-underline transition-colors duration-150 hover:text-accent-light">[email protected]</a> </div> <div class="flex items-start gap-[0.625rem] text-sm text-text-footer"> <svg class="shrink-0 mt-[2px]" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path> <circle cx="12" cy="10" r="3"></circle> </svg> <span class="leading-normal">Henderson, KY</span> </div> </address> <h3 class="font-body text-[0.6875rem] font-semibold tracking-[0.12em] uppercase text-text-on-dark-muted mt-6 mb-4">Hours</h3> <dl class="flex flex-col gap-[0.375rem]"> <div class="flex justify-between gap-4 text-[0.8125rem]"> <dt class="text-text-on-dark-muted">Mon – Fri</dt> <dd class="text-text-footer m-0">By Appointment</dd> </div> <div class="flex justify-between gap-4 text-[0.8125rem]"> <dt class="text-text-on-dark-muted">Saturday</dt> <dd class="text-text-footer m-0">By Appointment</dd> </div> <div class="flex justify-between gap-4 text-[0.8125rem]"> <dt class="text-text-on-dark-muted">Sunday</dt> <dd class="text-text-footer m-0">By Appointment</dd> </div> </dl> <p class="text-[0.75rem] text-text-on-dark-muted leading-relaxed mt-3 m-0 max-w-[36ch]">Phone answered Mon–Fri during normal business hours. Office visits by appointment only.</p> </div> </div> <!-- Bottom Bar --> <div class="border-t border-border-on-dark py-5"> <div class="container-site flex flex-col items-start gap-4 sm:flex-row sm:items-center sm:justify-between"> <p class="text-[0.8125rem] text-text-on-dark-muted m-0">
252&copy; 2026 Fraley&#39;s Home Improvement. All rights reserved.
253 </p> <nav aria-label="Legal navigation" class="flex gap-6"> <a href="/privacy" class="text-[0.8125rem] text-text-on-dark-muted no-underline transition-colors duration-150 hover:text-text-footer">Privacy Policy</a> <a href="/terms" class="text-[0.8125rem] text-text-on-dark-muted no-underline transition-colors duration-150 hover:text-text-footer">Terms</a> <a href="/sitemap-index.xml" class="text-[0.8125rem] text-text-on-dark-muted no-underline transition-colors duration-150 hover:text-text-footer">Sitemap</a> </nav> </div> </div> </footer> 
253<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.fraleyshomeimprovement.com/"},{"@type":"ListItem","position":2,"name":"About","item":"https://www.fraleyshomeimprovement.com/about"}]}</script>
253  
253<script src="/scripts/image-alt-fallback.js" defer></script>
253 <a href="/instant-quote" class="instant-quote-float" aria-label="Calculate my roofing cost"> <span aria-hidden="true">🧮</span>
254Calculate My Cost
255</a> <div id="chat-widget" data-astro-cid-igwpvru6> <!-- Mobile trigger row: assessment CTA + chat toggle --> <div class="chat-trigger-row" data-astro-cid-igwpvru6> <button id="assessment-cta" class="assessment-cta-btn" data-open-quote-modal aria-label="Get a free assessment" data-astro-cid-igwpvru6> <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-igwpvru6> <path d="M9 11l3 3L22 4" data-astro-cid-igwpvru6></path><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11" data-astro-cid-igwpvru6></path> </svg>
256Free Assessment
257</button> <!-- Trigger --> <button id="chat-toggle" aria-label="Send a quick message" aria-expanded="false" aria-controls="chat-panel" data-astro-cid-igwpvru6> <span class="chat-toggle-icon chat-toggle-icon--open" aria-hidden="true" data-astro-cid-igwpvru6> <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-igwpvru6> <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" data-astro-cid-igwpvru6></path> </svg> </span> <span class="chat-toggle-icon chat-toggle-icon--close" aria-hidden="true" data-astro-cid-igwpvru6> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-igwpvru6> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-igwpvru6></line><line x1="6" y1="6" x2="18" y2="18" data-astro-cid-igwpvru6></line> </svg> </span> <span class="chat-toggle-pulse" aria-hidden="true" data-astro-cid-igwpvru6></span> </button> </div><!-- /.chat-trigger-row --> <!-- Panel --> <div id="chat-panel" role="dialog" aria-label="Send a quick message" aria-hidden="true" data-astro-cid-igwpvru6> <!-- Header --> <div class="chat-header" data-astro-cid-igwpvru6> <div class="chat-header-identity" data-astro-cid-igwpvru6> <div class="chat-avatar" aria-hidden="true" data-astro-cid-igwpvru6> <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-igwpvru6> <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" data-astro-cid-igwpvru6></path> <circle cx="12" cy="7" r="4" data-astro-cid-igwpvru6></circle> </svg> </div> <div data-astro-cid-igwpvru6> <p class="chat-owner-name" data-astro-cid-igwpvru6>Fraley&#39;s Home Improvement</p> <p class="chat-status" data-astro-cid-igwpvru6> <span class="chat-status-dot" aria-hidden="true" data-astro-cid-igwpvru6></span>
258Replies on his personal phone
259</p> </div> </div> <button class="chat-close-btn" id="chat-close" aria-label="Close chat" data-astro-cid-igwpvru6> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-igwpvru6> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-igwpvru6></line><line x1="6" y1="6" x2="18" y2="18" data-astro-cid-igwpvru6></line> </svg> </button> </div> <!-- Message bubble from owner --> <div class="chat-body" data-astro-cid-igwpvru6> <div class="chat-bubble-row" data-astro-cid-igwpvru6> <div class="chat-bubble-avatar" aria-hidden="true" data-astro-cid-igwpvru6> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-igwpvru6> <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" data-astro-cid-igwpvru6></path> <circle cx="12" cy="7" r="4" data-astro-cid-igwpvru6></circle> </svg> </div> <div class="chat-bubble" data-astro-cid-igwpvru6> <p data-astro-cid-igwpvru6>This text goes straight to my personal phone. I will make sure to get back to you the second I'm free!</p> </div> </div> <!-- Form --> <form id="chat-form" class="chat-form" novalidate data-astro-cid-igwpvru6> <input type="text" name="bot-trap" style="display:none" tabindex="-1" autocomplete="off" data-astro-cid-igwpvru6> <div class="chat-field" data-astro-cid-igwpvru6> <label class="chat-label" for="chat-name" data-astro-cid-igwpvru6>Your Name <span aria-hidden="true" data-astro-cid-igwpvru6>*</span></label> <input class="chat-input" type="text" id="chat-name" name="name" placeholder="John Smith" autocomplete="name" required data-astro-cid-igwpvru6> </div> <div class="chat-field" data-astro-cid-igwpvru6> <label class="chat-label" for="chat-phone" data-astro-cid-igwpvru6>Phone Number <span aria-hidden="true" data-astro-cid-igwpvru6>*</span></label> <input class="chat-input" type="tel" id="chat-phone" name="phone" placeholder="(386) 555-0000" autocomplete="tel" required data-astro-cid-igwpvru6> </div> <div class="chat-field" data-astro-cid-igwpvru6> <label class="chat-label" for="chat-message" data-astro-cid-igwpvru6>Message</label> <textarea class="chat-input chat-textarea" id="chat-message" name="message" placeholder="What can I help you with?" rows="3" data-astro-cid-igwpvru6></textarea> </div> <button type="submit" class="chat-send-btn" data-astro-cid-igwpvru6> <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-igwpvru6>
259 <line x1="22" y1="2" x2="11" y2="13" data-astro-cid-igwpvru6></line> <polygon points="22 2 15 22 11 13 2 9 22 2" data-astro-cid-igwpvru6></polygon> </svg>
260Send Message
261</button> </form> <!-- Success state --> <div id="chat-success" class="chat-success" hidden data-astro-cid-igwpvru6> <div class="chat-success-icon" aria-hidden="true" data-astro-cid-igwpvru6> <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-igwpvru6> <polyline points="20 6 9 17 4 12" data-astro-cid-igwpvru6></polyline> </svg> </div> <p class="chat-success-title" data-astro-cid-igwpvru6>Message sent!</p> <p class="chat-success-body" data-astro-cid-igwpvru6>You'll hear back shortly. For urgent matters, call directly.</p> </div> </div> </div> </div>  
261<script>(function(){const chatWidgetSubmitUrl = "https://api.stonesystems.io/customers/websites/chat-widget";
262const googlePlaceId = "ChIJAQBceNoocIgRLIaFDilcnmQ";
263
264  const toggle  = document.getElementById('chat-toggle');
265  const panel   = document.getElementById('chat-panel');
266  const close   = document.getElementById('chat-close');
267  const form    = /** @type {HTMLFormElement | null} */ (document.getElementById('chat-form'));
268  const success = document.getElementById('chat-success');
269
270  function openPanel() {
271    panel?.setAttribute('aria-hidden', 'false');
272    toggle?.setAttribute('aria-expanded', 'true');
273    // Move focus into panel for a11y
274    const firstInput = /** @type {HTMLElement | null} */ (panel?.querySelector('input, textarea, button:not(#chat-close)'));
275    firstInput?.focus();
276  }
277
278  function closePanel() {
279    panel?.setAttribute('aria-hidden', 'true');
280    toggle?.setAttribute('aria-expanded', 'false');
281    toggle?.focus();
282  }
283
284  toggle?.addEventListener('click', () => {
285    const isOpen = toggle.getAttribute('aria-expanded') === 'true';
286    isOpen ? closePanel() : openPanel();
287  });
288
289  close?.addEventListener('click', closePanel);
290
291  // Close on Escape
292  panel?.addEventListener('keydown', (e) => {
293    if (e.key === 'Escape') closePanel();
294  });
295
296  // Form submit — POST to API, then show success state
297  form?.addEventListener('submit', async (e) => {
298    e.preventDefault();
299    const data = new FormData(form);
300
301    if (String(data.get('bot-trap') ?? '').trim()) return;
302
303    const name    = String(data.get('name') ?? '').trim();
304    const phone   = String(data.get('phone') ?? '').trim();
305    const message = String(data.get('message') ?? '').trim();
306
307    // Basic validation
308    let valid = true;
309    const nameInput  = form.querySelector('#chat-name');
310    const phoneInput = form.querySelector('#chat-phone');
311
312    if (!name && nameInput)  { nameInput.classList.add('is-invalid');  nameInput.focus(); valid = false; }
313    else nameInput?.classList.remove('is-invalid');
314
315    if (!phone && phoneInput) {
316      phoneInput.classList.add('is-invalid');
317      if (valid) phoneInput.focus();
318      valid = false;
319    } else phoneInput?.classList.remove('is-invalid');
320
321    if (!valid) return;
322
323    // Hide form, show success
324    form.hidden = true;
325    if (success) success.hidden = false;
326
327    try {
328      await fetch(chatWidgetSubmitUrl, {
329        method: 'POST',
330        headers: { 'Content-Type': 'application/json' },
331        body: JSON.stringify({
332          name,
333          phone,
334          message,
335          googlePlaceId,
336        }),
337      });
338    } catch {
339      // Success UI already shown; submission is best-effort
340    }
341  });
342
343  // Clear invalid class on input
344  form?.querySelectorAll('.chat-input').forEach((input) => {
345    input.addEventListener('input', () => input.classList.remove('is-invalid'));
346  });
347})();</script>
347 <dialog id="quote-modal" class="
348    fixed inset-0 w-[100dvw] h-[100dvh] max-w-none max-h-none m-0 p-0 border-0
349    bg-transparent overflow-hidden
350    items-center justify-center
351    pointer-events-none opacity-0
352    transition-opacity duration-200 [transition-timing-function:var(--ease-out-expo)]
353    [&.is-open]:opacity-100 [&.is-open]:pointer-events-auto
354  " aria-label="Get a Free Estimate" data-astro-cid-i7uwet5i> <!-- Panel --> <div class="
355    relative
356    w-[min(480px,calc(100dvw-2rem))]
357    max-h-[min(820px,calc(100dvh-2rem))]
358    shrink-0 overflow-y-auto overscroll-contain
359    rounded-xl
360    shadow-xl bg-transparent
361    translate-y-2.5 scale-[0.98]
362    transition-transform duration-[260ms] [transition-timing-function:var(--ease-out-expo)]
363    [.is-open_&]:translate-y-0 [.is-open_&]:scale-100
364  " data-astro-cid-i7uwet5i> <button type="button" class="quote-modal__close absolute top-3 right-3 z-10 flex items-center justify-center w-[2.25rem] h-[2.25rem] rounded-full bg-surface-raised border border-border text-text-secondary transition-colors duration-150 hover:bg-accent-light hover:text-accent" data-close-quote-modal aria-label="Close" data-astro-cid-i7uwet5i> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-i7uwet5i> <line x1="18" y1="6" x2="6" y2="18" data-astro-cid-i7uwet5i></line> <line x1="6" y1="6" x2="18" y2="18" data-astro-cid-i7uwet5i></line> </svg> </button> <div class="lead-form rounded-xl p-[clamp(1.5rem,4vw,2.25rem)] bg-surface-raised border border-border shadow-sm" data-custom-lead-form data-submit-url="https://api.stonesystems.io/public-forms/submit" data-place-id="ChIJAQBceNoocIgRLIaFDilcnmQ" data-astro-cid-5cazves2> <div class="mb-6 flex flex-col items-center text-center" data-lead-form-heading data-astro-cid-5cazves2> <img src="/images/logo.png" alt="" width="56" height="56" class="max-h-14 w-auto object-contain mb-3" loading="lazy" decoding="async" data-astro-cid-5cazves2> <h3 class="font-heading text-[clamp(1.25rem,3vw,1.5rem)] font-bold leading-[1.2] text-text" data-astro-cid-5cazves2> Get a Free Estimate </h3>  </div> <form class="flex flex-col gap-4" data-lead-form data-astro-cid-5cazves2> <input type="text" name="bot-trap" style="display:none" tabindex="-1" autocomplete="off" data-astro-cid-5cazves2> <div class="flex flex-col" data-astro-cid-5cazves2> <label class="form-label" for="modal-lead-name" data-astro-cid-5cazves2> Full Name <span class="ml-0.5 text-accent" aria-hidden="true" data-astro-cid-5cazves2> * </span> </label> <input class="form-input" type="text" id="modal-lead-name" name="name" autocomplete="name" required placeholder="Jane Smith" data-astro-cid-5cazves2> </div><div class="flex flex-col" data-astro-cid-5cazves2> <label class="form-label" for="modal-lead-phone" data-astro-cid-5cazves2> Phone Number <span class="ml-0.5 text-accent" aria-hidden="true" data-astro-cid-5cazves2> * </span> </label> <input class="form-input" type="tel" id="modal-lead-phone" name="phone" inputmode="tel" autocomplete="tel" required data-phone-input placeholder="(555) 123-4567" data-astro-cid-5cazves2> </div><div class="flex flex-col" data-astro-cid-5cazves2> <label class="form-label" for="modal-lead-message" data-astro-cid-5cazves2> Tell Us About Your Project  </label> <textarea class="form-input resize-y min-h-[100px]" id="modal-lead-message" name="message" rows="4" placeholder="Describe your project…" data-astro-cid-5cazves2></textarea> </div> <div class="pt-4 mt-1 border-t flex flex-col gap-2 border-border" data-astro-cid-5cazves2> <label class="grid grid-cols-[1.125rem_1fr] gap-3 items-start cursor-pointer select-none" data-astro-cid-5cazves2> <span class="consent-box relative inline-flex items-center justify-center mt-0.5" data-astro-cid-5cazves2> <input type="checkbox" name="consent" value="yes" required data-consent-error="Please agree to continue." class="consent-checkbox appearance-none w-[1.125rem] h-[1.125rem] rounded-[4px] border border-border-strong cursor-pointer" data-astro-cid-5cazves2> <svg class="consent-check pointer-events-none absolute inset-0 m-auto opacity-0" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="var(--color-accent-fg)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-5cazves2> <polyline points="20 6 9 17 4 12" data-astro-cid-5cazves2></polyline> </svg> </span> <span class="text-xs leading-snug text-text-muted" data-astro-cid-5cazves2> I agree to the <a href="/terms" target="_blank" rel="noopener noreferrer" class="underline" data-astro-cid-5cazves2> Terms &amp; Conditions </a> provided by the company. By providing my phone number, I agree to re
364ceive text messages from the business. </span> </label>  </div> <button type="submit" class="btn-primary w-full justify-center text-base py-[0.9375rem] px-[1.875rem]" style="white-space: normal;" data-submit-label="Sending..." data-astro-cid-5cazves2> Get a Free Estimate </button> </form> <div class="flex flex-col items-center gap-2 py-6 text-center lead-form__success text-text" data-lead-form-success role="status" aria-live="polite" hidden data-astro-cid-5cazves2> <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-accent" aria-hidden="true" data-astro-cid-5cazves2> <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14" data-astro-cid-5cazves2></path> <polyline points="22 4 12 14.01 9 11.01" data-astro-cid-5cazves2></polyline> </svg> <p class="font-medium" data-astro-cid-5cazves2>Request received.</p> <p class="text-sm text-text-muted" data-astro-cid-5cazves2>We&#39;ll be in touch shortly.</p> </div> </div>  
364<script type="module">const w=/(?:ext(?:ension)?\.?|x|#)\s*(\d*)\s*$/i,E=new WeakSet;function g(e){const{national:t,extension:n}=p(e),r=n||null;return!t&&!n?{ok:!1,error:"empty",digits:"",extension:null}:t.length<10?{ok:!1,error:"short",digits:t,extension:r}:t.length>10||n.length>6?{ok:!1,error:"long",digits:t.slice(0,10),extension:r}:_(t)?{ok:!0,digits:t,extension:r}:{ok:!1,error:"invalid",digits:t,extension:r}}function V(e,t){const n=L(e);return t?n?`${n} ext. ${t}`:`ext. ${t}`:n}function $(e){const{national:t,extension:n}=p(e);return V(t,n||null)}function I(e){const t=g(e);return t.ok?`+1${t.digits}`:null}function N(e){switch(e){case"empty":return"";case"short":return"Enter a 10-digit US or Canada number, including the area code.";case"long":return"That number has too many digits.";case"invalid":return"Check the number. US and Canada numbers can't start with 0 or 1."}}function C(e){const t=e.value.trim();if(!t)return e.setCustomValidity(""),!e.required;const n=g(t);return n.ok?(e.setCustomValidity(""),!0):(e.setCustomValidity(N(n.error)),!1)}function D(e){E.has(e)||(E.add(e),e.addEventListener("input",()=>{const t=e.selectionStart??e.value.length,n=A(e.value.slice(0,t)),r=$(e.value);if(r!==e.value){e.value=r;const s=M(r,n);e.setSelectionRange(s,s)}const o=g(e.value);(!e.value.trim()||o.ok)&&e.setCustomValidity("")}),e.addEventListener("blur",()=>{e.value.trim()&&C(e)}))}function p(e){const t=e.trim();if(!t)return{national:"",extension:""};const n=t.match(w);let r=t,o="";n&&n.index!==void 0&&n.index>0&&(o=n[1]??"",r=t.slice(0,n.index));let s=r.replace(/\D/g,"");s=q(s,t);let i=o;return!n&&s.length>10&&(i=s.slice(10),s=s.slice(0,10)),{national:s,extension:i}}function q(e,t){let n=e;return n.startsWith("001")&&n.length>3&&(n=n.slice(3)),(t.includes("+")&&n.startsWith("1")&&n.length>1||n.length>=11&&n.startsWith("1"))&&(n=n.slice(1)),n}function _(e){if(e.length!==10)return!1;const t=e[0],n=e[3];return t>="2"&&t<="9"&&n>="2"&&n<="9"}function L(e){const t=e.slice(0,3),n=e.slice(3,6),r=e.slice(6,10);if(e.length===0)return"";if(e.length<3)return e;if(e.length===3)return`(${t}`;if(e.length<=6)return`(${t}) ${n}`;const o=e.length>10?e.slice(10):"";return`(${t}) ${n}-${r}${o}`}function A(e){let t=0;for(const n of e)n>="0"&&n<="9"&&t++;return t}function M(e,t){if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++){const o=e[r];if(o>="0"&&o<="9"&&(n++,n===t))return r+1}return e.length}document.querySelectorAll("[data-custom-lead-form]").forEach(e=>{const t=e.querySelector("[data-lead-form]"),n=e.querySelector("[data-lead-form-heading]"),r=e.querySelector("[data-lead-form-success]"),o=e.dataset.submitUrl,s=e.dataset.placeId,i=t?.querySelector('input[name="consent"]'),a=t?.querySelector('button[type="submit"]'),y=i?.dataset.consentError;if(!t||!o||!s)return;const u=t.querySelectorAll("[data-phone-input]");u.forEach(D);const f=()=>{i&&(i.checked?i.setCustomValidity(""):y&&i.setCustomValidity(y))};f(),i?.addEventListener("change",f);const b=a?.textContent??"",v=4e4;let d=0;const T=()=>{window.clearTimeout(d),t.reset(),u.forEach(h=>h.setCustomValidity("")),f(),a&&(a.disabled=!1,b&&(a.textContent=b)),t.hidden=!1,n&&(n.hidden=!1),r&&(r.hidden=!0)};t.addEventListener("submit",async h=>{if(h.preventDefault(),f(),u.forEach(C),!t.checkValidity()){t.reportValidity();return}const x=new FormData(t),k=String(x.get("bot-trap")??""),m={};x.forEach((l,c)=>{c!=="bot-trap"&&(m[c]=String(l))}),u.forEach(l=>{const c=I(l.value);c&&l.name&&(m[l.name]=c)});const S=a?.dataset.submitLabel;a&&(a.disabled=!0,S&&(a.textContent=S));try{await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({placeId:s,answers:m,botTrap:k})})}catch{}t.hidden=!0,n&&(n.hidden=!0),r&&(r.hidden=!1),window.clearTimeout(d),d=window.setTimeout(T,v)})});</script>
364 </div> </dialog>  
364<script type="module">const e=document.getElementById("quote-modal");function n(){e&&(e.showModal(),requestAnimationFrame(()=>{requestAnimationFrame(()=>e.classList.add("is-open"))}),document.body.style.overflow="hidden")}function s(){e&&(e.classList.remove("is-open"),e.addEventListener("transitionend",()=>{e.close(),document.body.style.overflow=""},{once:!0}))}document.addEventListener("click",t=>{if(t.target?.closest("[data-open-quote-modal]")){t.preventDefault();const o=document.getElementById("nav-toggle");document.getElementById("mobile-nav")?.classList.contains("is-open")&&o?(o.click(),setTimeout(n,180)):n();return}t.target?.closest("[data-close-quote-modal]")&&(t.preventDefault(),s())});e?.addEventListener("click",t=>{t.target===e&&s()});e?.addEventListener("close",()=>{e.classList.remove("is-open"),document.body.style.overflow=""});</script>
364 
364<script>
365      window.IR_APP_ORIGIN="https://book.instantroofer.com";
366      (function() {
367        let loaded = false;
368        function loadScript() {
369          if (loaded) return;
370          loaded = true;
371          const s = document.createElement("script");
372          s.src = "https://book.instantroofer.com/js/instant-roofer-google-ads-integration.min.js";
373          document.body.appendChild(s);
374        }
375        const timeoutId = setTimeout(loadScript, 7000);
376        window.addEventListener("scroll", function onScroll() {
377          loadScript();
378          clearTimeout(timeoutId);
379          window.removeEventListener("scroll", onScroll);
380        });
381      })();
382    </script>
382  </body> 
382<script type="module">const p=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(t.target.classList.add("is-visible"),p.unobserve(t.target))})},{threshold:.12,rootMargin:"0px 0px -40px 0px"});document.querySelectorAll(".reveal, .reveal-scale").forEach(e=>p.observe(e));const l=document.querySelector('[data-site-header][data-transparent-on-hero="true"]');if(l){const e=()=>{l.classList.toggle("is-scrolled",window.scrollY>56)};e(),window.addEventListener("scroll",e,{passive:!0})}document.querySelectorAll(".faq-trigger").forEach(e=>{e.addEventListener("click",()=>{const t=e.getAttribute("aria-expanded")==="true",n=e.getAttribute("aria-controls"),a=n?document.getElementById(n):null;e.setAttribute("aria-expanded",String(!t)),a&&a.classList.toggle("is-open",!t)})});const u=document.querySelectorAll(".cat-toggle");u.forEach(e=>{e.addEventListener("click",()=>{const t=e.getAttribute("aria-controls"),n=t?document.getElementById(t):null,a=e.getAttribute("aria-expanded")==="true";u.forEach(i=>{const d=i.getAttribute("aria-controls"),c=d?document.getElementById(d):null;i.setAttribute("aria-expanded","false"),c&&(c.style.gridTemplateRows="0fr")}),!a&&n&&(e.setAttribute("aria-expanded","true"),n.style.gridTemplateRows="1fr")})});const s=document.getElementById("nav-toggle"),m=document.getElementById("mobile-nav"),o=document.getElementById("mobile-overlay");function v(){m?.classList.add("is-open"),o?.classList.add("is-open"),s?.setAttribute("aria-expanded","true"),document.body.style.overflow="hidden"}function r(){m?.classList.remove("is-open"),o?.classList.remove("is-open"),s?.setAttribute("aria-expanded","false"),document.body.style.overflow=""}s?.addEventListener("click",()=>{s.getAttribute("aria-expanded")==="true"?r():v()});o?.addEventListener("click",r);document.querySelectorAll("#mobile-nav a").forEach(e=>{e.addEventListener("click",r)});</script>
382</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.