DistinctVox SoleCraft

Restore. Renew. Resole.

Learn artisan shoe repair with structured, hands-on courses designed by master cobblers. Calm layouts, clear steps, and real-world projects.

Master-led lessons

Each course is planned by seasoned cobblers with years of bench experience across leather, rubber, and synthetics.

Practice-first approach

Short demonstrations followed by guided practice. You will resole, stitch, dye, and finish with confidence.

No false urgency

We avoid gimmicks. Clear pricing, lifelong updates, and honest expectations. Learn at your pace.

Find your path

Choose your current skill and main interest. We’ll suggest where to start.

See suggested courses

`; const footerHTML = ``; const hc = document.querySelector('header'); const fc = document.querySelector('footer'); if (hc) hc.outerHTML = headerHTML; if (fc) fc.outerHTML = footerHTML; setTimeout(() => { initAllScripts(); }, 50); } function initAllScripts() { // Mobile menu const mobileBtn = document.getElementById('mobileMenuBtn'); const mobileMenu = document.getElementById('mobileMenu'); if (mobileBtn && mobileMenu) { mobileBtn.addEventListener('click', () => mobileMenu.classList.toggle('hidden')); } // Theme modal const themeBtn = document.getElementById('themeBtn'); const themeBtnMobile = document.getElementById('themeBtnMobile'); const themeModal = document.getElementById('themeModal'); const closeTheme = document.getElementById('closeThemeModal'); if (themeBtn && themeModal) { themeBtn.addEventListener('click', () => themeModal.classList.remove('hidden')); themeBtn.addEventListener('click', () => themeModal.classList.add('flex')); } if (themeBtnMobile && themeModal) { themeBtnMobile.addEventListener('click', () => themeModal.classList.remove('hidden')); themeBtnMobile.addEventListener('click', () => themeModal.classList.add('flex')); } if (closeTheme && themeModal) closeTheme.addEventListener('click', () => { themeModal.classList.add('hidden'); themeModal.classList.remove('flex'); }); if (themeModal) { themeModal.querySelectorAll('[data-theme]').forEach(btn => { btn.addEventListener('click', () => { document.documentElement.classList.remove('dark'); if (btn.dataset.theme === 'dark') document.documentElement.classList.add('dark'); themeModal.classList.add('hidden'); themeModal.classList.remove('flex'); }); }); } // Login modal const loginBtn = document.getElementById('loginBtn'); const loginBtnMobile = document.getElementById('loginBtnMobile'); const loginModal = document.getElementById('loginModal'); const closeLogin = document.getElementById('closeLoginModal'); if (loginBtn && loginModal) { loginBtn.addEventListener('click', () => loginModal.classList.remove('hidden')); loginBtn.addEventListener('click', () => loginModal.classList.add('flex')); } if (loginBtnMobile && loginModal) { loginBtnMobile.addEventListener('click', () => loginModal.classList.remove('hidden')); loginBtnMobile.addEventListener('click', () => loginModal.classList.add('flex')); } if (closeLogin && loginModal) closeLogin.addEventListener('click', () => { loginModal.classList.add('hidden'); loginModal.classList.remove('flex'); }); const loginForm = document.getElementById('loginForm'); if (loginForm) loginForm.addEventListener('submit', e => { e.preventDefault(); alert('Signed in successfully!'); loginModal.classList.add('hidden'); loginModal.classList.remove('flex'); }); // Path Finder suggestions const levelPick = document.getElementById('levelPick'); const focusPick = document.getElementById('focusPick'); const suggestText = document.getElementById('suggestText'); function updateSuggestion() { if (!levelPick || !focusPick || !suggestText) return; const level = levelPick.value; const focus = focusPick.value; const rec = { 'Beginner:Leather Care': 'Start with “Leather Conditioning Basics” and “Edge Finishing Essentials.”', 'Beginner:Sole Work': 'Begin with “Hand Resole Basics” before “Rubber Sole Replacement.”', 'Intermediate:Sneakers': 'Take “Sneaker Midsole De-yellowing” and “Foam Patch & Bond.”', 'Advanced:Stitching': 'Jump into “Goodyear Welt Stitch Deep Dive.”' }; const key = level + ':' + focus; suggestText.textContent = rec[key] || 'Browse the catalog and filter by your level and topic.'; } if (levelPick) levelPick.addEventListener('change', updateSuggestion); if (focusPick) focusPick.addEventListener('change', updateSuggestion); updateSuggestion(); // Cookies const cookieBanner = document.getElementById('cookieBanner'); const state = localStorage.getItem('cookieConsent'); if (!state && cookieBanner) cookieBanner.classList.remove('hidden'); const accept = document.getElementById('cookieAccept'); const decline = document.getElementById('cookieDecline'); if (accept && cookieBanner) accept.addEventListener('click', () => { localStorage.setItem('cookieConsent', 'accepted'); cookieBanner.classList.add('hidden'); }); if (decline && cookieBanner) decline.addEventListener('click', () => { localStorage.setItem('cookieConsent', 'declined'); cookieBanner.classList.add('hidden'); }); } injectPartials();