PageSourceSearch

https://homegnome.com/services/pool-cleaning

html homegnome.com collected 2026-10-04 04:10:08 UTC 149,717 bytes, 2,186 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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;">&times;</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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; data rates may apply.
1615    </div>
1616    <div class="footer-copy">&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.