This commit is contained in:
Concept Agent
2026-05-15 18:02:38 +02:00
parent 72016728e2
commit 307e452251
175 changed files with 9316 additions and 0 deletions
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

+143
View File
@@ -0,0 +1,143 @@
(function () {
var NAV = `<nav class="navbar">
<a href="/" class="logo">
<span class="logo-text">Lahr <span class="logo-highlight">Carpet</span></span>
</a>
<ul class="nav-links">
<li><a href="/">Home</a></li>
<li><a href="/our-work/">Our Work</a></li>
<li><a href="/about/">About</a></li>
<li>
<div class="nav-dropdown">
<span class="dropdown-label">Company <i class="fas fa-caret-down"></i></span>
<div class="dropdown-menu">
<a href="/about/">About Us</a>
<a href="/service-area/">Service Area</a>
<a href="/reviews/">Reviews</a>
<a href="/contact/">Contact</a>
</div>
</div>
</li>
<li>
<div class="nav-dropdown">
<span class="dropdown-label">Residential <i class="fas fa-caret-down"></i></span>
<div class="dropdown-menu">
<a href="/services/carpet-cleaning/">Carpet Cleaning</a>
<a href="/services/stairs/">Stairs Cleaning</a>
<a href="/services/upholstery/">Upholstery Cleaning</a>
<a href="/services/floors/">Floor Cleaning</a>
<a href="/services/area-rugs/">Area Rug Cleaning</a>
<a href="/services/add-ons/">Add-On Services</a>
</div>
</div>
</li>
<li>
<div class="nav-dropdown">
<span class="dropdown-label">Commercial <i class="fas fa-caret-down"></i></span>
<div class="dropdown-menu">
<a href="/services/commercial/">Commercial Overview</a>
<a href="/commercial/vacation-rentals/">Vacation Rentals</a>
<a href="/commercial/offices/">Offices</a>
<a href="/commercial/hotels-inns/">Hotels &amp; Inns</a>
<a href="/commercial/retail-showrooms/">Retail &amp; Showrooms</a>
<a href="/commercial/property-management/">Property Management</a>
</div>
</div>
</li>
</ul>
<div class="nav-contact">
<a href="https://www.facebook.com/profile.php?id=61559554960851" class="social-icon" aria-label="Facebook" target="_blank"><i class="fab fa-facebook-f"></i></a>
<a href="https://www.instagram.com/lahrautospa/" class="social-icon" aria-label="Instagram" target="_blank"><i class="fab fa-instagram"></i></a>
<a href="tel:315-719-1218" class="btn btn-primary"><i class="fas fa-phone"></i></a>
</div>
<button class="mobile-menu-toggle" aria-label="Toggle menu">
<span></span><span></span><span></span>
</button>
</nav>`;
var FOOTER = `<footer class="footer">
<div class="container">
<div class="footer-grid">
<div class="footer-brand">
<a href="/" class="footer-logo">
<span class="logo-text">Lahr <span class="logo-highlight">Carpet</span></span>
</a>
<p>We clean carpets, upholstery, rugs, and hard floors for homes and businesses in Waterloo, Geneva, and the Finger Lakes region.</p>
</div>
<div class="footer-links">
<h4>Services</h4>
<ul>
<li><a href="/services/carpet-cleaning/">Carpet Cleaning</a></li>
<li><a href="/services/stairs/">Stairs Cleaning</a></li>
<li><a href="/services/upholstery/">Upholstery Cleaning</a></li>
<li><a href="/services/floors/">Floor Cleaning</a></li>
<li><a href="/services/add-ons/">Add-On Services</a></li>
<li><a href="/services/area-rugs/">Area Rug Cleaning</a></li>
<li><a href="/services/commercial/">Commercial Cleaning</a></li>
</ul>
</div>
<div class="footer-links">
<h4>Service Areas</h4>
<ul>
<li><a href="/locations/waterloo-ny/">Waterloo, NY</a></li>
<li><a href="/locations/geneva-ny/">Geneva, NY</a></li>
<li><a href="/locations/seneca-falls-ny/">Seneca Falls, NY</a></li>
<li><a href="/locations/canandaigua-ny/">Canandaigua, NY</a></li>
<li><a href="/locations/penn-yan-ny/">Penn Yan, NY</a></li>
<li><a href="/locations/victor-ny/">Victor, NY</a></li>
<li><a href="/locations/newark-ny/">Newark, NY</a></li>
<li><a href="/locations/">All Locations &rarr;</a></li>
</ul>
</div>
<div class="footer-links">
<h4>Contact Us</h4>
<ul>
<li><i class="fas fa-phone"></i> <a href="tel:315-719-1218">315-719-1218</a></li>
<li><i class="fas fa-envelope"></i> <a href="mailto:lahrcarpet@gmail.com">lahrcarpet@gmail.com</a></li>
<li><i class="fas fa-location-dot"></i> 1076 Waterloo/Geneva Road, Waterloo, NY</li>
</ul>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="container">
<p>&copy; 2025 All Rights Reserved. Lahr Carpet Cleaning</p>
</div>
</div>
</footer>`;
var PROCESS = `<section class="how-it-works">
<div class="container">
<div class="section-header">
<span class="section-label">How It Works</span>
<h2 class="section-title">Getting Started Is Simple</h2>
<p class="section-subtitle">Three steps from first contact to clean carpets.</p>
</div>
<div class="process-track">
<div class="process-connector"><div class="process-connector-fill"></div></div>
<div class="process-step">
<div class="process-num">1</div>
<h3>Contact Us</h3>
<p>Call or submit the form online. Tell us what you need cleaned and we will confirm availability for your area.</p>
</div>
<div class="process-step">
<div class="process-num">2</div>
<h3>We Arrive and Clean</h3>
<p>Our technician arrives on time with professional equipment. We pre-treat, extract, and inspect before we leave.</p>
</div>
<div class="process-step">
<div class="process-num">3</div>
<h3>Enjoy the Results</h3>
<p>Your carpets dry in hours. You will see and smell the difference the same day we finish.</p>
</div>
</div>
</div>
</section>`;
var navEl = document.getElementById('site-nav');
var footerEl = document.getElementById('site-footer');
var processEl = document.getElementById('site-process');
if (navEl) navEl.innerHTML = NAV;
if (footerEl) footerEl.innerHTML = FOOTER;
if (processEl) processEl.outerHTML = PROCESS;
})();
+68
View File
@@ -0,0 +1,68 @@
const mobileToggle = document.querySelector('.mobile-menu-toggle');
const navLinks = document.querySelector('.nav-links');
const navContact = document.querySelector('.nav-contact');
mobileToggle.addEventListener('click', () => {
navLinks.classList.toggle('active');
navContact.classList.toggle('active');
mobileToggle.classList.toggle('active');
});
const dropdownLabel = document.querySelector('.dropdown-label');
const navDropdown = document.querySelector('.nav-dropdown');
if (dropdownLabel && navDropdown) {
dropdownLabel.addEventListener('click', function(e) {
if (window.innerWidth <= 768) {
e.preventDefault();
e.stopPropagation();
navDropdown.classList.toggle('open');
}
});
document.addEventListener('click', function(e) {
if (!navDropdown.contains(e.target)) {
navDropdown.classList.remove('open');
}
});
}
document.querySelectorAll('.dropdown-toggle').forEach(toggle => {
toggle.addEventListener('click', function() {
this.classList.toggle('active');
this.nextElementSibling.classList.toggle('active');
});
});
const form = document.getElementById('quoteForm');
if (form) {
form.addEventListener('submit', function(e) {
e.preventDefault();
alert('Thank you for your quote request! We will contact you shortly.');
this.reset();
});
}
// How It Works — scroll-triggered step reveal
(function () {
function initProcess() {
var track = document.querySelector('.process-track');
if (!track) return;
var steps = track.querySelectorAll('.process-step');
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
track.classList.add('animated');
steps.forEach(function (step, i) {
setTimeout(function () {
step.classList.add('visible');
}, i * 220);
});
observer.disconnect();
}
});
}, { threshold: 0.25 });
observer.observe(track);
}
// components.js runs before main.js, but process section is injected synchronously
// so it's available immediately
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initProcess);
} else {
initProcess();
}
}());
Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

@@ -0,0 +1,16 @@
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-01.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-04.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-02.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-03-stain-on-chair.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-05-extraction-couch.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-03-technician.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-06.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-07.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-03.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-05-clean-stairs.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-05.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-07-restaurant.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-06-office.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-01-wide-room.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-05-clean-reveal.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-04-extraction-carpet.mp4'
+7
View File
@@ -0,0 +1,7 @@
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-01-door-entry.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-02-mud-on-carpet.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-03-stain-on-chair.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-04-extraction-carpet.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-05-clean-stairs.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-06-office.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v2-shot-07-restaurant.mp4'
+7
View File
@@ -0,0 +1,7 @@
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-01.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-02.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-03.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-04.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-05.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-06.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/v3-shot-07.mp4'
+9
View File
@@ -0,0 +1,9 @@
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-01-door-opens-trimmed.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-02-pan-to-stains.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-03-stain-closeup.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-04-extraction-carpet.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-05-extraction-couch.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-06-extraction-stairs.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-07-office-entryway.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-08-showroom.mp4'
file '/home/sirdrez/arisingmedia-websites/lahrcarpetcleaning.com/assets/videos/hero/clips/shot-09-technician-unloading.mp4'
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.