PageSourceSearch

https://lmsgaragedoors.com/residential

html lmsgaragedoors.com collected 2026-10-06 18:00:51 UTC 63,513 bytes, 1,253 lines download raw bytes

1<!doctype html>
2<html lang="en" data-palette="warm">
3<head>
4  <meta charset="utf-8" />
5  <meta name="viewport" content="width=device-width, initial-scale=1" />
6  <title>Residential Garage Door Repair, Install & Service Sacramento — LMS</title>
7  <meta name="description" content="Sacramento residential garage door repair, new door install, opener replacement, tune-ups, 24/7 emergency. From $139. Call (916) 304-7126.">
8  <link rel="canonical" href="https://lmsgaragedoors.com/residential">
9
10  <link rel="preload" as="image" href="/assets/services/residential-hero-modern-glass.webp" fetchpriority="high">
11
12  
12<script type="application/ld+json">
13  {
14    "@context": "https://schema.org",
15    "@type": "BreadcrumbList",
16    "itemListElement": [
17      { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lmsgaragedoors.com/" },
18      { "@type": "ListItem", "position": 2, "name": "Services", "item": "https://lmsgaragedoors.com/services" },
19      { "@type": "ListItem", "position": 3, "name": "Residential", "item": "https://lmsgaragedoors.com/residential" }
20    ]
21  }
22  </script>
22
23  
23<script type="application/ld+json">
24  {
25    "@context": "https://schema.org",
26    "@type": "Service",
27    "serviceType": "Residential garage door repair, installation, and maintenance",
28    "provider": {
29        "@type": "HomeAndConstructionBusiness",
30        "@id": "https://lmsgaragedoors.com/#business",
31        "name": "LMS Garage Doors",
32        "image": "https://lmsgaragedoors.com/assets/hero/07-hero-modern-farmhouse.webp",
33        "telephone": "+1-916-899-2333",
34        "priceRange": "$$",
35        "address": {
36          "@type": "PostalAddress",
37          "streetAddress": "8084 Old Auburn Rd, Ste C",
38          "addressLocality": "Citrus Heights",
39          "addressRegion": "CA",
40          "postalCode": "95610",
41          "addressCountry": "US"
42        }
43      },
44    "areaServed": [
45      { "@type": "AdministrativeArea", "name": "Sacramento County, CA" },
46      { "@type": "AdministrativeArea", "name": "Placer County, CA" },
47      { "@type": "AdministrativeArea", "name": "El Dorado County, CA" }
48    ],
49    "hasOfferCatalog": {
50      "@type": "OfferCatalog",
51      "name": "Residential garage door services",
52      "itemListElement": [
53        {
54          "@type": "Offer",
55          "itemOffered": { "@type": "Service", "name": "Garage door repair" },
56          "priceSpecification": { "@type": "PriceSpecification", "priceCurrency": "USD", "minPrice": "139" }
57        },
58        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Garage door opener installation" } },
59        {
60          "@type": "Offer",
61          "itemOffered": { "@type": "Service", "name": "New garage door installation" },
62          "priceSpecification": { "@type": "PriceSpecification", "priceCurrency": "USD", "minPrice": "1050" }
63        },
64        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Garage door maintenance / tune-up" } },
65        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "24/7 emergency garage door repair" } }
66      ]
67    }
68  }
69  </script>
69
70  
70<script type="application/ld+json">
71  {
72    "@context": "https://schema.org",
73    "@type": "FAQPage",
74    "mainEntity": [
75      {
76        "@type": "Question",
77        "name": "How fast can you actually come out?",
78        "acceptedAnswer": { "@type": "Answer", "text": "Same-day for most repairs across Sacramento, Placer & El Dorado. Emergency calls often dispatched within the hour. New-door installs and special-order parts run on a normal schedule (usually 1–2 weeks)." }
79      },
80      {
81        "@type": "Question",
82        "name": "Will you give me a price over the phone?",
83        "acceptedAnswer": { "@type": "Answer", "text": "For most common repairs, yes — we'll ballpark on the call. The tech confirms with a written quote on-site before any work starts. Custom doors and commercial jobs need an on-site measurement first; we'll tell you up-front if that's the case." }
84      },
85      {
86        "@type": "Question",
87        "name": "Do you carry common parts on the truck?",
88        "acceptedAnswer": { "@type": "Answer", "text": "Yes — most spring, roller, hinge, sensor, and opener jobs are done from the truck. We stock parts for the common door brands and opener manufacturers. Special-order panels and custom doors are scheduled separately." }
89      },
90      {
91        "@type": "Question",
92        "name": "Do I need to be home for the tech to give me a quote?",
93        "acceptedAnswer": { "@type": "Answer", "text": "For most repairs, yes — the tech needs to inspect the door. For new-door consultations we can usually measure and quote with you on the phone briefly while the tech's there. Tell us when you book and we'll work with your schedule." }
94      },
95      {
96        "@type": "Question",
97        "name": "Will my opener still work after you replace the spring?",
98        "acceptedAnswer": { "@type": "Answer", "text": "Usually yes — but the opener may have been straining for a while before the spring fully broke. When we replace the spring, we test the opener and tell you if it's been damaged. We'll never replace an opener you don't need; we'll also never let you drive away thinking it's fine when it's not." }
99      }
100    ]
101  }
102  </script>
102
103
104  <!-- Favicon: PNG default; site-nav.js swaps to favicon-dark.png in dark mode
105       (SVG media queries don't work in Chrome — JS approach works everywhere) -->
106  <link rel="icon" href="/assets/logos/favicon-light.png" type="image/png">
107  <link rel="apple-touch-icon" href="/assets/logos/apple-touch-icon.png">
108
109  <!-- ============= SHARED <head> CHUNK =============
110       SHARED PARTIAL — fonts, stylesheets, third-party scripts.
111       Page-specific <head> stuff (title, meta description, canonical, og:tags,
112       JSON-LD if applicable) stays in the page source above this marker. -->
113  <!-- Single CSS bundle (fonts + tokens + site-chrome + legal, concatenated by
114       build.mjs at deploy time). One HTTP request instead of four for the
115       always-loaded stylesheets. Page-specific stylesheets (article.css,
116       city-page.css, lp.css) are loaded by their own pages. -->
117  <link rel="stylesheet" href="/styles/bundle.css?v=3c102694">
118
119  <!-- Cloudflare Turnstile is loaded lazily by quote-form.js / paid-quote-form.js
120       (on idle, modal-open, or form-field focus) so it's off the critical path. -->
121
122
123
124  <style>
125    /* ===== /residential/ — page-specific ===== */
126
127    /* —— Sub-nav (sticky in-page TOC) —— */
128    .subnav {
129      position: sticky;
130      top: 80px;
131      z-index: 20;
132      background: var(--paper);
133      border-bottom: 1px solid var(--ink-line);
134    }
135    .subnav-inner {
136      display: flex; align-items: center; gap: 24px;
137      overflow-x: auto;
138      padding: 14px 0;
139      scrollbar-width: none;
140    }
141    .subnav-inner::-webkit-scrollbar { display: none; }
142    .subnav-label {
143      flex-shrink: 0;
144      font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase;
145      color: var(--gold-deep); font-weight: 600;
146      padding-right: 8px;
147      border-right: 1px solid var(--ink-line);
148    }
149    .subnav-link {
150      flex-shrink: 0;
151      text-decoration: none;
152      color: var(--ink-soft);
153      font-size: 14px; font-weight: 500;
154      padding: 4px 0;
155      transition: color .2s ease;
156    }
157    .subnav-link:hover { color: var(--rust); }
158
159    /* —— Anchor service section (repeating pattern) —— */
160    .svc {
161      padding: var(--section-y) 0;
162      border-bottom: 1px solid var(--ink-line);
163    }
164    .svc:nth-child(odd) { background: var(--cream); }
165    .svc:nth-child(even) { background: var(--paper); }
166    .svc-inner {
167      display: grid;
168      grid-template-columns: 1fr 1.2fr;
169      gap: 80px;
170      align-items: start;
171    }
172    .svc-inner.is-reverse { grid-template-columns: 1.2fr 1fr; }
173    .svc-inner.is-reverse .svc-img { order: 2; }
174    .svc-img {
175      position: relative;
176      aspect-ratio: 4/3;
177    }
178    #gates .svc-img { aspect-ratio: 1920/984; }
179    .svc-img img {
180      width: 100%; height: 100%;
181      object-fit: cover;
182    }
183    .svc-img .pin {
184      position: absolute;
185      bottom: 16px; left: 16px;
186      background: rgba(10,10,10,0.85);
187      color: var(--paper);
188      padding: 8px 14px;
189      font-size: 11px;
190      letter-spacing: 0.04em;
191      border-left: 2px solid var(--gold);
192    }
193    .svc-content .eyebrow { color: var(--gold-deep); }
194    .svc-content h2 {
195      font-size: clamp(32px, 3.6vw, 48px);
196      font-weight: 460;
197      letter-spacing: -0.02em;
198      line-height: 1.05;
199      margin-top: 14px;
200      max-width: 14ch;
201    }
202    .svc-content h2 em { font-style: italic; color: var(--gold-deep); }
203    .svc-lede {
204      font-size: 18px;
205      line-height: 1.55;
206      color: var(--ink-soft);
207      margin-top: 22px;
208      max-width: 50ch;
209    }
210    .svc-list {
211      margin-top: 22px;
212      padding-top: 22px;
213      border-top: 1px solid var(--ink-line);
214      display: grid;
215      grid-template-columns: repeat(2, 1fr);
216      gap: 10px 24px;
217      list-style: none;
218      padding-left: 0;
219    }
220    .svc-list li {
221      font-size: 14.5px; color: var(--ink-soft);
222      padding-left: 18px; position: relative;
223    }
224    .svc-list li::before {
225      content: ""; position: absolute;
226      left: 0; top: 9px;
227      width: 8px; height: 1px; background: var(--gold);
228    }
229    .svc-meta {
230      margin-top: 28px;
231      padding: 18px 22px;
232      background: var(--cream-deep);
233      border-left: 3px solid var(--gold);
234      font-size: 14.5px;
235      color: var(--ink-soft);
236    }
237    .svc-meta strong { color: var(--ink); font-weight: 600; }
238    .svc-actions {
239      margin-top: 28px;
240      display: flex; gap: 14px; flex-wrap: wrap;
241    }
242    .svc-deeplink {
243      display: inline-flex; align-items: center; gap: 8px;
244      font-size: 14px; font-weight: 600;
245      color: var(--ink); text-decoration: none;
246      padding-bottom: 4px;
247      border-bottom: 1px solid var(--ink);
248    }
249    .svc-deeplink:hover { color: var(--rust); border-color: var(--rust); }
250    .svc-brands {
251      margin-top: 22px;
252      display: flex; gap: 10px; flex-wrap: wrap;
253    }
254    .svc-brand-chip {
255      background: var(--paper);
256      border: 1px solid var(--ink-line);
257      padding: 8px 14px;
258      font-size: 12.5px; font-weight: 600;
259      color: var(--ink-soft);
260      letter-spacing: 0.02em;
261    }
262
263    /* —— Brands strip —— */
264    .brands-strip {
265      padding: var(--section-y-tight) 0;
266      background: var(--paper);
267      border-top: 1px solid var(--ink-line);
268      border-bottom: 1px solid var(--ink-line);
269    }
270    .brands-inner {
271      display: grid;
272      grid-template-columns: 1fr 3fr;
273      gap: 56px;
274      align-items: center;
275    }
276    .brands-head h3 {
277      font-family: var(--display);
278      font-size: 22px; font-weight: 460;
279      margin-top: 10px;
280      max-width: 14ch; line-height: 1.2;
281    }
282    .brands-row {
283      display: grid;
284      grid-template-columns: repeat(6, 1fr);
285      align-items: center;
286      gap: 32px;
287    }
288    .brands-row img { max-height: 42px; width: auto; margin: 0 auto; }
289
290    /* —— FAQ —— */
291    .faq {
292      padding: var(--section-y) 0;
293      background: var(--cream);
294    }
295    .faq-inner {
296      display: grid;
297      grid-template-columns: 1fr 1.6fr;
298      gap: 80px;
299      align-items: start;
300    }
301    .faq-head h2 em { font-style: italic; color: var(--rust); }
302    .faq-head p { color: var(--ink-mute); margin-top: 18px; max-width: 32ch; }
303    .faq-list { border-top: 1px solid var(--ink-line); }
304    .faq-item {
305      border-bottom: 1px solid var(--ink-line);
306      display: grid;
307      grid-template-columns: 32px 1fr 24px;
308      gap: 20px;
309      align-items: start;
310      cursor: pointer;
311      padding: 22px 0;
312      transition: background .2s ease;
313    }
314    .faq-item:hover .faq-q { color: var(--rust); }
315    .faq-q {
316      font-family: var(--display); font-weight: 460;
317      font-size: 21px; letter-spacing: -0.01em;
318      line-height: 1.25;
319      transition: color .2s ease;
320    }
321    .faq-a {
322      color: var(--ink-mute);
323      font-size: 15.5px; line-height: 1.6;
324      margin-top: 14px;
325      max-height: 0; overflow: hidden;
326      transition: max-height .35s ease, margin-top .35s ease;
327    }
328    .faq-a strong { color: var(--ink); font-weight: 600; }
329    .faq-num {
330      font-family: var(--body);
331      font-size: 12px; letter-spacing: 0.08em;
332      color: var(--gold-deep); font-weight: 600; padding-top: 6px;
333    }
334    .faq-icon {
335      font-family: var(--display); font-size: 22px;
336      color: var(--ink-mute);
337      transition: transform .25s ease;
338      padding-top: 2px; text-align: right;
339    }
340    .faq-item.is-open .faq-icon { transform: rotate(45deg); color: var(--rust); }
341    .faq-item.is-open .faq-a { max-height: 500px; margin-top: 14px; }
342
343    /* —— Service area strip (light) —— */
344    .area-strip {
345      padding: var(--section-y-tight) 0;
346      background: var(--paper);
347      border-top: 1px solid var(--ink-line);
348    }
349    .area-strip-inner {
350      display: grid;
351      grid-template-columns: 1fr 2fr;
352      gap: 48px;
353      align-items: center;
354    }
355    .area-strip h3 { font-size: 24px; font-weight: 460; max-width: 14ch; }
356    .area-strip h3 em { font-style: italic; color: var(--rust); }
357    .area-strip p { color: var(--ink-mute); margin-top: 8px; font-size: 14.5px; }
358    .area-cities {
359      font-size: 14.5px; line-height: 1.8;
360      color: var(--ink-soft);
361    }
362    .area-cities strong { color: var(--ink); font-weight: 600; display: block; margin-bottom: 4px; font-size: 13px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--gold-deep); }
363    .area-cities-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
364
365    /* —— Responsive —— */
366    @media (max-width: 1100px) {
367      .svc-inner, .svc-inner.is-reverse { grid-template-columns: 1fr; gap: 32px; }
368      .svc-inner.is-reverse .svc-img { order: 0; }
369      .faq-inner { grid-template-columns: 1fr; gap: 28px; }
370      .brands-inner { grid-template-columns: 1fr; gap: 24px; }
371      .brands-row { grid-template-columns: repeat(3, 1fr); gap: 24px; }
372      .area-strip-inner { grid-template-columns: 1fr; gap: 24px; }
373      .area-cities-grid { grid-template-columns: 1fr; gap: 18px; }
374    }
375    @media (max-width: 760px) {
376      .subnav { top: 0; }
377      .subnav-inner { padding: 10px 0; gap: 16px; }
378      .subnav-label { display: none; }
379      .subnav-link { font-size: 13px; }
380      .svc { padding: 56px 0; }
381      .svc-content h2 { font-size: 28px; max-width: none; }
382      .svc-lede { font-size: 16px; margin-top: 18px; }
383      .svc-list { grid-template-columns: 1fr; gap: 8px; margin-top: 18px; padding-top: 18px; }
384      .svc-meta { padding: 14px 16px; font-size: 14px; margin-top: 22px; }
385      .faq-head h2 { font-size: 28px; }
386      .faq-item { grid-template-columns: 26px 1fr 18px; gap: 12px; padding: 18px 0; }
387      .faq-q { font-size: 17px; }
388      .faq-a { font-size: 14.5px; }
389      .area-strip h3 { font-size: 22px; }
390    }
391  </style>
392</head>
393<body data-palette="warm" data-density="comfortable">
394
395  <!-- ============= HEADER ============= -->
396  <!-- ============= HEADER =============
397       SHARED PARTIAL — do not edit per-page.
398       Fix here, applies everywhere on next build.
399
400       Desktop: full horizontal nav with hover dropdowns (Services / Areas).
401       Mobile (≤760): nav hidden, hamburger reveals a slide-down drawer
402       containing the full nav. JS in scripts/site-nav.js handles toggle. -->
403  <header class="site-header">
404    <div class="container site-header-inner">
405      <a class="brand" href="/">
406        <img class="brand-logo" src="/assets/logos/lms-logo-black.webp" alt="LMS Garage Doors" width="7581" height="7582" fetchpriority="high">
407      </a>
408      <nav class="nav">
409        <div class="nav-item nav-item--has-menu">
410          <a href="/services">Services <span class="caret" aria-hidden="true">▾</span></a>
411          <div class="nav-menu" role="menu">
412            <a role="menuitem" href="/residential">Residential</a>
413            <a role="menuitem" href="/commercial">Commercial</a>
414            <a role="menuitem" href="/gate-repair">
414Gate repair</a>
415            <a role="menuitem" href="/broken-springs">Broken springs</a>
416            <a role="menuitem" href="/wayne-dalton-spring-conversion">Wayne Dalton conversion</a>
417          </div>
418        </div>
419        <div class="nav-item nav-item--has-menu">
420          <a href="/areas-we-serve">Areas we serve <span class="caret" aria-hidden="true">▾</span></a>
421          <div class="nav-menu" role="menu">
422            <a role="menuitem" href="/sacramento">Sacramento</a>
423            <a role="menuitem" href="/citrus-heights">Citrus Heights</a>
424            <a role="menuitem" href="/roseville">Roseville</a>
425            <a role="menuitem" href="/orangevale">Orangevale</a>
426            <a role="menuitem" href="/folsom">Folsom</a>
427            <a role="menuitem" href="/rocklin">Rocklin</a>
428            <a role="menuitem" href="/areas-we-serve" class="nav-menu-all">All service areas →</a>
429          </div>
430        </div>
431        <a href="/resources">Resources</a>
432        <a href="/about">About</a>
433        <a href="/#faq">FAQ</a>
434      </nav>
435      <div class="header-cta">
436        <a class="header-phone" href="tel:9163047126">
437          <span class="dot"></span>(916) 304-7126
438        </a>
439        <a class="btn btn-primary header-quote-btn" href="#quote" data-action="open-quote-form">Get a quote <span class="arrow">→</span></a>
440        <!-- Hamburger — visible on mobile only. Toggles #site-nav-drawer below. -->
441        <button
442          type="button"
443          class="nav-toggle"
444          data-action="toggle-nav"
445          aria-controls="site-nav-drawer"
446          aria-expanded="false"
447          aria-label="Open menu"
448        >
449          <span class="nav-toggle-bar"></span>
450          <span class="nav-toggle-bar"></span>
451          <span class="nav-toggle-bar"></span>
452        </button>
453      </div>
454    </div>
455
456    <!-- ============= MOBILE NAV DRAWER =============
457         Slides down from under the header on mobile. Auto-expanded
458         list (no tap-to-expand sub-menus — nav is small enough). -->
459    <div class="nav-drawer" id="site-nav-drawer" hidden>
460      <div class="nav-drawer-backdrop" data-action="close-nav"></div>
461      <div class="nav-drawer-panel">
462        <nav class="nav-drawer-nav" aria-label="Mobile site navigation">
463          <div class="nav-drawer-group">
464            <a class="nav-drawer-parent" href="/services">Services</a>
465            <ul class="nav-drawer-sub">
466              <li><a href="/residential">Residential</a></li>
467              <li><a href="/commercial">Commercial</a></li>
468              <li><a href="/gate-repair">Gate repair</a></li>
469              <li><a href="/broken-springs">Broken springs</a></li>
470              <li><a href="/wayne-dalton-spring-conversion">Wayne Dalton conversion</a></li>
471            </ul>
472          </div>
473          <div class="nav-drawer-group">
474            <a class="nav-drawer-parent" href="/areas-we-serve">Areas we serve</a>
475            <ul class="nav-drawer-sub">
476              <li><a href="/sacramento">Sacramento</a></li>
477              <li><a href="/citrus-heights">Citrus Heights</a></li>
478              <li><a href="/roseville">Roseville</a></li>
479              <li><a href="/orangevale">Orangevale</a></li>
480              <li><a href="/folsom">Folsom</a></li>
481              <li><a href="/rocklin">Rocklin</a></li>
482              <li><a href="/areas-we-serve" class="is-all">All service areas →</a></li>
483            </ul>
484          </div>
485          <div class="nav-drawer-group nav-drawer-group--flat">
486            <a class="nav-drawer-parent" href="/resources">Resources</a>
487          </div>
488          <div class="nav-drawer-group nav-drawer-group--flat">
489            <a class="nav-drawer-parent" href="/about">About</a>
490          </div>
491          <div class="nav-drawer-group nav-drawer-group--flat">
492            <a class="nav-drawer-parent" href="/#faq">FAQ</a>
493          </div>
494        </nav>
495
496        <div class="nav-drawer-cta">
497          <a class="nav-drawer-phone" href="tel:9163047126">
498            <span class="dot"></span>
499            <span>
500              <span class="nav-drawer-phone-num">(916) 304-7126</span>
501              <span class="nav-drawer-phone-meta">Real person, no phone tree</span>
502            </span>
503          </a>
504          <button type="button" class="btn btn-primary nav-drawer-quote" data-action="open-quote-form">
505            Get a quote <span class="arrow">→</span>
506          </button>
507        </div>
508      </div>
509    </div>
510  </header>
511
512
513  <main id="page-main">
514
515    <!-- ============= PAGE HERO ============= -->
516    <section class="page-hero">
517      <div class="page-hero-img" style="background-image:url('assets/services/residential-hero-modern-glass.webp')"></div>
518      <div class="page-hero-overlay"></div>
519      <div class="container page-hero-inner">
520        <div class="crumbs"><a href="/">Home</a><span class="sep">/</span><a href="/services">Services</a><span class="sep">/</span><span>Residential</span></div>
521        <div class="eyebrow on-dark" style="margin-top:18px">— Residential</div>
522        <h1>Residential Garage Door Repair, Install &amp; Service in <em>Sacramento</em>.</h1>
523        <p class="page-hero-sub">Springs, openers, panels, full installs. <strong>Most repairs from $139, same-day.</strong> Family-owned in Citrus Heights — looking for commercial? <a href="/commercial" style="color:var(--gold)">Go here →</a></p>
524        <div class="page-hero-ctas">
525          <a class="btn btn-on-dark" href="tel:9163047126">Call (916) 304-7126 <span class="arrow">→</span></a>
526          <a class="btn btn-ghost-light" href="#quote" data-action="open-quote-form">Get a free quote</a>
527        </div>
528        <div class="page-hero-trust">
529          <span><span class="stars">★★★★★</span> <strong>5.0</strong> · 500+ Google reviews</span>
530          <span><strong>CA Licensed</strong>, bonded &amp; insured</span>
531          <span><strong>90-day</strong> workmanship guarantee</span>
532        </div>
533      </div>
534    </section>
535
536    <!-- ============= TRUST BAND ============= -->
537    <section class="trust-band">
538      <div class="container">
539        <div class="trust-row">
540          <div class="trust-item">
541            <div class="trust-num">500<sup>+</sup></div>
542            <div class="trust-label">Google reviews</div>
543          </div>
544          <div class="trust-item">
545            <div class="trust-num">5.0<span class="star">★</span></div>
546            <div class="trust-label">Average rating</div>
547          </div>
548          <div class="trust-item">
549            <div class="trust-num">20<sup>yrs</sup></div>
550            <div class="trust-label">In the trade</div>
551          </div>
552          <div class="trust-item">
553            <div class="trust-num">90<sup>d</sup></div>
554            <div class="trust-label">Workmanship guarantee</div>
555          </div>
556          <div class="trust-item">
557            <div class="trust-num">24<span style="font-size:26px">/</span>7</div>
558            <div class="trust-label">Emergency dispatch</div>
559          </div>
560        </div>
561      </div>
562    </section>
563
564    <!-- ============= IN-PAGE NAV ============= -->
565    <nav class="subnav" aria-label="On this page">
566      <div class="container subnav-inner">
567        <span class="subnav-label">— On this page</span>
568        <a class="subnav-link" href="#repair">Repair</a>
569        <a class="subnav-link" href="#openers">Openers</a>
570        <a class="subnav-link" href="#new-doors">New doors</a>
571        <a class="subnav-link" href="#maintenance">Tune-up</a>
572        <a class="subnav-link" href="#emergency">24/7 Emergency</a>
573        <a class="subnav-link" href="#gates">Gates</a>
574        <a class="subnav-link" href="#faq">FAQ</a>
575      </div>
576    </nav>
577
578    <!-- ============= REPAIR ============= -->
579    <section class="svc" id="repair">
580      <div class="container svc-inner">
581        <div class="svc-img">
582          <img src="assets/services/repair-tech-drill.webp" alt="LMS technician drilling a garage door bracket" width="1800" height="2400" loading="lazy" decoding="async">
583          <div class="pin">Most repairs done same-day</div>
584        </div>
585        <div class="svc-content">
586          <div class="eyebrow">— Service 01</div>
587          <h2>Repair, <em>fixed today</em>.</h2>
588          <p class="svc-lede">Springs, cables, rollers, panels, off-track doors, dead openers, blown sensors. The big breakdowns, all fixed in one visit by the same tech who quoted you.</p>
589          <ul class="svc-list">
590            <li>Broken springs (torsion + extension)</li>
591            <li>Snapped cables</li>
592            <li>Worn rollers &amp; hinges</li>
593            <li>Off-track doors</li>
594            <li>Damaged panels</li>
595            <li>Bent tracks</li>
596            <li>Misaligned safety sensors</li>
597            <li>Worn weather seal</li>
598          </ul>
599          <div class="svc-meta">
600            <strong>Most repairs from $139.</strong> Springs $325–$425 (most homes). Quoted in writing before any work starts. Most jobs done in 1–2 hours, often same-day.
601          </div>
602          <div class="svc-actions">
603            <a class="btn btn-primary" href="tel:9163047126">Call for a same-day repair <span class="arrow">→</span></a>
604            <a class="svc-deeplink" href="/broken-springs">Learn more about broken spring repair <span class="arrow">→</span></a>
605          </div>
606        </div>
607      </div>
608    </section>
609
610    <!-- ============= OPENERS ============= -->
611    <section class="svc" id="openers">
612      <div class="container svc-inner is-reverse">
613        <div class="svc-img">
614          <img src="assets/services/install-shot.webp" alt="Garage door opener installation" width="2560" height="1920" loading="lazy" decoding="async">
615          <div class="pin">
615Replace dead openers same-day</div>
616        </div>
617        <div class="svc-content">
618          <div class="eyebrow">— Service 02</div>
619          <h2>Openers — <em>install, replace, fix</em>.</h2>
620          <p class="svc-lede">Belt drives for quiet bedrooms above the garage. Chain drives for cost. Smart openers for myQ, Wi-Fi, and the rest of your home automation. We install what fits — not the priciest box on the shelf.</p>
621          <div class="svc-brands">
622            <span class="svc-brand-chip">LiftMaster</span>
623            <span class="svc-brand-chip">Chamberlain</span>
624            <span class="svc-brand-chip">Genie</span>
625            <span class="svc-brand-chip">Craftsman</span>
626          </div>
627          <div class="svc-meta">
628            <strong>Old opener died?</strong> We carry replacement units on the truck and can usually swap one out the same day. New install with smart features quoted on the call.
629          </div>
630          <div class="svc-actions">
631            <a class="btn btn-primary" href="#quote" data-action="open-quote-form">Get a quote <span class="arrow">→</span></a>
632          </div>
633        </div>
634      </div>
635    </section>
636
637    <!-- ============= NEW DOORS ============= -->
638    <section class="svc" id="new-doors">
639      <div class="container svc-inner">
640        <div class="svc-img">
641          <img src="assets/hero/02-hero-dark-carriage-doors.webp" alt="Custom carriage-style garage doors" width="2560" height="1920" loading="lazy" decoding="async">
642          <div class="pin">From $1,050 installed</div>
643        </div>
644        <div class="svc-content">
645          <div class="eyebrow">— Service 03</div>
646          <h2>New garage doors, <em>without the upsell</em>.</h2>
647          <p class="svc-lede">Steel, wood, carriage, modern. Insulated or not. Standard sizes or custom. We measure, we quote, we install — a standard single-car door is $1,050 installed and a standard two-car is $1,699, and we'll tell you when the standard door is the right answer instead of the upgrade.</p>
648          <ul class="svc-list">
649            <li>Insulated or non-insulated steel</li>
650            <li>Carriage-style overlay</li>
651            <li>Custom wood</li>
652            <li>Modern aluminum &amp; glass</li>
653            <li>Single &amp; double sizes</li>
654            <li>Custom dimensions</li>
655          </ul>
656          <div class="svc-brands">
657            <span class="svc-brand-chip">Amarr</span>
658            <span class="svc-brand-chip">CHI</span>
659            <span class="svc-brand-chip">Wayne Dalton</span>
660            <span class="svc-brand-chip">Clopay</span>
661          </div>
662          <div class="svc-meta">
663            <strong>Process:</strong> phone consult to ballpark · free on-site measurement · written quote · install scheduled, usually 1–2 weeks. No pressure, no commission salesperson.
664          </div>
665          <div class="svc-actions">
666            <a class="btn btn-primary" href="#quote" data-action="open-quote-form">Get a free quote <span class="arrow">→</span></a>
667          </div>
668        </div>
669      </div>
670    </section>
671
672    <!-- ============= MAINTENANCE ============= -->
673    <section class="svc" id="maintenance">
674      <div class="container svc-inner is-reverse">
675        <div class="svc-img">
676          <img src="assets/components/component-roller.webp" alt="Garage door roller maintenance" width="500" height="450" loading="lazy" decoding="async">
677          <div class="pin">Annual tune-up</div>
678        </div>
679        <div class="svc-content">
680          <div class="eyebrow">— Service 04</div>
681          <h2>Tune-up — <em>before something breaks</em>.</h2>
682          <p class="svc-lede">An annual service catches the stuff that's about to fail. Springs are wearing. Rollers are dry. Sensors are drifting. A half-hour of work now is cheaper than an after-hours emergency call later.</p>
683          <ul class="svc-list">
684            <li>Lubricate hinges, rollers, springs</li>
685            <li>Check &amp; tighten hardware</li>
686            <li>Test &amp; balance the door</li>
687            <li>Test safety sensors &amp; auto-reverse</li>
688            <li>Inspect cables &amp; weather seal</li>
689            <li>Visual diagnosis of spring life</li>
690          </ul>
691          <div class="svc-meta">
692            <strong>Flat-rate annual service.</strong> Most tune-ups done in 30–45 minutes. We'll tell you what we found — and only what actually needs to be replaced.
693          </div>
694          <div class="svc-actions">
695            <a class="btn btn-primary" href="tel:9163047126">Schedule a tune-up <span class="arrow">→</span></a>
696          </div>
697        </div>
698      </div>
699    </section>
700
701    <!-- ============= EMERGENCY ============= -->
702    <section class="svc" id="emergency">
703      <div class="container svc-inner">
704        <div class="svc-img">
705          <img src="assets/services/tech-repairing.webp" alt="Garage door stuck half-open with car trapped inside — emergency call" width="500" height="350" loading="lazy" decoding="async">
706          <div class="pin">Often dispatched within the hour</div>
707        </div>
708        <div class="svc-content">
709          <div class="eyebrow">— Service 05</div>
710          <h2>24/7 Emergency — <em>
710when you can't wait</em>.</h2>
711          <p class="svc-lede">Door stuck open with the car inside. Spring blew at 6am. Storm wedged a panel against the track. We dispatch same-day, often within the hour, weekends included. The shop is open Mon–Sat 8–6; outside those hours — nights and Sundays — the line routes to the on-call tech.</p>
712          <div class="svc-meta">
713            <strong>Don't try to lift the door</strong> if a spring's broken — a double door is 150–250 lbs of dead weight with nothing holding it up. Unplug the opener so it doesn't burn out trying. Springs stay a trained tech's job, always. Then call us.
714          </div>
715          <div class="svc-actions">
716            <a class="btn btn-primary" href="tel:9163047126">Call now — (916) 304-7126 <span class="arrow">→</span></a>
717          </div>
718        </div>
719      </div>
720    </section>
721
722    <!-- ============= GATES & GATE OPERATORS ============= -->
723    <section class="svc" id="gates">
724      <div class="container svc-inner is-reverse">
725        <div class="svc-img">
726          <img src="assets/services/residential-gate.webp" alt="Residential driveway gate installed by LMS Garage Doors" width="1920" height="984" loading="lazy" decoding="async">
727          <div class="pin">Not just commercial</div>
728        </div>
729        <div class="svc-content">
730          <div class="eyebrow">— Service 06</div>
731          <h2>Gates &amp; gate operators — <em>residential too</em>.</h2>
732          <p class="svc-lede">Slide gates. Swing gates. Drive-up operators. Most garage door companies skip residential gates and send you to a separate vendor — we don't. Same crew, same shop, same number you already have.</p>
733          <ul class="svc-list">
734            <li>Gate operator install &amp; replace</li>
735            <li>Slide gate motors &amp; chains</li>
736            <li>Swing gate operators &amp; hinges</li>
737            <li>Keypad &amp; remote setup</li>
738            <li>Loop detector &amp; safety photo-eye</li>
739            <li>Retrofit older gate systems</li>
740          </ul>
741          <div class="svc-brands">
742            <span class="svc-brand-chip">LiftMaster</span>
743            <span class="svc-brand-chip">Doorking</span>
744          </div>
745          <div class="svc-meta">
746            <strong>Quoted on-site.</strong> Residential gate jobs vary a lot — driveway length, existing wiring, HOA rules, single vs. double gate. Mention what you have on the call and we'll send the right tech.
747          </div>
748          <div class="svc-actions">
749            <a class="btn btn-primary" href="#quote" data-action="open-quote-form">Get a quote <span class="arrow">→</span></a>
750            <a class="btn btn-secondary" href="/gate-repair">See our full gate repair page <span class="arrow">→</span></a>
751          </div>
752        </div>
753      </div>
754    </section>
755
756    <!-- ============= BRAND STRIP ============= -->
757    <section class="brands-strip">
758      <div class="container">
759        <div class="brands-inner">
760          <div class="brands-head">
761            <div class="eyebrow">— Trusted parts, every job</div>
762            <h3>Brands we install &amp; service</h3>
763          </div>
764          <div class="brands-row">
765            <img src="assets/logos/partner-liftmaster.webp" alt="LiftMaster" width="150" height="100" loading="lazy" decoding="async">
766            <img src="assets/logos/partner-chamberlain.webp" alt="Chamberlain" width="150" height="100" loading="lazy" decoding="async">
767            <img src="assets/logos/partner-genie.webp" alt="Genie" width="150" height="100" loading="lazy" decoding="async">
768            <img src="assets/logos/partner-craftsman.webp" alt="Craftsman" width="150" height="100" loading="lazy" decoding="async">
769            <img src="assets/logos/partner-amarr.webp" alt="Amarr" width="150" height="100" loading="lazy" decoding="async">
770            <img src="assets/logos/partner-chi.webp" alt="CHI" width="150" height="100" loading="lazy" decoding="async">
771          </div>
772        </div>
773      </div>
774    </section>
775
776    <!-- ============= FAQ ============= -->
777    <section class="faq" id="faq">
778      <div class="container faq-inner">
779        <div class="faq-head">
780          <div class="eyebrow">— Operational questions</div>
781          <h2 class="h-1" style="margin-top:14px;">What homeowners <em>actually ask</em>.</h2>
782          <p>Five things that come up on almost every call. Answers up-front so you don't have to hunt.</p>
783        </div>
784        <div class="faq-list" id="faqList">
785          <div class="faq-item is-open">
786            <span class="faq-num">01</span>
787            <div>
788              <div class="faq-q">How fast can you actually come out?</div>
789              <div class="faq-a"><strong>Same-day for most repairs across Sacramento, Placer &amp; El Dorado.</strong> Emergency calls often dispatched within the hour. New-door installs and special-order parts run on a normal schedule (usually 1–2 weeks).</div>
790            </div>
791            <div class="faq-icon">+</div>
792          </div>
793          <div class="faq-item">
794            <span class="faq-num">02</span>
795            <div>
796              <div class="faq-q">Will you give me a price over the phone?</div>
797              <div class="faq-a"><strong>For most common repairs, yes — we'll ballpark on the call.</strong> The tech confirms with a written quote on-site before any work starts. Custom doors and commercial jobs need an on-site measurement first; we'll tell you up-front if that's the case.</div>
798            </div>
799            <div class="faq-icon">+</div>
800          </div>
801          <div class="faq-item">
802            <span class="faq-num">03</span>
803            <div>
804              <div class="faq-q">Do you carry common parts on the truck?</div>
805              <div class="faq-a"><strong>Yes — most spring, roller, hinge, sensor, and opener jobs are done from the truck.</strong> We stock parts for the common door brands and opener manufacturers. Special-order panels and custom doors are scheduled separately.</div>
806            </div>
807            <div class="faq-icon">+</div>
808          </div>
809          <div class="faq-item">
810            <span class="faq-num">04</span>
811            <div>
812              <div class="faq-q">Do I need to be home for the tech to give me a quote?</div>
813              <div class="faq-a">For most repairs, <strong>yes — the tech needs to inspect the door</strong>. For new-door consultations we can usually measure and quote with you on the phone briefly while the tech's there. Tell us when you book and we'll work with your schedule.</div>
814            </div>
815            <div class="faq-icon">+</div>
816          </div>
817          <div class="faq-item">
818            <span class="faq-num">05</span>
819            <div>
820              <div class="faq-q">Will my opener still work after you replace the spring?</div>
821              <div class="faq-a"><strong>Usually yes — but the opener may have been straining for a while before the spring fully broke.</strong> When we replace the spring, we test the opener and tell you if it's been damaged. We'll never replace an opener you don't need; we'll also never let you drive away thinking it's fine when it's not.</div>
822            </div>
823            <div class="faq-icon">+</div>
824          </div>
825        </div>
826      </div>
827    </section>
828
829    <!-- ============= REVIEWS ============= -->
830    <section class="reviews" id="reviews">
831      <div class="container">
832        <div class="reviews-head">
833          <div>
834            <div class="eyebrow on-dark">From Google · 500+ reviews</div>
835            <h2 class="h-1" style="margin-top:14px;">From <em>real Sacramento homes</em>.</h2>
836          </div>
837          <div class="reviews-stars">
838            <div class="stars">★★★★★</div>
839            <div class="meta">5.0 · 500+ reviews · verified by Google</div>
840          </div>
841        </div>
842        <div class="reviews-grid">
843          <div class="review">
844            <div class="review-tag">— Repair done right</div>
845            <div class="stars">★★★★★</div>
846            <p class="review-body">"I used LMS garage doors three years ago when I had troubles with the tracks and rollers and some hinges on my door This time, my spring broke, I have always kept their number since the first time I had them do repairs They do such great work at reasonable prices. They are very friendly and explain everything and take their time in doing the job right. I truly recommend them for any of your garage door needs Great company and great people!"</p>
847            <div class="review-attr">
848              <div class="review-avatar">E</div>
849              <div>
850                <div class="review-name">Ellen L.</div>
851                <div class="review-meta">Verified Google review · February 2023</div>
852              </div>
853            </div>
854          </div>
855          <div class="review">
856            <div class="review-tag">— New install, no upsell</div>
857            <div class="stars">★★★★★</div>
858            <p class="review-body">"The whole experience went above my expectations. From the call to the actual service. Provided detailed breakdown of options and costs. Would recommend this company."</p>
859            <div class="review-attr">
860              <div class="review-avatar">H</div>
861              <div>
862                <div class="review-name">Hiroku</div>
863                <div class="review-meta">Verified Google review · March</div>
864              </div>
865            </div>
866          </div>
867          <div class="review">
868            <div class="review-tag">— No upsell, no pressure</div>
869            <div class="stars">★★★★★</div>
870            <p class="review-body">"Excellent customer service. Had a small problem with a recent install. LMS immediately sent Sam out and fixed the issue without hesitation or trying to up sell anything. Fast, eff
870icient, reliable, service! Thank you LMS"</p>
871            <div class="review-attr">
872              <div class="review-avatar">K</div>
873              <div>
874                <div class="review-name">Ken F.</div>
875                <div class="review-meta">Verified Google review · June</div>
876              </div>
877            </div>
878          </div>
879        </div>
880      </div>
881    </section>
882
883    <!-- ============= AREA STRIP ============= -->
884    <section class="area-strip">
885      <div class="container area-strip-inner">
886        <div>
887          <div class="eyebrow">— Where we work</div>
888          <h3>Sacramento, Placer &amp; <em>El Dorado</em>.</h3>
889          <p>One shop in Citrus Heights. We dispatch from there.</p>
890        </div>
891        <div class="area-cities-grid">
892          <div class="area-cities">
893            <strong>Sacramento County</strong>
894            Sacramento · Citrus Heights · Carmichael · Fair Oaks · Orangevale · Folsom · Antelope · Rancho Cordova · North Highlands · Natomas · Arden-Arcade · Gold River
895          </div>
896          <div class="area-cities">
897            <strong>Placer County</strong>
898            Roseville · Rocklin · Granite Bay · Lincoln · Auburn · Loomis · Newcastle
899          </div>
900          <div class="area-cities">
901            <strong>El Dorado County</strong>
902            El Dorado Hills · Cameron Park · Shingle Springs · Placerville
903          </div>
904        </div>
905      </div>
906    </section>
907
908    <!-- ============= FINAL CTA ============= -->
909    <section class="final-cta" id="quote">
910      <div class="container final-cta-inner">
911        <div class="final-cta-text">
912          <div class="eyebrow on-dark">Need it fixed today?</div>
913          <h2>Call the shop. <em>A real person picks up.</em></h2>
914        </div>
915        <div class="final-cta-action">
916          <a href="tel:9163047126" class="final-cta-phone-link">(916) 304-7126</a>
917          <span class="final-cta-label">Mon–Sat 8–6 · after-hours on call</span>
918          <button type="button" class="btn btn-on-dark final-cta-quote-btn" data-action="open-quote-form">
919            Or send us your info <span class="arrow">→</span>
920          </button>
921        </div>
922      </div>
923    </section>
924
925  </main>
926
927  <!-- ============= FOOTER ============= -->
928  <!-- ============= FOOTER =============
929       SHARED PARTIAL — do not edit per-page.
930       Phone in NAP block is the canonical office line (matches GBP), NOT the
931       tracking line. NAP-to-GBP consistency for local SEO. -->
932  <footer class="site-footer">
933    <div class="container">
934      <div class="footer-grid">
935        <div class="footer-about">
936          <a href="/" style="display:inline-block">
937            <img src="/assets/logos/lms-logo-white-real.webp" alt="LMS Garage Doors" width="7581" height="7582" loading="lazy" decoding="async" style="height:80px; width:auto">
938          </a>
939          <p style="margin-top:20px">Family-owned and operated in Citrus Heights, CA. Serving Sacramento, Placer, and El Dorado counties since 2018.</p>
940          <p style="margin-top:16px; font-size:13px; color:rgba(212,204,189,0.6)">CSLB Lic. #1067724 · Bonded · Insured</p>
941          <ul class="footer-social" aria-label="Follow LMS Garage Doors">
942            <li><a href="https://www.facebook.com/LMSgaragedoors" aria-label="Facebook" target="_blank" rel="noopener">
943              <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z"/></svg>
944            </a></li>
945            <li><a href="https://www.instagram.com/lmsgaragedoors_/" aria-label="Instagram" target="_blank" rel="noopener">
946              <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false">
946<path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z"/></svg>
947            </a></li>
948            <li><a href="https://www.youtube.com/@LMSGARAGEDOORS" aria-label="YouTube" target="_blank" rel="noopener">
949              <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>
950            </a></li>
951          </ul>
952        </div>
953        <div>
954          <h3>Services</h3>
955          <ul class="footer-list">
956            <li><a href="/residential#repair">Repair</a></li>
957            <li><a href="/residential#new-doors">New doors</a></li>
958            <li><a href="/residential#openers">Openers</a></li>
959            <li><a href="/broken-springs">Broken springs</a></li>
960            <li><a href="/residential#emergency">24/7 emergency</a></li>
961            <li><a href="/residential#gates">Gates</a></li>
962            <li><a href="/commercial">Commercial</a></li>
963          </ul>
964        </div>
965        <div>
966          <h3>Areas</h3>
967          <ul class="footer-list">
968            <li><a href="/sacramento">Sacramento</a></li>
969            <li><a href="/roseville">Roseville</a></li>
970            <li><a href="/folsom">Folsom</a></li>
971            <li><a href="/citrus-heights">Citrus Heights</a></li>
972            <li><a href="/orangevale">Orangevale</a></li>
973            <li><a href="/rocklin">Rocklin</a></li>
974            <li><a href="/areas-we-serve">All cities →</a></li>
975          </ul>
976        </div>
977        <div>
978          <h3>Visit / Call</h3>
979          <ul class="footer-list footer-nap">
980            <li>8084 Old Auburn Rd, Ste C<br>Citrus Heights, CA 95610</li>
981            <li><a href="tel:9168992333">(916) 899-2333</a></li>
982            <li><a href="mailto:[email protected]">[email protected]</a></li>
983            <!-- NAP hours: must match call_zones/call_zone_windows + GBP. See T-133. -->
984            <li>Mon–Sat 8–6 · after-hours on call</li>
985            <li style="margin-top:8px"><a href="/contact">Contact / Get a quote</a></li>
986            <li><a href="/privacy-policy">Privacy Policy</a></li>
987            <li><a href="/terms">Terms of Service</a></li>
988            <li><a href="/cookie-policy">Cookie Policy</a></li>
989            <li><a href="/accessibility">Accessibility</a></li>
990            <li><a href="#" data-action="open-privacy-choices">Your Privacy Choices</a></li>
991          </ul>
992        </div>
993      </div>
994
995      <!-- Embedded Google Maps — pulls from LMS's actual GBP location.
996           Reinforces NAP-to-GBP entity binding for local SEO. -->
997      <div class="footer-map">
998        <iframe
999          src="https://maps.google.com/maps?q=LMS+Garage+Doors,+8084+Old+Auburn+Rd+Ste+C,+Citrus+Heights,+CA+95610&t=&z=14&ie=UTF8&iwloc=B&output=embed"
1000          loading="lazy"
1001          sandbox="allow-scripts allow-same-origin"
1002          referrerpolicy="strict-origin"
1003          title="LMS Garage Doors location in Citrus Heights, CA"
1004          aria-label="Google Map showing LMS Garage Doors at 8084 Old Auburn Rd, Citrus Heights, CA"></iframe>
1005      </div>
1006
1007      <div class="footer-bottom">
1008        <span>© 2026 LMS Garage Doors LLC. All rights reserved.</span>
1009        <span><a href="/privacy-policy">Privacy</a> · <a href="/terms">Terms</a> · <a href="#" data-action="open-privacy-choices">Your Privacy Choices</a></span>
1010      </div>
1011    </div>
1012  </footer>
1013
1014
1015  <!-- ============= MOBILE STICKY CTA ============= -->
1016  <!-- ============= MOBILE STICKY CTA =============
1017       SHARED PARTIAL — phone + Get-a-quote button anchored to bottom on phones.
1018       Hidden on desktop via CSS in styles/site-chrome.css. -->
1019  <div class="mobile-cta-bar">
1020    <a class="header-phone" style="color:var(--paper)" href="tel:9163047126">
1021      <span class="dot"></span><strong>(916) 304-7126</strong>
1022    </a>
1023    <button type="button" class="btn btn-rust" style="padding:12px 18px; font-size:14px" data-action="open-quote-form">Get quote</button>
1024  </div>
1025
1026  <!-- ============= QUOTE FORM MODAL ============= -->
1027  <!-- ============= QUOTE FORM MODAL — 2-step =============
1028       SHARED PARTIAL — the canonical Get-a-Quote modal for the entire site.
1029       Hidden by default. Opened by any [data-action="open-quote-form"] click.
1030
1031       Step 1 ("Your door"): pick a service category — top row is symptom-led
1032         (the customer describes what they see, not the part); bottom row is
1033         intent-led (planning / install). Optional urgency checkbox + textarea.
1034       Step 2 ("Your info"): name + phone (req), email + ZIP (opt), SMS opt-in,
1035         Turnstile, submit.
1036
1037       Dark left "aside" is a trust-building rail (local, not a call center,
1038       fallback phone CTA). On phones the aside is hidden — form gets full width
1039       since the page already has the header phone + bottom sticky CTA.
1040
1041       JS: scripts/quote-form.js handles open/close/step/validation/submit.
1042       CSS: styles/site-chrome.css (modal section). -->
1043  <div class="quote-modal" id="quote-modal" role="dialog" aria-modal="true" aria-labelledby="quote-modal-title" hidden>
1044    <div class="quote-modal-backdrop" data-action="close-quote-form"></div>
1045    <div class="quote-modal-panel quote-modal-panel--wide">
1046      <button type="button" class="quote-modal-close" data-action="close-quote-form" aria-label="Close">×</button>
1047
1048      <div class="qm-grid">
1049        <!-- Aside (desktop): trust rail + fallback call CTA -->
1050        <aside class="qm-aside">
1051          <div class="qm-aside-eyebrow">Free quote — no call required</div>
1052          <h2 id="quote-modal-title" class="qm-aside-title">No phone tree. No sales pitch. Just a quote — <em>from a real LMS employee</em>.</h2>
1053          <p class="qm-aside-lede">We're a family-owned Sacramento shop, not a call center. When we follow up, it's someone who actually works at LMS. Two short steps — we respond by text or email within an hour during business hours, next morning if it's after-hours.</p>
1054          <div class="qm-aside-divider"></div>
1055          <div class="qm-aside-meta">
1056            <div class="qm-aside-call"><strong>Or call directly</strong> — <a href="tel:9163047126">(916) 304-7126</a></div>
1057            <div><strong>Hours</strong> — Mon–Sat 8–6 · after-hours on call</div>
1058            <div><strong>Where</strong> — Sacramento · Placer · El Dorado</div>
1059          </div>
1060        </aside>
1061
1062        <!-- Form pane -->
1063        <div class="qm-main">
1064          <!-- Stepper -->
1065          <ol class="qm-stepper" aria-label="Form progress">
1066            <li class="qm-step-pip is-active" data-step-pip="1"><span class="qm-step-num">1</span> Your door</li>
1067            <li class="qm-step-pip" data-step-pip="2"><span class="qm-step-num">2</span> Your info</li>
1068          </ol>
1069
1070          <form id="quote-form" class="quote-form" novalidate>
1071
1072            <!-- ============ STEP 1: What you need ============ -->
1073            <fieldset class="qf-step is-active" data-step="1">
1074              <!-- Noun-neutral on purpose: this modal is shared by every page, so it
1075                   can't know whether the visitor is here about a door or a gate. Don't
1076                   hardcode "door" back in, and don't hedge into "door or gate" either —
1077                   the cards below name the thing, and forms-inbound's serviceNoun()
1078                   derives the noun for the auto-reply from the service_type they pick. -->
1079              <legend class="qf-step-title">What can we help with?</legend>
1080              <p class="qf-step-lede">Pick the closest match. We'll work out the rest when we follow up.<
1080/p>
1081
1082              <!-- Symptom-led cards: customer describes what they see -->
1083              <div class="qf-section-eyebrow">When something's broken</div>
1084              <div class="qf-service-grid">
1085                <label class="qf-service-card">
1086                  <input type="radio" name="service_type" value="wont_open">
1087                  <span class="qf-card-title">Door won't open</span>
1088                </label>
1089                <label class="qf-service-card">
1090                  <input type="radio" name="service_type" value="wont_close">
1091                  <span class="qf-card-title">Door won't close</span>
1092                </label>
1093                <label class="qf-service-card">
1094                  <input type="radio" name="service_type" value="spring">
1095                  <span class="qf-card-title">Loud bang or spring snap</span>
1096                </label>
1097                <label class="qf-service-card">
1098                  <input type="radio" name="service_type" value="damaged">
1099                  <span class="qf-card-title">Door is off-track or damaged</span>
1100                </label>
1101              </div>
1102
1103              <!-- Gates get their own section rather than a 5th card in the grids above:
1104                   Gates is its own Business Unit operationally, and these two values
1105                   (gate_repair / gate_opener) are the vocabulary forms-inbound already
1106                   speaks — GATE_SERVICE_TYPES makes them decisive for door-vs-gate copy,
1107                   so a gate lead from the organic site no longer depends on the customer
1108                   happening to type "gate" in the free-text box. (T-125) -->
1109              <div class="qf-section-eyebrow">Gates</div>
1110              <div class="qf-service-grid">
1111                <label class="qf-service-card">
1112                  <input type="radio" name="service_type" value="gate_repair">
1113                  <span class="qf-card-title">Gate won't open or close</span>
1114                </label>
1115                <label class="qf-service-card">
1116                  <input type="radio" name="service_type" value="gate_opener">
1117                  <span class="qf-card-title">New or upgraded gate opener</span>
1118                </label>
1119              </div>
1120
1121              <!-- Intent-led cards: customer is planning a project -->
1122              <div class="qf-section-eyebrow">Planning ahead</div>
1123              <div class="qf-service-grid">
1124                <label class="qf-service-card">
1125                  <input type="radio" name="service_type" value="new_door">
1126                  <span class="qf-card-title">New door</span>
1127                </label>
1128                <label class="qf-service-card">
1129                  <input type="radio" name="service_type" value="opener">
1130                  <span class="qf-card-title">New or upgraded opener</span>
1131                </label>
1132                <label class="qf-service-card">
1133                  <input type="radio" name="service_type" value="commercial">
1134                  <span class="qf-card-title">Commercial property</span>
1135                </label>
1136                <label class="qf-service-card">
1137                  <input type="radio" name="service_type" value="unsure">
1138                  <span class="qf-card-title">Something else</span>
1139                </label>
1140              </div>
1141
1142              <!-- Urgency — single checkbox. Checked = urgent; unchecked = standard. -->
1143              <label class="qf-urgent">
1144                <input type="checkbox" id="qf-urgent" name="urgent" value="1">
1145                <span class="qf-urgent-text">
1146                  <strong>I need help right away.</strong>
1147                  Door is stuck open or otherwise can't wait until tomorrow.
1148                </span>
1149              </label>
1150
1151              <div class="qf-field qf-field--addtl">
1152                <label for="qf-message" class="qf-eyebrow-label">Tell us more <span class="qf-optional">(optional)</span></label>
1153                <textarea id="qf-message" name="message" rows="2" maxlength="4000" placeholder="e.g. heard a loud bang and the door is stuck about 2 inches off the ground"></textarea>
1154              </div>
1155
1156              <div class="qf-step-actions">
1157                <span></span>
1158                <button type="button" class="btn btn-primary qf-next" data-step-target="2" id="qf-next-1">
1159                  <span>Next: your info</span>
1160                  <span class="arrow">→</span>
1161                </button>
1162              </div>
1163              <div class="qf-step-error" id="qf-step1-error" role="alert" aria-live="polite" hidden></div>
1164              <!-- Visible on page load, on purpose — see the same note in _src/contact.html
1165                   (A2P 30909: the reviewer must see the opt-in disclosure without interacting). -->
1166              <p class="qf-fineprint">By submitting, you agree to receive texts and calls from LMS about your request. Reply STOP to opt out, HELP for help. Msg/data rates may apply. See our <a href="/terms#sms-optin">SMS opt-in terms</a> and <a href="/privacy-policy">Privacy Policy</a>.</p>
1167            </fieldset>
1168
1169            <!-- ============ STEP 2: Your info ============ -->
1170            <fieldset class="qf-step" data-step="2">
1171              <legend class="qf-step-title">How can we reach you?</legend>
1172              <p class="qf-step-lede">We'll text or email back with a quote. No phone tree, no sales pitch.</p>
1173
1174              <div class="qf-row">
1175                <div class="qf-field">
1176                  <label for="qf-name">Name</label>
1177                  <input type="text" id="qf-name" name="name" required autocomplete="name" maxlength="120">
1178                </div>
1179                <div class="qf-field">
1180                  <label for="qf-phone">Phone</label>
1181                  <input type="tel" id="qf-phone" name="phone" required autocomplete="tel" placeholder="(916) 555-1234" maxlength="32">
1182                </div>
1183              </div>
1184              <div class="qf-row">
1185                <div class="qf-field">
1186                  <label for="qf-email">Email <span class="qf-optional">(optional)</span></label>
1187                  <input type="email" id="qf-email" name="email" autocomplete="email" maxlength="254">
1188                </div>
1189                <div class="qf-field">
1190                  <label for="qf-zip">ZIP code</label>
1191                  <input type="text" id="qf-zip" name="zip" required autocomplete="postal-code" maxlength="5" inputmode="numeric" pattern="[0-9]{5}">
1192                </div>
1193              </div>
1194
1195              <!-- Honeypot — bots fill, real users skip. Hidden via CSS. -->
1196              <div class="qf-honeypot" aria-hidden="true">
1197                <label for="qf-hp">Do not fill</label>
1198                <input type="text" id="qf-hp" name="hp" tabindex="-1" autocomplete="off">
1199              </div>
1200
1201              <!-- SMS opt-in (UNCHECKED by default per A2P 10DLC requirement) -->
1202              <label class="qf-consent">
1203                <input type="checkbox" id="qf-sms-opt-in" name="sms_opt_in" value="1">
1204                <span class="qf-consent-text" id="qf-sms-consent-text">Yes, send me text messages from LMS Garage Doors about my service request. Message and data rates may apply. Message frequency varies. Reply STOP to opt out, HELP for help.</span>
1205              </label>
1206
1207              <!-- Cloudflare Turnstile -->
1208              <div class="qf-turnstile cf-turnstile" data-sitekey="0x4AAAAAADOKyh5jPnf5kdED" data-theme="light"></div>
1209
1210              <div class="qf-step-actions">
1211                <button type="button" class="qf-back" data-step-target="1">← Back</button>
1212                <button type="submit" class="btn btn-primary qf-submit" id="qf-submit-btn">
1213                  <span class="qf-submit-text">Send to LMS</span>
1214                  <span class="arrow">→</span>
1215                </button>
1216              </div>
1217
1218              <div class="qf-status" id="qf-status" role="status" aria-live="polite" hidden></div>
1219
1220              <p class="qf-fineprint">By submitting, you agree to receive texts and calls from LMS about your request. Reply STOP to opt out, HELP for help. Msg/data rates may apply. See our <a href="/terms">Terms</a> and <a href="/privacy-policy">Privacy Policy</a>.</p>
1221            </fieldset>
1222
1223          </form>
1224        </div>
1225      </div>
1226    </div>
1227  </div>
1228
1229
1230  <!-- Page-specific JS (extracted from inline per CSP — see CLAUDE.md security conventions) -->
1231  
1231<script src="/scripts/residential.js?v=b7af5a5b" defer></script>
1231
1232
1233  <!-- ============= SHARED SCRIPTS =============
1234       SHARED PARTIAL — privacy + analytics + quote-form + mobile-nav JS,
1235       loaded on every page.
1236
1237       Load order matters: privacy-choices.js MUST come first because
1238       analytics.js (and any future tracking script) reads window.LMS_PRIVACY
1239       at load time. New trackers go AFTER privacy-choices.js, not before.
1240
1241       Page-specific scripts: put them in scripts/<page>.js and reference
1242       externally — CSP blocks inline 
1242<script> tags (see CLAUDE.md "Security
1243       & privacy conventions"). -->
1244  
1244<script src="/scripts/privacy-choices.js?v=34383392" defer></script>
1244
1245  
1245<script src="/scripts/analytics.js?v=d2cab103" defer></script>
1245
1246  <!-- dni.js swaps the CTA call number by traffic source (needs gtag from analytics.js) -->
1247  
1247<script src="/scripts/dni.js?v=f86f9d02" defer></script>
1247
1248  
1248<script src="/scripts/quote-form.js?v=f198978a" defer></script>
1248
1249  
1249<script src="/scripts/site-nav.js?v=cac6a6bd" defer></script>
1249
1250
1251
1252</body>
1253</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.