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'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'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'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'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'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'd treat our own, and we don'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'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'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'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'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'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'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'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">“</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">”</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 & 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. </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">”</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">”</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'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">”</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">”</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&q=place_id:ChIJAQBceNoocIgRLIaFDilcnmQ&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'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'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© 2026 Fraley'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'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 & 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'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.