/* Case detail page. Reads ?c=, renders hero + challenge/approach/outcome + next case. */ function CaseDetailPage({ t }) { const params = new URLSearchParams(location.search); const slug = params.get('c') || (t.cases.items[0] && t.cases.items[0].slug); const items = t.cases.items; const it = items.find(x => x.slug === slug) || items[0]; const cd = (t.caseDetail && t.caseDetail.cases[it.slug]) || {}; const L = (t.caseDetail && t.caseDetail.labels) || {}; const idx = items.findIndex(x => x.slug === it.slug); const next = items[(idx + 1) % items.length]; return ( {/* Hero */}
{L.back} {it.client}
{it.sector}{it.meta}

{it.title}

{cd.overview || it.summary}

{it.metric}
{it.logo && }
{/* Body: challenge + approach (left) · outcome + services (right) */}
{cd.challenge &&

{L.challenge}

{cd.challenge}

} {cd.approach &&

{L.approach}

{cd.approach.map((p, i) => (
{'0'+(i+1)}

{p}

))}
}
{cd.outcome &&
{L.outcome}
{cd.outcome.map((o, i) => (
{o}
))}
} {cd.services &&
{L.services}
{cd.services.map(s => {s})}
}
{/* Next case + CTA */}
{e.currentTarget.style.transform='translateY(-3px)';e.currentTarget.style.boxShadow='var(--shadow-md)';}} onMouseLeave={e=>{e.currentTarget.style.transform='none';e.currentTarget.style.boxShadow='none';}}>
{L.next}
{next.title}
{next.client}

{L.cta}

); } Object.assign(window, { CaseDetailPage });