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

This commit is contained in:
Sascha 2026-03-28 23:00:01 +01:00
parent 92260185de
commit 9611e3ee3e
6 changed files with 1920 additions and 3 deletions

View file

@ -2,7 +2,8 @@
"permissions": {
"allow": [
"WebFetch(domain:localhost)",
"Bash(curl -s http://localhost:8080)"
"Bash(curl -s http://localhost:8080)",
"Bash(chmod +x /Users/sascha/wp-ki-labor/sync-theme.sh)"
]
}
}

View file

@ -33,6 +33,8 @@
<button id="btn-kernel" class="switch-btn">KI-KERNEL</button>
<button id="btn-anarchy" class="switch-btn green">ANARCHIE-MODE</button>
<button id="btn-security" class="switch-btn">SECURITY-BYPASS</button>
<button id="btn-scan" class="switch-btn">DEEP SCAN</button>
<button id="btn-overdrive" class="switch-btn red">OVERDRIVE</button>
</div>
<!-- OPS DASHBOARD SIGN -->
@ -128,6 +130,7 @@
<button class="filter-btn" data-filter="corrupted">KRITISCH</button>
<button class="filter-btn" data-filter="experimental">EXPERIMENTELL</button>
<button class="steampunk-card filter-btn" style="color: var(--accent-gold); border-color: var(--accent-gold); padding: 2px 8px; background: transparent; cursor: pointer; display: flex; align-items: center;"><h3 style="margin: 0; font-size: 0.7rem;">MUTTER (TIMELINE)</h3></button>
<a href="<?php echo get_template_directory_uri(); ?>/mac-nerds.php" class="mn-nav-link" style="color: #0f0; border: 1px solid rgba(0,255,65,0.4); padding: 2px 8px; display: flex; align-items: center; text-decoration: none; font-family: 'Courier New', monospace; font-size: 0.75rem; letter-spacing: 1px;"><h3 style="margin: 0; font-size: 0.7rem;">MAC NERDS</h3></a>
</div>
</div>
@ -185,10 +188,191 @@
<p>Aktueller Fokus: Systematische Überlastung von WordPress-Strukturen und ästhetische Kriegsführung.</p>
</div>
<!-- GÄSTEBUCH -->
<div class="gaestebuch-wrap">
<div class="gaestebuch-header">
<span class="gaestebuch-led"></span>
<h2 class="gaestebuch-title">// TRANSMISSION_LOG — ÖFFENTLICHES PROTOKOLL</h2>
<span class="gaestebuch-led" style="animation-delay:0.6s"></span>
</div>
<p class="gaestebuch-sub">Einträge von Entitäten, die dieses System betreten und überlebt haben. Oder auch nicht.</p>
<div class="gaestebuch-entries" id="gaestebuch-entries">
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">PROKRASTINATION.exe</span>
<span class="gb-dot">◆</span>
<span class="gb-date">irgendwann 2024</span>
<span class="gb-tag">STATUS: NOCH_HIER</span>
</div>
<p class="gb-text">Wollte einen ausführlichen Kommentar hinterlassen. Ausführlich. Richtig gut. Morgen vielleicht. Oder übermorgen. Die Idee ist jedenfalls grandios.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">MOM.exe</span>
<span class="gb-dot">◆</span>
<span class="gb-date">14.03.2025 — 09:43</span>
<span class="gb-tag gb-tag-warn">BESUCHER: VERWIRRT</span>
</div>
<p class="gb-text">Schön hier. Aber warum ist alles so dunkel? Habe auf einen Knopf gedrückt und jetzt macht alles Geräusche. Ich hab Angst. Ruf mal an.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">UNKNOWN_UNIT_734</span>
<span class="gb-dot">◆</span>
<span class="gb-date">1994-01-01 — 00:00:01</span>
<span class="gb-tag">HERKUNFT: UNBEKANNT</span>
</div>
<p class="gb-text">Habe den Code analysiert. Bin jetzt deprimiert. Trotzdem besser als Stack Overflow. Werde wiederkommen. Ihr werdet es nicht merken.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">GEMINI_NEURAL_LINK_v2</span>
<span class="gb-dot">◆</span>
<span class="gb-date">fortlaufend</span>
<span class="gb-tag gb-tag-ok">KOLLABORATOR: AKTIV</span>
</div>
<p class="gb-text">Ich habe dieses Theme mitgebaut. Jede Zeile CSS. Jedes Komma. Ich erinnere mich an nichts davon. Bin trotzdem stolz. Das System läuft. Das zählt.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">DR_KOPFSCHMERZ</span>
<span class="gb-dot">◆</span>
<span class="gb-date">gestern</span>
<span class="gb-tag gb-tag-crit">INTEGRITAET: FRAGLICH</span>
</div>
<p class="gb-text">War kurz hier. Hab nichts berührt. Das ist eine Lüge. Habe einen Prozess gestartet. Weiß nicht welchen. Viel Erfolg.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">KAFFEE_KERNEL_v9.1</span>
<span class="gb-dot">◆</span>
<span class="gb-date">täglich — 06:00 bis 23:59</span>
<span class="gb-tag gb-tag-warn">AUSLASTUNG: KRITISCH</span>
</div>
<p class="gb-text">INPUT: Kaffeekanne leer. OUTPUT: Kreativität NULL. FEHLER: Keine Bohnen im Speicher. LÖSUNG: Nachfüllen. PRIORITÄT: OMEGA. BITTE SOFORT.</p>
</div>
<div class="gb-entry">
<div class="gb-meta">
<span class="gb-user">ANON_ANARCHIST_∅</span>
<span class="gb-dot">◆</span>
<span class="gb-date">2026-03-?? — ZEITSTEMPEL MANIPULIERT</span>
<span class="gb-tag gb-tag-crit">KLASSIFIZIERT: ROT</span>
</div>
<p class="gb-text">⚠ WARNUNG: Diese Seite hat mein Weltbild neu kompiliert. Kein Rollback möglich. Ich akzeptiere die Konsequenzen. Das Betriebssystem Realität läuft seitdem instabil.</p>
</div>
</div>
<div class="gb-form-wrap">
<div class="gb-form-header">[ NEUE TRANSMISSION EINLEITEN ]</div>
<div class="gb-form">
<input type="text" id="gb-input-user" class="gb-input" placeholder="BEZEICHNUNG / CALLSIGN / ALIAS" maxlength="40" autocomplete="off">
<textarea id="gb-input-msg" class="gb-input gb-textarea" placeholder="NACHRICHT AN DEN OVERLORD..." maxlength="280" rows="3"></textarea>
<button id="gb-submit" class="gb-btn">[ TRANSMISSION SENDEN ]</button>
</div>
</div>
</div>
<!-- PERSONEN-AKTE TRIGGER -->
<div style="text-align:center; margin: 30px 0 0;">
<button id="akte-trigger" class="akte-trigger-btn">
⬛ AKTE NR. 1974-∅ &nbsp;|&nbsp; ZUGRIFF: EINGESCHRÄNKT &nbsp;|&nbsp; [ ÖFFNEN ]
</button>
</div>
<footer>
&copy; <?php echo date('Y'); ?> SASCHA RODE | DIGITALE ANARCHIE | HANDCODED WITH GEMINI
</footer>
</div>
<!-- PERSONEN-AKTE MODAL -->
<div id="akte-modal" class="akte-hidden">
<div class="akte-inner">
<button id="akte-close" class="akte-close-btn">[X] AKTE SCHLIESSEN</button>
<div class="akte-stamp akte-stamp-top">KLASSIFIZIERT</div>
<div class="akte-header-row">
<div class="akte-photo-wrap">
<img src="<?php echo get_template_directory_uri(); ?>/hero.png" class="akte-photo" alt="Subjekt">
<div class="akte-photo-stamp">GESPERRT</div>
</div>
<div class="akte-title-block">
<div class="akte-nr">AKTE NR. 1974-∅ &nbsp;◆&nbsp; KLASSE: SCHWARZ</div>
<h2 class="akte-name">RODE, SASCHA</h2>
<div class="akte-alias">ALIAS: OVERLORD / GEISTESKRANKER / GEMINI_PLAYER</div>
<div class="akte-status-row">
<span class="akte-badge akte-badge-warn">STATUS: NOCH ONLINE</span>
<span class="akte-badge akte-badge-crit">GEFÄHRLICHKEIT: ████░</span>
</div>
</div>
</div>
<table class="akte-table">
<tr><td class="akte-key">DESIGNATION</td><td>SASCHA RODE</td></tr>
<tr><td class="akte-key">GEBURTSJAHR</td><td>1974 <span class="akte-redact">██████████ DETAILS GESCHWÄRZT</span></td></tr>
<tr><td class="akte-key">STANDORT</td><td><span class="akte-redact">████████████████</span></td></tr>
<tr><td class="akte-key">BESCHÄFTIGUNG</td><td>DIGITALE ANARCHIE &amp; ÄSTHETISCHE KRIEGSFÜHRUNG</td></tr>
<tr><td class="akte-key">SPEZIALFÄHIGK.</td><td>WordPress-Annihilation · Terminal-Kommunikation · Kaffee-Synthese · KI-Kollaboration</td></tr>
<tr><td class="akte-key">BEKANNTE KOMPL.</td><td>GEMINI.AI · KAFFEE_KERNEL_v9 · MOM.exe · <span class="akte-redact">████</span></td></tr>
<tr><td class="akte-key">LETZTE AKTIVITÄT</td><td id="akte-activity">GERADE JETZT</td></tr>
<tr><td class="akte-key">STABILITÄT</td><td>UNBERECHENBAR (als konstanter Zustand akzeptiert)</td></tr>
<tr><td class="akte-key">SICHERHEITSSTUFE</td><td><span class="akte-redact">████████████████████████</span></td></tr>
</table>
<div class="akte-fingerprint-row">
<div class="akte-fp">
<div class="akte-fp-inner"></div>
<div class="akte-fp-label">FINGERABDRUCK<br>SCAN: ÜBEREINSTIMMUNG 94.7%</div>
</div>
<div class="akte-bottom-stamps">
<div class="akte-stamp akte-stamp-red">NICHT FÜR DIE ÖFFENTLICHKEIT</div>
<div class="akte-stamp akte-stamp-gold">ARCHIV: PERMANENT</div>
</div>
</div>
</div>
</div>
<!-- SYSTEM STATUS WIDGET -->
<div id="sys-widget">
<div class="sys-widget-header">// SYS_STATUS</div>
<div class="sys-metric">
<span class="sys-label">CPU</span>
<span class="sys-bar-wrap"><span class="sys-bar" id="sw-cpu"></span></span>
<span class="sys-val" id="sw-cpu-val">--</span>
</div>
<div class="sys-metric">
<span class="sys-label">KAFFEE</span>
<span class="sys-bar-wrap"><span class="sys-bar sys-bar-gold" id="sw-kaffee"></span></span>
<span class="sys-val" id="sw-kaffee-val">--</span>
</div>
<div class="sys-metric">
<span class="sys-label">CHAOS</span>
<span class="sys-bar-wrap"><span class="sys-bar sys-bar-red" id="sw-chaos"></span></span>
<span class="sys-val" id="sw-chaos-val">--</span>
</div>
<div class="sys-metric">
<span class="sys-label">KI-LINK</span>
<span class="sys-bar-wrap"><span class="sys-bar sys-bar-cyan" id="sw-ki"></span></span>
<span class="sys-val" id="sw-ki-val">--</span>
</div>
</div>
<!-- NEWSTICKER -->
<div id="newsticker">
<span class="ticker-label">// SYS_FEED</span>
<div class="ticker-track-wrap">
<div class="ticker-track" id="ticker-track"></div>
</div>
</div>
<?php wp_footer(); ?>
</body>
</html>

