🎵
TONES by AysaTONES'">
Or Continue With
Or Continue With
// Tab switching document.querySelectorAll('.tab').forEach(tab => { tab.addEventListener('click', function() { const targetTab = this.dataset.tab; document.querySelectorAll('.form-section').forEach(el => el.classList.remove('active')); document.querySelectorAll('.tab').forEach(el => el.classList.remove('active')); document.getElementById(targetTab).classList.add('active'); this.classList.add('active'); const header = document.getElementById('pageHeader'); if (targetTab === 'signin') { header.innerHTML = '

Welcome Back

SIGN IN TO YOUR ACCOUNT

'; } else { header.innerHTML = '

Join Us

CREATE YOUR ACCOUNT

'; } document.querySelectorAll('.error').forEach(el => el.classList.remove('show')); }); }); // Sign In document.getElementById('signinForm').addEventListener('submit', async function(e) { e.preventDefault(); const email = document.getElementById('signinEmail').value.trim(); const password = document.getElementById('signinPassword').value; const errorEl = document.getElementById('signinError'); const submitBtn = this.querySelector('button[type="submit"]'); errorEl.classList.remove('show'); submitBtn.disabled = true; try { const { data, error } = await supabaseClient.auth.signInWithPassword({ email: email, password: password }); if (error) throw error; console.log('✅ Signed in:', email); window.location.href = 'app.html'; } catch (err) { console.error('Sign in error:', err); errorEl.textContent = err.message; errorEl.classList.add('show'); submitBtn.disabled = false; } }); // Sign Up document.getElementById('signupForm').addEventListener('submit', async function(e) { e.preventDefault(); const name = document.getElementById('signupName').value.trim(); const email = document.getElementById('signupEmail').value.trim(); const password = document.getElementById('signupPassword').value; const confirmPassword = document.getElementById('confirmPassword').value; const errorEl = document.getElementById('signupError'); const submitBtn = this.querySelector('button[type="submit"]'); errorEl.classList.remove('show'); if (password !== confirmPassword) { errorEl.textContent = 'Passwords do not match'; errorEl.classList.add('show'); return; } submitBtn.disabled = true; try { const { data, error } = await supabaseClient.auth.signUp({ email, password, options: { data: { full_name: name }, emailRedirectTo: window.location.origin + '/app.html' } }); if (error) throw error; console.log('✅ Account created:', email); errorEl.classList.remove('error'); errorEl.classList.add('success', 'show'); errorEl.textContent = '✅ Account created! Check your email to verify.'; setTimeout(() => { window.location.href = 'app.html'; }, 2000); } catch (err) { console.error('Sign up error:', err); errorEl.textContent = err.message; errorEl.classList.add('show'); submitBtn.disabled = false; } }); // Google OAuth async function signInWithGoogle() { if (!supabaseClient) { alert('Supabase not initialized'); return; } try { const { data, error } = await supabaseClient.auth.signInWithOAuth({ provider: 'google', options: { redirectTo: window.location.origin + '/app.html' } }); if (error) throw error; } catch (err) { console.error('Google signin error:', err); alert('Google sign in failed: ' + err.message); } } document.getElementById('googleSignin').addEventListener('click', signInWithGoogle); document.getElementById('googleSignup').addEventListener('click', signInWithGoogle); // Facebook OAuth async function signInWithFacebook() { if (!supabaseClient) { alert('Supabase not initialized'); return; } try { const { data, error } = await supabaseClient.auth.signInWithOAuth({ provider: 'facebook', options: { redirectTo: window.location.origin + '/app.html' } }); if (error) throw error; } catch (err) { console.error('Facebook signin error:', err); alert('Facebook sign in failed: ' + err.message); } } document.getElementById('facebookSignin').addEventListener('click', signInWithFacebook); document.getElementById('facebookSignup').addEventListener('click', signInWithFacebook); // Run on load window.addEventListener('load', () => { initSupabase(); });