1<!DOCTYPE html><!-- Last Published: Wed Jul 29 2026 16:18:57 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="webflow.homegnome.com" data-wf-page="69b85409d664f415371e272f" data-wf-site="6946e14d80acd0693951c0ef" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Weekly Pool Cleaning & Maintenance | Instant Booking | Home Gnome</title><meta content="Fully managed pool service starting at $39.90. Includes background-checked pros, chemical balancing, and surface detailing. No contracts. Book in 2 minutes." name="description"/><meta content="Weekly Pool Cleaning & Maintenance | Instant Booking | Home Gnome" property="og:title"/><meta content="Fully managed pool service starting at $39.90. Includes background-checked pros, chemical balancing, and surface detailing. No contracts. Book in 2 minutes." property="og:description"/><meta content="Weekly Pool Cleaning & Maintenance | Instant Booking | Home Gnome" name="twitter:title"/><meta content="Fully managed pool service starting at $39.90. Includes background-checked pros, chemical balancing, and surface detailing. No contracts. Book in 2 minutes." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="mwVnEdiSj9oy7iAEQkuNOdpIAbHHSwzQnyUqXjiR8xw" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/css/staging-homegnome.shared.b4ec3f0fb.css" rel="stylesheet" type="text/css" integrity="sha384-tOw/D73UH8fVNNww03QN8LttN5ya/iu4HAZfNdCnjRU58sakR89AmCTYRsKHwTHp" crossorigin="anonymous"/>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69dcfe4e930534f287678a37_Vector.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69dcfebf1e9b361dbe38ff25_Vector%20(1).png" rel="apple-touch-icon"/><link href="https://homegnome.com/services/pool-cleaning" rel="canonical"/>
1<script type="application/ld+json"> 2{ 3 "@context": "https://schema.org", 4 "@type": "Service", 5 "name": "Pool Cleaning Service", 6 "description": "Professional pool cleaning from a vetted local pro â weekly maintenance, water balancing, and photo reports. From $39.90/visit, no contracts. Book in 2 minutes.", 7 "url": "/services/pool-cleaning", 8 "provider": { 9 "@type": "Organization", 10 "name": "Home Gnome", 11 "logo": { 12 "@type": "ImageObject", 13 "url": "https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69b32b27e10bf19c3b5847a7_wordmark-logo.png" 14 }, 15 "aggregateRating": { 16 "@type": "AggregateRating", 17 "ratingValue": "4.7", 18 "reviewCount": "4500", 19 "bestRating": "5" 20 } 21 }, 22 "serviceType": "Pool Cleaning and Maintenance", 23 "areaServed": { 24 "@type": "Place", 25 "name": "United States" 26 }, 27 "hasOfferCatalog": { 28 "@type": "OfferCatalog", 29 "name": "Pool Cleaning Plans", 30 "itemListElement": [ 31 { 32 "@type": "Offer", 33 "itemOffered": { 34 "@type": "Service", 35 "name": "Weekly Pool Cleaning", 36 "description": "Regular maintenance to keep your pool sparkling all season. Your dedicated pro handles everything â you just swim.", 37 "serviceOutput": [ 38 "Skimming, brushing & vacuuming", 39 "Water chemistry testing & balancing", 40 "Filter & basket cleaning", 41 "After-visit photo report", 42 "Same pro each visit when possible" 43 ] 44 }, 45 "price": "39.90", 46 "priceCurrency": "USD", 47 "priceSpecification": { 48 "@type": "UnitPriceSpecification", 49 "price": "39.90", 50 "priceCurrency": "USD", 51 "unitText": "visit" 52 } 53 }, 54 { 55 "@type": "Offer", 56 "itemOffered": { 57 "@type": "Service", 58 "name": "Weekly Clean + Green to Clean", 59 "description": "Everything in weekly, plus a thorough deep clean to tackle buildup, tile line, and equipment â so your pool stays in peak condition.", 60 "serviceOutput": [ 61 "Everything in Weekly Cleaning", 62 "Tile & waterline scrubbing", 63 "Shock the pool & add algaecide", 64 "Detailed chemistry notes & log", 65 "Before & after photos every visit" 66 ] 67 } 68 } 69 ] 70 }, 71 "termsOfService": "No contracts. Cancel anytime.", 72 "image": "https://d3p3fw3rutb1if.cloudfront.net/photos/1194a9d3-a976-413e-9439-1af78856b0cd" 73} 74</script>
74
74<script src="https://cdn.jsdelivr.net/npm/js-cookie@3/dist/js.cookie.min.js"></script>
74 75 76 <style> 77 a#CybotCookiebotDialogPoweredbyCybot, 78 div#CybotCookiebotDialogPoweredByText { display: none !important; } 79 #CookiebotWidget .CookiebotWidget-body .CookiebotWidget-main-logo { display: none !important; } 80 </style> 81 82
82<script 83 id="Cookiebot" 84 src="https://consent.cookiebot.com/uc.js" 85 data-cbid="29ee8ebc-92f9-4d5a-95e2-cf2a0a0f9ade" 86 data-blockingmode="manual" 87 type="text/javascript"></script>
87 88 89
89<script> 90 window.addEventListener('CookiebotOnAccept', function () { 91 if (window.analytics) { window.analytics.track('cookiebot_accepted', { 92 consent: Cookiebot.consent }); } 93 }); 94 window.addEventListener('CookiebotOnDecline', function () { 95 if (window.analytics) { window.analytics.track('cookiebot_rejected', { 96 consent: Cookiebot.consent }); } 97 }); 98 window.addEventListener('CookiebotOnDialogDisplay', function () { 99 if (window.analytics) { 100 window.analytics.track('cookiebot_dialog_displayed'); } 101 }); 102 </script>
102<script>window.page={template:"pages.homegnome.service",page_type:"service",service_category:"Pool Cleaning",version:"wf-1.0.0"};</script>
vendor: 1 bytes, line 102
102
103<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAaR9QgDcVOEppXojODKKpaGqlHWP-Yofk&libraries=places&loading=async"></script>
103 104 <link rel="preconnect" href="https://fonts.googleapis.com"> 105 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 106 <link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap" 107 rel="stylesheet"> 108 <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css"> 109
109<script defer src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
109 110
110<script defer src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.min.js"></script>
110 111 <style> 112 :root { --blue: #1879BF; --blue-dark: #134061; --blue-75: #53A3DC; --blue-55: #81BCE5; --blue-25: #C6E0F3; --blue-10: #EEF6FC; --red: #F8475E; 113 --red-light: #FDD1D7; --black: #000000; --gray-dark: #4C4C4C; --gray-mid: #B8B8B8; --gray-light: #D8D8D8; --gray-faint: #F5F5F5; --white: #FFFFFF; 114 --success: #267A57; --text: #000000; --text-mid: #4C4C4C; --text-light: #888888; --border: #E4E4E4; --r-sm: 10px; --r-md: 16px; --r-lg: 24px; --r-pill: 115 100px; --shadow-sm: 0 1px 4px rgba(0,0,0,0.06), 0 2px 12px rgba(0,0,0,0.04); --shadow-md: 0 4px 16px rgba(0,0,0,0.08), 0 1px 4px rgba(0,0,0,0.04); 116 --shadow-lg: 0 12px 48px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.06); --sp-section: 56px; --sp-inner: 20px; } 117 *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } 118 html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; } 119 body { font-family: 'DM Sans', sans-serif; font-size: 16px; background: var(--white); color: var(--text); -webkit-font-smoothing: antialiased; overflow-x: 120 hidden; padding-bottom: 72px; } 121 img { display: block; max-width: 100%; height: auto; } 122 a { color: inherit; text-decoration: none; } 123 button { font-family: inherit; cursor: pointer; border: none; } 124 #sl-name-wrap, #sl-phone-wrap, #sl-clear, #sl-resume, #sl-spinner, #sl-resume-spinner { display: none; } 125 #sl-submit-btn:hover { background: var(--blue-dark) !important; } 126 #sl-wrapper { font-family: 'DM Sans', sans-serif; } 127 #sl-address-wrap input, #sl-name-wrap input, #sl-phone-wrap input, #sl-submit-btn { font-family: 'DM Sans', sans-serif; } 128 .tippy-box[data-theme~='error'] { padding: 2px 6px; background-color: rgb(239,206,202); color: #692118; } 129 .tippy-box[data-theme~='error'][data-placement^='bottom'] > .tippy-arrow::before { border-bottom-color: rgb(239,206,202); } 130 .tippy-box[data-theme~='error'][data-placement^='top'] > .tippy-arrow::before { border-top-color: rgb(239,206,202); } 131 @keyframes sl-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } 132 .container { width: 100%; max-width: 1120px; margin: 0 auto; padding: 0 var(--sp-inner); display: block !important; height: auto !important; } 133 .nav .container { display: flex !important; align-items: center; justify-content: space-between; gap: 12px; } 134 .eyebrow { font-size: 11px; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase; color: var(--blue); margin-bottom: 10px; display: block; } 135 .section-title { font-family: 'Fraunces', serif; font-size: clamp(26px, 7vw, 44px); font-weight: 700; line-height: 1.1; letter-spacing: -0.8px; color: 136 var(--blue-dark); } 137 .section-body { font-size: 16px; line-height: 1.7; color: var(--text-mid); } 138 .btn-primary { display: inline-flex; align-items: center; gap: 8px; background: var(--blue); color: var(--white); font-family: 'DM Sans', sans-serif; 139 font-weight: 700; font-size: 16px; padding: 15px 28px; border-radius: var(--r-pill); border: none; cursor: pointer; transition: background 0.18s; 140 white-space: nowrap; min-height: 48px; } 141 .btn-primary:active { background: var(--blue-dark); } 142 @media (hover: hover) { .btn-primary:hover { background: var(--blue-dark); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(19,64,97,0.25); } } 143 .btn-outline { display: inline-flex; align-items: center; gap: 8px; background: transparent; color: var(--blue); font-family: 'DM Sans', sans-serif; 144 font-weight: 700; font-size: 16px; padding: 13px 24px; border-radius: var(--r-pill); border: 2px solid var(--blue-25); cursor: pointer; transition: 145 border-color 0.18s, background 0.18s; white-space: nowrap; min-height: 48px; } 146 @media (hover: hover) { .btn-outline:hover { border-color: var(--blue); background: var(--blue-10); } } 147 .nav { position: fixed; top: 0; left: 0; right: 0; z-index: 200; height: 60px; background: rgba(255,255,255,0.96); backdrop-filter: blur(16px); 148 -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.06); display: flex; align-items: center; } 149 .nav-logo { display: flex; align-items: center; flex-shrink: 0; } 150 .nav-logo img { height: 28px; width: auto; } 151 .nav-logo-fallback { font-family: 'Fraunces', serif; font-size: 17px; font-weight: 500; color: var(--blue-dark); } 152 .nav-links { display: none; align-items: center; gap: 4px; list-style: none; } 153 .nav-links a { font-size: 14px; font-weight: 500; color: var(--text-mid); padding: 8px 14px; border-radius: var(--r-pill); transition: background 0.15s, 154 color 0.15s; } 155 .nav-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } 156 .nav-phone { display: none; font-size: 14px; font-weight: 600; color: var(--blue-dark); align-items: center; gap: 6px; } 157 .nav-signin { font-size: 14px; font-weight: 500; color: var(--text-mid); padding: 8px 14px; border-radius: var(--r-pill); transition: background 0.15s; 158 display: block; } 159 @media (max-width: 699px) { .nav-signin { display: none; } } 160 .nav-book { background: var(--blue); color: white; font-family: 'DM Sans', sans-serif; font-weight: 700; font-size: 14px; padding: 10px 18px; 161 border-radius: var(--r-pill); transition: background 0.18s; min-height: 40px; display: flex; align-items: center; } 162 .trust-bar { background: var(--blue-dark); border-top: 1px solid rgba(255,255,255,0.08); padding: 0; } 163 .trust-bar-inner { max-width: 1120px; margin: 0 auto; padding: 0 var(--sp-inner); display: flex; align-items: stretch; min-height: 72px; gap: 0; } 164 .trust-rating { display: flex; align-items: center; gap: 12px; padding: 18px 28px 18px 0; border-right: 1px solid rgba(255,255,255,0.1); flex-shrink: 0; } 165 .trust-rating-stars { display: flex; gap: 3px; } 166 .trust-rating-text { display: flex; flex-direction: column; gap: 1px; } 167 .trust-rating-score { font-family: 'Fraunces', serif; font-size: 22px; font-weight: 700; color: white; line-height: 1; } 168 .trust-rating-label { font-size: 11px; font-weight: 600; color: rgba(255,255,255,0.45); text-transform: uppercase; letter-spacing: 0.6px; } 169 .trust-stats { flex: 1; display: flex; align-items: center; justify-content: space-around; padding: 0 0 0 28px; gap: 8px; } 170 .trust-stat { display: flex; flex-direction: column; align-items: center; gap: 2px; text-align: center; } 171 .trust-stat-num { font-family: 'Fraunces', serif; font-size: 20px; font-weight: 700; color: white; line-height: 1; } 172 .trust-stat-label { font-size: 11px; font-weight: 500; color: rgba(255,255,255,0.45); white-space: nowrap; } 173 .trust-divider { width: 1px; height: 32px; background: rgba(255,255,255,0.1); flex-shrink: 0; align-self: center; } 174 @media (max-width: 767px) { .trust-bar-inner { flex-direction: column; min-height: auto; padding: 20px var(--sp-inner); gap: 16px; } .trust-rating { 175 flex-shrink: 1;
175 border-right: none; border-bottom: 1px solid rgba(255,255,255,0.1); padding: 0 0 16px 0; justify-content: center; } .trust-stats { 176 padding: 0; justify-content: space-between; flex-wrap: wrap; gap: 12px; } .trust-stat { flex: 1; min-width: 0; } .trust-stat-num { font-size: 18px; } 177 .trust-stat-label { white-space: normal; font-size: 10px; } .trust-divider { display: none; } } 178 @media (min-width: 700px) and (max-width: 899px) { .trust-bar-inner { min-height: 64px; } .trust-rating { padding: 14px 20px 14px 0; } .trust-rating-score 179 { font-size: 20px; } .trust-stat-num { font-size: 18px; } .trust-stats { padding-left: 20px; } } 180 .services-section { padding: var(--sp-section) 0; background: var(--white); } 181 .services-intro { margin-bottom: 36px; } 182 .services-intro .section-body { margin-top: 10px; } 183 .services-grid { display: grid; gap: 20px; grid-template-columns: 1fr; } 184 .service-card { border-radius: var(--r-lg); border: 1.5px solid var(--border); overflow: hidden; background: white; transition: box-shadow 0.2s, 185 border-color 0.2s; } 186 @media (hover: hover) { .service-card:hover { box-shadow: var(--shadow-lg); border-color: var(--blue-55); } } 187 .service-card-img-placeholder { width: 100%; height: 180px; background: linear-gradient(135deg, var(--blue-10) 0%, var(--blue-25) 100%); display: flex; 188 align-items: center; justify-content: center; color: var(--blue-75); } 189 .service-card-body { padding: 22px; } 190 .service-card-tag { display: inline-flex; align-items: center; gap: 6px; background: var(--blue-10); color: var(--blue); font-size: 11px; font-weight: 191 700; letter-spacing: 0.5px; text-transform: uppercase; padding: 4px 12px; border-radius: var(--r-pill); margin-bottom: 12px; } 192 .service-card-tag.featured { background: var(--red-light); color: var(--red); } 193 .service-card-name { font-family: 'Fraunces', serif; font-size: 24px; font-weight: 700; color: var(--blue-dark); margin-bottom: 8px; line-height: 1.15; 194 letter-spacing: -0.5px; } 195 .service-card-desc { font-size: 15px; line-height: 1.65; color: var(--text-mid); margin-bottom: 20px; } 196 .service-includes { list-style: none; display: flex; flex-direction: column; gap: 8px; margin-bottom: 24px; } 197 .service-includes li { display: flex; align-items: flex-start; gap: 10px; font-size: 14px; line-height: 1.5; color: var(--text-mid); } 198 .check-icon { color: var(--success); flex-shrink: 0;
198 margin-top: 1px; } 199 .service-card-footer { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; padding-top: 20px; border-top: 1px 200 solid var(--gray-faint); } 201 .service-price { font-size: 14px; color: var(--text-light); } 202 .service-price strong { font-size: 22px; font-weight: 700; color: var(--blue-dark); } 203 .services-help { margin-top: 20px; text-align: center; font-size: 14px; color: var(--text-light); } 204 .services-help a { color: var(--blue); font-weight: 600; } 205 .why-section { padding: var(--sp-section) 0; background: var(--gray-faint); } 206 .why-intro { margin-bottom: 36px; } 207 .why-quote { font-family: 'Fraunces', serif; font-style: italic; font-size: clamp(18px, 4vw, 26px); line-height: 1.5; color: var(--blue-dark); 208 border-left: 3px solid var(--blue); padding-left: 18px; margin-top: 20px; } 209 .why-cards { display: grid; gap: 14px; grid-template-columns: 1fr; } 210 .why-card { background: white; border-radius: var(--r-lg); padding: 22px; border: 1.5px solid var(--border); transition: box-shadow 0.2s, border-color 211 0.2s; } 212 @media (hover: hover) { .why-card:hover { box-shadow: var(--shadow-md); border-color: var(--blue-25); } } 213 .why-card-icon { width: 44px; height: 44px; border-radius: var(--r-sm); background: var(--blue-10); color: var(--blue); display: flex; align-items: 214 center; justify-content: center; margin-bottom: 16px; } 215 .why-card-num { font-size: 10px; font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--gray-mid); margin-bottom: 6px; } 216 .why-card-title { font-family: 'Fraunces', serif; font-size: 19px; font-weight: 700; color: var(--blue-dark); margin-bottom: 6px; line-height: 1.2; } 217 .why-card-body { font-size: 14px; line-height: 1.65; color: var(--text-mid); } 218 .why-card-body strong { color: var(--text); font-weight: 600; } 219 .how-section { padding: var(--sp-section) 0; background: var(--white); } 220 .how-steps { display: flex; flex-direction: column; gap: 0; position: relative; margin-top: 40px; } 221 .how-steps::before { content: ''; position: absolute; left: 22px; top: 36px; bottom: 36px; width: 2px; background: linear-gradient(to bottom, 222 var(--blue-25), var(--blue-55), var(--blue-25)); } 223 .how-step { display: flex; gap: 20px; padding-bottom: 36px; align-items: flex-start; min-width: 0; } 224 .how-step:last-child { padding-bottom: 0; } 225 .how-num { width: 46px; height: 46px; border-radius: 50%; background: var(--blue); color: white; font-family: 'Fraunces', serif; font-weight: 700; 226 font-size: 18px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; position: relative; z-index: 1; box-shadow: 0 0 0 4px white; 227 } 228 .how-content { padding-top: 10px; min-width: 0; overflow-wrap: break-word; } 229 .how-title { font-family: 'Fraunces', serif; font-size: 19px; font-weight: 500; color: var(--blue-dark); margin-bottom: 6px; } 230 .how-desc { font-size: 15px; line-height: 1.65; color: var(--text-mid); } 231 .how-detail { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; font-size: 13px; font-weight: 600; color: var(--blue); background: 232 var(--blue-10); padding: 4px 12px; border-radius: var(--r-pill); } 233 .promise-section { padding: var(--sp-section) 0; background: var(--blue-dark); position: relative; overflow: hidden; } 234 .promise-section::before { content: ''; position: absolute; top: -150px; right: -150px; width: 400px; height: 400px; border-radius: 50%; background: 235 radial-gradient(circle, rgba(24,121,191,0.3) 0%, transparent 70%); pointer-events: none; } 236 .promise-inner { position: relative; z-index: 1; } 237 .promise-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase; color: var(--blue-55); margin-bottom: 10px; 238 display: block; } 239 .promise-title { font-family: 'Fraunces', serif; font-size: clamp(26px, 7vw, 44px); font-weight: 700; line-height: 1.1; letter-spacing: -0.8px; color: 240 white; margin-bottom: 14px; } 241 .promise-body { font-size: 16px; line-height: 1.7; color: rgba(255,255,255,0.7); margin-bottom: 32px; } 242 .promise-cards { display: grid; gap: 12px; grid-template-columns: repeat(2, 1fr); } 243 .promise-card { background: rgba(255,255,255,0.07); border: 1px solid rgba(255,255,255,0.12); border-radius: var(--r-md); padding: 20px; display: flex; 244 flex-direction: column; gap: 12px; } 245 .promise-icon { width: 40px; height: 40px; border-radius: 50%; background: rgba(255,255,255,0.1); display: flex; align-items: center; justify-content: 246 center; color: var(--blue-55); flex-shrink: 0; } 247 .promise-card-title { font-family: 'Fraunces', serif; font-size: 15px; font-weight: 600; color: white; margin-bottom: 4px; } 248 .promise-card-body { font-size: 13px; line-height: 1.6; color: rgba(255,255,255,0.6); } 249 @media (max-width: 499px) { .promise-cards { grid-template-columns: 1fr; } } 250 @media (max-width: 767px) { .promise-card { width: 100% !important; flex: unset !important; overflow: visible !important; } } 251 .pros-section { padding: var(--sp-section) 0; background: var(--white); } 252 .pros-intro { margin-bottom: 36px; } 253 .pros-badge-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; } 254 .pros-badge { display: flex; align-items: center; gap: 8px; background: var(--blue-10); color: var(--blue-dark); border: 1px solid var(--blue-25); 255 border-radius: var(--r-pill); padding: 7px 14px; font-size: 13px; font-weight: 600; } 256 .pro-cards { display: grid; gap: 16px; grid-template-columns: 1fr; } 257 .pro-card { border: 1.5px solid var(--border); border-radius: var(--r-lg); overflow: hidden; background: white; } 258 .pro-card-header { padding: 20px; display: flex; gap: 14px; align-items: center; border-bottom: 1px solid var(--gray-faint); } 259 .pro-avatar { width: 52px; height: 52px; border-radius: 50%; background: var(--blue); color: white; font-family: 'Fraunces', serif; font-weight: 700; 260 font-size: 18px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; overflow: hidden; } 261 .pro-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; } 262 .pro-name { font-weight: 700; font-size: 15px; color: var(--text); margin-bottom: 2px; } 263 .pro-biz { font-size: 13px; color: var(--text-light); margin-bottom: 5px; } 264 .pro-stars { display: flex; gap: 2px; } 265 .pro-card-body { padding: 16px 20px; } 266 .pro-quote { font-family: 'Fraunces', serif; font-style: italic; font-size: 15px; line-height: 1.65; color: var(--text-mid); } 267 .pro-years { display: inline-flex; align-items: center; gap: 6px; margin-top: 10px; font-size: 12px; font-weight: 700; color: var(--success); background: 268 #EDF7F2; padding: 4px 10px; border-radius: var(--r-pill); } 269 .reviews-section { padding: var(--sp-section) 0; background: var(--gray-faint); } 270 .reviews-header { margin-bottom: 36px; } 271 .stats-row { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-top: 28px; } 272 .stat-box { background: white; border-radius: var(--r-md); border: 1px solid var(--border); padding: 18px 14px; text-align: center; } 273 .stat-num { font-family: 'Fraunces', serif; font-size: 28px; font-weight: 700; color: var(--blue); line-height: 1; margin-bottom: 4px; } 274 .stat-label { font-size: 12px; color: var(--text-light); } 275 .reviews-grid { display: flex; flex-direction: column; gap: 14px; margin-top: 32px; } 276 .review-card { background: white; border-radius: var(--r-lg); border: 1.5px solid var(--border); padding: 22px; } 277 .review-card.has-photo { padding: 0; overflow: hidden; } 278 .review-card-photo { width: 100%; aspect-ratio: 16/9; overflow: hidden; } 279 .review-card-photo img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; } 280 .review-card-photo-caption { font-size: 11px; font-weight: 700; letter-spacing: 0.6px; text-transform: uppercase; color: var(--blue-55); background: 281 var(--blue-dark); padding: 6px 14px; display: flex; align-items: center; gap: 6px; } 282 .review-card.has-photo .review-content { padding: 20px 22px 24px; } 283 .review-stars { display: flex; gap: 3px; margin-bottom: 12px; } 284 .review-service-tag { display: inline-flex; align-items: center; gap: 5px; background: var(--blue-10); color: var(--blue); font-size: 11px; font-weight: 285 700; text-transform: uppercase; letter-spacing: 0.4px; padding: 3px 10px; border-radius: var(--r-pill); margin-bottom: 10px; } 286 .review-text { font-family: 'Fraunces', serif; font-style: italic; font-size: 16px; line-height: 1.65; color: var(--blue-dark); margin-bottom: 16px; } 287 .reviewer { display: flex; align-items: center; gap: 10px; } 288 .reviewer-avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--blue); color: white; font-weight: 700; font-size: 13px; display: flex; 289 align-items: center; justify-content: center; flex-shrink: 0; overflow: hidden; } 290 .reviewer-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; } 291 .reviewer-name { font-weight: 700; font-size: 14px; color: var(--text); margin-bottom: 1px; } 292 .reviewer-loc { font-size: 12px; color: var(--text-light); } 293 .zip-section { padding: var(--sp-section) 0; background: var(--white); } 294 .zip-card { background: linear-gradient(135deg, var(--blue-10) 0%, #E0EFF8 100%); border: 1.5px solid var(--blue-25); border-radius: 24px; padding: 36px 295 24px; text-align: center; } 296 .zip-title { font-family: 'Fraunces', serif; font-size: clamp(24px, 7vw, 40px); font-weight: 700; color: var(--blue-dark); margin-bottom: 10px; 297 letter-spacing: -0.8px; } 298 .zip-sub { font-size: 15px; color: var(--text-mid); margin-bottom: 28px; } 299 .zip-form { display: flex; flex-direction: column; gap: 10px; max-width: 440px; margin: 0 auto 14px; } 300 .zip-input { padding: 15px 20px; border: 2px solid var(--blue-25); border-radius: var(--r-pill); font-family: 'DM Sans', sans-serif; font-size: 16px; 301 color: var(--text); background: white; outline: none; text-align: center; transition: border-color 0.15s; min-height: 48px; } 302 .zip-input:focus { border-color: var(--blue); } 303 .zip-input::placeholder { color: var(--gray-mid); } 304 .zip-btn { background: var(--blue); color: white; font-family: 'DM Sans', sans-serif; font-weight: 700; font-size: 16px; padding: 15px 28px; 305 border-radius: var(--r-pill); border: none; cursor: pointer; transition: background 0.18s; white-space: nowrap; min-height: 48px; } 306 .zip-btn:active { background: var(--blue-dark); } 307 .zip-result { min-height: 28px; font-size: 15px; font-weight: 600; display: flex; align-items: center; justify-content: center; gap: 8px; } 308 .zip-result.success { color: var(--success); } 309 .zip-result.unavailable { color: var(--text-light); } 310 .zip-markets { margin-top: 24px; font-size: 13px; color: var(--text-light); } 311 .zip-markets strong { color: var(--text-mid); } 312 .all-services-section { padding: var(--sp-section) 0; background: var(--gray-faint); } 313 .all-services-intro { margin-bottom: 28px; } 314 .instant-badge { display: inline-flex; align-items: center; gap: 6px; background: var(--blue); color: white; font-size: 11px; font-weight: 700; 315 letter-spacing: 0.4px; text-transform: uppercase; padding: 4px 12px; border-radius: var(--r-pill); margin-bottom: 12px; } 316 .all-grid { display: grid; gap: 10px; grid-template-columns: repeat(2, 1fr); } 317 .all-card { background: white; border-radius: var(--r-md); border: 1.5px solid var(--border); padding: 18px 14px; display: flex; flex-direction: column; 318 gap: 8px; transition: border-color 0.15s; cursor: pointer; min-height: 90px; } 319 @media (hover: hover) { .all-card:hover { border-color: var(--blue-55); box-shadow: var(--shadow-sm); } } 320 .all-card-icon { width: 38px; height: 38px; border-radius: var(--r-sm); background: var(--blue-10); color: var(--blue); display: flex; align-items: 321 center; justify-content: center; } 322 .all-card-name { font-family: 'Fraunces', serif; font-weight: 500; font-size: 14px; color: var(--blue-dark); line-height: 1.2; } 323 .all-card-link { font-size: 12px; color: var(--blue); font-weight: 600; display: flex; align-items: center; gap: 3px; } 324 .more-services-box { background: white; border-radius: var(--r-md); border: 1.5px solid var(--border); padding: 20px; margin-top: 12px; } 325 .more-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; color: var(--gray-mid); margin-bottom: 12px; display: 326 flex; align-items: center; gap: 10px; } 327 .more-label::after { content: ''; flex: 1; height: 1px; background: var(--border); } 328 .more-tags { display: flex; flex-wrap: wrap; gap: 8px; } 329 .more-tag { background: var(--gray-faint); color: var(--text-mid); font-size: 13px; font-weight: 500; padding: 8px 14px; border-radius: var(--r-pill); 330 border: 1px solid var(--border); cursor: pointer; transition: all 0.15s; min-height: 36px; } 331 .for-pros-section { padding: var(--sp-section) 0; background: var(--blue-25); } 332 .for-pros-inner { display: flex; flex-direction: column; gap: 24px; } 333 .for-pros-text .section-title { color: var(--blue-dark); } 334 .for-pros-text .section-body { margin-top: 10px; } 335 .for-pros-perks { display: flex; flex-direction: column; gap: 10px; margin: 18px 0; } 336 .for-pros-perk { display: flex; align-items: center; gap: 12px; font-size: 15px; font-weight: 500; color: var(--blue-dark); } 337 .perk-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--blue); flex-shrink: 0; } 338 .app-section { padding: var(--sp-section) 0; background: var(--blue-dark); position: relative; overflow: hidden; } 339 .app-section::after { content: ''; position: absolute; bottom: -80px; right: -80px; width: 300px; height: 300px; border-radius: 50%; background: 340 radial-gradient(circle, rgba(24,121,191,0.3) 0%, transparent 70%); pointer-events: none; } 341 .app-inner { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: center; position: relative; z-index: 1; } 342 .app-eyebrow { color: var(--blue-55); } 343 .app-title { font-family: 'Fraunces', serif; font-size: clamp(26px, 7vw, 42px); font-weight: 700; color: white; line-height: 1.1; letter-spacing: -0.8px; 344 margin-bottom: 12px; } 345 .app-body { font-size: 15px; line-height: 1.7; color: rgba(255,255,255,0.65); margin-bottom: 28px; } 346 .app-features { display: flex; flex-direction: column; gap: 8px; margin-bottom: 28px; } 347 .app-feature { display: flex; align-items: center; gap: 10px; font-size: 14px; color: rgba(255,255,255,0.8); } 348 .app-feature-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--blue-75); flex-shrink: 0; } 349 .app-btns { display: flex; flex-direction: column; gap: 12px; } 350 @media (max-width: 699px) { .app-inner { grid-template-columns: 1fr; gap: 36px; } .app-mockup { order: -1; } } 351 .app-btn { display: flex; align-items: center; gap: 14px; background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); border-radius: 352 var(--r-sm); padding: 14px 20px; transition: background 0.15s; min-height: 56px; } 353 @media (hover: hover) { .app-btn:hover { background: rgba(255,255,255,0.14); } } 354 .app-btn-label { font-size: 11px; color: rgba(255,255,255,0.5); margin-bottom: 2px; display: block; } 355 .app-btn-name { font-size: 16px; font-weight: 700; color: white; display: block; } 356 .app-mockup { display: flex; align-items: center; justify-content: center; } 357 .app-mockup img { max-width: 100%; width: 100%; height: auto; border-radius: 16px; box-shadow: 0 24px 60px rgba(0,0,0,0.4); } 358 footer { background: var(--black); padding: 48px 0 28px; } 359 .footer-container { display: block; width: 100%; max-width: 1120px; margin: 0 auto; padding: 0 var(--sp-inner); } 360 .footer-top { display: grid; grid-template-columns: 200px 1fr; gap: 48px; align-items: start; padding-bottom: 36px; border-bottom: 1px solid 361 rgba(255,255,255,0.07); margin-bottom: 28px; } 362 .footer-brand { display: block; }
363 .footer-brand-logo img { height: 24px; filter: brightness(0) invert(1); margin-bottom: 12px; } 364 .footer-brand-tagline { font-size: 14px; line-height: 1.65; color: rgba(255,255,255,0.4); margin-bottom: 16px; } 365 .footer-phone-link { display: inline-flex; align-items: center; gap: 7px; font-size: 14px; font-weight: 700; color: var(--blue-55); } 366 .footer-nav-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; } 367 .footer-col-title { font-size: 11px; font-weight: 700; letter-spacing: 0.8px; text-transform: uppercase; color: rgba(255,255,255,0.28); margin-bottom: 368 12px; } 369 .footer-links { display: flex; flex-direction: column; } 370 .footer-link { font-size: 13px; color: rgba(255,255,255,0.55); transition: color 0.15s; padding: 5px 0; line-height: 1.4; display: block; } 371 .footer-link:hover { color: white; } 372 .footer-bottom { display: flex; flex-direction: row; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; } 373 .footer-legal { display: flex; flex-wrap: wrap; gap: 14px; } 374 .footer-legal a { font-size: 12px; color: rgba(255,255,255,0.28); transition: color 0.15s; } 375 .footer-legal a:hover { color: rgba(255,255,255,0.6); } 376 .footer-copy { font-size: 12px; color: rgba(255,255,255,0.18); } 377 @media (max-width: 699px) { footer { padding: 36px 0 24px; } .footer-top { grid-template-columns: 1fr; gap: 28px; } .footer-nav-grid { 378 grid-template-columns: repeat(2, 1fr); gap: 20px 16px; } .footer-bottom { flex-direction: column; align-items: flex-start; gap: 8px; } } 379 .sticky-bar { position: fixed; bottom: 0; left: 0; right: 0; background: white; border-top: 1px solid var(--border); padding: 10px 16px; padding-bottom: 380 calc(10px + env(safe-area-inset-bottom)); display: flex; gap: 10px; z-index: 199; box-shadow: 0 -4px 24px rgba(0,0,0,0.08); } 381 .sticky-book { flex: 1; background: var(--blue); color: white; font-family: 'DM Sans', sans-serif; font-weight: 700; font-size: 16px; padding: 14px; 382 border: none; border-radius: var(--r-sm); cursor: pointer; transition: background 0.15s; min-height: 48px; } 383 .sticky-book:active { background: var(--blue-dark); } 384 .sticky-call { display: flex; align-items: center; justify-content: center; gap: 6px; background: var(--gray-faint); color: var(--blue); font-family: 'DM 385 Sans', sans-serif; font-weight: 700; font-size: 15px; padding: 14px 16px; border: 1.5px solid var(--blue-25); border-radius: var(--r-sm); white-space: 386 nowrap; min-height: 48px; } 387 388 /* ââ HERO BASE âââââââââââââââââââââââââââââââââââââââââââââââ */ 389 .hero { background: var(--blue-dark); position: relative; overflow: hidden; padding: calc(64px + 32px) 40px 48px; } 390 .hero::before { content: ''; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px), 391 linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px); background-size: 48px 48px; pointer-events: none; } 392 .hero-bg { display: none; } 393 .hero-card { position: relative; z-index: 1; background: var(--blue-dark); border: 1px solid rgba(255,255,255,0.1); overflow: hidden; display: grid; 394 grid-template-columns: 1fr 1fr; border-radius: 28px; max-width: 1200px; margin: 0 auto; box-shadow: 0 24px 80px rgba(0,0,0,0.35); } 395 .hero-photo-wrap { width: 100%; overflow: hidden; min-height: 520px; } 396 .hero-photo-wrap img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; } 397 .hero-copy { padding: 48px 52px 52px 48px; display: flex; flex-direction: column; justify-content: center; } 398 .hero-badge { display: inline-flex; align-items: center; gap: 6px; background: var(--red); color: white; font-size: 10px; font-weight: 800; 399 text-transform: uppercase; letter-spacing: 0.5px; padding: 5px 12px; border-radius: var(--r-pill); margin-bottom: 18px; width: fit-content; } 400 .hero-headline { font-family: 'Fraunces', serif; font-size: clamp(40px, 4vw, 60px); font-weight: 700; line-height: 1.04; letter-spacing: -1.5px; color: 401 white; margin-bottom: 14px; } 402 .hero-headline em { font-style: italic; color: var(--blue-55); } 403 .hero-sub { font-size: 17px; line-height: 1.65; color: rgba(255,255,255,0.68); margin-bottom: 24px; } 404 .hero-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 28px; } 405 .hero-chip { display: flex; align-items: center; gap: 6px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.16); border-radius: 406 var(--r-pill); padding: 7px 14px; font-size: 13px; font-weight: 500; color: rgba(255,255,255,0.88); } 407 .hero-launcher { max-width: 480px; margin-bottom: 16px; } 408 .hero-reassurance { font-size: 12px; color: rgba(255,255,255,0.4); display: flex; flex-wrap: wrap; gap: 4px 16px; margin-top: 28px; } 409 .hero-reassurance span::before { content: 'â '; color: rgba(255,255,255,0.3); } 410 411 /* ââ MOBILE HERO ââââââââââââââââââââââââââââââââââââââââââââââ */ 412 @media (max-width: 767px) { 413 .hero { display: block; min-height: 0; position: relative; padding: 0 !important; background: var(--blue-dark); overflow: hidden; } 414 .hero-card { display: block; position: relative; border-radius: 0; border: none; box-shadow: none; background: transparent !important; margin-top: 0; 415 min-height: 0; } 416 .hero-photo-wrap { position: absolute; inset: 0; min-height: 0; z-index: 0; aspect-ratio: unset; } 417 .hero-photo-wrap img { width: 100%; height: 100%; object-fit: cover; object-position: center 20%; } 418 .hero-photo-wrap::after { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(10,24,40,0.20) 0%, rgba(10,24,40,0.45) 419 30%, rgba(10,24,40,0.84) 60%, rgba(10,24,40,0.98) 100%); } 420 .hero-copy { position: relative; z-index: 1; background: transparent !important; padding: calc(60px + 48px) var(--sp-inner) 40px; min-height: 0; 421 display: flex; flex-direction: column; justify-content: flex-start; } 422 .hero { background: var(--blue-dark) !important; } 423 .hero-headline { color: white; font-size: clamp(34px, 10vw, 48px); letter-spacing: -1.8px; line-height: 1.05; margin-bottom: 14px; } 424 .hero-headline em { color: var(--blue-55); } 425 .hero-headline .period { color: var(--red); } 426 .hero-sub { display: none; } 427 .hero-chips { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 18px; } 428 .hero-chip { background: rgba(255,255,255,0.12); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid 429 rgba(255,255,255,0.22); border-radius: 10px; padding: 9px 11px; font-size: 12px; font-weight: 500; color: white; justify-content: flex-start; align-items: 430 flex-start; gap: 6px; white-space: normal; line-height: 1.3; } 431 .hero-chip svg { color: rgba(255,255,255,0.7); flex-shrink: 0;
431 margin-top: 1px; } 432 .hero-launcher { max-width: 100%; margin-bottom: 0; } 433 #sl-wrapper > #sl-form > div { background: rgba(255,255,255,0.97) !important; border-color: transparent !important; box-shadow: 0 8px 40px 434 rgba(0,0,0,0.28) !important; } 435 .hero-reassurance { color: rgba(255,255,255,0.45); margin-top: 12px; font-size: 11px; gap: 3px 12px; } 436 .hero-reassurance span::before { color: rgba(255,255,255,0.3); } 437 body { background: var(--blue-dark); } 438 .nav-signin { display: none; } 439 .nav-book { font-size: 13px; padding: 9px 14px; } 440 } 441 442 /* ââ FAQ / ANIM âââââââââââââââââââââââââââââââââââââââââââââââ */ 443 .faq-section { padding: var(--sp-section) 0; background: var(--white); } 444 .faq-head { margin-bottom: 36px; } 445 .faq-head .section-body { margin-top: 10px; } 446 .faq-list { display: flex; flex-direction: column; gap: 10px; } 447 .faq-item { border: 1.5px solid var(--border); border-radius: var(--r-md); overflow: hidden; background: white; } 448 .faq-q { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; background: none; border: none; 449 cursor: pointer; font-family: 'Fraunces', serif; font-size: 17px; font-weight: 500; color: var(--blue-dark); text-align: left; transition: background 450 0.15s; min-height: 56px; } 451 .faq-q:hover, .faq-q.open { background: var(--blue-10); } 452 .faq-q.open { color: var(--blue); } 453 .faq-chevron { flex-shrink: 0; color: var(--gray-mid); transition: transform 0.22s ease; } 454 .faq-q.open .faq-chevron { transform: rotate(180deg); color: var(--blue); } 455 .faq-a { max-height: 0; overflow: hidden; font-size: 15px; line-height: 1.7; color: var(--text-mid); transition: max-height 0.3s ease, padding 0.3s ease; 456 padding: 0 20px; } 457 .faq-a.open { max-height: 600px; padding: 0 20px 20px; } 458 .faq-a a { color: var(--blue); font-weight: 600; } 459 .anim { opacity: 0; transform: translateY(18px); transition: opacity 0.5s ease, transform 0.5s ease; } 460 .anim.visible { opacity: 1; transform: translateY(0); } 461 @media (prefers-reduced-motion: reduce) { .anim { opacity: 1; transform: none; transition: none; } } 462 463 /* ââ BREAKPOINTS ââââââââââââââââââââââââââââââââââââââââââââââ */ 464 @media (min-width: 640px) { :root { --sp-section: 72px; --sp-inner: 28px; } .services-grid--two { grid-template-columns: repeat(2, 1fr); } .zip-form { 465 flex-direction: row; } .app-btns { flex-direction: row; } } 466 @media (min-width: 900px) { :root { --sp-section: 80px; --sp-inner: 32px; } body { padding-bottom: 0; } .nav { height: 64px; } .nav-logo img { height: 467 36px; } .nav-signin { display: block; } .services-grid { grid-template-columns: repeat(2, 1fr); } .service-card-img-placeholder { height: 220px; } 468 .service-card-body { padding: 28px; } .why-cards { grid-template-columns: repeat(2, 1fr); } .pro-cards { grid-template-columns: repeat(2, 1fr); } 469 .reviews-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-top: 40px; } .stats-row { grid-template-columns: repeat(4, 1fr); } 470 .all-grid { grid-template-columns: repeat(3, 1fr); } .for-pros-inner { flex-direction: row; align-items: center; gap: 60px; } .for-pros-text { flex: 1; } 471 .for-pros-cta-wrap { flex-shrink: 0; } .sticky-bar { display: none; } } 472 @media (min-width: 1200px) { .why-cards { grid-template-columns: repeat(4, 1fr); } .pro-cards { grid-template-columns: repeat(3, 1fr); } .reviews-grid { 473 grid-template-columns: repeat(3, 1fr); } .section-body { max-width: 560px; } } 474 475 /* ââ DESKTOP HERO THEME ââ */ 476 .service-accent { color: var(--success); } 477 .service-accent-bg { background: #EDF7F2; border-color: #B7DFD0; } 478 @media (min-width: 768px) { 479 .hero { background: var(--white); } 480 .hero::before { display: none; } 481 .hero-card { background: var(--white); border: none; box-shadow: 0 8px 48px rgba(0,0,0,0.12); } 482 .hero-copy { background: var(--white); } 483 .hero-headline { color: var(--blue-dark); font-size: clamp(36px, 6vw, 64px); letter-spacing: -2.5px; line-height: 1.02; } 484 .hero-headline em { font-style: italic; color: var(--blue); } 485 .hero-headline .period { color: var(--red); } 486 .hero-sub { color: var(--text-mid); } 487 .hero-chip { background: var(--gray-faint); border-color: var(--border); color: var(--text-mid); } 488 .hero-chip svg { color: var(--blue); } 489 .hero-reassurance { color: var(--text-light); } 490 .hero-reassurance span::before { color: var(--success); } 491 } 492 .nav-logo img { height: 22px; }
493 @media (min-width: 900px) { .nav-logo img { height: 26px; } } 494 495 /* ââ BEFORE AFTER ââ */ 496 .ba-grid { display: grid; gap: 20px; grid-template-columns: 1fr; } 497 @media (min-width: 900px) { .ba-grid { grid-template-columns: repeat(3, 1fr); } } 498 .ba-card { background: white; border-radius: var(--r-lg); border: 1.5px solid var(--border); overflow: hidden; } 499 .ba-slider { position: relative; aspect-ratio: 4/3; overflow: hidden; cursor: col-resize; user-select: none; -webkit-user-select: none; touch-action: 500 pan-y; } 501 .ba-before-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; } 502 .ba-after-clip { position: absolute; inset: 0; clip-path: inset(0 50% 0 0); will-change: clip-path; } 503 .ba-after-clip img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; } 504 .ba-divider { position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: 3px; background: white; display: flex; align-items: 505 center; justify-content: center; will-change: left; z-index: 2; pointer-events: none; } 506 .ba-handle-btn { width: 44px; height: 44px; border-radius: 50%; background: white; box-shadow: 0 2px 12px rgba(0,0,0,0.25); display: flex; align-items: 507 center; justify-content: center; color: var(--blue-dark); flex-shrink: 0; } 508 .ba-label { position: absolute; top: 12px; font-size: 11px; font-weight: 800; letter-spacing: 0.8px; text-transform: uppercase; padding: 4px 10px; 509 border-radius: var(--r-pill); pointer-events: none; z-index: 1; } 510 .ba-label-before { left: 12px; background: rgba(0,0,0,0.55); color: white; } 511 .ba-label-after { right: 12px; background: var(--blue); color: white; } 512 .ba-caption { display: flex; align-items: center; gap: 6px; padding: 12px 16px; font-size: 13px; font-weight: 600; color: var(--text-light); } 513 </style> 514 <!-- Start of Async ProveSource Code -->
514<script>!function(o,i){window.provesrc&&window.console&&console.error&&console.error("ProveSource is included twice in this page."),window.provesrc={dq:[],display:function(){this.dq.push(arguments)}},o._provesrcAsyncInit=function(){window.provesrc.init({apiKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50SWQiOiI2OWQ1NDJhZWUwMGQyMmJiOGYyY2YwODgiLCJpYXQiOjE3NzU1ODM5MTh9.Gg3NehLkB3QOU5uJnfKCim2_Y_HJxfYUxz5lSV4D7mw",v:"0.0.4"})};var r=i.createElement("script");r.type="text/javascript",r.async=!0,r["ch"+"ar"+"set"]="UTF-8",r.src="https://cdn.provesrc.com/provesrc.js";var e=i.getElementsByTagName("script")[0];e.parentNode.insertBefore(r,e)}(window,document);</script>
514<!-- End of Async ProveSource Code --></head><body><div class="w-embed"><div style="display:block;width:100%;overflow-x:hidden;"> 515<!-- ââ NAV ââ --> 516<nav class="nav"> 517 <div class="container"> 518 <a href="/" class="nav-logo"> 519 <img 520 src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69b32b27e10bf19c3b5847a7_wordmark-logo.png" 521 alt="Home Gnome" 522 onerror="this.style.display='none';this.nextElementSibling.style.display='block'"> 523 <span class="nav-logo-fallback" style="display:none">Home Gnome</span> 524 </a> 525 <div class="nav-actions"> 526 <a href="tel:8333884988" class="nav-signin"> 527 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-5.99-5.99 19.79 19.79 0 01-3.07-8.68A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.9.33 1.84.57 2.81.7A2 2 0 0122 16.92z"/></svg> 528 (833) 388-4988 529 </a> 530 <a href="javascript:void(0);" onclick="document.getElementById('sl-address').scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){document.getElementById('sl-address').focus();},400)" class="nav-book">Book Now</a> 531 </div> 532 </div> 533</nav> 534 535<!-- ââ HERO ââ --> 536<section class="hero"> 537 538 <div class="hero-card"> 539 540 <!-- Photo --> 541 <div class="hero-photo-wrap"> 542 <img 543 src="https://d3p3fw3rutb1if.cloudfront.net/photos/1194a9d3-a976-413e-9439-1af78856b0cd" 544 alt="A clean pool with floaty" 545 loading="eager" 546 fetchpriority="high" 547 width="960" height="720" 548 onerror="this.style.background='linear-gradient(135deg,#1a3a1a,#267A57)'"> 549 </div> 550 551 <!-- Copy + launcher --> 552 <div class="hero-copy"> 553 554 <div class="hero-badge"> 555 <svg width="10" height="10" viewBox="0 0 24 24" fill="white"><path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z"/></svg> 556 Fully Managed Pool Care 557 </div> 558 559 <h1 class="hero-headline" id="hero-title"> 560 Dive in<span class="period">.</span><br><em>We'll handle everything else<span class="period">.</span></em> 561 </h1> 562 <p class="hero-sub" id="hero-description"> 563 Professional pool care on autopilot. Instant price online â no phone calls or contracts. Includes vetted background-checked pros, chemical management, and before-and-after photos after every visit.</p> 564 565 <div class="hero-chips"> 566 <span class="hero-chip"> 567 <svg width="12" height="12" 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"/></svg> 568 Chemicals, filters, and floor-to-surface cleaning 569 </span> 570 <span class="hero-chip"> 571 <svg width="12" height="12" 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"/></svg> 572 Background-checked technicians you can trust 573 </span> 574 <span class="hero-chip"> 575 <svg width="12" height="12" 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"/></svg> 576 Photos & notes after every visit 577 </span> 578 <span class="hero-chip"> 579 <svg width="12" height="12" 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"/></svg> 580 No long-term contracts, cancel anytime 581 </span> 582 </div> 583 584 <!-- Launcher â white panel version --> 585 <div class="hero-launcher"> 586 <div id="sl-wrapper"> 587 <div id="sl-form"> 588 <div style="background:var(--gray-faint);border:1.5px solid var(--border);padding:14px;border-radius:18px;"> 589 <div style="margin-bottom:10px;font-weight:700;color:var(--blue-dark);font-size:14px;letter-spacing:0.3px;">Get your instant price</div> 590 <div id="sl-address-wrap" style="margin-bottom:10px;border-radius:12px;padding:14px 16px;background:#fff;border:1.5px solid var(--border);position:relative;"> 591 <input id="sl-address" type="search" autocomplete="off" placeholder="Enter your street address" 592 style="display:block;background:transparent;width:100%;font-size:16px;border:none;padding:0;color:#111827;font-family:'DM Sans',sans-serif;outline:none;" 593 onfocus="slAddressFocused()" oninput="slAddressInput(this.value)" onblur="slAddressBlurred()" 594 onchange="_slTS({name:'change',target:'signup-form--address-input'})" 595 onclick="_slTS({name:'click',target:'signup-form--address-input'})"/> 596 <button id="sl-clear" type="button" onclick="slClearAddress()" 597 style="position:absolute;right:10px;top:50%;transform:translateY(-50%);width:20px;height:20px;border-radius:50%;background:#9ca3af;color:#fff;border:none;cursor:pointer;font-size:16px;line-height:20px;text-align:center;padding:0;">×</button> 598 </div> 599 <div id="sl-name-wrap" style="margin-bottom:10px;border-radius:12px;padding:14px 16px;background:#fff;border:1.5px solid var(--border);"> 600 <input id="sl-name" type="text" placeholder="Your name" 601 style="display:block;background:transparent;width:100%;font-size:16px;border:none;padding:0;color:#111827;font-family:'DM Sans',sans-serif;outline:none;" 602 onfocus="slNameFocused()" oninput="slNameTyped()" 603 onblur="_slTS({name:'blur',target:'signup-form--name-input'})" 604 onchange="_slTS({name:'change',target:'signup-form--name-input'})" 605 onclick="_slTS({name:'click',target:'signup-form--name-input'})"/> 606 </div> 607 <div id="sl-phone-wrap" style="margin-bottom:10px;border-radius:12px;padding:14px 16px;background:#fff;border:1.5px solid var(--border);"> 608 <input id="sl-phone" type="tel" placeholder="555-555-5555" 609 style="display:block;background:transparent;width:100%;font-size:16px;border:none;padding:0;color:#111827;font-family:'DM Sans',sans-serif;outline:none;" 610 onfocus="slPhoneFocused()" oninput="slPhoneTyped()" 611 onblur="_slTS({name:'blur',target:'signup-form--phone-input'})" 612 onchange="_slTS({name:'change',target:'signup-form--phone-input'})" 613 onclick="_slTS({name:'click',target:'signup-form--phone-input'})"/> 614 </div> 615 <button id="sl-submit-btn" type="button" 616 style="border-radius:12px;font-weight:700;padding:16px 24px;background:#1879BF;color:#fff;border:none;cursor:pointer;font-size:16px;width:100%;white-space:nowrap;font-family:'DM Sans',sans-serif;display:flex;align-items:center;justify-content:center;gap:8px;transition:background 0.18s;min-height:52px;" 617 onclick="slSubmit();_slTS({name:'click',target:'signup-form--submit-button'})">
618 <span id="sl-btn-text">See My Price <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle;margin-left:4px;"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></span> 619 <span id="sl-spinner"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="animation:sl-spin 1s linear infinite;vertical-align:middle;"><path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"/></svg></span> 620 </button> 621 <div style="text-align:center;padding-top:10px;font-size:12px;font-weight:600;color:var(--text-light);display:flex;align-items:center;justify-content:center;gap:5px;"> 622 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" style="width:13px;height:13px;flex-shrink:0;"><path fill-rule="evenodd" d="M12 1.5a5.25 5.25 0 0 0-5.25 5.25v3a3 3 0 0 0-3 3v6.75a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3v-6.75a3 3 0 0 0-3-3v-3c0-2.9-2.35-5.25-5.25-5.25Zm3.75 8.25v-3a3.75 3.75 0 1 0-7.5 0v3h7.5Z" clip-rule="evenodd"/></svg> 623 Your information is secure ⢠No spam calls 624 </div> 625 </div> 626 </div><!-- /sl-form --> 627 <div id="sl-resume"> 628 <button type="button" 629 style="font-weight:700;font-size:18px;border-radius:12px;padding:16px 32px;margin:12px 0 16px;background:#1879BF;color:#fff;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;box-shadow:0 4px 6px rgba(0,0,0,0.1);width:100%;min-height:52px;" 630 onclick="slSubmit();_slTS({name:'click',target:'signup-form--submit-button'})"> 631 <span id="sl-resume-text" style="display:inline-flex;align-items:center;justify-content:center;gap:8px;">See My Price <svg xmlns="http://www.w3.org/2000/svg" height="0.8em" viewBox="0 0 320 512" style="fill:#fff;flex-shrink:0;"><path d="M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg></span> 632 <span id="sl-resume-spinner"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="animation:sl-spin 1s linear infinite;vertical-align:middle;"><path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"/></svg></span> 633 </button> 634 </div><!-- /sl-resume --> 635 </div><!-- /sl-wrapper --> 636 </div><!-- /hero-launcher --> 637 </div><!-- /hero-copy --> 638 </div><!-- /hero-card --> 639 640</section> 641 642<!-- ââ TRUST BAR ââ --> 643<div class="trust-bar"> 644 <div class="trust-bar-inner"> 645 <div class="trust-rating"> 646 <div class="trust-rating-stars"> 647 <svg width="16" height="16" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 648 <svg width="16" height="16" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 649 <svg width="16" height="16" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 650 <svg width="16" height="16" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 651 <svg width="16" height="16" viewBox="0 0 24 24"> 652 <defs><linearGradient id="grad47"><stop offset="70%" stop-color="#FFD964"/><stop offset="70%" stop-color="#FFD964" stop-opacity="0.25"/></linearGradient></defs> 653 <polygon fill="url(#grad47)" 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"/> 654 </svg> 655 </div> 656 <div class="trust-rating-text">
657 <span class="trust-rating-score">4.7</span> 658 <span class="trust-rating-label">on Google</span> 659 </div> 660 </div> 661 <div class="trust-stats"> 662 <div class="trust-stat"> 663 <span class="trust-stat-num">4,500+</span> 664 <span class="trust-stat-label">Verified reviews</span> 665 </div> 666 <div class="trust-divider"></div> 667 <div class="trust-stat"> 668 <span class="trust-stat-num">18,000+</span> 669 <span class="trust-stat-label">Jobs completed</span> 670 </div> 671 <div class="trust-divider"></div> 672 <div class="trust-stat"> 673 <span class="trust-stat-num">95%</span> 674 <span class="trust-stat-label">First-visit satisfaction</span> 675 </div> 676 <div class="trust-divider"></div> 677 <div class="trust-stat"> 678 <span class="trust-stat-num">No contracts</span> 679 <span class="trust-stat-label">Cancel anytime</span> 680 </div> 681 </div> 682 </div> 683</div> 684 685<!-- ââ THE TWO SERVICES ââ --> 686<section class="services-section" id="services"> 687 <div class="container"> 688 <div style="display:block;width:100%"> 689 <div class="services-intro"> 690 <span class="eyebrow">Pool Cleaning Plans</span> 691 <h2 class="section-title">Two plans. Both keep<br>your pool beautiful.</h2> 692 <p class="section-body" style="margin-top:12px;">Pick the plan that fits. Both include the same trusted, vetted pro â coming to your pool on a regular schedule, every time.</p> 693 </div> 694 695 <div class="services-grid services-grid--two"> 696 697 <!-- Card 1: Weekly --> 698 <div class="service-card anim"> 699 <img src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69b859d6a68209a4ed82aa98_1200-included-weeklypool.jpg" alt="Weekly pool cleaning with deep clean" style="width:100%;height:180px;object-fit:cover;display:block;"> 700 <div class="service-card-body"> 701 <span class="service-card-tag"> 702 <svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> 703 Instant Booking 704 </span> 705 <h3 class="service-card-name">Weekly Pool Cleaning</h3> 706 <p class="service-card-desc">Regular maintenance to keep your pool sparkling all season. Your dedicated pro handles everything â you just swim.</p> 707 <ul class="service-includes"> 708 <li> 709 <svg class="check-icon" width="16" height="16" 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"/></svg> 710 Skimming, brushing & vacuuming 711 </li> 712 <li> 713 <svg class="check-icon" width="16" height="16" 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"/></svg> 714 Water chemistry testing & balancing 715 </li> 716 <li> 717 <svg class="check-icon" width="16" height="16" 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"/></svg> 718 Filter & basket cleaning 719 </li> 720 <li> 721 <svg class="check-icon" width="16" height="16" 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"/></svg> 722 After-visit photo report 723 </li> 724 <li> 725 <svg class="check-icon" width="16" height="16" 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"/></svg> 726 Same pro each visit when possible 727 </li> 728 </ul> 729 <div class="service-card-footer"> 730 <div class="service-price">From <strong>$38</strong><span style="font-size:13px;color:var(--text-light)">/visit ($152 per 4 visits)</span></div> 731 <a href="javascript:void(0);" onclick="document.getElementById('sl-address').scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){document.getElementById('sl-address').focus();},400)" class="btn-primary"> 732 See My Price 733 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 734 </a> 735 </div> 736 </div> 737 </div> 738 739 <!-- Card 2: Weekly + Deep Clean --> 740 <div class="service-card anim" style="transition-delay:0.1s"> 741 <img src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69b859d624de0a98afb9c2d4_1200-included-deepcleanpool.jpg" alt="Deep clean and weekly pool cleaning" style="width:100%;height:180px;object-fit:cover;display:block;"> 742 <div class="service-card-body">
743 <span class="service-card-tag featured"> 744 <svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z"/></svg> 745 Most Popular 746 </span> 747 <h3 class="service-card-name">Weekly Clean + Deep Cleaning & Green Pool Recovery</h3> 748 <p class="service-card-desc">Everything in weekly, plus a thorough deep clean to tackle buildup, tile line, and equipment â so your pool stays in peak condition.</p> 749 <ul class="service-includes"> 750 <li> 751 <svg class="check-icon" width="16" height="16" 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"/></svg> 752 Everything in Weekly Cleaning 753 </li> 754 <li> 755 <svg class="check-icon" width="16" height="16" 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"/></svg> 756 Tile & waterline scrubbing 757 </li> 758 <li> 759 <svg class="check-icon" width="16" height="16" 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"/></svg> 760 Shock the pool & add algaecide 761 </li> 762 <li> 763 <svg class="check-icon" width="16" height="16" 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"/></svg> 764 Detailed chemistry notes & log 765 </li> 766 <li> 767 <svg class="check-icon" width="16" height="16" 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"/></svg> 768 Multi-day clarity recovery when needed 769 </li> 770 </ul> 771 <div class="service-card-footer"> 772 <div class="service-price">Priced for <strong>your pool</strong></div> 773 <a href="javascript:void(0);" onclick="document.getElementById('sl-address').scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){document.getElementById('sl-address').focus();},400)" class="btn-primary" style="background:var(--blue-dark)"> 774 Get My Quote 775 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 776 </a> 777 </div> 778 </div> 779 </div> 780 781 </div> 782 783 <p class="services-help">Not sure which plan is right for you? <a href="tel:8338448659">Call us</a> â we'll help you figure it out.</p> 784 </div> 785 </div> 786</section> 787 788 <!-- ââ BEFORE / AFTER ââ --> 789 <section style="padding:var(--sp-section) 0;background:var(--gray-faint);"> 790 <div class="container"> 791 <div style="display:block;width:100%"> 792 <span class="eyebrow">Real results</span> 793 <h2 class="section-title">What a deep clean visit<br>actually does.</h2> 794 <p class="section-body" style="margin-top:10px;margin-bottom:36px;">Drag the handle to reveal the transformation. Real jobs, real customers.</p> 795 796 <div class="ba-grid"> 797 798 <div class="ba-card anim" style="margin-bottom:32px;"> 799 <div class="ba-slider" data-ba> 800 <img class="ba-before-img" src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$vgKN5GIvW74zZOamsaGB..Qxw5UmaM.Vnl6z9B2dlKwYoiZUYOZuG.jpeg" alt="Pool before cleaning"> 801 <div class="ba-after-clip"> 802 <img src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$tqytIHS6IARvdXM6hgnSuOYib2NF8HXh2Y2SPa3rJF59nSjpIc0Ru.jpeg" alt="Pool after cleaning"> 803 </div> 804 <div class="ba-divider"> 805 <div class="ba-handle-btn"> 806 <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="15 18 9 12 15 6"/></svg> 807 <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="9 18 15 12 9 6"/></svg> 808 </div> 809 </div>
810 <span class="ba-label ba-label-before">After</span> 811 <span class="ba-label ba-label-after">Before</span> 812 </div> 813 <div class="ba-caption"> 814 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 815 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> 816 Kissimmee, FL 817 </div> 818 </div> 819 820 <div class="ba-card anim" style="margin-bottom:32px;transition-delay:0.08s"> 821 <div class="ba-slider" data-ba> 822 <img class="ba-before-img" src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$QAFkzmTWRbI3VrZtxDCWeeWj9IzS2dDqa0UACFbQe91p4vvkV9e7y.jpeg" alt="Pool before cleaning"> 823 <div class="ba-after-clip"> 824 <img src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$d5tNPa.s3pRtrRL.h9RJne.a7buK7aKl3Tb9Xf1GEH.QVHXueW..jpeg" alt="Pool after cleaning"> 825 </div> 826 <div class="ba-divider"> 827 <div class="ba-handle-btn"> 828 <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="15 18 9 12 15 6"/></svg> 829 <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="9 18 15 12 9 6"/></svg> 830 </div> 831 </div> 832 <span class="ba-label ba-label-before">After</span> 833 <span class="ba-label ba-label-after">Before</span> 834 </div> 835 <div class="ba-caption"> 836 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 837 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> 838 Fort Meade, FL 839 </div> 840 </div> 841 842 <div class="ba-card anim" style="transition-delay:0.16s"> 843 <div class="ba-slider" data-ba> 844 <img class="ba-before-img" src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$sGOkbPVcfz1NKZjgERpUe1ihAQHkjLWSsTpLEVnLE4Cgss4tr.KO.jpeg" alt="Pool before cleaning"> 845 <div class="ba-after-clip"> 846 <img src="https://lawnstarter-production.s3.amazonaws.com/uploads/images/image_$2y$10$GKKrz75E2KIG7E4ddVVt0eLrURSJbxrzcEWO1iMVPUbkdkjOOVb9a.jpeg" alt="Pool after cleaning"> 847 </div> 848 <div class="ba-divider"> 849 <div class="ba-handle-btn"> 850 <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="15 18 9 12 15 6"/></svg> 851 <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="9 18 15 12 9 6"/></svg> 852 </div> 853 </div> 854 <span class="ba-label ba-label-before">After</span> 855 <span class="ba-label ba-label-after">Before</span> 856 </div> 857 <div class="ba-caption"> 858 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 859 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> 860 Garland, TX 861 </div> 862 </div> 863 864 </div> 865 </div> 866 </div> 867 </section> 868 869 870<!-- ââ WHY HOME GNOME ââ --> 871<section class="why-section" id="services"> 872 <div class="container"> 873 <div style="display:block;width:100%"> 874 <div class="why-intro"> 875 <span class="eyebrow">Why Home Gnome</span> 876 <h2 class="section-title">Why the best pool service<br>is one you never have to think about.</h2> 877 <blockquote class="why-quote"> 878 You own a pool to relax, not to manage a maintenance crew. We handle the details so you can just dive in. 879 </blockquote> 880 </div> 881 <div class="why-cards"> 882 <div class="why-card anim"> 883 <div class="why-card-icon"> 884 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/><path d="M8 14h.01M12 14h.01M16 14h.01M8 18h.01M12 18h.01"/></svg> 885 </div> 886 <div class="why-card-num">01</div> 887 <div class="why-card-title">Set and forget</div> 888 <div class="why-card-body">We prioritize a consistent pro experience and predictable scheduling. <strong>You just know it's happening.</strong> No wondering if someone will show up.</div> 889 </div> 890 <div class="why-card anim" style="transition-delay:0.08s"> 891 <div class="why-card-icon"> 892 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 893 </div> 894 <div class="why-card-num">02</div> 895 <div class="why-card-title">A pro who knows your pool</div> 896 <div class="why-card-body">Every pool behaves differently. Over time, your pro learns your equipment, your chemistry, your patterns. <strong>Familiarity builds. It doesn't reset.</strong></div> 897 </div> 898 <div class="why-card anim" style="transition-delay:0.16s"> 899 <div class="why-card-icon"> 900 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"/><circle cx="12" cy="13" r="4"/></svg> 901 </div> 902 <div class="why-card-num">03</div> 903 <div class="why-card-title">Visible service</div> 904 <div class="why-card-body">Photos after every visit. Chemistry logs. Visit confirmation. <strong>You can see exactly what happened.</strong></div> 905 </div> 906 <div class="why-card anim" style="transition-delay:0.24s"> 907 <div class="why-card-icon"> 908 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 010 8h-1"/><path d="M2 8h16v9a4 4 0 01-4 4H6a4 4 0 01-4-4V8z"/><line x1="6" y1="1" x2="6" y2="4"/><line x1="10" y1="1" x2="10" y2="4"/><line x1="14" y1="1" x2="14" y2="4"/></svg> 909 </div> 910 <div class="why-card-num">04</div> 911 <div class="why-card-title">Flexible by design</div> 912 <div class="why-card-body">Life changes. No contacts. <strong>Cancel, skip, or reschedule anytime. One tap.</strong></div> 913 </div> 914 </div> 915 </div> 916 </div> 917</section> 918 919 920 921<!-- ââ HOW IT WORKS ââ --> 922<section class="how-section"> 923 <div class="container"> 924 <div style="display:block;width:100%"> 925 <span class="eyebrow">How it works</span> 926 <h2 class="section-title">Booked in under<br>2 minutes.</h2> 927 <div class="how-steps"> 928 <div class="how-step anim"> 929 <div class="how-num">1</div> 930 <div class="how-content"> 931 <div class="how-title">Enter your address</div> 932 <div class="how-desc">See your exact price instantly â no callbacks, no waiting, no guessing. Completely online.</div> 933 <div class="how-detail"> 934 <svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> 935 Instant pricing 936 </div> 937 </div> 938 </div> 939 <div class="how-step anim" style="transition-delay:0.1s"> 940 <div class="how-num">2</div> 941 <div class="how-content"> 942 <div class="how-title">Pick your date</div> 943 <div class="how-desc">Choose a time that works for you. 48-hour availability for 9 out of 10 customers. We'll match you with a vetted local pool pro.</div> 944 <div class="how-detail"> 945 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="3" y1="10" x2="21" y2="10"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="16" y1="2" x2="16" y2="6"/></svg> 946 48-hr availability 947 </div> 948 </div> 949 </div> 950 <div class="how-step anim" style="transition-delay:0.2s"> 951 <div class="how-num">3</div> 952 <div class="how-content"> 953 <div class="how-title">Relax â we've got it</div> 954 <div class="how-desc">Your pro shows up on schedule. You get notified when they're done, and receive photos from the visit. Your card
954isn't charged for 3 days, so you can verify the work first.</div> 955 <div class="how-detail"> 956 <svg width="12" height="12" 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"/></svg> 957 Quality Guarantee 958 </div> 959 </div> 960 </div> 961 </div> 962 </div> 963 </div> 964</section> 965 966<!-- ââ QUALITY SERVICE PROMISE ââ --> 967<section class="promise-section"> 968 <div class="container promise-inner"> 969 <div style="display:block;width:100%"> 970 <span class="promise-eyebrow">The Quality Service Promise</span> 971 <h2 class="promise-title">We stand behind<br>every single visit.</h2> 972 <p class="promise-body">95% of our services satisfy the customer on the first visit. For the other 5%, our guarantee kicks in.</p> 973 <div class="promise-cards"> 974 <div class="promise-card anim"> 975 <div class="promise-icon"> 976 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> 977 </div> 978 <div> 979 <div class="promise-card-title">Re-clean or refund</div> 980 <div class="promise-card-body">Tell us within 5 days if anything's off. We'll send your pro back to fix it, or give you a full refund.</div> 981 </div> 982 </div> 983 <div class="promise-card anim" style="transition-delay:0.08s"> 984 <div class="promise-icon"> 985 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="4" width="22" height="16" rx="2"/><line x1="1" y1="10" x2="23" y2="10"/></svg> 986 </div> 987 <div> 988 <div class="promise-card-title">Pay after the work</div> 989 <div class="promise-card-body">You're never charged before the work is done. See the results first, then pay.</div> 990 </div> 991 </div> 992 <div class="promise-card anim" style="transition-delay:0.16s"> 993 <div class="promise-icon"> 994 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 11-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg> 995 </div> 996 <div> 997 <div class="promise-card-title">$2M property protection</div> 998 <div class="promise-card-body">Every job is backed by $2 million in property damage protection. You're covered.</div> 999 </div> 1000 </div> 1001 <div class="promise-card anim" style="transition-delay:0.24s"> 1002 <div class="promise-icon"> 1003 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 1004 </div> 1005 <div> 1006 <div class="promise-card-title">Cancel or skip anytime</div> 1007 <div class="promise-card-body">No contracts. One tap to skip, pause, reschedule, or cancel. No penalty, no awkward calls.</div> 1008 </div> 1009 </div> 1010 </div> 1011 </div> 1012 </div> 1013</section> 1014 1015 1016<!-- ââ MEET OUR PROS ââ --> 1017<section class="pros-section"> 1018 <div class="container"> 1019 <div style="display:block;width:100%"> 1020 <div class="pros-intro"> 1021 <span class="eyebrow">Meet our pros</span> 1022 <h2 class="section-title">Someone who actually<br>knows pools.</h2> 1023 <p class="section-body" style="margin-top:12px;">1 in 30 applicants makes it through. The ones who do are background-checked, experienced, and rated by real customers after every job. You'll know who's coming. And so will we.</p> 1024 <div class="pros-badge-row"> 1025 <div class="pros-badge"> 1026 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
1027 Background checked 1028 </div> 1029 <div class="pros-badge"> 1030 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 11 12 14 22 4"/><path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"/></svg> 1031 Vetted & interviewed 1032 </div> 1033 <div class="pros-badge"> 1034 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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"/></svg> 1035 Rated after every visit 1036 </div> 1037 </div> 1038 </div> 1039 1040 <div class="pro-cards"> 1041 <div class="pro-card anim"> 1042 <div class="pro-card-header"> 1043 <div class="pro-avatar"><img src="https://cdn.prod.website-files.com/698a572c14808a950222946d/69a0726056abb9b68df3c57c_pro-1.jpg" alt="Michael Van Deursen" onerror="this.outerHTML='MV'"></div> 1044 <div> 1045 <div class="pro-name">Michael V.</div> 1046 <div class="pro-biz">Pool Care Cleaning Service · Mascotte, FL</div> 1047 <div class="pro-stars"> 1048 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1049 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1050 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1051 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1052 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1053 </div> 1054 </div> 1055 </div> 1056 <div class="pro-card-body"> 1057 <p class="pro-quote">"Mike is the proud owner of a thriving pool business in Central Florida, delivering top-tier pool services for over three years. As a certified, registered, and insured pool technician, Mike leads a team of skilled professionals dedicated to ensuring crystal-clear, safe, and well-maintained pools for residential clients."</p> 1058 <span class="pro-years"> 1059 <svg width="12" height="12" 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"/></svg> 1060 3+ years experience 1061 </span> 1062 </div> 1063 </div> 1064 1065 <div class="pro-card anim" style="transition-delay:0.1s"> 1066 <div class="pro-card-header"> 1067 <div class="pro-avatar"><img src="https://homegnome.com/assets/static/a5017594-bf55-45b9-95f3-9671f1db4460/build/assets/pro-2-CLQC-PZv.jpg" alt="Scott Renton" onerror="this.outerHTML='SR'"></div> 1068 <div> 1069 <div class="pro-name">Scott R.</div> 1070 <div class="pro-biz">Sparkling Pool Service · Tampa Bay</div> 1071 <div class="pro-stars"> 1072 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1073 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1074 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1075 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1076 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1077 </div> 1078 </div> 1079 </div> 1080 <div class="pro-card-body"> 1081 <p class="pro-quote">"With over 7 years of experience in residential pool service, we provide Professional service with a Personal touch."</p>
1082 <span class="pro-years"> 1083 <svg width="12" height="12" 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"/></svg> 1084 7+ years experience 1085 </span> 1086 </div> 1087 </div> 1088 1089 <div class="pro-card anim" style="transition-delay:0.2s"> 1090 <div class="pro-card-header"> 1091 <div class="pro-avatar"><img src="https://homegnome.com/assets/static/a5017594-bf55-45b9-95f3-9671f1db4460/build/assets/pro-3-jT6ct7HU.jpg" alt="David Ragozzine" onerror="this.outerHTML='DR'"></div> 1092 <div> 1093 <div class="pro-name">David R.</div> 1094 <div class="pro-biz">Connery Pool Services · Lakeland, FL</div> 1095 <div class="pro-stars"> 1096 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1097 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1098 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1099 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1100 <svg width="13" height="13" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1101 </div> 1102 </div> 1103 </div> 1104 <div class="pro-card-body"> 1105 <p class="pro-quote">"Maintaining clean and clear swimming pools since 1993. I appreciate the opportunity to keep your pool sanitary for you & your family. I enjoy water sports and spending time with my family."</p> 1106 <span class="pro-years"> 1107 <svg width="12" height="12" 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"/></svg> 1108 30+ years experience 1109 </span> 1110 </div> 1111 </div> 1112 </div> 1113 </div> 1114 </div> 1115</section> 1116</div></div><div class="w-embed"><div style="display:block;width:100%;overflow-x:hidden;"> 1117<!-- ââ REVIEWS ââ --> 1118<section class="reviews-section"> 1119 <div class="container"> 1120 <div style="display:block;width:100%"> 1121 <div class="reviews-header"> 1122 <span class="eyebrow">Customer reviews</span> 1123 <h2 class="section-title">Don't take<br>our word for it.</h2> 1124 <div class="stats-row"> 1125 <div class="stat-box anim"> 1126 <div class="stat-num">4.7â </div> 1127 <div class="stat-label">on Google</div> 1128 </div> 1129 <div class="stat-box anim" style="transition-delay:0.07s"> 1130 <div class="stat-num">4,500+</div> 1131 <div class="stat-label">Verified reviews</div> 1132 </div> 1133 <div class="stat-box anim" style="transition-delay:0.14s"> 1134 <div class="stat-num">18k+</div> 1135 <div class="stat-label">Jobs completed</div> 1136 </div> 1137 <div class="stat-box anim" style="transition-delay:0.21s"> 1138 <div class="stat-num">95%</div> 1139 <div class="stat-label">First-visit satisfaction</div> 1140 </div> 1141 </div> 1142 </div> 1143 1144 <div class="reviews-grid"> 1145 1146 <div class="review-card has-photo anim"> 1147 <div class="review-card-photo"> 1148 <img src="https://cdn.prod.website-files.com/698a572c14808a950222946d/69a0b3baec571f803c83abae_pool-1.jpeg" 1149 alt="Deep Cleaning by Best Coast Pools â customer photo" loading="lazy"> 1150 </div> 1151 <div class="review-card-photo-caption"> 1152 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg> 1153 Photo by Best Coast Pools 1154 </div> 1155 <div class="review-content"> 1156 <div class="review-stars"> 1157 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1158 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1159 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1160 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1161 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1162 </div> 1163 <div class="review-service-tag">Pool Cleaning · Green to Clean</div> 1164 <p class="review-text">"Our pool was in disarray before we moved in. He got all the debris out and made it clear â I don't think it was his fault the pool was bad to start with, but he made it right."</p> 1165 <div class="reviewer"> 1166 <div class="reviewer-avatar" style="background:var(--blue);">BL</div> 1167 <div> 1168 <div class="reviewer-name">
1168Betsy L.</div> 1169 <div class="reviewer-loc">Parrish, FL</div> 1170 </div> 1171 </div> 1172 </div> 1173 </div> 1174 1175 <div class="review-card has-photo anim" style="transition-delay:0.08s"> 1176 <div class="review-card-photo"> 1177 <img src="https://homegnome.com/assets/static/a5017594-bf55-45b9-95f3-9671f1db4460/build/assets/pool-2-CgYNq8gD.jpg" 1178 alt="Pool Cleaning by Connery Pool Services" loading="lazy"> 1179 </div> 1180 <div class="review-card-photo-caption"> 1181 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg> 1182 Photo by Connery Pool Services 1183 </div> 1184 <div class="review-content"> 1185 <div class="review-stars"> 1186 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1187 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1188 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1189 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1190 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1191 </div> 1192 <div class="review-service-tag">Weekly Pool Cleaning</div> 1193 <p class="review-text">"David did an outstanding job deep cleaning my pool. Thorough, professional, crystal clear. He took the time to explain everything he did. His attention to detail was impressive."</p> 1194 <div class="reviewer"> 1195 <div class="reviewer-avatar" style="background:var(--red);">KH</div> 1196 <div> 1197 <div class="reviewer-name">Kyle H.</div> 1198 <div class="reviewer-loc">Lakeland, FL</div> 1199 </div> 1200 </div> 1201 </div> 1202 </div> 1203 1204 <div class="review-card has-photo anim" style="transition-delay:0.16s"> 1205 <div class="review-card-photo"> 1206 <img src="https://homegnome.com/assets/static/a5017594-bf55-45b9-95f3-9671f1db4460/build/assets/pool-3-CeYV_YH7.jpg" 1207 alt="Deep Cleaning by DCL Services â customer photo" loading="lazy"> 1208 </div> 1209 <div class="review-card-photo-caption"> 1210 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg> 1211 Photo by DCL Services 1212 </div> 1213 <div class="review-content"> 1214 <div class="review-stars"> 1215 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1216 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1217 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1218 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1219 <svg width="14" height="14" viewBox="0 0 24 24" fill="#FFD964"><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"/></svg> 1220 </div> 1221 <div class="review-service-tag">Pool Cleaning · Green to Clean</div> 1222 <p class="review-text">"Darrin is absolutely amazing. He brought my pool back to life in one visit. He promised to return in 2 days to check on it â and he did. Very happy with his service and patience."</p> 1223 <div class="reviewer"> 1224 <div class="reviewer-avatar" style="background:var(--success);">ME</div> 1225 <div> 1226 <div class="reviewer-name">Marsha E.</div> 1227 <div class="reviewer-loc">Orlando, FL</div> 1228 </div> 1229 </div> 1230 </div> 1231 </div> 1232 1233 </div> 1234 </div> 1235 </div> 1236</section> 1237 1238<!-- ââ FAQ ââ --> 1239<section class="faq-section" id="faq"> 1240 <div class="container"> 1241 <div style="display:block;width:100%"> 1242 <div class="faq-head anim">
1243 <span class="eyebrow">Frequently asked questions</span> 1244 <h2 class="section-title">Pool cleaning questions,<br>answered.</h2> 1245 </div> 1246 <div class="faq-list"> 1247 1248 <div class="faq-item anim"> 1249 <button class="faq-q" onclick="toggleFaq(this)"> 1250 What's included in my weekly pool cleaning plan? 1251 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1252 </button> 1253 <div class="faq-a"> 1254 The service includes skimming, vacuuming, and adjusting water chemistry. A one-time deep clean removes stubborn algae and stains, preventing pool surface damage and maintaining water quality. Both service plans are designed to keep your pool safe and ready for an enjoyable swimming experience. Please note that pool repairs are not always guaranteed by the Pro. 1255 </div> 1256 </div> 1257 1258 <div class="faq-item anim"> 1259 <button class="faq-q" onclick="toggleFaq(this)"> 1260 Can I order a deep clean for my pool? 1261 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1262 </button> 1263 <div class="faq-a"> 1264 Yes, we offer a <strong>Deep Clean + Weekly Service</strong> option that starts with a comprehensive one-time deep clean to get your pool in perfect condition, followed by regular weekly maintenance. The one-time deep clean includes shock and algaecide treatment plus filter backwashing to eliminate stubborn contaminants and restore water clarity. After the initial deep clean, your weekly service begins â including all chemicals, chemical testing and balancing, vacuuming, brushing, skimming, and skimmer basket cleaning. You'll receive arrival texts when your technician is on the way and detailed email reports after each visit. 1265 </div> 1266 </div> 1267 1268 <div class="faq-item anim"> 1269 <button class="faq-q" onclick="toggleFaq(this)"> 1270 When will I be charged for service? 1271 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1272 </button> 1273 <div class="faq-a"> 1274 You only pay after you're happy with the work. Our <strong>Inspect First, Pay Later</strong> policy means we wait 3 full days after completing the service before charging your card. This gives you time to review the work and confirm you're 100% satisfied. You see the final results before you pay â we earn your trust by standing behind our work. 1275 </div> 1276 </div> 1277 1278 <div class="faq-item anim"> 1279 <button class="faq-q" onclick="toggleFaq(this)"> 1280 Do you have monthly service plans? 1281 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1282 </button> 1283 <div class="faq-a"> 1284 We believe you should only pay for the service you actually receive. Instead of rigid monthly contracts, we bill $38 per visit. This means in a standard 4-week month, your total is $152. If a month has a fifth Tuesday or Friday, you get an extra cleaning and only pay for that additional visit. No hidden "flat-rate" markups. 1285 </div> 1286 </div> 1287 1288 <div class="faq-item anim"> 1289 <button class="faq-q" onclick="toggleFaq(this)"> 1290 How do I pay? 1291 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1292 </button> 1293 <div class="faq-a"> 1294 All payments happen within the security of the Home Gnome platform. Even tips! We do not accept cash. Your payment is secure. We use Stripe (the same company used by Amazon, Airbnb, Google, and more), to encrypt & protect your data. 1295 </div> 1296 </div> 1297 1298 <div class="faq-item anim"> 1299 <button class="faq-q" onclick="toggleFaq(this)"> 1300 What if the job isn't done right? 1301 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1302 </button> 1303 <div class="faq-a">
1304 Every service is backed by our <strong>Quality Service Promise</strong>. If something isn't right, tell us within 5 days â we'll send a pro back to fix it, or we'll refund you. 1305 </div> 1306 </div> 1307 1308 <div class="faq-item anim"> 1309 <button class="faq-q" onclick="toggleFaq(this)"> 1310 How long does each service take? 1311 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1312 </button> 1313 <div class="faq-a"> 1314 Duration varies based on pool size, debris level, and service type. A basic weekly clean typically takes <strong>30 minutes to 2 hours</strong>. A deep clean may require 3 to 5 hours depending on the severity of algae or staining. Your pro will let you know if anything unexpected affects the timeline. 1315 </div> 1316 </div> 1317 1318 <div class="faq-item anim"> 1319 <button class="faq-q" onclick="toggleFaq(this)"> 1320 Do you service above-ground pools? 1321 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1322 </button> 1323 <div class="faq-a"> 1324 Yes. Our weekly cleaning and deep clean services are available for both in-ground and above-ground pools, including traditional above-ground pools and temporary or seasonal setups. When you sign up, we match you with a pro in your area who services above-ground pools and understands their specific maintenance needs. 1325 </div> 1326 </div> 1327 1328 <div class="faq-item anim"> 1329 <button class="faq-q" onclick="toggleFaq(this)"> 1330 What chemicals do you use? Are they safe? 1331 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1332 </button> 1333 <div class="faq-a"> 1334 We use safe, high-quality pool chemicals that are carefully selected and handled to maintain your pool's health and safety. Our pros always handle chemicals with care and follow label instructions. 1335 </div> 1336 </div> 1337 1338 <div class="faq-item anim"> 1339 <button class="faq-q" onclick="toggleFaq(this)"> 1340 What should I do before the pro arrives? 1341 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1342 </button> 1343 <div class="faq-a"> 1344 A few quick things help your pro do their best work: 1345 <ul style="margin-top:10px;margin-left:18px;display:flex;flex-direction:column;gap:6px;"> 1346 <li><strong>Clear the pool area</strong> â remove any obstacles or debris that might get in the way.</li> 1347 <li><strong>Turn on pool equipment</strong> â make sure the pump, filter, and heater are running.</li> 1348 <li><strong>Secure pets and children</strong> â keep them away from the pool area during the service.</li> 1349 </ul> 1350 </div> 1351 </div> 1352 1353 <div class="faq-item anim"> 1354 <button class="faq-q" onclick="toggleFaq(this)"> 1355 Do you have same day service? 1356 <svg class="faq-chevron" 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="6 9 12 15 18 9"/></svg> 1357 </button> 1358 <div class="faq-a"> 1359 It's very unlikely we'll have a pro available for a same-day pool service. Our turnaround time is quick - usually within 48 hours. If youâre looking for a cleaning as soon as possible you'll want to book ASAP to reserve your slot. 1360 </div> 1361 </div> 1362 1363 </div> 1364 </div> 1365 </div> 1366</section> 1367 1368<!-- ââ SERVICE AREA / ZIP LOOKUP ââ --> 1369<section class="zip-section" id="service-area"> 1370 <div class="container"> 1371 <div style="display:block;width:100%"> 1372 <div class="zip-card">
1373 <span class="eyebrow" style="justify-content:center;display:block">Service Area</span> 1374 <h2 class="zip-title">Ready to get started?</h2> 1375 <p class="zip-sub">Enter your address to see instant pricing and confirm we're in your area.</p> 1376 1377 <!-- Inline launcher â same widget, second instance with unique IDs --> 1378 <div style="max-width:460px;margin:0 auto;"> 1379 <div style="display:flex;flex-direction:column;gap:10px;"> 1380 <input 1381 id="sa-address" 1382 type="search" 1383 autocomplete="off" 1384 placeholder="Enter your street address" 1385 style="width:100%;font-size:16px;font-family:'DM Sans',sans-serif;padding:14px 18px;border-radius:12px;border:2px solid var(--blue-25);outline:none;color:#111827;transition:border-color 0.15s;" 1386 onfocus="this.style.borderColor='var(--blue)'" 1387 onblur="this.style.borderColor='var(--blue-25)'" 1388 onkeydown="if(event.key==='Enter')saSubmit()" 1389 /> 1390 <button 1391 onclick="saSubmit()" 1392 style="width:100%;background:var(--blue);color:white;font-weight:700;font-size:16px;padding:16px 22px;border-radius:12px;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:background 0.15s;" 1393 onmouseover="this.style.background='var(--blue-dark)'" 1394 onmouseout="this.style.background='var(--blue)'"> 1395 See My Price â 1396 </button> 1397 </div> 1398 <div id="sa-result" style="margin-top:10px;font-size:13px;color:var(--text-light);min-height:20px;"></div> 1399 </div> 1400 1401 <div class="zip-markets" style="margin-top:20px;"> 1402 Currently serving <strong>Florida, Texas, Arizona, California, Georgia, Tennessee, and more.</strong> 1403 </div> 1404 </div> 1405 </div> 1406 </div> 1407</section> 1408 1409<!-- ââ ALL SERVICES ââ --> 1410<section class="all-services-section" id="all-services"> 1411 <div class="container"> 1412 <div style="display:block;width:100%"> 1413 <div class="all-services-intro"> 1414 <span class="eyebrow">One app, your whole home</span> 1415 <h2 class="section-title" style="margin-bottom:8px;">Beyond the pool.</h2> 1416 <p class="section-body">Home Gnome handles your whole outdoor home. Everything is a tap away through your app.</p> 1417 </div> 1418 <div style="margin-bottom:12px"> 1419 <span class="instant-badge">
1420 <svg width="11" height="11" viewBox="0 0 24 24" fill="white"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> 1421 Instant booking 1422 </span> 1423 </div> 1424 <div class="all-grid"> 1425 <a href="/services/pool-cleaning" class="all-card"> 1426 <div class="all-card-icon"> 1427 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12c0 0 2-3 5-3s4 2.5 6 2.5S17 9 20 9"/><path d="M3 17c0 0 2-3 5-3s4 2.5 6 2.5S17 14 20 14"/></svg> 1428 </div> 1429 <div class="all-card-name">Pool Cleaning</div> 1430 <div class="all-card-link">Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1431 </a> 1432 <a href="/services/lawn-mowing" class="all-card"> 1433 <div class="all-card-icon"> 1434 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3l18 18M3 21h18"/><path d="M9 15l4-4"/></svg> 1435 </div> 1436 <div class="all-card-name">Lawn Mowing</div> 1437 <div class="all-card-link">Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1438 </a> 1439 <a href="/services/fertilization-and-weed-control" class="all-card"> 1440 <div class="all-card-icon"> 1441 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22V12M12 12C12 7 8 4 3 4c0 5 3 8 9 8zM12 12c0-5 4-8 9-8-1 5-4 8-9 8z"/></svg> 1442 </div> 1443 <div class="all-card-name">Fertilization & Weed Control</div> 1444 <div class="all-card-link">Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1445 </a> 1446 <a href="/services/bush-trimming" class="all-card"> 1447 <div class="all-card-icon"> 1448 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="3"/><circle cx="18" cy="18" r="3"/><line x1="8.5" y1="3.5" x2="15.5" y2="20.5"/></svg> 1449 </div> 1450 <div class="all-card-name">Bush Trimming</div> 1451 <div class="all-card-link">Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1452 </a> 1453 <a href="/services/flower-bed-weeding" class="all-card"> 1454 <div class="all-card-icon"> 1455 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22c-4 0-8-4-8-9a8 8 0 0116 0c0 5-4 9-8 9z"/><line x1="12" y1="13" x2="12" y2="22"/></svg> 1456 </div> 1457 <div class="all-card-name">Flower Bed Weeding</div> 1458 <div class="all-card-link">Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1459 </a> 1460 <a href="/services/leaf-removal" class="all-card"> 1461 <div class="all-card-icon"> 1462 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 20h16M4 20l4-8 4 4 4-8 4 12"/></svg> 1463 </div> 1464 <div class="all-card-name">Leaf Removal</div> 1465 <div class="all-card-link">
1465Book now <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></div> 1466 </a> 1467 </div> 1468 <div class="more-services-box"> 1469 <div class="more-label">Available after an in-person quote from your pro</div> 1470 <div class="more-tags"> 1471 <span class="more-tag">Gutter Cleaning</span> 1472 <span class="more-tag">Pressure Washing</span> 1473 <span class="more-tag">Fence Repair</span> 1474 <span class="more-tag">Mulching</span> 1475 <span class="more-tag">Landscaping</span> 1476 <span class="more-tag">Tree Trimming</span> 1477 <span class="more-tag">Lawn Seeding</span> 1478 <span class="more-tag">Junk Removal</span> 1479 <span class="more-tag">Shrub Planting</span> 1480 <span class="more-tag">Tree Removal</span> 1481 <span class="more-tag">Weeding</span> 1482 <span class="more-tag">Yard Cleanup</span> 1483 </div> 1484 </div> 1485 </div> 1486 </div> 1487</section> 1488 1489<!-- ââ FOR PROS ââ --> 1490<section class="for-pros-section"> 1491 <div class="container"> 1492 <div style="display:block;width:100%"> 1493 <div class="for-pros-inner"> 1494 <div class="for-pros-text"> 1495 <span class="eyebrow" style="color:var(--blue-dark)">For pool professionals</span> 1496 <h2 class="section-title">Grow your pool business<br>with Home Gnome.</h2> 1497 <p class="section-body" style="margin-top:12px;">We send jobs to your phone, handle scheduling, and pay fast. You focus on the work.</p> 1498 <div class="for-pros-perks"> 1499 <div class="for-pros-perk"><div class="perk-dot"></div>Jobs sent directly to your phone</div> 1500 <div class="for-pros-perk"><div class="perk-dot"></div>Fast, reliable payments</div> 1501 <div class="for-pros-perk"><div class="perk-dot"></div>Set your own schedule & territory</div> 1502 <div class="for-pros-perk"><div class="perk-dot"></div>Build your reputation with every review</div> 1503 </div> 1504 </div> 1505 <div class="for-pros-cta-wrap"> 1506 <a href="/pros" class="btn-primary" style="font-size:16px;padding:16px 32px"> 1507 Join as a Pro 1508 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 1509 </a> 1510 </div> 1511 </div> 1512 </div> 1513 </div> 1514</section> 1515 1516<!-- ââ APP ââ --> 1517<section class="app-section"> 1518 <div class="container"> 1519 <div style="display:block;width:100%"> 1520 <div class="app-inner"> 1521 <div> 1522 <span class="app-eyebrow eyebrow">Mobile App</span> 1523 <h2 class="app-title">Your home,<br>in your pocket.</h2> 1524 <p class="app-body">Book, track, reschedule, and manage everything from the Home Gnome app. One tap for all of it.</p> 1525 <div class="app-features"> 1526 <div class="app-feature"><div class="app-feature-dot"></div>Instant quotes and easy booking</div> 1527 <div class="app-feature"><div class="app-feature-dot"></div>Pro messaging and job updates</div> 1528 <div class="app-feature"><div class="app-feature-dot"></div>Secure payments and full job history</div> 1529 <div class="app-feature"><div class="app-feature-dot"></div>Responsive customer support</div> 1530 </div> 1531 <div class="app-btns"> 1532 <a href="https://apps.apple.com/app/id6741170459" class="app-btn"> 1533 <svg width="24" height="24" viewBox="0 0 24 24" fill="white"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 1534 <div><span class="app-btn-label">Download on the</span><span class="app-btn-name">App Store</span></div> 1535 </a> 1536 <a href="https://play.google.com/store/apps/details?id=com.homegnome.customers" class="app-btn"> 1537 <svg width="24" height="24" viewBox="0 0 24 24" fill="white"><path d="M3.18 23.75c.28.16.59.25.92.25.31 0 .6-.08.86-.22l11.4-6.57-2.5-2.5L3.18 23.75zm-1.43-20.5C1.27 3.6 1 4.02 1 4.5v15c0 .48.27.9.75 1.25l.1.08 8.4-8.4v-.2L1.75 3.17l-.1.08zM20.47 10.5l-2.3-1.33-2.8 2.8 2.8 2.8 2.32-1.34c.66-.38.66-1.01 0-1.39l-.02-.54zM4.1.22L15.5 6.79l-2.5 2.5L2.92.22C3.18.08 3.47 0 3.78 0c.13 0 .23.08.32.22z"/></svg> 1538 <div><span class="app-btn-label">Get it on</span><span class="app-btn-name">Google Play</span></div> 1539 </a> 1540 </div> 1541 </div> 1542 <div class="app-mockup"> 1543 <img 1544 src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/699e2aa917d796b1482be108_download-mobile-app.jpg" 1545 alt="Home Gnome mobile app" 1546 loading="lazy"> 1547 </div> 1548 </div> 1549 </div> 1550 </div> 1551</section> 1552 1553<!-- ââ FOOTER ââ --> 1554<footer> 1555 <div class="footer-container"> 1556 <div class="footer-top"> 1557 <div class="footer-brand"> 1558 <div class="footer-brand-logo"> 1559 <img src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/69a1d60d0bd45d5709d7dc42_a25a906a07f5745fb4f626d6164fffb5_property1variant2.png" 1560 alt="Home Gnome" 1561 onerror="this.outerHTML='<span style=\'font-family:
1561Fraunces,serif;font-size:18px;font-weight:500;color:white;\'>Home Gnome</span>'"> 1562 </div> 1563 <p class="footer-brand-tagline">One app. Your whole outdoor home. Handled.</p> 1564 <a href="tel:8333884988" class="footer-phone-link"> 1565 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-5.99-5.99 19.79 19.79 0 01-3.07-8.68A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.9.33 1.84.57 2.81.7A2 2 0 0122 16.92z"/></svg> 1566 (833) 388-4988 1567 </a> 1568 </div> 1569 <div class="footer-nav-grid"> 1570 <div> 1571 <div class="footer-col-title">Yard Services</div> 1572 <div class="footer-links"> 1573 <a href="/services/lawn-mowing" class="footer-link">Lawn Mowing</a> 1574 <a href="/services/fertilization-and-weed-control" class="footer-link">Fertilization & Weed Control</a> 1575 <a href="/services/bush-trimming" class="footer-link">Bush Trimming</a> 1576 <a href="/services/flower-bed-weeding" class="footer-link">Flower Bed Weeding</a> 1577 <a href="/services/leaf-removal" class="footer-link">Leaf Removal</a> 1578 </div> 1579 </div> 1580 <div> 1581 <div class="footer-col-title">Pool Cleaning</div> 1582 <div class="footer-links"> 1583 <a href="/services/pool-cleaning" class="footer-link">Weekly Pool Cleaning</a> 1584 <a href="/services/pool-cleaning" class="footer-link">Weekly + Deep Clean</a> 1585 </div> 1586 </div> 1587 <div> 1588 <div class="footer-col-title">Company</div> 1589 <div class="footer-links"> 1590 <a href="/about-us" class="footer-link">About Us</a> 1591 <a href="https://homegnome.com/blog/" class="footer-link">Blog</a> 1592 <a href="/pros" class="footer-link">For Pros</a> 1593 <a href="https://my.homegnome.com" class="footer-link">Sign In</a> 1594 </div> 1595 </div> 1596 <div> 1597 <div class="footer-col-title">Support</div> 1598 <div class="footer-links"> 1599 <a href="tel:8338448659" class="footer-link">(833) 844-8659</a> 1600 <a href="https://support.homegnome.com/hc/en-us" class="footer-link">Help Center</a> 1601 </div> 1602 </div> 1603 </div> 1604 </div> 1605 <div class="footer-bottom"> 1606 <div class="footer-legal"> 1607 <a href="https://homegnome.com/terms-of-service">Terms of Service</a> 1608 <a href="https://homegnome.com/privacy">Privacy Policy</a> 1609 <a href="javascript: Cookiebot.renew()">Do Not Sell My Info</a> 1610 </div> 1611 <div style="font-size:11px;line-height:1.6;color:rgba(255,255,255,0.55);margin-top:4px;"> 1612 * By submitting your contact info, you agree to our <a href="https://homegnome.com/terms-of-service" style="color:rgba(255,255,255,0.55);text-decoration:underline;">Terms of Service</a> and <a 1613 href="https://homegnome.com/privacy" style="color:rgba(255,255,255,0.55);text-decoration:underline;">Privacy Policy</a> and to receive automated texts from Home Gnome, including service updates and marketing 1614 offers. Consent not required to purchase. Reply STOP anytime. Msg & data rates may apply. 1615 </div> 1616 <div class="footer-copy">© 2026 Home Gnome. All rights reserved.</div> 1617 </div> 1618 </div> 1619</footer> 1620 1621<!-- ââ MOBILE STICKY BAR ââ --> 1622<div class="sticky-bar"> 1623 <button class="sticky-book" onclick="document.getElementById('sl-address').scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){document.getElementById('sl-address').focus();},400)">See My Price</button> 1624 <a href="tel:8333884988" class="sticky-call"> 1625 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-5.99-5.99 19.79 19.79 0 01-3.07-8.68A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.9.33 1.84.57 2.81.7A2 2 0 0122 16.92z"/></svg> 1626 Call 1627 </a> 1628</div> 1629</div></div>
1629<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=6946e14d80acd0693951c0ef" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
1629<script src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/js/staging-homegnome.schunk.b8db4c422aa68aa0.js" type="text/javascript" integrity="sha384-GB97E3V9WURBYG9TmVNYwzPHEX/Bp/LhAymYMUoiDkJAbSOhs+E9yg2ILeX01ui7" crossorigin="anonymous"></script>
1629<script src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/js/staging-homegnome.schunk.c7863096e712bc2b.js" type="text/javascript" integrity="sha384-Z4348NjQPVjUN+ikaGvYewhu1XTiKzv7CF2L+mnKLdjf2B/+ma3EeKwfg6aAm+Us" crossorigin="anonymous"></script>
1629<script src="https://cdn.prod.website-files.com/6946e14d80acd0693951c0ef/js/staging-homegnome.a1802a9c.d10f7607d4fd23a4.js" type="text/javascript" integrity="sha384-C8AIT32dFXrQZn5ttjQl41ERu2007jD87EL9cXy1i1bWsXGZ7W1tFBqlk4IdTzlt" crossorigin="anonymous"></script>
1629<script data-cookieconsent="statistics" type="text/javascript">!function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};analytics._writeKey="Wj2RqdSdqjajKhS0UDHvVi5G7drOrdfZ";;analytics.SNIPPET_VERSION="5.2.0";analytics.load("Wj2RqdSdqjajKhS0UDHvVi5G7drOrdfZ");analytics.ready(function(){if(window.analytics&&typeof window.analytics.user==='function'){var user=window.analytics.user();var traits=(user&&user.traits())||{};window.lsSegmentAnonId=user.anonymousId();window.analytics.identify({"Landing Page":traits["Landing Page"]||window.location.pathname,"signup_version":traits["signup_version"]||2})}});analytics.identify({"Last Seen On":window.location.pathname});analytics.page(Object.assign({path:window.location.pathname},window.page))}}();</script>
vendor: 1 bytes, line 1629
1629
1630<script> 1631 // -- SENTRY 1632 window.sentryOnLoad = function () { 1633 const hostname = '' || location.hostname; 1634 const brand = hostname.match(/([a-z0-9-]+\.com)$/i)[0]; 1635 Sentry.setTag('brand', brand || 'unknown'); 1636 Sentry.init({ 1637 dsn: 'https://[email protected]/4511190270607360', 1638 release: window.page.version || 'unknown', 1639 environment: 'production', 1640 integrations: [Sentry.browserTracingIntegration(), Sentry.replayIntegration()], 1641 tracePropagationTargets: [location.origin], 1642 tracesSampleRate: 1, 1643 replaysSessionSampleRate: 0.1, 1644 replaysOnErrorSampleRate: 1, 1645 }); 1646 }; 1647</script>
vendor: 1 bytes, line 1647
1647
1648<script src="https://js.sentry-cdn.com/e11825e701a62fbad101855eeaadf46a.min.js" crossorigin="anonymous"></script>
1648<!-- ââ LAUNCHER SCRIPT ââ -->
1649<script> 1650(function () { 1651 var SL = { 1652 signupUrl: 'https://signup-web.homegnome.com/cart/contact-info', 1653 serviceId: 1, 1654 deal: null, 1655 intent: 'poolCleaning', 1656 name: '', 1657 phone: '', 1658 address: { street: '', address2: '', city: '', state: '', zip: '', country: '' }, 1659 queryStringPassThroughString: '', 1660 url_referrer: null, 1661 landingpage: null, 1662 resumingOrder: false, 1663 isLoading: false, 1664 formatted_address: '', 1665 place_chosen: false, 1666 googlePlaceId: null, 1667 fullResultData: {}, 1668 autocomplete: null, 1669 addressSuggestionClicked: false, 1670 addressTypedOnce: false, 1671 nameTypedOnce: false, 1672 phoneTypedOnce: false, 1673 1674 _lsTS: function (event) { 1675 var data = event.data || {}; 1676 data.appName = 'www'; 1677 data.view = 'signup-alpine-v1-launch'; 1678 data.target = event.target; 1679 if (window.analytics && typeof window.analytics.track === 'function') { 1680 window.analytics.track(event.name || 'unknown', data); 1681 } 1682 }, 1683 getCookie: function (name) { 1684 if (!window.Cookies) return null; 1685 try { return JSON.parse(window.Cookies.get(name)); } catch (e) { return null; } 1686 }, 1687 getRawCookie: function (name) { 1688 if (!window.Cookies) return null; 1689 try { return window.Cookies.get(name); } catch (e) { return null; } 1690 }, 1691 setCookie: function (name, value, opts) { 1692 if (!window.Cookies) return; 1693 try { window.Cookies.set(name, JSON.stringify(value), opts || {}); } catch (e) {} 1694 }, 1695 parseQuerystring: function () { 1696 var self = this; 1697 new URLSearchParams(window.location.search).forEach(function (value, key) { 1698 if (key !== 'promo' && key !== 'deal') { 1699 var wwwKey = 'www_' + key; 1700 if (window.Cookies) { 1701 if (window.Cookies.get(wwwKey)) window.Cookies.remove(wwwKey); 1702 window.Cookies.set(wwwKey, value, { expires: 30 }); 1703 } 1704 } 1705 if (key !== 'name' && key !== 'phone' && key !== 'address' && key !== 'intent') { 1706 self.queryStringPassThroughString += '&' + key + '=' + value; 1707 } 1708 }); 1709 }, 1710 setLandingPageCookie: function () { 1711 if (window.Cookies && !window.Cookies.get('www_landingpage')) { 1712 window.Cookies.set('www_landingpage', window.location.hostname + window.location.pathname, { expires: 30 }); 1713 } 1714 }, 1715 getLandingPage: function () { 1716 return this.getRawCookie('www_landingpage') || (window.location.hostname + window.location.pathname); 1717 }, 1718 setUrlReferrerCookie: function () { 1719 var currentReferrer = document.referrer || document.location.href; 1720 var refHostname = currentReferrer.split('/')[2] || ''; 1721 if (window.Cookies) { 1722 if (refHostname.indexOf(window.location.hostname) > -1) { 1723 if (window.Cookies.get('www_url_referrer')) { 1724 window.Cookies.set('www_url_referrer', currentReferrer, { expires: 30 }); 1725 } 1726 } else { 1727 if (window.Cookies.get('www_url_referrer')) window.Cookies.remove('www_url_referrer'); 1728 window.Cookies.set('www_url_referrer', currentReferrer, { expires: 30 }); 1729 } 1730 } 1731 }, 1732 getUrlReferrer: function () { 1733 return (window.Cookies && window.Cookies.get('www_url_referrer')) 1734 ? window.Cookies.get('www_url_referrer') 1735 : document.location.href; 1736 }, 1737 addressResetData: function () { 1738 this.address = { address2: '', city: '', state: '', zip: '', country: '' }; 1739 }, 1740 addressInputHasSelectableOptions: function () { 1741 return !!document.getElementsByClassName('pac-item')[0]; 1742 }, 1743 phoneMask: function (input) { 1744 input.addEventListener('input', function () { 1745 var v = input.value.replace(/\D/g, '').substring(0, 10); 1746 var out = v.length > 6 1747 ? v.substring(0, 3) + '-' + v.substring(3, 6) + '-' + v.substring(6) 1748 : v.length > 3 ? v.substring(0, 3) + '-' + v.substring(3) : v; 1749 input.value = out; 1750 }); 1751 }, 1752 showNamePhone: function () { 1753 document.getElementById('sl-name-wrap').style.display = 'block'; 1754 document.getElementById('sl-phone-wrap').style.display = 'block'; 1755 }, 1756 hideNamePhone: function () { 1757 document.getElementById('sl-name-wrap').style.display = 'none'; 1758 document.getElementById('sl-phone-wrap').style.display = 'none'; 1759 }, 1760 addError: function (el, message) { 1761 if (!el || el.offsetParent === null) return; 1762 if (typeof tippy === 'undefined') return; 1763 var t = el._tippy; 1764 if (!t) { 1765 t = tippy(el, { 1766 content: message, hideOnClick: false, trigger: 'manual', 1767 placement: 'bottom-start', theme: 'error', offset: [0, 16], 1768 onClickOutside: function (instance) { instance.destroy(); }, 1769 }); 1770 } else { t.setContent(message); } 1771 t.show(); 1772 }, 1773 removeError: function (el) { 1774 if (el && el._tippy) el._tippy.destroy(); 1775 }, 1776 showError: function (id, msg) { this.addError(document.getElementById(id), msg); }, 1777 clearError: function (id) { this.removeError(document.getElementById(id)); }, 1778 showAddressError: function (msg) { this.addError(document.getElementById('sl-address'), msg); }, 1779 clearAddressError:function () { this.removeError(document.getElementById('sl-address')); }, 1780 updateResumeUI: function () { 1781 document.getElementById('sl-form').style.display = this.resumingOrder ? 'none' : ''; 1782 document.getElementById('sl-resume').style.display = this.resumingOrder ? 'block' : 'none'; 1783 }, 1784 updateLoadingUI: function () { 1785 var btn = document.getElementById('sl-submit-btn'); 1786 if (btn) btn.disabled = true; 1787 document.getElementById('sl-spinner').style.display = 'inline'; 1788 document.getElementById('sl-btn-text').style.display = 'none'; 1789 document.getElementById('sl-resume-spinner').style.display = 'inline'; 1790 document.getElementById('sl-resume-text').style.display = 'none'; 1791 ['sl-address-wrap', 'sl-name-wrap', 'sl-phone-wrap'].forEach(function (id) { 1792 var el = document.getElementById(id); 1793 if (el) el.style.background = '#f3f4f6'; 1794 }); 1795 }, 1796 validate: function () { 1797 var isValid = true; 1798 if (!this.place_chosen) { 1799 this.showAddressError( 1800 this.formatted_address === '' 1801 ? 'Please enter your address.' 1802 : 'Choose an address or type it manually for better results.' 1803 ); 1804 if (isValid) document.getElementById('sl-address').focus(); 1805 isValid = false;
1806 } else { this.clearAddressError(); } 1807 var nameEl = document.getElementById('sl-name'); 1808 if (nameEl && nameEl.offsetParent !== null && nameEl.value === '') { 1809 this.showError('sl-name', 'Please enter your name.'); 1810 if (isValid) nameEl.focus(); 1811 isValid = false; 1812 return isValid; 1813 } else { this.clearError('sl-name'); } 1814 var phoneEl = document.getElementById('sl-phone'); 1815 if (phoneEl && phoneEl.offsetParent !== null) { 1816 var phoneValid = /^\d{10}$/.test(phoneEl.value.replace(/\D/g, '')); 1817 if (!phoneValid) { 1818 this.showError('sl-phone', 'Please enter a valid phone number.'); 1819 if (isValid) phoneEl.focus(); 1820 isValid = false; 1821 } else { this.clearError('sl-phone'); } 1822 } 1823 return isValid; 1824 }, 1825 submit: function () { 1826 if (this.isLoading) return; 1827 if (!this.validate()) { this.resumingOrder = false; this.updateResumeUI(); return; } 1828 this.isLoading = true; 1829 this.updateLoadingUI(); 1830 var nameEl = document.getElementById('sl-name'); 1831 var phoneEl = document.getElementById('sl-phone'); 1832 if (nameEl) this.name = nameEl.value; 1833 if (phoneEl) this.phone = phoneEl.value; 1834 var url = this.signupUrl + '?' 1835 + (this.formatted_address ? 'address=' + encodeURIComponent(this.formatted_address) : '') 1836 + (this.name ? '&name=' + encodeURIComponent(this.name) : '') 1837 + (this.phone ? '&phone=' + encodeURIComponent(this.phone) : '') 1838 + (this.url_referrer ? '&url_referrer=' + encodeURIComponent(this.url_referrer) : '') 1839 + (this.landingpage ? '&landingpage=' + encodeURIComponent(this.landingpage) : '') 1840 + (this.serviceId <= 1 || this.intent === 'treatment' ? '&lead=0' : '&lead=1') 1841 + (this.intent ? '&intent=' + encodeURIComponent(this.intent) : '') 1842 + (this.deal ? '&deal=' + encodeURIComponent(this.deal) : '') 1843 + (this.place_chosen ? '&googlePlace=true' : '') 1844 + (this.googlePlaceId ? '&googlePlaceId='+ encodeURIComponent(this.googlePlaceId) : '') 1845 + (window.lsSegmentAnonId ? '&segid=' + encodeURIComponent(window.lsSegmentAnonId) : '') 1846 + this.queryStringPassThroughString; 1847 try { 1848 this.setCookie('ls.saved_order_module.address', { 1849 street: this.address.street, city: this.address.city, 1850 state: this.address.state, zip: this.address.zip, 1851 googlePlaceId: this.googlePlaceId, 1852 }); 1853 this.setCookie('ls.saved_order_module.name', this.name); 1854 this.setCookie('ls.saved_order_module.phone', this.phone); 1855 } catch (e) {} 1856 try { 1857 this._lsTS({ 1858 target: this.resumingOrder ? 'signup-form--resume-order-button' : 'signup-form--submitting-form', 1859 name: 'submitting', data: { value: url }, 1860 }); 1861 if (typeof window.google_trackConversion === 'function') { window.goog_report_conversion(url); return; } 1862 } catch (e) { console.error(e); } 1863 window.location = url; 1864 }, 1865 checkResumeSignup: function () { 1866 this.isLoading = false; 1867 var self = this; 1868 setTimeout(function () { 1869 self.resumingOrder = !!(self.formatted_address && self.validate()); 1870 self.updateResumeUI(); 1871 }, 0); 1872 }, 1873 initAutocomplete: function () { 1874 var self = this; 1875 var input = document.getElementById('sl-address'); 1876 if (!input) return; 1877 if (window.google && window.google.maps && window.google.maps.places) { 1878 self.autocomplete = new window.google.maps.places.Autocomplete(input, { types: ['address'] }); 1879 window.google.maps.event.addListener(self.autocomplete, 'place_changed', function () { 1880 self.handlePlaceChanged(); 1881 }); 1882 self.setupAddressAutocompleteObserver(); 1883 } else { 1884 var attempts = 0; 1885 var poll = setInterval(function () { 1886 attempts++; 1887 if (window.google && window.google.maps && window.google.maps.places) { 1888 clearInterval(poll); 1889 if (!self.autocomplete) { 1890 self.autocomplete = new window.google.maps.places.Autocomplete(input, { types: ['address'] }); 1891 window.google.maps.event.addListener(self.autocomplete, 'place_changed', function () { 1892 self.handlePlaceChanged(); 1893 }); 1894 self.setupAddressAutocompleteObserver(); 1895 } 1896 } else if (attempts >= 20) { 1897 clearInterval(poll); 1898 console.warn('Google Places did not load within 10s'); 1899 } 1900 }, 500); 1901 } 1902 }, 1903 handlePlaceChanged: function () { 1904 var place = this.autocomplete.getPlace(); 1905 var inputStreetNum = this.formatted_address.split(' ', 1)[0]; 1906 var placeStreetNum = place.formatted_address.split(' ', 1)[0]; 1907 var prefix = placeStreetNum.startsWith(inputStreetNum) ? '' : inputStreetNum + ' '; 1908 this._lsTS({ name: 'Customer Address Clicked', target: 'google-autocomplete' }); 1909 this.fullResultData = place; 1910 this.formatted_address = prefix + place.formatted_address; 1911 this.addressResetData(); 1912 document.getElementById('sl-address').value = this.formatted_address; 1913 var frag = document.createRange().createContextualFragment(place.adr_address); 1914 var qs = function (sel) { var el = frag.querySelector(sel); return el ? el.innerHTML : ''; }; 1915 this.address.street = (prefix || '') + qs('.street-address'); 1916 this.address.address2 = qs('.extended-address'); 1917 this.address.city = qs('.locality'); 1918 this.address.state = qs('.region'); 1919 this.address.zip = qs('.postal-code'); 1920 this.address.country = qs('.country-name'); 1921 this.place_chosen = true; 1922 this.googlePlaceId = place.place_id; 1923 document.getElementById('sl-clear').style.display = 'block'; 1924 this.showNamePhone(); 1925 this.clearAddressError(); 1926 var self = this; 1927 setTimeout(function () { 1928 var n = document.getElementById('sl-name'); 1929 if (n) { self.clearAddressError(); n.focus(); } 1930 }, 0); 1931 }, 1932 setupAddressAutocompleteObserver: function () { 1933 var self = this; 1934 var obs = new MutationObserver(function (m, o) { 1935 try { 1936 var pac = document.querySelector('.pac-container'); 1937 if (pac) { self.observeAutocompleteVisibility(pac); self.handleAddressPacClick(pac); o.disconnect(); } 1938 } catch (e) { o.disconnect(); } 1939 }); 1940 obs.observe(document.body, { childList: true, subtree: true }); 1941 }, 1942 observeAutocompleteVisibility: function (pac) { 1943 var self = this; 1944 new MutationObserver(function () { 1945 if (pac.style.display !== 'none' && pac.childElementCount > 0) { 1946 self._lsTS({ name: 'Customer Address List Viewed', target: 'google-autocomplete', data: { url: window.location.href } }); 1947 } 1948 }).observe(pac, { attributes: true }); 1949 }, 1950 handleAddressPacClick: function (pac) { 1951 var self = this; 1952 pac.addEventListener('mousedown', function (e) { 1953 if (e.target.closest('.pac-item')) self.addressSuggestionClicked = true; 1954 }); 1955 }, 1956 init: function () { 1957 var self = this; 1958 this.parseQuerystring(); 1959 this.setLandingPageCookie(); 1960 this.landingpage = this.getLandingPage(); 1961 this.setUrlReferrerCookie(); 1962 this.url_referrer = this.getUrlReferrer();
1963 var urlParams = new URLSearchParams(window.location.search); 1964 var qDeal = urlParams.get('deal'); 1965 if (qDeal) { this.deal = qDeal; if (window.Cookies) window.Cookies.set('www_deal', qDeal, { expires: 30 }); } 1966 var sName = this.getCookie('ls.saved_order_module.name') || this.getCookie('www_name'); 1967 if (sName) { this.name = sName; var n = document.getElementById('sl-name'); if (n) n.value = sName; } 1968 var sPhone = this.getCookie('ls.saved_order_module.phone') || this.getCookie('www_phone'); 1969 if (sPhone) { this.phone = sPhone; var p = document.getElementById('sl-phone'); if (p) p.value = sPhone; } 1970 var sDeal = this.getCookie('ls.saved_order_module.deal') || this.getCookie('www_deal'); 1971 if (sDeal && !this.deal) this.deal = sDeal; 1972 try { 1973 var rawAddr = this.getRawCookie('ls.saved_order_module.address'); 1974 if (rawAddr) { 1975 var parsed = JSON.parse(rawAddr); 1976 if (parsed.street && parsed.city && parsed.state && parsed.zip) { 1977 this.formatted_address = parsed.street + ', ' + parsed.city + ', ' + parsed.state + ' ' + parsed.zip; 1978 this.address = parsed; 1979 this.place_chosen = true; 1980 this.googlePlaceId = parsed.googlePlaceId; 1981 var addrEl = document.getElementById('sl-address'); 1982 if (addrEl) addrEl.value = this.formatted_address; 1983 document.getElementById('sl-clear').style.display = 'block'; 1984 this.showNamePhone(); 1985 } 1986 } 1987 } catch (e) { console.debug(e); } 1988 var qName = urlParams.get('name'); 1989 if (qName) { this.name = qName; var n2 = document.getElementById('sl-name'); if (n2) n2.value = qName; } 1990 var qPhone = urlParams.get('phone'); 1991 if (qPhone) { this.phone = qPhone; var p2 = document.getElementById('sl-phone'); if (p2) p2.value = qPhone; } 1992 var phoneInput = document.getElementById('sl-phone'); 1993 if (phoneInput) this.phoneMask(phoneInput); 1994 setTimeout(function () { 1995 if (self.formatted_address && self.validate()) { 1996 self.resumingOrder = true; 1997 self._lsTS({ name: 'Customer Resume Signup Viewed' }); 1998 self.updateResumeUI(); 1999 } 2000 }, 0); 2001 this.initAutocomplete(); 2002 window.addEventListener('pageshow', function () { self.checkResumeSignup(); }); 2003 }, 2004 }; 2005 2006 window._slTS = function (e) { SL._lsTS(e); }; 2007 window.slAddressFocused = function () { 2008 document.getElementById('sl-address').setAttribute('autocomplete', 'do-not-autofill'); 2009 if (SL.formatted_address !== '' && SL.addressInputHasSelectableOptions()) SL.clearAddressError(); 2010 SL._lsTS({ name: 'focus', target: 'signup-form--address-input' }); 2011 }; 2012 window.slAddressInput = function (val) { 2013 SL.formatted_address = val; 2014 document.getElementById('sl-clear').style.display = val ? 'block' : 'none'; 2015 if (!val) { SL.place_chosen = false; SL.formatted_address = ''; } 2016 if (!SL.addressTypedOnce && val) { 2017 SL.addressTypedOnce = true; 2018 SL._lsTS({ name: 'Customer Address Typed', target: 'signup-form--address-input', data: { url: window.location.href } }); 2019 } 2020 }; 2021 window.slAddressBlurred = function () { 2022 if (SL.addressSuggestionClicked) { SL.addressSuggestionClicked = false; return; } 2023 if (SL.formatted_address !== '' && !SL.place_chosen) { 2024 SL.showAddressError( 2025 !SL.addressInputHasSelectableOptions() 2026 ? 'Address not recognized. If auto-filled, try typing it manually.' 2027 : 'Choose an address or type it manually for better results.' 2028 ); 2029 } 2030 SL._lsTS({ name: 'blur', target: 'signup-form--address-input' }); 2031 }; 2032 window.slClearAddress = function () { 2033 document.getElementById('sl-address').value = ''; 2034 document.getElementById('sl-clear').style.display = 'none'; 2035 SL.hideNamePhone(); 2036 SL.place_chosen = false; 2037 SL.formatted_address = ''; 2038 SL.googlePlaceId = null; 2039 }; 2040 window.slNameFocused = function () { SL._lsTS({ name: 'focus', target: 'signup-form--name-input' }); }; 2041 window.slNameTyped = function () { 2042 SL.name = document.getElementById('sl-name').value; 2043 SL.clearError('sl-name'); 2044 if (!SL.nameTypedOnce) { SL.nameTypedOnce = true; SL._lsTS({ name: 'Customer Name Typed', target: 'signup-form--name-input' }); } 2045 }; 2046 window.slPhoneFocused = function () { SL._lsTS({ name: 'focus', target: 'signup-form--phone-input' }); }; 2047 window.slPhoneTyped = function () { 2048 SL.phone = document.getElementById('sl-phone').value; 2049 SL.clearError('sl-phone'); 2050 if (!SL.phoneTypedOnce) { SL.phoneTypedOnce = true; SL._lsTS({ name: 'Customer Phone Typed', target: 'signup-form--phone-input' }); } 2051 }; 2052 window.slSubmit = function () { SL.submit(); }; 2053 2054 if (document.readyState === 'loading') { 2055 document.addEventListener('DOMContentLoaded', function () { SL.init(); }); 2056 } else { 2057 SL.init(); 2058 } 2059})(); 2060</script>
2060 2061 2062
2063<script> 2064// ââ SCROLL ANIMATIONS ââ 2065const animEls = document.querySelectorAll('.anim'); 2066const io = new IntersectionObserver((entries) => { 2067 entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); io.unobserve(e.target); } }); 2068}, { threshold: 0.08 }); 2069animEls.forEach(el => io.observe(el)); 2070 2071// ââ SA SUBMIT ââ 2072function saSubmit() { 2073 var val = document.getElementById('sa-address').value.trim(); 2074 if (!val) { 2075 document.getElementById('sa-result').textContent = 'Please enter your address.'; 2076 document.getElementById('sa-address').focus(); 2077 return; 2078 } 2079 var mainInput = document.getElementById('sl-address'); 2080 if (mainInput) { 2081 mainInput.value = val; 2082 if (typeof slAddressInput === 'function') slAddressInput(val); 2083 } 2084 document.getElementById('services').scrollIntoView({ behavior: 'smooth' }); 2085 setTimeout(function () { if (mainInput) mainInput.focus(); }, 600); 2086} 2087 2088// ââ FAQ TOGGLE ââ 2089function toggleFaq(btn) { 2090 var answer = btn.nextElementSibling; 2091 var isOpen = btn.classList.contains('open'); 2092 document.querySelectorAll('.faq-q').forEach(function(q) { 2093 q.classList.remove('open'); 2094 q.nextElementSibling.classList.remove('open'); 2095 }); 2096 if (!isOpen) { 2097 btn.classList.add('open'); 2098 answer.classList.add('open'); 2099 } 2100} 2101</script>
2101 2102 2103<!-- ââ BEFORE AFTER SCRIPT ââ -->
2104<script> 2105 (function() { 2106 function initSlider(el) { 2107 var afterClip = el.querySelector('.ba-after-clip'); 2108 var divider = el.querySelector('.ba-divider'); 2109 var pct = 50; 2110 var dragging = false; 2111 var startX = 0; 2112 var startY = 0; 2113 var isHorizontal = null; 2114 2115 function setPos(clientX) { 2116 var rect = el.getBoundingClientRect(); 2117 var raw = (clientX - rect.left) / rect.width * 100; 2118 pct = Math.min(95, Math.max(5, raw)); 2119 afterClip.style.clipPath = 'inset(0 ' + (100 - pct) + '% 0 0)'; 2120 divider.style.left = pct + '%'; 2121 } 2122 2123 // ââ Mouse ââ 2124 el.addEventListener('mousedown', function(e) { 2125 dragging = true; 2126 setPos(e.clientX); 2127 e.preventDefault(); 2128 }); 2129 window.addEventListener('mousemove', function(e) { 2130 if (dragging) setPos(e.clientX); 2131 }); 2132 window.addEventListener('mouseup', function() { 2133 dragging = false; 2134 }); 2135 2136 // ââ Touch ââ 2137 el.addEventListener('touchstart', function(e) { 2138 dragging = true; 2139 startX = e.touches[0].clientX; 2140 startY = e.touches[0].clientY; 2141 isHorizontal = null; 2142 }, { passive: true }); 2143 2144 el.addEventListener('touchmove', function(e) { 2145 if (!dragging) return; 2146 var dx = e.touches[0].clientX - startX; 2147 var dy = e.touches[0].clientY - startY; 2148 if (isHorizontal === null) { 2149 isHorizontal = Math.abs(dx) > Math.abs(dy); 2150 } 2151 if (isHorizontal) { 2152 e.preventDefault(); 2153 setPos(e.touches[0].clientX); 2154 } 2155 }, { passive: false }); 2156 2157 el.addEventListener('touchend', function() { 2158 dragging = false; 2159 }); 2160 } 2161 2162 document.querySelectorAll('[data-ba]').forEach(initSlider); 2163 })(); 2164 </script>
2164 2165 2166
2166<script> 2167function saSubmit() { 2168 var val = document.getElementById('sa-address').value.trim(); 2169 if (!val) { 2170 document.getElementById('sa-result').textContent = 'Please enter your address.'; 2171 document.getElementById('sa-address').focus(); 2172 return; 2173 } 2174 // Pre-fill the main launcher with the typed address, scroll up to it, focus 2175 var mainInput = document.getElementById('sl-address'); 2176 if (mainInput) { 2177 mainInput.value = val; 2178 // Trigger the launcher's input handler so state updates 2179 if (typeof slAddressInput === 'function') slAddressInput(val); 2180 } 2181 document.getElementById('services').scrollIntoView({ behavior: 'smooth' }); 2182 setTimeout(function () { 2183 if (mainInput) mainInput.focus(); 2184 }, 600); 2185} 2186</script>
2186 </body></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.