TerraLance

A thoughtful reply starts here

Tell us what you are trying to understand.

Ask about course scope, accessibility, learning pace, or how to choose a starting lesson. TerraLance provides education and does not diagnose vehicle faults.

[email protected]

+1 (415) 555-0186

`; const footerHTML = ` `; document.getElementById('site-header').innerHTML = headerHTML; document.getElementById('site-footer').innerHTML = footerHTML; // header scripts const toggle = document.getElementById('mobile-menu-toggle'); const nav = document.getElementById('main-navigation'); toggle.addEventListener('click', () => { const expanded = toggle.getAttribute('aria-expanded') === 'true'; toggle.setAttribute('aria-expanded', !expanded); nav.classList.toggle('hidden'); nav.classList.toggle('flex'); nav.classList.toggle('flex-col'); nav.classList.toggle('w-full'); nav.classList.toggle('mt-4'); nav.classList.toggle('lg:flex'); }); const themeBtn = document.getElementById('theme-toggle'); function applyTheme(isDark) { if (isDark) { document.documentElement.style.setProperty('--page-bg', '#24332C'); document.body.style.background = '#24332C'; document.body.style.color = '#F7F1E8'; themeBtn.textContent = '☽'; } else { document.documentElement.style.setProperty('--page-bg', '#F7F1E8'); document.body.style.background = '#F7F1E8'; document.body.style.color = '#24332C'; themeBtn.textContent = '☀︎'; } localStorage.setItem('tl-theme', isDark ? 'dark' : 'light'); } themeBtn.addEventListener('click', () => { const current = localStorage.getItem('tl-theme') === 'dark'; applyTheme(!current); }); const saved = localStorage.getItem('tl-theme'); applyTheme(saved === 'dark'); const modal = document.getElementById('auth-modal'); const title = document.getElementById('auth-title'); const content = document.getElementById('auth-content'); const closeBtn = document.getElementById('close-auth'); function showAuth(type) { modal.classList.remove('hidden'); modal.classList.add('grid'); if (type === 'login') { title.textContent = 'Log in to TerraLance'; content.innerHTML = `
`; } else { title.textContent = 'Create your account'; content.innerHTML = `
`; } } document.getElementById('login-trigger').addEventListener('click', () => showAuth('login')); document.getElementById('register-trigger').addEventListener('click', () => showAuth('register')); closeBtn.addEventListener('click', () => { modal.classList.add('hidden'); modal.classList.remove('grid'); }); // footer cookie const banner = document.getElementById('cookie-banner'); const acceptBtn = document.getElementById('accept-cookies'); if (!localStorage.getItem('terralance-cookie-consent')) banner.classList.remove('hidden'); acceptBtn.addEventListener('click', () => { localStorage.setItem('terralance-cookie-consent', 'true'); banner.classList.add('hidden'); }); // contact validation const form = document.getElementById('contact-form'); const errorModal = document.getElementById('form-error-modal'); const errorText = document.getElementById('form-errors'); const closeError = document.getElementById('close-form-error'); closeError.addEventListener('click', () => errorModal.classList.add('hidden')); form.addEventListener('submit', function(e) { const errors = []; const name = form.name.value.trim(); const email = form.email.value.trim(); const phone = form.phone.value.trim(); const msg = form.message.value.trim(); if (!name) errors.push('Name is required.'); if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) errors.push('Valid email is required.'); if (phone && !/^[\d\s\-\(\)]{7,20}$/.test(phone)) errors.push('Phone format looks invalid.'); if (!msg || msg.length < 10) errors.push('Message must be at least 10 characters.'); if (errors.length) { e.preventDefault(); errorText.innerHTML = errors.map(er => '• ' + er).join('
'); errorModal.classList.remove('hidden'); errorModal.classList.add('grid'); } });