fracture-path-engine/wildfire-evacuation-ops.html
2026-07-20 02:45:56 +00:00

316 lines
13 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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&amp;cs=tinysrgb&amp;dpr=2&amp;h=650&amp;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>