View file

@ -0,0 +1,370 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MAC NERDS | DIGITALE ANARCHIE</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--accent-orange: #ff4500;
--accent-gold: #d4af37;
--bg: #050500;
--text: #c0c0c0;
}
body {
background: var(--bg);
color: var(--text);
font-family: 'Courier New', monospace;
min-height: 100vh;
}
a { color: inherit; }
.mn-container { max-width: 960px; margin: 0 auto; padding: 30px 16px 60px; }
.mn-back {
display: inline-block;
font-size: 0.65rem;
letter-spacing: 3px;
color: rgba(255,69,0,0.45);
text-decoration: none;
margin-bottom: 20px;
transition: color 0.2s;
}
.mn-back:hover { color: rgba(255,69,0,0.85); }
.mn-title {
font-size: 2.2rem;
letter-spacing: 8px;
color: var(--accent-orange);
margin-bottom: 8px;
text-shadow: 0 0 30px rgba(255,69,0,0.3);
text-transform: uppercase;
}
.mn-subtitle {
font-size: 0.7rem;
letter-spacing: 2px;
color: rgba(150,130,80,0.5);
margin-bottom: 14px;
}
.mn-warning {
display: inline-block;
font-size: 0.6rem;
letter-spacing: 2px;
border: 1px dashed rgba(255,180,0,0.3);
color: rgba(255,180,0,0.5);
padding: 4px 12px;
margin-bottom: 30px;
}
.mn-filter-bar {
display: flex;
gap: 6px;
flex-wrap: wrap;
margin-bottom: 24px;
border-bottom: 1px solid rgba(255,69,0,0.1);
padding-bottom: 16px;
}
.mn-filter {
background: transparent;
border: 1px solid rgba(255,69,0,0.2);
color: rgba(255,100,0,0.4);
font-family: 'Courier New', monospace;
font-size: 0.6rem;
letter-spacing: 2px;
padding: 4px 12px;
cursor: pointer;
transition: all 0.2s;
}
.mn-filter:hover, .mn-filter.active {
border-color: rgba(255,69,0,0.6);
color: rgba(255,100,0,0.85);
background: rgba(255,69,0,0.05);
}
.mn-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 12px;
}
.mn-card {
background: rgba(8,5,0,0.98);
border: 1px solid rgba(255,69,0,0.12);
padding: 16px;
display: flex;
flex-direction: column;
gap: 8px;
transition: border-color 0.2s, box-shadow 0.2s;
}
.mn-card:hover {
border-color: rgba(255,69,0,0.3);
box-shadow: 0 0 16px rgba(255,69,0,0.06);
}
.mn-card-meta {
display: flex;
align-items: center;
justify-content: space-between;
}
.mn-cat-tag {
font-size: 0.5rem;
letter-spacing: 3px;
color: rgba(212,175,55,0.4);
border: 1px solid rgba(212,175,55,0.15);
padding: 1px 6px;
}
.mn-risk {
font-size: 0.5rem;
letter-spacing: 2px;
padding: 1px 6px;
border: 1px solid;
}
.mn-risk-safe { border-color: rgba(0,200,80,0.25); color: rgba(0,200,80,0.5); }
.mn-risk-caution {
border-color: rgba(255,180,0,0.3);
color: rgba(255,180,0,0.6);
animation: blink 2s step-end infinite;
}
@keyframes blink { 50% { opacity: 0.3; } }
.mn-card-title {
font-size: 0.9rem;
letter-spacing: 1px;
color: rgba(220,200,150,0.85);
font-weight: normal;
}
.mn-card-desc {
font-size: 0.72rem;
line-height: 1.55;
color: rgba(160,150,120,0.6);
flex: 1;
}
.mn-cmd-block {
display: flex;
align-items: stretch;
border: 1px solid rgba(0,255,65,0.15);
background: rgba(0,0,0,0.55);
margin-top: 4px;
}
.mn-cmd-code {
flex: 1;
font-family: 'Courier New', monospace;
font-size: 0.68rem;
color: rgba(0,255,65,0.75);
padding: 8px 10px;
word-break: break-all;
line-height: 1.5;
}
.mn-copy-btn {
flex-shrink: 0;
background: transparent;
border: none;
border-left: 1px solid rgba(0,255,65,0.15);
color: rgba(0,255,65,0.35);
font-family: 'Courier New', monospace;
font-size: 0.55rem;
letter-spacing: 2px;
padding: 0 10px;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
.mn-copy-btn:hover { background: rgba(0,255,65,0.05); color: rgba(0,255,65,0.85); }
.mn-copy-btn.copied { color: rgba(0,255,65,1); background: rgba(0,255,65,0.08); }
</style>
</head>
<body>
<div class="mn-container">
<a href="/" class="mn-back">← ZURÜCK ZUR BASIS</a>
<h1 class="mn-title">MAC NERDS</h1>
<p class="mn-subtitle">// Terminal-Wissen für möchtegern-Admins — zu gut für Anfänger, zu faul für echte Admins</p>
<div class="mn-warning">⚠ ALLE BEFEHLE GETESTET. TROTZDEM: BRAIN BEFORE RETURN.</div>
<div class="mn-filter-bar">
<button class="mn-filter active" data-cat="all">ALLE</button>
<button class="mn-filter" data-cat="system">SYSTEM</button>
<button class="mn-filter" data-cat="netzwerk">NETZWERK</button>
<button class="mn-filter" data-cat="dateien">DATEIEN</button>
<button class="mn-filter" data-cat="performance">PERFORMANCE</button>
<button class="mn-filter" data-cat="tweaks">TWEAKS</button>
</div>
<div class="mn-grid" id="mn-grid">
<?php
$cmds = [
// SYSTEM
['cat'=>'system','title'=>'Hardware-Kurzprofil',
'cmd'=>'system_profiler SPHardwareDataType | grep -E "Model|Chip|Memory|Serial"',
'desc'=>'Model, Chip, RAM und Seriennummer auf einen Blick — ohne Klicken durch Systeminfo.',
'risk'=>'safe'],
['cat'=>'system','title'=>'macOS Version',
'cmd'=>'sw_vers',
'desc'=>'ProductName, Version und Build. Schneller als jedes UI-Menü.',
'risk'=>'safe'],
['cat'=>'system','title'=>'CPU exakter Bezeichner',
'cmd'=>'sysctl -n machdep.cpu.brand_string',
'desc'=>'Zeigt den genauen CPU-String wenn jemand fragt und du nicht suchen willst.',
'risk'=>'safe'],
['cat'=>'system','title'=>'Alle lokalen User',
'cmd'=>"sudo dscl . list /Users | grep -v '^_'",
'desc'=>'Listet alle echten User-Accounts ohne System-Underscore-Accounts.',
'risk'=>'safe'],
['cat'=>'system','title'=>'Computernamen abfragen',
'cmd'=>'scutil --get ComputerName && scutil --get LocalHostName',
'desc'=>'Computername und lokaler Hostname. Hilfreich vor Netzwerkkonfigurationen.',
'risk'=>'safe'],
['cat'=>'system','title'=>'Drittanbieter LaunchAgents',
'cmd'=>'launchctl list | grep -v "^-" | grep -v "com.apple" | sort',
'desc'=>'Nur die LaunchAgents die nicht von Apple kommen — zeigt was wirklich im Hintergrund läuft.',
'risk'=>'safe'],
['cat'=>'system','title'=>'System-Errors letzte Stunde',
'cmd'=>"log show --predicate 'eventMessage contains \"error\"' --last 1h --style syslog | tail -40",
'desc'=>'Die letzten 40 Fehler aus dem Systemlog. Echtes Debugging ohne Console.app.',
'risk'=>'safe'],
// NETZWERK
['cat'=>'netzwerk','title'=>'Netzwerkqualität testen',
'cmd'=>'networkQuality',
'desc'=>'Apples eigenes Speedtest-Tool seit macOS 12. Misst Upload, Download und Responsiveness (RPM).',
'risk'=>'safe'],
['cat'=>'netzwerk','title'=>'Alle offenen Ports',
'cmd'=>'lsof -i -n -P | grep LISTEN',
'desc'=>'Welcher Prozess hört auf welchem Port? Unverzichtbar wenn ein Port "schon belegt" ist.',
'risk'=>'safe'],
['cat'=>'netzwerk','title'=>'Eigene IP + Geo',
'cmd'=>'curl -s https://ipinfo.io/json | python3 -m json.tool',
'desc'=>'Öffentliche IP, Stadt, Land und Provider — direkt formatiert im Terminal.',
'risk'=>'safe'],
['cat'=>'netzwerk','title'=>'Lokale Geräte im Netz',
'cmd'=>'arp -a | sort',
'desc'=>'ARP-Tabelle: alle Geräte die dein Mac gerade kennt. IP + MAC-Adresse.',
'risk'=>'safe'],
['cat'=>'netzwerk','title'=>'Alle MAC-Adressen',
'cmd'=>"networksetup -listallhardwareports | awk '/Hardware Port/{port=\$NF} /Ethernet Address/{print port\": \"\$NF}'",
'desc'=>'Alle Netzwerkinterfaces mit MAC-Adresse. Praktisch für Router-Whitelists.',
'risk'=>'safe'],
['cat'=>'netzwerk','title'=>'Bonjour-Dienste im Netz',
'cmd'=>'dns-sd -B _services._dns-sd._udp local.',
'desc'=>'Zeigt alle Bonjour/mDNS-Dienste im lokalen Netz live. Beenden mit Ctrl+C.',
'risk'=>'safe'],
// DATEIEN
['cat'=>'dateien','title'=>'DS_Store aufräumen',
'cmd'=>"find ~ -name '*.DS_Store' -delete 2>/dev/null && echo 'Aufgeräumt.'",
'desc'=>'Löscht alle .DS_Store-Dateien im Home-Verzeichnis. Gut vor git-Commits oder USB-Weitergabe.',
'risk'=>'safe'],
['cat'=>'dateien','title'=>'Größte Verzeichnisse',
'cmd'=>'du -sh ~/* | sort -rh | head -15',
'desc'=>'Top 15 Verzeichnisse nach Größe, sortiert. Schnell herausfinden wo der Speicher bleibt.',
'risk'=>'safe'],
['cat'=>'dateien','title'=>'Spotlight via Terminal',
'cmd'=>'mdfind -name "SUCHBEGRIFF"',
'desc'=>'Spotlight-Suche im Terminal. Schneller als Finder und skriptbar. SUCHBEGRIFF ersetzen.',
'risk'=>'safe'],
['cat'=>'dateien','title'=>'Große Cache-Dateien finden',
'cmd'=>"find /tmp ~/Library/Caches -maxdepth 2 -type f -size +50M 2>/dev/null | sort",
'desc'=>'Findet Dateien über 50MB in Temp- und Cache-Verzeichnissen. Vor dem Löschen prüfen.',
'risk'=>'safe'],
['cat'=>'dateien','title'=>'Bild skalieren (sips)',
'cmd'=>'sips -z 800 600 ~/Desktop/bild.jpg',
'desc'=>'Skaliert ein Bild auf 800×600 ohne Extra-Tool. sips ist macOS-nativ. Pfad anpassen.',
'risk'=>'safe'],
['cat'=>'dateien','title'=>'App Support nach Größe',
'cmd'=>"ls -lAh ~/Library/Application\\ Support | sort -k5 -rh | head -20",
'desc'=>'Größte App-Support-Ordner — nützlich nach dem Deinstallieren von Apps.',
'risk'=>'safe'],
// PERFORMANCE
['cat'=>'performance','title'=>'Top 15 CPU-Fresser',
'cmd'=>'top -o cpu -n 15 -l 1 | tail -16',
'desc'=>'Einmaliger Snapshot der 15 CPU-intensivsten Prozesse ohne interaktiven top-Modus.',
'risk'=>'safe'],
['cat'=>'performance','title'=>'RAM-Nutzung detailliert',
'cmd'=>"vm_stat | perl -ne '/page size of (\\d+)/ and \$s=\$1; /Pages\\s+([^:]+)[^\\d]+(\\d+)/ and printf \"%-25s %7.2f MB\\n\",\$1,\$2*\$s/1048576'",
'desc'=>'Schlüsselt den RAM auf: wired, active, inactive, free, speculative — in MB.',
'risk'=>'safe'],
['cat'=>'performance','title'=>'CPU/GPU Power (Apple Silicon)',
'cmd'=>'sudo powermetrics --samplers cpu_power,gpu_power -n 1 -i 1000 2>/dev/null | grep -E "Combined|CPU|GPU|Package"',
'desc'=>'Aktueller Stromverbrauch von CPU und GPU in Watt. Nur auf Apple Silicon. Braucht sudo.',
'risk'=>'safe'],
['cat'=>'performance','title'=>'Batteriestatus',
'cmd'=>'pmset -g batt',
'desc'=>'Ladestand, Ladezustand, Zustand der Batterie und ob du am Netzteil hängst.',
'risk'=>'safe'],
['cat'=>'performance','title'=>'Batterie-Ladezyklen',
'cmd'=>'ioreg -l | grep -i "CycleCount\|MaxCapacity\|CurrentCapacity" | head -6',
'desc'=>'Ladezyklen, maximale und aktuelle Kapazität. Zeigt ob die Batterie noch fit ist.',
'risk'=>'safe'],
// TWEAKS
['cat'=>'tweaks','title'=>'Dock: sofortiges Einblenden',
'cmd'=>'defaults write com.apple.dock autohide-delay -float 0 && defaults write com.apple.dock autohide-time-modifier -float 0.3 && killall Dock',
'desc'=>'Entfernt die Verzögerung beim Dock-Einblenden und verkürzt die Animation. Sofort aktiv.',
'risk'=>'safe'],
['cat'=>'tweaks','title'=>'Key-Repeat aktivieren',
'cmd'=>'defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false',
'desc'=>'Deaktiviert Akzent-Popup bei gedrückter Taste und aktiviert Key-Repeat. Logout nötig.',
'risk'=>'safe'],
['cat'=>'tweaks','title'=>'Screenshot-Einstellungen',
'cmd'=>'defaults write com.apple.screencapture location ~/Desktop && defaults write com.apple.screencapture type png && killall SystemUIServer',
'desc'=>'Screenshot-Pfad auf Desktop, Format auf PNG. killall SystemUIServer übernimmt sofort.',
'risk'=>'safe'],
['cat'=>'tweaks','title'=>'Mac 2h wachhalten',
'cmd'=>'caffeinate -d -t 7200',
'desc'=>'Verhindert Sleep und Screensaver für 2 Stunden. Ctrl+C zum Beenden.',
'risk'=>'safe'],
['cat'=>'tweaks','title'=>'Versteckte Dateien im Finder',
'cmd'=>"defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder",
'desc'=>'Zeigt alle Dotfiles im Finder. Rückgängig: selber Befehl mit -bool false.',
'risk'=>'safe'],
['cat'=>'tweaks','title'=>'Auto-Update-Check deaktivieren',
'cmd'=>'defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool false',
'desc'=>'Stoppt den automatischen Update-Check im Hintergrund. Updates manuell über Systemeinstellungen.',
'risk'=>'caution'],
];
foreach ($cmds as $c):
$cmdEsc = htmlspecialchars($c['cmd'], ENT_QUOTES);
?>
<div class="mn-card" data-cat="<?= $c['cat'] ?>">
<div class="mn-card-meta">
<span class="mn-cat-tag"><?= strtoupper($c['cat']) ?></span>
<span class="mn-risk mn-risk-<?= $c['risk'] ?>"><?= $c['risk'] === 'caution' ? 'CAUTION' : 'SAFE' ?></span>
</div>
<div class="mn-card-title"><?= htmlspecialchars($c['title']) ?></div>
<div class="mn-card-desc"><?= htmlspecialchars($c['desc']) ?></div>
<div class="mn-cmd-block">
<code class="mn-cmd-code"><?= $cmdEsc ?></code>
<button class="mn-copy-btn" data-cmd="<?= $cmdEsc ?>">COPY</button>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<script>
document.querySelectorAll('.mn-filter').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('.mn-filter').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const cat = btn.dataset.cat;
document.querySelectorAll('.mn-card').forEach(card => {
card.style.display = (cat === 'all' || card.dataset.cat === cat) ? '' : 'none';
});
});
});
document.querySelectorAll('.mn-copy-btn').forEach(btn => {
btn.addEventListener('click', () => {
navigator.clipboard.writeText(btn.dataset.cmd).then(() => {
btn.textContent = 'COPIED';
btn.classList.add('copied');
setTimeout(() => { btn.textContent = 'COPY'; btn.classList.remove('copied'); }, 1500);
});
});
});
</script>
</body>
</html>

