houston-dawn-protocol/run-fuel.html

223 lines
6.7 KiB
HTML
Raw Permalink Normal View History

2026-07-18 23:57:00 +02:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Houston Dawn Run Fuel Calculator | Bhartiben Patel</title>
<style>
:root { --bg: #000000; --fg: #00ff41; --dim: #008f11; --grid: #003300; }
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
background-color: var(--bg);
color: var(--fg);
font-family: 'Courier New', Courier, monospace;
line-height: 1.4;
padding: 2rem;
max-width: 90ch;
}
::selection { background: var(--fg); color: var(--bg); }
h1 {
font-size: 1.8rem;
border-bottom: 2px solid var(--fg);
padding-bottom: 0.5rem;
margin-bottom: 2rem;
letter-spacing: -0.05em;
text-transform: uppercase;
}
.section {
border: 1px solid var(--dim);
margin-bottom: 2rem;
padding: 1.5rem;
position: relative;
}
.section::before {
content: "[DATA-BLOCK]";
position: absolute;
top: -12px;
left: 1rem;
background: var(--bg);
padding: 0 0.5rem;
font-size: 0.8rem;
}
label { display: block; margin-bottom: 0.5rem; font-weight: bold; color: var(--dim); }
input, select {
width: 100%;
background: transparent;
border: 1px solid var(--dim);
color: var(--fg);
padding: 0.5rem;
font-family: inherit;
margin-bottom: 1.5rem;
}
input:focus, select:focus { outline: none; border-color: var(--fg); }
button {
background: var(--fg);
color: var(--bg);
border: none;
padding: 1rem 2rem;
font-family: inherit;
font-weight: bold;
cursor: pointer;
text-transform: uppercase;
transition: all 0.2s;
}
button:hover { background: var(--dim); color: var(--fg); }
.result {
margin-top: 2rem;
border-left: 4px solid var(--fg);
padding-left: 1rem;
white-space: pre-wrap;
}
.equation {
background: var(--grid);
padding: 1rem;
margin: 1rem 0;
font-style: italic;
overflow-x: auto;
}
.nav {
position: fixed;
top: 1rem;
right: 1rem;
font-size: 0.7rem;
}
nav a {
color: var(--dim);
text-decoration: none;
margin-left: 1rem;
}
nav a:hover { color: var(--fg); text-decoration: underline; }
.citation {
font-size: 0.7rem;
color: var(--dim);
margin-top: 2rem;
border-top: 1px dashed var(--dim);
padding-top: 0.5rem;
}
.citation a { color: var(--fg); }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<nav class="nav">
<a href="/">HOME</a>
<a href="/films/">FILMS</a>
<a href="/docs/">DOCS</a>
</nav>
<h1>HOUSTON DAWN RUN<br>FUEL CALCULATOR</h1>
<div class="section">
<p>> SYSTEM STATUS: ONLINE</p>
<p>> LOCATION: HOUSTON, TX (29.76° N, 95.36° W)</p>
<p>> ENVIRONMENT: HIGH HUMIDITY / URBAN HEAT ISLAND</p>
<p>> OBJECTIVE: PRECISION CARBOHYDRATE LOADING</p>
</div>
<div class="section">
<label>// OPERATOR MASS (KG)</label>
<input type="number" id="mass" placeholder="e.g., 68" min="40" max="150" step="0.1">
<label>// TARGET DISTANCE (KM)</label>
<input type="number" id="distance" placeholder="e.g., 16.09" min="1" max="42.2" step="0.1">
<label>// PACING VELOCITY (m/min)</label>
<input type="number" id="velocity" placeholder="Calculated from pace" min="100" max="600" step="1">
<small style="color: var(--dim)">// HINT: 5min/km pace = 166.67 m/min</small>
<label>// AMBIENT HUMIDITY FACTOR (%)</label>
<select id="humidity">
<option value="0.02">Standard Sea Level (Dry)</option>
<option value="0.05" selected>Gulf Coast Dawn (High Humidity)</option>
<option value="0.08">Summer Peak (Critical Load)</option>
</select>
<label>// GLYCOGEN EFFICIENCY (g/kg)</label>
<select id="efficiency">
<option value="12">Baseline Trained</option>
<option value="15" selected>Elite Adaptation</option>
<option value="18">Supercompensation State</option>
</select>
<button onclick="calculate()">COMPUTE LOAD</button>
</div>
<div class="result" id="output">
AWAITING INPUT...
</div>
<div class="section">
<label>// DERIVATION LOG</label>
<div class="equation">
VO2 (ml/kg/min) = (0.2 × S) + (0.9 × S × G) + 3.5<br><br>
Calories (kcal) = VO2 × Mass(kg) × Duration(min) × 5<br><br>
Carbs (g) = Calories × 0.5 × Efficiency_Factor
</div>
<p>> S: Speed (m/min)<br>> G: Grade (% slope, assumed 0 for Houston flats)<br>> 3.5: Resting VO2 baseline (ACSM 2009)</p>
</div>
<div class="citation">
SOURCE: American College of Sports Medicine Guidelines (2009). Running Energy Expenditure.<br>
CONTEXT: Derived from ACSM Position Stand on Exercise Testing and Prescription.<br>
ADAPTATION: Weighted for Houston meteorological conditions (Relative Humidity > 80%).<br>
<link href="/run-fuel.json" rel="alternate" type="application/json">DATA TWIN AVAILABLE</link>
</div>
<script>
function calculate() {
const mass = parseFloat(document.getElementById('mass').value);
const distance = parseFloat(document.getElementById('distance').value);
let velocity = parseFloat(document.getElementById('velocity').value);
const humidityFactor = parseFloat(document.getElementById('humidity').value);
const efficiency = parseFloat(document.getElementById('efficiency').value);
// Validate inputs
if (!mass || !distance || !velocity) {
document.getElementById('output').innerText = "ERROR: MISSING PARAMETERS.\n> ABORTING SEQUENCE.";
return;
}
// Convert km to meters
const totalMeters = distance * 1000;
// Calculate duration in minutes
const durationMin = totalMeters / velocity;
// ACSM Equation for Running: VO2 = (0.2 * S) + (0.9 * S * G) + 3.5
// S = speed in m/min, G = grade (0 for flat)
const vo2PerKgMin = (0.2 * velocity) + (0.9 * velocity * 0) + 3.5;
// Total Oxygen Consumption (L)
const totalO2Liters = (vo2PerKgMin * mass * durationMin) / 1000;
// Caloric Equivalent (approx 5 kcal per Liter O2)
const totalKcal = totalO2Liters * 5;
// Carbohydrate Requirement (assuming 50% carb oxidation for sustained effort)
// Adjusted by humidity penalty (increased thermoregulatory cost)
const baseCarbs = totalKcal * 0.5 * (1 + humidityFactor);
// Glycogen Storage Adjustment
const finalLoadGrams = Math.round(baseCarbs / (efficiency / 10));
// Output formatting
const outputText = `
> COMPUTATION COMPLETE.
> --------------------------------------------------
> DISTANCE: ${distance.toFixed(2)} KM
> VELOCITY: ${velocity.toFixed(2)} M/MIN (${(60/(velocity/1000)).toFixed(1)} min/km)
> DURATION: ${durationMin.toFixed(1)} MINUTES
> ESTIMATED ENERGY COST: ${totalKcal.toFixed(0)} KCAL
> HUMIDITY PENALTY: ${(humidityFactor * 100).toFixed(0)}%
> --------------------------------------------------
> PRESCRIBED PRE-DAWN LOAD: ${finalLoadGrams}g CARBOHYDRATES
> --------------------------------------------------
> NOTE: CONSUME 90 MINUTES PRIOR TO START.
> HYDRATION: 500ML + ELECTROLYTES.
`;
document.getElementById('output').innerText = outputText;
}
</script>
</body>
</html>