STATUS: PROZESS-ÜBERWACHUNG
diff --git a/public/js/ascii-shimmer.js b/public/js/ascii-shimmer.js
index 5b9f630..123265a 100644
--- a/public/js/ascii-shimmer.js
+++ b/public/js/ascii-shimmer.js
@@ -5,9 +5,12 @@
function initAsciiShimmer(container) {
var text = container.dataset.text || 'KILABOR';
var cell = parseInt(container.dataset.cell || '10', 10);
- var primaryColor = container.dataset.color || '#ff4500';
- var dimColor = container.dataset.dimColor || 'rgba(212,175,55,0.35)';
var intervalMs = parseInt(container.dataset.interval || '140', 10);
+ // Farbwelle: pro Buchstabe ein eigener Hue-Versatz, der Startpunkt
+ // wandert über die Zeit weiter -> Farbe laeuft Buchstabe fuer Buchstabe durch.
+ var hueSpeed = parseFloat(container.dataset.hueSpeed || '2.5');
+ var frame = 0;
+ var cols = 0;
var denseChars = ['$', '@', '%', '#', '&', '8', '0'];
var edgeChars = ['+', 'x', '-', '=', ':', '.', 'o'];
@@ -49,8 +52,9 @@
mctx.fillText(text, width / 2, height / 2);
var imgData = mctx.getImageData(0, 0, width, height).data;
- var cols = Math.floor(width / cell);
+ cols = Math.floor(width / cell);
var rows = Math.floor(height / cell);
+ var colsPerLetter = cols / text.length;
mask = [];
for (var ry = 0; ry < rows; ry++) {
@@ -60,7 +64,8 @@
var idx = (py * width + px) * 4;
var alpha = imgData[idx + 3] / 255;
if (alpha > 0.15) {
- mask.push({ x: rx, y: ry, alpha: alpha });
+ var letterIndex = Math.min(text.length - 1, Math.floor(rx / colsPerLetter));
+ mask.push({ x: rx, y: ry, alpha: alpha, letter: letterIndex });
}
}
}
@@ -72,12 +77,19 @@
ctx.textBaseline = 'middle';
ctx.textAlign = 'center';
+ frame++;
+ var hueBase = (frame * hueSpeed) % 360;
+ var hueStep = 360 / text.length;
+
for (var i = 0; i < mask.length; i++) {
var c = mask[i];
var isDense = c.alpha > 0.7;
var set = isDense ? denseChars : edgeChars;
var char = set[(Math.random() * set.length) | 0];
- ctx.fillStyle = isDense ? primaryColor : dimColor;
+ var hue = (hueBase + c.letter * hueStep) % 360;
+ ctx.fillStyle = isDense
+ ? 'hsl(' + hue + ', 90%, 55%)'
+ : 'hsla(' + hue + ', 90%, 55%, 0.4)';
ctx.fillText(char, c.x * cell + cell / 2, c.y * cell + cell / 2);
}
}
diff --git a/public/js/script.js b/public/js/script.js
index ae572b8..56c3ba3 100644
--- a/public/js/script.js
+++ b/public/js/script.js
@@ -155,12 +155,19 @@
});
}
+ function randHex() {
+ return Math.random().toString(16).substring(2, 15);
+ }
+
function log(msg, cls = '') {
if (!logOutput) return;
const entry = document.createElement('div');
entry.className = 'log-entry ' + cls;
entry.innerHTML = msg;
logOutput.prepend(entry);
+ // Neuesten Eintrag immer sichtbar halten (sonst bleibt die Ansicht
+ // nach schnellen Log-Bursts wie "hack" an alter Scroll-Position stehen).
+ logOutput.scrollTop = 0;
}
function handleCommand(raw) {
@@ -168,6 +175,16 @@
const cmd = parts[0].toLowerCase();
const args = parts.slice(1).join(' ');
+ // Nach einem "hack" hinterlassenes Rot/vergroessertes Terminal bei
+ // jedem neuen Befehl (ausser erneutem hack) wieder normalisieren.
+ if (cmd !== 'hack') {
+ const normalTerminal = document.getElementById('system-log');
+ if (normalTerminal && normalTerminal.classList.contains('hacked-bg')) {
+ normalTerminal.classList.remove('hacked-bg');
+ normalTerminal.style.height = '';
+ }
+ }
+
log('
sascha@ki-labor:~$ ' + raw + '');
switch(cmd) {
@@ -199,15 +216,57 @@
case 'trace': document.querySelector('[data-mode="trace"]')?.click(); break;
case 'flux': document.querySelector('[data-mode="overdrive"]')?.click(); break;
case 'hack':
- log('>> INITIATING NEURAL HACK...', 'warn');
- let hIdx = 0;
- const hInt = setInterval(() => {
- log(Math.random().toString(16).substring(2, 15), 'ghost');
- if (hIdx++ > 15) {
- clearInterval(hInt);
- log('>> ACCESS GRANTED.', 'ok');
- }
- }, 100);
+ const hackTargets = ['NASA.GOV', 'PENTAGON.MIL', 'AREA51.GOV', 'CIA.GOV', 'FBI.GOV'];
+ const hackTarget = hackTargets[Math.floor(Math.random() * hackTargets.length)];
+ const hackIp = Array.from({ length: 4 }, () => Math.floor(Math.random() * 256)).join('.');
+ const hackFiles = ['AREA51_BBQ_REZEPTE.pdf', 'MONDLANDUNG_MASTERTAPES.mp4', 'ALIEN_KONTAKT_CHATVERLAUF.txt', 'ROSWELL_URLAUBSFOTOS.zip', 'GEHEIME_KAFFEEKASSE.xlsx', 'ECHTE_GEBURTSTAGSPARTY_PLANUNG.docx', 'BEREICH_51_WLAN_PASSWORT.txt'].sort(() => Math.random() - 0.5).slice(0, 3);
+ const hackScript = [
+ { t: '>> INITIATING NEURAL HACK...', c: 'warn', d: 0 },
+ { t: '>> ZIEL ANVISIERT: ' + hackTarget + ' [' + hackIp + ']', c: 'info', d: 650 },
+ { t: randHex(), c: 'ghost', d: 320 },
+ { t: randHex(), c: 'ghost', d: 160 },
+ { t: randHex(), c: 'ghost', d: 160 },
+ { t: '>> FIREWALL WIRD UMGANGEN... [FEHLGESCHLAGEN]', c: 'error', d: 800 },
+ { t: '>> WECHSLE ZU BRUTE-FORCE-MODUL...', c: 'warn', d: 650 },
+ { t: randHex(), c: 'ghost', d: 240 },
+ { t: randHex(), c: 'ghost', d: 160 },
+ { t: randHex(), c: 'ghost', d: 160 },
+ { t: randHex(), c: 'ghost', d: 160 },
+ { t: '>> FIREWALL UMGANGEN. (Standard-Passwort war "password123".)', c: 'ok', d: 800 },
+ { t: '>> INJIZIERE PAYLOAD IN MAINFRAME...', c: 'info', d: 650 },
+ { t: '[■□□□□□□□□□] 10%', c: '', d: 240 },
+ { t: '[■■■□□□□□□□] 30%', c: '', d: 240 },
+ { t: '[■■■■■□□□□□] 50%', c: '', d: 240 },
+ { t: '[■■■■■■■□□□] 70%', c: '', d: 240 },
+ { t: '[■■■■■■■■■□] 90%', c: '', d: 240 },
+ { t: '[■■■■■■■■■■] 100%', c: 'ok', d: 320 },
+ { t: '>> LADE GEHEIME DATEIEN HERUNTER...', c: 'warn', d: 650 },
+ { t: ' ↳ ' + hackFiles[0], c: 'ghost', d: 320 },
+ { t: ' ↳ ' + hackFiles[1], c: 'ghost', d: 320 },
+ { t: ' ↳ ' + hackFiles[2], c: 'ghost', d: 320 },
+ { t: '>> SPUREN WERDEN VERWISCHT...', c: 'info', d: 650 },
+ { t: '>> ACCESS GRANTED. WILLKOMMEN, OVERLORD.', c: 'crit', d: 800 },
+ { t: '>> (Alles nur Fiktion. Keine echten Server wurden gehackt. Wahrscheinlich.)', c: '', d: 650 }
+ ];
+
+ const hackTerminal = document.getElementById('system-log');
+ if (hackTerminal) {
+ hackTerminal.classList.remove('hacked-bg');
+ hackTerminal.style.height = (hackTerminal.offsetHeight + 100) + 'px';
+ }
+
+ let hackCum = 0;
+ hackScript.forEach(step => {
+ hackCum += step.d;
+ setTimeout(() => log(step.t, step.c), hackCum);
+ });
+
+ // Nach der Sequenz: Terminal leeren, Totenkopf zeigen, Hintergrund rot einfaerben
+ setTimeout(() => {
+ if (logOutput) logOutput.innerHTML = '';
+ log('☠', 'hack-skull');
+ if (hackTerminal) hackTerminal.classList.add('hacked-bg');
+ }, hackCum + 700);
break;
case 'deep-scan':
log('>> INITIALIZING DEEP SYSTEM SCAN...', 'info');
@@ -223,6 +282,22 @@
log('SYSTEM ONLINE SEIT: 01.01.1974', 'info');
log('LAUFZEIT: ' + years + ' JAHRE (STABILITÄT: FRAGLICH)', 'ok');
break;
+ case 'top':
+ log('PROZESS-MONITOR:', 'info');
+ log('PID CPU% MEM% PROZESS');
+ log('1337 ' + (60 + Math.floor(Math.random() * 40)) + '% ' + (30 + Math.floor(Math.random() * 50)) + '% ANARCHIE.exe', 'warn');
+ log('0001 ' + (5 + Math.floor(Math.random() * 20)) + '% ' + (10 + Math.floor(Math.random() * 30)) + '% KAFFEE_DAEMON');
+ log('4269 ' + (1 + Math.floor(Math.random() * 10)) + '% ' + (5 + Math.floor(Math.random() * 15)) + '% PROKRASTINATION.sys');
+ log('0666 ' + (80 + Math.floor(Math.random() * 20)) + '% ' + (70 + Math.floor(Math.random() * 30)) + '% GEMINI_NEURAL_LINK', 'error');
+ log('9999 0% 0% SCHLAF.exe (SEIT TAGEN INAKTIV)');
+ break;
+ case 'weather':
+ const conditions = ['CHAOS mit Aussicht auf mehr CHAOS', 'Vereinzelte Panik-Schauer', 'Digitaler Nebel, Sicht: 0m', 'Sonnig, aber die Sonne ist auch kaputt', 'Sturmwarnung: MERGE CONFLICTS'];
+ const temp = -10 + Math.floor(Math.random() * 60);
+ log('CHAOS-WETTERBERICHT:', 'info');
+ log('TEMPERATUR: ' + temp + '°C (GEFÜHLT: SCHLIMMER)');
+ log('BEDINGUNG: ' + conditions[Math.floor(Math.random() * conditions.length)], 'warn');
+ break;
case 'fortune': generateFortune(); break;
default:
log('FEHLER: BEFEHL "' + cmd + '" NICHT GEFUNDEN.', 'error');
diff --git a/public/posts/protocol-top/index.html b/public/posts/protocol-top/index.html
index b4a2404..fec6a81 100644
--- a/public/posts/protocol-top/index.html
+++ b/public/posts/protocol-top/index.html
@@ -3,7 +3,7 @@
-
> top | DIGITALE ANARCHIE | KI-LABOR
+
> topha | DIGITALE ANARCHIE | KI-LABOR
@@ -189,7 +189,7 @@
// ZENTRAL-ARCHIV · EINHEIT IDENTIFIZIERT //
⟪
-
> TOP
+ > TOPHA
⟫
STATUS: AKTIV
@@ -240,7 +240,7 @@
VERTRAULICH