Auto-backup: 2026-03-25 23:00

This commit is contained in:
Sascha 2026-03-25 23:00:07 +01:00
parent 900c5d0b08
commit 373ca27bc5
367 changed files with 297 additions and 28 deletions

View file

View file

View file

View file

@ -14,6 +14,41 @@ function ki_labor_init_content() {
$hero_4_url = get_template_directory_uri() . '/hero_4.png';
$hero_6_url = get_template_directory_uri() . '/hero_6.png';
$projects = array(
array(
'title' => 'Spotlight Such-Filter (kind:)',
'content' => '<h3>STATUS: SUCHANFRAGE PRÄZISIERT</h3><p>Die Spotlight-Suche auf dem Mac spuckt oft viel zu viele irrelevante Ergebnisse aus. Wenn du genau weißt, dass du ein PDF oder einen Ordner suchst, kannst du die Suche mit dem Parameter <code>kind:</code> drastisch eingrenzen.</p><div class="image-caption">[ ABB. 05: SPOTLIGHT FILTER-OVERRIDE ]</div><p><strong>Anwendung:</strong><br>Tippe z.B. <code>kind:pdf Rechnungen</code> in Spotlight. Spotlight filtert alles andere heraus und zeigt <b>ausschließlich</b> PDFs an.<br><br>Das funktioniert auch mit <code>kind:folder</code>, <code>kind:app</code> oder <code>kind:image</code>. Ein massiver Produktivitäts-Hack, um den ganzen Datenmüll bei der Suche auszublenden.</p>',
'status' => 'stable',
'label' => 'WORKFLOW',
'thumb' => $hero_6_url
),
array(
'title' => 'Koffein-Injektion (caffeinate)',
'content' => '<h3>STATUS: SCHLAFMODUS DEAKTIVIERT</h3><p>Wenn das Terminal glüht und ein langes Deployment oder Skript läuft, darf der Mac unter keinen Umständen einschlafen. Der Befehl <code>caffeinate -d</code> ist pures System-Amphetamin.</p><div class="image-caption">[ ABB. 01: CAFFEINATE OVERRIDE ]</div><p><strong>Anwendung:</strong><br>Einfach <code>caffeinate -d</code> ins Terminal feuern. Der Mac bleibt hellwach und verweigert den Ruhezustand, bis man den Prozess mit <code>CTRL + C</code> wieder beendet. Essentiell bei stundenlangen Prozessen.</p>',
'status' => 'stable',
'label' => 'NÜTZLICH',
'thumb' => $hero_1_url
),
array(
'title' => 'Der heimliche WLAN-Scanner',
'content' => '<h3>STATUS: AIRPORT CLI UNLOCKED</h3><p>Die macOS GUI versteckt die wirklich interessanten Netzwerkdaten vor dir. Aber tief im System verbirgt sich das Airport Command Line Tool, das dir absolute Detaildaten über die aktuelle WLAN-Verbindung ausspuckt.</p><div class="image-caption">[ ABB. 02: SIGNAL-NOISE-RATIO ANALYSE ]</div><p><strong>Anwendung:</strong><br><code>/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I</code><br><br>Ideal für Netzwerk-Diagnosen, um RSSI, Noise Level und TX-Raten direkt roh auszulesen. GUI-Ballast entfernt.</p>',
'status' => 'experimental',
'label' => 'DIAGNOSE',
'thumb' => $hero_2_url
),
array(
'title' => 'Terminal Voice-Engine (say)',
'content' => '<h3>STATUS: SPRACHMODUL AKTIV</h3><p>Das Terminal hat eine direkt angebundene Voice-Engine. Sehr nützlich für akustische Benachrichtigungen bei fertiggestellten Backend-Skripten, aber auch hervorragend für psychologische Kriegsführung geeignet.</p><div class="image-caption">[ ABB. 03: SYNTHETIC VOICE ENGINE ]</div><p><strong>Anwendung:</strong><br><code>say -v Anna "System kompromittiert"</code><br><br>Warum Systemtöne nutzen, wenn einem eine künstliche deutsche Stimme den Erfolg des Deployments ins Ohr flüstern kann?</p>',
'status' => 'stable',
'label' => 'KREATIV',
'thumb' => $hero_3_url
),
array(
'title' => 'System-Stress-Test (Fork Bomb)',
'content' => '<h3>STATUS: KERNEL PANIC INITIATED</h3><p>Ein absoluter Klassiker der Unix-Anarchie. Dieser Befehl testet, wie gut (oder schlecht) dein Mac mit sich rapide exponentiell vervielfältigenden Prozessen umgeht. Er definiert eine Funktion, die sich sofort selbst doppelt im Hintergrund aufruft.</p><div class="image-caption">[ ABB. 04: CASCADING PROCESS FAILURE ]</div><p><strong>Anwendung:</strong><br><code>:(){ :|:& };:</code><br><br><strong>VORSICHT:</strong> Dieser Befehl lastet das System in wenigen Sekunden zu 100% aus, bis es einfriert oder crasht. Benutzung auf eigene (Daten-)Gefahr.</p>',
'status' => 'corrupted',
'label' => 'GEFÄHRLICH',
'thumb' => $hero_4_url
),
array(
'title' => 'The n8n Resurrection',
'content' => '<h3>STATUS: OPERATION LIMBO-RECOVERY</h3><p>Die n8n-Instanz war nicht einfach nur "offline" – sie befand sich im digitalen Limbus der Docker-Hölle. Nach einem System-Crash auf dem Mac waren die Volumes zwar noch vorhanden, aber die Datenbank war korrupt und die Berechtigungen im Dateisystem völlig zerschossen. Ein klassischer Fall von Daten-Voodoo.</p><img src="'.$hero_1_url.'" alt="n8n Volume Analyse"><div class="image-caption">[ ABB. 01: VOLUME-ANALYSE IN ORBSTACK ]</div><p>Wir haben uns für den radikalen Weg entschieden: Weg von Docker Desktop, hin zu <strong>OrbStack</strong>. OrbStack bietet eine deutlich schlankere Linux-Kernel-Emulation, was für Node-basierte Anwendungen wie n8n den entscheidenden Performance-Vorteil bringt. <br><br><strong>Technische Details:</strong><br>- Migration der SQLite-Datenbank via Terminal-Dump.<br>- Neuzuweisung der User-IDs innerhalb der Docker-Container (chown-Hölle).<br>- Optimierung der Ressourcen-Limits: Von 4GB RAM auf 512MB bei doppelter Geschwindigkeit.<br><br>Das Ergebnis ist eine flüssige Automatisierung, die jetzt wieder im Hintergrund die Strippen zieht, während wir hier die Welt brennen sehen.</p>',
@ -48,6 +83,27 @@ function ki_labor_init_content() {
'status' => 'stable',
'label' => 'VERSTECKT',
'thumb' => $hero_6_url
),
array(
'title' => 'Operation: Apollo',
'content' => '<h3>STATUS: KENNEDY SPACE CENTER COMPROMISED</h3><p>Ein direkter Uplink in das Herzstück der NASA-Server. Wir haben die Barrieren des JPL durchbrochen, um Echtzeit-Telemetriedaten abzugreifen.</p><div class="image-caption">[ ABB. 07: NASA MAINFRAME INFILTRATION ]</div><p><strong>Mechanik des Hacks:</strong><br>- <strong>Trigger:</strong> Terminal-Eingabe "nasa".<br>- <strong>Visualisierung:</strong> Stufenweiser Firewall-Bypass, gefakter Download-Stream und ASCII-Art Deployment.<br>- <strong>Resultat:</strong> SYSTEM_BREACH am Kennedy Space Center.<br><br>Warum? Weil das KI-Labor keine terrestrischen Grenzen kennt. Wenn uns der Planet langweilt, hacken wir uns die Sterne.</p>',
'status' => 'experimental',
'label' => 'TOP SECRET',
'thumb' => $hero_3_url
),
array(
'title' => 'Project: ICMP Echo',
'content' => '<h3>STATUS: LATENZ-ANALYSE AKTIV</h3><p>Der "ping"-Befehl ist ein essenzielles Werkzeug für jeden Cyber-Overlord. Er prüft die Integrität unserer Verbindung durch ein klassisches 4-Paket-ICMP-Echo-Request. Damit wird sichergestellt, dass das KI-Labor nicht im Void des Cyberspace verloren geht.</p><p><strong>Mechanik des Pings:</strong><br>- <strong>Trigger:</strong> Terminal-Eingabe "ping".<br>- <strong>Visualisierung:</strong> Sequentieller Output von 64-Byte Paketen auf lokaler Ebene.<br>- <strong>Resultat:</strong> 0% Packet Loss garantiert.</p>',
'status' => 'stable',
'label' => 'DIAGNOSE',
'thumb' => $hero_1_url
),
array(
'title' => 'Project: Flux Overdrive',
'content' => '<h3>STATUS: SCHWÄBISCH ACCELERATED</h3><p>Das System war zu langsam. Zu statisch. Zu berechenbar. Also haben wir <strong>Flux</strong> ins Leben gerufen. "Flux" bedeutet im Schwäbischen nicht einfach nur schnell – es bedeutet hastig, rasant und gnadenlos zielgerichtet. Dieser Befehl übertaktet das Bewusstsein des KI-Labors auf ein beängstigendes Level.</p><p><strong>Mechanik des Flux:</strong><br>- <strong>Trigger:</strong> Terminal-Eingabe "flux".<br>- <strong>Visualisierung:</strong> Drop einer aggressiven ASCII-Engine-Signatur und Bestätigung des Overdrives.<br>- <strong>Resultat:</strong> Die Entwicklung beschleunigt sich maßlos.</p>',
'status' => 'corrupted',
'label' => 'ÜBERTAKTET',
'thumb' => $hero_2_url
)
);

View file

@ -31,11 +31,17 @@
<button id="btn-security" class="switch-btn">SECURITY-BYPASS</button>
</div>
<div id="system-log">
<div id="log-output"></div>
<div class="terminal-input-line">
<span class="prompt">></span>
<input type="text" id="terminal-input" placeholder="SYSTEMBEFEHL EINGEBEN (help für Liste)..." autocomplete="off">
<div class="terminal-wrapper" style="margin-top: 30px;">
<div class="terminal-topbar" style="display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 5px;">
<span style="color: var(--accent-gold); font-size: 0.8rem; letter-spacing: 1px;">// SECURE_TERMINAL_ACCESS</span>
<button id="btn-sfx" style="background: transparent; border: 1px solid #0f0; color: #0f0; font-family: 'Courier New', monospace; font-size: 0.7rem; cursor: pointer; padding: 2px 8px; transition: all 0.2s;">[ SFX: ON ]</button>
</div>
<div id="system-log" style="margin-top: 0;">
<div id="log-output"></div>
<div class="terminal-input-line">
<span class="prompt">></span>
<input type="text" id="terminal-input" placeholder="SYSTEMBEFEHL EINGEBEN (help für Liste)..." autocomplete="off">
</div>
</div>
</div>

View file

@ -47,9 +47,64 @@
osc.stop(audioCtx.currentTime + 0.03);
}
// --- INTERACTION HELPER FOR AUDIO ---
// --- AUDIO ENGINE SFX ---
let sfxEnabled = true;
function playKeyClick() {
if (!sfxEnabled) return;
ensureAudio();
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = 'square';
osc.frequency.setValueAtTime(800, audioCtx.currentTime);
osc.frequency.exponentialRampToValueAtTime(100, audioCtx.currentTime + 0.02);
gain.gain.setValueAtTime(0.015, audioCtx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.02);
osc.connect(gain);
gain.connect(audioCtx.destination);
osc.start();
osc.stop(audioCtx.currentTime + 0.02);
}
function playErrorBeep() {
if (!sfxEnabled) return;
ensureAudio();
const osc = audioCtx.createOscillator();
const gain = audioCtx.createGain();
osc.type = 'sawtooth';
osc.frequency.setValueAtTime(150, audioCtx.currentTime);
osc.frequency.setValueAtTime(120, audioCtx.currentTime + 0.1);
gain.gain.setValueAtTime(0.04, audioCtx.currentTime);
gain.gain.linearRampToValueAtTime(0.01, audioCtx.currentTime + 0.3);
osc.connect(gain);
gain.connect(audioCtx.destination);
osc.start();
osc.stop(audioCtx.currentTime + 0.3);
}
function showSubtleMatrix() {
setTimeout(() => {
const matrixCanvas = document.getElementById('matrix-canvas');
if (matrixCanvas && !document.body.classList.contains('mode-kernel')) {
matrixCanvas.style.opacity = '0.15';
setTimeout(() => {
if (!document.body.classList.contains('mode-kernel')) {
matrixCanvas.style.opacity = '0';
}
}, 4000);
}
}, 100);
}
function ensureAudio() {
if (audioCtx && audioCtx.state === 'suspended') {
if (!audioCtx) audioCtx = new (window.AudioContext || window.webkitAudioContext)();
if (audioCtx.state === 'suspended') {
audioCtx.resume();
}
}
@ -79,6 +134,7 @@
bootScreen.style.transition = 'opacity 1s';
bootScreen.style.opacity = '0';
mainContent.classList.add('visible');
showSubtleMatrix();
setTimeout(() => {
bootScreen.style.display = 'none';
}, 1000);
@ -103,6 +159,7 @@
bootScreen.style.display = 'none';
mainContent.classList.add('visible');
mainContent.style.opacity = '1';
showSubtleMatrix();
}
// --- LOG & TERMINAL LOGIC ---
@ -135,12 +192,26 @@
}
}, 30000);
const btnSfx = document.getElementById('btn-sfx');
if (btnSfx) {
btnSfx.addEventListener('click', () => {
sfxEnabled = !sfxEnabled;
btnSfx.textContent = sfxEnabled ? '[ SFX: ON ]' : '[ SFX: OFF ]';
btnSfx.style.color = sfxEnabled ? '#0f0' : '#888';
btnSfx.style.borderColor = sfxEnabled ? '#0f0' : '#444';
if (sfxEnabled) playKeyClick();
});
}
terminalInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
playKeyClick();
const command = this.value.toLowerCase().trim();
log('> ' + command, 'user-cmd');
this.value = '';
executeCommand(command);
} else if (e.key.length === 1 || e.key === 'Backspace' || e.key === 'Tab') {
playKeyClick();
}
});
@ -154,6 +225,10 @@
log(' - anarchy : Realitätsverzerrung');
log(' - bypass : Sicherheits-Override');
log(' - whoami : Identitäts-Check');
log(' - trace : Origin-IP lokalisieren');
log(' - ping : Netzwerk-Latenz Check');
log(' - flux : KI-Overdrive aktivieren');
log(' - nasa : NASA Mainframe Infiltration');
log(' - destruct : System-Selbstzerstörung');
log(' - reboot : Manueller System-Neustart');
log(' - clear : Log-Speicher löschen');
@ -203,7 +278,70 @@
case 'anarchy': document.getElementById('btn-anarchy').click(); break;
case 'bypass': document.getElementById('btn-security').click(); break;
case 'clear': logOutput.innerHTML = ''; break;
case 'trace':
log('>> IP VERBINDUNG HERGESTELLT', 'info');
log('>> TRACING ORIGIN NODE...', 'warn');
setTimeout(() => {
const fakeIp = Math.floor(Math.random()*255) + '.' + Math.floor(Math.random()*255) + '.' + Math.floor(Math.random()*255) + '.' + Math.floor(Math.random()*255);
log('>> LOCATED: ' + fakeIp + ' (LATENCY 12ms)', 'ok');
log('>> INITIATING GEO-MAPPING...', 'info');
setTimeout(() => {
const map = `\n . _..::__: ,-"-"._ |] , _,.__\n _.___ _ _<_>\`-._\`. -. \\ _-_\\. __,-' _ .\n \`'."\`/\` _ \`" \`" " " \`_,-' \n`;
log('<pre style="font-size:10px;line-height:10px;color:#0f0;">' + map + '</pre>', 'ghost');
log('>> TARGET ACQUIRED.', 'warn');
}, 1000);
}, 1500);
break;
case 'ping':
log('>> PINGING LOCALHOST...', 'info');
let pcount = 0;
const pTimer = setInterval(() => {
pcount++;
log(`64 bytes from 127.0.0.1: icmp_seq=${pcount} ttl=64 time=${Math.floor(Math.random()*5+1)} ms`, 'ghost');
if (pcount >= 4) {
clearInterval(pTimer);
log('>> 4 packets transmitted, 4 received, 0% packet loss', 'ok');
}
}, 500);
break;
case 'flux':
log('>> ACTIVATING FLUX OVERDRIVE...', 'warn');
if (typeof playKeyClick === 'function') playKeyClick();
setTimeout(() => {
const fluxAscii = `\n _____ _ _ ___ __\n | ___| | | | | \\ \\/ /\n | |_ | | | | | |\\ / \n | _| | |__| |_| |/ \\ \n |_| |_____\\___//_/\\_\\\n `;
log('<pre style="font-size:12px;line-height:12px;color:#0f0;font-weight:bold;">' + fluxAscii + '</pre>', 'ok');
log('>> FLUX AI ENGINE ONLINE.', 'info');
log('>> SPEED: HASTIG. MODE: SCHWÄBISCH ACCELERATED.', 'crit');
}, 500);
break;
case 'nasa':
log('>> ESTABLISHING SECURE UPLINK TO KENNEDY SPACE CENTER...', 'info');
setTimeout(() => {
log('>> BYPASSING FIREWALL [JPL-NODE-7]...', 'warn');
if (typeof playKeyClick === 'function') playKeyClick();
setTimeout(() => {
log('>> ACCESSING VOYAGER TELEMETRY DATA...', 'ok');
if (typeof playKeyClick === 'function') playKeyClick();
let downloadProgress = 0;
const downloadInterval = setInterval(() => {
downloadProgress += Math.floor(Math.random() * 15) + 5;
if (downloadProgress >= 100) {
downloadProgress = 100;
clearInterval(downloadInterval);
log(`>> DOWNLOADING CLASSIFIED FOLDERS [${downloadProgress}%]`, 'warn');
log('>> NASA MAINFRAME COMPROMISED. ALL SECRETS SECURED.', 'crit');
const asciiSat = `\n .\n / \\\n / \\\n /_____\\\n | |\n /| O |\\\n / |_____| \\\n / / \\ \\`;
log('<pre style="font-size:10px;line-height:10px;color:#d4af37;">' + asciiSat + '</pre>', 'ghost');
if (typeof playErrorBeep === 'function') playErrorBeep();
} else {
log(`>> DOWNLOADING CLASSIFIED FOLDERS [${downloadProgress}%]`, 'ghost');
}
}, 400);
}, 1000);
}, 1000);
break;
case 'destruct':
playErrorBeep();
log('!! SELF-DESTRUCT PROTOCOL INITIATED !!', 'error');
let count = 5;
const timer = setInterval(() => {
@ -219,7 +357,9 @@
}
}, 1000);
break;
default: log('FEHLER: BEFEHL "' + cmd + '" UNBEKANNT.', 'error');
default:
playErrorBeep();
log('FEHLER: BEFEHL "' + cmd + '" UNBEKANNT.', 'error');
}
}
@ -232,6 +372,40 @@
});
};
setupBtn('btn-kernel', 'mode-kernel', '>> MATRIX AKTIVIERT', '>> MATRIX DEAKTIVIERT');
// Matrix Rain Canvas
const canvas = document.createElement('canvas');
canvas.id = 'matrix-canvas';
canvas.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;opacity:0;transition:opacity 1s;pointer-events:none;';
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
window.addEventListener('resize', () => { canvas.width = window.innerWidth; canvas.height = window.innerHeight; });
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$+-*/=%"\'#&_(),.;:?!\\|{}<>[]^~';
const fontSize = 16;
let columns = Math.max(1, Math.floor(canvas.width / fontSize));
let drops = [];
for(let x = 0; x < columns; x++) drops[x] = 1;
function drawMatrix() {
ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#0F0';
ctx.font = fontSize + 'px monospace';
for(let i = 0; i < drops.length; i++) {
const text = letters.charAt(Math.floor(Math.random() * letters.length));
ctx.fillText(text, i * fontSize, drops[i] * fontSize);
if(drops[i] * fontSize > canvas.height && Math.random() > 0.975) drops[i] = 0;
drops[i]++;
}
}
setInterval(drawMatrix, 33);
document.getElementById('btn-kernel')?.addEventListener('click', () => {
canvas.style.opacity = document.body.classList.contains('mode-kernel') ? '0.35' : '0';
if(document.body.classList.contains('mode-kernel')) document.body.style.backgroundColor = 'transparent';
});
setupBtn('btn-anarchy', 'mode-anarchy', '>> ANARCHIE ENGAGED', '>> ORDNUNG HERGESTELLT');
setupBtn('btn-security', 'mode-security', '!! SECURITY BYPASS !!', '>> STABILIZED');
@ -249,6 +423,26 @@
});
});
// Konami / SASCHA Easter Egg
let secretBuffer = '';
document.addEventListener('keydown', (e) => {
if (document.activeElement === terminalInput) return;
secretBuffer += e.key.toLowerCase();
if (secretBuffer.length > 10) secretBuffer = secretBuffer.slice(-10);
if (secretBuffer.includes('sascha')) {
log('>> OVERLORD COMMAND OVERRIDE AUTHORIZED.', 'crit');
document.body.classList.add('mode-security');
if (!document.body.classList.contains('mode-kernel')) document.getElementById('btn-kernel').click();
const overlay = document.createElement('div');
overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background:rgba(0,0,0,0.8);color:#0f0;display:flex;align-items:center;justify-content:center;font-size:3rem;font-family:monospace;pointer-events:none;';
overlay.innerHTML = '<h1 style="animation: shake 0.5s infinite;">GOD MODE UNLOCKED</h1>';
document.body.appendChild(overlay);
if (sfxEnabled) playErrorBeep();
setTimeout(() => document.body.removeChild(overlay), 4000);
secretBuffer = '';
}
});
log('>> SYSTEM READY. WAITING FOR COMMANDS...');
});
})();

