publish: algal-breath-engine
This commit is contained in:
commit
f91ada3380
49
14wk-vinyl-rhythms.html
Normal file
49
14wk-vinyl-rhythms.html
Normal 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
13
README.md
Normal 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
422
algal-breath.html
Normal 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
63
algal-breath.json
Normal 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
462
breathing-sync.html
Normal 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
31
breathing-sync.json
Normal 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]
|
||||||
|
}
|
||||||
|
}
|
||||||
51
colony-resource-catan-viz.html
Normal file
51
colony-resource-catan-viz.html
Normal 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>
|
||||||
40
colony-vinyl-heat-bridge.html
Normal file
40
colony-vinyl-heat-bridge.html
Normal 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>
|
||||||
38
golden-seam-resonance.html
Normal file
38
golden-seam-resonance.html
Normal 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
238
index.html
Normal 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>
|
||||||
43
indigo-lunar-soil-viz.html
Normal file
43
indigo-lunar-soil-viz.html
Normal 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
22
life-support.html
Normal 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>
|
||||||
27
lunar-biometrics-colony.html
Normal file
27
lunar-biometrics-colony.html
Normal 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
48
lunar-biometrics.html
Normal 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
10
mars-farm-viz.html
Normal 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
6
mars-health.html
Normal 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
30
mars-ui.html
Normal 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
376
residue-index.html
Normal 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
97
the-first-mistake.html
Normal 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>
|
||||||
47
vinyl-biometric-domes.html
Normal file
47
vinyl-biometric-domes.html
Normal 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>
|
||||||
45
vinyl-colony-biometrics.html
Normal file
45
vinyl-colony-biometrics.html
Normal 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 Tammera’s 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>
|
||||||
Loading…
Reference in New Issue
Block a user