Rootline Live

Welcome to Rootline Live

Sign-in and registration are demonstrated locally for this venue directory. Contact our team to begin a real booking conversation.

Planning desk

Your venue cart.

This is a planning list, not a payment page. Adjust quantities when comparing multiple dates or spaces, then contact the team to discuss availability.

Continue browsing

Ready for a real conversation?

Your list is saved locally. Contact Rootline Live so we can check dates, access needs, and venue terms with you.

Contact team
`; const footerHTML = ``; document.querySelector("header").innerHTML = headerHTML; document.querySelector("footer").innerHTML = footerHTML; let products = []; async function render() { let cart = JSON.parse(localStorage.getItem("rootline-cart") || "{}"); products = await fetch("./catalog.json").then(r => r.json()); let chosen = products.filter(x => cart[x.id]); const cartEl = document.getElementById("cart"); cartEl.innerHTML = chosen.length ? chosen.map(x => `

${x.name}

${x.city} · $${x.price.toLocaleString()} per day

${cart[x.id]}
`).join("") : `

Your cart is empty. Select a venue from the catalog to begin planning.

`; const totalEl = document.getElementById("total"); totalEl.textContent = `Estimated planning total: $${chosen.reduce((s,x) => s + x.price * (cart[x.id] || 0), 0).toLocaleString()}`; document.getElementById("checkout").disabled = !chosen.length; } document.addEventListener("click", e => { if (e.target.dataset.change) { let c = JSON.parse(localStorage.getItem("rootline-cart") || "{}"); let id = e.target.dataset.change; c[id] = (c[id] || 0) + Number(e.target.dataset.delta); if (c[id] <= 0) delete c[id]; localStorage.setItem("rootline-cart", JSON.stringify(c)); render(); } }); document.getElementById("checkout").addEventListener("click", () => { document.getElementById("confirm").showModal(); }); const themeToggle = document.getElementById("themeToggle"); if (themeToggle) { themeToggle.addEventListener("click", () => { document.documentElement.classList.toggle("dark"); localStorage.setItem("rootline-theme", document.documentElement.classList.contains("dark") ? "dark" : "light"); }); } if (localStorage.getItem("rootline-theme") === "dark") document.documentElement.classList.add("dark"); render();