Files
portfolio/public/404-terminal.html
denshooter 20f0ccb85b refactor: improve 404 page loading experience and styling
- Replace Suspense with useEffect for better control over component mounting.
- Update loading indicators with fixed positioning and enhanced styling for a terminal-like appearance.
- Modify KernelPanic404 component to improve text color handling and ensure proper visibility.
- Introduce checks for 404 page detection based on pathname and data attributes for more accurate rendering.
2026-01-10 03:41:22 +01:00

1701 lines
69 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 - KERNEL PANIC</title>
<style>
:root {
--bg-color: #020202;
--phosphor: #33ff00;
--phosphor-sec: #008f11;
--alert: #ff3333;
--font: 'Courier New', Courier, monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background-color: var(--bg-color);
margin: 0;
height: 100vh;
overflow: hidden;
font-family: var(--font);
color: var(--phosphor);
user-select: none;
cursor: default;
transition: filter 0.5s, transform 0.5s;
}
/* --- CRT EFFECTS --- */
.crt-wrap {
width: 100%;
height: 100%;
padding: 30px;
box-sizing: border-box;
background: radial-gradient(circle at center, #111 0%, #000 100%);
position: relative;
}
.crt-wrap::before {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%),
linear-gradient(90deg, rgba(255, 0, 0, 0.06), rgba(0, 255, 0, 0.02), rgba(0, 0, 255, 0.06));
background-size: 100% 4px, 3px 100%;
pointer-events: none;
z-index: 90;
}
.glow {
text-shadow: 0 0 2px var(--phosphor-sec), 0 0 8px var(--phosphor);
}
/* --- TERMINAL --- */
#terminal {
height: 100%;
display: flex;
flex-direction: column;
max-width: 1400px;
margin: auto;
position: relative;
z-index: 10;
}
#output {
flex-grow: 1;
overflow-y: auto;
white-space: pre-wrap;
margin-bottom: 20px;
font-size: 1.1rem;
line-height: 1.4;
}
#output::-webkit-scrollbar {
display: none;
}
.input-line {
display: none;
align-items: center;
font-size: 1.2rem;
border-top: 1px solid #333;
padding-top: 10px;
min-height: 30px;
}
.prompt {
margin-right: 10px;
font-weight: bold;
white-space: nowrap;
}
#cmd-input {
background: transparent;
border: none;
color: inherit;
font-family: inherit;
font-size: inherit;
flex-grow: 1;
outline: none;
text-transform: lowercase;
caret-color: var(--phosphor);
}
/* --- OVERLAYS FOR EASTER EGGS --- */
#flash-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999;
display: none;
align-items: center;
justify-content: center;
background: rgba(255, 0, 0, 0.3);
mix-blend-mode: overlay;
pointer-events: none;
}
.ascii-art {
font-size: 8px;
line-height: 8px;
white-space: pre;
text-align: center;
color: var(--alert);
font-weight: bold;
font-family: monospace;
}
/* --- HAWKINS / UPSIDE DOWN MODE --- */
body.hawkins {
--phosphor: #ff3333;
--phosphor-sec: #800000;
filter: contrast(1.6) sepia(1) hue-rotate(-30deg) saturate(4) brightness(0.6);
transform: rotate(180deg);
}
body.hawkins .crt-wrap::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.5;
z-index: 80;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='20' r='1.5' fill='white' opacity='0.8'/%3E%3Ccircle cx='50' cy='80' r='1' fill='white' opacity='0.6'/%3E%3Ccircle cx='150' cy='30' r='1.5' fill='white' opacity='0.8'/%3E%3Ccircle cx='100' cy='150' r='1.2' fill='white' opacity='0.7'/%3E%3Ccircle cx='180' cy='100' r='1' fill='white' opacity='0.6'/%3E%3C/svg%3E");
animation: spores 15s linear infinite;
pointer-events: none;
}
@keyframes spores {
from { background-position: 0 0; }
to { background-position: 200px 400px; }
}
.spore {
position: fixed;
width: 4px;
height: 4px;
background: rgba(255, 0, 0, 0.6);
border-radius: 50%;
pointer-events: none;
z-index: 100;
animation: sporeFloat 3s ease-out forwards;
}
@keyframes sporeFloat {
0% {
opacity: 0.8;
transform: translateY(0) scale(1);
}
100% {
opacity: 0;
transform: translateY(-100px) scale(0.5);
}
}
/* --- MELTDOWN / RAM CORRUPTION --- */
body.meltdown {
animation: violent-shake 0.15s infinite, color-shift 0.8s infinite alternate;
}
@keyframes violent-shake {
0% { transform: translate(0, 0) rotate(0deg); }
25% { transform: translate(-8px, 5px) rotate(-1deg); }
50% { transform: translate(8px, -5px) rotate(1deg) skew(3deg); }
75% { transform: translate(-8px, -5px) rotate(-1deg); }
100% { transform: translate(8px, 5px) rotate(1deg); }
}
@keyframes color-shift {
0% { filter: hue-rotate(0deg) saturate(1); }
25% { filter: hue-rotate(90deg) saturate(2) brightness(1.2); }
50% { filter: hue-rotate(180deg) saturate(3) brightness(0.8); }
75% { filter: hue-rotate(270deg) saturate(2) brightness(1.1); }
100% { filter: hue-rotate(360deg) saturate(1); }
}
.corrupted-text {
display: inline-block;
animation: text-flicker 0.08s infinite;
color: var(--alert);
font-weight: bold;
}
@keyframes text-flicker {
0% { opacity: 1; transform: scaleX(1); }
25% { opacity: 0.3; transform: scaleX(-1) scaleY(1.2); }
50% { opacity: 0.7; transform: scaleX(1) scaleY(0.8); }
75% { opacity: 0.2; transform: scaleX(-1); }
100% { opacity: 1; transform: scaleX(1); }
}
.memory-error {
color: var(--alert);
text-shadow: 0 0 10px red;
animation: pulse-error 0.5s infinite;
}
@keyframes pulse-error {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
/* --- FSOCIETY BOOT EFFECT --- */
body.fsociety-boot {
background: #000;
filter: contrast(1.3) brightness(0.9);
}
body.fsociety-boot .crt-wrap::before {
opacity: 0.8;
background: linear-gradient(rgba(0, 255, 0, 0.1) 50%, rgba(0, 0, 0, 0.3) 50%),
linear-gradient(90deg, rgba(0, 255, 0, 0.1), rgba(0, 255, 0, 0.05), rgba(0, 255, 0, 0.1));
}
.fsociety-mask {
font-size: 11px;
line-height: 11px;
white-space: pre;
color: #fff;
text-shadow: 0 0 15px #fff, 0 0 30px #fff, 0 0 45px #00ff00;
animation: mask-glow 1.5s infinite;
font-weight: bold;
}
@keyframes mask-glow {
0%, 100% {
text-shadow: 0 0 15px #fff, 0 0 30px #fff, 0 0 45px #00ff00;
opacity: 1;
}
50% {
text-shadow: 0 0 25px #fff, 0 0 50px #fff, 0 0 75px #00ff00, 0 0 100px #00ff00;
opacity: 0.95;
}
}
/* --- UTILITY CLASSES --- */
.log-k { color: #fff; font-weight: bold; }
.log-err { color: var(--alert); text-shadow: 0 0 5px red; }
.log-warn { color: #ffb000; }
.log-sys { color: cyan; }
.log-dim { opacity: 0.5; }
.is-dir { color: #5e91ff; font-weight: bold; }
.is-exe { color: var(--phosphor); font-weight: bold; }
.kernel-panic {
color: var(--alert);
font-weight: bold;
text-shadow: 0 0 10px red;
animation: panic-flash 0.3s infinite;
}
@keyframes panic-flash {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
/* --- ENHANCED VISUAL EFFECTS --- */
.glitch-text {
animation: glitch-text 0.3s infinite;
}
@keyframes glitch-text {
0% { transform: translate(0); }
20% { transform: translate(-2px, 2px); }
40% { transform: translate(-2px, -2px); }
60% { transform: translate(2px, 2px); }
80% { transform: translate(2px, -2px); }
100% { transform: translate(0); }
}
.pulse-red {
animation: pulse-red 1s infinite;
}
@keyframes pulse-red {
0%, 100% { color: var(--alert); text-shadow: 0 0 10px red; }
50% { color: #ff6666; text-shadow: 0 0 20px red, 0 0 30px red; }
}
</style>
</head>
<body>
<div id="flash-overlay"></div>
<div class="crt-wrap glow">
<div id="terminal">
<div id="output"></div>
<div class="input-line" id="input-container">
<span class="prompt">guest@404:~$</span>
<input type="text" id="cmd-input" autocomplete="off" spellcheck="false" tabindex="0">
</div>
</div>
</div>
<script>
/* --- SYSTEM CORE --- */
const output = document.getElementById('output');
const input = document.getElementById('cmd-input');
const inputContainer = document.getElementById('input-container');
let audioCtx = null;
let systemFrozen = false;
let currentMusic = null;
let hawkinsActive = false;
let fsocietyActive = false;
// Initialize Audio on first interaction
function initAudio() {
if (!audioCtx) {
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
}
}
window.addEventListener('keydown', initAudio, { once: true });
/* --- MUSIC SYNTHESIS ENGINE --- */
function makeDistortionCurve(amount) {
const samples = 44100;
const curve = new Float32Array(samples);
const deg = Math.PI / 180;
for (let i = 0; i < samples; i++) {
const x = (i * 2) / samples - 1;
curve[i] = ((3 + amount) * x * 20 * deg) / (Math.PI + amount * Math.abs(x));
}
return curve;
}
function playStrangerThingsTheme() {
if (!audioCtx) return null;
const masterGain = audioCtx.createGain();
masterGain.gain.value = 0.4;
const distortion = audioCtx.createWaveShaper();
distortion.curve = makeDistortionCurve(6);
distortion.oversample = '4x';
masterGain.connect(distortion);
distortion.connect(audioCtx.destination);
function playNote(freq, startTime, duration, type = 'sawtooth', volume = 0.4) {
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = type;
osc.frequency.setValueAtTime(freq, audioCtx.currentTime + startTime);
gain.gain.setValueAtTime(0, audioCtx.currentTime + startTime);
gain.gain.linearRampToValueAtTime(volume, audioCtx.currentTime + startTime + 0.05);
gain.gain.exponentialRampToValueAtTime(0.01, audioCtx.currentTime + startTime + duration);
osc.connect(gain);
gain.connect(masterGain);
osc.start(audioCtx.currentTime + startTime);
osc.stop(audioCtx.currentTime + startTime + duration);
}
function playMelody(startTime) {
const t = startTime;
const notes = [
{f: 196.00, t: 0.0, d: 0.45},
{f: 233.08, t: 0.5, d: 0.45},
{f: 174.61, t: 1.0, d: 0.45},
{f: 233.08, t: 1.5, d: 0.45}
];
notes.forEach(n => {
playNote(n.f, t + n.t, n.d, 'sawtooth', 0.5);
});
}
function playBass(startTime) {
const t = startTime;
const notes = [
{f: 98.00, t: 0.0, d: 1.9},
{f: 116.54, t: 2.0, d: 1.9},
{f: 77.78, t: 4.0, d: 1.9},
{f: 87.31, t: 6.0, d: 1.9}
];
notes.forEach(n => {
playNote(n.f, t + n.t, n.d, 'square', 0.35);
});
}
function playBass2(startTime) {
const t = startTime;
const notes = [
{f: 98.00, t: 0.0, d: 0.9},
{f: 116.54, t: 1.0, d: 0.9},
{f: 87.31, t: 2.0, d: 0.9},
{f: 116.54, t: 3.0, d: 0.9}
];
notes.forEach(n => {
playNote(n.f, t + n.t, n.d, 'square', 0.3);
});
}
playMelody(0);
playBass(0);
setTimeout(() => {
playBass2(0);
}, 16500);
const melodyInterval = setInterval(() => {
playMelody(0);
}, 2000);
const bassInterval = setInterval(() => {
playBass(0);
}, 8000);
const bass2Interval = setInterval(() => {
playBass2(0);
}, 4000);
return {
stop: () => {
clearInterval(melodyInterval);
clearInterval(bassInterval);
clearInterval(bass2Interval);
masterGain.disconnect();
}
};
}
function playMrRobotTheme() {
if (!audioCtx) return null;
const masterGain = audioCtx.createGain();
masterGain.gain.value = 0.3;
const distortion = audioCtx.createWaveShaper();
distortion.curve = makeDistortionCurve(50);
distortion.oversample = '4x';
masterGain.connect(distortion);
distortion.connect(audioCtx.destination);
const bass1 = audioCtx.createOscillator();
const bass1Gain = audioCtx.createGain();
bass1.type = 'sawtooth';
bass1.frequency.setValueAtTime(41.2, audioCtx.currentTime);
bass1Gain.gain.setValueAtTime(0.5, audioCtx.currentTime);
bass1.connect(bass1Gain);
bass1Gain.connect(masterGain);
bass1.start();
const bass2 = audioCtx.createOscillator();
const bass2Gain = audioCtx.createGain();
bass2.type = 'square';
bass2.frequency.setValueAtTime(40.5, audioCtx.currentTime);
bass2Gain.gain.setValueAtTime(0.3, audioCtx.currentTime);
bass2.connect(bass2Gain);
bass2Gain.connect(masterGain);
bass2.start();
const deepPulseInterval = setInterval(() => {
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = 'sawtooth';
const deepNotes = [55, 65, 73, 82, 98];
osc.frequency.setValueAtTime(deepNotes[Math.floor(Math.random() * deepNotes.length)], audioCtx.currentTime);
gain.gain.setValueAtTime(0.2, audioCtx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.2);
osc.connect(gain);
gain.connect(masterGain);
osc.start();
osc.stop(audioCtx.currentTime + 0.2);
}, 400);
const rumbleInterval = setInterval(() => {
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = 'sawtooth';
osc.frequency.setValueAtTime(30 + Math.random() * 10, audioCtx.currentTime);
gain.gain.setValueAtTime(0.2, audioCtx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.3);
osc.connect(gain);
gain.connect(masterGain);
osc.start();
osc.stop(audioCtx.currentTime + 0.3);
}, 2000);
return {
stop: () => {
bass1.stop();
bass2.stop();
clearInterval(deepPulseInterval);
clearInterval(rumbleInterval);
masterGain.disconnect();
}
};
}
function playHitchhikersTheme() {
if (!audioCtx) return null;
const masterGain = audioCtx.createGain();
masterGain.gain.value = 0.35;
const delay = audioCtx.createDelay(0.5);
delay.delayTime.setValueAtTime(0.15, audioCtx.currentTime);
const delayGain = audioCtx.createGain();
delayGain.gain.value = 0.3;
masterGain.connect(delay);
delay.connect(delayGain);
delayGain.connect(masterGain);
masterGain.connect(audioCtx.destination);
function playNote(freq, startTime, duration, type = 'sine', volume = 0.4) {
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = type;
osc.frequency.setValueAtTime(freq, audioCtx.currentTime + startTime);
gain.gain.setValueAtTime(0, audioCtx.currentTime + startTime);
gain.gain.linearRampToValueAtTime(volume, audioCtx.currentTime + startTime + 0.08);
gain.gain.exponentialRampToValueAtTime(0.01, audioCtx.currentTime + startTime + duration);
osc.connect(gain);
gain.connect(masterGain);
osc.start(audioCtx.currentTime + startTime);
osc.stop(audioCtx.currentTime + startTime + duration);
}
function playMelody(startTime) {
const t = startTime;
const melody = [
{f: 523.25, t: 0.0, d: 0.4},
{f: 587.33, t: 0.4, d: 0.4},
{f: 659.25, t: 0.8, d: 0.4},
{f: 698.46, t: 1.2, d: 0.4},
{f: 783.99, t: 1.6, d: 0.8},
{f: 698.46, t: 2.4, d: 0.4},
{f: 659.25, t: 2.8, d: 0.4},
{f: 587.33, t: 3.2, d: 0.4},
{f: 523.25, t: 3.6, d: 0.8},
];
melody.forEach(n => playNote(n.f, t + n.t, n.d, 'sine', 0.5));
}
function playHarmony(startTime) {
const t = startTime;
const harmony = [
{f: 783.99, t: 0.0, d: 0.4},
{f: 880.00, t: 0.4, d: 0.4},
{f: 987.77, t: 0.8, d: 0.4},
{f: 1046.50, t: 1.2, d: 0.4},
{f: 1174.66, t: 1.6, d: 0.8},
{f: 1046.50, t: 2.4, d: 0.4},
{f: 987.77, t: 2.8, d: 0.4},
{f: 880.00, t: 3.2, d: 0.4},
{f: 783.99, t: 3.6, d: 0.8},
];
harmony.forEach(n => playNote(n.f, t + n.t, n.d, 'triangle', 0.25));
}
function playBass(startTime) {
const t = startTime;
const bass = [
{f: 130.81, t: 0.0, d: 0.8},
{f: 146.83, t: 0.8, d: 0.8},
{f: 164.81, t: 1.6, d: 0.8},
{f: 146.83, t: 2.4, d: 0.8},
{f: 130.81, t: 3.2, d: 1.2},
];
bass.forEach(n => playNote(n.f, t + n.t, n.d, 'square', 0.3));
}
function playPad(startTime) {
const t = startTime;
const padNotes = [
{f: 261.63, t: 0.0, d: 4.4},
{f: 329.63, t: 0.0, d: 4.4},
{f: 392.00, t: 0.0, d: 4.4},
];
padNotes.forEach(n => playNote(n.f, t + n.t, n.d, 'sine', 0.15));
}
playMelody(0);
playHarmony(0);
playBass(0);
playPad(0);
const loopInterval = setInterval(() => {
playMelody(0);
playHarmony(0);
playBass(0);
playPad(0);
}, 4400);
return {
stop: () => {
clearInterval(loopInterval);
masterGain.disconnect();
}
};
}
function playSynth(type) {
try {
if (!audioCtx || systemFrozen) return;
const t = audioCtx.currentTime;
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.connect(gain);
gain.connect(audioCtx.destination);
if (type === 'key') {
osc.type = 'square';
osc.frequency.setValueAtTime(600, t);
gain.gain.setValueAtTime(0.02, t);
gain.exponentialRampToValueAtTime(0.001, t + 0.05);
osc.start();
osc.stop(t + 0.05);
} else if (type === 'scare') {
osc.type = 'sawtooth';
osc.frequency.setValueAtTime(40, t);
gain.gain.setValueAtTime(0.6, t);
gain.exponentialRampToValueAtTime(0.01, t + 1.0);
const osc2 = audioCtx.createOscillator();
osc2.type = 'sawtooth';
osc2.frequency.setValueAtTime(45, t);
const gain2 = audioCtx.createGain();
osc2.connect(gain2);
gain2.connect(audioCtx.destination);
gain2.gain.setValueAtTime(0.5, t);
gain2.exponentialRampToValueAtTime(0.01, t + 1.0);
osc.start();
osc2.start();
osc.stop(t + 1.0);
osc2.stop(t + 1.0);
} else if (type === 'melt') {
const bufferSize = audioCtx.sampleRate * 0.8;
const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
const data = buffer.getChannelData(0);
for (let i = 0; i < bufferSize; i++) {
data[i] = (Math.random() * 2 - 1) * 0.5;
}
const noise = audioCtx.createBufferSource();
noise.buffer = buffer;
const filter = audioCtx.createBiquadFilter();
filter.type = 'bandpass';
filter.frequency.value = 2000;
noise.connect(filter);
filter.connect(gain);
gain.gain.setValueAtTime(0.3, t);
gain.exponentialRampToValueAtTime(0.001, t + 0.8);
noise.start();
} else if (type === 'beep') {
osc.type = 'sine';
osc.frequency.setValueAtTime(800, t);
gain.gain.setValueAtTime(0.1, t);
gain.exponentialRampToValueAtTime(0.001, t + 0.2);
osc.start();
osc.stop(t + 0.2);
}
} catch (err) {
console.log('Audio error (non-critical):', err);
}
}
const fileSystem = {
"home": {
type: "dir",
children: {
"guest": {
type: "dir",
children: {
"readme.txt": {
type: "file",
content: "ERROR 404: Page Not Found.\n\nSystem Integrity: 89%\nCheck /var/log for clues.\n\nTry: ls -la, cat .bash_history"
},
".bash_history": {
type: "file",
content: "ls -la\nwhoami\nfsociety\nexit"
},
"todo.txt": {
type: "file",
content: "- Fix the internet\n- Calculate the Ultimate Answer (try: 42)\n- Buy milk\n- Check Hawkins Lab logs"
},
"projects": {
type: "dir",
children: {
"website": {
type: "dir",
children: {
"index.html": { type: "file", content: "<html><body>404</body></html>" }
}
}
}
}
}
}
}
},
"var": {
type: "dir",
children: {
"log": {
type: "dir",
children: {
"syslog": {
type: "file",
content: "[ERR] Reality breach detected in HAWKINS_LAB sector.\n[WARN] Subject 011 has escaped containment.\n[ALERT] Dimensional gate unstable.\n[INFO] Try command: hawkins or 011"
},
"kern.log": {
type: "file",
content: "[ 0.000000] Linus Torvalds: 'This kernel is garbage.'\n[ 0.100000] Kernel tainted: M (Module has bad license)\n[ 0.200000] Torvalds: 'I'm not angry, just disappointed.'"
},
"auth.log": {
type: "file",
content: "Failed password for root from 127.0.0.1\nFailed password for elliot from 127.0.0.1"
}
}
}
}
},
"etc": {
type: "dir",
children: {
"passwd": {
type: "file",
content: "root:x:0:0:root:/root:/bin/bash\nguest:x:1000:1000:guest:/home/guest:/bin/bash\nelliot:x:509:509:mr_robot:/home/elliot:/bin/sh"
},
"hosts": {
type: "file",
content: "127.0.0.1 localhost\n127.0.0.1 e-corp.com\n0.0.0.0 reality"
}
}
},
"bin": {
type: "dir",
children: {
"ls": { type: "exe" },
"cat": { type: "exe" },
"grep": { type: "exe" },
"find": { type: "exe" }
}
},
"tmp": {
type: "dir",
children: {}
}
};
fileSystem.root = {
type: "dir",
children: {
home: fileSystem.home,
var: fileSystem.var,
etc: fileSystem.etc,
bin: fileSystem.bin,
tmp: fileSystem.tmp
}
};
let currentPath = fileSystem.home.children.guest;
let pathStr = "~";
let commandHistory = [];
let historyIndex = -1;
const bootMessages = [
{ t: "[ 0.000000] Linux version 4.0.4-void (torvalds@kernel.org) (gcc version 9.4.0)", d: 200 },
{ t: "[ 0.050000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.0.4 root=UUID=dead-beef ro quiet splash", d: 150 },
{ t: "[ 0.100000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'", d: 100 },
{ t: "[ 0.150000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'", d: 100 },
{ t: "[ 0.200000] BIOS-provided physical RAM map:", d: 200 },
{ t: "[ 0.250000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable", d: 150 },
{ t: "[ 0.300000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved", d: 150 },
{ t: "[ 0.400000] Memory: 64K/1048576K available (404K kernel code, 404K rwdata, 404K rodata)", d: 300 },
{ t: "[ 0.600000] Calibrating delay loop... 800.00 BogoMIPS (lpj=400000)", d: 200 },
{ t: "[ 0.800000] Security Framework initialized", d: 200 },
{ t: "[ 1.000000] Tainted kernel: M (Module has bad license) P (Proprietary module loaded)", type: 'log-warn', d: 400 },
{ t: "[ 1.200000] Linus Torvalds: 'I'm not angry, I'm just disappointed in this boot process.'", d: 600 },
{ t: "[ 1.500000] Torvalds: 'This code is garbage. Who wrote this?'", d: 500 },
{ t: "[ 2.000000] [ OK ] Started udev Kernel Device Manager.", d: 200 },
{ t: "[ 2.200000] [ OK ] Mounted /dev/sda1 (Root Filesystem).", d: 200 },
{ t: "[ 2.400000] [TIME] Timed out waiting for device /dev/reality.", type: 'log-warn', d: 600 },
{ t: "[ 2.800000] [DEPEND] Dependency failed for Local File Systems.", type: 'log-err', d: 300 },
{ t: "[ 3.000000] [FAILED] Failed to start The Internet.", type: 'log-err', d: 400 },
{ t: "[ 3.200000] [FAILED] Failed to start Meaning of Life service.", type: 'log-err', d: 400 },
{ t: "[ 3.500000] Welcome to emergency mode. Type 'help' for available commands.", d: 200 },
];
window.onload = async () => {
for (let msg of bootMessages) {
printLine(msg.t, msg.type);
await sleep(msg.d);
}
inputContainer.style.display = 'flex';
setTimeout(() => {
const inputEl = document.getElementById('cmd-input');
if (inputEl) {
inputEl.focus();
if (document.activeElement !== inputEl) {
inputEl.focus();
}
}
}, 100);
};
const commands = ['help', 'ls', 'cd', 'cat', 'grep', 'find', 'pwd', 'clear', 'whoami',
'uname', 'history', 'date', 'uptime', 'head', 'tail', 'wc', 'hostname',
'ping', 'ps', 'top', 'kill', 'exit', 'hawkins', '011', 'eleven', 'upsidedown',
'fsociety', 'elliot', 'bonsoir', '42', 'answer', 'rm'];
function getCurrentDir() {
if (pathStr === "~" || pathStr.startsWith("~/")) {
return fileSystem.home.children.guest;
} else if (pathStr.startsWith("/var/log")) {
return fileSystem.var.children.log;
} else if (pathStr.startsWith("/var")) {
return fileSystem.var;
} else if (pathStr.startsWith("/etc")) {
return fileSystem.etc;
} else if (pathStr.startsWith("/bin")) {
return fileSystem.bin;
} else if (pathStr === "/") {
return fileSystem.root;
}
return currentPath;
}
function getAutocompleteSuggestions(text) {
const parts = text.trim().split(/\s+/);
const cmd = parts[0].toLowerCase();
const arg = parts[parts.length - 1] || '';
if (parts.length === 1 && text.trim().length > 0) {
return commands.filter(c => c.startsWith(cmd));
}
if (parts.length > 1 && (cmd === 'cat' || cmd === 'cd' || cmd === 'grep' ||
cmd === 'head' || cmd === 'tail' || cmd === 'wc' || cmd === 'find' || cmd === 'rm')) {
const dir = getCurrentDir();
const items = Object.keys(dir.children || {})
.filter(name => name.toLowerCase().startsWith(arg.toLowerCase()));
if (arg.includes('/')) {
const pathParts = arg.split('/');
const lastPart = pathParts.pop();
return items.filter(name => name.toLowerCase().startsWith(lastPart.toLowerCase()));
}
return items;
}
return [];
}
function handleTabComplete() {
const text = input.value;
const cursorPos = input.selectionStart;
const textBeforeCursor = text.substring(0, cursorPos);
const suggestions = getAutocompleteSuggestions(textBeforeCursor);
if (suggestions.length === 0) {
try { playSynth('beep'); } catch (e) {}
return;
}
if (suggestions.length === 1) {
const parts = textBeforeCursor.trim().split(/\s+/);
const partIndex = parts.length - 1;
if (partIndex === 0) {
input.value = suggestions[0] + (text.endsWith(' ') ? '' : ' ');
} else {
const beforeArg = parts.slice(0, -1).join(' ') + ' ';
const completion = suggestions[0];
const dir = getCurrentDir();
const item = dir.children[completion];
const suffix = (item && item.type === 'dir') ? '/' : ' ';
input.value = beforeArg + completion + suffix;
}
input.setSelectionRange(input.value.length, input.value.length);
try { playSynth('beep'); } catch (e) {}
} else {
printLine(`Possible completions: ${suggestions.join(' ')}`, 'log-dim');
try { playSynth('beep'); } catch (e) {}
}
}
input.addEventListener('keydown', function handleKeyDown(e) {
if (e.key === 'Tab') {
e.preventDefault();
handleTabComplete();
return false;
}
try { if (audioCtx) playSynth('key'); } catch (err) {}
if (e.key === 'ArrowUp' && historyIndex > 0) {
e.preventDefault();
historyIndex--;
input.value = commandHistory[historyIndex];
} else if (e.key === 'ArrowDown' && historyIndex < commandHistory.length - 1) {
e.preventDefault();
historyIndex++;
input.value = commandHistory[historyIndex];
} else if (e.key === 'ArrowDown') {
e.preventDefault();
historyIndex = commandHistory.length;
input.value = '';
}
if (e.key === 'Enter' || e.keyCode === 13) {
e.preventDefault();
if (!systemFrozen && inputContainer.style.display === 'flex') {
runCmd();
}
return false;
}
}, true);
document.addEventListener('click', () => {
if (!systemFrozen && inputContainer.style.display === 'flex') {
input.focus();
}
});
async function runCmd() {
if (systemFrozen) {
try { playSynth('beep'); } catch (e) {}
return;
}
const cmdRaw = input.value.trim();
input.value = '';
if (!cmdRaw) {
printLine(`guest@404:${pathStr}$ `, 'log-dim');
setTimeout(() => input.focus(), 10);
return;
}
commandHistory.push(cmdRaw);
historyIndex = commandHistory.length;
printLine(`guest@404:${pathStr}$ ${cmdRaw}`, 'log-dim');
const args = cmdRaw.split(/\s+/);
const cmd = args[0].toLowerCase();
setTimeout(() => {
const inputEl = document.getElementById('cmd-input');
if (inputEl && inputContainer.style.display === 'flex') {
inputEl.focus();
}
}, 10);
await sleep(100);
switch (cmd) {
case 'help':
printLine("--- SYSTEM UTILS ---", "log-sys");
printLine(" ls, cd, cat, grep, find, pwd, clear");
printLine(" whoami, uname, history, date, uptime");
printLine(" head, tail, wc, sort, uniq");
printLine("--- NETWORK ---", "log-sys");
printLine(" ping, hostname");
printLine("--- PROCESSES ---", "log-sys");
printLine(" ps, top, kill");
printLine("(Hints are hidden in the file system - try ls -la)");
break;
case 'ls':
const showHidden = args.includes('-a') || args.includes('-la') || args.includes('-l');
const longFormat = args.includes('-l') || args.includes('-la');
let items = Object.keys(currentPath.children)
.filter(n => !n.startsWith('.') || showHidden);
if (showHidden) {
items.unshift('..');
items.unshift('.');
}
items.sort((a, b) => {
if (a === '.') return -1;
if (b === '.') return 1;
if (a === '..') return -1;
if (b === '..') return 1;
const itemA = currentPath.children[a];
const itemB = currentPath.children[b];
if (!itemA || !itemB) return 0;
if (itemA.type === 'dir' && itemB.type !== 'dir') return -1;
if (itemA.type !== 'dir' && itemB.type === 'dir') return 1;
return a.localeCompare(b);
});
if (longFormat) {
printLine(`total ${items.length}`);
items.forEach(n => {
if (n === '.' || n === '..') {
const date = new Date();
const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const month = monthNames[date.getMonth()];
const day = date.getDate().toString().padStart(2);
const time = date.toTimeString().substring(0, 5);
const dateStr = `${month} ${day} ${time}`;
const filename = `<span class='is-dir'>${n}/</span>`;
printLine(`drwxr-xr-x 2 guest guest 4096 ${dateStr} ${filename}`);
return;
}
const item = currentPath.children[n];
if (!item) return;
const isDir = item.type === 'dir';
const isExe = item.type === 'exe';
const perms = isDir ? 'drwxr-xr-x' : (isExe ? '-rwxr-xr-x' : '-rw-r--r--');
const links = isDir ? '2' : '1';
const owner = 'guest';
const group = 'guest';
let size = '0';
if (item.content) {
size = item.content.length.toString();
} else if (isDir) {
size = '4096';
}
size = size.padStart(8);
const date = new Date();
const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const month = monthNames[date.getMonth()];
const day = date.getDate().toString().padStart(2);
const time = date.toTimeString().substring(0, 5);
const dateStr = `${month} ${day} ${time}`;
let filename = n;
if (isDir) {
filename = `<span class='is-dir'>${n}/</span>`;
} else if (isExe) {
filename = `<span class='is-exe'>${n}*</span>`;
}
printLine(`${perms} ${links} ${owner} ${group} ${size} ${dateStr} ${filename}`);
});
} else {
const formatted = items.map(n => {
if (n === '.' || n === '..') {
return `<span class='is-dir'>${n}/</span>`;
}
const item = currentPath.children[n];
if (!item) return n;
if (item.type === 'dir') return `<span class='is-dir'>${n}/</span>`;
if (item.type === 'exe') return `<span class='is-exe'>${n}*</span>`;
return n;
});
printLine(formatted.join(' '));
}
break;
case 'cat':
const file = currentPath.children[args[1]];
if (file && file.type === 'file') {
printLine(file.content);
} else {
printLine(`cat: ${args[1] || ''}: No such file`, 'log-err');
}
break;
case 'cd':
if (!args[1]) {
currentPath = fileSystem.home.children.guest;
pathStr = "~";
} else if (args[1] === '..') {
if (pathStr === "/var/log") {
currentPath = fileSystem.var;
pathStr = "/var";
} else if (pathStr === "/var") {
currentPath = fileSystem.root;
pathStr = "/";
} else {
currentPath = fileSystem.home.children.guest;
pathStr = "~";
}
} else if (args[1] === '~' || args[1] === '/home/guest') {
currentPath = fileSystem.home.children.guest;
pathStr = "~";
} else if (args[1].startsWith('/var/log')) {
currentPath = fileSystem.var.children.log;
pathStr = "/var/log";
} else if (args[1].startsWith('/var')) {
currentPath = fileSystem.var;
pathStr = "/var";
} else if (args[1].startsWith('/etc')) {
currentPath = fileSystem.etc;
pathStr = "/etc";
} else if (args[1] === '/') {
currentPath = fileSystem.root;
pathStr = "/";
} else {
const subdir = currentPath.children[args[1]];
if (subdir && subdir.type === 'dir') {
currentPath = subdir;
pathStr = pathStr === "~" ? `~/${args[1]}` : `${pathStr}/${args[1]}`;
} else {
printLine(`cd: ${args[1]}: No such file or directory`, 'log-err');
}
}
break;
case 'pwd':
printLine(pathStr === "~" ? "/home/guest" : pathStr);
break;
case 'grep':
if (args.length < 3) {
printLine("Usage: grep [pattern] [file]");
} else {
const grepFile = currentPath.children[args[2]];
if (grepFile && grepFile.content) {
const lines = grepFile.content.split('\n');
lines.forEach(l => {
if (l.toLowerCase().includes(args[1].toLowerCase())) {
printLine(l);
}
});
} else {
printLine(`grep: ${args[2]}: No such file`);
}
}
break;
case 'find':
if (!args[1]) {
printLine("Usage: find [name]");
} else {
const results = [];
function searchDir(dir, path) {
Object.keys(dir.children || {}).forEach(name => {
if (name.includes(args[1])) {
results.push(`${path}/${name}`);
}
if (dir.children[name].type === 'dir') {
searchDir(dir.children[name], `${path}/${name}`);
}
});
}
searchDir(currentPath, pathStr === "~" ? "/home/guest" : pathStr);
if (results.length > 0) {
results.forEach(r => printLine(r));
} else {
printLine(`find: '${args[1]}': No such file`);
}
}
break;
case 'head':
if (!args[1]) {
printLine("Usage: head [file]");
} else {
const headFile = currentPath.children[args[1]];
if (headFile && headFile.content) {
const lines = headFile.content.split('\n').slice(0, 10);
lines.forEach(l => printLine(l));
} else {
printLine(`head: ${args[1]}: No such file`);
}
}
break;
case 'tail':
if (!args[1]) {
printLine("Usage: tail [file]");
} else {
const tailFile = currentPath.children[args[1]];
if (tailFile && tailFile.content) {
const lines = tailFile.content.split('\n').slice(-10);
lines.forEach(l => printLine(l));
} else {
printLine(`tail: ${args[1]}: No such file`);
}
}
break;
case 'wc':
if (!args[1]) {
printLine("Usage: wc [file]");
} else {
const wcFile = currentPath.children[args[1]];
if (wcFile && wcFile.content) {
const lines = wcFile.content.split('\n');
const words = wcFile.content.split(/\s+/).filter(w => w);
const chars = wcFile.content.length;
printLine(` ${lines.length} ${words.length} ${chars} ${args[1]}`);
} else {
printLine(`wc: ${args[1]}: No such file`);
}
}
break;
case 'whoami':
printLine("guest");
break;
case 'uname':
if (args.includes('-a')) {
printLine("Linux 404-void 4.0.4-void #1 SMP PREEMPT Fri Jan 09 2025 x86_64 GNU/Linux");
} else {
printLine("Linux");
}
break;
case 'date':
printLine(new Date().toString());
break;
case 'uptime':
const uptime = Math.floor((Date.now() - performance.timing.navigationStart) / 1000);
const hours = Math.floor(uptime / 3600);
const mins = Math.floor((uptime % 3600) / 60);
const secs = uptime % 60;
printLine(`up ${hours}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}, 1 user, load average: 0.00, 0.00, 0.00`);
break;
case 'hostname':
printLine("404-void-server");
break;
case 'ping':
const host = args[1] || "google.com";
printLine(`PING ${host} (127.0.0.1) 56(84) bytes of data.`);
for (let i = 0; i < 4; i++) {
await sleep(1000);
printLine(`64 bytes from ${host}: icmp_seq=${i + 1} ttl=118 time=${(Math.random() * 50 + 10).toFixed(1)} ms`);
}
printLine(`--- ${host} ping statistics ---`);
printLine("4 packets transmitted, 4 received, 0% packet loss");
break;
case 'ps':
printLine(" PID TTY TIME CMD");
printLine(" 1 ? 00:00:04 init");
printLine(" 404 ? 00:00:01 bash");
printLine(" 666 ? 00:00:00 reality");
break;
case 'top':
printLine("top - 00:00:00 up 0:00, 1 user, load average: 0.00, 0.00, 0.00");
printLine("Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie");
printLine("%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st");
printLine("KiB Mem : 1048576 total, 999936 free, 12345 used, 36295 buff/cache");
printLine("KiB Swap: 0 total, 0 free, 0 used. 999936 avail Mem");
printLine("");
printLine(" PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND");
printLine(" 1 root 20 0 40404 4004 3000 S 0.0 0.1 0:04.04 init");
printLine(" 404 guest 20 0 999999 99999 5000 R 99.9 10.0 4:20.69 bash");
printLine(" 666 system -20 0 0 0 0 Z 0.0 0.0 0:00.00 reality");
break;
case 'kill':
if (!args[1]) {
printLine("Usage: kill [pid]");
} else {
printLine(`kill: cannot kill process ${args[1]}: Operation not permitted`, 'log-err');
}
break;
case 'history':
commandHistory.forEach((c, i) => printLine(` ${i + 1} ${c}`));
break;
case 'clear':
output.innerHTML = "";
break;
case 'exit':
window.location.href = '/';
break;
case 'hawkins':
case '011':
case 'eleven':
case 'upsidedown':
await triggerHawkins();
break;
case 'fsociety':
case 'elliot':
case 'bonsoir':
await triggerFsociety();
break;
case '42':
case 'answer':
await triggerDeepThought();
break;
case 'rm':
if (args[1] === '-rf' && args[2] === '/') {
await initiateMeltdown();
} else if (args[1]) {
printLine("rm: cannot remove: Read-only file system", 'log-err');
} else {
printLine("Usage: rm [file]");
}
break;
default:
printLine(`bash: ${cmd}: command not found`, 'log-err');
}
output.scrollTop = output.scrollHeight;
if (!systemFrozen && inputContainer.style.display === 'flex') {
setTimeout(() => input.focus(), 50);
}
}
async function triggerHawkins() {
if (hawkinsActive) {
printLine("Closing dimensional gate...", 'log-warn');
await sleep(500);
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
document.body.classList.remove('hawkins');
hawkinsActive = false;
printLine("Returned to normal reality.", 'log-sys');
return;
}
hawkinsActive = true;
printLine("WARNING: Anomalous readings detected...", 'log-warn');
await sleep(600);
printLine("Dimensional instability increasing...", 'log-err');
await sleep(500);
document.body.style.filter = 'hue-rotate(180deg) contrast(1.5)';
await sleep(200);
document.body.style.filter = '';
await sleep(200);
document.body.style.filter = 'hue-rotate(180deg) contrast(1.5)';
await sleep(150);
printLine("CRITICAL: Breach imminent!", 'pulse-red');
await sleep(400);
printLine("Entering the Upside Down...", 'log-err');
await sleep(300);
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
playSynth('scare');
currentMusic = playStrangerThingsTheme();
document.body.classList.add('hawkins');
const vecnaArt = `
████████████████████████████████
██ ██
██ ████ ████ ██
██ ██ ████ ██ ██
██ ██ ██ ██
██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ██
██ ██ ██ ██
██ ██████████ ██
██ ██
██ ████████████████ ██
██ ██ ██ ██
██ ██ ██ ██
██ ██████████████ ██
██ ██
████████████████████████████████
`;
const overlay = document.getElementById('flash-overlay');
for (let i = 0; i < 3; i++) {
overlay.innerHTML = `<div class="ascii-art pulse-red" style="font-size:${10 + i * 2}px; transform: scale(${1.0 + i * 0.3});">${vecnaArt}</div>`;
overlay.style.display = 'flex';
overlay.style.background = `rgba(255, 0, 0, ${0.3 + i * 0.2})`;
await sleep(200);
overlay.style.display = 'none';
await sleep(100);
}
overlay.innerHTML = `<div class="ascii-art pulse-red" style="font-size:14px; transform: scale(1.5);">${vecnaArt}</div>`;
overlay.style.display = 'flex';
overlay.style.background = 'rgba(255, 0, 0, 0.7)';
await sleep(400);
overlay.style.display = 'none';
overlay.innerHTML = "";
const sporeInterval = setInterval(() => {
const spore = document.createElement('div');
spore.className = 'spore';
spore.style.left = Math.random() * 100 + '%';
spore.style.top = Math.random() * 100 + '%';
spore.style.opacity = '0.6';
document.body.appendChild(spore);
setTimeout(() => spore.remove(), 3000);
}, 300);
const glitchInterval = setInterval(() => {
if (!hawkinsActive) {
clearInterval(glitchInterval);
clearInterval(sporeInterval);
return;
}
document.body.style.filter = 'hue-rotate(180deg) contrast(1.3) brightness(0.9)';
setTimeout(() => {
document.body.style.filter = '';
}, 100 + Math.random() * 200);
}, 2000);
printLine("", 'log-dim');
printLine("████████████████████████████████████████", 'pulse-red');
printLine("█ YOU ARE NOW IN THE UPSIDE DOWN █", 'pulse-red');
printLine("████████████████████████████████████████", 'pulse-red');
printLine("", 'log-dim');
printLine("Reality is distorted. Time flows differently here.", 'log-warn');
printLine("Type 'hawkins' or '011' again to return.", 'log-dim');
setTimeout(() => {
if (hawkinsActive) {
clearInterval(glitchInterval);
clearInterval(sporeInterval);
printLine("", 'log-dim');
printLine("Dimensional gate closing automatically...", 'log-warn');
triggerHawkins();
}
}, 30000);
}
async function triggerFsociety() {
if (fsocietyActive) {
printLine("Disconnecting from fsociety network...", 'log-warn');
await sleep(500);
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
document.body.classList.remove('fsociety-boot');
fsocietyActive = false;
systemFrozen = false;
printLine("Connection terminated.", 'log-sys');
return;
}
fsocietyActive = true;
systemFrozen = true;
inputContainer.style.display = 'none';
output.innerHTML = "";
document.body.classList.add('fsociety-boot');
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
currentMusic = playMrRobotTheme();
printLine("$ ./fsociety.sh", 'log-k');
await sleep(250);
printLine("[*] Initializing breach protocol...", 'log-warn');
await sleep(180);
printLine("[*] Scanning target: E-Corp mainframe", 'log-warn');
await sleep(200);
printLine("[*] Exploiting CVE-2024-1337... 0x" + Array.from({length: 8}, () => Math.floor(Math.random() * 16).toString(16).toUpperCase()).join(''), 'log-dim');
await sleep(180);
printLine("[*] Bypassing firewall...", 'log-warn');
await sleep(180);
printLine("[*] Escalating privileges... root access granted", 'log-warn');
await sleep(200);
printLine("[*] Injecting payload... success", 'log-warn');
await sleep(180);
printLine("[*] Establishing backdoor...", 'log-warn');
await sleep(200);
printLine("", 'log-dim');
printLine(" ██ ██", 'fsociety-mask');
printLine(" ██ ██ ██ ██", 'fsociety-mask');
printLine(" ██ ████ ██", 'fsociety-mask');
printLine(" ██ ██", 'fsociety-mask');
printLine(" ██ ██ ██ ██", 'fsociety-mask');
printLine(" ██ ██ ██ ██", 'fsociety-mask');
printLine(" ██ ██████ ██", 'fsociety-mask');
printLine(" ██ ██", 'fsociety-mask');
printLine(" ██████████████", 'fsociety-mask');
await sleep(400);
printLine("", 'log-dim');
printLine("Hello friend.", 'log-k');
await sleep(350);
printLine("Control is an illusion.", 'log-k');
await sleep(350);
printLine("We are fsociety.", 'log-k');
await sleep(350);
printLine("", 'log-dim');
printLine(">>> Accessing E-Corp database... [████████████] 100%", 'log-warn');
await sleep(280);
printLine(">>> Encrypting files... [████████████] 100%", 'log-warn');
await sleep(280);
printLine(">>> Deleting debt records... [████████████] 100%", 'log-warn');
await sleep(280);
printLine("", 'log-dim');
printLine("Mission accomplished. The world is watching.", 'log-k');
await sleep(400);
printLine("", 'log-dim');
printLine("System compromised. Initiating emergency reboot...", 'log-err');
await sleep(1500);
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
document.body.classList.remove('fsociety-boot');
fsocietyActive = false;
systemFrozen = false;
output.innerHTML = "";
await sleep(500);
printLine("Rebooting system...", 'log-warn');
await sleep(800);
printLine("Restoring from backup...", 'log-sys');
await sleep(1000);
printLine("System restored.", 'log-sys');
await sleep(500);
location.reload();
}
async function triggerDeepThought() {
printLine("Initializing Deep Thought...", 'log-sys');
await sleep(600);
printLine("", 'log-dim');
printLine("Deep Thought: Good morning.", 'log-k');
await sleep(800);
printLine("", 'log-dim');
printLine("Deep Thought: I am the second greatest computer in the Universe of Time and Space.", 'log-k');
await sleep(1000);
printLine("", 'log-dim');
printLine("Deep Thought: You want to know the Answer to the Ultimate Question?", 'log-k');
await sleep(800);
printLine("Deep Thought: The Answer to the Ultimate Question of Life, the Universe, and Everything?", 'log-k');
await sleep(1000);
printLine("", 'log-dim');
printLine("Deep Thought: ...", 'log-dim');
await sleep(500);
printLine("Deep Thought: Thinking...", 'log-dim');
await sleep(800);
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
printLine("Deep Thought: This will take a moment...", 'log-dim');
await sleep(1200);
printLine("Deep Thought: (approximately 7,500,000 years)", 'log-dim');
await sleep(1000);
printLine("", 'log-dim');
printLine("Deep Thought: ...", 'log-dim');
await sleep(600);
printLine("Deep Thought: ...", 'log-dim');
await sleep(600);
printLine("Deep Thought: ...", 'log-dim');
await sleep(800);
printLine("", 'log-dim');
printLine("Deep Thought: I have the answer.", 'log-k');
await sleep(1000);
printLine("", 'log-dim');
printLine("The Answer to the Ultimate Question of Life, the Universe, and Everything is...", 'log-sys');
await sleep(1500);
printLine("", 'log-dim');
printLine("42", 'log-k');
await sleep(1000);
printLine("", 'log-dim');
printLine("Deep Thought: Though I'm not entirely sure what the question is.", 'log-dim');
await sleep(1000);
printLine("Deep Thought: But the answer is definitely 42.", 'log-k');
}
async function initiateMeltdown() {
systemFrozen = true;
inputContainer.style.display = 'none';
if (currentMusic) {
currentMusic.stop();
currentMusic = null;
}
printLine("CRITICAL: Attempting to delete root filesystem...", 'log-err');
await sleep(500);
printLine("WARNING: Memory corruption detected!", 'log-warn');
await sleep(400);
printLine("ERROR: RAM integrity compromised!", 'log-err');
await sleep(300);
playSynth('melt');
let corruptionCount = 0;
const corruptInterval = setInterval(() => {
const nodes = Array.from(output.childNodes).filter(n => n.nodeType === 1);
if (nodes.length > 0) {
const randomNode = nodes[Math.floor(Math.random() * nodes.length)];
if (randomNode.innerText && randomNode.innerText.length > 3) {
const chars = "¥§¶$@#%&XØ¥€©±×÷";
const glitchChar = chars[Math.floor(Math.random() * chars.length)];
randomNode.innerHTML = randomNode.innerHTML.replace(/[a-zA-Z0-9]/, `<span class="corrupted-text">${glitchChar}</span>`);
}
}
corruptionCount++;
if (corruptionCount === 15) {
printLine("MEMORY ERROR: 0xDEADBEEF at address 0xFFFFFFFF", 'memory-error');
} else if (corruptionCount === 30) {
printLine("KERNEL PANIC: Unable to handle kernel paging request", 'kernel-panic');
} else if (corruptionCount === 45) {
printLine("SYSTEM HALTED", 'kernel-panic');
clearInterval(corruptInterval);
document.body.classList.add('meltdown');
playSynth('melt');
setTimeout(() => {
document.body.classList.remove('meltdown');
document.body.style.background = '#000';
document.body.style.color = '#000';
output.style.display = 'none';
inputContainer.style.display = 'none';
setTimeout(() => {
output.innerHTML = '';
output.style.display = 'block';
output.style.color = '#33ff00';
document.body.style.color = '#33ff00';
document.body.style.background = '#020202';
printLine("", 'log-sys');
printLine("System backup restore initiated...", 'log-sys');
printLine("Recovering from kernel panic...", 'log-sys');
printLine("Restoring file system...", 'log-sys');
printLine("", 'log-sys');
setTimeout(() => {
location.reload();
}, 3000);
}, 2000);
}, 1000);
}
}, 80);
}
function printLine(text, type) {
const d = document.createElement('div');
d.innerHTML = text;
// Default color for normal text
d.style.color = 'var(--phosphor)';
if (type === 'log-warn') d.style.color = '#ffb000';
if (type === 'log-err' || type === 'alert') d.style.color = 'var(--alert)';
if (type === 'log-dim') {
d.style.opacity = '0.6';
d.style.color = 'var(--phosphor)';
}
if (type === 'log-sys') d.style.color = 'cyan';
if (type === 'log-k') d.style.color = '#fff';
if (type === 'pulse-red') d.classList.add('pulse-red');
output.appendChild(d);
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
</script>
</body>
</html>