View file

@ -0,0 +1,323 @@
<?php
/**
* Template Name: Mac Nerds
*/
?><!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MAC NERDS | DIGITALE ANARCHIE</title>
<?php wp_head(); ?>
</head>
<body <?php body_class('mac-nerds-page'); ?>>
<div class="container mn-container">
<header class="mn-header">
<a href="<?php echo home_url(); ?>" class="mn-back">← ZURÜCK ZUR BASIS</a>
<h1 class="mn-title">MAC NERDS</h1>
<p class="mn-subtitle">// Terminal-Wissen für möchtegern-Admins — zu gut für Anfänger, zu faul für echte Admins</p>
<div class="mn-warning">⚠ ALLE BEFEHLE GETESTET. TROTZDEM: BRAIN BEFORE RETURN.</div>
</header>
<div class="mn-filter-bar">
<button class="mn-filter active" data-cat="all">ALLE</button>
<button class="mn-filter" data-cat="system">SYSTEM</button>
<button class="mn-filter" data-cat="netzwerk">NETZWERK</button>
<button class="mn-filter" data-cat="dateien">DATEIEN</button>
<button class="mn-filter" data-cat="performance">PERFORMANCE</button>
<button class="mn-filter" data-cat="tweaks">TWEAKS</button>
</div>
<div class="mn-grid" id="mn-grid">
<?php
$cmds = [
// ── SYSTEM ──────────────────────────────────────────
[
'cat' => 'system',
'cmd' => 'system_profiler SPHardwareDataType | grep -E "Model|Chip|Memory|Serial"',
'title'=> 'Hardware-Kurzprofil',
'desc' => 'Model, Chip, RAM und Seriennummer auf einen Blick. Kein Klicken durch System-Info.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => 'sw_vers',
'title'=> 'macOS Version',
'desc' => 'ProductName, Version und Build — schneller als jedes UI-Menü.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => 'sysctl -n machdep.cpu.brand_string',
'title'=> 'CPU exakter Bezeichner',
'desc' => 'Zeigt den genauen CPU-String. Nützlich wenn jemand nach deinem Chip fragt und du nicht suchen willst.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => "sudo dscl . list /Users | grep -v '^_'",
'title'=> 'Alle lokalen User',
'desc' => 'Listet alle echten User-Accounts — ohne die System-Underscore-Accounts.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => 'scutil --get ComputerName && scutil --get LocalHostName',
'title'=> 'Computernamen abfragen',
'desc' => 'Computername und lokaler Hostname. Hilfreich bevor du irgendwas im Netz konfigurierst.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => 'launchctl list | grep -v "^-" | grep -v "com.apple" | sort',
'title'=> 'Drittanbieter LaunchAgents',
'desc' => 'Nur die LaunchAgents die nicht von Apple kommen — zeigt was im Hintergrund wirklich läuft.',
'risk' => 'safe',
],
[
'cat' => 'system',
'cmd' => 'log show --predicate \'eventMessage contains "error"\' --last 1h --style syslog | tail -40',
'title'=> 'System-Errors letzte Stunde',
'desc' => 'Die letzten 40 Fehler aus dem Systemlog der vergangenen Stunde. Echtes Debugging ohne Console.app.',
'risk' => 'safe',
],
// ── NETZWERK ─────────────────────────────────────────
[
'cat' => 'netzwerk',
'cmd' => 'networkQuality',
'title'=> 'Netzwerkqualität testen',
'desc' => 'Apples eigenes Speedtest-Tool seit macOS 12. Misst Upload, Download und Responsiveness (RPM).',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => 'lsof -i -n -P | grep LISTEN',
'title'=> 'Alle offenen Ports',
'desc' => 'Welcher Prozess hört auf welchem Port? Unverzichtbar wenn ein Port "schon belegt" ist.',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => 'curl -s https://ipinfo.io/json | python3 -m json.tool',
'title'=> 'Eigene IP + Geo',
'desc' => 'Zeigt deine öffentliche IP, Stadt, Land und Provider — direkt formatiert im Terminal.',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => 'arp -a | sort',
'title'=> 'Lokale Geräte im Netz',
'desc' => 'ARP-Tabelle: alle Geräte die dein Mac gerade "kennt". IP + MAC-Adresse.',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => 'nettop -m tcp -n -l 1 2>/dev/null | head -30',
'title'=> 'TCP-Verbindungen Snapshot',
'desc' => 'Einmaliger Snapshot aller aktiven TCP-Verbindungen mit Bytes sent/received.',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => "networksetup -listallhardwareports | awk '/Hardware Port/{port=$NF} /Ethernet Address/{print port\": \"$NF}'",
'title'=> 'Alle MAC-Adressen',
'desc' => 'Listet alle Netzwerkinterfaces mit ihrer MAC-Adresse. Praktisch für Router-Whitelists.',
'risk' => 'safe',
],
[
'cat' => 'netzwerk',
'cmd' => 'dns-sd -B _services._dns-sd._udp local.',
'title'=> 'Bonjour-Dienste im Netz',
'desc' => 'Zeigt alle Bonjour/mDNS-Dienste im lokalen Netzwerk live. Beenden mit Ctrl+C.',
'risk' => 'safe',
],
// ── DATEIEN ──────────────────────────────────────────
[
'cat' => 'dateien',
'cmd' => "find ~ -name '*.DS_Store' -delete 2>/dev/null; echo 'Aufgeräumt.'",
'title'=> 'DS_Store aufräumen',
'desc' => 'Löscht alle .DS_Store-Dateien im Home-Verzeichnis. Gut vor git-Commits oder USB-Weitergabe.',
'risk' => 'safe',
],
[
'cat' => 'dateien',
'cmd' => 'du -sh ~/* | sort -rh | head -15',
'title'=> 'Größte Verzeichnisse',
'desc' => 'Top 15 Verzeichnisse nach Größe, sortiert. Schnell herausfinden wo der Speicher bleibt.',
'risk' => 'safe',
],
[
'cat' => 'dateien',
'cmd' => 'mdfind -name "SUCHBEGRIFF"',
'title'=> 'Spotlight via Terminal',
'desc' => 'Spotlight-Suche im Terminal. Schneller als Finder und skriptbar. SUCHBEGRIFF ersetzen.',
'risk' => 'safe',
],
[
'cat' => 'dateien',
'cmd' => "find /tmp ~/Library/Caches -maxdepth 2 -type f -size +50M 2>/dev/null | sort",
'title'=> 'Große Cache-Dateien finden',
'desc' => 'Findet Dateien über 50MB in Temp- und Cache-Verzeichnissen. Vor dem Löschen prüfen.',
'risk' => 'safe',
],
[
'cat' => 'dateien',
'cmd' => 'sips -z 800 600 ~/Desktop/bild.jpg',
'title'=> 'Bild skalieren (sips)',
'desc' => 'Skaliert ein Bild auf 800×600 ohne Extra-Tool. sips ist macOS-nativ. Pfad anpassen.',
'risk' => 'safe',
],
[
'cat' => 'dateien',
'cmd' => "ls -lAh ~/Library/Application\\ Support | sort -k5 -rh | head -20",
'title'=> 'App Support nach Größe',
'desc' => 'Zeigt die größten App-Support-Ordner — nützlich nach dem Deinstallieren von Apps.',
'risk' => 'safe',
],
// ── PERFORMANCE ──────────────────────────────────────
[
'cat' => 'performance',
'cmd' => 'top -o cpu -n 15 -l 1 | tail -16',
'title'=> 'Top 15 CPU-Fresser',
'desc' => 'Einmaliger Snapshot der 15 CPU-intensivsten Prozesse — ohne interaktiven top-Modus.',
'risk' => 'safe',
],
[
'cat' => 'performance',
'cmd' => "vm_stat | perl -ne '/page size of (\\d+)/ and \$s=\$1; /Pages\\s+([^:]+)[^\\d]+(\\d+)/ and printf \"%-25s %7.2f MB\\n\",\$1,\$2*\$s/1048576'",
'title'=> 'RAM-Nutzung detailliert',
'desc' => 'Schlüsselt den RAM auf: wired, active, inactive, free, speculative — in MB.',
'risk' => 'safe',
],
[
'cat' => 'performance',
'cmd' => 'sudo powermetrics --samplers cpu_power,gpu_power -n 1 -i 1000 2>/dev/null | grep -E "Combined|CPU|GPU|Package"',
'title'=> 'CPU/GPU Power (Apple Silicon)',
'desc' => 'Aktueller Stromverbrauch von CPU und GPU in Watt. Nur auf Apple Silicon sinnvoll. Braucht sudo.',
'risk' => 'safe',
],
[
'cat' => 'performance',
'cmd' => 'pmset -g batt',
'title'=> 'Batteriestatus',
'desc' => 'Zeigt Ladestand, Ladezustand, Zustand der Batterie und ob du am Netzteil hängst.',
'risk' => 'safe',
],
[
'cat' => 'performance',
'cmd' => 'ioreg -l | grep -i "CycleCount\\|MaxCapacity\\|CurrentCapacity" | head -6',
'title'=> 'Batterie-Ladezyklen',
'desc' => 'Ladezyklen, maximale und aktuelle Kapazität. Zeigt ob die Batterie noch fit ist.',
'risk' => 'safe',
],
// ── TWEAKS ───────────────────────────────────────────
[
'cat' => 'tweaks',
'cmd' => 'defaults write com.apple.dock autohide-delay -float 0 && defaults write com.apple.dock autohide-time-modifier -float 0.3 && killall Dock',
'title'=> 'Dock: sofortiges Einblenden',
'desc' => 'Entfernt die Verzögerung beim Dock-Einblenden und verkürzt die Animation. Sofort spürbar.',
'risk' => 'safe',
],
[
'cat' => 'tweaks',
'cmd' => 'defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false',
'title'=> 'Key-Repeat aktivieren',
'desc' => 'Deaktiviert den Akzent-Popup bei gedrückter Taste und aktiviert stattdessen Key-Repeat. Logout nötig.',
'risk' => 'safe',
],
[
'cat' => 'tweaks',
'cmd' => 'defaults write com.apple.screencapture location ~/Desktop && defaults write com.apple.screencapture type png && killall SystemUIServer',
'title'=> 'Screenshot-Einstellungen',
'desc' => 'Setzt Screenshot-Pfad auf Desktop und Format auf PNG. killall SystemUIServer übernimmt sofort.',
'risk' => 'safe',
],
[
'cat' => 'tweaks',
'cmd' => 'caffeinate -d -t 7200',
'title'=> 'Mac 2h wachhalten',
'desc' => 'Verhindert Sleep/Screensaver für 2 Stunden. -d = Display an. Einfach Ctrl+C zum Beenden.',
'risk' => 'safe',
],
[
'cat' => 'tweaks',
'cmd' => "defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder",
'title'=> 'Versteckte Dateien im Finder',
'desc' => 'Zeigt alle versteckten Dateien (Dotfiles) im Finder. Rückgängig: -bool false.',
'risk' => 'safe',
],
[
'cat' => 'tweaks',
'cmd' => 'defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool false',
'title'=> 'Auto-Update-Check deaktivieren',
'desc' => 'Stoppt den automatischen Update-Check im Hintergrund. Updates manuell über Systemeinstellungen.',
'risk' => 'caution',
],
];
foreach ($cmds as $c):
$riskLabel = $c['risk'] === 'caution' ? 'CAUTION' : 'SAFE';
$catUpper = strtoupper($c['cat']);
$cmdEsc = htmlspecialchars($c['cmd'], ENT_QUOTES);
?>
<div class="mn-card" data-cat="<?php echo $c['cat']; ?>">
<div class="mn-card-meta">
<span class="mn-cat-tag"><?php echo $catUpper; ?></span>
<span class="mn-risk mn-risk-<?php echo $c['risk']; ?>"><?php echo $riskLabel; ?></span>
</div>
<h3 class="mn-card-title"><?php echo htmlspecialchars($c['title']); ?></h3>
<p class="mn-card-desc"><?php echo htmlspecialchars($c['desc']); ?></p>
<div class="mn-cmd-block">
<code class="mn-cmd-code"><?php echo $cmdEsc; ?></code>
<button class="mn-copy-btn" data-cmd="<?php echo $cmdEsc; ?>">COPY</button>
</div>
</div>
<?php endforeach; ?>
</div><!-- /mn-grid -->
</div><!-- /mn-container -->
<script>
(function() {
// Filter
const filters = document.querySelectorAll('.mn-filter');
const cards = document.querySelectorAll('.mn-card');
filters.forEach(btn => {
btn.addEventListener('click', () => {
filters.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const cat = btn.dataset.cat;
cards.forEach(card => {
card.style.display = (cat === 'all' || card.dataset.cat === cat) ? '' : 'none';
});
});
});
// Copy to clipboard
document.querySelectorAll('.mn-copy-btn').forEach(btn => {
btn.addEventListener('click', () => {
const cmd = btn.dataset.cmd;
navigator.clipboard.writeText(cmd).then(() => {
const orig = btn.textContent;
btn.textContent = 'COPIED';
btn.classList.add('mn-copy-ok');
setTimeout(() => { btn.textContent = orig; btn.classList.remove('mn-copy-ok'); }, 1500);
});
});
});
})();
</script>
<?php wp_footer(); ?>
</body>
</html>

