/* =========================================================== Halvorsen — Locations + FAQ + Contact + Booking modal + Footer =========================================================== */ const LOCATIONS = [ { city: "London", addr: "33 Grosvenor Place\nLondon SW1X 7HY", days: "Mon · Tue · Thu", consult: "Cleveland Clinic London", surgery: "Cleveland Clinic London", tel: "+44 (0)20 7946 0214", motif: "knee", }, { city: "Oslo", addr: "Hansteens gate 5\n0253 Oslo, Norway", days: "Wed · Fri", consult: "Volvat Oslo", surgery: "Volvat Oslo", tel: "+47 22 95 75 00", motif: "shoulder", }, { city: "Telemedicine", addr: "Worldwide\nSecond opinions only", days: "Friday afternoons", consult: "Encrypted video", surgery: "—", tel: "—", motif: "hip", }, ]; const Locations = () => { const [active, setActive] = React.useState(0); const cur = LOCATIONS[active]; const Motif = { knee: KneeMotif, shoulder: ShoulderMotif, hip: HipMotif }[cur.motif]; return (

Two clinics, one standard.

    {LOCATIONS.map((l, i) => (
  • setActive(i)} tabIndex={0} onKeyDown={(e) => { if (e.key === "Enter") setActive(i); }} style={{ padding: "32px 24px", borderTop: "1px solid var(--line)", borderBottom: i === LOCATIONS.length - 1 ? "1px solid var(--line)" : "none", background: active === i ? "var(--bone)" : "transparent", cursor: "pointer", display: "grid", gridTemplateColumns: "60px 1fr auto", alignItems: "baseline", transition: "background 280ms var(--ease)", }} > {String(i + 1).padStart(2, "0")}
    {l.city}
    {l.consult}
    {l.days}
  • ))}
Clinic · {cur.city}
Address
{cur.addr}
Telephone
{cur.tel}
); }; /* ---------- FAQ ---------- */ const FAQS = [ { q: "How quickly can I be seen?", a: "Initial consultations are typically available within 7–10 days in London and 3–5 days in Oslo. Urgent sports injuries are triaged within 48 hours." }, { q: "Do you take insurance?", a: "Yes — Bupa, AXA Health, Aviva, Vitality, WPA, Cigna, Allianz Care, and most international policies. We provide pre-authorisation paperwork on your behalf." }, { q: "Will my surgeon perform my surgery?", a: "Always. Dr. Halvorsen performs every operation she books. Trainees may assist; nobody else is the lead." }, { q: "What about second opinions?", a: "Strongly encouraged. Friday telemedicine slots are reserved exclusively for second opinions on existing recommendations." }, { q: "Do you publish your data?", a: "Yes. The full registry — including complications, revisions, and PROMs — is updated quarterly and available on request." }, { q: "What is the cost?", a: "Initial consultation is £280 / NOK 3,400. Surgery is quoted in writing after consultation, with itemised theatre, implant and rehabilitation fees." }, ]; const FAQ = () => { const [open, setOpen] = React.useState(0); return (

What patients actually ask.

); }; /* ---------- CONTACT / REFERRAL FORM ---------- */ const Contact = ({ onBook }) => (

A 45-minute conversation is the place to start.

Tell us a little about what brought you here. A member of the team will reply within one working day with available consultation slots.
{ e.preventDefault(); onBook(); }} style={{ display: "flex", flexDirection: "column", gap: 4 }}>
); const Detail = ({ k, v }) => (
{k}
{v}
); const Field = ({ label, id, textarea, type = "text", placeholder }) => (
{textarea ? (