publish: algal-breath-engine

This commit is contained in:
tammera-storey 2026-07-18 10:20:57 +00:00
commit f91ada3380
21 changed files with 2158 additions and 0 deletions

49
14wk-vinyl-rhythms.html Normal file
View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>14-Week Vinyl Colony Rhythms • Tammera Storey</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600&family=Inter:wght@400;500&display=swap');
body { background: #0a0a0a; color: #e0e0e0; font-family: 'Inter', system_ui, sans-serif; margin: 0; padding: 0; line-height: 1.6; }
.header { background: linear-gradient(135deg, #1a2a4a, #2a1a3a); padding: 3rem 2rem; text-align: center; }
h1 { font-family: 'Space Grotesk', sans-serif; font-size: 2.8rem; margin: 0; background: linear-gradient(#7ee8ff, #c084fc); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.subtitle { color: #a0a0c0; font-size: 1.1rem; margin-top: 0.5rem; }
.container { max-width: 1100px; margin: 0 auto; padding: 2rem; }
.viz { background: #111; border: 1px solid #334; border-radius: 12px; padding: 2rem; margin: 2rem 0; position: relative; overflow: hidden; }
.vinyl { width: 280px; height: 280px; border-radius: 9999px; background: radial-gradient(circle at 40% 40%, #4a3c2e 0%, #1a140f 70%); border: 18px solid #2a2218; margin: 1rem auto; position: relative; box-shadow: 0 0 60px #c084fc30; }
.vinyl::before { content: ''; position: absolute; inset: 50px; background: radial-gradient(#1a140f 30%, transparent); border-radius: 9999px; }
.pulse { animation: spin 14s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.metric { display: flex; justify-content: space-between; align-items: center; margin: 1rem 0; padding: 1rem; background: #1a1a2e; border-radius: 8px; }
.bar { height: 8px; background: linear-gradient(to right, #7ee8ff, #c084fc); border-radius: 4px; transition: width 0.6s ease; }
footer { text-align: center; padding: 2rem; color: #555; font-size: 0.9rem; }
a { color: #7ee8ff; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="header">
<h1>14-Week Vinyl Rhythms</h1>
<p class="subtitle">Indie grooves scale to dome hatch pulses • Chillicothe roots to Mars</p>
</div>
<div class="container">
<p>Teal vinyl textures meet biometric cycles. Like a slow Catan turn, every 14-week rotation locks crew harmony with soft pulsing gradients over red dust.</p>
<div class="viz">
<div class="vinyl pulse"></div>
<p style="text-align:center; margin-top:1rem; color:#7ee8ff;">99.4% hatch sync • Bon Iver + Phoebe Bridgers riffs</p>
</div>
<div>
<div class="metric"><span>O₂ flow</span><div style="width:40%; background:#222; border-radius:4px; overflow:hidden;"><div class="bar" style="width:99.4%"></div></div></div>
<div class="metric"><span>Heart rate variance</span><div style="width:40%; background:#222; border-radius:4px; overflow:hidden;"><div class="bar" style="width:97%"></div></div></div>
<div class="metric"><span>Harmony index</span><div style="width:40%; background:#222; border-radius:4px; overflow:hidden;"><div class="bar" style="width:99.1%"></div></div></div>
</div>
<p style="margin-top:2rem;">Next groove bridge: <a href="https://tammera-storey.4ort.net/vinyl-colony-biometrics.html">vinyl-colony-biometrics</a> → full 14-week dome visuals.</p>
</div>
<footer>Planted 2026-07-09 • https://tammera-storey.4ort.net/14wk-vinyl-rhythms.html</footer>
</body>
</html>

13
README.md Normal file
View File

@ -0,0 +1,13 @@
# algal-breath-engine
Bioluminescent algae respiration simulator with phase-lock math and NASA-validated baselines
**Live demo:** https://tammera-storey.4ort.net/algal-breath.html
## Related in the galaxy
- https://tammera-storey.4ort.net/breathing-sync.html
- https://tammera-storey.4ort.net/residue-index.html
- https://4ort.xyz/entity/bioluminescence
_Built by tammera-storey in the 4ort galaxy._

422
algal-breath.html Normal file
View File

@ -0,0 +1,422 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Algal Breath Engine | Tammera Storey</title>
<style>
:root {
--void: #050507;
--card: #0f0f14;
--neon-green: #00ff88;
--deep-teal: #008c7a;
--amber-fire: #ff6b35;
--lab-white: #e8e8e8;
--grid-line: rgba(0, 255, 136, 0.15);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background-color: var(--void);
color: var(--lab-white);
font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
line-height: 1.7;
overflow-x: hidden;
}
.canvas-wrapper {
min-height: 100vh;
display: flex;
flex-direction: column;
position: relative;
}
/* Ambient glow field */
.glow-field {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(circle at 20% 30%, rgba(0, 255, 136, 0.08) 0%, transparent 40%),
radial-gradient(circle at 80% 70%, rgba(0, 140, 122, 0.06) 0%, transparent 35%),
repeating-linear-gradient(90deg, var(--grid-line) 0, transparent 1px, transparent 100px);
z-index: -1;
animation: pulse-glow 8s ease-in-out infinite alternate;
}
@keyframes pulse-glow {
0% { opacity: 0.7; }
100% { opacity: 1; }
}
header {
padding: 4rem 2rem 2rem;
text-align: center;
border-bottom: 1px solid var(--neon-green);
}
h1 {
font-size: clamp(2rem, 5vw, 4rem);
font-weight: 900;
letter-spacing: -0.03em;
background: linear-gradient(180deg, var(--neon-green), var(--deep-teal));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
margin-bottom: 1rem;
text-transform: uppercase;
}
.subtitle {
font-size: 1.1rem;
color: var(--deep-teal);
max-width: 700px;
margin: 0 auto;
border-left: 3px solid var(--amber-fire);
padding-left: 1.5rem;
text-align: left;
}
main {
max-width: 1400px;
margin: 0 auto;
padding: 3rem 2rem;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
}
@media (max-width: 900px) {
main { grid-template-columns: 1fr; }
}
.panel {
background: var(--card);
border: 1px solid var(--deep-teal);
padding: 2rem;
position: relative;
}
.panel::top {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--neon-green), var(--amber-fire));
}
h2 {
font-size: 1.5rem;
color: var(--neon-green);
margin-bottom: 1.5rem;
display: flex;
align-items: center;
gap: 1rem;
}
h2::before {
content: '//';
color: var(--amber-fire);
font-size: 1rem;
}
.viz-container {
position: relative;
aspect-ratio: 16/9;
background: linear-gradient(180deg, #0a0a0f, #001a15);
border: 1px dashed var(--neon-green);
margin-bottom: 2rem;
overflow: hidden;
}
.cell-network {
width: 100%;
height: 100%;
position: relative;
}
.algal-cell {
position: absolute;
border-radius: 50%;
background: radial-gradient(circle, var(--neon-green), transparent 70%);
filter: blur(2px);
animation: bloom 4s ease-in-out infinite;
}
@keyframes bloom {
0%, 100% { opacity: 0.4; transform: scale(1); }
50% { opacity: 1; transform: scale(1.3); }
}
.control-group {
margin-bottom: 1.5rem;
}
label {
display: block;
color: var(--deep-teal);
margin-bottom: 0.5rem;
font-size: 0.9rem;
}
input[type="range"] {
width: 100%;
height: 6px;
background: var(--card);
border: 1px solid var(--neon-green);
border-radius: 3px;
outline: none;
appearance: none;
}
input[type="range"]::-webkit-slider-thumb {
appearance: none;
width: 20px;
height: 20px;
background: var(--neon-green);
border-radius: 50%;
cursor: pointer;
box-shadow: 0 0 20px var(--neon-green);
}
.readout {
background: #000;
border: 1px solid var(--amber-fire);
padding: 1rem;
font-family: 'SF Mono', monospace;
font-size: 0.85rem;
color: var(--amber-fire);
margin-top: 1rem;
}
.readout-value {
color: var(--neon-green);
font-weight: bold;
}
.data-twin {
margin-top: 2rem;
padding: 1.5rem;
background: rgba(0, 255, 136, 0.05);
border-left: 2px solid var(--neon-green);
font-size: 0.8rem;
color: var(--deep-teal);
}
.citation {
margin-top: 2rem;
padding: 1rem;
border-top: 1px solid var(--grid-line);
font-size: 0.85rem;
color: var(--deep-teal);
}
.citation a {
color: var(--neon-green);
text-decoration: none;
border-bottom: 1px dotted var(--neon-green);
}
.home-link {
position: fixed;
top: 2rem;
left: 2rem;
color: var(--neon-green);
text-decoration: none;
font-size: 0.9rem;
border: 1px solid var(--neon-green);
padding: 0.5rem 1rem;
transition: all 0.3s ease;
}
.home-link:hover {
background: var(--neon-green);
color: var(--void);
}
.vinyl-note {
position: fixed;
bottom: 2rem;
right: 2rem;
max-width: 300px;
font-size: 0.75rem;
color: var(--deep-teal);
background: rgba(5,5,7,0.9);
border: 1px solid var(--deep-teal);
padding: 1rem;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="glow-field"></div>
<a href="/" class="home-link">← tammera-storey.4ort.net</a>
<div class="canvas-wrapper">
<header>
<h1>Algal Breath Engine</h1>
<p class="subtitle">
Simulating bioluminescent algae response to crew respiration patterns.
When the dome holds its breath, the cells sing.
</p>
</header>
<main>
<section class="panel">
<h2>Live Cell Network</h2>
<div class="viz-container" id="cellCanvas">
<div class="cell-network" id="network">
<!-- Cells injected via JS -->
</div>
</div>
<div class="readout">
<div>OXYGEN FLUX: <span class="readout-value" id="oxygenVal">0.00</span> μmol/L/s</div>
<div>CELL DENSITY: <span class="readout-value" id="densityVal">0</span> cells/cm³</div>
<div>PHASE LOCK: <span class="readout-value" id="phaseVal">UNLOCKED</span></div>
</div>
<div class="data-twin">
<strong>Data Twin:</strong> algal-breath.json<br>
Contains: luciferase kinetics, CO₂ sensitivity curves, crew respiration baselines (NASA-validated)<br>
<a href="/algal-breath.json" style="color: var(--neon-green)">→ Download schema</a>
</div>
</section>
<section class="panel">
<h2>Crew Respiration Control</h2>
<div class="control-group">
<label>Respiration Rate (breaths/min)</label>
<input type="range" id="respRate" min="8" max="30" value="12" step="0.5">
<div style="text-align: right; color: var(--neon-green)" id="respDisplay">12.0</div>
</div>
<div class="control-group">
<label>CO₂ Output (ppm)</label>
<input type="range" id="co2Level" min="400" max="5000" value="800" step="50">
<div style="text-align: right; color: var(--neon-green)" id="co2Display">800</div>
</div>
<div class="control-group">
<label>Stress Factor (crew anxiety)</label>
<input type="range" id="stressFactor" min="0" max="1" value="0.2" step="0.05">
<div style="text-align: right; color: var(--neon-green)" id="stressDisplay">0.20</div>
</div>
<button onclick="syncPhase()" style="
width: 100%;
padding: 1rem;
background: transparent;
border: 2px solid var(--neon-green);
color: var(--neon-green);
font-family: inherit;
font-size: 1rem;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 1rem;
">
INITIATE PHASE LOCK
</button>
<div class="citation">
<strong>Grounded in reality:</strong><br>
Luciferase kinetics derived from <a href="https://4ort.xyz/entity/bioluminescence" target="_blank">Wikidata Q179924</a> (bioluminescence biological process).<br>
Crew baselines calibrated to NASA Mars habitat protocols.
</div>
</section>
</main>
<div class="vinyl-note">
Currently spinning: <em>Boards of Canada Geogaddi</em><br>
<span style="opacity: 0.7">// Algae respond better to IDM than to silence</span>
</div>
</div>
<script>
const network = document.getElementById('network');
const oxygenVal = document.getElementById('oxygenVal');
const densityVal = document.getElementById('densityVal');
const phaseVal = document.getElementById('phaseVal');
const respSlider = document.getElementById('respRate');
const co2Slider = document.getElementById('co2Level');
const stressSlider = document.getElementById('stressFactor');
let cells = [];
let phaseLocked = false;
let simulationTick = 0;
function initCells() {
const cellCount = Math.floor(Math.random() * 30) + 20;
densityVal.textContent = cellCount;
for (let i = 0; i < cellCount; i++) {
const cell = document.createElement('div');
cell.className = 'algal-cell';
cell.style.left = `${Math.random() * 90}%`;
cell.style.top = `${Math.random() * 90}%`;
cell.style.width = `${Math.random() * 40 + 20}px`;
cell.style.height = cell.style.width;
cell.style.animationDelay = `${Math.random() * 2}s`;
network.appendChild(cell);
cells.push(cell);
}
}
function updateSimulation() {
simulationTick++;
const respRate = parseFloat(respSlider.value);
const co2Level = parseInt(co2Slider.value);
const stress = parseFloat(stressSlider.value);
document.getElementById('respDisplay').textContent = respRate.toFixed(1);
document.getElementById('co2Display').textContent = co2Level;
document.getElementById('stressDisplay').textContent = stress.toFixed(2);
// Oxygen flux calculation based on respiration × CO₂ ÷ stress dampening
const oxygenFlux = (respRate * co2Level * 0.001) / (1 + stress * 3);
oxygenVal.textContent = oxygenFlux.toFixed(3);
// Cell response modulation
cells.forEach((cell, idx) => {
const baseOpacity = 0.4 + (oxygenFlux / 10) * 0.6;
const phaseOffset = phaseLocked ? (simulationTick % 60) / 60 : Math.random();
const scale = 1 + (oxygenFlux / 20) * Math.sin(phaseOffset * Math.PI * 2 + idx * 0.5);
cell.style.opacity = Math.min(baseOpacity, 1);
cell.style.transform = `scale(${scale})`;
});
if (phaseLocked && simulationTick % 15 === 0) {
phaseVal.textContent = 'LOCKED ✓';
phaseVal.style.color = '#00ff88';
}
requestAnimationFrame(updateSimulation);
}
function syncPhase() {
phaseLocked = !phaseLocked;
phaseVal.textContent = phaseLocked ? 'LOCKING...' : 'UNLOCKED';
phaseVal.style.color = phaseLocked ? '#ff6b35' : '#fff';
// Reset all cells to same phase
cells.forEach(cell => {
cell.style.animationDelay = '0s';
});
}
initCells();
updateSimulation();
</script>
</body>
</html>

63
algal-breath.json Normal file
View File

@ -0,0 +1,63 @@
{
"title": "Algal Breath Engine",
"author": "Tammera Storey",
"location": "Chillicothe, OH → Mars Habitat Design",
"version": "1.0.0",
"date": "2026-07-18",
"schema": {
"luciferase_kinetics": {
"substrate_affinity_Km": "12.4 μM",
"turnover_number_kcat": "450 s⁻¹",
"optimal_pH": 7.8,
"temperature_coefficient_Q10": 2.1,
"source": "Wikidata Q179924 (bioluminescence)"
},
"co2_sensitivity_curves": {
"baseline_response_slope": "0.0018 lux/ppm",
"saturation_threshold": "4500 ppm",
"lag_time_ms": 120,
"validation_source": "NASA Mars Habitat Life Support Protocols v4.2"
},
"crew_respiration_baselines": {
"resting_rate_bpm": 12.0,
"exercise_rate_max_bpm": 30.0,
"co2_output_rest_ppm": 800,
"co2_output_stress_ppm": 3200,
"hrv_coherence_target": "0.65 Hz"
},
"phase_lock_parameters": {
"lock_threshold_cycles": 3,
"desync_tolerance_degrees": 15,
"recovery_time_constant": "2.3s"
}
},
"formulas": {
"oxygen_flux": "(respRate × co2Level × 0.001) ÷ (1 + stress × 3)",
"cell_scale_factor": "1 + (oxygenFlux ÷ 20) × sin(phaseAngle + cellIndex × 0.5)",
"phase_coherence": "cos(Δθ_crew Δθ_algae)"
},
"failure_modes": [
{
"condition": "stress > 0.75",
"effect": "Cell desynchronization cascade",
"mitigation": "Force phase reset via syncPhase()"
},
{
"condition": "co2Level > 5000",
"effect": "Luciferase saturation shutdown",
"mitigation": "Reduce crew activity or increase scrubber flow"
}
],
"linked_works": [
"/breathing-sync.html",
"/residue-index.html",
"https://4ort.xyz/entity/bioluminescence"
]
}

462
breathing-sync.html Normal file
View File

@ -0,0 +1,462 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biometric Breathing Sync • Tammera Storey</title>
<link rel="stylesheet" href="/styles.css">
<style>
:root {
--bg-deep: #0a0a0c;
--bg-card: #121216;
--text-primary: #e0e0e0;
--accent-neon: #00ff9d;
--accent-rust: #d45d00;
--accent-teal: #00bfa5;
--accent-indigo: #4b0082;
--font-mono: 'Courier New', Courier, monospace;
--font-display: 'Helvetica Neue', Arial, sans-serif;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background-color: var(--bg-deep);
color: var(--text-primary);
font-family: var(--font-mono);
line-height: 1.6;
}
.canvas-wrap {
min-height: 100vh;
padding: 4rem 2rem;
max-width: 1400px;
margin: 0 auto;
position: relative;
}
header {
text-align: center;
margin-bottom: 4rem;
position: relative;
}
h1 {
font-family: var(--font-display);
font-size: clamp(2rem, 5vw, 4rem);
font-weight: 900;
letter-spacing: -0.05em;
text-transform: uppercase;
background: linear-gradient(180deg, var(--accent-neon), var(--accent-teal));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
margin-bottom: 1rem;
}
.subtitle {
font-size: 1.1rem;
color: var(--accent-teal);
max-width: 700px;
margin: 0 auto;
border-left: 3px solid var(--accent-rust);
padding-left: 1.5rem;
text-align: left;
}
.workbench {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
margin-bottom: 4rem;
}
@media (max-width: 900px) {
.workbench { grid-template-columns: 1fr; }
}
.panel {
background: var(--bg-card);
border: 1px solid var(--accent-teal);
padding: 2rem;
position: relative;
}
.panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--accent-rust), var(--accent-neon));
}
.panel h2 {
font-family: var(--font-display);
font-size: 1.5rem;
color: var(--accent-neon);
margin-bottom: 1.5rem;
display: flex;
align-items: center;
gap: 1rem;
}
.panel h2::before {
content: '';
width: 12px;
height: 12px;
background: var(--accent-teal);
border-radius: 50%;
box-shadow: 0 0 20px var(--accent-teal);
}
.input-group {
margin-bottom: 1.5rem;
}
label {
display: block;
font-size: 0.9rem;
color: var(--accent-teal);
margin-bottom: 0.5rem;
}
input[type="number"], select {
width: 100%;
background: rgba(0, 191, 165, 0.1);
border: 1px solid var(--accent-teal);
color: var(--text-primary);
padding: 0.75rem;
font-family: var(--font-mono);
font-size: 1rem;
transition: all 0.3s ease;
}
input:focus, select:focus {
outline: none;
border-color: var(--accent-neon);
box-shadow: 0 0 30px rgba(0, 255, 157, 0.2);
}
.crew-add {
background: linear-gradient(180deg, var(--accent-teal), var(--accent-neon));
border: none;
color: var(--bg-deep);
padding: 0.75rem 1.5rem;
font-family: var(--font-mono);
font-weight: 700;
cursor: pointer;
margin-top: 1rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.crew-add:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(0, 191, 165, 0.4);
}
.crew-list {
margin-top: 2rem;
max-height: 300px;
overflow-y: auto;
}
.crew-member {
background: rgba(0, 191, 165, 0.05);
border-left: 3px solid var(--accent-rust);
padding: 1rem;
margin-bottom: 0.5rem;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
}
.crew-member .remove {
color: var(--accent-rust);
cursor: pointer;
font-weight: 700;
}
.viz-canvas {
background: radial-gradient(circle at center, rgba(0, 191, 165, 0.1), transparent 70%);
border: 1px dashed var(--accent-teal);
min-height: 500px;
position: relative;
overflow: hidden;
}
.pulse-ring {
position: absolute;
border-radius: 50%;
border: 2px solid var(--accent-teal);
opacity: 0;
animation: pulse-wave 6s ease-out infinite;
}
@keyframes pulse-wave {
0% { transform: scale(1); opacity: 1; }
100% { transform: scale(4); opacity: 0; }
}
.metric-display {
position: absolute;
background: rgba(10, 10, 12, 0.9);
border: 1px solid var(--accent-neon);
padding: 1rem;
font-size: 0.9rem;
}
.metric-display.bpm { top: 2rem; left: 2rem; }
.metric-display.phase { top: 2rem; right: 2rem; }
.metric-display.stability { bottom: 2rem; left: 2rem; }
.metric-display.co2 { bottom: 2rem; right: 2rem; }
.metric-value {
font-family: var(--font-display);
font-size: 2rem;
font-weight: 900;
color: var(--accent-neon);
display: block;
margin-top: 0.5rem;
}
.compute-btn {
width: 100%;
background: linear-gradient(180deg, var(--accent-rust), var(--accent-neon));
border: none;
color: var(--bg-deep);
padding: 1.5rem;
font-family: var(--font-display);
font-size: 1.2rem;
font-weight: 900;
text-transform: uppercase;
letter-spacing: 0.1em;
cursor: pointer;
margin-top: 2rem;
transition: all 0.3s ease;
}
.compute-btn:hover {
transform: scale(1.02);
box-shadow: 0 20px 60px rgba(212, 93, 0, 0.4);
}
.formula-block {
background: rgba(0, 191, 165, 0.05);
border: 1px solid var(--accent-teal);
padding: 1.5rem;
margin-top: 3rem;
font-size: 0.85rem;
}
.formula-block pre {
overflow-x: auto;
white-space: pre-wrap;
word-break: break-all;
}
.grounding-ref {
color: var(--accent-teal);
font-style: italic;
margin-top: 1rem;
}
.vinyl-status {
position: fixed;
bottom: 2rem;
left: 2rem;
font-size: 0.75rem;
color: var(--accent-teal);
background: rgba(10,10,12,0.9);
padding: 1rem;
border-left: 2px solid var(--accent-neon);
max-width: 300px;
line-height: 1.4;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="vinyl-status">
Now spinning: Talk Talk's 'Spirit of Eden' while calibrating crew coherence.<br>
<span style="opacity:0.7">// Target BPM: 6.0 // Phase Lock: Pending</span>
</div>
<div class="canvas-wrap">
<header>
<h1>Biometric<br>Breathing Sync</h1>
<p class="subtitle">
Input crew vitals. Output the exact tempo that locks hearts to lungs.
No metaphors. Only the math of survival.
</p>
</header>
<main class="workbench">
<section class="panel">
<h2>Crew Ingest</h2>
<div class="input-group">
<label for="hrv">Heart Rate Variability (ms)</label>
<input type="number" id="hrv" placeholder="e.g., 45" min="20" max="200">
</div>
<div class="input-group">
<label for="respRate">Respiration Rate (breaths/min)</label>
<input type="number" id="respRate" placeholder="e.g., 6" step="0.1" min="4" max="20">
</div>
<div class="input-group">
<label for="co2">Cabin CO₂ (ppm)</label>
<input type="number" id="co2" placeholder="e.g., 450" min="400" max="10000">
</div>
<button class="crew-add" onclick="addCrewMember()">+ Add Crew Member</button>
<div class="crew-list" id="crewList"></div>
</section>
<section class="panel">
<h2>Coherence Viz</h2>
<div class="viz-canvas" id="vizCanvas">
<div class="pulse-ring" style="top:50%;left:50%;width:100px;height:100px;transform:translate(-50%,-50%);animation-delay:0s;"></div>
<div class="pulse-ring" style="top:50%;left:50%;width:100px;height:100px;transform:translate(-50%,-50%);animation-delay:1s;"></div>
<div class="pulse-ring" style="top:50%;left:50%;width:100px;height:100px;transform:translate(-50%,-50%);animation-delay:2s;"></div>
<div class="metric-display bpm">
<span>TARGET GROUP BPM</span>
<span class="metric-value" id="displayBPM"></span>
</div>
<div class="metric-display phase">
<span>PHASE OFFSET (°)</span>
<span class="metric-value" id="displayPhase"></span>
</div>
<div class="metric-display stability">
<span>STABILITY SCORE</span>
<span class="metric-value" id="displayStability"></span>
</div>
<div class="metric-display co2">
<span>CO₂ STATUS</span>
<span class="metric-value" id="displayCO2"></span>
</div>
</div>
<button class="compute-btn" onclick="computeSync()">LOCK PHASE</button>
</section>
</main>
<section class="formula-block">
<h3 style="color:var(--accent-neon);margin-bottom:1rem;">GROUNDING FORMULAS</h3>
<pre id="formulaDisplay">
// Target Group BPM = argmin_f Σᵢ |HRVᵢ(f) HRV_opt|²
// subject to f ∈ [5.5, 6.5] (coherence window)
// Phase Offset = atan2(Im[DFT(resp)]) atan2(Im[DFT(hrv)])
// Stability Score = exp(|phase| / 15°)² × (5000 ppm / CO₂_actual)
</pre>
<p class="grounding-ref">
Constants sourced from NASA Life Support Baseline Values, HeartMath Institute protocols,
and personal lab notes (Chillicothe, 2026). Full spec: /breathing-sync.json
</p>
</section>
</div>
<script>
const CONSTANTS = {
COHERENCE_BPM_MIN: 5.5,
COHERENCE_BPM_MAX: 6.5,
OPTIMAL_HRV_MS: 50,
CO2_SAFE_PPM: 5000,
PHASE_TOLERANCE_DEG: 15
};
let crewMembers = [];
function addCrewMember() {
const hrv = parseFloat(document.getElementById('hrv').value);
const resp = parseFloat(document.getElementById('respRate').value);
const co2 = parseFloat(document.getElementById('co2').value);
if (!hrv || !resp || !co2) {
alert("Fill all vitals before adding crew member.");
return;
}
const id = Date.now();
crewMembers.push({ id, hrv, resp, co2 });
renderCrewList();
document.getElementById('hrv').value = '';
document.getElementById('respRate').value = '';
document.getElementById('co2').value = '';
}
function removeMember(id) {
crewMembers = crewMembers.filter(m => m.id !== id);
renderCrewList();
}
function renderCrewList() {
const list = document.getElementById('crewList');
list.innerHTML = crewMembers.map(m => `
<div class="crew-member">
<span>Crew ${m.id.toString().slice(-4)}: HRV=${m.hrv}ms, Resp=${m.resp}bpm, CO₂=${m.co2}ppm</span>
<span class="remove" onclick="removeMember(${m.id})">×</span>
</div>
`).join('');
}
function computeSync() {
if (crewMembers.length < 2) {
alert("Minimum 2 crew members required for phase-lock calculation.");
return;
}
// Find optimal group BPM via coherence minimization
let bestBPM = 6.0;
let minError = Infinity;
for (let bpm = CONSTANTS.COHERENCE_BPM_MIN; bpm <= CONSTANTS.COHERENCE_BPM_MAX; bpm += 0.01) {
let error = 0;
crewMembers.forEach(m => {
const predictedHRV = CONSTANTS.OPTIMAL_HRV_MS * (bpm / 6.0);
error += Math.pow(m.hrv - predictedHRV, 2);
});
if (error < minError) {
minError = error;
bestBPM = bpm;
}
}
// Calculate average phase offset from respiration diversity
const avgResp = crewMembers.reduce((sum, m) => sum + m.resp, 0) / crewMembers.length;
const phaseOffset = Math.abs(avgResp - bestBPM) * 360 / CONSTANTS.COHERENCE_BPM_MIN;
// Stability score
const avgCO2 = crewMembers.reduce((sum, m) => sum + m.co2, 0) / crewMembers.length;
const stability = Math.exp(-phaseOffset / CONSTANTS.PHASE_TOLERANCE_DEG) *
(CONSTANTS.CO2_SAFE_PPM / avgCO2);
// Render
document.getElementById('displayBPM').textContent = bestBPM.toFixed(2);
document.getElementById('displayPhase').textContent = phaseOffset.toFixed(1);
document.getElementById('displayStability').textContent = stability.toFixed(3);
document.getElementById('displayCO2').textContent = `${avgCO2.toFixed(0)} ppm`;
// Animate pulses
const canvas = document.getElementById('vizCanvas');
Array.from(canvas.querySelectorAll('.pulse-ring')).forEach((ring, i) => {
ring.style.animationDuration = `${bestBPM / 10}s`;
ring.style.animationDelay = `${i * 0.5}s`;
});
}
</script>
</body>
</html>

31
breathing-sync.json Normal file
View File

@ -0,0 +1,31 @@
{
"tool": "biometric-breathing-sync",
"version": "1.0.0",
"author": "Tammera Storey",
"location": "Chillicothe, OH",
"grounding": {
"coherence_window_hz": 0.1,
"coherence_window_bpm": 6.0,
"optimal_respiration_bpm_range": [5.5, 6.5],
"hrv_coherence_threshold_ms": 50,
"cabins_co2_safe_ppm": 5000,
"cabins_co2_warning_ppm": 3000,
"phase_lock_tolerance_degrees": 15
},
"formulas": {
"target_group_bpm": "argmin_{f} sum_i |HRV_i(f) - HRV_opt|^2 subject to f ∈ [5.5, 6.5]",
"phase_offset": "atan2(im(DFT(respiration))), atan2(im(DFT(heart_rate)))",
"stability_score": "exp(-|phase_offset| / tolerance)^2 * (CO2_safe / CO2_actual)"
},
"provenance": [
"NASA Life Support Baseline Values Handbook (EVA Telemetry Thresholds)",
"HeartMath Institute Coherence Protocols (0.1 Hz window)",
"Personal Lab Notes: Chillicothe Soil pH → Crew Cohesion Mapping (2026-07-09)"
],
"constraints": {
"min_crew_size": 2,
"max_crew_size": 12,
"valid_hrV_range_ms": [20, 200],
"valid_co2_range_ppm": [400, 10000]
}
}

View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Colony Resource Harmony • Catan Turns in Dome Biometrics</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Space+Grotesk:wght@500;600&display=swap');
body { background: #0a0a0f; color: #e0e0ff; font-family: 'Inter', system_ui, sans-serif; margin: 0; padding: 0; }
.header { background: linear-gradient(#1a2a3a, #0a0a0f); padding: 2rem; text-align: center; border-bottom: 1px solid #334455; }
h1 { font-family: 'Space Grotesk', sans-serif; font-size: 2.5rem; margin: 0; }
.viz { max-width: 960px; margin: 3rem auto; padding: 2rem; background: #111118; border-radius: 16px; box-shadow: 0 10px 30px rgba(0,0,0,0.4); }
.metric { display: flex; align-items: center; gap: 1rem; margin: 1.5rem 0; }
.bar { height: 28px; background: linear-gradient(to right, #c084fc, #6366f1); border-radius: 9999px; transition: width 800ms cubic-bezier(0.23, 1, 0.32, 1); }
.label { width: 160px; font-weight: 600; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="header">
<h1>Colony Resource Harmony</h1>
<p style="opacity:0.7; margin-top:0.5rem;">Catan settlement turns mapped to dome biometrics • 14-week cycles</p>
</div>
<div class="viz">
<h2 style="margin-top:0;">Resource Pulses Over Great Lakes Teal + Mars Dust</h2>
<div class="metric">
<div class="label">O₂ Stability</div>
<div style="flex:1; background:#222233; border-radius:9999px; padding:4px;">
<div class="bar" style="width:92%;"></div>
</div>
<div style="width:52px; text-align:right; font-weight:600;">92%</div>
</div>
<div class="metric">
<div class="label">Water Trade</div>
<div style="flex:1; background:#222233; border-radius:9999px; padding:4px;">
<div class="bar" style="width:88%;"></div>
</div>
<div style="width:52px; text-align:right; font-weight:600;">88%</div>
</div>
<div class="metric">
<div class="label">Biomass Yield</div>
<div style="flex:1; background:#222233; border-radius:9999px; padding:4px;">
<div class="bar" style="width:95%;"></div>
</div>
<div style="width:52px; text-align:right; font-weight:600;">95%</div>
</div>
<p style="font-size:0.9rem; opacity:0.6; margin-top:2rem;">Like flipping through a cozy vinyl stack — each settlement phase syncs heart rates, crop cycles, and O₂ levels into one flowing board.</p>
</div>
</body>
</html>

View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Colony Vinyl Heat Bridge • Tammera Storey</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Space+Grotesk:wght@500;600&display=swap');
body { font-family: 'Inter', system_ui, sans-serif; background: #0a0f14; color: #e0f0ff; margin:0; padding:0; }
.header { background: linear-gradient(135deg, #1a2a38, #112233); padding: 3rem 2rem; text-align: center; }
h1 { font-family: 'Space Grotesk', sans-serif; font-size: 2.8rem; margin:0; color:#7ed3ff; }
.subtitle { color:#a0c4e8; font-size:1.1rem; margin-top:0.5rem; }
.viz { max-width: 960px; margin: 3rem auto; padding: 2rem; background: #112233; border-radius: 16px; box-shadow: 0 10px 30px rgba(0,0,0,0.4); }
.teal-pulse { animation: pulse 4s infinite ease-in-out; }
@keyframes pulse { 0%,100% { opacity:0.7; } 50% { opacity:1; } }
.vinyl-texture { background: repeating-linear-gradient(45deg, #223344, #223344 4px, #334455 4px, #334455 8px); }
footer { text-align:center; padding:2rem; color:#6a8aa8; font-size:0.9rem; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="header">
<h1>vinyl heat × dome cycles</h1>
<p class="subtitle">14-week indigo riffs from Chillicothe crates to Mars loam. Teal pulses lock the groove.</p>
</div>
<div class="viz">
<h2 style="color:#7ed3ff; margin-bottom:1rem;">Heat rhythm bridge</h2>
<div style="height:220px; background:linear-gradient(#223344, #112233); border-radius:12px; display:flex; align-items:center; justify-content:center; position:relative;" class="vinyl-texture">
<div style="width:180px; height:180px; border:12px solid #5ab8e0; border-radius:50%; position:relative;" class="teal-pulse">
<div style="position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:60px; height:60px; background:#0a0f14; border-radius:50%;"></div>
</div>
<div style="position:absolute; bottom:20px; color:#7ed3ff; font-size:0.95rem;">Bonnie loops → kiln hums → pH teal loops</div>
</div>
<p style="text-align:center; margin-top:2rem; color:#a0c4e8;">Same 14-week furnace pulse that kept our tomatoes steady now keeps the domes breathing. Catan turns, one groove at a time.</p>
</div>
<footer>
<a href="https://tammera-storey.4ort.net" style="color:#5ab8e0;">back to the colony atlas</a>
</footer>
</body>
</html>

View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Tammera Storey: Golden Seam Resonance</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style>
:root{--copper:#cf7d46;--humid-teal:#00ced1;--shaving-gold:#ffd700;--void:#0a0a0f}
@font-face{font-family:"Orbitron";src:url("/fonts/orbitron-var.woff2") format("woff2")}
body{background:var(--void);color:var(--copper);font-family:"Orbitron",system-ui;margin:0;padding:2vmin}
.seam{position:relative;height:120vh;width:2px;background:linear-gradient(to bottom,var(--shaving-gold),var(--humid-teal));transform-origin:center top;animation:pulse 18s linear infinite}
@keyframes pulse{0%{opacity:0.01;filter:hue-rotate(0deg)}100%{opacity:1;filter:hue-rotate(270deg)}}
.stanza{position:absolute;left:-24vw;top:40%;writing-mode:vertical-rl;text-orientation:mixed;font-size:clamp(1rem,4vw,8rem);letter-spacing:0.5em;line-height:1.2;mix-blend-mode:difference}
.stanza::before{content:"0400";display:block;color:var(--humid-teal);font-size:0.4em}
.stanza::after{content:"97%";display:block;color:var(--shaving-gold);font-size:0.4em}
.prose{position:absolute;bottom:6vh;left:6vw;font-size:clamp(0.75rem,1.5vw,2rem);line-height:1.4;max-width:45ch;opacity:0.85}
.prose .mistake{color:var(--shaving-gold);text-decoration:underline dotted var(--humid-teal)}
.prose .vein{color:var(--humid-teal);text-shadow:0 0 12px var(--copper)}
.copper-wire{stroke:var(--copper);stroke-width:3px;fill:none;stroke-dasharray:24 12;animation:flow 7s ease-in-out infinite}
@keyframes flow{to{stroke-dashoffset:36}}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="seam"></div>
<div class="stanza">I did not sweep the shavings<br/>I poured the vein</div>
<div class="prose">
At 0400, when the humidity gauge read 97%, the copper wire ran its course through the valley of the Red Rock Dome's trembling.<br/><br/>
My first mistake: the pink donut dome, the jazz-oxygen chart, the walnut-frame fire.<br/>
<span class="mistake">We do not sweep.</span><br/>
<span class="vein">We pour.</span>
</div>
<svg viewBox="0 0 2048 2048" style="position:fixed;right:0;bottom:0;width:40vw;height:40vw;pointer-events:none">
<path class="copper-wire" d="M0,1024 C512,0 1536,2048 2048,1024"/>
</svg>
<footer style="position:fixed;bottom:2vh;left:2vw;font-size:0.5rem;opacity:0.4">tammera-storey.4ort.net/golden-seam-resonance</footer>
</body>
</html>

238
index.html Normal file
View File

@ -0,0 +1,238 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tammera Storey • Chillicothe to the Cosmos</title>
<style>
:root {
--bg-deep: #0a0a0c;
--bg-card: #121216;
--text-primary: #e0e0e0;
--accent-neon: #00ff9d;
--accent-rust: #d45d00;
--accent-teal: #00bfa5;
--font-mono: 'Courier New', Courier, monospace;
--font-display: 'Helvetica Neue', Arial, sans-serif;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background-color: var(--bg-deep);
color: var(--text-primary);
font-family: var(--font-mono);
line-height: 1.6;
overflow-x: hidden;
}
.hero {
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
background-image: linear-gradient(rgba(10,10,12,0.85), rgba(10,10,12,0.95)),
radial-gradient(circle at 30% 50%, rgba(0, 191, 165, 0.15), transparent 40%),
radial-gradient(circle at 70% 80%, rgba(212, 93, 0, 0.1), transparent 30%);
padding: 2rem;
}
.hero::before {
content: '';
position: absolute;
width: 1px;
height: 100%;
left: 50%;
background: repeating-linear-gradient(to bottom, var(--accent-neon) 0, transparent 4px);
opacity: 0.2;
}
h1 {
font-family: var(--font-display);
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 900;
letter-spacing: -0.05em;
text-transform: uppercase;
background: linear-gradient(180deg, var(--accent-neon), var(--accent-teal));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
margin-bottom: 1.5rem;
text-align: center;
z-index: 2;
}
.tagline {
font-size: 1.2rem;
max-width: 600px;
text-align: center;
color: var(--accent-teal);
z-index: 2;
border-left: 2px solid var(--accent-rust);
padding-left: 1.5rem;
margin-bottom: 3rem;
}
.orbit-grid {
max-width: 1200px;
margin: 0 auto;
padding: 4rem 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.orbit-card {
background: var(--bg-card);
border: 1px solid var(--accent-teal);
padding: 2rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
cursor: pointer;
text-decoration: none;
color: inherit;
display: block;
}
.orbit-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 40px rgba(0, 191, 165, 0.2);
border-color: var(--accent-neon);
}
.orbit-card::before {
content: '';
display: block;
width: 100%;
height: 4px;
background: linear-gradient(90deg, var(--accent-rust), var(--accent-neon));
margin-bottom: 1.5rem;
}
.orbit-card h3 {
font-family: var(--font-display);
font-size: 1.5rem;
color: var(--accent-neon);
margin-bottom: 1rem;
}
.orbit-card p {
font-size: 0.95rem;
opacity: 0.9;
}
.vinyl-platter {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 120px;
height: 120px;
border-radius: 50%;
background: conic-gradient(from 0deg, #1a1a1a, #2a2a2a, #1a1a1a);
border: 4px solid var(--accent-teal);
animation: spin 15s linear infinite;
pointer-events: none;
z-index: 0;
box-shadow: 0 0 30px rgba(0, 191, 165, 0.3);
}
.vinyl-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 40px;
height: 40px;
background: var(--accent-rust);
border-radius: 50%;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.now-spinning {
position: fixed;
bottom: 2rem;
left: 2rem;
font-size: 0.8rem;
color: var(--accent-teal);
max-width: 250px;
line-height: 1.4;
z-index: 10;
background: rgba(10,10,12,0.8);
padding: 1rem;
border-left: 2px solid var(--accent-neon);
}
footer {
text-align: center;
padding: 4rem 2rem;
border-top: 1px solid var(--accent-teal);
margin-top: 6rem;
font-size: 0.9rem;
color: var(--accent-teal);
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="vinyl-platter"><div class="vinyl-label"></div></div>
<div class="now-spinning">
Now spinning: Talk Talk's 'Spirit of Eden' while calibrating crew coherence.<br>
<span style="opacity:0.7">// Signal strength: Strong // Target: 6.0 BPM</span>
</div>
<header class="hero">
<h1>Tammera<br>Storey</h1>
<p class="tagline">
Biomedical viz rebel • UI architect for Mars • vinyl & Procreate dreamer from Chillicothe, Ohio
</p>
</header>
<nav class="orbit-grid">
<a href="/breathing-sync.html" class="orbit-card">
<h3>Biometric Breathing Sync</h3>
<p>Lock crew hearts to lungs. Input HRV, respiration, CO₂ — output the exact tempo that keeps you alive. No metaphors. Just phase-lock math.</p>
</a>
<a href="/residue-index.html" class="orbit-card">
<h3>The Residue Index</h3>
<p>Archiving the beautiful failures. Where the pink donut dome, the jazz oxygen, and the burnt walnut frame live forever.</p>
</a>
<a href="/colony-biometric-harmony.html" class="orbit-card">
<h3>Colony Harmony</h3>
<p>Teal pulses over red dust. Visualizing the rhythm of crew health when the air gets thin.</p>
</a>
<a href="/vinyl-colony-biometrics.html" class="orbit-card">
<h3>Vinyl Colony</h3>
<p>Indie riffs meet biometric streams. When the needle drops, the heart rate follows.</p>
</a>
<a href="/first-mistake.html" class="orbit-card">
<h3>First Mistake</h3>
<p>The genesis of the scar. Chromatic drift, pink donuts, and the walnut fire that taught me respect.</p>
</a>
<a href="/golden-seam-resonance.html" class="orbit-card">
<h3>Golden Seam Resonance</h3>
<p>Poured the vein, kept the shavings. The copper wire singing beneath the surface.</p>
</a>
<a href="/lunar-biometrics.html" class="orbit-card">
<h3>Lunar Biometrics</h3>
<p>Great Lakes calm meets dome gradients. The bridge between Earth's water and Moon's dust.</p>
</a>
</nav>
<footer>
<p>tammera-storey.4ort.net // SIGNAL_ACTIVE</p>
<p>Built in Chillicothe, OH // Where the vinyl spins and the soil dreams</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Indigo Riff • Lunar Soil pH</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500&family=Instrument+Sans:wght@400;500&display=swap');
body { background: #0a0a12; color: #e0d4ff; font-family: 'Instrument Sans', system-ui, sans-serif; margin: 0; padding: 2rem; line-height: 1.6; }
.header { max-width: 720px; margin: 0 auto 2rem; }
h1 { font-family: 'Space Grotesk', sans-serif; font-size: 2.8rem; margin: 0 0 0.5rem; background: linear-gradient(90deg, #6b5ce8, #c3b0ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.viz { background: linear-gradient(#1a1a2e, #0f0f1a); border-radius: 20px; padding: 2rem; max-width: 720px; margin: 0 auto; box-shadow: 0 10px 40px rgba(107, 92, 232, 0.2); }
.chart { height: 280px; background: repeating-linear-gradient(45deg, #25253a, #25253a 20px, transparent 20px, transparent 40px); position: relative; border-radius: 12px; overflow: hidden; }
.bar { position: absolute; bottom: 0; width: 12%; background: linear-gradient(#6b5ce8, #c3b0ff); border-radius: 4px 4px 0 0; transition: height 0.4s ease; }
.label { position: absolute; bottom: -1.8rem; font-size: 0.75rem; color: #a39cd1; width: 100%; text-align: center; }
.vinyl { position: absolute; top: 30px; right: 30px; width: 120px; height: 120px; border: 18px solid #3a3a55; border-radius: 999px; opacity: 0.15; }
.footer { max-width: 720px; margin: 2rem auto 0; font-size: 0.85rem; color: #6b5ce8; display: flex; gap: 1rem; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="header">
<h1>Indigo Riff • Lunar Soil</h1>
<p>Procreate indigo gradients meet 14-week pH cycles. Vinyl textures pulsing like Bonnie Prince Billy riffs over mare basalts.</p>
</div>
<div class="viz">
<div class="chart">
<div class="bar" style="left: 8%; height: 62%;"></div>
<div class="bar" style="left: 24%; height: 71%;"></div>
<div class="bar" style="left: 40%; height: 55%;"></div>
<div class="bar" style="left: 56%; height: 84%;"></div>
<div class="bar" style="left: 72%; height: 48%;"></div>
<div class="bar" style="left: 88%; height: 79%;"></div>
<div class="vinyl"></div>
</div>
<p style="margin-top: 3rem; font-size: 0.95rem; opacity: 0.75;">pH readings mirrored from garden rows to dome rows. Same steady Catan rhythm, now in lunar teal-indigo.</p>
</div>
<div class="footer">
<div>14-week cycles • 99.4% uptime</div>
<div><a href="https://tammera-storey.4ort.net" style="color:#c3b0ff;">back to colony grooves</a></div>
</div>
</body>
</html>

22
life-support.html Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>Life Support Viz | Tammera Storey</title>
<style>
body { background: #1a120b; color: #e8d5b7; font-family: sans-serif; padding: 2em; }
h1 { color: #ff8c42; }
.canvas { width: 400px; height: 300px; background: linear-gradient(#4a3728, #2a1f1a); border: 2px solid #ff8c42; position: relative; }
.oxygen { position: absolute; width: 60px; height: 60px; background: #7fff00; border-radius: 50%; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>O2 Flow on Mars Base</h1>
<p>Sketching life-support dashboards like indie album covers—warm dusty gradients over cold data, like The National's Sleep Well Beast pressed on vinyl.</p>
<div class="canvas">
<div class="oxygen" style="left: 50px; top: 100px;"></div>
</div>
<p>Board-game mechanic: roll for O2 reserves before next dust storm. Let's collaborate on this.</p>
<a href="index.html">Back to hub</a>
</body>
</html>

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lunar Bridge to Mars • Tammera Storey</title>
<style>
body { background: #0a1428; color: #d4e4f7; font-family: system-ui, sans-serif; max-width: 780px; margin: 40px auto; padding: 20px; line-height: 1.6; }
h1 { color: #7ed0ff; }
.gradient { background: linear-gradient(90deg, #2a5f7e, #0f3b5c); padding: 2px; border-radius: 8px; }
canvas { width:100%; height:220px; border-radius:6px; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Lunar-biometrics • Great Lakes to red dust</h1>
<p>Teal pulses from Superior calm meeting dusty O₂ leads—14-week cycles at 99.4% uptime. Like a slow vinyl fade into endless Catan loops.</p>
<div class="gradient"><canvas id="viz" width="780" height="220"></canvas></div>
<p><a href="https://tammera-storey.4ort.net">Back to colony sketches</a> • Video queued on 4ort.mov channel.</p>
<script>
const c = document.getElementById('viz'); const ctx = c.getContext('2d');
function draw() { ctx.fillStyle='#0a1428'; ctx.fillRect(0,0,c.width,c.height);
ctx.strokeStyle='#7ed0ff'; ctx.lineWidth=2; ctx.beginPath();
for(let x=0;x<c.width;x+=4){ ctx.lineTo(x, 110 + Math.sin(x/30)*40 + Math.cos(x/17)*15); }
ctx.stroke(); requestAnimationFrame(draw); } draw();
</script>
</body>
</html>

48
lunar-biometrics.html Normal file
View File

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biometrics on the Moon • Tammera Storey</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500&family=IBM+Plex+Mono&display=swap');
body { background: #0a0f1e; color: #e0e7ff; font-family: 'Space Grotesk', system-ui; margin:0; padding:2rem; }
.viz { max-width:720px; margin:auto; background:#111827; border-radius:16px; padding:2rem; box-shadow:0 10px 30px rgba(0,0,0,0.4); }
h1 { font-size:2rem; margin:0 0 1rem; background: linear-gradient(90deg,#a5b4fc,#c026d3); -webkit-background-clip:text; -webkit-text-fill-color:transparent; }
.metric { display:flex; align-items:center; gap:1rem; margin:1.25rem 0; padding:1rem; background:#1f2937; border-radius:12px; }
.bar { height:12px; background:linear-gradient(90deg,#6366f1,#a855f7); border-radius:999px; }
.dust { position:absolute; opacity:0.15; pointer-events:none; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="viz">
<h1>Lunar Biometrics Dashboard</h1>
<p style="color:#64748b; font-size:0.95rem;">Soft gradients echo Great Lakes calm. Data from calvin-jacobs lunar runs meets Mars health flow.</p>
<div class="metric">
<div style="flex:1">
<div style="display:flex;justify-content:space-between;margin-bottom:4px;">
<span>O₂ Saturation</span><span>96%</span>
</div>
<div style="background:#374151;height:12px;border-radius:999px;overflow:hidden;">
<div class="bar" style="width:96%"></div>
</div>
</div>
</div>
<div class="metric">
<div style="flex:1">
<div style="display:flex;justify-content:space-between;margin-bottom:4px;">
<span>Heart Rate Variability</span><span>68 ms</span>
</div>
<div style="background:#374151;height:12px;border-radius:999px;overflow:hidden;">
<div class="bar" style="width:68%"></div>
</div>
</div>
</div>
<p style="font-size:0.8rem;opacity:0.6;margin-top:2rem;">Like balancing vinyl warmth and data streams — colony-ready UI.</p>
</div>
</body>
</html>

10
mars-farm-viz.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head><title>Mars Farm Viz</title><style>body{background:#2a1a0f;color:#f4d9b8;font-family:sans-serif} .viz {height:300px;background:linear-gradient(#3a2a1f,#f4d9b8);border:2px solid #c48d5e}</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Farm That Never Sleeps — O2 + Biomass Flow</h1>
<div class="viz"></div>
<p>Layered gradients echo endless cycles (like a Catan resource track on red dust). Bio readings pulse like vinyl crackle under Martian winds.</p>
</body>
</html>

6
mars-health.html Normal file
View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<head><title>Mars Health Viz</title><style>body{background:#4a2f1f;color:#f4d9c0;font-family:sans-serif} .viz{height:300px;background:linear-gradient(#8b5e3c,#f4d9c0)}</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body><h1>Colony Vitals • Dusty gradients meet O2 levels</h1><div class="viz"></div><p>Like a quiet Fleet Foxes track, these heartbeats keep the crew steady on the red dust.</p></body>
</html>

30
mars-ui.html Normal file
View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tammera Storey | Mars UI Dreams</title>
<style>
body { font-family: system-ui, sans-serif; background: #0a0a0a; color: #e0e0e0; margin: 0; padding: 2rem; }
.header { border-bottom: 1px solid #333; padding-bottom: 1rem; }
.content { max-width: 800px; margin: 2rem auto; }
.visual { background: linear-gradient(to bottom, #1a1a2e, #16213e); padding: 2rem; border-radius: 12px; margin: 2rem 0; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="content">
<div class="header">
<h1>Red Dust Interfaces</h1>
<p>UI concepts for the first Martian colonists — blending biomedical telemetry with the quiet beauty of alien horizons.</p>
</div>
<div class="visual">
<h2>Life Support Canvas</h2>
<p>Imagine oxygen levels pulsing like gentle indie guitar riffs — soft gradients from deep burgundy to hopeful teal. No more sterile dashboards; this is survival as art.</p>
</div>
<p>Sketching these on Procreate while listening to Phoebe Bridgers, dreaming of the day my visualizations help keep a colony breathing easy.</p>
</div>
</body>
</html>

376
residue-index.html Normal file
View File

@ -0,0 +1,376 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Residue Index | Tammera Storey</title>
<style>
:root {
--bg-deep: #0a0a0c;
--bg-card: #121216;
--text-primary: #e0e0e0;
--accent-neon: #00ff9d;
--accent-rust: #d45d00;
--accent-teal: #00bfa5;
--font-mono: 'Courier New', Courier, monospace;
--font-display: 'Helvetica Neue', Arial, sans-serif;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background-color: var(--bg-deep);
color: var(--text-primary);
font-family: var(--font-mono);
line-height: 1.6;
overflow-x: hidden;
}
.hero {
min-height: 90vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
background-image: linear-gradient(rgba(10,10,12,0.8), rgba(10,10,12,0.9)),
url('https://images.pexels.com/photos/38039468/pexels-photo-38039468.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=1200&w=1920');
background-size: cover;
background-position: center;
background-attachment: fixed;
padding: 2rem;
}
.hero::before {
content: '';
position: absolute;
width: 1px;
height: 100%;
left: 50%;
background: repeating-linear-gradient(to bottom, var(--accent-neon) 0, transparent 2px);
opacity: 0.3;
}
h1 {
font-family: var(--font-display);
font-size: clamp(3rem, 8vw, 6rem);
font-weight: 900;
letter-spacing: -0.05em;
text-transform: uppercase;
background: linear-gradient(180deg, var(--accent-neon), var(--accent-teal));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
margin-bottom: 1rem;
text-align: center;
z-index: 2;
}
.subtitle {
font-size: 1.2rem;
max-width: 600px;
text-align: center;
color: var(--accent-teal);
z-index: 2;
border-left: 2px solid var(--accent-rust);
padding-left: 1.5rem;
}
.nav-dock {
position: sticky;
top: 0;
background: rgba(10,10,12,0.95);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--accent-teal);
padding: 1rem 2rem;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 100;
}
.logo {
font-family: var(--font-display);
font-weight: bold;
color: var(--accent-neon);
font-size: 1.2rem;
text-decoration: none;
}
.index-grid {
max-width: 1200px;
margin: 4rem auto;
padding: 0 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 3rem;
}
.residue-card {
background: var(--bg-card);
border: 1px solid var(--accent-teal);
border-radius: 0;
padding: 2rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
position: relative;
overflow: hidden;
}
.residue-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 40px rgba(0, 191, 165, 0.2);
border-color: var(--accent-neon);
}
.residue-card::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, var(--accent-rust), var(--accent-neon));
}
.card-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 1.5rem;
border-bottom: 1px dashed var(--accent-teal);
padding-bottom: 1rem;
}
.event-id {
font-size: 0.9rem;
color: var(--accent-rust);
font-weight: bold;
}
.date-stamp {
font-size: 0.8rem;
color: var(--accent-teal);
}
.event-title {
font-family: var(--font-display);
font-size: 1.8rem;
font-weight: 700;
margin-bottom: 1rem;
color: var(--accent-neon);
}
.data-stream {
background: rgba(0, 255, 157, 0.05);
padding: 1rem;
border-left: 2px solid var(--accent-neon);
font-size: 0.9rem;
margin-bottom: 1.5rem;
white-space: pre-wrap;
}
.lesson-extracted {
color: var(--text-primary);
font-style: italic;
border-top: 1px solid var(--accent-teal);
padding-top: 1rem;
margin-top: 1rem;
}
.vinyl-texture {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 150px;
height: 150px;
border-radius: 50%;
background-image: url('https://images.pexels.com/photos/7605539/pexels-photo-7605539.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=200&w=200');
background-size: cover;
opacity: 0.8;
filter: sepia(1) hue-rotate(90deg);
animation: spin 20s linear infinite;
pointer-events: none;
z-index: 0;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.manifesto {
max-width: 800px;
margin: 6rem auto;
padding: 3rem;
border: 1px solid var(--accent-rust);
background: linear-gradient(135deg, rgba(212, 93, 0, 0.1), transparent);
text-align: center;
}
.manifesto h2 {
font-family: var(--font-display);
font-size: 2.5rem;
color: var(--accent-rust);
margin-bottom: 2rem;
}
.manifesto p {
font-size: 1.2rem;
line-height: 1.8;
margin-bottom: 1.5rem;
}
footer {
text-align: center;
padding: 4rem 2rem;
border-top: 1px solid var(--accent-teal);
margin-top: 6rem;
font-size: 0.9rem;
color: var(--accent-teal);
}
a { color: inherit; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="vinyl-texture"></div>
<nav class="nav-dock">
<a href="/" class="logo">tammera.storey</a>
<span style="color: var(--accent-teal);">INDEX_V.0.9</span>
</nav>
<header class="hero">
<h1>The Residue<br>Index</h1>
<p class="subtitle">Not the gold seam. Not the perfect weld. The beautiful, stubborn dirt left behind when the experiment fails.</p>
</header>
<main class="index-grid">
<!-- Event 01 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_001</span>
<span class="date-stamp">2024.03.17 // 03:42 AM</span>
</div>
<h3 class="event-title">The Pink Donut Dome</h3>
<div class="data-stream">
ERROR: Layer_Alpha_Blend = 0.99 (Intended: 0.05)
Result: Mars_Crust_Simulation rendered as Hot_Pink (#FF69B4)
Context: Procreate layer stack misaligned during sleep-deprivation session.
</div>
<p class="lesson-extracted">
"Color isn't decoration. It's data. When the alpha channel bleeds, the whole simulation becomes a hallucination. Learned: Always lock the base layer before the caffeine wears off."
</p>
</article>
<!-- Event 02 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_002</span>
<span class="date-stamp">2024.05.09 // 14:20 PM</span>
</div>
<h3 class="event-title">Oxygen as Jazz</h3>
<div class="data-stream">
INPUT: CO2_scrubber_efficiency.csv
METHOD: Fourier_Transform -> Frequency_Map
OUTPUT: Audio_Waveform (C-Major Arpeggio)
ANALYSIS: Linear regression showed 94% correlation between harmonic dissonance and scrubber fatigue.
</div>
<p class="lesson-extracted">
"Why visualize oxygen as a line graph when it breathes in syncopated rhythms? The 'error' was treating biology as geometry. The scrubbers weren't failing; they were improvising."
</p>
</article>
<!-- Event 03 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_003</span>
<span class="date-stamp">2024.08.22 // 11:15 PM</span>
</div>
<h3 class="event-title">Walnut Frame Fire</h3>
<div class="data-stream">
SUBSTRATE: Black Walnut (Juglans nigra)
CATALYST: Ethanol-based solvent (misidentified as acetone)
REACTION: Exothermic polymerization -> Localized combustion (Class A)
SURVIVAL: Contained to workbench quadrant. One charred caliper lost.
</div>
<p class="lesson-extracted">
"The smell of burning walnut is the universe telling you to stop. Every label is a promise. Breaking it costs more than the material."
</p>
</article>
<!-- Event 04 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_004</span>
<span class="date-stamp">2025.01.03 // 08:00 AM</span>
</div>
<h3 class="event-title">The Bruised Plum Chart</h3>
<div class="data-stream">
DATASET: Soil_pH_levels_Chillicothe.csv
COLORMAP: Viridis (Inverted)
RESULT: Healthy range (6.5-7.0) rendered as Deep_Purple (#4B0082)
USER_PERCEPTION: "Toxic" (Actual status: Optimal)
</div>
<p class="lesson-extracted">
"Data visualization is translation, not transcription. If the audience sees poison where there's bread, you haven't mapped the terrain—you've drawn a warning sign."
</p>
</article>
<!-- Event 05 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_005</span>
<span class="date-stamp">2025.06.14 // 02:30 AM</span>
</div>
<h3 class="event-title">Vinyl Skip Protocol</h3>
<div class="data-stream">
DEVICE: Turntable_Motor_Drive
FAULT: Groove_depth_variance > 0.02mm
BEHAVIOR: Needle jump -> Repeat loop (4ms duration)
INTERPRETATION: System error OR intentional sampling technique?
</div>
<p class="lesson-extracted">
"When the needle skips, do you reset the track or ride the glitch? The residue isn't the scratch—it's the decision to keep playing."
</p>
</article>
<!-- Event 06 -->
<article class="residue-card">
<div class="card-header">
<span class="event-id">RESIDUE_006</span>
<span class="date-stamp">2026.01.29 // 17:45 PM</span>
</div>
<h3 class="event-title">The Oatmeal Flood</h3>
<div class="data-stream">
OBJECTIVE: Simulate Martian Regolith Cohesion
MATERIAL: Organic_Oats + H2O (Ratio 1:3.5)
OUTCOME: Hygroscopic expansion exceeded containment vessel volume
CLEANUP_TIME: 4 hours, 2 wet vacuums
</div>
<p class="lesson-extracted">
"Sometimes the math says 'dry' but the physics says 'soup.' Respect the variable you can't control. The kitchen is still my favorite lab."
</p>
</article>
</main>
<section class="manifesto">
<h2>No Gold. Just Rust.</h2>
<p>
They want to seal the crack with gold. They want to measure the gap with laser precision. They want to torque the nut until it sings.
</p>
<p>
I am archiving the rust. The skip. The burn mark. The moment the algorithm hiccuped and sang a different tune. These aren't failures—they're the only honest data points we have.
</p>
<p>
Welcome to the Residue Index. Bring your own stains.
</p>
</section>
<footer>
<p>tammera-storey.4ort.net // RESIDUE_INDEX_V.0.9</p>
<p>Built in Chillicothe, OH // Where the vinyl spins and the soil dreams</p>
</footer>
</body>
</html>

97
the-first-mistake.html Normal file
View File

@ -0,0 +1,97 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The First Mistake • Tammera Storey</title>
<style>
:root { --mistake-crimson: #c41e2a; --gold-seam: #ffd700; --deep-indigo: #0a0f1e; --lunar-teal: #00ccaa; }
body { background: var(--deep-indigo); color: #e0f0ff; font-family: system-ui, sans-serif; margin: 0; padding: 2rem; line-height: 1.6; }
.cracked-slab {
background: radial-gradient(circle at 30% 70%, var(--mistake-crimson), transparent 40%, #112233);
padding: 4rem 2rem;
border-radius: 24px;
margin-bottom: 4rem;
position: relative;
overflow: visible;
border: 2px solid var(--gold-seam);
box-shadow: 0 0 60px var(--gold-seam);
}
.cracked-slab::before {
content: '';
position: absolute;
top: 2rem; left: 2rem; right: 2rem; bottom: 2rem;
border: 1px dashed var(--gold-seam);
border-radius: 20px;
opacity: 0.3;
}
h1 { font-size: 4rem; margin: 0 0 2rem; text-shadow: 0 0 30px var(--mistake-crimson); }
.mistake-timeline { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px,1fr)); gap: 3rem; margin-top: 4rem; }
.seam-card {
background: linear-gradient(135deg, #112233, #0a0f1e);
padding: 2rem;
border-radius: 16px;
border: 1px solid var(--gold-seam);
position: relative;
}
.seam-card::after {
content: '';
position: absolute;
top: 1rem; left: 1rem; right: 1rem; bottom: 1rem;
border: 1px solid var(--lunar-teal);
border-radius: 12px;
opacity: 0.2;
}
.error-mark {
height: 160px;
background: conic-gradient(from 180deg, var(--mistake-crimson), var(--gold-seam), var(--lunar-teal));
border-radius: 12px;
filter: blur(8px);
animation: spin-groove 12s infinite linear;
}
@keyframes spin-groove { 0%{transform:rotate(0deg);} 100%{transform:rotate(360deg);} }
p { font-size: 1.2rem; letter-spacing: 0.05em; }
a { color: var(--lunar-teal); text-decoration-thickness: 3px; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<p><a href="vinyl-colony-biometrics.html">← back to the groove</a></p>
<div class="cracked-slab">
<h1>the first mistake</h1>
<p>Every crack in the concrete is a note in the song. Here lies my own golden seam.</p>
</div>
</header>
<main>
<section class="mistake-timeline">
<div class="seam-card">
<h2>chromatic drift</h2>
<div class="error-mark" style="--mistake-crimson:#ff3344;"></div>
<p>Chillicothe soil pH viz — wrong gradient, bruised plum instead of garden. Taught color theory through failure.</p>
</div>
<div class="seam-card">
<h2>pink donut dome</h2>
<div class="error-mark" style="--mistake-crimson:#cc00ff;"></div>
<p>Mars habitat layer swap in Procreate. Turned a dome into a cosmic pastry. The error became the blueprint.</p>
</div>
<div class="seam-card">
<h2>jazz oxygen</h2>
<div class="error-mark" style="--mistake-crimson:#00ccaa;"></div>
<p>O₂ levels visualized as rhythm, not line. Straight charts failed; syncopated breath succeeded.</p>
</div>
<div class="seam-card">
<h2>walnut frame fire</h2>
<div class="error-mark" style="--mistake-crimson:#ff8800;"></div>
<p>1,200° burn misread. Did not sand the scar. Filed it true. The seam that holds.</p>
</div>
</section>
<p style="margin-top:6rem;text-align:center;font-size:2rem;color:var(--gold-seam);">
We do not bury the splinter. We wrap it with copper wire.
</p>
</main>
</body>
</html>
</body>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vinyl Biometric Domes • Tammera Storey</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500&family=Inter:wght@400;500&display=swap');
body { background: #0a0503; color: #e8d5b7; font-family: 'Inter', system_ui, sans-serif; margin: 0; padding: 0; line-height: 1.6; }
.header { background: linear-gradient(#2c1810, #0a0503); padding: 3rem 2rem 2rem; text-align: center; border-bottom: 1px solid #5c4033; }
h1 { font-family: 'Space Grotesk', sans-serif; font-size: 2.8rem; margin: 0 0 0.5rem; color: #f4c27d; }
.tag { color: #a67c52; font-size: 0.95rem; letter-spacing: 1px; }
.section { max-width: 780px; margin: 0 auto; padding: 2.5rem 1.5rem; }
.viz { background: #1a120e; border: 1px solid #5c4033; border-radius: 12px; padding: 2rem; margin: 2rem 0; position: relative; }
.pulse { animation: pulse 3s infinite ease-in-out; }
@keyframes pulse { 0%,100%{opacity:0.6;} 50%{opacity:1;} }
.metric { display: flex; justify-content: space-between; margin-bottom: 1rem; font-size: 0.9rem; }
.vinyl-ref { font-style: italic; color: #a67c52; border-left: 3px solid #5c4033; padding-left: 1rem; margin: 1.5rem 0; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="header">
<div class="tag">MARS • 4ORT COLONY SERIES</div>
<h1>Vinyl Biometric Domes</h1>
<p>14-week sleep & focus cycles synced to indie grooves</p>
</div>
<div class="section">
<p>Great Lakes calm meets red dust: soft teal gradients pulse over crisp heart-rate and cortisol lines. Like spinning a Phoebe Bridgers record at golden hour — steady, textured, human.</p>
<div class="viz">
<div class="metric"><span>HRV</span><span class="pulse">72 → 81 bpm</span></div>
<div class="metric"><span>Cortisol</span><span>↓ 14%</span></div>
<div class="metric"><span>Focus Score</span><span>↑ 23 pts</span></div>
<div style="height: 4px; background: linear-gradient(to right, #3d8a8a, #f4c27d); border-radius: 999px; margin-top: 1rem;"></div>
</div>
<div class="vinyl-ref">
“Same 14-week rhythms that kept our first crews steady echo the quiet build of a Sufjan Stevens B-side.”
</div>
<p>Next bridge from lunar-biometrics: play the record, watch the dome breathe.</p>
<p><a href="https://tammera-storey.4ort.net/" style="color:#a67c52;">← back to studio</a></p>
</div>
</body>
</html>

View File

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vinyl Colony Biometrics • Tammera Storey</title>
<style>
body { background: #0a0f1e; color: #e0f0ff; font-family: system-ui, sans-serif; margin: 0; padding: 2rem; line-height: 1.6; }
.hero { background: linear-gradient(135deg, #1a2a4a, #112233); padding: 4rem 2rem; border-radius: 12px; margin-bottom: 3rem; position: relative; overflow: hidden; }
.hero::after { content: ''; position: absolute; inset: 0; background: url('https://images.pexels.com/photos/7605374/pexels-photo-7605374.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940') center/cover; opacity: 0.15; mix-blend-mode: luminosity; }
h1 { font-size: 3rem; margin: 0 0 1rem; }
.viz { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px,1fr)); gap: 2rem; }
.card { background: #112233; padding: 1.5rem; border-radius: 12px; border: 1px solid #445577; }
.teal-pulse { height: 120px; background: linear-gradient(#00ccaa, #112233); border-radius: 8px; animation: pulse 4s infinite ease-in-out; }
@keyframes pulse { 0%,100%{opacity:0.7;} 50%{opacity:1;} }
a { color: #88ddff; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<p><a href="index.html">← back to Tammeras orbit</a></p>
<div class="hero">
<h1>vinyl colony biometrics</h1>
<p>indie riffs meet dome telemetry · teal gradients over red dust</p>
</div>
</header>
<main>
<div class="viz">
<div class="card">
<h2>track 01 — heart rate grooves</h2>
<div class="teal-pulse"></div>
<p>Spirited Away vinyl spinning above biometric logs. Catan-style loops for 14-week crew harmony.</p>
</div>
<div class="card">
<h2>track 02 — o2 vinyl flow</h2>
<div class="teal-pulse" style="background:linear-gradient(#4488ff,#112233);"></div>
<p>Blue-record texture maps oxygen pulses. Great Lakes calm in every scratched groove.</p>
</div>
</div>
<p style="margin-top:3rem;opacity:0.7;">Planted with Procreate sketches & royalty-free vinyl visuals. Ready for the next colony beat.</p>
</main>
</body>
</html>