// icp.jsx — the three ICP detail pages. Content loaded from CMS. const html = (s) => ({ __html: s || '' }); const icp = () => window.ICP || {}; const ProductCard = ({ id, recommended }) => { const p = PRODUCTS[id]; if (!p) return null; return (
{recommended &&
★ Most start here
} {p.phase &&
{p.phase}
}

{p.name}

{p.tagline}

{priceOf(p)} {p.value && ${p.value.toLocaleString()} value}
); }; const ICPHero = ({ data }) => (
goTo('home')}>Home goTo('start')}>Choose your path {data.breadcrumb}
{data.tag}

WHO{data.who}
REVENUE{data.revenue}

{data.body}

); const ICPDiagnostic = ({ data }) => ( <>
What's happening

{data.diagnosticLead}

    {(data.diagnosticObservations || []).map((o, i) =>
  • {o}
  • )}
You don't lack…

{data.lackTitle}

    {(data.lackItems || []).map((x, i) =>
  • {x}
  • )}
What you need

The next move

    {(data.needItems || []).map((x, i) =>
  • {x}
  • )}
What you get

What changes

    {(data.getItems || []).map((x, i) =>
  • {x}
  • )}
You can say: "{data.sentence}"
); const SpeakerPage = () => { const d = icp().speaker || {}; return ( <>
{d.pathEyebrow}

{d.pathHeading}

{d.pathBody}

{d.addOnEyebrow}
{(d.addOns || []).map((ao, i) => (

{ao.heading}

{ao.body}

{ao.price &&
{ao.price}
} {!ao.price && }
))}
Not quite you? goTo('authority')}>I'm an Authority → goTo('legacy')}>I'm building a Legacy → goTo('assessment')}>Take the quiz →
); }; const AuthorityPage = () => { const d = icp().authority || {}; const recs = d.recommendedProducts || []; return ( <>
{d.pathEyebrow}

{d.pathHeading}

{d.pathBody}

{recs.map((id, i) => )}
{d.privateEyebrow}

{d.privateHeading}

{(d.privateProducts || []).map(id => )}
); }; const LegacyPage = () => { const d = icp().legacy || {}; const recs = d.recommendedProducts || []; return ( <>
{d.pathEyebrow}

{d.pathHeading}

{d.pathBody}

{recs.map((id, i) => )}
{d.inviteEyebrow}

{d.inviteHeading}

{d.inviteBody}

); }; Object.assign(window, { SpeakerPage, AuthorityPage, LegacyPage, ProductCard });