houston-dawn-protocol/run-fuel.html
2026-07-18 21:57:00 +00:00

223 lines
6.7 KiB
HTML
Raw 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>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>