ir-analytics / opportunity_map.html
Plainr's picture
Upload 2 files
2b3c84f verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Global Opportunity Map | Secure Access</title>
<meta name="robots" content="noindex, nofollow">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: 'Inter', sans-serif;
background: #f8f9fb;
color: #1a1d23;
padding: 32px;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 28px;
}
.header-left h1 {
font-size: 22px;
font-weight: 700;
color: #0f1724;
letter-spacing: -0.3px;
}
.header-left p {
font-size: 13px;
color: #6b7280;
margin-top: 4px;
}
.badge {
background: #0f2d5e;
color: #fff;
font-size: 11px;
font-weight: 600;
padding: 5px 12px;
border-radius: 20px;
letter-spacing: 0.5px;
text-transform: uppercase;
}
/* ── Summary KPI Row ── */
.kpi-row {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
margin-bottom: 28px;
}
.kpi-card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 18px 20px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.kpi-card .label {
font-size: 11px;
font-weight: 600;
color: #9ca3af;
text-transform: uppercase;
letter-spacing: 0.6px;
margin-bottom: 6px;
}
.kpi-card .value {
font-size: 26px;
font-weight: 700;
color: #0f2d5e;
line-height: 1;
}
.kpi-card .sub {
font-size: 12px;
color: #6b7280;
margin-top: 4px;
}
.kpi-card.highlight { border-left: 3px solid #c8942a; }
/* ── Section title ── */
.section-title {
font-size: 14px;
font-weight: 700;
color: #374151;
text-transform: uppercase;
letter-spacing: 0.8px;
margin-bottom: 14px;
display: flex;
align-items: center;
gap: 8px;
}
.section-title::after {
content: '';
flex: 1;
height: 1px;
background: #e5e7eb;
}
/* ── Region Cards Grid ── */
.region-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 28px;
}
.region-card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 20px;
box-shadow: 0 1px 4px rgba(0,0,0,0.05);
position: relative;
overflow: hidden;
}
.region-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
}
.region-card.na::before { background: #0f2d5e; }
.region-card.emea::before { background: #c8942a; }
.region-card.apac::before { background: #16a34a; }
.region-card.global::before{ background: #7c3aed; }
.region-card.unknown::before{ background: #9ca3af; }
.region-name {
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 14px;
color: #374151;
}
.region-stats {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 14px;
}
.stat-box {
background: #f3f4f6;
border-radius: 8px;
padding: 10px 12px;
}
.stat-box .s-label {
font-size: 10px;
font-weight: 600;
color: #9ca3af;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 3px;
}
.stat-box .s-value {
font-size: 18px;
font-weight: 700;
color: #0f1724;
}
.stat-box .s-sub {
font-size: 10px;
color: #6b7280;
}
.stat-box.highlight { background: #fef3c7; }
.stat-box.highlight .s-value { color: #92400e; }
/* Progress bar */
.progress-wrap {
margin-top: 12px;
}
.progress-label {
display: flex;
justify-content: space-between;
font-size: 11px;
color: #6b7280;
margin-bottom: 5px;
}
.progress-bar {
height: 8px;
background: #e5e7eb;
border-radius: 99px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 99px;
transition: width 0.6s ease;
}
.fill-na { background: #0f2d5e; }
.fill-emea { background: #c8942a; }
.fill-apac { background: #16a34a; }
.fill-global { background: #7c3aed; }
.fill-unknown{ background: #9ca3af; }
/* White Space pill */
.ws-pill {
display: inline-block;
background: #fee2e2;
color: #991b1b;
font-size: 10px;
font-weight: 600;
padding: 3px 8px;
border-radius: 99px;
margin-top: 8px;
}
.ws-pill.none {
background: #d1fae5;
color: #065f46;
}
/* ── White Space Detail Table ── */
.table-wrap {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 1px 4px rgba(0,0,0,0.05);
margin-bottom: 28px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
thead tr {
background: #0f2d5e;
color: #fff;
}
thead th {
padding: 11px 16px;
text-align: left;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.6px;
text-transform: uppercase;
}
tbody tr {
border-bottom: 1px solid #f3f4f6;
transition: background 0.15s;
}
tbody tr:last-child { border-bottom: none; }
tbody tr:hover { background: #f9fafb; }
tbody td {
padding: 11px 16px;
color: #374151;
}
.tag {
display: inline-block;
font-size: 10px;
font-weight: 600;
padding: 2px 8px;
border-radius: 99px;
text-transform: uppercase;
letter-spacing: 0.4px;
}
.tag-na { background: #dbeafe; color: #1e40af; }
.tag-emea { background: #fef3c7; color: #92400e; }
.tag-priority { background: #fee2e2; color: #991b1b; }
.aum-cell { font-weight: 700; color: #0f2d5e; }
/* ── Strategic Insights ── */
.insight-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 14px;
}
.insight-card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 18px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.insight-card .i-num {
font-size: 28px;
font-weight: 800;
color: #0f2d5e;
line-height: 1;
}
.insight-card .i-label {
font-size: 12px;
font-weight: 600;
color: #374151;
margin: 6px 0 4px;
}
.insight-card .i-desc {
font-size: 12px;
color: #6b7280;
line-height: 1.5;
}
.insight-card .i-action {
margin-top: 10px;
font-size: 11px;
font-weight: 600;
color: #c8942a;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.footer {
margin-top: 24px;
font-size: 11px;
color: #9ca3af;
text-align: center;
}
/* LOCK SCREEN */
#lock-screen{position:fixed;inset:0;background:rgba(15,23,36,0.98);backdrop-filter:blur(10px);z-index:9999;display:flex;align-items:center;justify-content:center;color:#fff;font-family:'Inter',sans-serif}
.lock-box{background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.1);padding:40px;border-radius:20px;text-align:center;width:360px;box-shadow:0 32px 64px rgba(0,0,0,0.4)}
.lock-logo{font-size:20px;font-weight:800;margin-bottom:8px;letter-spacing:-0.5px}
.lock-logo span{color:#c8942a}
.lock-box p{font-size:12px;opacity:0.6;margin-bottom:24px;text-transform:uppercase;letter-spacing:1px}
.lock-input{width:100%;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);padding:12px;border-radius:10px;color:#fff;font-size:16px;text-align:center;margin-bottom:12px;outline:none}
.lock-btn{width:100%;background:#c8942a;color:#0f2d5e;border:none;padding:12px;border-radius:10px;font-weight:800;font-size:13px;cursor:pointer}
#lock-error{color:#ff4b4b;font-size:11px;margin-top:10px;display:none}
</style>
</head>
<body>
<div id="lock-screen">
<div class="lock-box">
<div class="lock-logo">IR <span>ANALYTICS</span></div>
<p>Map Access Restricted</p>
<input type="password" id="pass-input" class="lock-input" placeholder="Access Code" onkeyup="if(event.key==='Enter')verify()">
<button class="lock-btn" onclick="verify()">UNLOCK MAP</button>
<div id="lock-error">Invalid code.</div>
</div>
</div>
<!-- HEADER -->
<div class="header">
<div class="header-left">
<h1>Carlyle Group β€” Global LP Opportunity Map</h1>
<p>IR Financial Data Scientist Β· Technical Case Study Β· Commitment & White Space Analysis</p>
</div>
<div class="badge">Carlyle Confidential</div>
</div>
<!-- KPI ROW -->
<div class="kpi-row">
<div class="kpi-card">
<div class="label">Total LP Universe</div>
<div class="value">100</div>
<div class="sub">Across all regions & types</div>
</div>
<div class="kpi-card">
<div class="label">Committed to Carlyle</div>
<div class="value">97</div>
<div class="sub">97% overall penetration rate</div>
</div>
<div class="kpi-card highlight">
<div class="label">White Space LPs</div>
<div class="value">3</div>
<div class="sub">Engaged, not yet committed</div>
</div>
<div class="kpi-card">
<div class="label">White Space AUM</div>
<div class="value">$191BN</div>
<div class="sub">Uncaptured capital potential</div>
</div>
</div>
<!-- REGION BREAKDOWN -->
<div class="section-title">Regional Breakdown</div>
<div class="region-grid">
<!-- NA -->
<div class="region-card na">
<div class="region-name">πŸ‡ΊπŸ‡Έ North America (NA)</div>
<div class="region-stats">
<div class="stat-box">
<div class="s-label">Total LPs</div>
<div class="s-value">44</div>
<div class="s-sub">Largest region</div>
</div>
<div class="stat-box highlight">
<div class="s-label">White Space</div>
<div class="s-value">2</div>
<div class="s-sub">$126BN AUM uncaptured</div>
</div>
<div class="stat-box">
<div class="s-label">Committed AUM</div>
<div class="s-value">$2,676BN</div>
</div>
<div class="stat-box">
<div class="s-label">Total Region AUM</div>
<div class="s-value">$2,802BN</div>
</div>
</div>
<div class="progress-wrap">
<div class="progress-label"><span>Penetration Rate</span><span>95.5%</span></div>
<div class="progress-bar"><div class="progress-fill fill-na" style="width:95.5%"></div></div>
</div>
<span class="ws-pill">⚠ 2 LPs Not Committed · $126BN</span>
</div>
<!-- EMEA -->
<div class="region-card emea">
<div class="region-name">🌍 EMEA</div>
<div class="region-stats">
<div class="stat-box">
<div class="s-label">Total LPs</div>
<div class="s-value">14</div>
<div class="s-sub">High AUM density</div>
</div>
<div class="stat-box highlight">
<div class="s-label">White Space</div>
<div class="s-value">1</div>
<div class="s-sub">$65BN AUM uncaptured</div>
</div>
<div class="stat-box">
<div class="s-label">Committed AUM</div>
<div class="s-value">$2,888BN</div>
</div>
<div class="stat-box">
<div class="s-label">Total Region AUM</div>
<div class="s-value">$2,953BN</div>
</div>
</div>
<div class="progress-wrap">
<div class="progress-label"><span>Penetration Rate</span><span>92.9%</span></div>
<div class="progress-bar"><div class="progress-fill fill-emea" style="width:92.9%"></div></div>
</div>
<span class="ws-pill">⚠ 1 LP Not Committed · $65BN</span>
</div>
<!-- APAC -->
<div class="region-card apac">
<div class="region-name">🌏 Asia Pacific (APAC)</div>
<div class="region-stats">
<div class="stat-box">
<div class="s-label">Total LPs</div>
<div class="s-value">8</div>
<div class="s-sub">SWF-heavy region</div>
</div>
<div class="stat-box">
<div class="s-label">White Space</div>
<div class="s-value">0</div>
<div class="s-sub">Fully penetrated</div>
</div>
<div class="stat-box">
<div class="s-label">Committed AUM</div>
<div class="s-value">$1,394BN</div>
</div>
<div class="stat-box">
<div class="s-label">Total Region AUM</div>
<div class="s-value">$1,394BN</div>
</div>
</div>
<div class="progress-wrap">
<div class="progress-label"><span>Penetration Rate</span><span>100%</span></div>
<div class="progress-bar"><div class="progress-fill fill-apac" style="width:100%"></div></div>
</div>
<span class="ws-pill none">βœ“ Fully Penetrated</span>
</div>
<!-- Global -->
<div class="region-card global">
<div class="region-name">🌐 Global</div>
<div class="region-stats">
<div class="stat-box">
<div class="s-label">Total LPs</div>
<div class="s-value">30</div>
<div class="s-sub">Largest AUM pool</div>
</div>
<div class="stat-box">
<div class="s-label">White Space</div>
<div class="s-value">0</div>
<div class="s-sub">Fully penetrated</div>
</div>
<div class="stat-box">
<div class="s-label">Committed AUM</div>
<div class="s-value">$10,162BN</div>
</div>
<div class="stat-box">
<div class="s-label">Total Region AUM</div>
<div class="s-value">$10,162BN</div>
</div>
</div>
<div class="progress-wrap">
<div class="progress-label"><span>Penetration Rate</span><span>100%</span></div>
<div class="progress-bar"><div class="progress-fill fill-global" style="width:100%"></div></div>
</div>
<span class="ws-pill none">βœ“ Fully Penetrated</span>
</div>
<!-- Unknown -->
<div class="region-card unknown">
<div class="region-name">❓ Unknown / Unclassified</div>
<div class="region-stats">
<div class="stat-box">
<div class="s-label">Total LPs</div>
<div class="s-value">4</div>
<div class="s-sub">Needs classification</div>
</div>
<div class="stat-box">
<div class="s-label">White Space</div>
<div class="s-value">0</div>
<div class="s-sub">All committed</div>
</div>
<div class="stat-box">
<div class="s-label">Committed AUM</div>
<div class="s-value">$6BN</div>
</div>
<div class="stat-box">
<div class="s-label">Total Region AUM</div>
<div class="s-value">$6BN</div>
</div>
</div>
<div class="progress-wrap">
<div class="progress-label"><span>Penetration Rate</span><span>100%</span></div>
<div class="progress-bar"><div class="progress-fill fill-unknown" style="width:100%"></div></div>
</div>
<span class="ws-pill none">βœ“ Fully Committed</span>
</div>
</div>
<!-- WHITE SPACE DETAIL TABLE -->
<div class="section-title">White Space Detail β€” LPs Not Committed to Carlyle</div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>#</th>
<th>LP Name</th>
<th>Type</th>
<th>Country</th>
<th>AUM ($BN)</th>
<th>Region</th>
<th>Priority</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><strong>Public Utilities Pension</strong></td>
<td>Public/Government Pension</td>
<td>United States</td>
<td class="aum-cell">$120BN</td>
<td><span class="tag tag-na">NA</span></td>
<td><span class="tag tag-priority">πŸ”΄ High</span></td>
</tr>
<tr>
<td>2</td>
<td><strong>Emerging Markets Wealth Co</strong></td>
<td>Wealth - Other</td>
<td>United Arab Emirates</td>
<td class="aum-cell">$65BN</td>
<td><span class="tag tag-emea">EMEA</span></td>
<td><span class="tag tag-priority">πŸ”΄ High</span></td>
</tr>
<tr>
<td>3</td>
<td><strong>Cascade Family Office</strong></td>
<td>Family Office</td>
<td>United States</td>
<td class="aum-cell">$6BN</td>
<td><span class="tag tag-na">NA</span></td>
<td><span class="tag" style="background:#fef3c7;color:#92400e;">🟑 Medium</span></td>
</tr>
</tbody>
</table>
</div>
<!-- STRATEGIC INSIGHTS -->
<div class="section-title">Strategic Recommendations</div>
<div class="insight-grid">
<div class="insight-card">
<div class="i-num">$120BN</div>
<div class="i-label">Public Utilities Pension (NA)</div>
<div class="i-desc">Largest uncaptured LP in the dataset. US public pension with global allocation strategy. High probability of Carlyle Credit or Infrastructure allocation given peer behavior.</div>
<div class="i-action">β†’ Priority: Immediate Diligence Call</div>
</div>
<div class="insight-card">
<div class="i-num">$65BN</div>
<div class="i-label">Emerging Markets Wealth Co (UAE)</div>
<div class="i-desc">EMEA Wealth-Other LP based in UAE. Represents Carlyle's Wealth Channel expansion opportunity in the Middle East. Ideal candidate for Private Equity or Infrastructure product reframing.</div>
<div class="i-action">β†’ Priority: Intro Meeting + Product Fit Analysis</div>
</div>
<div class="insight-card">
<div class="i-num">$6BN</div>
<div class="i-label">Cascade Family Office (NA)</div>
<div class="i-desc">US Family Office with NA focus. Smaller ticket but high-velocity segment β€” Family Offices typically convert faster than institutional pensions once intro_meeting is completed.</div>
<div class="i-action">β†’ Priority: Conference Touch β†’ Intro Meeting</div>
</div>
</div>
<div class="footer">
Carlyle Group Β· IR Financial Data Scientist Technical Case Β· Lydia Hunter Β· May 2026 Β· Data: ds_ir_interview_data.xlsx
</div>
<script>
function verify(inputPass) {
const pass = inputPass || document.getElementById('pass-input').value;
if (pass === 'CARLYLE2026') {
document.getElementById('lock-screen').style.display = 'none';
document.body.style.overflow = 'auto';
document.title = 'Carlyle Group β€” Global Opportunity Map';
} else if (!inputPass) {
document.getElementById('lock-error').style.display = 'block';
}
}
// Auto-unlock if auth param is present
const urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('auth') === 'CARLYLE2026') {
verify('CARLYLE2026');
} else {
document.body.style.overflow = 'hidden';
}
</script>
</body>
</html>