Fix mobile nav dropdowns, unique hero images per page, Google Maps, meta tags, reel update

- Fix mobile nav: all 3 dropdowns now get click handlers (was only first)
- Remove Our Work from nav
- Add Google Maps embed to homepage footer
- Update title and meta description/keywords/canonical
- Unique hero image per page (14 pages updated)
- Remove technician clip from hero reel
- Add .cpanel.yml for cPanel Git deployment
- Add hero image generation script (ComfyUI SDXL)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Concept Agent
2026-05-15 21:27:36 +02:00
parent 2aeb4285f9
commit 68d29ae532
20 changed files with 323 additions and 67 deletions
-1
View File
@@ -5,7 +5,6 @@
</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">
+26 -21
View File
@@ -1,32 +1,37 @@
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 (mobileToggle) {
mobileToggle.addEventListener('click', () => {
navLinks.classList.toggle('active');
navContact.classList.toggle('active');
mobileToggle.classList.toggle('active');
});
}
// Mobile dropdowns — wire ALL dropdown labels, not just the first
document.querySelectorAll('.nav-dropdown').forEach(function(dropdown) {
var label = dropdown.querySelector('.dropdown-label');
if (!label) return;
label.addEventListener('click', function(e) {
if (window.innerWidth <= 768) {
e.preventDefault();
e.stopPropagation();
navDropdown.classList.toggle('open');
// Close all other open dropdowns
document.querySelectorAll('.nav-dropdown.open').forEach(function(other) {
if (other !== dropdown) other.classList.remove('open');
});
dropdown.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');
});
});
document.addEventListener('click', function(e) {
if (!e.target.closest('.nav-dropdown')) {
document.querySelectorAll('.nav-dropdown.open').forEach(function(d) {
d.classList.remove('open');
});
}
});
const form = document.getElementById('quoteForm');
if (form) {