/* Earnings Calculator — dead simple. * Two sliders. One recurring number. No tiers, no events, no jargon. */ const VENUE_PICKER = [ { slug: "hair-salons", label: "Hair Salon" }, { slug: "yoga-studios", label: "Yoga / Pilates Studio" }, { slug: "chiropractors", label: "Chiropractic Practice" }, { slug: "gyms", label: "Gym / PT Studio" }, { slug: "boutique-fitness", label: "Boutique Fitness Chain" }, ]; function fmtMoney(n) { if (n >= 1000) return "$" + Math.round(n).toLocaleString(); return "$" + Math.round(n); } function fmtBig(n) { return "$" + Math.round(n).toLocaleString(); } window.PartnerCalculator = function PartnerCalculator({ slug: initialSlug, compact = false }) { const [slug, setSlug] = React.useState(initialSlug || "hair-salons"); const data = window.PARTNER_DATA[slug]; const accent = data ? data.accent : "#a3793a"; const accentSoft = data ? data.accentSoft : "#f1e6d2"; const defaults = data ? data.calc.defaults : null; const [clientCount, setClientCount] = React.useState(defaults ? defaults.clientCount : 600); const [conversionPct, setConversionPct] = React.useState(defaults ? defaults.memberConversionPct : 0.05); const [emailGated, setEmailGated] = React.useState(false); const [email, setEmail] = React.useState(""); const [submitted, setSubmitted] = React.useState(false); React.useEffect(() => { if (defaults) { setClientCount(defaults.clientCount); setConversionPct(defaults.memberConversionPct); } }, [slug]); if (!defaults) return null; const patientsConverting = Math.round(clientCount * conversionPct); const monthlyRecurring = patientsConverting * defaults.feePerPatientPerMonth; const annualRecurring = monthlyRecurring * 12; function submitEmail(e) { e.preventDefault(); if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) return; setSubmitted(true); try { sessionStorage.setItem( "partner_calc_lead", JSON.stringify({ slug, clientCount, conversionPct, email, ts: Date.now() }) ); } catch (e) {} } return (