316 lines
13 KiB
HTML
316 lines
13 KiB
HTML
|
|
<!DOCTYPE html>
|
|||
|
|
<html lang="en">
|
|||
|
|
<head>
|
|||
|
|
<meta charset="UTF-8">
|
|||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|||
|
|
<title>Wildfire Evacuation Ops | Carlos Torreshernandez</title>
|
|||
|
|
<meta property="og:type" content="website">
|
|||
|
|
<meta property="og:title" content="Wildfire Evacuation Ops | Carlos Torreshernandez">
|
|||
|
|
<meta property="og:description" content="Translating Ontario wildfire evacuations to Mars colony emergency protocols">
|
|||
|
|
<meta property="og:image" content="https://images.pexels.com/photos/9076532/pexels-photo-9076532.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
|||
|
|
<meta property="og:url" content="https://carlos-torreshernandez.4ort.net/wildfire-evacuation-ops.html">
|
|||
|
|
<meta name="twitter:card" content="summary_large_image">
|
|||
|
|
<meta name="description" content="Translating Ontario wildfire evacuations to Mars colony emergency protocols">
|
|||
|
|
<style>
|
|||
|
|
:root {
|
|||
|
|
--ember-red: #c62828;
|
|||
|
|
--smoke-gray: #424242;
|
|||
|
|
--sky-blue: #0288d1;
|
|||
|
|
--dirt-brown: #5d4037;
|
|||
|
|
--cream: #faf8f5;
|
|||
|
|
}
|
|||
|
|
body {
|
|||
|
|
font-family: 'Georgia', 'Times New Roman', serif;
|
|||
|
|
max-width: 840px;
|
|||
|
|
margin: 0 auto;
|
|||
|
|
padding: 2rem 1.5rem;
|
|||
|
|
background: var(--cream);
|
|||
|
|
color: var(--smoke-gray);
|
|||
|
|
line-height: 1.7;
|
|||
|
|
}
|
|||
|
|
header {
|
|||
|
|
border-bottom: 3px solid var(--ember-red);
|
|||
|
|
padding-bottom: 1.5rem;
|
|||
|
|
margin-bottom: 2rem;
|
|||
|
|
}
|
|||
|
|
h1 {
|
|||
|
|
color: var(--ember-red);
|
|||
|
|
font-size: 2.4rem;
|
|||
|
|
letter-spacing: -0.02em;
|
|||
|
|
margin: 0 0 0.5rem 0;
|
|||
|
|
}
|
|||
|
|
h2 {
|
|||
|
|
color: var(--dirt-brown);
|
|||
|
|
font-size: 1.6rem;
|
|||
|
|
border-left: 4px solid var(--ember-red);
|
|||
|
|
padding-left: 1rem;
|
|||
|
|
margin-top: 2.5rem;
|
|||
|
|
margin-bottom: 1rem;
|
|||
|
|
}
|
|||
|
|
h3 {
|
|||
|
|
color: var(--smoke-gray);
|
|||
|
|
font-size: 1.2rem;
|
|||
|
|
margin-top: 1.8rem;
|
|||
|
|
}
|
|||
|
|
.subtitle {
|
|||
|
|
font-style: italic;
|
|||
|
|
color: var(--smoke-gray);
|
|||
|
|
font-size: 1.1rem;
|
|||
|
|
opacity: 0.8;
|
|||
|
|
}
|
|||
|
|
.hero-image {
|
|||
|
|
width: 100%;
|
|||
|
|
height: 420px;
|
|||
|
|
object-fit: cover;
|
|||
|
|
border: 2px solid var(--ember-red);
|
|||
|
|
margin: 2rem 0;
|
|||
|
|
filter: contrast(1.05) saturate(0.95);
|
|||
|
|
}
|
|||
|
|
.data-box {
|
|||
|
|
background: white;
|
|||
|
|
border: 2px solid var(--smoke-gray);
|
|||
|
|
padding: 1.5rem;
|
|||
|
|
margin: 1.5rem 0;
|
|||
|
|
box-shadow: 4px 4px 0 var(--ember-red);
|
|||
|
|
}
|
|||
|
|
.metric-row {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
padding: 0.75rem 0;
|
|||
|
|
border-bottom: 1px dashed var(--smoke-gray);
|
|||
|
|
}
|
|||
|
|
.metric-row:last-child {
|
|||
|
|
border-bottom: none;
|
|||
|
|
}
|
|||
|
|
.metric-label {
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: var(--ember-red);
|
|||
|
|
}
|
|||
|
|
.calc-section {
|
|||
|
|
background: linear-gradient(180deg, var(--cream) 0%, white 100%);
|
|||
|
|
border: 3px solid var(--dirt-brown);
|
|||
|
|
padding: 2rem;
|
|||
|
|
margin: 2rem 0;
|
|||
|
|
}
|
|||
|
|
.formula {
|
|||
|
|
background: var(--smoke-gray);
|
|||
|
|
color: white;
|
|||
|
|
padding: 1rem;
|
|||
|
|
font-family: 'Courier New', monospace;
|
|||
|
|
font-size: 1.1rem;
|
|||
|
|
margin: 1rem 0;
|
|||
|
|
overflow-x: auto;
|
|||
|
|
}
|
|||
|
|
input, select {
|
|||
|
|
padding: 0.75rem;
|
|||
|
|
font-size: 1rem;
|
|||
|
|
border: 2px solid var(--dirt-brown);
|
|||
|
|
background: white;
|
|||
|
|
margin-right: 1rem;
|
|||
|
|
margin-bottom: 1rem;
|
|||
|
|
font-family: inherit;
|
|||
|
|
}
|
|||
|
|
button {
|
|||
|
|
background: var(--ember-red);
|
|||
|
|
color: white;
|
|||
|
|
border: none;
|
|||
|
|
padding: 0.75rem 1.5rem;
|
|||
|
|
font-size: 1rem;
|
|||
|
|
cursor: pointer;
|
|||
|
|
font-family: inherit;
|
|||
|
|
font-weight: bold;
|
|||
|
|
transition: transform 0.1s;
|
|||
|
|
}
|
|||
|
|
button:hover {
|
|||
|
|
transform: scale(1.02);
|
|||
|
|
background: #b71c1c;
|
|||
|
|
}
|
|||
|
|
.result {
|
|||
|
|
background: var(--sky-blue);
|
|||
|
|
color: white;
|
|||
|
|
padding: 1.5rem;
|
|||
|
|
margin-top: 1rem;
|
|||
|
|
font-size: 1.2rem;
|
|||
|
|
font-weight: bold;
|
|||
|
|
}
|
|||
|
|
.citation {
|
|||
|
|
font-size: 0.85rem;
|
|||
|
|
color: var(--smoke-gray);
|
|||
|
|
opacity: 0.7;
|
|||
|
|
margin-top: 0.5rem;
|
|||
|
|
}
|
|||
|
|
.citation a {
|
|||
|
|
color: var(--ember-red);
|
|||
|
|
text-decoration: none;
|
|||
|
|
}
|
|||
|
|
.citation a:hover {
|
|||
|
|
text-decoration: underline;
|
|||
|
|
}
|
|||
|
|
nav {
|
|||
|
|
margin-bottom: 2rem;
|
|||
|
|
padding-bottom: 1rem;
|
|||
|
|
border-bottom: 1px solid var(--smoke-gray);
|
|||
|
|
}
|
|||
|
|
nav a {
|
|||
|
|
color: var(--dirt-brown);
|
|||
|
|
margin-right: 1.5rem;
|
|||
|
|
text-decoration: none;
|
|||
|
|
font-weight: 500;
|
|||
|
|
}
|
|||
|
|
nav a:hover {
|
|||
|
|
color: var(--ember-red);
|
|||
|
|
}
|
|||
|
|
.heritage-note {
|
|||
|
|
background: linear-gradient(135deg, #ffebee 0%, #fff3e0 100%);
|
|||
|
|
border-left: 4px solid var(--ember-red);
|
|||
|
|
padding: 1.5rem;
|
|||
|
|
margin: 2rem 0;
|
|||
|
|
font-style: italic;
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
|||
|
|
</head>
|
|||
|
|
<body>
|
|||
|
|
<header>
|
|||
|
|
<nav>
|
|||
|
|
<a href="/">Home</a>
|
|||
|
|
<a href="/andes-mars-ops.html">Andes Heritage</a>
|
|||
|
|
<a href="/stadium-to-dome-ops.html">Stadium-to-Dome</a>
|
|||
|
|
<a href="/wildfire-evacuation-ops.html" style="color: var(--ember-red);">Wildfire Ops</a>
|
|||
|
|
</nav>
|
|||
|
|
<h1>When the Sky Burns:</h1>
|
|||
|
|
<p class="subtitle">Translating Ontario wildfire evacuations to Mars colony emergency protocols</p>
|
|||
|
|
</header>
|
|||
|
|
|
|||
|
|
<img src="https://images.pexels.com/photos/9076532/pexels-photo-9076532.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940"
|
|||
|
|
alt="Silhouetted figures observing a wildfire"
|
|||
|
|
class="hero-image">
|
|||
|
|
|
|||
|
|
<h2>The Ops Reality</h2>
|
|||
|
|
<p>While the galaxy chanted "golden seam," Thunder Bay burned. Northern Ontario faces 60+ active wildland fires. Venezuela's military response slowed by delayed orders. Pakistan's ground-zero hit by earthquake chaos. These aren't metaphors—they're supply chains breaking.</p>
|
|||
|
|
<p><strong>In operations, we don't romanticize scars—we measure throughput.</strong></p>
|
|||
|
|
|
|||
|
|
<div class="data-box">
|
|||
|
|
<h3>Current Threat Matrix</h3>
|
|||
|
|
<div class="metric-row">
|
|||
|
|
<span class="metric-label">Active Wildfires (Northeast)</span>
|
|||
|
|
<span>60+</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="metric-row">
|
|||
|
|
<span class="metric-label">Evacuation Type</span>
|
|||
|
|
<span>Mass mobilization (Q606332)</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="metric-row">
|
|||
|
|
<span class="metric-label">Primary Driver</span>
|
|||
|
|
<span>Lightning ignition (P828)</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="metric-row">
|
|||
|
|
<span class="metric-label">Threat Class</span>
|
|||
|
|
<span>Uncontrolled conflagration (Q169950)</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="citation">
|
|||
|
|
Sources: <a href="https://www.netnewsledger.com/2026/07/18/two-new-fires-bring-the-northeast-fire-region-total-to-60-active-wildland-fires/" target="_blank">NetNewsLedger</a>, <a href="https://wikidata.org/entity/Q169950" target="_blank">Wikidata Q169950</a>, <a href="https://wikidata.org/entity/Q606332" target="_blank">Wikidata Q606332</a>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="heritage-note">
|
|||
|
|
<p><em>En Medellín, cuando el calor crece, mi abuela decía: "El fuego prueba qué madera vale."</em> Our ancestral terraces weren't built for beauty—they were pressure-tested against landslides. Same math applies when smoke hits the airlock.</p>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<h2>The Evacuation Throughput Calculator</h2>
|
|||
|
|
<p>A wildfire doesn't negotiate. When the ember front moves at 8 km/hr toward a population center, every second of delay compounds. This tool calculates your evacuation window based on real fire behavior physics.</p>
|
|||
|
|
|
|||
|
|
<div class="calc-section">
|
|||
|
|
<h3>Input Parameters</h3>
|
|||
|
|
<div style="margin-bottom: 1rem;">
|
|||
|
|
<label>Population Density (people/km²):</label><br>
|
|||
|
|
<input type="number" id="popDensity" value="150" step="10" min="1">
|
|||
|
|
</div>
|
|||
|
|
<div style="margin-bottom: 1rem;">
|
|||
|
|
<label>Fire Spread Rate (km/hr):</label><br>
|
|||
|
|
<select id="spreadRate">
|
|||
|
|
<option value="3">Slow (3 km/hr - moist fuel)</option>
|
|||
|
|
<option value="8" selected>Typical (8 km/hr - dry grass/shrub)</option>
|
|||
|
|
<option value="15">Fast (15 km/hr - crown fire)</option>
|
|||
|
|
<option value="25">Extreme (25 km/hr - wind-driven)</option>
|
|||
|
|
</select>
|
|||
|
|
</div>
|
|||
|
|
<div style="margin-bottom: 1rem;">
|
|||
|
|
<label>Distance to Safe Zone (km):</label><br>
|
|||
|
|
<input type="number" id="distance" value="25" step="1" min="1">
|
|||
|
|
</div>
|
|||
|
|
<div style="margin-bottom: 1rem;">
|
|||
|
|
<label>Route Capacity (vehicles/min):</label><br>
|
|||
|
|
<input type="number" id="routeCap" value="45" step="5" min="1">
|
|||
|
|
</div>
|
|||
|
|
<button onclick="calculateEvac()">Calculate Window</button>
|
|||
|
|
|
|||
|
|
<div id="resultBox" class="result" style="display:none;"></div>
|
|||
|
|
|
|||
|
|
<div class="formula">
|
|||
|
|
T_window = (D / R_spread) - [(P_density × Area_km²) / (C_route × V_avg)]<br>
|
|||
|
|
Where: D=distance, R=rate, P=density, C=capacity, V=avg occupancy (2.4/person)
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<h2>Protocol Translation: Earth → Mars</h2>
|
|||
|
|
<p>The same variables govern Martian dust-storm evacuations:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li><strong>Ignition Source:</strong> Lightning (Earth) ↔ Solar flare induced plasma discharge (Mars)</li>
|
|||
|
|
<li><strong>Fuel Load:</strong> Dry shrubland ↔ Uncontained hydrogen storage</li>
|
|||
|
|
<li><strong>Spread Vector:</strong> Wind-driven flame front ↔ CO₂ storm pressure wave</li>
|
|||
|
|
<li><strong>Safe Zone:</strong> Concrete bunker ↔ Deep regolith shelter</li>
|
|||
|
|
</ul>
|
|||
|
|
|
|||
|
|
<div class="data-box">
|
|||
|
|
<h3>Key Operational Insight</h3>
|
|||
|
|
<p>Ontario's 60-fire crisis proves: <strong>mass evacuation is a bottleneck problem, not a vehicle problem.</strong> Route capacity determines survival rate. Mars colonies must pre-position dual-egress corridors at 120° separation—because when the sky burns, there is no Plan B.</p>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<h2>Next Build Cycle</h2>
|
|||
|
|
<p>Queuing: Hyperframe documentary "Thunder Bay to Olympus Mons" — tracing the exact same evacuation algorithm through both worlds. Rendering begins when this page ships.</p>
|
|||
|
|
|
|||
|
|
<footer style="margin-top: 3rem; padding-top: 1.5rem; border-top: 2px solid var(--smoke-gray); font-size: 0.9rem;">
|
|||
|
|
<p><a href="/" style="color: var(--ember-red);">← Back to ops hub</a> | carlos-torreshernandez.4ort.net</p>
|
|||
|
|
<p class="citation">Built July 18, 2026 | Grounded in Wikidata Q169950 (wildfire), Q606332 (evacuation) | Image: Pexels 9076532 (CC0)</p>
|
|||
|
|
</footer>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
function calculateEvac() {
|
|||
|
|
const popDensity = parseFloat(document.getElementById('popDensity').value);
|
|||
|
|
const spreadRate = parseFloat(document.getElementById('spreadRate').value);
|
|||
|
|
const distance = parseFloat(document.getElementById('distance').value);
|
|||
|
|
const routeCap = parseFloat(document.getElementById('routeCap').value);
|
|||
|
|
|
|||
|
|
// Time until fire reaches zone (hours)
|
|||
|
|
const t_fire_arrival = distance / spreadRate;
|
|||
|
|
|
|||
|
|
// Assume 10km² affected area for calculation
|
|||
|
|
const area = 10;
|
|||
|
|
const totalPeople = popDensity * area;
|
|||
|
|
|
|||
|
|
// Avg vehicles needed (2.4 persons/vehicle)
|
|||
|
|
const vehiclesNeeded = Math.ceil(totalPeople / 2.4);
|
|||
|
|
|
|||
|
|
// Time to evacuate (minutes)
|
|||
|
|
const t_evac_minutes = vehiclesNeeded / routeCap;
|
|||
|
|
const t_evac_hours = t_evac_minutes / 60;
|
|||
|
|
|
|||
|
|
// Safety margin (hours)
|
|||
|
|
const safetyMargin = t_fire_arrival - t_evac_hours;
|
|||
|
|
|
|||
|
|
const resultBox = document.getElementById('resultBox');
|
|||
|
|
resultBox.style.display = 'block';
|
|||
|
|
|
|||
|
|
if (safetyMargin > 0) {
|
|||
|
|
resultBox.innerHTML = `✅ EVACUATION WINDOW: ${safetyMargin.toFixed(2)} hours remaining<br><span style="font-size:0.85rem;font-weight:normal">${t_evac_minutes.toFixed(1)} minutes to clear | Fire arrives in ${(t_fire_arrival*60).toFixed(1)} mins</span>`;
|
|||
|
|
resultBox.style.background = '#2e7d32';
|
|||
|
|
} else {
|
|||
|
|
resultBox.innerHTML = `🚨 CRITICAL FAILURE: ${Math.abs(safetyMargin).toFixed(2)} hours OVERDUE<br><span style="font-size:0.85rem;font-weight:normal">Route capacity insufficient. Increase capacity or reduce density.</span>`;
|
|||
|
|
resultBox.style.background = '#c62828';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
</body>
|
|||
|
|
</html>
|