Beginners learn best when pages are deliberately left open for mistakes. A course that celebrates revision is the one that stays with you.
`;
document.getElementById('site-header').innerHTML = headerHTML;
document.getElementById('site-footer').innerHTML = footerHTML;
const state = {items:[],page:1,size:6};
const favKey = "rcs-favorites", cartKey = "rcs-cart";
const $ = id => document.getElementById(id);
const esc = s => String(s).replace(/[&<>"']/g, m => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[m]));
function favorites(){return JSON.parse(localStorage.getItem(favKey)||"[]")}
function cart(){return JSON.parse(localStorage.getItem(cartKey)||"[]")}
function saveCart(c){localStorage.setItem(cartKey,JSON.stringify(c))}
function applyTheme(t){document.documentElement.style.setProperty('--accent',t==='dark'?'#513326':'#6B4632')}
function initTheme(){const saved=localStorage.getItem('rcs-theme')||'light';applyTheme(saved);document.documentElement.dataset.theme=saved}
function toggleTheme(){const cur=document.documentElement.dataset.theme||'light';const next=cur==='light'?'dark':'light';localStorage.setItem('rcs-theme',next);applyTheme(next);document.documentElement.dataset.theme=next}
function renderFilters(items){
const cats = [...new Set(items.map(i=>i.category))];const lvls=[...new Set(items.map(i=>i.level))];
const catSel=$("category");catSel.innerHTML=''+cats.map(c=>``).join('');
const lvlSel=$("level");lvlSel.innerHTML=''+lvls.map(l=>``).join('');
}
function render(){
let q=$("search").value.toLowerCase(),c=$("category").value,l=$("level").value;
let a=state.items.filter(x=>(!q||`${x.title} ${x.summary} ${x.category}`.toLowerCase().includes(q))&&(!c||x.category===c)&&(!l||x.level===l));
let pages=Math.max(1,Math.ceil(a.length/state.size));state.page=Math.min(state.page,pages);
let visible=a.slice((state.page-1)*state.size,state.page*state.size);
$("status").textContent=`${a.length} course${a.length===1?"":"s"} found`;
$("grid").innerHTML=visible.map(x=>`
${esc(x.category)} · ${esc(x.level)}
${esc(x.title)}
${esc(x.summary)}
$${x.price.toFixed(2)} · ${esc(x.duration)}
`).join("");
$("pagination").innerHTML=Array.from({length:pages},(_,i)=>`${i+1}`).join("");
}
function detail(id){let x=state.items.find(i=>i.id===id);$("detail-content").innerHTML=`