// Primus IQ — Applications Screen const APPS = [ { id: 'prima', name: 'PRIMA', blurb: 'Deep market & literature research engine — searches projects, library, and the firm knowledge graph.', accent: '#7A1C1C' }, { id: 'talent', name: 'Talent Mapper', blurb: 'Find people across the organisation, explore their project history, access CVs, and build RFP-ready profiles for any engagement.', accent: '#876200' }, { id: 'carbon', name: 'CarbonIQ', blurb: 'Digital MRV platform measuring forest disturbance, land-use transitions, Above-Ground Biomass (AGB), and Soil Organic Carbon (SOC) using advanced geospatial analytics — enabling transparent, scalable carbon project verification.', accent: '#2E6F40' }, ]; // CarbonIQ blurb is long — tooltip shown on the ⓘ button instead of truncating the card. const LONG_BLURB = { carbon: 'CarbonIQ is a Digital Monitoring, Reporting, and Verification (DMRV) platform that measures and tracks forest disturbance, land-use transitions, Above-Ground Biomass (AGB), and Soil Organic Carbon (SOC) using advanced geospatial analytics. It streamlines carbon project monitoring and verification, enabling transparent, scalable, and data-driven climate impact assessment.', }; const AppCard = ({ app, maintenance, setRoute }) => { const [tip, setTip] = React.useState(false); return (
{ if (!maintenance) setRoute(`app-${app.id}`); }} style={{ padding: 22, borderRadius: 16, position: 'relative', background: 'var(--bg-card)', border: '1px solid var(--line)', cursor: maintenance ? 'default' : 'pointer', transition: 'all 0.18s', opacity: maintenance ? 0.6 : 1, display: 'flex', flexDirection: 'column', gap: 16, }} onMouseEnter={e => { if (maintenance) return; e.currentTarget.style.boxShadow = '0 10px 24px rgba(60,30,20,0.08)'; e.currentTarget.style.borderColor = app.accent + '30'; e.currentTarget.style.transform = 'translateY(-2px)'; }} onMouseLeave={e => { if (maintenance) return; e.currentTarget.style.boxShadow = 'none'; e.currentTarget.style.borderColor = 'var(--line)'; e.currentTarget.style.transform = 'translateY(0)'; }} >

{app.name}

{LONG_BLURB[app.id] && (
e.stopPropagation()}> {tip && (
{LONG_BLURB[app.id]}
)}
)}

{app.blurb}

Open {app.name}
); }; const ScreenApplications = ({ setRoute, maintenance = false }) => (

Applications

{maintenance ? 'Applications are coming soon.' : "Domain engines that chat with your projects, the library, and the firm's knowledge graph."}

{APPS.map(app => ( ))}
); const AppIcon = ({ id, color }) => ( {id === 'prima' && <>} {id === 'talent' && <>} {id === 'carbon' && <>} ); const ScreenAppDetail = ({ appId, setRoute }) => { const app = APPS.find(a => a.id === appId) || APPS[0]; return (
/ {app.name}

{app.name}

{app.blurb}

Recent {app.name} chats
{[ { t: 'GCC fintech IPO scan · 2021–2026', when: '2h ago' }, { t: 'Renewables capex benchmarking', when: '1d ago' }, { t: 'TCFD gap analysis · portfolio co.', when: '4d ago' }, ].map((c, i, arr) => (
e.currentTarget.style.background = 'var(--bg-soft)'} onMouseLeave={e => e.currentTarget.style.background = 'transparent'} > {c.t} {c.when}
))}
); }; Object.assign(window, { APPS, ScreenApplications, AppIcon, ScreenAppDetail, });