Updated broken navigation links, added Google Analytics

This commit is contained in:
2026-05-20 23:09:07 +12:00
parent 4f1a2cbac3
commit da9143c547
14 changed files with 11223 additions and 551 deletions
+15 -119
View File
@@ -1196,63 +1196,6 @@
margin-bottom: 36px;
line-height: 1.55;
}
.contact-form {
text-align: left;
display: grid;
gap: 14px;
max-width: 560px;
margin: 0 auto;
}
.contact-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
@media (max-width: 560px) {
.contact-row { grid-template-columns: 1fr; }
}
.contact-form label {
display: grid;
gap: 6px;
font-size: 13px;
color: rgba(255,255,255,0.78);
font-weight: 500;
letter-spacing: 0.01em;
}
.contact-form input,
.contact-form textarea {
font: inherit;
color: white;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.16);
border-radius: 10px;
padding: 12px 14px;
width: 100%;
box-sizing: border-box;
transition: border-color .15s ease, background .15s ease;
}
.contact-form input:focus,
.contact-form textarea:focus {
outline: none;
border-color: var(--orange, #ec8b33);
background: rgba(255,255,255,0.09);
}
.contact-form textarea { resize: vertical; min-height: 110px; }
.contact-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; }
.contact-actions {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
margin-top: 6px;
}
.contact-status {
margin: 0;
font-size: 14px;
color: rgba(255,255,255,0.72);
}
.contact-status.is-ok { color: #7ee2a8; }
.contact-status.is-err { color: #ff9b8a; }
.cta-flow {
display: flex;
gap: 20px;
@@ -1384,6 +1327,15 @@
.section { padding: 80px 22px; }
}
</style>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z5JJBS491H"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-Z5JJBS491H');
</script>
</head>
<body>
@@ -1933,78 +1885,22 @@
</div>
</section>
<!-- ───── CTA / Contact Form ───── -->
<!-- ───── CTA ───── -->
<section class="cta-wrap" id="contact">
<div class="cta-card">
<div class="cta-inner">
<h2>Let's find <em>your</em> first improvement.</h2>
<p>Tell us a little about your business and what you're looking to improve. We'll get back to you to talk through whether — and how — we can help.</p>
<form id="contact-form" class="contact-form" action="/api/contact" method="POST" novalidate>
<div class="contact-row">
<label>
<span>Name</span>
<input type="text" name="name" autocomplete="name" required />
</label>
<label>
<span>Email</span>
<input type="email" name="email" autocomplete="email" required />
</label>
</div>
<label>
<span>Company</span>
<input type="text" name="company" autocomplete="organization" />
</label>
<label>
<span>What are you looking to improve?</span>
<textarea name="message" rows="4" required></textarea>
</label>
<input type="text" name="website" class="contact-hp" tabindex="-1" autocomplete="off" aria-hidden="true" />
<div class="contact-actions">
<button type="submit" class="btn btn-on-dark">
Send <span class="btn-arrow"></span>
</button>
<p class="contact-status" id="contact-status" role="status" aria-live="polite"></p>
</div>
</form>
<div class="hero-ctas">
<a href="#" class="btn btn-on-dark">
Let&rsquo;s Talk <span class="btn-arrow"></span>
</a>
</div>
</div>
</div>
</section>
<script>
(function () {
var form = document.getElementById('contact-form');
if (!form) return;
var status = document.getElementById('contact-status');
form.addEventListener('submit', function (e) {
e.preventDefault();
status.textContent = 'Sending…';
status.className = 'contact-status';
var data = new FormData(form);
fetch(form.action, {
method: 'POST',
body: data,
headers: { 'Accept': 'application/json' }
})
.then(function (r) { return r.json().then(function (j) { return { ok: r.ok, body: j }; }); })
.then(function (res) {
if (res.ok) {
form.reset();
status.textContent = 'Thanks — well be in touch shortly.';
status.className = 'contact-status is-ok';
} else {
status.textContent = (res.body && res.body.error) || 'Something went wrong. Please try again.';
status.className = 'contact-status is-err';
}
})
.catch(function () {
status.textContent = 'Network error. Please try again.';
status.className = 'contact-status is-err';
});
});
})();
</script>
<!-- ───── FOOTER — orange Logotipo (no tagline), tagline removed ───── -->
<footer class="footer">
<div class="footer-inner">