FrameLift Collective

Effective January 1, 2025

Privacy Policy

FrameLift Collective is committed to protecting the personal information of our community members who explore practical airflow skills.

1. Scope

This policy explains how FrameLift Collective handles information when you browse our website, save courses locally, use the cart, or contact our team.

2. Information you provide

If you contact us, we receive the name, email address, optional phone number, and message you submit. Please do not include sensitive information that is not needed to answer your question.

3. How we use information

We use contact details to respond to requests, understand the subject of support, coordinate group learning conversations, and maintain reasonable business records. We do not sell submitted contact information.

4. Local browser storage

Tracked courses, cart quantities, theme preference, and cookie consent are stored in your browser using localStorage. This demonstration does not transmit those preferences to FrameLift servers. You can remove them through the site controls or your browser settings.

5. Cookies and similar technologies

The cookie banner records your consent choice locally. The site is designed without advertising profiles or hidden tracking pixels.

6. Retention and sharing

We retain correspondence only as long as reasonably needed to respond, provide support, meet business obligations, or resolve disputes. We may use trusted service providers to operate communications, subject to appropriate instructions. We disclose information when required by law.

7. Security and rights

We use reasonable administrative and technical measures, but no internet transmission is guaranteed to be completely secure. Depending on applicable law, you may request access, correction, deletion, restriction, or a copy of your personal information.

8. Children and changes

The service is intended for general audiences and is not directed at children. We may update this policy by changing the effective date and publishing the revised text.

9. Contact

Questions about privacy may be sent to [email protected] or visit our contact page.

`; footerContainer.innerHTML = footerHTML; } // Initialize theme toggle and mobile menu function initInteractiveElements() { // Theme toggle const themeBtn = document.getElementById('theme-toggle'); if (themeBtn) { themeBtn.addEventListener('click', () => { if (document.documentElement.classList.contains('dark')) { document.documentElement.classList.remove('dark'); localStorage.setItem('framelift-theme', 'light'); } else { document.documentElement.classList.add('dark'); localStorage.setItem('framelift-theme', 'dark'); } }); const savedTheme = localStorage.getItem('framelift-theme'); if (savedTheme === 'dark') { document.documentElement.classList.add('dark'); } } // Mobile menu const mobileToggle = document.getElementById('mobile-menu-toggle'); const mobileNav = document.getElementById('mobile-navigation'); if (mobileToggle && mobileNav) { mobileToggle.addEventListener('click', () => { const isOpen = mobileNav.classList.toggle('hidden'); mobileToggle.setAttribute('aria-expanded', !isOpen); }); } // Login / Register buttons const loginBtn = document.getElementById('login-btn'); const registerBtn = document.getElementById('register-btn'); const mobileLogin = document.getElementById('mobile-login-btn'); const mobileRegister = document.getElementById('mobile-register-btn'); function showModal(type) { const modal = document.createElement('div'); modal.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4'; modal.innerHTML = `

${type === 'login' ? 'Welcome back' : 'Create account'}

${type === 'register' ? '' : ''}

This is a demonstration modal — no data is sent.

`; document.body.appendChild(modal); modal.querySelector('.close-modal').addEventListener('click', () => modal.remove()); modal.addEventListener('click', (e) => { if (e.target === modal) modal.remove(); }); const form = modal.querySelector('form'); form.addEventListener('submit', (e) => { e.preventDefault(); modal.remove(); const success = document.createElement('div'); success.className = 'fixed bottom-6 right-6 bg-slate-900 text-white px-5 py-3 rounded-2xl shadow-xl text-sm font-medium z-50'; success.textContent = type === 'login' ? 'Logged in successfully.' : 'Account created. Check your email.'; document.body.appendChild(success); setTimeout(() => success.remove(), 2800); }); } if (loginBtn) loginBtn.onclick = () => showModal('login'); if (registerBtn) registerBtn.onclick = () => showModal('register'); if (mobileLogin) mobileLogin.onclick = () => showModal('login'); if (mobileRegister) mobileRegister.onclick = () => showModal('register'); } // Cookie banner function initCookieBanner() { const banner = document.getElementById('cookie-banner'); const acceptBtn = document.getElementById('accept-cookies'); const consentKey = 'framelift-cookie-consent'; function hideBanner() { if (banner) banner.style.display = 'none'; } if (localStorage.getItem(consentKey)) { if (banner) banner.style.display = 'none'; } else { setTimeout(() => { if (banner) banner.style.display = 'flex'; }, 1200); } if (acceptBtn) { acceptBtn.addEventListener('click', () => { localStorage.setItem(consentKey, 'true'); hideBanner(); }); } } // Boot everything async function initializePage() { initTailwind(); await loadHeader(); await loadFooter(); initInteractiveElements(); initCookieBanner(); } initializePage();