Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
mayhemstats.lol 和 Mayhem 應用程式:排行榜、建置、增強與組合,適用於《英雄聯盟》ARAM:Mayhem(Windows 軟體,Tauri 2)。也是 blank 的主頁。(暫停)
AI 翻譯
mayhemstats.lol and the Mayhem app: leaderboard, builds, augments and combos for League of Legends ARAM: Mayhem (Windows app, Tauri 2). Also home of blank. (paused).
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Stats and builds for League of Legends' ARAM Mayhem.
• mayhemstats.lol: leaderboard, records and tier lists in your browser.
• Mayhem app for Windows: in champion select you click one of the champions you are dealt to pick it, then it shows your champion's best builds and every augment in tiers S to D; Push build saves the chosen build as an item set in the client and, in champ select, sets its summoner spells. Also tier lists, combos and offmeta builds, and your rank from mayhemstats.lol.檢視完整 README ↗Stats and builds for League of Legends' ARAM Mayhem.
mayhem.exe. No installation needed.New versions: click Update at the bottom left of the app. It shows what's new and installs with one click.
Windows 10 or 11 (64-bit). The folders on this page and the "Source code" files are only the source code. All versions: Releases.
blank. was the Windows app before (Twitch, ARAM rankings with friends, PC status and more). It is paused. If you have blank., its next update turns it into the Mayhem app: same file, same shortcuts. On its first start the Mayhem app sets blank.'s gaming tweaks back and removes blank.'s autostart, Twitch sign-in, settings and saved games. The code of blank. stays here.
Tauri 2, React, TypeScript und Vite. In der Desktop-App sind alle angezeigten Daten echt: Twitch über die offizielle Helix-API (Login nötig), Akkustände direkt von den Geräten (nur lesend), PC-Werte von Windows, Musik über SoundClouds offiziellen Player. Die Browser-Vorschau zeigt für Twitch fiktive Mock-Daten; Akkus und PC-Werte gibt es dort nicht. Kein Scraping.
Neue Version veröffentlichen: Versionsnummer in package.json, src-tauri/Cargo.toml und src-tauri/tauri.conf.json anheben, committen, Tag vX.Y.Z pushen. GitHub Actions (.github/workflows/release.yml) prüft Formatierung, Lint und Rust-Tests, baut blank. nur zur Prüfung (pnpm desktop:build, wird nicht ausgeliefert, blank. ist pausiert), baut die Mayhem-App (pnpm mayhem:build) und hängt sie als mayhem.exe und – dieselbe Datei – als blank.exe an das Release (Text aus .github/release-notes.md): So wird jedes blank. per Update zur Mayhem-App, die beim ersten Start blank. aufräumt (src-tauri/src/from_blank.rs). Der Download-Link oben zeigt immer auf das neueste Release. Vorher die Klick-Prüfung aus VALIDATION („Vor jedem Release“) auf Windows durchgehen.
Prüfung bei jeder Änderung: .github/workflows/check.yml läuft bei jedem Pull Request und Push auf main: Format, Lint (pnpm lint, React-Hooks-Regeln), Build, Tests, Browser-Erweiterung sowie Rust-Tests und Clippy unter Windows.
Voraussetzungen: Node.js 22.12+ und pnpm 11. Für die Desktop-App zusätzlich Rust mit MSVC-Toolchain, Microsoft C++ Build Tools (Desktopentwicklung mit C++) und WebView2. Offizielle Anleitung: https://v2.tauri.app/start/prerequisites/
Einrichtung per winget (so auf dem Entwicklungsrechner geprüft):
winget install -e --id OpenJS.NodeJS.LTS
winget install -e --id Microsoft.VisualStudio.2022.BuildTools --override "--quiet --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --add Microsoft.VisualStudio.Component.Windows11SDK.26100"
npm install -g [email protected]
Rust über rustup-init.exe von https://rustup.rs (Standard-Toolchain stable-x86_64-pc-windows-msvc). Die Installation über winget (Rustlang.Rustup) brach auf dem Prüfrechner ab. Danach eine neue Shell öffnen, damit cargo im PATH ist.
pnpm install --frozen-lockfile
pnpm dev
Browser-Vorschau: http://127.0.0.1:1420
pnpm build # TypeScript-Prüfung und Produktionsbuild
pnpm format:check # Einheitliche Formatierung prüfen
pnpm test # Tests (Vitest): Design-System
pnpm desktop:dev # Tauri-Fenster mit Entwicklungsserver
pnpm desktop:build # Windows-EXE, noch kein Installer
pnpm extension:build # Browser-Erweiterung nach extension/dist
Die EXE entsteht unter src-tauri/target/release/blank.exe. Der sichtbare App- und Fenstertitel lautet blank.. Das Fenster ist rahmenlos: eine eigene Titelleiste im App-Design übernimmt Ziehen, Minimieren und Schließen; Größenänderung erfolgt über die unsichtbaren Fensterränder. Installer und Signierung gibt es nicht; Updates kommen über Settings → System.
7F3K-9QDX-WDM4: zehn Zeichen Geheimnis, zwei Prüfzeichen wie beim Umzugs-Code, jeder einzelne Tippfehler wird erkannt); „Beitreten“ mit Code und Name (Standard: der Twitch-Name; gespeichert als Einstellung). Im Raum: Code mit „Kopieren“, wer da ist (Lebenszeichen jede Minute, weg nach 2,5 min ohne), der Kanal und wer umgeschaltet hat, „Player öffnen/schließen“, „Neu synchronisieren“ (alle starten den Stream neu und sind wieder gleich weit), ein Feld für jeden Kanal (Name oder twitch.tv-Link; mit Twitch-Verbindung wird er geprüft und bekommt seinen Anzeigenamen) und „Verlassen“. Solange du in einem Raum bist, zeigt die Titelleiste „Im Raum · Anzahl“ (Klick öffnet ihn). Der letzte Raum bleibt gespeichert und wird als „Wieder beitreten“ angeboten, nie automatisch. Ein Klick auf eine Live-Karte schaltet im Raum für alle um statt den Browser zu öffnen. Alle dürfen umschalten; kommen zwei Wechsel gleichzeitig, gewinnt überall derselbe. Wer später beitritt, bekommt sofort den aktuellen Kanal, und der Player öffnet sich. Der Player ist Twitchs offizieller Player (player.twitch.tv) in einem eigenen Fenster „blank. Zusammen schauen“ mittig auf dem Bildschirm von blank. (Twitch erlaubt das Einbetten nur in -Seiten, blank. läuft unter ); das Fenster zeigt nur , Links zu twitch.tv öffnen im Browser, andere Fenster werden abgelehnt. Twitchs Regeln bleiben: Altershinweis einmal selbst bestätigen, Werbung wie gewohnt. Bei Live-Streams liegen die Zuschauer meist ein paar Sekunden auseinander (puffert Twitch bei jedem etwas anders); genauer geht es bei Live nicht. Verbindung ohne Konto (Wahl des Benutzers) über zwei öffentliche MQTT-Vermittler gleichzeitig (HiveMQ und Mosquitto, ): fällt einer aus, trägt der andere; getrennte Verbindungen werden mit Pausen neu aufgebaut. Alles ist in der App verschlüsselt (AES-256-GCM, Schlüssel und Raum-Adresse per PBKDF2 aus dem Code), die Vermittler sehen nur unlesbaren Text; sie sehen aber, wie jeder Server, die IP-Adressen. Verbindungen bestehen nur, solange man in einem Raum ist; wer als Letzter geht, löscht den gespeicherten Kanal auf den Vermittlern.src/
adapters/twitch.ts Twitch-Schnittstelle: Typen, Fehlerarten, Konto-API, Spielregel
adapters/twitchHelix.ts Desktop: ruft nur die freigegebenen Rust-Befehle auf
adapters/twitchMock.ts Browser-Vorschau: Daten aus data/mock.ts, Auswahl in localStorage
adapters/twitchSource.ts Wählt Helix (Tauri) oder Mock (Browser)
app/App.tsx Navigation, App-Shell, lokale UI-Einstellungen
app/TitleBar.tsx Eigene Titelleiste (Ziehfläche, Live-Auslastung, Status-Badge, Minimieren, Schließen)
app/useAppUsage.ts Liest die Auslastung alle 2 s, nur bei sichtbarem Fenster
app/SidebarAccount.tsx Profilblock unten in der Sidebar
components/ui.tsx Card, Badge, Meter, DeviceIcon
components/Guard.tsx Absturzschutz: ein Fehler bleibt in seiner Karte, Seite oder seinem Dialog
platform/errorLog.ts Fehler ins lokale Protokoll (errors.rs), Fehlerbericht zum Kopieren
platform/window.ts Isolierter Adapter für native Fensteraufrufe
platform/system.ts Adapter für Auslastung und Autostart (nur Desktop-App)
adapters/devices.ts Adapter für die Akkustände (nur Desktop-App)
adapters/pc.ts Adapter für PC-Status und Warnungs-Ereignisse (nur Desktop-App)
adapters/soundcloud.ts SoundCloud: Profilprüfung (oEmbed), Steuerung des eingebetteten Players per postMessage
adapters/media.ts Was gerade läuft (Windows-Medienschnittstelle) und Zurück/Pause/Weiter (nur Desktop-App)
platform/popout.ts Popouts: Meldungen an das Popout-Fenster, Befehle des Popout-Fensters
app/useWarnings.ts Akku- und Überlast-Warnungen für Meldungen und Popouts
adapters/watchRoom.ts Zusammen schauen ohne App-Teil: Raum-Code, Schlüssel, Nachrichten (auch für die Erweiterung)
data/mock.ts Zentrale, statische Beispieldaten
design/ Design-System: Tokens, Themes, Bewegung, Anpassung, Auflösung (siehe design/README.md)
features/
home/ twitch/ pros/ aram/ music/ devices/ pc/ apps/ settings/ popouts/
features/settings/preferences.ts Einstellungen: Typ, Standardwerte, Prüfung (gespeichert und importiert)
features/settings/settingsFile.ts Übertragen: Dateiformat und strenge Prüfung beim Import
styles/tokens.css Erster Bildaufbau: Farben, Abstände, Radien, Schrift (gleich mit design/themes.ts)
styles/app.css Layout, Komponenten und responsive Regeln
src-tauri/
src/twitch/ Helix-Zugriff, Device Code Login, Token im Windows-Tresor,
EventSub-WebSocket für sofortige Live-Meldungen (eventsub.rs)
src/sound.rs Live- und Warnton (src/assets/*.wav, eingebettet) über PlaySoundW, Lautstärke durch Skalieren einer Kopie
src/window_aspect.rs Festes Seitenverhältnis + Inhalts-Zoom
src/monitor.rs Startposition: zuletzt benutzte Stelle und Größe (window.json), sonst mittig auf dem zweiten Monitor
src/errors.rs Fehlerprotokoll errors.log (nur auf diesem PC, ohne Benutzerordner und -name), Bericht zum Kopieren
src/winver.rs Windows-Build (nur lesend): Windows 10 oder 11
src/background.rs Minimiert: WebView2 unsichtbar + Speicherziel „niedrig“
src/usage.rs Eigene Auslastung (blank.exe + WebView2-Prozesse)
src/autostart.rs „Mit Windows starten“ (Run-Eintrag des Benutzers)
src/battery.rs Akkustände: Logitech HID++ und HyperX, nur lesende Anfragen
src/single_instance.rs Nur eine laufende App; ein zweiter Start holt die ganze App nach vorn
src/flyout.rs Popout-Fenster: bei Bedarf erzeugt, unten mittig, ohne Fokus, nach 30 s Ruhe geschlossen
src/media.rs Was gerade läuft, per Ereignis von Windows (GlobalSystemMediaTransportControls)
src/tray.rs Symbol im Infobereich (Pfeil unten rechts): Klick/„Öffnen“ → App, „Beenden“
src/pc.rs PC-Status, Programme mit der meisten Last, Überlast- und Akku-Warnungen, Programm schließen
src/soundcloud.rs Öffnet soundcloud.com-Links (Track, Uploader) im Browser, sonst nichts
src/settings_file.rs Export: ergänzt Twitch-Kanäle und Client-ID, schreibt nach Downloads
src/memory.rs RAM bereinigen wie Mem Reduct (eigener Start mit Adminrechten, nur auf Klick)
src/apps.rs Reset-Helfer: installierte Programme lesen, gewählte direkt vom Hersteller installieren (Signatur geprüft)
src/tweaks.rs Gaming-Optimierung: feste Liste von Benutzer-Einstellungen, Sicherung + Rückgängig
src/update.rs Updates aus den eigenen GitHub-Releases (Prüfsumme, Austausch, Neustart)
src/aram.rs ARAM-Mayhem-Rangliste: Spiele aus dem League-Client (nur lesend, 127.0.0.1), gespeichert in aram.json
src/watch.rs Zusammen schauen: Raum über zwei öffentliche MQTT-Vermittler (nur verschlüsselter Text), Twitch-Player-Fenster
build.rs App-Manifest: nur freigegebene Befehle aufrufbar
capabilities/ Fenster ziehen/minimieren/schließen, Ereignisse + einzeln freigegebene eigene Befehle
tauri.conf.json Fenster, Build-Verknüpfung und CSP
extension/ Browser-Erweiterung „Zusammen schauen“ (eigener Build: pnpm extension:build → extension/dist)
src/background.ts Der Raum im Hintergrund der Erweiterung; ein Twitch-Tab folgt ihm
src/mqtt.ts MQTT 3.1.1 über WebSocket, dieselben Pakete wie src-tauri/src/watch.rs
src/channel.ts Kanal eines Tabs, nur aus seiner Adresse
src/popup.ts Kleines Fenster: Raum starten, beitreten, verlassen
Die Hauptbereiche (Home, Twitch, Pros, Devices, PC, Settings) sind eigene Komponenten. Für dieses Grundgerüst reicht eine typisierte Navigation ohne Router. React-Zustand bleibt lokal; nur Anzeigepräferenzen werden gespeichert. Ein defekter oder gesperrter Speicher führt nicht zum Absturz. Ein Fehler beim Zeichnen bleibt in seinem Teil (components/Guard.tsx: jede Seite, jedes Home-Widget, Einstellungen, Dock, Dialoge, Popout-Fenster; ganz außen app/CrashScreen.tsx statt eines schwarzen Fensters) und landet mit nicht abgefangenen Fehlern im lokalen Protokoll. Jedes Fenster lädt nur seinen Teil des Codes (main.tsx: das Popout-Fenster nie die Seiten der App). Native Fensteraufrufe laufen ausschließlich über platform/window.ts (@tauri-apps/api) und erst bei Benutzereingabe; die Browser-Vorschau blendet die Fensterknöpfe aus und benötigt keine Tauri-Laufzeit.
Ein Design, „Klassisch“ (Aufbau siehe unten), mit sechs Farbschemata. Die übrigen Designs (Arena, Klar, HUD, Bento, Void, Orbit, Axiom) wurden auf Benutzerwunsch entfernt; eine früher gespeicherte Design-Wahl wird beim Lesen der Einstellungen ignoriert, das Farbschema bleibt. Nur die Popout-Farbe „hell“ hat eigene helle Farben (html[data-popout-look='light'] in tokens.css, gesetzt im Popout-Fenster). Keine Dauer-Animationen, keine fremden Logos oder Bilder.
Design-System (src/design/, Details in src/design/README.md): alle Werte als benannte Tokens (Farben, Abstände, Radien, Schatten, Schrift, Bewegung), Themes mit Vererbung (Basis → Dunkel → Klassisch) plus Farbschema, eine gespeicherte, geprüfte Anpassung mit Presets und Migrationen, und eine Auflösung Standard → Theme → Farbschema → Preset → eigene Änderung → Vorschau mit Herkunft je Wert. Die App schreibt das Ergebnis als CSS-Variablen auf <html>. Alles unter Settings → Darstellung läuft darüber und ist sofort in der ganzen App zu sehen; frühere Einstellungen („Kompakte Ansicht“, „Animationen“) werden beim ersten Lesen übernommen. Ohne eigene Änderungen sieht alles aus wie vorher (geprüft, siehe VALIDATION). Bewegung (nach Beispiel-Videos des Benutzers: mit Ursprung, fließend): Seiten kommen aus der Richtung des Menüeintrags, die ersten Karten gestaffelt, Reiter von der Seite ihres Reiters, Aufgeklapptes vom Knopf her; der Inhalt blendet beim Start und Wiederherstellen ein und vor dem Minimieren/Schließen aus; das kompakte Musik-Popout wächst beim Hovern fließend zur großen Ansicht. Alles kurz und einmalig; „Animationen“ aus: nichts bewegt sich. Startbildschirm: Lichtpartikel wirbeln herein und bilden „blank“, der Punkt fällt mit Druckwelle und Funken, darunter der echte Ladestand (Twitch, PC, Geräte), dann öffnet sich der Punkt wie ein Portal zur App; beim ersten Start länger, später kürzer, Klick oder Taste überspringt.
Live-Ton: „new notification 07“ von Universfield (Pixabay), vom Benutzer ausgewählt, einmalig von MP3 in WAV umgewandelt (src/assets/live-alert.wav), weil PlaySoundW nur WAV abspielt. PlaySoundW kennt keine Lautstärke; play_alert_sound(volume) multipliziert die 16-Bit-Samples einer Kopie mit (Lautstärke/100)² und spielt sie in einem eigenen Thread (Browser-Vorschau: audio.volume mit derselben Kurve).
Eigenständige Gestaltung mit dunklen Grün-/Schwarztönen (Standard; weitere Farbschemata in den Settings: data-theme auf <html>, Paletten in src/styles/tokens.css mit gleicher Helligkeit/Sättigung und anderem Farbton, abgeleitete Töne per color-mix()), Sidebar, abgerundeten Cards und dezenten Akzenten. Aufbau lose an Desktop-Apps wie DPM angelehnt (keine Assets übernommen): Sidebar auf dunklem Rahmen mit Abschnitten (Übersicht, Live, System), aktivem Balken und Profilblock (Twitch-Konto, öffnet Settings); Inhalt in einem eingerahmten Panel mit Seitenkopf (Symbol-Kachel + Titel); Status-Badge in der Titelleiste; Leerzustände mit Symbol-Kachel. Keine kopierten Referenz-Logos oder Produktbilder. Symbole: Lucide (ISC-Lizenz); Schrift: lokal verfügbare Segoe UI/Systemschrift. src-tauri/icons/icon.ico ist ein eigenes, neutrales Icon (weißes „b.“ auf fast schwarzer, abgerundeter Kachel, Rand durchsichtig), unabhängig von den Farbschemata und auf heller wie dunkler Taskleiste lesbar; Quelle src-tauri/icons/icon.svg. Neu erzeugen: pnpm tauri icon src-tauri/icons/icon.svg -o <Temp-Ordner> und nur icon.ico übernehmen; danach src-tauri/build.rs berühren (Änderungsdatum), sonst bettet der Build weiter das alte Icon in die EXE ein. Es werden keine Fonts aus dem Netz geladen; Bilder aus dem Netz nur als Inhalt: Twitch-Vorschauen/Profilbilder und im Pros-Tab Champion-Icons von Riots Data Dragon (nicht im Repo gebündelt).
Tastaturbedienbare Navigation, sichtbare Fokusmarkierung, beschriftete Formulare, semantische Schalter, ein Sprunglink und Beachtung von prefers-reduced-motion sind enthalten. Das Badge „Mock“ in der Titelleiste erscheint, solange Daten simuliert sind (Browser-Vorschau); in der Desktop-App ist nach dem Entfernen des League-Platzhalters nichts mehr simuliert. Kleinere Browserfenster erhalten eine kompakte Sidebar; im Desktopfenster greift sie nie, weil der Inhalt dort immer 860 CSS-Pixel breit ist.
Den ganzen Projektordner einschließlich CLAUDE.md, pnpm-lock.yaml und dieser README kopieren oder in ein eigenes Git-Repository übernehmen. node_modules, dist und src-tauri/target werden nicht mitgegeben. Anschließend pnpm install --frozen-lockfile ausführen. Für Twitch-Echtdaten wird eine eigene Client-ID benötigt (siehe oben); sonst sind keine Schlüssel oder Accounts notwendig.
Twitch-Anbindung: Login per Device Code Flow (Public Client, kein Client Secret, keine Scopes). Der OAuth-Token liegt nur in der Windows-Anmeldeinformationsverwaltung (Eintrag blank.twitch), Client-ID und Kanalauswahl in %APPDATA%\com.blank.desktop\twitch.json. Alle Anfragen laufen in Rust (reqwest mit Windows-Schannel); das Frontend erhält nie einen Token. Token-Validierung beim Start und stündlich (Twitch-Vorgabe), automatischer Refresh, bei Ablauf „Nicht verbunden“. Endpunkte: GET /helix/streams?user_login=… (bis 100 Kanäle, alle 60 s), /helix/users, /helix/search/categories. Spielregeln werden lokal über game_id angewendet. CSP erlaubt zusätzlich nur Bilder von static-cdn.jtvnw.net, ddragon.leagueoflegends.com (Champion-Icons im Pros-Tab) und *.sndcdn.com (SoundCloud-Bilder), Abrufe von soundcloud.com (nur oEmbed) und als einziges eingebettetes Fenster w.soundcloud.com (Player). Kein Scraping, keine inoffiziellen Endpunkte.
Neue Integrationen zuerst als typisierte Adapter außerhalb der UI planen. Mock- und echte Daten müssen unterscheidbar bleiben; Lade-, Fehler-, Offline- und Nicht-verfügbar-Zustände gehören zur Schnittstelle. Tokens/Secrets niemals in Frontend-Code, VITE_*, Logs oder Git ablegen. Native Berechtigungen nur gezielt ergänzen. Eine spätere Datenquelle darf nicht unmittelbar aus beliebigen UI-Komponenten abgefragt werden.
Git: .gitignore, .gitattributes, Prettier-Konfiguration und Lockfiles liegen bei; der Code liegt öffentlich auf GitHub, Releases siehe „Download“.
Siehe VALIDATION.md für den tatsächlichen Prüfstand und CLAUDE.md für Arbeitsregeln.
Das Fenster ist voll deckend (die frühere ~92-%-Transparenz wurde auf Benutzerwunsch verworfen) und hat dadurch wieder den normalen Windows-Schatten und abgerundete Ecken. Kein Durchklicken, kein Always-on-top.
Ressourcen. Die App soll dauerhaft im Hintergrund laufen können. Mit „Animationen“ an nutzt WebView2 die Grafikkarte (flüssige Bewegung, gemessen ~43 MB mehr Speicher, bei Animationen gut ein Drittel weniger CPU); mit „Animationen“ aus startet sie mit --disable-gpu --in-process-gpu (kein eigener GPU-Prozess, Software-Darstellung). Die Wahl gilt ab dem nächsten Start (src-tauri/src/gpu.rs, gpu.json); Settings → Darstellung bietet dann „Jetzt neu starten“. Minimiert wird die WebView als unsichtbar markiert (Chromium drosselt Zeichnen und Timer, document.hidden) und auf niedrigen Speicherverbrauch gesetzt; Skripte laufen weiter, Live-Meldungen und Ton funktionieren also. Der Pros-Tab und die Auslastungsanzeige pausieren minimiert; die Twitch-Abfrage läuft weiter, weil sie Live-Meldungen für Kanäle außerhalb von EventSub liefert. Die Titelleiste zeigt live CPU (Anteil an allen Kernen) und Arbeitsspeicher (privater Arbeitssatz, wie Task-Manager) aller Prozesse der App.
Popouts. Ist blank. nicht das aktive Fenster (minimiert, verdeckt oder auf dem anderen Bildschirm), erscheint an der gewählten Stelle (Standard: unten mittig über der Taskleiste des Hauptbildschirms) ein kleines Popout wie bei FluentFlyout (src-tauri/src/flyout.rs, src/features/popouts/): wer live geht (Klick öffnet den Stream), Akku- und Überlast-Warnungen („Details“ öffnet die passende Seite, bei Überlast auch „Programm schließen“) und Musik aus einem beliebigen Player – bei neuem Lied, Pause und Weiterspielen (z. B. mit den Medientasten), etwa Spotify, YouTube, YouTube Music oder der Browser – mit Cover, Titel, Künstler, App und Knöpfen für Zurück, Pause/Abspielen und Weiter (ausgegraut, wenn der Player es nicht anbietet); auch der eigene SoundCloud-Mix von blank. (Titel, Künstler und Cover von SoundCloud; Pause, Nächster Titel und Spulen steuern den Mix in der App). Aufbau nach FluentFlyout (Vorlage des Benutzers, mit eigenem CSS nachgebaut): Cover links, Titel und Künstler, großer gefüllter Pause-Knopf in der Akzentfarbe des Designs, App-Name klein, darunter der Fortschritt mit Zeiten – Klicken oder Ziehen springt, wenn der Player es erlaubt; Live-Streams ohne Länge zeigen keinen. Den Fortschritt fragt das Popout nur beim Erscheinen einmal ab und zählt danach selbst weiter, solange es zu sehen ist. Was läuft, liest src-tauri/src/media.rs über dieselbe Schnittstelle, die Windows für seine eigene Medienanzeige und den Sperrbildschirm nutzt (GlobalSystemMediaTransportControls): nur Ereignisse, keine Abfragen; auch Videos und Streams im Browser zählen, ein neuer Kanal ist also ein neues „Lied“. Die Stelle wie bei FluentFlyout unter Settings → Popouts → Position (oben oder unten, links, Mitte oder rechts, 12 px vom Rand; jede Auswahl und „Testen“ zeigen ein Probe-Popout) und bei mehreren Bildschirmen „Bildschirm“: Hauptbildschirm, zweiter (der erste, der nicht der Hauptbildschirm ist) oder der mit der Maus. Drückt man eine Medientaste, zeigt Windows zusätzlich seine eigene kleine Anzeige. Alles einstellbar unter Settings → Popouts (nach der Funktionsliste von FluentFlyout, die der Benutzer geliefert hat; mit Suche über alle Settings): an/aus mit „Testen“, auch bei Vollbild, auch wenn blank. vorne ist, Linksklick auf das Symbol im Infobereich (App öffnen oder Musik zeigen – „Gerade läuft nichts“, wenn nichts spielt); Musik: an/aus, auch bei Pause und Weiter, „Immer anzeigen“ oder Anzeigedauer 1–30 s, Layout normal/kompakt (kompakt: eine Zeile mit schmalem Fortschrittsbalken statt der Knöpfe, ohne Länge wie bei Twitch live ohne Balken; mit der Maus darauf klappt es sofort in die große Ansicht mit Fortschrittsbalken zum Spulen auf, gemessen ≈ 10 ms bis das Fenster seine neue Größe hat, und 250 ms nach dem Verlassen wieder zu; es wächst von der Bildschirmkante weg), Titel zentrieren, Player-Name (Klick öffnet den Player: Store-Apps über ihre ID, sonst wird das Fenster des Programms nach vorn geholt), Fortschrittsbalken, Wiederholen- und Zufall-Knopf (wenn der Player es kann; das Popout wird breiter), andere Medien automatisch pausieren (startet ein Player oder der Mix, halten die anderen an), „Als Nächstes“ (kleines Popout mit eigener Dauer, wenn ein Lied von selbst folgt: das vorige lief bis auf 6 s zu Ende); : alle, nur diese oder alle außer diesen (Namen wie „Spotify“, „Chrome“, eigener Mix „blank.“; „Die gerade spielt“ trägt die laufende App ein); : Live, Warnungen, „Immer anzeigen“ oder 1–30 s; : Farben wie blank., dunkel oder hell, Hintergrund (keiner, Cover-Schein, aufsteigender Schein, unscharfes Cover – einmal gezeichnet, nichts bewegt sich), Cover-Farbe als Akzent, Deckkraft 20–100 % (Standard 88 %: etwas durchscheinend), Acrylic (dahinter unscharf, mit Rahmen und Schatten von Windows), Hineingleiten (aus, 0,5×–2× von 250 ms) mit Verlauf (gleichmäßig, sanft, Standard, kräftig): das Popout gleitet durchscheinend 18 px vom Bildschirmrand her herein und genauso wieder hinaus, erst wenn sein Fenster steht; nur mit „Animationen“, standardmäßig auch wenn die Animationseffekte von Windows aus sind (abschaltbar: „Auch wenn Windows-Animationen aus sind“); : Stelle und Bildschirm (Haupt, zweiter, wo die Maus ist, wo das aktive Fenster ist). Neue Einstellungen wirken sofort, auch auf ein offenes Popout. Pause, Wiederholen und Zufall zeigen den neuen Zustand schon beim Klick (≈ 2 ms), bevor der Player antwortet; seine Rückmeldung ersetzt ihn, bleibt sie aus, springt die Anzeige nach 3 s zurück. Knöpfe geben beim Drücken nach. Mit der Maus darauf oder nach einem Klick darin bleibt es offen und geht erst einige Sekunden danach; meldet ein Player kurz „nichts“ (Tab- oder Titelwechsel), bleibt der letzte Titel noch 3 s stehen. Live-Meldungen und Warnungen kommen vor ein offenes Musik-Popout, danach ist die Musik wieder da; weitere warten dahinter („+1“). Ein offenes Mix-Popout folgt Pause, Weiter und Titelwechsel an Ort und Stelle, ohne neu aufzuspringen; Ein × gibt es nicht (ausschalten nur unter Settings → Popouts): Meldungen ohne eigene Knöpfe gehen mit einem Klick darauf, Live mit „Stream öffnen“. Das Popout nimmt beim Erscheinen nie den Fokus (erst ein Klick darauf; nur so darf „Details“ die App nach vorn holen), fehlt in Taskleiste und Alt+Tab, hat die Farben des gewählten Farbschemas und kommt nicht, solange auf seinem Bildschirm ein Vollbild-Spiel, ein Vollbild-Video oder eine Präsentation läuft, und verschwindet sofort, wenn dort etwas in den Vollbildmodus geht (ein Vollbild auf dem anderen Bildschirm stört nicht; ), bei „Nicht stören“ oder wenn es unter Settings → Popouts ausgeschaltet ist. Das Popout-Fenster selbst ist unsichtbar: ohne Acrylic zeichnet Windows weder Rahmenlinie noch runde Ecken darum, die Karte malt Hintergrund, Rand und Schatten selbst (mit 10 px durchsichtigem Rand für den Schatten). Es hat eine eigene kleine WebView, die erst beim Popout entsteht und eine halbe Minute nach dem letzten wieder geschlossen wird (gemessen: ≈ 40 MB, solange es offen ist; danach endet sein WebView-Prozess; sichtbar nach ≈ 0,2 s). Das frühere Pet wurde dafür auf Benutzerwunsch entfernt; das Hauptfenster bleibt technisch transparent angelegt wie bisher (), die App malt ihren Hintergrund selbst voll deckend.
Warnungen und „Nicht stören“. src-tauri/src/pc.rs misst im Hintergrund alle 10 s (Home 5 s, PC-Seite 2 s; minimiert gemessen 0,03 % CPU für die ganze App; beim Start zuerst CPU, RAM und Laufwerk nach 0,25 s, die Grafikkarten-Zähler öffnen danach, weil Windows dafür alle GPU-Teile auflistet): CPU aus GetSystemTimes, RAM aus GlobalMemoryStatusEx, Grafikkarte aus den Windows-Leistungsindikatoren „GPU Engine“ (wie der Task-Manager, per DXGI der Grafikkarte mit dem meisten Videospeicher zugeordnet), Laufwerk aus GetDiskFreeSpaceEx, pro Programm CPU/RAM/GPU (Name aus der Dateibeschreibung, z. B. „Google Chrome“). CPU oder RAM ≥ 90 % für 30 s bzw. Grafikkarte ≥ 95 % für 60 s ergibt höchstens alle 30 min eine Warnung mit den zwei größten Verursachern; Akku ≤ 15 % (Prüfung alle 10 min) einmal, bis das Gerät wieder geladen wurde. Beide Warnungen einzeln abschaltbar (Settings → Benachrichtigungen); in der App als Karte (Klick öffnet PC bzw. Devices), im Hintergrund als Popout. „Nicht stören“ (Glocke in der Titelleiste, auch in den Settings, bleibt gespeichert, wird nie automatisch geschaltet): kein Live-Ton, keine Popouts; die Meldungen in der App erscheinen trotzdem still.
Warnton und Programm schließen. Überlast-Warnungen spielen einen eigenen Ton: „warning alert“ von Universfield (Pixabay), vom Benutzer ausgewählt, einmalig in WAV umgewandelt (src/assets/warning-alert.wav, play_alert_sound(volume, sound: "warning"), gleiche Lautstärke wie der Live-Ton, still bei „Nicht stören“). Karte und Popout zeigen für den größten Verursacher mit eigenem Fenster „ schließen“: wie das X am Fenster (WM_CLOSE an die sichtbaren Hauptfenster des Programms in der eigenen Sitzung, close_program(exe, force: false)), das Programm kann also noch nach dem Speichern fragen. Läuft es nach 4 s noch (program_running), wird „Beenden erzwingen“ angeboten (TerminateProcess, Hinweis auf Datenverlust). Windows-Systemprozesse (u. a. explorer, dwm, csrss, svchost, lsass, msedgewebview2) und blank. selbst werden nie geschlossen; Programme ohne eigenes Fenster (z. B. Hintergrunddienste) bekommen keinen Knopf.
Taskleiste und Infobereich. blank. hat ein Symbol im Infobereich (unter dem Pfeil unten rechts, src-tauri/src/tray.rs, Tauri-Feature tray-icon): Linksklick oder „Öffnen“ zeigt die ganze App (minimiert oder verdeckt), „Nicht stören“ schaltet es um, ohne die App zu öffnen (Haken folgt jeder Änderung, auch aus Titelleiste und Settings), „Beenden“ schließt sie. Das X in der Titelleiste beendet die App weiterhin (nicht in den Infobereich).
Nur eine Instanz. Ein zweiter Start (Doppelklick, Autostart plus manueller Start) beendet sich sofort und holt das laufende Fenster nach vorn, auch aus dem minimierten Zustand (benannter Mutex Local\blank.single-instance; gesucht wird genau der Fenstertitel „blank.“, Popouts heißen „blank. Popout“). Zwei Instanzen lagen sonst deckungsgleich auf dem zweiten Monitor, meldeten jeden Live-Start doppelt und überschrieben sich gegenseitig die Einstellungen.
Startposition. Das Fenster öffnet mittig im Arbeitsbereich des zweiten Monitors (erster Monitor, der nicht der Hauptmonitor ist); mit nur einem Monitor an der Standardposition. Unterschiedliche Anzeigeskalierungen der Monitore werden berücksichtigt, sind aber nicht getestet (hier beide 96 DPI).
Festes Seitenverhältnis 860 : 640. Das Fenster lässt sich nur proportional ziehen (Breite 720–1000, Höhe folgt: 536–744); src-tauri/src/window_aspect.rs erzwingt das DPI-genau über WM_SIZING, WM_WINDOWPOSCHANGING und WM_GETMINMAXINFO. Der WebView-Inhalt wird per Zoom mitskaliert, die Seite ist intern immer exakt 860 × 640 CSS-Pixel groß und bricht nie um. Übersichtsseiten (Home, League, Devices, PC) füllen diese Fläche genau; Twitch und Settings scrollen. Maximieren deaktiviert, kein Vollbild. Die Oberfläche enthält nur Navigation, Karten und einen globalen Mock-Hinweis. Keine Website oder Landingpage; der Browser dient nur der Entwicklungsprüfung. Kompakte Layoutregeln liegen in src/styles/desktop.css.
blank. und die Website mayhemstats.lol (apps/mayhem-site) sind Open Source unter der GNU Affero General Public License v3.0 (AGPL-3.0-only). Du darfst den Code nutzen, ändern und weitergeben. Wer eine veränderte Fassung weitergibt oder als Website betreibt, muss deren Quellcode unter derselben Lizenz veröffentlichen. Fremde Teile behalten ihre eigene Lizenz (z. B. apps/mayhem-site/vendor/, Lucide unter ISC). Bilder von Riot (Data Dragon) liegen nicht im Repo und gehören Riot Games. blank. und mayhemstats.lol sind nicht von Riot Games unterstützt oder gesponsert.
httpshttp://tauri.localhostplayer.twitch.tvsrc-tauri/src/watch.rsextension/, Manifest V3 für Chromium-Browser (ab Chrome 116). Sie tritt denselben Räumen bei wie blank.: Raum-Code, Topic, Schlüssel und Nachrichten kommen aus demselben Code (src/adapters/watchRoom.ts), die MQTT-Pakete sind dieselben wie in watch.rs (per Test mit denselben Bytes), dieselben zwei Vermittler. Auf der Twitch-Seite zeigt sie nichts; nur das Symbol oben trägt die Zahl der Personen im Raum, ein Klick öffnet das kleine Fenster (Name, Raum starten, Code und Beitreten, „Wieder beitreten“; im Raum Code mit „Kopieren“, wer da ist, der Kanal und wer umgeschaltet hat, „Neu synchronisieren“, „Verlassen“). Genau ein Twitch-Tab folgt dem Raum: der, in dem man den Raum betritt (oder „Diesen Tab nutzen“); ohne ihn öffnet sich beim nächsten Umschalten einer. Wechselt man in diesem Tab zu einem Kanal (Link, Suche, Adresse), geht das an alle; ein Wechsel von anderen lädt den Kanal in diesem Tab. Die Erweiterung liest dafür nur die Adresse des Tabs (twitch.tv/<kanal>, keine Twitch-Seiten wie Directory oder Videos), nichts vom Inhalt der Seite, und greift nicht in die Seite ein; „Neu synchronisieren“ lädt den Tab neu. Tritt man einem leeren Raum bei, wird nach 3 s der Kanal des Tabs der Raum-Kanal. Kanäle, die sie selbst gerade geladen hat, gelten 10 s lang nicht als eigener Wechsel (zwei schnelle Wechsel pendeln sonst hin und her). Berechtigungen: nur storage und twitch.tv; CSP erlaubt Verbindungen nur zu den zwei Vermittlern. Ohne Twitch-API heißt ein Kanal dort wie sein Login. Der Raum steht während der Sitzung in storage.session (der Browser pausiert den Hintergrund einer Erweiterung; er macht dann dort weiter), Name und letzter Raum-Code in storage.local; nach einem Browser-Neustart ist man nicht mehr im Raum (nie automatisch betreten). Ein MQTT-Ping alle 20 s hält den Hintergrund wach, solange man in einem Raum ist.http://localhost, Kategorie beliebig, Client-Typ „Öffentlich“ (Public). Die Client-ID in blank. unter Twitch oder Settings eintragen, „Mit Twitch verbinden“ und den Code im Browser bestätigen. Es werden keine Berechtigungen (Scopes) angefragt; ein Client Secret wird nicht benötigt. Für alle auf einmal: Steht die Client-ID als Repository-Variable TWITCH_CLIENT_ID in GitHub (Settings → Secrets and variables → Actions → Variables), baut der Release-Ablauf sie in blank.exe ein (BLANK_TWITCH_CLIENT_ID, src-tauri/src/twitch/mod.rs); dann fragt blank. niemanden mehr nach einer Client-ID, alle melden sich nur an. Eine eigene, eingetragene Client-ID geht weiterhin vor. Eine Client-ID ist kein Geheimnis.src/data/proStreamers.ts, 242 Twitch-Kanäle: handverlesene Pros/Ex-Pros/High-Elo/OTPs plus Spieler aus dem DPM.LOL-Leaderboard, per Twitch-API geprüft), nach Zuschauern sortiert. Jede Karte zeigt kleine Icons der drei meistgespielten Champions (bei OTPs nur deren Champion), die Lane und die Einordnung (z. B. „Mid · Pro · FNC“, „Top · OTP Riven“, „ADC · High Elo“); Lane und Champions sind eine Momentaufnahme aus DPM.LOL vom 22.09.2026. Filter-Knopf neben dem Aktualisieren-Knopf: Lane (Top/Jungle/Mid/ADC/Support) und Typ (Pro/OTP/High Elo) mit Live-Anzahl je Option, nicht gespeichert. Keine Offline-Kanäle, keine manuelle Eingabe; Streams anderer Spiele werden ausgeblendet. Abruf alle 60 s, nur solange der Tab offen ist, plus Aktualisieren-Button. Die Liste wird von Hand gepflegt; Seiten wie DPM.LOL, trackingthepros oder Leaguepedia werden nicht zur Laufzeit ausgelesen. Mit 242 Kanälen fragt der Tab 3 Pakete à 100 pro Minute ab.…/sets/…; geprüft über SoundClouds offizielles oEmbed, ohne Schlüssel und Konto) und per „Mix“ deren Tracks in zufälliger Reihenfolge abspielen. Ein Profil spielt nur eigene Uploads; wer nur Playlists anlegt (z. B. Sammlungen fremder Tracks), wird über den Playlist-Link hinzugefügt. Pause/Weiter, nächster Zufallstrack, Stopp, Position (springen möglich) und eigene Lautstärke. Es läuft SoundClouds offizieller eingebetteter Player, unsichtbar; die Seite zeigt Track, Uploader und „SoundCloud“ mit Links auf soundcloud.com (verlangen SoundClouds Nutzungsbedingungen). Die Musik spielt über Seitenwechsel und minimiert weiter. Der Player existiert nur, solange ein Mix läuft: vorher und nach „Stopp“ kostet die Seite nichts. Gespeichert unter blank.music.v1 (Accounts, Lautstärke). Tracks, die SoundCloud nicht zum Einbetten freigibt, werden übersprungen; Go+-Tracks großer Labels spielt der Player nur als Vorschau. Verbindungsprobleme: Jede Anfrage an SoundCloud hat 8 s Zeit und wird bei Netzfehler, Zeitüberschreitung oder Serverfehler zweimal wiederholt (nach 1 s und 3 s). Antwortet SoundCloud trotzdem nicht, wird ein gültiger Link trotzdem gespeichert („Noch nicht geprüft – folgt automatisch“) und beim nächsten Start, sobald das Internet zurück ist, beim nächsten Mix und einmal nach 60 s erneut geprüft; Name und Bild kommen dann von selbst. Ohne Internet wartet ein Mix („Keine Internetverbindung – … geht weiter, sobald sie wieder da ist“) und startet bzw. spielt danach von allein weiter; bekommt der Player 20 s keine Antwort, startet er einmal neu, bevor er aufgibt. Private Playlists gehen mit ihrem Geheim-Link (…/sets/…/s-…, Code bleibt wie angegeben); Kurzlinks aus der SoundCloud-App (on.soundcloud.com) werden erkannt und erklärt.blank.exe --clean-memory mit Adminrechten. Nie automatisch. Programme laden danach Benötigtes von der Festplatte nach, das kann kurz ruckeln. Die Home-Karte „PC-Status“ zeigt dieselben Werte; Titelleisten-Badge „Live“.latest.yml nennt die neueste Datei samt SHA-512, die zusätzlich geprüft wird), die erlaubten Server des Herstellers und den genauen Namen im Signaturzertifikat (z. B. „Discord Inc.“, „Riot Games, Inc.“). Die Seite liest die Windows-Programmliste und zeigt: installierte Programme aus der Liste, weitere aus der Liste und „Nur von Hand“ (alles andere, z. B. Spiele aus Launchern, Store-Apps, Programme ohne festen Direkt-Link wie die NVIDIA App, unsignierte Installer wie Rustup). „Mitnehmen“ legt ein Programm auf die Liste (sofort gespeichert und Teil der Übertragungs-Datei). „Programme installieren“ holt fehlende nacheinander: Download nur über https und nur von den Servern des Herstellers (Weiterleitungen werden geprüft, höchstens 1 GB), dann prüft Windows die digitale Signatur (gültig, vertrauenswürdig, nicht widerrufen) und blank. vergleicht den Signierer genau mit der Liste – sonst wird die Datei ungeöffnet gelöscht. Wo die Schalter bekannt sind, installiert es ohne Fragen (z. B. Discord, Steam, Chrome, Spotify, Riot-Spiele); sonst öffnet sich der normale Installer zum Durchklicken. Installer mit Adminbedarf fragen Windows selbst. „Nach diesem Programm aufhören“ stoppt einen laufenden Download sofort, eine Installation nie mittendrin. Nichts läuft im Hintergrund. Geplant: automatisch online über das Microsoft-Konto.7F3K9-2QDXW-DBWWB-8CCGS-XN) enthält Geheimnis, Dienst, Ablage-ID und zwei Prüfzeichen; ohne ihn kann niemand die Daten lesen, auch der Dienst nicht. Beim ersten Start auf einem frischen PC (keine gespeicherten Einstellungen) fragt blank. von selbst nach dem Code, sonst über „Code eingeben“ auf der Seite Apps. Beim Eintippen sind Groß-/Kleinschreibung, Leerzeichen und Bindestriche egal, O/I/L im Geheimnis zählen als 0/1/1; jeder einzelne falsche, fehlende, zusätzliche oder vertauschte Buchstabe wird vor dem Laden als Tippfehler erkannt. Nach dem Laden zeigt blank. den Inhalt und ersetzt erst nach „Übernehmen“. Netzwerk nur zu dpaste.com und catbox.moe/files.catbox.moe (Rust, src-tauri/src/cloud.rs), nur auf Klick.src/features/edit/): Home als Raster mit Widgets (Twitch, Setup, PC, Musik, ARAM) zum Ziehen, Einrasten, Vergrößern, Umbenennen, Entfernen und Hinzufügen; Seitenleiste sortieren und ausblenden; Dock mit Rückgängig/Wiederholen, Stil, Farben, Form, Bewegung, Widgets, Popout (auf einem Mini-Bildschirm hinziehen: das Ziel leuchtet als Magnet auf, das echte Popout springt schon beim Einrasten mit) und „Einstellungen“; „Fertig“ oben in der Titelleiste.blank.exe aus dem neuesten Release, prüft Größe und SHA-256 gegen GitHubs Angabe, ersetzt die laufende EXE – die alte wird zu .old und beim nächsten Start gelöscht – und startet neu; nie automatisch installiert, src-tauri/src/update.rs; nach dem Neustart einmal „Neu in Version …“ mit dem Abschnitt „Neu in dieser Version“ aus dem Release-Text, auch per „Neuigkeiten“), „Mit Windows starten“ (eigener Eintrag unter HKCU\Software\Microsoft\Windows\CurrentVersion\Run, nur Desktop-App; ein im Task-Manager deaktivierter Eintrag zählt als aus; Einschalten setzt zusätzlich dieselbe Freigabe-Markierung wie der Task-Manager („aktiviert“), weil Windows den Eintrag ohne sie bei der Anmeldung übersprang – ein früher eingeschalteter Autostart bekommt sie beim nächsten Start der App; die Zeile nennt die Datei, die Windows startet, und sagt, wenn der Eintrag zu einer anderen Kopie von blank.exe gehört oder diese fehlt – Einschalten nimmt dann die gerade laufende) und die Auslastung (CPU, Arbeitsspeicher, Prozesse, grobe Einstufung). Speicherung lokal unter blank.preferences.v1; zusätzlich schreibt die Desktop-App Einstellungen, Musik und Programmliste bei jeder Änderung in eine Kopie settings.json im Konfigurationsordner (neben twitch.json). Fehlen die Einstellungen beim Start im Speicher der WebView oder sind sie älter, kommen sie aus dieser Kopie – sie sind also nicht mehr „weg“, wenn die WebView ihren Speicher einmal nicht öffnen kann. Twitch-Konto (Client-ID, verbinden, trennen) nur in der Desktop-App. Übertragen: „Exportieren“ schreibt alle Einstellungen in eine Datei blank-einstellungen.json im Downloads-Ordner (Explorer zeigt sie an): Darstellung, Benachrichtigungen (auch Popouts), alle Musik-Accounts und Playlists mit Lautstärke, die Programme zum Mitnehmen (Seite Apps), alle Twitch-Kanäle mit Spielregeln und die Twitch-Client-ID. „Importieren“ öffnet den Windows-Dateidialog, prüft die Datei, zeigt ihren Inhalt und ersetzt die Einstellungen erst nach „Übernehmen“. Nie enthalten: der Twitch-Login (Token bleibt in der Windows-Anmeldeinformationsverwaltung, auf einem neuen PC einmal verbinden), der Autostart (nur per Schalter) und die Gaming-Optimierung (gehört zu diesem PC). Gaming-Optimierung (src-tauri/src/tweaks.rs, nur Desktop-App): fünf Einstellungen des angemeldeten Benutzers — Spielmodus an (HKCU\Software\Microsoft\GameBar AutoGameModeEnabled), Optimierung für Spiele im Fenster (SwapEffectUpgradeEnable=1 in DirectXUserGlobalSettings, nur dieser Eintrag), Game-Bar-Aufnahmen aus (AppCaptureEnabled, HistoricalCaptureEnabled, GameDVR_Enabled), Mausbeschleunigung aus (SPI_SETMOUSE) und die Tastenkürzel von Einrast-, Anschlag- und Umschalttasten aus (SPI_SET*KEYS, nur das Kürzel). Zustand je Eintrag: „Schon so“, „Anwenden“ oder „Geändert“ mit Vorher-Wert und Zeitpunkt. Vor der ersten Änderung stehen die bisherigen Werte in tweaks.json im Konfigurationsordner der App (neben twitch.json; erst in eine temporäre Datei, dann umbenannt); „Rückgängig“/„Alles zurücksetzen“ schreibt genau diese zurück und löscht Werte, die es vorher nicht gab. Scheitert eine Änderung halb, wird das Geänderte sofort zurückgestellt. Eine beschädigte Sicherung wird gemeldet und nie überschrieben. Bewusst nicht dabei (anders als bei Atlas OS): Virenschutz, Windows Update, Dienste, CPU-Schutzmaßnahmen (Spectre/Meltdown), Speicherintegrität, Energiesparplan und Timer-Tricks — Sicherheitsrisiko, Adminrechte oder kein belegter Nutzen. Geplante Integrationen sind keine aktiven Bedienelemente.src-tauri/src/fullscreen.rstauri.conf.json