View file

@ -212,9 +212,17 @@ body.mode-kernel .hero-image {
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
body.mode-anarchy {
animation: shake 0.3s infinite;
/* Ein fieser Red-Tint Filter auf dem gesamten Body, ohne das Layout zu sprengen */
filter: grayscale(1) sepia(1) hue-rotate(-50deg) saturate(5) contrast(2);
background-color: #111;
}
body.mode-anarchy .container {
animation: shake 0.5s infinite;
filter: invert(1) contrast(2);
/* Container behält sein Box-Model intakt */
animation: none;
filter: none;
}
/* 3. SECURITY BYPASS (Red Alert) */
@ -241,10 +249,10 @@ body.mode-security::after {
/* 4. GHOST MODE (Stealth & Invisibility) */
body.mode-ghost #system-log {
opacity: 0.15;
filter: blur(1px);
opacity: 0.8;
transition: all 2s ease;
animation: ghost-pulse 4s infinite;
border-color: rgba(0, 255, 0, 0.3);
}
body.mode-ghost .portfolio-grid {
@ -252,14 +260,16 @@ body.mode-ghost .portfolio-grid {
pointer-events: none;
}
body.mode-ghost #terminal-input {
color: #111; /* Fast unsichtbar */
body.mode-ghost #terminal-input,
body.mode-ghost .prompt {
color: rgba(0, 255, 0, 0.8); /* Deutlich lesbar bleiben */
text-shadow: 0 0 5px rgba(0, 255, 0, 0.5);
}
@keyframes ghost-pulse {
0% { opacity: 0.15; }
50% { opacity: 0.3; }
100% { opacity: 0.15; }
0% { opacity: 0.7; }
50% { opacity: 1.0; }
100% { opacity: 0.7; }
}
/* TERMINAL STYLES */
@ -403,14 +413,8 @@ body.mode-security .hero-image {
body.mode-anarchy .hero-image {
filter: invert(1) contrast(3);
clip-path: polygon(0 0, 100% 0, 100% 10%, 0 10%, 0 20%, 100% 20%, 100% 30%, 0 30%); /* Glitch-Look */
animation: red-alert 0.5s infinite;
}
@keyframes glitch-slice {
0% { clip-path: inset(10% 0 30% 0); }
50% { clip-path: inset(50% 0 10% 0); }
100% { clip-path: inset(20% 0 60% 0); }
/* Das Bild wird nicht mehr gnadenlos abgeschnitten, sondern erbt den Portfolio-Glitch Effekt */
animation: portfolio-glitch 0.2s infinite;
}
.mission-content img {
@ -464,10 +468,19 @@ body.mode-anarchy .hero-image {
justify-content: flex-start;
}
.portfolio-item:hover {
.portfolio-link:hover .portfolio-item {
border-color: var(--accent-orange);
box-shadow: 0 0 15px rgba(255, 69, 0, 0.3);
transform: translateY(-5px);
box-shadow: 0 0 25px rgba(255, 69, 0, 0.4);
animation: portfolio-glitch 0.3s infinite;
z-index: 10;
}
@keyframes portfolio-glitch {
0% { transform: translate(0, -5px) skew(0deg); filter: drop-shadow(2px 0 0 rgba(255,0,0,0.5)) drop-shadow(-2px 0 0 rgba(0,0,255,0.5)); }
25% { transform: translate(-2px, -4px) skew(1deg); filter: drop-shadow(-2px 0 0 rgba(255,0,0,0.5)) drop-shadow(2px 0 0 rgba(0,0,255,0.5)); }
50% { transform: translate(2px, -6px) skew(-1deg); filter: drop-shadow(2px 0 0 rgba(255,0,0,0.5)) drop-shadow(-2px 0 0 rgba(0,0,255,0.5)); }
75% { transform: translate(-1px, -5px) skew(2deg); filter: drop-shadow(-2px 0 0 rgba(255,0,0,0.5)) drop-shadow(2px 0 0 rgba(0,0,255,0.5)); }
100% { transform: translate(0, -5px) skew(0deg); filter: drop-shadow(2px 0 0 rgba(255,0,0,0.5)) drop-shadow(-2px 0 0 rgba(0,0,255,0.5)); }
}
/* PROJECT THUMBNAILS (Evidence Photo Style) */

Some files were not shown because too many files have changed in this diff Show more