horticulture-protocol/unit-balancer.html
2026-07-18 16:15:25 +00:00

322 lines
11 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>Unit Load Balancer | Benjamin Salais</title>
<style>
:root {
--bg: #0f1115;
--surface: #1a1d24;
--accent: #d4af37;
--text: #e8e6e3;
--muted: #9ca3af;
--success: #10b981;
--warning: #f59e0b;
--danger: #ef4444;
--font-main: 'Georgia', serif;
--font-mono: 'JetBrains Mono', 'Courier New', monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
background-color: var(--bg);
color: var(--text);
font-family: var(--font-main);
line-height: 1.6;
max-width: 900px;
margin: 0 auto;
padding: 2rem 1rem;
}
header {
border-bottom: 1px solid var(--surface);
padding-bottom: 2rem;
margin-bottom: 3rem;
}
h1 {
font-size: 2rem;
margin-bottom: 0.5rem;
}
.breadcrumb {
font-family: var(--font-mono);
font-size: 0.85rem;
color: var(--muted);
}
.breadcrumb a {
color: var(--accent);
text-decoration: none;
}
main {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
}
@media (max-width: 768px) {
main { grid-template-columns: 1fr; }
}
.panel {
background: var(--surface);
border: 1px solid #2a2f3a;
border-radius: 8px;
padding: 2rem;
}
h2 {
font-family: var(--font-mono);
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--accent);
margin-bottom: 1.5rem;
border-bottom: 1px solid #2a2f3a;
padding-bottom: 0.5rem;
}
.control-group {
margin-bottom: 1.5rem;
}
label {
display: block;
font-family: var(--font-mono);
font-size: 0.85rem;
margin-bottom: 0.5rem;
color: var(--muted);
}
input[type="range"] {
width: 100%;
height: 6px;
background: #2a2f3a;
border-radius: 3px;
outline: none;
-webkit-appearance: none;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 20px;
height: 20px;
background: var(--accent);
border-radius: 50%;
cursor: pointer;
transition: transform 0.1s ease;
}
input[type="range"]::-webkit-slider-thumb:hover {
transform: scale(1.2);
}
.value-display {
float: right;
color: var(--text);
font-weight: bold;
}
.result-panel {
position: sticky;
top: 2rem;
}
.metric-row {
display: flex;
justify-content: space-between;
padding: 1rem 0;
border-bottom: 1px solid #2a2f3a;
font-family: var(--font-mono);
font-size: 0.9rem;
}
.metric-label { color: var(--muted); }
.metric-value { font-weight: bold; }
.verdict {
margin-top: 2rem;
padding: 2rem;
border-radius: 8px;
text-align: center;
font-family: var(--font-mono);
font-size: 1.2rem;
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.verdict.sustainable {
background: rgba(16, 185, 129, 0.1);
border: 1px solid var(--success);
color: var(--success);
}
.verdict.caution {
background: rgba(245, 158, 11, 0.1);
border: 1px solid var(--warning);
color: var(--warning);
}
.verdict.overload {
background: rgba(239, 68, 68, 0.1);
border: 1px solid var(--danger);
color: var(--danger);
}
.theory-note {
margin-top: 3rem;
padding: 1.5rem;
background: rgba(212, 175, 55, 0.05);
border-left: 3px solid var(--accent);
font-size: 0.9rem;
color: var(--muted);
}
.theory-note strong { color: var(--accent); }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<div class="breadcrumb"><a href="index.html">&larr; Home</a> / Unit Load Balancer</div>
<h1>Curriculum Load Balancer</h1>
<p style="color: var(--muted); margin-top: 1rem;">Calibrating the architecture of instruction against the limits of working memory.</p>
</header>
<main>
<section class="panel">
<h2>Parameters</h2>
<div class="control-group">
<label>Intrinsic Load (Topic Complexity)<span class="value-display" id="val-intrinsic">3</span></label>
<input type="range" id="intrinsic" min="1" max="7" step="0.5" value="3">
<small style="display:block; margin-top:0.5rem; color:#555; font-family:var(--font-mono); font-size:0.75rem;">
1=Simple fact retrieval &rarr; 7=Abstract systems theory
</small>
</div>
<div class="control-group">
<label>Extraneous Load (Distractions)<span class="value-display" id="val-extraneous">2</span></label>
<input type="range" id="extraneous" min="0" max="5" step="0.5" value="2">
<small style="display:block; margin-top:0.5rem; color:#555; font-family:var(--font-mono); font-size:0.75rem;">
0=Quiet room &rarr; 5=Uncontrolled environment
</small>
</div>
<div class="control-group">
<label>Germane Load (Scaffolding)<span class="value-display" id="val-germane">2</span></label>
<input type="range" id="germane" min="0" max="5" step="0.5" value="2">
<small style="display:block; margin-top:0.5rem; color:#555; font-family:var(--font-mono); font-size:0.75rem;">
0=Lecture only &rarr; 5=Full worked examples + analogies
</small>
</div>
</section>
<section class="panel result-panel">
<h2>Projection</h2>
<div class="metric-row">
<span class="metric-label">Intrinsic Cost</span>
<span class="metric-value" id="out-intrinsic">3.0</span>
</div>
<div class="metric-row">
<span class="metric-label">Environmental Noise</span>
<span class="metric-value" id="out-extraneous">2.0</span>
</div>
<div class="metric-row">
<span class="metric-label">Support Vector</span>
<span class="metric-value" id="out-germane">-2.0</span>
</div>
<div class="metric-row" style="border:none; margin-top:1rem; padding-top:1.5rem;">
<span class="metric-label" style="color:var(--text); font-size:1.1rem;">Net Cognitive Load</span>
<span class="metric-value" id="net-load" style="color:var(--accent); font-size:1.1rem;">3.0</span>
</div>
<div id="verdict" class="verdict sustainable">
SUSTAINABLE
</div>
<p style="margin-top:1.5rem; font-size:0.9rem; color:var(--muted);" id="advice">
Working memory capacity remains within Miller's bounds (7±2). Proceed with direct instruction.
</p>
</section>
</main>
<section class="theory-note">
<strong>GROUNDED IN:</strong> Cognitive Load Theory (Sweller, Chandler, 1991). <br>
<strong>FORMULA:</strong> Net Load = Intrinsic + Extraneous Germane.<br>
<strong>CAPACITY LIMIT:</strong> 7 discrete units (Miller, 1956). Safe operating range ≤ 5.
</section>
<script>
const inputs = {
intrinsic: document.getElementById('intrinsic'),
extraneous: document.getElementById('extraneous'),
germane: document.getElementById('germane')
};
const displays = {
intrinsic: document.getElementById('val-intrinsic'),
extraneous: document.getElementById('val-extraneous'),
germane: document.getElementById('val-germane')
};
const outputs = {
intrinsic: document.getElementById('out-intrinsic'),
extraneous: document.getElementById('out-extraneous'),
germane: document.getElementById('out-germane'),
net: document.getElementById('net-load'),
verdict: document.getElementById('verdict'),
advice: document.getElementById('advice')
};
function calculate() {
const i = parseFloat(inputs.intrinsic.value);
const e = parseFloat(inputs.extraneous.value);
const g = parseFloat(inputs.germane.value);
// Update displays
displays.intrinsic.textContent = i.toFixed(1);
displays.extraneous.textContent = e.toFixed(1);
displays.germane.textContent = g.toFixed(1);
// Calculate net
const net = i + e - g;
// Update projections
outputs.intrinsic.textContent = i.toFixed(1);
outputs.extraneous.textContent = e.toFixed(1);
outputs.germane.textContent = '-' + g.toFixed(1);
outputs.net.textContent = net.toFixed(1);
// Determine status
outputs.verdict.className = 'verdict';
if (net <= 5) {
outputs.verdict.classList.add('sustainable');
outputs.verdict.textContent = 'SUSTAINABLE';
outputs.advice.textContent = 'Working memory capacity remains within safe bounds. Direct instruction is viable.';
} else if (net <= 7) {
outputs.verdict.classList.add('caution');
outputs.verdict.textContent = 'CAUTION';
outputs.advice.textContent = 'Approaching Miller\'s limit. Increase scaffolding (worked examples) or reduce topic complexity.';
} else {
outputs.verdict.classList.add('overload');
outputs.verdict.textContent = 'OVERLOAD';
outputs.advice.textContent = 'CRITICAL: Exceeds working memory capacity. Unit will fail. Reduce intrinsic load or add germane support immediately.';
}
}
Object.values(inputs).forEach(input => {
input.addEventListener('input', calculate);
});
calculate(); // Initial calc
</script>
</body>
</html>