/* global React, Button, Card, Badge, Section, SectionHeader, Input */
const { useState } = React;
// ──────────────────────────────────────────
// ROI Calculator
// ──────────────────────────────────────────
function ROICalculator({ industryId }) {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
const industry = window.BD.localIndustry(industryId, loc);
const [callsPerDay, setCallsPerDay] = useState(industry.callsPerDay);
const [missRate, setMissRate] = useState(Math.round(industry.missRate * 100));
const [avgTicket, setAvgTicket] = useState(industry.avgTicket);
const [conversion, setConversion] = useState(35);
React.useEffect(() => {
setCallsPerDay(industry.callsPerDay);
setMissRate(Math.round(industry.missRate * 100));
setAvgTicket(industry.avgTicket);
}, [industry.id]);
const monthlyMissed = callsPerDay * 24 * (missRate / 100);
const lostBookings = monthlyMissed * (conversion / 100);
const lostRevenue = lostBookings * avgTicket;
const recoverable = lostRevenue * 0.78;
const krw = (n) => {
if (loc === 'en') return '₩' + Math.round(n).toLocaleString('en-US');
return '₩' + Math.round(n).toLocaleString('ko-KR');
};
const Slider = ({ label, value, setValue, min, max, step = 1, unit, suffix }) => (
{label}
{value.toLocaleString(loc === 'ko' ? 'ko-KR' : 'en-US')}{unit}{suffix ? ' ' + suffix : ''}
setValue(Number(e.target.value))}
style={{ width: '100%', accentColor: 'var(--color-signal)', height: '4px' }}/>
);
return (
{c.roi.basis(industry.fullLabel)}
{c.roi.lossLabel}
{krw(lostRevenue)}
{c.roi.lossDetail(Math.round(monthlyMissed), Math.round(lostBookings))}
{c.roi.recoverLabel}
+{krw(recoverable)}
{c.roi.recoverDetail(krw(recoverable * 12))}
);
}
// ──────────────────────────────────────────
// Trust + Compliance strip
// ──────────────────────────────────────────
function TrustStrip() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
return (
{c.trust.items.map((t, i) => (
))}
);
}
// ──────────────────────────────────────────
// Design Partners
// ──────────────────────────────────────────
function DesignPartners() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
return (
{c.partners.slots.map((s, i) => {
const ind = window.BD.localIndustry(s.vertId, loc);
return (
LOGO
{ind.label}
{s.name}
{s.loc} · {c.partners.betaSuffix}
{c.partners.quote}
);
})}
);
}
// ──────────────────────────────────────────
// Pricing Inquiry
// ──────────────────────────────────────────
function PricingInquiry() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
return (
{c.pricing.headline}
{c.pricing.bullets.map((t, i) => (
-
{t}
))}
{c.pricing.contactLabel}
{c.pricing.emailLabel}
hello@badeum.com
);
}
// ──────────────────────────────────────────
// FAQ
// ──────────────────────────────────────────
function FAQSection() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
const [open, setOpen] = useState(0);
return (
{c.faq.items.map((item, i) => {
const isOpen = open === i;
return (
{item.a}
);
})}
);
}
// ──────────────────────────────────────────
// Final CTA
// ──────────────────────────────────────────
function FinalCTA() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
const [submitted, setSubmitted] = useState(false);
const [form, setForm] = useState({ name: '', biz: '', phone: '', vert: 'dental' });
const onSubmit = (e) => { e.preventDefault(); setSubmitted(true); };
return (
{c.cta.badge}
{c.cta.title}
{c.cta.sub}
{c.cta.meta}
{submitted ? (
✓
{c.cta.successTitle}
{c.cta.successBody(form.name)}
) : (
)}
);
}
// ──────────────────────────────────────────
// Footer
// ──────────────────────────────────────────
function Footer() {
const [loc] = window.BD.useLocale();
const c = window.BD.COPY[loc];
return (
);
}
function BadeumMarkFooter() {
return (
);
}
Object.assign(window, { ROICalculator, TrustStrip, DesignPartners, PricingInquiry, FAQSection, FinalCTA, Footer });