{ /* ============================================================ Content Stack Lab — Contact Page ============================================================ */ const { useEffect } = React; const { Button } = window.ContentStackLabDesignSystem_cbb53c; const Arrow = window.Arrow; const admin = window.CSLAdmin || {}; const pageHero = (admin.heroes && admin.heroes.contact) || {}; const interests = (window.CSL && window.CSL.contactInterests) || []; function ContactHero() { return (
{pageHero.subheading ?

{pageHero.subheading}

: null}
); } function ContactForm() { const [selectedInterests, setSelectedInterests] = React.useState(interests[0] ? [interests[0]] : []); const toggleInterest = (item) => { setSelectedInterests((prev) => prev.includes(item) ? prev.filter((i) => i !== item) : [...prev, item]); }; const [status, setStatus] = React.useState(null); // null | "sending" | "sent" | "error" const [errorMsg, setErrorMsg] = React.useState(""); const onSubmit = async (e) => { e.preventDefault(); const form = e.currentTarget; if (selectedInterests.length === 0) { setStatus("error"); setErrorMsg("Please select at least one area you're interested in."); return; } const data = new FormData(form); data.set("interest", selectedInterests.join(", ")); data.set("local_time", new Date().toLocaleString("en-US", { dateStyle: "medium", timeStyle: "short" })); setStatus("sending"); setErrorMsg(""); try { const res = await fetch("api/contact.php", { method: "POST", body: data }); const json = await res.json().catch(() => ({})); if (res.ok && json.ok) { setStatus("sent"); form.reset(); setSelectedInterests(interests[0] ? [interests[0]] : []); } else { throw new Error(json.error || "Something went wrong. Please try again."); } } catch (err) { setStatus("error"); setErrorMsg(err.message || "Something went wrong. Please try again."); } }; return (
I'm interested in
{interests.length ? interests.map((item) => ( )) : null}
{status === "sent" ? (

Thanks for reaching out. I review every enquiry personally and will get back to you within 24 hours. If your timeline is tight, you can also book a free 30-minute call and we'll get straight to it.

) : null} {status === "error" ? (

{errorMsg}

) : null}
); } function ContactMain() { return (

Drop the Details.

The brief, the problem, or just the question. I'll take it from here

); } function ContactPage() { window.useReveal(); useEffect(() => window.scrollTo(0, 0), []); return (
); } ReactDOM.createRoot(document.getElementById("root")).render(); }