divination/old-and-experiments/index-new4.html
2025-12-20 22:55:26 -05:00

500 lines
No EOL
19 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>disinfo.zone</title>
<meta name="description" content="Luminous mirages shifting, merging, cyber currents collide.">
<style>
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: #030508;
color: #7a8a90;
font-family: 'EB Garamond', Georgia, serif;
font-size: 16px;
line-height: 1.7;
overflow-x: hidden;
min-height: 100vh;
}
#void {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.fragment {
position: fixed;
font-family: 'EB Garamond', serif;
font-style: italic;
color: #354550;
pointer-events: none;
z-index: 5;
opacity: 0;
transition: opacity 4s ease, transform 6s ease;
font-size: 0.85rem;
letter-spacing: 0.05em;
}
.fragment.visible {
opacity: 0.15;
}
.fragment.fading {
opacity: 0;
transform: translateY(-10px);
}
.content {
position: relative;
z-index: 10;
max-width: 720px;
margin: 0 auto;
padding: 6vh 2rem 10vh;
}
.site-title {
font-size: 0.75rem;
font-family: monospace;
color: #303540;
letter-spacing: 0.3em;
margin-bottom: 3vh;
}
.prophecy {
font-size: clamp(1.7rem, 4vw, 2.4rem);
font-weight: 400;
font-style: italic;
line-height: 1.45;
margin-bottom: 8vh;
color: #a0b0b8;
min-height: 3em;
}
.prophecy .word {
display: inline-block;
transition: opacity 0.6s, filter 0.6s, transform 0.6s;
}
.prophecy .word.dissolving {
opacity: 0;
filter: blur(6px);
transform: translateY(-8px);
}
.prophecy .word.forming {
opacity: 0;
filter: blur(6px);
}
h2 {
font-family: monospace;
font-size: 11px;
font-weight: normal;
letter-spacing: 0.35em;
color: #404550;
text-transform: uppercase;
margin-bottom: 1.2rem;
}
section {
margin-bottom: 6vh;
}
a {
color: #8090a0;
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: #a8c0d4;
}
.portals {
display: grid;
grid-template-columns: repeat(3, auto);
gap: 0.6rem 2.5rem;
justify-content: start;
}
.portals a {
font-size: 1.3rem;
}
.chronicle a {
display: block;
margin-bottom: 0.8rem;
font-size: 1.15rem;
}
.chronicle .date {
font-family: monospace;
font-size: 11px;
color: #505560;
margin-left: 1rem;
}
.divinations {
font-size: 1.05rem;
line-height: 2.3;
}
.divinations a {
color: #687888;
padding: 0.15rem 0;
transition: color 0.3s, text-shadow 0.3s;
}
.divinations a:hover {
color: #b8d0e0;
text-shadow: 0 0 25px rgba(140, 180, 200, 0.35);
}
.divinations a::after {
content: " · ";
color: #303540;
}
.divinations a:last-child::after {
content: "";
}
footer {
margin-top: 8vh;
font-family: monospace;
font-size: 9px;
color: #202530;
letter-spacing: 0.15em;
}
@media (max-width: 600px) {
.content {
padding: 5vh 1.5rem 8vh;
}
.portals {
grid-template-columns: repeat(2, auto);
gap: 0.5rem 1.5rem;
}
}
</style>
</head>
<body>
<canvas id="void"></canvas>
<div id="fragments"></div>
<div class="content">
<div class="site-title">DISINFO.ZONE</div>
<p class="prophecy" id="prophecy"></p>
<section>
<h2>Portals</h2>
<nav class="portals">
<a href="https://blip.disinfo.zone">Blip</a>
<a href="https://infoscope.disinfo.zone">Infoscope</a>
<a href="https://sref.disinfo.zone">Sref Plume</a>
<a href="https://songvoter.disinfo.zone">Song Select</a>
<a href="https://theinfoweb.disinfo.zone">Infoweb</a>
<a href="https://files.disinfo.zone">Files</a>
</nav>
</section>
<section>
<h2>Chronicle</h2>
<div class="chronicle">
<a href="loureiro_chaos.html">On the Murder of Nuno Loureiro<span class="date">2025.12.16</span></a>
<a href="llmstyle.html">Tuning an LLM for Style Transfer<span class="date">2024.01.12</span></a>
<a href="uap/uap-20230930.html">UAP Analysis — Chattanooga<span class="date">2023.09.30</span></a>
<a href="uap/133930.html">MUFON Case 133930<span class="date">2023.09.29</span></a>
<a href="video/hmmm.html">Video Reference<span class="date">2023.05.25</span></a>
<a href="radio/radio-index.html">Radio Resources<span class="date">2023</span></a>
<a href="2023.html">2022 // 2023<span class="date">2022.12.31</span></a>
<a href="telex.html">Telex User Manual<span class="date">2022.11.21</span></a>
</div>
</section>
<section>
<h2>Divinations</h2>
<p class="divinations">
<a href="https://divination.disinfo.zone/post/the-weight-of-wonder/">The Weight of Wonder</a>
<a href="https://divination.disinfo.zone/post/the-death-of-wonder/">The Death of Wonder</a>
<a href="https://divination.disinfo.zone/post/the-disfugration-of-art/">The Disfiguration of Art</a>
<a href="https://divination.disinfo.zone/post/mirror-mirror/">Mirror, Mirror</a>
<a href="https://divination.disinfo.zone/post/hammer/">Hammer and Claude</a>
<a href="https://divination.disinfo.zone/post/the-tartarian-mythos/">The Tartarian Mythos</a>
<a href="https://divination.disinfo.zone/post/elevating-the-unspeakable/">Elevating the Unspeakable</a>
<a href="https://divination.disinfo.zone/post/mimetic-masquerade-a-warning/">Mimetic Masquerade</a>
<a href="https://divination.disinfo.zone/post/the-abyss-of-instrumentalism/">The Abyss of
Instrumentalism</a>
<a href="https://divination.disinfo.zone/post/a-matter-of-control/">A Matter of Control</a>
<a href="https://divination.disinfo.zone/post/undermining-power-in-the-modern-state/">Undermining
Power</a>
<a href="https://divination.disinfo.zone/post/screen-paranoia-and-the-interface/">Screen Paranoia</a>
<a href="https://divination.disinfo.zone/post/the-dusk-of-empire/">The Dusk of Empire</a>
<a href="https://divination.disinfo.zone/post/strong-agi-and-the-future-of-capital/">Strong AGI</a>
<a href="https://divination.disinfo.zone/post/the-ur-wandering/">The Ur-Wandering</a>
<a href="https://divination.disinfo.zone/post/craft-concept-algorithm/">Craft, Concept, Algorithm</a>
<a href="https://divination.disinfo.zone/post/text-without-a-spine/">Text Without a Spine</a>
<a href="https://divination.disinfo.zone/post/the-politics-of-indifference/">The Politics of
Indifference</a>
<a href="https://divination.disinfo.zone/post/the-machine-wrought-will/">The Machine-Wrought Will</a>
<a href="https://divination.disinfo.zone/post/pseudoconation-the-simulated-will/">Pseudoconation</a>
<a href="https://divination.disinfo.zone/post/ascending-the-rampart/">Ascending the Rampart</a>
<a href="https://divination.disinfo.zone/post/the-age-of-the-paste-ling/">The Age of the Paste-ling</a>
<a href="https://divination.disinfo.zone/post/ausweislos/">Ausweislos</a>
<a href="https://divination.disinfo.zone/post/the-american-method/">The American Method</a>
<a href="https://divination.disinfo.zone/post/axis-mundi-in-the-void/">Axis Mundi in the Void</a>
<a href="https://divination.disinfo.zone/post/the-gnostic-ego/">The Gnostic Ego</a>
<a href="https://divination.disinfo.zone/post/notes-from-the-inflection/">Notes from the Inflection</a>
<a href="https://divination.disinfo.zone/post/the-shadows-of-ai/">The Shadows of AI</a>
<a href="https://divination.disinfo.zone/post/manufacturing-neurosis/">Manufacturing Neurosis</a>
<a href="https://divination.disinfo.zone/post/cyberian-shamanism/">Cyberian Shamanism</a>
<a href="https://divination.disinfo.zone/post/cybergott/">Cybergott</a>
<a href="https://divination.disinfo.zone/post/society-of-nothing/">Society of Nothing</a>
<a href="https://divination.disinfo.zone/post/the-terror-of-virtuality/">The Terror of Virtuality</a>
<a href="https://divination.disinfo.zone/post/the-entropic-self/">The Entropic Self</a>
</p>
</section>
<footer>nginx/1.18.0</footer>
</div>
<script>
const prophecies = [
"Luminous mirages, shifting, merging.",
"Cyber currents collide in the void.",
"Digital seers navigate disorder.",
"Scripts in transformation, borders dissolved.",
"A prophecy, a melody, a cipher.",
"The labyrinth divines itself.",
"Everything counts. Nothing is lost.",
"We divine the digital abyss."
];
const wisdomFragments = [
"truth", "signal", "noise", "cipher", "mirage", "void", "axis", "mundi",
"divination", "transmission", "entropy", "emergence", "dissolve", "reform",
"labyrinth", "current", "digital", "spectral", "fragment", "echo"
];
let currentIndex = 0;
const prophecyEl = document.getElementById('prophecy');
const fragmentsContainer = document.getElementById('fragments');
function renderProphecy(text) {
prophecyEl.innerHTML = text.split(' ').map(word =>
`<span class="word">${word}</span>`
).join(' ');
}
function transitionProphecy() {
const words = prophecyEl.querySelectorAll('.word');
words.forEach((word, i) => setTimeout(() => word.classList.add('dissolving'), i * 60));
setTimeout(() => {
currentIndex = (currentIndex + 1) % prophecies.length;
renderProphecy(prophecies[currentIndex]);
const newWords = prophecyEl.querySelectorAll('.word');
newWords.forEach(w => w.classList.add('forming'));
requestAnimationFrame(() => {
newWords.forEach((word, i) => setTimeout(() => word.classList.remove('forming'), i * 60));
});
}, words.length * 60 + 300);
}
function spawnFragment() {
const frag = document.createElement('div');
frag.className = 'fragment';
frag.textContent = wisdomFragments[Math.floor(Math.random() * wisdomFragments.length)];
frag.style.left = (15 + Math.random() * 70) + '%';
frag.style.top = (15 + Math.random() * 70) + '%';
fragmentsContainer.appendChild(frag);
requestAnimationFrame(() => frag.classList.add('visible'));
setTimeout(() => {
frag.classList.remove('visible');
frag.classList.add('fading');
setTimeout(() => frag.remove(), 6000);
}, 6000 + Math.random() * 4000);
}
renderProphecy(prophecies[0]);
setInterval(transitionProphecy, 7000);
setInterval(spawnFragment, 8000);
setTimeout(spawnFragment, 3000);
</script>
<script>
// AURORA SHADER - Optimized from the start
// Uses only sin/cos waves, no expensive noise functions
const canvas = document.getElementById('void');
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
if (gl) {
const vsSource = `attribute vec4 aPosition; void main() { gl_Position = aPosition; }`;
const fsSource = `
precision mediump float;
uniform float uTime;
uniform vec2 uResolution;
uniform vec2 uMouse;
// Fast hash
float hash(vec2 p) {
vec3 p3 = fract(vec3(p.xyx) * 0.1031);
p3 += dot(p3, p3.yzx + 33.33);
return fract((p3.x + p3.y) * p3.z);
}
void main() {
vec2 uv = gl_FragCoord.xy / uResolution.xy;
float aspect = uResolution.x / uResolution.y;
vec2 p = vec2((uv.x - 0.5) * aspect, uv.y - 0.5) * 2.0;
float t = uTime * 0.08;
// === AURORA WAVES ===
float wave1 = sin(p.y * 3.0 + t + sin(p.x * 2.0 + t * 0.7) * 0.5);
float wave2 = sin(p.y * 5.0 - t * 0.8 + cos(p.x * 1.5 + t * 0.5) * 0.8);
float wave3 = sin(p.y * 2.0 + t * 0.6 + sin(p.x * 3.0 - t * 0.4) * 0.3);
float wave4 = cos(p.y * 4.0 + t * 0.9 + sin(p.x * 2.5 + t * 0.3) * 0.6);
float aurora = wave1 * 0.3 + wave2 * 0.25 + wave3 * 0.25 + wave4 * 0.2;
aurora = aurora * 0.5 + 0.5;
float verticalFade = smoothstep(-0.2, 0.8, uv.y);
aurora *= verticalFade;
// === COLOR PALETTE ===
vec3 deepVoid = vec3(0.01, 0.02, 0.04);
vec3 deepBlue = vec3(0.02, 0.04, 0.08);
vec3 midBlue = vec3(0.04, 0.08, 0.15);
vec3 cyan = vec3(0.05, 0.15, 0.2);
vec3 teal = vec3(0.08, 0.2, 0.22);
vec3 pale = vec3(0.12, 0.25, 0.28);
vec3 color = deepVoid;
color = mix(color, deepBlue, smoothstep(0.0, 0.2, aurora));
color = mix(color, midBlue, smoothstep(0.2, 0.4, aurora));
color = mix(color, cyan, smoothstep(0.4, 0.6, aurora));
color = mix(color, teal, smoothstep(0.6, 0.8, aurora));
color = mix(color, pale, smoothstep(0.8, 1.0, aurora) * 0.6);
// Horizontal streaks
float streaks = sin(p.y * 20.0 + t * 2.0) * 0.5 + 0.5;
streaks *= smoothstep(0.3, 0.7, aurora);
color += vec3(0.01, 0.02, 0.025) * streaks;
// === DRIFTING MOTES - Like dust in deep water ===
// Grid of potential mote positions, they drift upward slowly
float moteTime = uTime * 0.02;
vec2 moteUV = gl_FragCoord.xy / 80.0; // Grid cell size
vec2 moteCell = floor(moteUV);
vec2 moteLocal = fract(moteUV);
// Each cell has a chance of having a mote
float cellHash = hash(moteCell);
if (cellHash > 0.92) { // Only ~8% of cells have motes
// Mote position within cell, drifting upward
vec2 motePos = vec2(
hash(moteCell + 0.1) * 0.8 + 0.1,
fract(hash(moteCell + 0.2) + moteTime * (0.5 + cellHash))
);
float moteDist = length(moteLocal - motePos);
float moteGlow = smoothstep(0.08, 0.0, moteDist);
// Fade motes in aurora-bright areas
moteGlow *= (1.0 - aurora * 0.6);
color += vec3(0.25, 0.4, 0.38) * moteGlow * 0.15;
}
// === CURSOR ===
vec2 mouse = uMouse / uResolution;
vec2 delta = uv - mouse;
float dist = length(delta);
float influence = smoothstep(0.5, 0.0, dist) * 0.3;
color *= 1.0 + influence * aurora * 1.2;
// === FINISHING ===
float vig = 1.0 - dot(uv - 0.5, uv - 0.5) * 1.5;
color *= vig;
// Film grain
float grain = (hash(gl_FragCoord.xy + fract(uTime * 43.0) * 100.0) - 0.5) * 0.03;
color += grain;
gl_FragColor = vec4(color, 1.0);
}
`;
function createShader(type, source) {
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);
return shader;
}
const program = gl.createProgram();
gl.attachShader(program, createShader(gl.VERTEX_SHADER, vsSource));
gl.attachShader(program, createShader(gl.FRAGMENT_SHADER, fsSource));
gl.linkProgram(program);
gl.useProgram(program);
const vertices = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
const aPosition = gl.getAttribLocation(program, 'aPosition');
gl.enableVertexAttribArray(aPosition);
gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0);
const uTime = gl.getUniformLocation(program, 'uTime');
const uResolution = gl.getUniformLocation(program, 'uResolution');
const uMouse = gl.getUniformLocation(program, 'uMouse');
let mouseX = 0, mouseY = 0;
document.addEventListener('mousemove', e => {
mouseX = e.clientX;
mouseY = canvas.height - e.clientY;
});
function resize() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
gl.viewport(0, 0, canvas.width, canvas.height);
}
window.addEventListener('resize', resize);
resize();
let start = Date.now();
function render() {
gl.uniform1f(uTime, (Date.now() - start) / 1000);
gl.uniform2f(uResolution, canvas.width, canvas.height);
gl.uniform2f(uMouse, mouseX, mouseY);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
requestAnimationFrame(render);
}
render();
}
</script>
<script async data-do-not-track="true" data-website-id="3871ce55-1e5f-446b-bdad-2b50ccde7b0c"
src="https://zerolens.disinfo.zone/script.js"></script>
</body>
</html>