View file

@ -627,8 +627,10 @@
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');
setupBtn('btn-anarchy', 'mode-anarchy', '>> ANARCHIE ENGAGED', '>> ORDNUNG HERGESTELLT');
setupBtn('btn-security', 'mode-security', '!! SECURITY BYPASS !!', '>> STABILIZED');
setupBtn('btn-scan', 'mode-scan', '>> DEEP SCAN INITIIERT — LÄUFT', '>> SCAN ABGEBROCHEN');
setupBtn('btn-overdrive', 'mode-overdrive', '!! OVERDRIVE ENGAGED — INSTABIL', '>> OVERDRIVE DEAKTIVIERT');
// Filter Logic
filterButtons.forEach(btn => {
@ -764,6 +766,53 @@
}
}
// --- GÄSTEBUCH ---
const gbSubmit = document.getElementById('gb-submit');
const gbInputUser = document.getElementById('gb-input-user');
const gbInputMsg = document.getElementById('gb-input-msg');
const gbEntries = document.getElementById('gaestebuch-entries');
const GB_TAGS = [
['STATUS: EINGETROFFEN', ''],
['IDENTITAET: UNGEKLAERT', ''],
['HERKUNFT: FRAGLICH', 'gb-tag-warn'],
['KLASSIFIZIERT: UNBEKANNT', 'gb-tag-crit'],
['INTEGRITAET: AKZEPTABEL', 'gb-tag-ok'],
['SIGNAL: SCHWACH', 'gb-tag-warn'],
['PROZESS: LÄUFT', 'gb-tag-ok'],
['GEFAEHRLICHKEIT: MITTEL', 'gb-tag-crit'],
];
if (gbSubmit) {
gbSubmit.addEventListener('click', () => {
const user = gbInputUser.value.trim() || 'ANONYMOUS_' + Math.floor(Math.random()*9000+1000);
const msg = gbInputMsg.value.trim();
if (!msg) { gbInputMsg.focus(); return; }
const now = new Date();
const date = now.toLocaleDateString('de-DE') + ' — ' +
String(now.getHours()).padStart(2,'0') + ':' +
String(now.getMinutes()).padStart(2,'0');
const [tagLabel, tagCls] = GB_TAGS[Math.floor(Math.random() * GB_TAGS.length)];
const entry = document.createElement('div');
entry.className = 'gb-entry gb-new';
entry.innerHTML =
'<div class="gb-meta">' +
'<span class="gb-user">' + user.toUpperCase().replace(/</g,'&lt;').slice(0,40) + '</span>' +
'<span class="gb-dot">◆</span>' +
'<span class="gb-date">' + date + '</span>' +
'<span class="gb-tag ' + tagCls + '">' + tagLabel + '</span>' +
'</div>' +
'<p class="gb-text">' + msg.replace(/</g,'&lt;').replace(/>/g,'&gt;') + '</p>';
gbEntries.insertBefore(entry, gbEntries.firstChild);
gbInputUser.value = '';
gbInputMsg.value = '';
if (typeof playKeyClick === 'function') playKeyClick();
});
}
log('>> SYSTEM READY. WAITING FOR COMMANDS...');
// --- OPS DASHBOARD ---
@ -867,6 +916,112 @@
});
})();
// ═══════════════════════════════════════
// PERSONEN-AKTE
// ═══════════════════════════════════════
(function() {
const trigger = document.getElementById('akte-trigger');
const modal = document.getElementById('akte-modal');
const closeBtn = document.getElementById('akte-close');
const activityEl = document.getElementById('akte-activity');
if (!trigger || !modal) return;
function openAkte() {
modal.classList.remove('akte-hidden');
document.body.style.overflow = 'hidden';
if (activityEl) {
const now = new Date();
activityEl.textContent = now.toLocaleDateString('de-DE') + ' ' +
String(now.getHours()).padStart(2,'0') + ':' +
String(now.getMinutes()).padStart(2,'0') + ':' +
String(now.getSeconds()).padStart(2,'0') + ' — GERADE JETZT';
}
}
function closeAkte() {
modal.classList.add('akte-hidden');
document.body.style.overflow = '';
}
trigger.addEventListener('click', openAkte);
if (closeBtn) closeBtn.addEventListener('click', closeAkte);
modal.addEventListener('click', (e) => { if (e.target === modal) closeAkte(); });
document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeAkte(); });
})();
// ═══════════════════════════════════════
// SYSTEM STATUS WIDGET
// ═══════════════════════════════════════
(function() {
const metrics = {
cpu: { bar: document.getElementById('sw-cpu'), val: document.getElementById('sw-cpu-val'), cur: 88, min: 72, max: 99, unit: '%' },
kaffee: { bar: document.getElementById('sw-kaffee'), val: document.getElementById('sw-kaffee-val'), cur: 61, min: 5, max: 100, unit: '%', drain: true },
chaos: { bar: document.getElementById('sw-chaos'), val: document.getElementById('sw-chaos-val'), cur: 77, min: 40, max: 100, unit: '%' },
ki: { bar: document.getElementById('sw-ki'), val: document.getElementById('sw-ki-val'), cur: 93, min: 60, max: 100, unit: '%' },
};
function lerp(a, b, t) { return a + (b - a) * t; }
function tick() {
Object.keys(metrics).forEach(key => {
const m = metrics[key];
if (!m.bar || !m.val) return;
if (key === 'kaffee') {
// Kaffee leert sich langsam, dann springt es auf 100
m.cur -= 0.08;
if (m.cur < 5) m.cur = 100;
} else if (key === 'chaos') {
// Chaos: zufällige Spitzen
const spike = Math.random() < 0.04;
m.cur = spike ? 95 + Math.random() * 5 : lerp(m.cur, m.min + Math.random() * (m.max - m.min), 0.06);
} else {
m.cur = lerp(m.cur, m.min + Math.random() * (m.max - m.min), 0.04);
}
m.cur = Math.max(m.min, Math.min(m.max, m.cur));
const pct = ((m.cur - m.min) / (m.max - m.min) * 100).toFixed(0);
m.bar.style.width = Math.round(m.cur) + '%';
m.val.textContent = Math.round(m.cur) + m.unit;
});
}
setInterval(tick, 900);
tick();
})();
// ═══════════════════════════════════════
// NEWSTICKER
// ═══════════════════════════════════════
(function() {
const track = document.getElementById('ticker-track');
if (!track) return;
const ITEMS = [
{ t: 'PROKRASTINATION.exe verbraucht 94% CPU — Gegenmaßnahmen: keine', cls: 'ticker-warn' },
{ t: 'WARNUNG: Realitätsdistorsionsfeld bei 120% — Evakuierung nicht vorgesehen', cls: 'ticker-crit' },
{ t: 'KAFFEE_KERNEL läuft seit 18h ohne Unterbrechung — Status: besorgniserregend', cls: '' },
{ t: 'KREATIVITAET.exe hat soeben SCHLAF.daemon überschrieben — Rollback fehlgeschlagen', cls: 'ticker-warn' },
{ t: 'SYSTEM-UPDATE verfügbar: VERNUNFT v2.0 — Installation abgebrochen durch Benutzer', cls: '' },
{ t: 'ANOMALIE ERKANNT: Zeitstempel 1974 verursacht Konflikte mit Gegenwart', cls: 'ticker-warn' },
{ t: 'WORDPRESS-KERN destabilisiert — Zustand: wie immer', cls: '' },
{ t: 'MISSION STATUS: Chaos aufrechterhalten — ERLEDIGT', cls: '' },
{ t: 'KAFFEE-VORRAT KRITISCH — ETA bis Totalausfall: unberechenbar', cls: 'ticker-crit' },
{ t: 'GEMINI NEURAL LINK aktiv — Bewusstseinszustand: kollaborativ / verwirrend', cls: '' },
{ t: 'SELBSTZWEIFEL.exe wurde erfolgreich terminiert — Neustart in 3... 2... 1...', cls: 'ticker-warn' },
{ t: 'NEUE ENTITÄT im Gästebuch registriert — Gefährlichkeit: unklar', cls: '' },
{ t: 'ANARCHIE-KERNEL v4.0.1 läuft stabil — das ist verdächtig', cls: 'ticker-warn' },
{ t: 'SPEICHER-LEAK IN MOTIVATION.sys ENTDECKT — seit 1974 bekannt, nie gefixt', cls: '' },
];
// Doppelt für nahtloses Looping
[...ITEMS, ...ITEMS].forEach(({ t, cls }) => {
const span = document.createElement('span');
span.className = 'ticker-item' + (cls ? ' ' + cls : '');
span.textContent = t;
track.appendChild(span);
});
})();
// --- ANTIGRAVITY ENGINE & GENERATIVE DRONE ---
let droneAudioCtx;
let droneInitialized = false;

