Framewise Air / Practical home stewardship

A clearer frame for every filter change.

Build confident habits around air-filter sizing, safe replacement, airflow awareness, and seasonal planning through concise, beautifully structured lessons.

Measure with care

Learn how dimensions, fit, airflow direction, and equipment guidance work together before you buy.

Replace with rhythm

Create a practical schedule that respects your home, season, occupancy, and filter condition.

Record what matters

Use simple notes to make future maintenance easier for households, landlords, and caretakers.

A composed learning path

From first measurement to a dependable maintenance ritual.

Our courses are educational and practical. They do not replace equipment manuals or qualified professional advice, but they help you ask better questions and approach routine filter work with care.

View courses

Make the next change the easiest one.

Explore guided lessons, printable checklists, and thoughtful home-care resources designed for real schedules.

`; headerContainer.innerHTML = headerHTML; footerContainer.innerHTML = footerHTML; initSharedScripts(); } function initSharedScripts() { const style = document.createElement('style'); style.innerHTML = 'body{font-family:system-ui,-apple-system,sans-serif}.font-serif{font-family:ui-serif,Georgia,serif}'; document.head.append(style); const modal = document.getElementById('auth-modal'); const container = document.getElementById('form-container'); function openAuth(type) { modal.classList.remove('hidden'); modal.classList.add('flex'); if (type === 'login') { container.innerHTML = `
`; } else { container.innerHTML = `
`; } } document.querySelectorAll('[data-open-auth]').forEach(btn => btn.addEventListener('click', () => openAuth(btn.dataset.openAuth))); document.getElementById('close-modal').addEventListener('click', () => { modal.classList.remove('flex'); modal.classList.add('hidden'); }); const themeBtn = document.querySelector('[data-theme-toggle]'); function toggleTheme() { if (document.documentElement.classList.contains('bg-[#F6F1E7]')) { document.documentElement.classList.remove('bg-[#F6F1E7]', 'text-[#071426]'); document.body.classList.remove('bg-[#F6F1E7]', 'text-[#071426]'); document.body.style.background = '#071426'; document.body.style.color = '#F6F1E7'; } else { document.documentElement.classList.add('bg-[#F6F1E7]', 'text-[#071426]'); document.body.classList.add('bg-[#F6F1E7]', 'text-[#071426]'); document.body.style.background = '#F6F1E7'; document.body.style.color = '#071426'; } } if (themeBtn) themeBtn.addEventListener('click', toggleTheme); const mobileBtn = document.getElementById('mobile-nav'); const mobileMenu = document.getElementById('mobile-menu'); if (mobileBtn && mobileMenu) mobileBtn.addEventListener('click', () => mobileMenu.classList.toggle('hidden')); const cookieBanner = document.getElementById('cookie-banner'); const acceptBtn = cookieBanner ? cookieBanner.querySelector('[data-accept-cookies]') : null; function initCookies() { if (!localStorage.getItem('framewiseCookiesAccepted') && cookieBanner) { cookieBanner.classList.remove('hidden'); cookieBanner.classList.add('flex'); } } if (acceptBtn) acceptBtn.addEventListener('click', () => { localStorage.setItem('framewiseCookiesAccepted', 'true'); cookieBanner.classList.remove('flex'); cookieBanner.classList.add('hidden'); }); window.addEventListener('load', initCookies); } injectComponents();