Home Catalog About Contact FAQ Cart Fallows Privacy Terms
Close Welcome to PeteCatalyst Studio This secure preview keeps your learning preferences local to this browser.
Close Interface theme Choose a calm display mode for longer drawing sessions.
Dark Light
STUDIO SUPPORT
Bring us your drawing question.
Tell us what you are practicing, where the process feels unclear, or which course format would help you learn well. We reply thoughtfully within two business days.
Direct desk
We review thoughtful questions during regular studio hours and aim to reply with a useful next step. Mention your vector lantern work or gesture atlas practice for faster routing.
420 California Street, San Francisco, CA 94104
petecatalyst.bond
Please review your message
Close
© 2025 PeteCatalyst Studio. All rights reserved.
We use a small preference cookie to remember your display and consent choices.
Accept
`;
const footerHTML = `
© 2025 PeteCatalyst Studio. All rights reserved.
We use a small preference cookie to remember your display and consent choices.
Accept
`;
document.querySelector('header').innerHTML = headerHTML;
document.querySelector('footer').innerHTML = footerHTML;
// Re-attach header & footer scripts
(() => {
const q = s => document.querySelector(s);
q('[data-mobile-open]')?.addEventListener('click', () => q('[data-mobile-menu]').classList.toggle('hidden'));
document.querySelectorAll('[data-auth-open]').forEach(b => b.onclick = () => {
q('[data-auth-modal]').classList.remove('hidden');
q('[data-auth-title]').textContent = b.dataset.authOpen === 'login' ? 'Log in to your studio' : 'Create your studio profile';
});
q('[data-theme-open]')?.addEventListener('click', () => q('[data-theme-modal]').classList.remove('hidden'));
document.querySelectorAll('[data-modal-close]').forEach(b => b.onclick = () => b.closest('[role="dialog"]').classList.add('hidden'));
// Theme buttons
document.querySelectorAll('[data-set-theme]').forEach(btn => {
btn.onclick = () => {
if (btn.dataset.setTheme === 'light') {
document.documentElement.style.setProperty('--tw-bg-opacity', '1');
document.body.classList.remove('bg-slate-950');
document.body.classList.add('bg-slate-100', 'text-slate-950');
} else {
document.body.classList.remove('bg-slate-100', 'text-slate-950');
document.body.classList.add('bg-slate-950', 'text-slate-100');
}
q('[data-theme-modal]').classList.add('hidden');
};
});
})();
// Cookie banner
(() => {
const b = document.querySelector('[data-cookie-banner]');
if (localStorage.getItem('pc-cookie-consent')) b?.remove();
document.querySelector('[data-cookie-close]')?.addEventListener('click', () => {
localStorage.setItem('pc-cookie-consent', 'yes');
b?.remove();
});
})();
// Contact form validation
const form = document.querySelector('#contact-form');
const errorModal = document.querySelector('#error-modal');
const errorText = document.querySelector('#error-text');
const errorClose = document.querySelector('#error-close');
form.addEventListener('submit', function(e) {
const requiredFields = [...form.querySelectorAll('[required]')];
const bad = requiredFields.filter(x => {
if (!x.value.trim()) return true;
if (x.type === 'email' && !x.validity.valid) return true;
if (x.name === 'message' && x.value.trim().length < 20) return true;
return false;
});
if (bad.length) {
e.preventDefault();
errorText.textContent = 'Please provide your name, a valid email, a reachable phone number, and a message of at least 20 characters.';
errorModal.classList.remove('hidden');
errorModal.classList.add('grid');
}
});
errorClose.addEventListener('click', () => {
errorModal.classList.remove('grid');
errorModal.classList.add('hidden');
});