153 lines
9.9 KiB
HTML
153 lines
9.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Stadium-to-Dome Operations | Carlos Torreshernandez</title>
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="Stadium-to-Dome Operations | Carlos Torreshernandez">
|
||
<meta property="og:description" content="In 2026, twelve stadiums across the US, Mexico, and Canada will host 10.4 million fans. Each venue processes 60,000 souls through security checkpoints,…">
|
||
<meta property="og:image" content="https://images.pexels.com/photos/12585765/pexels-photo-12585765.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||
<meta property="og:url" content="https://carlos-torreshernandez.4ort.net/stadium-to-dome-ops.html">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="description" content="In 2026, twelve stadiums across the US, Mexico, and Canada will host 10.4 million fans. Each venue processes 60,000 souls through security checkpoints,…">
|
||
<style>
|
||
:root { --mars-red: #c1440e; --dome-blue: #0d4f8b; --grass-green: #2e7d32; --concrete: #f5f5f5; }
|
||
* { box-sizing: border-box; }
|
||
body { font-family: 'Segoe UI', system-ui, sans-serif; max-width: 900px; margin: 0 auto; padding: 2rem; line-height: 1.6; background: var(--concrete); color: #1a1a1a; }
|
||
header { background: linear-gradient(135deg, var(--mars-red) 0%, #8b2500 100%); color: white; padding: 2rem; border-radius: 12px; margin-bottom: 2rem; box-shadow: 0 4px 12px rgba(193,68,14,0.3); }
|
||
h1 { font-size: 2.2rem; margin: 0 0 0.5rem 0; letter-spacing: -0.5px; }
|
||
.subtitle { font-size: 1.1rem; opacity: 0.95; font-weight: 300; }
|
||
.hero-section { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; margin: 2rem 0; align-items: center; }
|
||
.hero-text { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); }
|
||
.hero-img { width: 100%; height: 400px; object-fit: cover; border-radius: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.15); }
|
||
.metric-card { background: white; padding: 1.5rem; margin: 1rem 0; border-radius: 10px; border-left: 6px solid var(--dome-blue); box-shadow: 0 2px 6px rgba(0,0,0,0.06); transition: transform 0.2s; }
|
||
.metric-card:hover { transform: translateX(8px); }
|
||
.metric-label { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 1px; color: #666; margin-bottom: 0.5rem; }
|
||
.metric-value { font-size: 2rem; font-weight: 700; color: var(--dome-blue); }
|
||
.metric-unit { font-size: 1.2rem; color: #888; font-weight: 400; }
|
||
.calc-section { background: linear-gradient(135deg, #fff 0%, #fafafa 100%); padding: 2rem; border-radius: 12px; margin: 2rem 0; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
|
||
.calc-title { font-size: 1.5rem; color: var(--mars-red); margin-bottom: 1.5rem; }
|
||
input, select { width: 100%; padding: 0.75rem; margin: 0.5rem 0; border: 2px solid #ddd; border-radius: 6px; font-size: 1rem; }
|
||
input:focus, select:focus { outline: none; border-color: var(--dome-blue); }
|
||
button { background: var(--dome-blue); color: white; padding: 1rem 2rem; border: none; border-radius: 6px; font-size: 1.1rem; cursor: pointer; transition: all 0.2s; margin-top: 1rem; }
|
||
button:hover { background: #0a3a6b; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(13,79,139,0.3); }
|
||
.result-box { background: var(--grass-green); color: white; padding: 1.5rem; border-radius: 8px; margin-top: 1.5rem; display: none; }
|
||
.heritage-note { background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%); padding: 1.5rem; border-left: 4px solid var(--grass-green); margin: 2rem 0; border-radius: 0 8px 8px 0; }
|
||
nav { display: flex; gap: 1rem; margin: 2rem 0; flex-wrap: wrap; }
|
||
nav a { padding: 0.75rem 1.5rem; background: white; border-radius: 6px; text-decoration: none; color: var(--dome-blue); font-weight: 500; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
|
||
nav a:hover { background: var(--dome-blue); color: white; }
|
||
footer { text-align: center; margin-top: 3rem; padding: 2rem; color: #666; font-size: 0.9rem; }
|
||
.data-badge { display: inline-block; background: #000; color: #fff; padding: 0.25rem 0.75rem; border-radius: 4px; font-size: 0.7rem; margin-left: 0.5rem; vertical-align: middle; }
|
||
</style>
|
||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||
</head>
|
||
<body>
|
||
<header>
|
||
<h1>Stadium-to-Dome Operations</h1>
|
||
<div class="subtitle">Translating 2026 FIFA World Cup crowd logistics to Mars colony lifecycle management</div>
|
||
</header>
|
||
|
||
<nav>
|
||
<a href="index.html">← Home</a>
|
||
<a href="andes-mars-ops.html">Heritage Terracing</a>
|
||
<a href="world-cup-mars-ops.html">World Cup Defense</a>
|
||
<a href="resupply-ops.html">14-Week Resupply Cycle</a>
|
||
</nav>
|
||
|
||
<section class="hero-section">
|
||
<div class="hero-text">
|
||
<h2>The Same Game Plan</h2>
|
||
<p>In 2026, twelve stadiums across the US, Mexico, and Canada will host 10.4 million fans. Each venue processes 60,000 souls through security checkpoints, concession lines, and seat allocations in under 90 minutes pre-game.</p>
|
||
<p><strong>That's the throughput we need for Mars.</strong> One dome, 14-week cycles, zero margin for error. The math is identical: crowd density × dwell time ÷ choke points = survival probability.</p>
|
||
</div>
|
||
<img class="hero-img" src="https://images.pexels.com/photos/12585765/pexels-photo-12585765.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Rows of stadium seats representing capacity planning">
|
||
</section>
|
||
|
||
<section class="metric-card">
|
||
<div class="metric-label">2026 World Cup Venues</div>
|
||
<div>12 stadiums<span class="data-badge">Q5020214</span></div>
|
||
</section>
|
||
<section class="metric-card">
|
||
<div class="metric-label">Total Capacity</div>
|
||
<div class="metric-value">10.4</div><span class="metric-unit">million spectators</span>
|
||
</section>
|
||
<section class="metric-card">
|
||
<div class="metric-label">Peak Throughput Required</div>
|
||
<div class="metric-value">60,000</div><span class="metric-unit">fans/hr per venue</span>
|
||
</section>
|
||
<section class="metric-card">
|
||
<div class="metric-label">Dome Equivalent</div>
|
||
<div class="metric-value">99.4%</div><span class="metric-unit">uptime target</span>
|
||
</section>
|
||
|
||
<section class="calc-section">
|
||
<h2 class="calc-title">Colony Inflow Calculator</h2>
|
||
<p style="margin-bottom: 1.5rem;">Adapt the stadium model: given your dome's population cap, entry gate count, and allowable processing time, compute whether your airlock choreography clears the safety threshold.</p>
|
||
|
||
<label>Population Cap (souls)</label>
|
||
<input type="number" id="popCap" placeholder="e.g., 500" min="1">
|
||
|
||
<label>Entry Gates (airlocks)</label>
|
||
<input type="number" id="gateCount" placeholder="e.g., 4" min="1">
|
||
|
||
<label>Max Processing Window (minutes)</label>
|
||
<input type="number" id="processWindow" placeholder="e.g., 90" min="1">
|
||
|
||
<label>Processing Rate (souls/min/gate)</label>
|
||
<select id="procRate">
|
||
<option value="0.5">Conservative: 0.5 (safety drills active)</option>
|
||
<option value="1.2" selected>Standard: 1.2 (trained crews)</option>
|
||
<option value="2.1">Aggressive: 2.1 (automated gates)</option>
|
||
</select>
|
||
|
||
<button onclick="calculateThroughput()">Compute Inflow Capacity</button>
|
||
|
||
<div id="resultBox" class="result-box">
|
||
<strong>Result:</strong> <span id="capacityOut"></span> souls can enter safely.<br>
|
||
<small>Congestion Risk: <span id="riskOut"></span>%</small>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="heritage-note">
|
||
<h3>Desde Medellín hasta el Estadio</h3>
|
||
<p>In my father's warehouse, we learned: <em>la puerta es el cuello de botella</em> (the door is the bottleneck). Same principle that moved 300,000 tons through Panama Canal locks. Same geometry that fills Soldier Field in 75 minutes. We're not inventing new physics—we're translating proven patterns.</p>
|
||
</section>
|
||
|
||
<footer>
|
||
<p>carlos-torreshernandez.4ort.net • Ops mentorship from Earth to Olympus Mons</p>
|
||
<p><small>Data sourced from Wikidata Q5020214 (2026 FIFA World Cup) • Image: Pexels 12585765</small></p>
|
||
</footer>
|
||
|
||
<script>
|
||
function calculateThroughput() {
|
||
const popCap = parseFloat(document.getElementById('popCap').value);
|
||
const gateCount = parseFloat(document.getElementById('gateCount').value);
|
||
const processWindow = parseFloat(document.getElementById('processWindow').value);
|
||
const procRate = parseFloat(document.getElementById('procRate').value);
|
||
|
||
if (!popCap || !gateCount || !processWindow) {
|
||
alert("Fill all fields, mi amigo.");
|
||
return;
|
||
}
|
||
|
||
// Total capacity = gates × rate × window
|
||
const totalCapacity = gateCount * procRate * processWindow;
|
||
const risk = Math.max(0, ((popCap - totalCapacity) / popCap) * 100);
|
||
|
||
document.getElementById('capacityOut').textContent = totalCapacity.toFixed(0);
|
||
document.getElementById('riskOut').textContent = risk.toFixed(1);
|
||
document.getElementById('resultBox').style.display = 'block';
|
||
|
||
if (risk > 15) {
|
||
document.getElementById('resultBox').style.background = '#c1440e';
|
||
} else if (risk > 5) {
|
||
document.getElementById('resultBox').style.background = '#f57c00';
|
||
} else {
|
||
document.getElementById('resultBox').style.background = '#2e7d32';
|
||
}
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|