Framewise Install / Field curriculum 01
Install with a system, not a guess.
Learn how to plan, connect, level, test, and document a dishwasher installation through concise modules designed for careful home improvement work.
Installation readiness76%
06core modules
24guided lessons
A practical learning dashboard for planning every connection before the first tool is picked up.
01
Map the route
Understand cabinet clearances, water entry, drainage, and electrical considerations before installation.
02
Make clean connections
Follow repeatable connection checks and learn how to spot common fit and alignment problems.
03
Verify the result
Use a commissioning sequence that prioritizes leak checks, stability, drainage, and clear documentation.
Start at your own pace
Choose a focused learning route.
From cabinet preparation to final testing, select a course that matches the stage of your project and keep useful modules in your tracked list.
Ask a course advisor
Learner stories
"The step-by-step checks saved me from a costly leak on my first install. Every module is actionable."
— Marcus Rivera, Homeowner
Learner stories
"Clear diagrams and checklists turned a confusing job into a confident, documented process."
— Lena Voss, DIY Renovator
`;
const footerHTML = `
`;
document.querySelector('header').innerHTML = headerHTML;
document.querySelector('footer').innerHTML = footerHTML;
function initTheme() {
const toggle = document.querySelector('[data-theme-toggle]');
if (!toggle) return;
if (localStorage.getItem('theme') === 'light') {
document.documentElement.classList.add('bg-white','text-slate-950');
document.documentElement.classList.remove('bg-slate-950','text-slate-100');
}
toggle.addEventListener('click', () => {
if (document.documentElement.classList.contains('bg-white')) {
document.documentElement.classList.remove('bg-white','text-slate-950');
document.documentElement.classList.add('bg-slate-950','text-slate-100');
localStorage.setItem('theme','dark');
} else {
document.documentElement.classList.add('bg-white','text-slate-950');
document.documentElement.classList.remove('bg-slate-950','text-slate-100');
localStorage.setItem('theme','light');
}
});
}
function initModals() {
const loginBtn = document.querySelector('[data-login-open]');
const registerBtn = document.querySelector('[data-register-open]');
const loginModal = document.querySelector('[data-login-modal]');
const registerModal = document.querySelector('[data-register-modal]');
function closeAll() {
if (loginModal) loginModal.classList.add('hidden');
if (registerModal) registerModal.classList.add('hidden');
if (loginModal) loginModal.classList.remove('flex');
if (registerModal) registerModal.classList.remove('flex');
}
if (loginBtn && loginModal) {
loginBtn.addEventListener('click', () => { loginModal.classList.remove('hidden'); loginModal.classList.add('flex'); });
}
if (registerBtn && registerModal) {
registerBtn.addEventListener('click', () => { registerModal.classList.remove('hidden'); registerModal.classList.add('flex'); });
}
document.querySelectorAll('[data-modal-close]').forEach(btn => btn.addEventListener('click', closeAll));
[loginModal, registerModal].forEach(modal => {
if (modal) modal.addEventListener('click', e => { if (e.target === modal) closeAll(); });
});
}
function initMobile() {
const openBtn = document.querySelector('[data-mobile-open]');
const panel = document.querySelector('[data-mobile-panel]');
if (!openBtn || !panel) return;
openBtn.addEventListener('click', () => {
panel.classList.toggle('hidden');
});
}
function initCookie() {
const banner = document.querySelector('[data-cookie-banner]');
const closeBtn = document.querySelector('[data-cookie-close]');
if (!banner || !closeBtn) return;
if (!localStorage.getItem('cookieConsent')) {
banner.classList.remove('hidden');
banner.classList.add('flex');
}
closeBtn.addEventListener('click', () => {
localStorage.setItem('cookieConsent', 'true');
banner.classList.remove('flex');
banner.classList.add('hidden');
});
}
initTheme();
initModals();
initMobile();
initCookie();