Welcome back
Sign-in is presented as a private preview for this static learning studio.
Create your studio profile
Save your learning trail and return to your selected modules.
Your constellation
Followed ideas, gathered in one place.
This private browser view remembers the modules you marked for a later return.
`;
const footerHTML = ``;
document.getElementById('site-header').innerHTML = headerHTML;
document.getElementById('site-footer').innerHTML = footerHTML;
const list = document.getElementById('followed-list');
function getIds() { return JSON.parse(localStorage.getItem('clearSceneFollows') || '[]'); }
function setIds(ids) { localStorage.setItem('clearSceneFollows', JSON.stringify(ids)); }
function render(data) {
const chosen = data.filter(p => getIds().includes(p.id));
if (chosen.length) {
list.innerHTML = chosen.map(p => `
${p.category}
${p.title}
${p.shortDescription}
`).join('');
} else {
list.innerHTML = `Your constellation is waiting.
Follow a catalog item and it will appear here.
Browse catalog `;
}
}
fetch('./catalog.json').then(r => r.json()).then(render).catch(() => {
list.innerHTML = `Your constellation is waiting.
Follow a catalog item and it will appear here.
Browse catalog `;
});
document.addEventListener('click', e => {
if (e.target.dataset.remove) {
const newIds = getIds().filter(x => x !== e.target.dataset.remove);
setIds(newIds);
fetch('./catalog.json').then(r => r.json()).then(render);
}
});
(function initHeaderFooter() {
const nav = document.getElementById('main-navigation');
const mobile = document.getElementById('mobile-navigation');
const toggle = document.getElementById('mobile-menu-toggle');
const themeBtn = document.getElementById('theme-toggle');
if (toggle) toggle.addEventListener('click', () => mobile.classList.toggle('hidden'));
document.querySelectorAll('[data-modal-open]').forEach(b => b.addEventListener('click', () => {
const m = document.getElementById(b.dataset.modalOpen);
if (m) m.classList.replace('hidden', 'flex');
}));
document.querySelectorAll('[data-modal-close]').forEach(b => b.addEventListener('click', () => {
const m = document.getElementById(b.dataset.modalClose);
if (m) m.classList.replace('flex', 'hidden');
}));
if (themeBtn) {
const root = document.documentElement;
const saved = localStorage.getItem('clearSceneTheme');
if (saved === 'light') {
root.classList.add('bg-white', 'text-slate-950');
root.classList.remove('bg-slate-950', 'text-slate-100');
}
themeBtn.addEventListener('click', () => {
if (root.classList.contains('bg-white')) {
root.classList.remove('bg-white', 'text-slate-950');
root.classList.add('bg-slate-950', 'text-slate-100');
localStorage.setItem('clearSceneTheme', 'dark');
} else {
root.classList.add('bg-white', 'text-slate-950');
root.classList.remove('bg-slate-950', 'text-slate-100');
localStorage.setItem('clearSceneTheme', 'light');
}
});
}
const cookie = document.getElementById('cookie-banner');
if (localStorage.getItem('clearSceneCookies') === 'accepted' && cookie) cookie.remove();
const cookieClose = document.getElementById('cookie-close');
if (cookieClose) cookieClose.addEventListener('click', () => {
localStorage.setItem('clearSceneCookies', 'accepted');
if (cookie) cookie.remove();
});
document.querySelectorAll('#auth-modal form, #register-modal form').forEach(f => f.addEventListener('submit', e => {
e.preventDefault();
const modal = f.closest('[id$="-modal"]');
if (modal) modal.classList.replace('flex', 'hidden');
alert('Action completed for learning purposes.');
}));
})();