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