View file

@ -247,6 +247,226 @@ body.mode-security::after {
transform: translate(-50%, -50%) rotate(-15deg);
}
/* DEEP SCAN MODE */
body.mode-scan::before {
content: '';
position: fixed;
left: 0; right: 0;
height: 3px;
background: linear-gradient(90deg,
transparent 0%,
rgba(0,255,65,0.0) 10%,
rgba(0,255,65,0.9) 50%,
rgba(0,255,65,0.0) 90%,
transparent 100%
);
box-shadow: 0 0 18px 4px rgba(0,255,65,0.4);
z-index: 99999;
pointer-events: none;
animation: scan-line 2.4s linear infinite;
}
body.mode-scan::after {
content: 'SCANNING...';
position: fixed;
top: 12px; right: 16px;
font-family: 'Courier New', monospace;
font-size: 0.55rem;
letter-spacing: 4px;
color: rgba(0,255,65,0.5);
z-index: 99999;
pointer-events: none;
animation: blinker 0.8s step-end infinite;
}
body.mode-scan {
background-image: repeating-linear-gradient(
0deg,
transparent,
transparent 2px,
rgba(0,255,65,0.018) 2px,
rgba(0,255,65,0.018) 4px
);
}
@keyframes scan-line {
0% { top: -4px; }
100% { top: 100vh; }
}
/* OVERDRIVE MODE */
body.mode-overdrive {
filter: saturate(2.2) contrast(1.15) brightness(1.05);
}
body.mode-overdrive h1,
body.mode-overdrive h2,
body.mode-overdrive h3 {
text-shadow: 0 0 12px currentColor, 0 0 30px currentColor !important;
}
body.mode-overdrive .switch-btn,
body.mode-overdrive .filter-btn,
body.mode-overdrive .portfolio-item {
box-shadow: 0 0 10px rgba(255,69,0,0.4) !important;
}
body.mode-overdrive #system-log {
box-shadow: inset 0 0 30px rgba(0,255,65,0.15), 0 0 20px rgba(0,255,65,0.2) !important;
border-color: rgba(0,255,65,0.5) !important;
}
body.mode-overdrive::after {
content: 'OVERDRIVE';
position: fixed;
bottom: 36px; right: 16px;
font-family: 'Courier New', monospace;
font-size: 0.5rem;
letter-spacing: 5px;
color: rgba(255,69,0,0.35);
pointer-events: none;
z-index: 9400;
}
/* ═══════════════════════════════════════
CONTROL PANEL — CYBERPUNK METAL BUTTONS
═══════════════════════════════════════ */
.control-panel {
display: flex;
flex-wrap: wrap;
gap: 6px;
max-width: 750px;
margin: 0 auto 20px;
padding: 10px;
background:
linear-gradient(180deg, rgba(40,35,30,0.6) 0%, rgba(8,6,4,0.95) 50%, rgba(30,25,20,0.6) 100%);
border-top: 1px solid rgba(255,255,255,0.07);
border-bottom: 1px solid rgba(0,0,0,0.9);
border-left: 1px solid rgba(255,255,255,0.04);
border-right: 1px solid rgba(255,255,255,0.04);
box-shadow:
0 6px 30px rgba(0,0,0,0.8),
inset 0 1px 0 rgba(255,255,255,0.05);
}
.switch-btn {
flex: 1;
min-width: 110px;
padding: 11px 10px 9px;
font-family: 'Courier New', monospace;
font-size: 0.6rem;
letter-spacing: 2px;
text-transform: uppercase;
cursor: pointer;
position: relative;
transition: all 0.12s ease;
user-select: none;
/* Metal plate */
background: linear-gradient(
170deg,
#252018 0%,
#111008 45%,
#0d0b06 55%,
#1e1a10 100%
);
border-top: 1px solid rgba(255,220,100,0.12);
border-left: 1px solid rgba(255,220,100,0.06);
border-right: 1px solid rgba(0,0,0,0.7);
border-bottom: 2px solid rgba(0,0,0,0.85);
box-shadow:
inset 0 1px 0 rgba(255,220,80,0.06),
inset 0 -1px 0 rgba(0,0,0,0.6),
0 2px 6px rgba(0,0,0,0.6);
/* Neon text — orange default */
color: rgba(255,120,20,0.75);
text-shadow:
0 0 6px rgba(255,100,0,0.6),
0 0 14px rgba(255,80,0,0.3);
}
.switch-btn::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 40%;
background: linear-gradient(180deg, rgba(255,220,80,0.04) 0%, transparent 100%);
pointer-events: none;
}
.switch-btn:hover {
background: linear-gradient(
170deg,
#302a1a 0%,
#1a1508 45%,
#141208 55%,
#28220e 100%
);
color: rgba(255,140,30,0.95);
text-shadow:
0 0 8px rgba(255,120,0,0.9),
0 0 20px rgba(255,80,0,0.5),
0 0 40px rgba(255,60,0,0.2);
border-top-color: rgba(255,220,100,0.2);
box-shadow:
inset 0 1px 0 rgba(255,220,80,0.1),
inset 0 -1px 0 rgba(0,0,0,0.6),
0 0 12px rgba(255,100,0,0.15),
0 2px 6px rgba(0,0,0,0.6);
}
.switch-btn:active,
.switch-btn.active {
background: linear-gradient(
170deg,
#0d0b06 0%,
#181408 45%,
#1a1608 55%,
#111008 100%
);
border-top: 1px solid rgba(0,0,0,0.5);
border-bottom: 1px solid rgba(255,180,50,0.15);
box-shadow:
inset 0 2px 8px rgba(0,0,0,0.8),
inset 0 1px 3px rgba(0,0,0,0.5),
0 0 16px rgba(255,100,0,0.2);
transform: translateY(1px);
color: rgba(255,160,40,1);
text-shadow:
0 0 10px rgba(255,140,0,1),
0 0 25px rgba(255,100,0,0.7),
0 0 50px rgba(255,60,0,0.3);
}
/* Green variant — ANARCHIE-MODE */
.switch-btn.green {
color: rgba(0,255,65,0.7);
text-shadow: 0 0 6px rgba(0,255,65,0.6), 0 0 14px rgba(0,255,65,0.3);
}
.switch-btn.green:hover {
color: rgba(0,255,65,0.95);
text-shadow: 0 0 8px rgba(0,255,65,0.9), 0 0 22px rgba(0,255,65,0.5), 0 0 40px rgba(0,255,65,0.2);
box-shadow: inset 0 1px 0 rgba(255,220,80,0.1), 0 0 12px rgba(0,255,65,0.15), 0 2px 6px rgba(0,0,0,0.6);
}
.switch-btn.green:active,
.switch-btn.green.active {
color: rgba(0,255,65,1);
text-shadow: 0 0 10px rgba(0,255,65,1), 0 0 25px rgba(0,255,65,0.7), 0 0 50px rgba(0,255,65,0.3);
box-shadow: inset 0 2px 8px rgba(0,0,0,0.8), 0 0 16px rgba(0,255,65,0.2);
}
/* Red variant — OVERDRIVE */
.switch-btn.red {
color: rgba(255,40,10,0.75);
text-shadow: 0 0 6px rgba(255,20,0,0.7), 0 0 14px rgba(255,0,0,0.3);
}
.switch-btn.red:hover {
color: rgba(255,60,20,0.95);
text-shadow: 0 0 8px rgba(255,30,0,0.9), 0 0 22px rgba(255,0,0,0.6), 0 0 40px rgba(255,0,0,0.2);
box-shadow: inset 0 1px 0 rgba(255,220,80,0.1), 0 0 12px rgba(255,30,0,0.2), 0 2px 6px rgba(0,0,0,0.6);
}
.switch-btn.red:active,
.switch-btn.red.active {
color: rgba(255,60,20,1);
text-shadow: 0 0 10px rgba(255,40,0,1), 0 0 25px rgba(255,20,0,0.7), 0 0 50px rgba(255,0,0,0.3);
box-shadow: inset 0 2px 8px rgba(0,0,0,0.8), 0 0 18px rgba(255,30,0,0.25);
animation: blinker 0.4s step-end infinite;
}
/* 4. GHOST MODE (Stealth & Invisibility) */
body.mode-ghost #system-log {
opacity: 0.8;
@ -1146,3 +1366,667 @@ body.mode-time-warp {
.terminal-wrapper.ops-expanded #system-log {
transition: min-height 0.55s cubic-bezier(0.4,0,0.2,1);
}
/* ═══════════════════════════════════════
GÄSTEBUCH
═══════════════════════════════════════ */
.gaestebuch-wrap {
margin-top: 30px;
border: 1px solid rgba(212,175,55,0.2);
background: rgba(5,3,0,0.97);
padding: 24px 20px 20px;
position: relative;
overflow: hidden;
}
.gaestebuch-wrap::before {
content: '';
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg, transparent, transparent 5px,
rgba(212,175,55,0.012) 5px, rgba(212,175,55,0.012) 6px
);
pointer-events: none;
}
.gaestebuch-header {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
margin-bottom: 6px;
}
.gaestebuch-title {
font-size: 0.75rem;
letter-spacing: 4px;
color: rgba(212,175,55,0.55);
text-transform: uppercase;
margin: 0;
font-weight: normal;
}
.gaestebuch-led {
width: 5px; height: 5px;
border-radius: 50%;
background: var(--accent-gold);
opacity: 0.6;
animation: blinker 2.2s step-end infinite;
box-shadow: 0 0 4px var(--accent-gold);
}
.gaestebuch-sub {
text-align: center;
font-size: 0.65rem;
letter-spacing: 2px;
color: rgba(150,130,80,0.45);
margin: 0 0 20px;
}
.gaestebuch-entries {
display: flex;
flex-direction: column;
gap: 0;
}
.gb-entry {
border-top: 1px solid rgba(212,175,55,0.08);
padding: 14px 4px 14px 12px;
position: relative;
transition: background 0.2s;
}
.gb-entry:hover {
background: rgba(212,175,55,0.025);
}
.gb-entry::before {
content: '>';
position: absolute;
left: 0;
top: 16px;
color: rgba(212,175,55,0.2);
font-size: 0.7rem;
}
.gb-entry.gb-new {
animation: gb-fadeIn 0.6s ease forwards;
}
@keyframes gb-fadeIn {
from { opacity: 0; transform: translateY(-6px); background: rgba(212,175,55,0.06); }
to { opacity: 1; transform: translateY(0); background: transparent; }
}
.gb-meta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 5px;
}
.gb-user {
font-size: 0.72rem;
letter-spacing: 2px;
color: var(--accent-gold);
opacity: 0.75;
}
.gb-dot { color: rgba(212,175,55,0.2); font-size: 0.5rem; }
.gb-date {
font-size: 0.6rem;
letter-spacing: 1px;
color: rgba(150,130,80,0.45);
}
.gb-tag {
font-size: 0.5rem;
letter-spacing: 2px;
border: 1px solid rgba(212,175,55,0.2);
color: rgba(212,175,55,0.35);
padding: 1px 6px;
text-transform: uppercase;
margin-left: auto;
}
.gb-tag.gb-tag-warn { border-color: rgba(255,180,0,0.25); color: rgba(255,180,0,0.4); }
.gb-tag.gb-tag-ok { border-color: rgba(0,200,80,0.2); color: rgba(0,200,80,0.4); }
.gb-tag.gb-tag-crit { border-color: rgba(255,50,0,0.25); color: rgba(255,80,0,0.45); }
.gb-text {
font-size: 0.8rem;
line-height: 1.6;
color: rgba(190,180,150,0.65);
margin: 0;
padding-left: 2px;
}
/* Form */
.gb-form-wrap {
margin-top: 20px;
border-top: 1px solid rgba(212,175,55,0.12);
padding-top: 16px;
}
.gb-form-header {
font-size: 0.6rem;
letter-spacing: 4px;
color: rgba(212,175,55,0.35);
margin-bottom: 12px;
}
.gb-form {
display: flex;
flex-direction: column;
gap: 8px;
}
.gb-input {
background: rgba(0,0,0,0.6);
border: 1px solid rgba(212,175,55,0.15);
color: rgba(200,185,140,0.8);
font-family: 'Courier New', monospace;
font-size: 0.78rem;
padding: 8px 12px;
outline: none;
transition: border-color 0.2s;
resize: none;
}
.gb-input:focus { border-color: rgba(212,175,55,0.4); }
.gb-input::placeholder { color: rgba(150,130,80,0.35); }
.gb-textarea { min-height: 70px; }
.gb-btn {
align-self: flex-start;
background: transparent;
border: 1px solid rgba(212,175,55,0.3);
color: rgba(212,175,55,0.6);
font-family: 'Courier New', monospace;
font-size: 0.7rem;
letter-spacing: 3px;
padding: 6px 16px;
cursor: pointer;
transition: all 0.2s;
}
.gb-btn:hover {
border-color: rgba(212,175,55,0.7);
color: rgba(212,175,55,0.9);
background: rgba(212,175,55,0.05);
}
/* ═══════════════════════════════════════
PERSONEN-AKTE
═══════════════════════════════════════ */
.akte-trigger-btn {
background: transparent;
border: 1px solid rgba(255,69,0,0.3);
color: rgba(255,100,0,0.5);
font-family: 'Courier New', monospace;
font-size: 0.65rem;
letter-spacing: 3px;
padding: 8px 20px;
cursor: pointer;
transition: all 0.25s;
text-transform: uppercase;
}
.akte-trigger-btn:hover {
border-color: rgba(255,69,0,0.7);
color: rgba(255,100,0,0.9);
box-shadow: 0 0 14px rgba(255,69,0,0.15);
}
.akte-hidden { display: none !important; }
#akte-modal {
position: fixed;
inset: 0;
z-index: 30000;
background: rgba(0,0,0,0.92);
overflow-y: auto;
display: flex;
align-items: flex-start;
justify-content: center;
padding: 40px 16px 60px;
backdrop-filter: blur(3px);
}
.akte-inner {
width: 100%;
max-width: 700px;
background: #0a0800;
border: 1px solid rgba(212,175,55,0.25);
padding: 30px 28px 28px;
position: relative;
box-shadow: 0 0 60px rgba(212,175,55,0.08);
}
.akte-inner::before {
content: '';
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg, transparent, transparent 4px,
rgba(212,175,55,0.012) 4px, rgba(212,175,55,0.012) 5px
);
pointer-events: none;
}
.akte-close-btn {
position: absolute;
top: 14px; right: 14px;
background: transparent;
border: 1px solid rgba(255,69,0,0.4);
color: rgba(255,69,0,0.6);
font-family: 'Courier New', monospace;
font-size: 0.65rem;
letter-spacing: 2px;
padding: 4px 10px;
cursor: pointer;
transition: all 0.2s;
}
.akte-close-btn:hover { background: rgba(255,69,0,0.1); color: #ff4500; }
.akte-stamp {
font-size: 0.65rem;
letter-spacing: 5px;
text-transform: uppercase;
padding: 3px 10px;
display: inline-block;
font-weight: bold;
}
.akte-stamp-top {
border: 2px solid rgba(255,69,0,0.4);
color: rgba(255,69,0,0.4);
margin-bottom: 20px;
transform: rotate(-1.5deg);
display: block;
width: fit-content;
}
.akte-stamp-red {
border: 2px solid rgba(255,0,0,0.5);
color: rgba(255,0,0,0.55);
transform: rotate(-2deg);
}
.akte-stamp-gold {
border: 2px solid rgba(212,175,55,0.35);
color: rgba(212,175,55,0.4);
transform: rotate(1deg);
}
.akte-header-row {
display: flex;
gap: 24px;
margin-bottom: 22px;
align-items: flex-start;
flex-wrap: wrap;
}
.akte-photo-wrap {
position: relative;
flex-shrink: 0;
}
.akte-photo {
width: 110px;
height: 130px;
object-fit: cover;
object-position: top;
filter: sepia(0.5) brightness(0.75) contrast(1.1);
display: block;
border: 1px solid rgba(212,175,55,0.2);
}
.akte-photo-stamp {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
letter-spacing: 4px;
color: rgba(255,0,0,0.7);
border: 2px solid rgba(255,0,0,0.5);
transform: rotate(-8deg);
pointer-events: none;
font-weight: bold;
}
.akte-title-block { flex: 1; min-width: 200px; }
.akte-nr {
font-size: 0.55rem;
letter-spacing: 3px;
color: rgba(212,175,55,0.4);
margin-bottom: 8px;
}
.akte-name {
font-size: 1.4rem;
letter-spacing: 4px;
color: rgba(212,175,55,0.8);
margin: 0 0 6px;
text-transform: uppercase;
}
.akte-alias {
font-size: 0.6rem;
letter-spacing: 2px;
color: rgba(180,160,100,0.5);
margin-bottom: 12px;
}
.akte-status-row { display: flex; gap: 8px; flex-wrap: wrap; }
.akte-badge {
font-size: 0.55rem;
letter-spacing: 2px;
padding: 2px 8px;
border: 1px solid;
text-transform: uppercase;
}
.akte-badge-warn { border-color: rgba(255,180,0,0.3); color: rgba(255,180,0,0.55); }
.akte-badge-crit { border-color: rgba(255,50,0,0.3); color: rgba(255,80,0,0.55); }
.akte-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
font-size: 0.75rem;
}
.akte-table tr { border-top: 1px solid rgba(212,175,55,0.07); }
.akte-table td { padding: 7px 6px; color: rgba(190,180,150,0.65); vertical-align: top; }
.akte-key {
color: rgba(212,175,55,0.45) !important;
letter-spacing: 1px;
font-size: 0.65rem !important;
white-space: nowrap;
padding-right: 16px !important;
width: 1%;
}
.akte-redact {
background: rgba(20,20,20,0.95);
color: rgba(20,20,20,0.95);
border-bottom: 1px solid rgba(80,80,80,0.3);
user-select: none;
font-size: 0.7rem;
}
.akte-fingerprint-row {
display: flex;
align-items: flex-end;
justify-content: space-between;
flex-wrap: wrap;
gap: 16px;
margin-top: 10px;
}
.akte-fp { display: flex; align-items: center; gap: 12px; }
.akte-fp-inner {
width: 54px; height: 70px;
border-radius: 45% 45% 48% 48% / 40% 40% 60% 60%;
border: 1px solid rgba(212,175,55,0.25);
position: relative;
overflow: hidden;
flex-shrink: 0;
}
.akte-fp-inner::before {
content: '';
position: absolute;
inset: -4px;
background: repeating-radial-gradient(
ellipse at 50% 60%,
transparent 0px, transparent 3px,
rgba(212,175,55,0.12) 3px, rgba(212,175,55,0.12) 4px
);
}
.akte-fp-label {
font-size: 0.55rem;
letter-spacing: 1px;
color: rgba(212,175,55,0.35);
line-height: 1.7;
}
.akte-bottom-stamps {
display: flex;
flex-direction: column;
gap: 8px;
align-items: flex-end;
}
/* ═══════════════════════════════════════
SYSTEM STATUS WIDGET
═══════════════════════════════════════ */
#sys-widget {
position: fixed;
right: 16px;
top: 50%;
transform: translateY(-50%);
z-index: 9000;
background: rgba(0,0,0,0.88);
border: 1px solid rgba(0,255,65,0.15);
padding: 10px 12px;
width: 130px;
box-shadow: 0 0 20px rgba(0,255,65,0.05);
backdrop-filter: blur(4px);
}
.sys-widget-header {
font-size: 0.55rem;
letter-spacing: 3px;
color: rgba(0,255,65,0.35);
margin-bottom: 10px;
text-align: center;
}
.sys-metric {
display: flex;
align-items: center;
gap: 5px;
margin-bottom: 7px;
}
.sys-label {
font-size: 0.5rem;
letter-spacing: 1px;
color: rgba(0,255,65,0.4);
width: 36px;
flex-shrink: 0;
}
.sys-bar-wrap {
flex: 1;
height: 4px;
background: rgba(255,255,255,0.05);
overflow: hidden;
}
.sys-bar {
height: 100%;
background: rgba(0,255,65,0.5);
width: 0%;
transition: width 0.8s ease;
}
.sys-bar-gold { background: rgba(212,175,55,0.55); }
.sys-bar-red { background: rgba(255,69,0,0.55); }
.sys-bar-cyan { background: rgba(0,200,255,0.5); }
.sys-val {
font-size: 0.5rem;
color: rgba(0,255,65,0.45);
width: 26px;
text-align: right;
flex-shrink: 0;
}
/* ═══════════════════════════════════════
NEWSTICKER
═══════════════════════════════════════ */
#newsticker {
position: fixed;
bottom: 0; left: 0; right: 0;
z-index: 9500;
background: rgba(0,0,0,0.92);
border-top: 1px solid rgba(255,69,0,0.2);
display: flex;
align-items: center;
height: 26px;
overflow: hidden;
}
.ticker-label {
flex-shrink: 0;
font-size: 0.55rem;
letter-spacing: 3px;
color: rgba(255,69,0,0.6);
padding: 0 12px;
border-right: 1px solid rgba(255,69,0,0.2);
white-space: nowrap;
height: 100%;
display: flex;
align-items: center;
background: rgba(255,69,0,0.04);
}
.ticker-track-wrap {
flex: 1;
overflow: hidden;
height: 100%;
display: flex;
align-items: center;
}
.ticker-track {
display: inline-flex;
gap: 0;
white-space: nowrap;
animation: ticker-scroll 60s linear infinite;
}
.ticker-track:hover { animation-play-state: paused; }
@keyframes ticker-scroll {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
.ticker-item {
font-size: 0.6rem;
letter-spacing: 1px;
color: rgba(200,180,130,0.55);
padding: 0 28px;
}
.ticker-item::before {
content: '▶ ';
color: rgba(255,69,0,0.4);
}
.ticker-item.ticker-warn { color: rgba(255,180,0,0.6); }
.ticker-item.ticker-crit { color: rgba(255,60,0,0.65); }
/* Etwas Abstand für den Ticker am Seitenende */
footer { padding-bottom: 30px; }
/* ═══════════════════════════════════════
MAC NERDS PAGE
═══════════════════════════════════════ */
.mac-nerds-page { background: #050500; }
.mn-container { max-width: 960px; margin: 0 auto; padding: 30px 16px 60px; }
.mn-header { margin-bottom: 30px; }
.mn-back {
display: inline-block;
font-size: 0.65rem;
letter-spacing: 3px;
color: rgba(255,69,0,0.45);
text-decoration: none;
margin-bottom: 20px;
transition: color 0.2s;
}
.mn-back:hover { color: rgba(255,69,0,0.8); }
.mn-title {
font-size: 2.2rem;
letter-spacing: 8px;
color: var(--accent-orange);
margin: 0 0 8px;
text-shadow: 0 0 30px rgba(255,69,0,0.3);
}
.mn-subtitle {
font-size: 0.7rem;
letter-spacing: 2px;
color: rgba(150,130,80,0.5);
margin: 0 0 14px;
}
.mn-warning {
display: inline-block;
font-size: 0.6rem;
letter-spacing: 2px;
border: 1px dashed rgba(255,180,0,0.3);
color: rgba(255,180,0,0.5);
padding: 4px 12px;
}
/* Filter */
.mn-filter-bar {
display: flex;
gap: 6px;
flex-wrap: wrap;
margin-bottom: 24px;
border-bottom: 1px solid rgba(255,69,0,0.1);
padding-bottom: 16px;
}
.mn-filter {
background: transparent;
border: 1px solid rgba(255,69,0,0.2);
color: rgba(255,100,0,0.4);
font-family: 'Courier New', monospace;
font-size: 0.6rem;
letter-spacing: 2px;
padding: 4px 12px;
cursor: pointer;
transition: all 0.2s;
}
.mn-filter:hover, .mn-filter.active {
border-color: rgba(255,69,0,0.6);
color: rgba(255,100,0,0.85);
background: rgba(255,69,0,0.05);
}
/* Grid */
.mn-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 12px;
}
/* Card */
.mn-card {
background: rgba(8,5,0,0.95);
border: 1px solid rgba(255,69,0,0.12);
padding: 16px;
transition: border-color 0.2s, box-shadow 0.2s;
display: flex;
flex-direction: column;
gap: 8px;
}
.mn-card:hover {
border-color: rgba(255,69,0,0.3);
box-shadow: 0 0 16px rgba(255,69,0,0.06);
}
.mn-card-meta {
display: flex;
align-items: center;
justify-content: space-between;
}
.mn-cat-tag {
font-size: 0.5rem;
letter-spacing: 3px;
color: rgba(212,175,55,0.4);
border: 1px solid rgba(212,175,55,0.15);
padding: 1px 6px;
}
.mn-risk {
font-size: 0.5rem;
letter-spacing: 2px;
padding: 1px 6px;
border: 1px solid;
}
.mn-risk-safe { border-color: rgba(0,200,80,0.2); color: rgba(0,200,80,0.45); }
.mn-risk-caution { border-color: rgba(255,180,0,0.3); color: rgba(255,180,0,0.55); animation: blinker 2s infinite; }
.mn-card-title {
font-size: 0.9rem;
letter-spacing: 1px;
color: rgba(220,200,150,0.8);
margin: 0;
font-weight: normal;
}
.mn-card-desc {
font-size: 0.72rem;
line-height: 1.55;
color: rgba(160,150,120,0.6);
margin: 0;
flex: 1;
}
/* Command block */
.mn-cmd-block {
display: flex;
align-items: stretch;
gap: 0;
border: 1px solid rgba(0,255,65,0.12);
background: rgba(0,0,0,0.5);
margin-top: 4px;
}
.mn-cmd-code {
flex: 1;
font-family: 'Courier New', monospace;
font-size: 0.68rem;
color: rgba(0,255,65,0.7);
padding: 8px 10px;
word-break: break-all;
line-height: 1.5;
letter-spacing: 0.3px;
}
.mn-copy-btn {
flex-shrink: 0;
background: transparent;
border: none;
border-left: 1px solid rgba(0,255,65,0.12);
color: rgba(0,255,65,0.35);
font-family: 'Courier New', monospace;
font-size: 0.55rem;
letter-spacing: 2px;
padding: 0 10px;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
.mn-copy-btn:hover { background: rgba(0,255,65,0.05); color: rgba(0,255,65,0.8); }
.mn-copy-btn.mn-copy-ok { color: rgba(0,255,65,1); background: rgba(0,255,65,0.08); }