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 & 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 & 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 & 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 & glass</li> 653 <li>Single & 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 & tighten hardware</li> 686 <li>Test & balance the door</li> 687 <li>Test safety sensors & auto-reverse</li> 688 <li>Inspect cables & 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 & 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 & replace</li> 735 <li>Slide gate motors & chains</li> 736 <li>Swing gate operators & hinges</li> 737 <li>Keypad & remote setup</li> 738 <li>Loop detector & 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 & 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 & 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 & <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.