Restore Neural light theme and update contrast colors
mindflux-ci / build (push) Successful in 23s

This commit is contained in:
AliceDarkest
2026-07-14 17:02:30 +02:00
parent ad94c232f6
commit 3f23f223ce
44 changed files with 81 additions and 42 deletions
+3
View File
@@ -7,6 +7,9 @@ Versionierung [semantisch](https://semver.org/lang/de/).
## [Unreleased] – 2026-07-14 · SysnaptiK Neural Rebrand ## [Unreleased] – 2026-07-14 · SysnaptiK Neural Rebrand
### Marke & Plattform ### Marke & Plattform
- **Neural Lightmode & Kontrast:** Die helle Plattformvariante ist wieder ein
vollständiges Mint-/Blau-Neural-Theme, inklusive Sidebar, Karten und Login.
Hochkontrast nutzt jetzt dieselbe Mint-/Cyan-Sprache statt der alten Amber-Palette.
- **NeuralNet aufgeräumt:** Der leere Gesprächshinweis verschwindet beim Öffnen - **NeuralNet aufgeräumt:** Der leere Gesprächshinweis verschwindet beim Öffnen
wirklich, die letzte Verbindung wird pro Konto gespeichert und beim nächsten wirklich, die letzte Verbindung wird pro Konto gespeichert und beim nächsten
Besuch direkt wieder geöffnet. Die Sprechblase bleibt neutral und invertiert Besuch direkt wieder geöffnet. Die Sprechblase bleibt neutral und invertiert
+1
View File
@@ -494,6 +494,7 @@ Der Verdacht „Profilbutton fehlt / Einstellungen nicht im Profil / irgendwas i
> Der Chatbereich hält Kopf, Verlauf und Eingabe als zusammenhängende Spalte. > Der Chatbereich hält Kopf, Verlauf und Eingabe als zusammenhängende Spalte.
> Die Dashboard-Sprechblase zeigt im 30-Sekunden-Takt echte ungelesene Nachrichten. > Die Dashboard-Sprechblase zeigt im 30-Sekunden-Takt echte ungelesene Nachrichten.
> Die zuletzt geöffnete bestätigte Verbindung wird pro Konto lokal wiederhergestellt. > Die zuletzt geöffnete bestätigte Verbindung wird pro Konto lokal wiederhergestellt.
> Der Plattform-Lightmode und der Hochkontrastmodus nutzen die Neural-Palette.
> Blockieren, Melden/Moderation, Duelle und Lernlobby bleiben die nächsten Ausbauschritte. > Blockieren, Melden/Moderation, Duelle und Lernlobby bleiben die nächsten Ausbauschritte.
> Ersetzt den `/soziales`-Platzhalter („Straßen? Wo wir hingehen, brauchen wir keine Straßen!"). Ziel: User können sich befreunden, intern miteinander schreiben, gemeinsam lernen und Achievements vergleichen – **vollständig selbst gehostet, ohne einen einzigen externen Dienst**, und DSGVO-konform von Grund auf. > Ersetzt den `/soziales`-Platzhalter („Straßen? Wo wir hingehen, brauchen wir keine Straßen!"). Ziel: User können sich befreunden, intern miteinander schreiben, gemeinsam lernen und Achievements vergleichen – **vollständig selbst gehostet, ohne einen einzigen externen Dienst**, und DSGVO-konform von Grund auf.
@@ -3,10 +3,10 @@ html[data-mf-readable="true"] body,html[data-mf-readable="true"] button,html[dat
/* Die Tokens liegen je nach Spiel auf body bzw. der jeweiligen Spielwurzel. /* Die Tokens liegen je nach Spiel auf body bzw. der jeweiligen Spielwurzel.
Deshalb müssen die Overrides auf der ganzen Oberfläche gelten – ein Override Deshalb müssen die Overrides auf der ganzen Oberfläche gelten – ein Override
nur auf html wurde von den lokalen Themes bislang wieder überschrieben. */ nur auf html wurde von den lokalen Themes bislang wieder überschrieben. */
html[data-mf-contrast="true"] body,html[data-mf-contrast="true"] body *{--bg:#000!important;--panel:#050505!important;--panel-2:#080808!important;--surface:#0b0b0b!important;--surface-2:#151515!important;--text:#fff!important;--heading:#fff!important;--muted:#f1f1f1!important;--border:#fff!important;--line:#fff!important;--border-accent:#ffd21a!important;--accent:#ffd21a!important;--accent-2:#fff!important;--secondary:#65d9ff!important;--secondary-2:#fff!important;--success:#65d9ff!important;--danger:#ff9d3d!important;--esc-accent:#ffd21a!important;--bh-accent:#ffd21a!important;--sc-accent:#65d9ff!important;--nw-accent:#65d9ff!important;--mm-accent:#ffd21a!important;--mm-secondary:#65d9ff!important;--tt-accent:#ffd21a!important;--tt-secondary:#65d9ff!important;--dl-accent:#ffd21a!important;--dl-secondary:#65d9ff!important;--ss-accent:#ffd21a!important;--ss-secondary:#65d9ff!important;--ff-accent:#ffd21a!important;--ff-secondary:#65d9ff!important;--glow-s:transparent!important;--glow-w:transparent!important;--esc-glow:transparent!important;--bh-glow:transparent!important;--sc-glow:transparent!important;--nw-glow:transparent!important;--mm-glow:transparent!important;--tt-glow:transparent!important;--dl-glow:transparent!important;--ss-glow:transparent!important;--ff-glow:transparent!important} html[data-mf-contrast="true"] body,html[data-mf-contrast="true"] body *{--bg:#000!important;--panel:#050505!important;--panel-2:#080808!important;--surface:#0b0b0b!important;--surface-2:#151515!important;--text:#fff!important;--heading:#fff!important;--muted:#f1f1f1!important;--border:#fff!important;--line:#fff!important;--border-accent:#6fffb5!important;--accent:#6fffb5!important;--accent-2:#fff!important;--secondary:#83dbff!important;--secondary-2:#fff!important;--success:#83dbff!important;--danger:#ff9caf!important;--esc-accent:#6fffb5!important;--bh-accent:#6fffb5!important;--sc-accent:#83dbff!important;--nw-accent:#83dbff!important;--mm-accent:#6fffb5!important;--mm-secondary:#83dbff!important;--tt-accent:#6fffb5!important;--tt-secondary:#83dbff!important;--dl-accent:#6fffb5!important;--dl-secondary:#83dbff!important;--ss-accent:#6fffb5!important;--ss-secondary:#83dbff!important;--ff-accent:#6fffb5!important;--ff-secondary:#83dbff!important;--glow-s:transparent!important;--glow-w:transparent!important;--esc-glow:transparent!important;--bh-glow:transparent!important;--sc-glow:transparent!important;--nw-glow:transparent!important;--mm-glow:transparent!important;--tt-glow:transparent!important;--dl-glow:transparent!important;--ss-glow:transparent!important;--ff-glow:transparent!important}
html[data-mf-contrast="true"] body{background:#000!important;color:#fff!important;color-scheme:dark} html[data-mf-contrast="true"] body{background:#000!important;color:#fff!important;color-scheme:dark}
html[data-mf-contrast="true"] body *,html[data-mf-contrast="true"] body *::before,html[data-mf-contrast="true"] body *::after{text-shadow:none!important;box-shadow:none!important} html[data-mf-contrast="true"] body *,html[data-mf-contrast="true"] body *::before,html[data-mf-contrast="true"] body *::after{text-shadow:none!important;box-shadow:none!important}
html[data-mf-contrast="true"] body :focus-visible{outline:3px solid #ffd21a!important;outline-offset:3px} html[data-mf-contrast="true"] body :focus-visible{outline:3px solid #6fffb5!important;outline-offset:3px}
/* Okabe-Ito-nahe Palette: die Karten und die Spieltokens ändern sich sichtbar, /* Okabe-Ito-nahe Palette: die Karten und die Spieltokens ändern sich sichtbar,
ohne sich für Rot-/Grün-Sehschwächen nur über Farbe unterscheiden zu müssen. */ ohne sich für Rot-/Grün-Sehschwächen nur über Farbe unterscheiden zu müssen. */
html[data-mf-color="safe"] body,html[data-mf-color="safe"] body *{--success:#0072b2!important;--danger:#e69f00!important;--secondary:#cc79a7!important;--secondary-2:#56b4e9!important;--esc-accent:#e69f00!important;--bh-accent:#d55e00!important;--sc-accent:#56b4e9!important;--nw-accent:#0072b2!important;--mm-accent:#cc79a7!important;--mm-secondary:#56b4e9!important;--tt-accent:#f0e442!important;--tt-secondary:#0072b2!important;--dl-accent:#009e73!important;--dl-secondary:#56b4e9!important;--ss-accent:#0072b2!important;--ss-secondary:#e69f00!important;--ff-accent:#d55e00!important;--ff-secondary:#cc79a7!important} html[data-mf-color="safe"] body,html[data-mf-color="safe"] body *{--success:#0072b2!important;--danger:#e69f00!important;--secondary:#cc79a7!important;--secondary-2:#56b4e9!important;--esc-accent:#e69f00!important;--bh-accent:#d55e00!important;--sc-accent:#56b4e9!important;--nw-accent:#0072b2!important;--mm-accent:#cc79a7!important;--mm-secondary:#56b4e9!important;--tt-accent:#f0e442!important;--tt-secondary:#0072b2!important;--dl-accent:#009e73!important;--dl-secondary:#56b4e9!important;--ss-accent:#0072b2!important;--ss-secondary:#e69f00!important;--ff-accent:#d55e00!important;--ff-secondary:#cc79a7!important}
@@ -59,4 +59,39 @@ html.sn-platform body.finalflux-shell, html.sn-platform body.finalflux-page {
--glow-s:rgba(240,144,67,.40); --glow-w:rgba(240,144,67,.14); --glow-s:rgba(240,144,67,.40); --glow-w:rgba(240,144,67,.14);
} }
html.sn-platform body .finalflux-shell, html.sn-platform body.finalflux-shell, html.sn-platform body.finalflux-page { background:transparent; } html.sn-platform body .finalflux-shell, html.sn-platform body.finalflux-shell, html.sn-platform body.finalflux-page { background:transparent; }
/* Helle Plattformvariante: dieselbe Neural-Sprache, nur auf lichtem Grund.
Spielrouten erhalten diese Regeln nicht und behalten ihre eigenen Welten. */
html[data-theme="light"].sn-platform body {
--accent:#167a52; --accent-2:#79cfa6; --accent-ink:#fff;
--secondary:#176f9e; --secondary-2:#68b8df;
--bg:#edf7f2; --bg-glow:radial-gradient(900px 560px at 58% -12%,rgba(35,143,96,.15),transparent 61%);
--panel:#f8fcfa; --panel-2:#eff8f3; --surface:#fff; --surface-2:#e8f4ee;
--border:#bed8cb; --line:#d2e6dc; --border-accent:rgba(22,122,82,.48);
--text:#18382c; --muted:#587166; --heading:#10291f;
--glow-s:rgba(22,122,82,.30); --glow-w:rgba(22,122,82,.13);
--fluxtimer-primary:#176f9e; --fluxtimer-secondary:#167a52;
--fluxtimer-display:#e4f3ed; --fluxtimer-segment:#126b48;
background:
radial-gradient(circle at 12% 86%,rgba(39,150,103,.13),transparent 27%),
radial-gradient(circle at 82% 8%,rgba(44,137,178,.12),transparent 29%),
linear-gradient(135deg,#f7fcf9,#e8f5ef 54%,#edf8f4);
}
html[data-theme="light"].sn-platform body::before { opacity:.3; background:
radial-gradient(circle at 8% 12%,#167a52 0 1px,transparent 2px),
radial-gradient(circle at 27% 24%,#167a52 0 2px,transparent 3px),
radial-gradient(circle at 61% 14%,#176f9e 0 1px,transparent 2px),
radial-gradient(circle at 88% 31%,#167a52 0 2px,transparent 3px),
linear-gradient(24deg,transparent 0 17%,rgba(22,122,82,.15) 17.1% 17.2%,transparent 17.3% 100%),
linear-gradient(145deg,transparent 0 52%,rgba(23,111,158,.12) 52.1% 52.2%,transparent 52.3% 100%); }
html[data-theme="light"].sn-platform body .mf-sidebar { background:linear-gradient(180deg,#f5fbf7,#ecf6f0); border-color:#bfd8cc; }
html[data-theme="light"].sn-platform body .mf-logo .mark,html[data-theme="light"].sn-platform body .auth-head .mark,html[data-theme="light"].sn-platform body .overlay-panel .o-emblem { background:#167a52; filter:drop-shadow(0 0 8px rgba(22,122,82,.32)); }
html[data-theme="light"].sn-platform body .mf-logo .txt b { color:#163c2d; }
html[data-theme="light"].sn-platform body .mf-logo .txt span { color:#167a52; }
html[data-theme="light"].sn-platform body .mf-nav a.active { background:linear-gradient(100deg,rgba(22,122,82,.19),rgba(22,122,82,.08)); color:#123626; box-shadow:inset 0 0 0 1px rgba(22,122,82,.34),0 0 13px rgba(22,122,82,.12); }
html[data-theme="light"].sn-platform body .mf-panel,html[data-theme="light"].sn-platform body .mf-card,html[data-theme="light"].sn-platform body .mf-profile { background:linear-gradient(145deg,rgba(255,255,255,.94),rgba(241,250,245,.96)); border-color:#c4dbd0; box-shadow:0 13px 28px rgba(28,75,54,.10); }
html[data-theme="light"].sn-platform body .mf-footer { background:rgba(244,251,247,.82); border-color:#c5ddd1; }
html[data-theme="light"].sn-platform body .auth-container { background:linear-gradient(145deg,rgba(255,255,255,.98),rgba(239,249,243,.98)); border-color:rgba(22,122,82,.38); }
html[data-theme="light"].sn-platform body .overlay { background:radial-gradient(520px 320px at 62% 18%,rgba(22,122,82,.15),transparent 62%),linear-gradient(150deg,#e8f6ef,#f7fcf9); }
html[data-theme="light"].sn-platform body .auth-head b { color:#167a52; }
@media (max-width:820px) { html.sn-platform body .mf-sidebar { background:#061114; } } @media (max-width:820px) { html.sn-platform body .mf-sidebar { background:#061114; } }
@media (max-width:820px) { html[data-theme="light"].sn-platform body .mf-sidebar { background:#f5fbf7; } }
+1 -1
View File
@@ -35,7 +35,7 @@
if (!document.querySelector('link[data-accessibility]')) { if (!document.querySelector('link[data-accessibility]')) {
var accessibilityCss = document.createElement('link'); var accessibilityCss = document.createElement('link');
accessibilityCss.rel = 'stylesheet'; accessibilityCss.rel = 'stylesheet';
accessibilityCss.href = '/css/accessibility.css?v=4'; accessibilityCss.href = '/css/accessibility.css?v=5';
accessibilityCss.setAttribute('data-accessibility', ''); accessibilityCss.setAttribute('data-accessibility', '');
document.head.appendChild(accessibilityCss); document.head.appendChild(accessibilityCss);
var accessibilityPlacementCss = document.createElement('link'); var accessibilityPlacementCss = document.createElement('link');
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Trophäen</title> <title>SysnaptiK Neural – Trophäen</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-ach-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); gap:1rem; } .mf-ach-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); gap:1rem; }
.achievement-card { background:var(--surface-2); border:1px solid var(--border); border-radius:13px; padding:1.3rem 1.1rem; text-align:center; transition:transform .16s ease, box-shadow .25s ease; } .achievement-card { background:var(--surface-2); border:1px solid var(--border); border-radius:13px; padding:1.3rem 1.1rem; text-align:center; transition:transform .16s ease, box-shadow .25s ease; }
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>BugHunter Fallakte</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=3"></script></head><body><main class="mf-container" th:if="${hunt != null}"><a class="mf-back" href="/admin/bughunter">← Fallakten</a><h1 th:text="${hunt.title}" style="margin:1rem 0;color:var(--heading)"></h1><div class="mf-grid"><form class="mf-panel" method="post" th:action="@{/admin/bughunter/{id}/files(id=${hunt.id})}"><h2>Datei hinzufügen</h2><div class="mf-field"><label class="mf-label">Dateiname</label><input class="mf-input" name="filename" required></div><div class="mf-field"><label class="mf-label">Code</label><textarea class="mf-input" rows="14" name="content" required></textarea></div><button class="mf-btn">Datei speichern</button></form><form class="mf-panel" method="post" th:action="@{/admin/bughunter/{id}/bugs(id=${hunt.id})}"><h2>Bug hinzufügen</h2><div class="mf-field"><label class="mf-label">Punkte</label><input class="mf-input" type="number" name="points" value="100"></div><div class="mf-field"><label class="mf-label">Payload JSON</label><textarea class="mf-input" rows="14" name="payload" required>{"file":"Datei.java","line":1,"category":"logik","evidence":"...","fixOptions":["..."],"fixIndex":0,"fixedLine":"...","explanation":"..."}</textarea></div><p style="color:var(--muted);font-size:.85rem">Dateiname und Zeile müssen zu einer vorhandenen Datei passen; Kategorie: syntax, logik, laufzeit oder sicherheit.</p><button class="mf-btn">Bug speichern</button></form></div><section class="mf-panel" style="margin-top:1rem"><h2>Dateien</h2><table class="mf-table"><tr><th>Datei</th><th>Zeilen</th><th></th></tr><tr th:each="f:${hunt.files}"><td th:text="${f.filename}"></td><td th:text="${#strings.arrayLength(#strings.arraySplit(f.content, '\n'))}"></td><td><form method="post" th:action="@{/admin/bughunter/files/{id}/delete(id=${f.id})}"><input type="hidden" name="huntId" th:value="${hunt.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></section><section class="mf-panel" style="margin-top:1rem"><h2>Bugs</h2><table class="mf-table"><tr><th>Punkte</th><th>Payload</th><th></th></tr><tr th:each="b:${hunt.bugs}"><td th:text="${b.points}"></td><td><code th:text="${b.payload}"></code></td><td><form method="post" th:action="@{/admin/bughunter/bugs/{id}/delete(id=${b.id})}"><input type="hidden" name="huntId" th:value="${hunt.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></section></main><main class="mf-container" th:unless="${hunt != null}"><p>Fallakte nicht gefunden.</p></main></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>BugHunter Fallakte</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=4"></script></head><body><main class="mf-container" th:if="${hunt != null}"><a class="mf-back" href="/admin/bughunter">← Fallakten</a><h1 th:text="${hunt.title}" style="margin:1rem 0;color:var(--heading)"></h1><div class="mf-grid"><form class="mf-panel" method="post" th:action="@{/admin/bughunter/{id}/files(id=${hunt.id})}"><h2>Datei hinzufügen</h2><div class="mf-field"><label class="mf-label">Dateiname</label><input class="mf-input" name="filename" required></div><div class="mf-field"><label class="mf-label">Code</label><textarea class="mf-input" rows="14" name="content" required></textarea></div><button class="mf-btn">Datei speichern</button></form><form class="mf-panel" method="post" th:action="@{/admin/bughunter/{id}/bugs(id=${hunt.id})}"><h2>Bug hinzufügen</h2><div class="mf-field"><label class="mf-label">Punkte</label><input class="mf-input" type="number" name="points" value="100"></div><div class="mf-field"><label class="mf-label">Payload JSON</label><textarea class="mf-input" rows="14" name="payload" required>{"file":"Datei.java","line":1,"category":"logik","evidence":"...","fixOptions":["..."],"fixIndex":0,"fixedLine":"...","explanation":"..."}</textarea></div><p style="color:var(--muted);font-size:.85rem">Dateiname und Zeile müssen zu einer vorhandenen Datei passen; Kategorie: syntax, logik, laufzeit oder sicherheit.</p><button class="mf-btn">Bug speichern</button></form></div><section class="mf-panel" style="margin-top:1rem"><h2>Dateien</h2><table class="mf-table"><tr><th>Datei</th><th>Zeilen</th><th></th></tr><tr th:each="f:${hunt.files}"><td th:text="${f.filename}"></td><td th:text="${#strings.arrayLength(#strings.arraySplit(f.content, '\n'))}"></td><td><form method="post" th:action="@{/admin/bughunter/files/{id}/delete(id=${f.id})}"><input type="hidden" name="huntId" th:value="${hunt.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></section><section class="mf-panel" style="margin-top:1rem"><h2>Bugs</h2><table class="mf-table"><tr><th>Punkte</th><th>Payload</th><th></th></tr><tr th:each="b:${hunt.bugs}"><td th:text="${b.points}"></td><td><code th:text="${b.payload}"></code></td><td><form method="post" th:action="@{/admin/bughunter/bugs/{id}/delete(id=${b.id})}"><input type="hidden" name="huntId" th:value="${hunt.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></section></main><main class="mf-container" th:unless="${hunt != null}"><p>Fallakte nicht gefunden.</p></main></body></html>
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>Admin · BugHunter</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=3"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin">← Admin</a><h1 style="margin:1rem 0;color:var(--heading)">BugHunter · Fallakten</h1><form class="mf-panel" method="post" action="/admin/bughunter/add"><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Code-Sprache</label><input class="mf-input" name="language" value="Java"></div><div class="mf-field"><label class="mf-label">Stufe</label><select class="mf-select" name="difficulty"><option>junior</option><option>senior</option><option>principal</option></select></div><div class="mf-field"><label class="mf-label">Prüfungsbereich</label><select class="mf-select" name="examScope"><option>AP1</option><option>AP2_FIAE</option><option>AP2_FISI</option><option>CROSS</option></select></div><div class="mf-field"><label class="mf-label">Kurzbeschreibung</label><textarea class="mf-input" name="description"></textarea></div><div class="mf-field"><label class="mf-label">Briefing</label><textarea class="mf-input" name="briefing"></textarea></div><div class="mf-field"><label class="mf-label">Konsolen-Ausgabe</label><textarea class="mf-input" name="consoleOutput"></textarea></div><button class="mf-btn">Fallakte anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Titel</th><th>Stufe</th><th>Scope</th><th>Fälle</th><th>Status</th><th></th></tr><tr th:each="h:${hunts}"><td><a th:href="@{/admin/bughunter/{id}(id=${h.id})}" th:text="${h.title}"></a></td><td th:text="${h.difficulty}"></td><td th:text="${h.examScope}"></td><td th:text="${h.bugs.size}"></td><td th:text="${h.active?'aktiv':'inaktiv'}"></td><td><form style="display:inline" method="post" th:action="@{/admin/bughunter/{id}/toggle(id=${h.id})}"><button class="mf-btn outline">Toggle</button></form> <form style="display:inline" method="post" th:action="@{/admin/bughunter/{id}/delete(id=${h.id})}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>Admin · BugHunter</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=4"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin">← Admin</a><h1 style="margin:1rem 0;color:var(--heading)">BugHunter · Fallakten</h1><form class="mf-panel" method="post" action="/admin/bughunter/add"><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Code-Sprache</label><input class="mf-input" name="language" value="Java"></div><div class="mf-field"><label class="mf-label">Stufe</label><select class="mf-select" name="difficulty"><option>junior</option><option>senior</option><option>principal</option></select></div><div class="mf-field"><label class="mf-label">Prüfungsbereich</label><select class="mf-select" name="examScope"><option>AP1</option><option>AP2_FIAE</option><option>AP2_FISI</option><option>CROSS</option></select></div><div class="mf-field"><label class="mf-label">Kurzbeschreibung</label><textarea class="mf-input" name="description"></textarea></div><div class="mf-field"><label class="mf-label">Briefing</label><textarea class="mf-input" name="briefing"></textarea></div><div class="mf-field"><label class="mf-label">Konsolen-Ausgabe</label><textarea class="mf-input" name="consoleOutput"></textarea></div><button class="mf-btn">Fallakte anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Titel</th><th>Stufe</th><th>Scope</th><th>Fälle</th><th>Status</th><th></th></tr><tr th:each="h:${hunts}"><td><a th:href="@{/admin/bughunter/{id}(id=${h.id})}" th:text="${h.title}"></a></td><td th:text="${h.difficulty}"></td><td th:text="${h.examScope}"></td><td th:text="${h.bugs.size}"></td><td th:text="${h.active?'aktiv':'inaktiv'}"></td><td><form style="display:inline" method="post" th:action="@{/admin/bughunter/{id}/toggle(id=${h.id})}"><button class="mf-btn outline">Toggle</button></form> <form style="display:inline" method="post" th:action="@{/admin/bughunter/{id}/delete(id=${h.id})}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html>
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>CodeEscape Raum</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=3"></script></head><body><main class="mf-container"><a class="mf-back" th:href="@{/admin/codeescape/{id}(id=${room.scenario.id})}">← Szenario</a><h1 th:text="${room.title}" style="margin:1rem 0;color:var(--heading)"></h1><form class="mf-panel" method="post" th:action="@{/admin/codeescape/rooms/{id}/puzzles(id=${room.id})}"><h2>Rätsel hinzufügen</h2><div class="mf-field"><label class="mf-label">Typ</label><select class="mf-select" name="type"><option>code</option><option>choice</option><option>order</option><option>match</option></select></div><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="prompt" required></div><div class="mf-field"><label class="mf-label">Punkte</label><input class="mf-input" type="number" name="points" value="100"></div><div class="mf-field"><label class="mf-label">Fragment</label><input class="mf-input" name="codeFragment" required></div><div class="mf-field"><label class="mf-label">Payload JSON</label><textarea class="mf-input" rows="10" name="payload" required>{"instruction":"...","solutions":["..."]}</textarea></div><button class="mf-btn">Rätsel anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Typ</th><th>Titel</th><th>Fragment</th><th></th></tr><tr th:each="p:${room.puzzles}"><td th:text="${p.type}"></td><td th:text="${p.prompt}"></td><td th:text="${p.codeFragment}"></td><td><form method="post" th:action="@{/admin/codeescape/puzzles/{id}/delete(id=${p.id})}"><input type="hidden" name="roomId" th:value="${room.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>CodeEscape Raum</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=4"></script></head><body><main class="mf-container"><a class="mf-back" th:href="@{/admin/codeescape/{id}(id=${room.scenario.id})}">← Szenario</a><h1 th:text="${room.title}" style="margin:1rem 0;color:var(--heading)"></h1><form class="mf-panel" method="post" th:action="@{/admin/codeescape/rooms/{id}/puzzles(id=${room.id})}"><h2>Rätsel hinzufügen</h2><div class="mf-field"><label class="mf-label">Typ</label><select class="mf-select" name="type"><option>code</option><option>choice</option><option>order</option><option>match</option></select></div><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="prompt" required></div><div class="mf-field"><label class="mf-label">Punkte</label><input class="mf-input" type="number" name="points" value="100"></div><div class="mf-field"><label class="mf-label">Fragment</label><input class="mf-input" name="codeFragment" required></div><div class="mf-field"><label class="mf-label">Payload JSON</label><textarea class="mf-input" rows="10" name="payload" required>{"instruction":"...","solutions":["..."]}</textarea></div><button class="mf-btn">Rätsel anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Typ</th><th>Titel</th><th>Fragment</th><th></th></tr><tr th:each="p:${room.puzzles}"><td th:text="${p.type}"></td><td th:text="${p.prompt}"></td><td th:text="${p.codeFragment}"></td><td><form method="post" th:action="@{/admin/codeescape/puzzles/{id}/delete(id=${p.id})}"><input type="hidden" name="roomId" th:value="${room.id}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html>
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>CodeEscape Szenario</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=3"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin/codeescape">← Szenarien</a><h1 th:text="${scenario.title}" style="margin:1rem 0;color:var(--heading)"></h1><form class="mf-panel" method="post" th:action="@{/admin/codeescape/{id}/rooms(id=${scenario.id})}"><h2>Raum hinzufügen</h2><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Intro</label><textarea class="mf-input" name="intro"></textarea></div><div class="mf-field"><label class="mf-label">Tür-Hinweis</label><input class="mf-input" name="doorPrompt"></div><div class="mf-field"><label class="mf-label">Türcode</label><input class="mf-input" name="doorCode" required></div><div class="mf-field"><label class="mf-label">Erfolgstext</label><input class="mf-input" name="successText"></div><button class="mf-btn">Raum anlegen</button></form><div class="mf-grid" style="margin-top:1rem"><article class="mf-panel" th:each="r:${scenario.rooms}"><h2><a th:href="@{/admin/codeescape/rooms/{id}(id=${r.id})}" th:text="${r.title}"></a></h2><p th:text="${r.intro}"></p><form method="post" th:action="@{/admin/codeescape/rooms/{id}/delete(id=${r.id})}"><button class="mf-btn danger">Raum löschen</button></form></article></div></main></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>CodeEscape Szenario</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=4"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin/codeescape">← Szenarien</a><h1 th:text="${scenario.title}" style="margin:1rem 0;color:var(--heading)"></h1><form class="mf-panel" method="post" th:action="@{/admin/codeescape/{id}/rooms(id=${scenario.id})}"><h2>Raum hinzufügen</h2><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Intro</label><textarea class="mf-input" name="intro"></textarea></div><div class="mf-field"><label class="mf-label">Tür-Hinweis</label><input class="mf-input" name="doorPrompt"></div><div class="mf-field"><label class="mf-label">Türcode</label><input class="mf-input" name="doorCode" required></div><div class="mf-field"><label class="mf-label">Erfolgstext</label><input class="mf-input" name="successText"></div><button class="mf-btn">Raum anlegen</button></form><div class="mf-grid" style="margin-top:1rem"><article class="mf-panel" th:each="r:${scenario.rooms}"><h2><a th:href="@{/admin/codeescape/rooms/{id}(id=${r.id})}" th:text="${r.title}"></a></h2><p th:text="${r.intro}"></p><form method="post" th:action="@{/admin/codeescape/rooms/{id}/delete(id=${r.id})}"><button class="mf-btn danger">Raum löschen</button></form></article></div></main></body></html>
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>Admin · CodeEscape</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=3"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin">← Admin</a><h1 style="margin:1rem 0;color:var(--heading)">CodeEscape · Szenarien</h1><form class="mf-panel" method="post" action="/admin/codeescape/add"><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Schwierigkeit</label><select class="mf-select" name="difficulty"><option>leicht</option><option>mittel</option><option>schwer</option></select></div><div class="mf-field"><label class="mf-label">Prüfungsbereich</label><select class="mf-select" name="examScope"><option>AP1</option><option>AP2_FIAE</option><option>AP2_FISI</option><option>CROSS</option></select></div><div class="mf-field"><label class="mf-label">Beschreibung</label><textarea class="mf-input" name="description"></textarea></div><div class="mf-field"><label class="mf-label">Zeitlimit Sekunden</label><input class="mf-input" type="number" name="timeLimitSeconds" value="900"></div><button class="mf-btn">Szenario anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Titel</th><th>Scope</th><th>Status</th><th>Aktion</th></tr><tr th:each="s:${scenarios}"><td><a th:href="@{/admin/codeescape/{id}(id=${s.id})}" th:text="${s.title}"></a></td><td th:text="${s.examScope}"></td><td th:text="${s.active?'aktiv':'inaktiv'}"></td><td><form style="display:inline" method="post" th:action="@{/admin/codeescape/{id}/toggle(id=${s.id})}"><button class="mf-btn outline">Toggle</button></form> <form style="display:inline" method="post" th:action="@{/admin/codeescape/{id}/delete(id=${s.id})}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><title>Admin · CodeEscape</title><link rel="stylesheet" href="/css/theme.css?v=3"><script src="/js/theme.js?v=4"></script></head><body><main class="mf-container"><a class="mf-back" href="/admin">← Admin</a><h1 style="margin:1rem 0;color:var(--heading)">CodeEscape · Szenarien</h1><form class="mf-panel" method="post" action="/admin/codeescape/add"><div class="mf-field"><label class="mf-label">Titel</label><input class="mf-input" name="title" required></div><div class="mf-field"><label class="mf-label">Schwierigkeit</label><select class="mf-select" name="difficulty"><option>leicht</option><option>mittel</option><option>schwer</option></select></div><div class="mf-field"><label class="mf-label">Prüfungsbereich</label><select class="mf-select" name="examScope"><option>AP1</option><option>AP2_FIAE</option><option>AP2_FISI</option><option>CROSS</option></select></div><div class="mf-field"><label class="mf-label">Beschreibung</label><textarea class="mf-input" name="description"></textarea></div><div class="mf-field"><label class="mf-label">Zeitlimit Sekunden</label><input class="mf-input" type="number" name="timeLimitSeconds" value="900"></div><button class="mf-btn">Szenario anlegen</button></form><table class="mf-table" style="margin-top:1rem"><tr><th>Titel</th><th>Scope</th><th>Status</th><th>Aktion</th></tr><tr th:each="s:${scenarios}"><td><a th:href="@{/admin/codeescape/{id}(id=${s.id})}" th:text="${s.title}"></a></td><td th:text="${s.examScope}"></td><td th:text="${s.active?'aktiv':'inaktiv'}"></td><td><form style="display:inline" method="post" th:action="@{/admin/codeescape/{id}/toggle(id=${s.id})}"><button class="mf-btn outline">Toggle</button></form> <form style="display:inline" method="post" th:action="@{/admin/codeescape/{id}/delete(id=${s.id})}"><button class="mf-btn danger">Löschen</button></form></td></tr></table></main></body></html>
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural Admin Dashboard</title> <title>SysnaptiK Neural Admin Dashboard</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.admin-actions { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:1rem; margin-top:1.1rem; } .admin-actions { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:1rem; margin-top:1.1rem; }
.admin-card { .admin-card {
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title th:text="${game.title} + ' – Dev Lab'">Dev-Lab-Spiel</title> <title th:text="${game.title} + ' – Dev Lab'">Dev-Lab-Spiel</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.dlg { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .dlg { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.dlg .grid2 { display: grid; grid-template-columns: 160px 1fr; gap: 0.7rem; } .dlg .grid2 { display: grid; grid-template-columns: 160px 1fr; gap: 0.7rem; }
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dev-Lab-Verwaltung – Admin</title> <title>Dev-Lab-Verwaltung – Admin</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.dla { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .dla { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.dla .new-game { margin-bottom: 1.6rem; } .dla .new-game { margin-bottom: 1.6rem; }
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MindMatch-Verwaltung – Admin</title> <title>MindMatch-Verwaltung – Admin</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mmadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .mmadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.mmadmin .deck { .mmadmin .deck {
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title th:text="${mission.title} + ' – Syntax Saga'">Syntax-Saga-Mission</title> <title th:text="${mission.title} + ' – Syntax Saga'">Syntax-Saga-Mission</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.ssm { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .ssm { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.ssm .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.7rem; } .ssm .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.7rem; }
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Syntax-Saga-Verwaltung – Admin</title> <title>Syntax-Saga-Verwaltung – Admin</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.ssadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .ssadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.ssadmin .new-mission { margin-bottom: 1.6rem; } .ssadmin .new-mission { margin-bottom: 1.6rem; }
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title th:text="${category.title} + ' – TechTacular'">TechTacular-Kategorie</title> <title th:text="${category.title} + ' – TechTacular'">TechTacular-Kategorie</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.ttcat { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .ttcat { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.ttcat .q { .ttcat .q {
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TechTacular-Verwaltung – Admin</title> <title>TechTacular-Verwaltung – Admin</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.ttadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; } .ttadmin { max-width: 1000px; margin: 0 auto; padding: 0 1rem; width: 100%; }
.ttadmin .new-cat { margin-bottom: 1.6rem; } .ttadmin .new-cat { margin-bottom: 1.6rem; }
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Benutzer bearbeiten</title> <title>Benutzer bearbeiten</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
</head> </head>
<body> <body>
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Benutzerverwaltung</title> <title>Benutzerverwaltung</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
</head> </head>
<body> <body>
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>BugHunter · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/bughunter.css?v=2"><script src="/js/theme.js?v=3"></script></head><body><main class="bh-app"><header class="bh-top"><div style="display:flex;align-items:center;gap:.65rem"><a href="/dashboard" class="bh-back">← Dashboard</a><a href="/bughunter" class="bh-btn">AKTENSCHRANK</a></div><div class="bh-brand"><b>BUGHUNTER</b><span>DEBUG-FALLAKTEN</span></div><span class="mf-a11y-host"></span></header><section id="bhView" class="bh-view"><div class="bh-loading">FALLAKTEN WERDEN GEÖFFNET …</div></section></main><script src="/js/bughunter.js?v=5"></script></body></html> <!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>BugHunter · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/bughunter.css?v=2"><script src="/js/theme.js?v=4"></script></head><body><main class="bh-app"><header class="bh-top"><div style="display:flex;align-items:center;gap:.65rem"><a href="/dashboard" class="bh-back">← Dashboard</a><a href="/bughunter" class="bh-btn">AKTENSCHRANK</a></div><div class="bh-brand"><b>BUGHUNTER</b><span>DEBUG-FALLAKTEN</span></div><span class="mf-a11y-host"></span></header><section id="bhView" class="bh-view"><div class="bh-loading">FALLAKTEN WERDEN GEÖFFNET …</div></section></main><script src="/js/bughunter.js?v=5"></script></body></html>
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SystemEscape · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/codeescape.css?v=2"><link rel="stylesheet" href="/css/codeescape-guide.css?v=3"><link rel="stylesheet" href="/css/codeescape-global.css?v=1"><script src="/js/theme.js?v=3"></script></head><body><main class="esc-app"><header class="esc-top"><a href="/dashboard" class="esc-back">← Dashboard</a><div class="esc-brand"><b>SYSTEMESCAPE</b><span>FACILITY ACCESS PROTOCOL</span></div><div class="esc-global-tools"><span class="mf-a11y-host"></span><div class="esc-timer" id="escTimer">--:--</div></div></header><section id="escView" class="esc-view"><div class="esc-loading">FACILITY WIRD INITIALISIERT …</div></section></main><script src="/js/codeescape.js?v=2"></script></body></html> <!doctype html><html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SystemEscape · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/codeescape.css?v=2"><link rel="stylesheet" href="/css/codeescape-guide.css?v=3"><link rel="stylesheet" href="/css/codeescape-global.css?v=1"><script src="/js/theme.js?v=4"></script></head><body><main class="esc-app"><header class="esc-top"><a href="/dashboard" class="esc-back">← Dashboard</a><div class="esc-brand"><b>SYSTEMESCAPE</b><span>FACILITY ACCESS PROTOCOL</span></div><div class="esc-global-tools"><span class="mf-a11y-host"></span><div class="esc-timer" id="escTimer">--:--</div></div></header><section id="escView" class="esc-view"><div class="esc-loading">FACILITY WIRD INITIALISIERT …</div></section></main><script src="/js/codeescape.js?v=2"></script></body></html>
+1 -1
View File
@@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural Dashboard</title> <title>SysnaptiK Neural Dashboard</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
/* Dashboard-spezifische Widgets (rechte Spalte) */ /* Dashboard-spezifische Widgets (rechte Spalte) */
.network-status { display:grid; grid-template-columns:auto 1fr; gap:.85rem; align-items:start; } .network-status { display:grid; grid-template-columns:auto 1fr; gap:.85rem; align-items:start; }
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dev Lab Spiel – SysnaptiK Neural</title> <title>Dev Lab Spiel – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/devlabgame.css?v=5"> <link rel="stylesheet" href="/css/devlabgame.css?v=5">
</head> </head>
<body class="dlg-body" th:attr="data-game=${gameSlug}"> <body class="dlg-body" th:attr="data-game=${gameSlug}">
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dev Lab - SysnaptiK Neural</title> <title>Dev Lab - SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/devlab.css?v=3"> <link rel="stylesheet" href="/css/devlab.css?v=3">
</head> </head>
<body class="dl-body"> <body class="dl-body">
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – In Arbeit</title> <title>SysnaptiK Neural – In Arbeit</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-cardbox { max-width:560px; text-align:center; } .mf-cardbox { max-width:560px; text-align:center; }
.mf-cardbox h1 { color:var(--heading); font-size:1.5rem; font-weight:800; margin-bottom:.5rem; } .mf-cardbox h1 { color:var(--heading); font-size:1.5rem; font-weight:800; margin-bottom:.5rem; }
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Fehler</title> <title>SysnaptiK Neural – Fehler</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
</head> </head>
<body> <body>
+1 -1
View File
@@ -7,7 +7,7 @@
<link rel="stylesheet" href="/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<link rel="stylesheet" href="/css/finalflux.css?v=2"> <link rel="stylesheet" href="/css/finalflux.css?v=2">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
</head> </head>
<body class="finalflux-shell"> <body class="finalflux-shell">
<aside class="finalflux-sidebar"> <aside class="finalflux-sidebar">
+1 -1
View File
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Impressum</title> <title>SysnaptiK Neural – Impressum</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-cardbox { max-width:620px; text-align:center; } .mf-cardbox { max-width:620px; text-align:center; }
.mf-doc { font-size:3rem; margin-bottom:.6rem; filter:drop-shadow(0 0 14px var(--glow-s)); } .mf-doc { font-size:3rem; margin-bottom:.6rem; filter:drop-shadow(0 0 14px var(--glow-s)); }
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Deine Zukunft beginnt hier</title> <title>SysnaptiK Neural – Deine Zukunft beginnt hier</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/auth.css"> <link rel="stylesheet" href="/css/auth.css">
</head> </head>
<body> <body>
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Knowledge Core – SysnaptiK Neural</title> <title>Knowledge Core – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.kc-intro{max-width:720px;color:var(--muted);line-height:1.6}.kc-stats,.kc-routes{display:grid;gap:1rem}.kc-stats{grid-template-columns:repeat(3,1fr);margin:1.2rem 0}.kc-stat{padding:1rem;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.kc-stat span,.kc-route small{display:block;color:var(--muted);font-size:.74rem}.kc-stat b{display:block;margin-top:.25rem;color:var(--heading);font-size:1.35rem}.kc-routes{grid-template-columns:repeat(3,1fr)}.kc-route{display:flex;flex-direction:column;gap:.7rem;padding:1.2rem;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.kc-route h2{color:var(--heading);font-size:1.05rem;margin:0}.kc-route p{color:var(--muted);font-size:.86rem;line-height:1.5;flex:1;margin:0}.kc-links{display:flex;flex-wrap:wrap;gap:.5rem}.kc-links a{color:var(--accent);font-size:.76rem;text-decoration:none;border:1px solid var(--border-accent);border-radius:7px;padding:.42rem .55rem}.kc-links a:hover{background:var(--accent);color:var(--accent-ink)}.kc-history{margin-top:1rem}.kc-history li{display:flex;justify-content:space-between;gap:1rem;padding:.65rem 0;border-bottom:1px solid var(--border);color:var(--text)}.kc-history li span{color:var(--muted);font-size:.82rem}.mf-footer{text-align:center;color:var(--muted);font-size:.82rem;padding:1.6rem 1rem}.mf-footer a{color:var(--muted);text-decoration:none;margin:0 .15rem}.mf-footer a:hover{color:var(--accent)}@media(max-width:720px){.kc-stats,.kc-routes{grid-template-columns:1fr}} .kc-intro{max-width:720px;color:var(--muted);line-height:1.6}.kc-stats,.kc-routes{display:grid;gap:1rem}.kc-stats{grid-template-columns:repeat(3,1fr);margin:1.2rem 0}.kc-stat{padding:1rem;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.kc-stat span,.kc-route small{display:block;color:var(--muted);font-size:.74rem}.kc-stat b{display:block;margin-top:.25rem;color:var(--heading);font-size:1.35rem}.kc-routes{grid-template-columns:repeat(3,1fr)}.kc-route{display:flex;flex-direction:column;gap:.7rem;padding:1.2rem;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.kc-route h2{color:var(--heading);font-size:1.05rem;margin:0}.kc-route p{color:var(--muted);font-size:.86rem;line-height:1.5;flex:1;margin:0}.kc-links{display:flex;flex-wrap:wrap;gap:.5rem}.kc-links a{color:var(--accent);font-size:.76rem;text-decoration:none;border:1px solid var(--border-accent);border-radius:7px;padding:.42rem .55rem}.kc-links a:hover{background:var(--accent);color:var(--accent-ink)}.kc-history{margin-top:1rem}.kc-history li{display:flex;justify-content:space-between;gap:1rem;padding:.65rem 0;border-bottom:1px solid var(--border);color:var(--text)}.kc-history li span{color:var(--muted);font-size:.82rem}.mf-footer{text-align:center;color:var(--muted);font-size:.82rem;padding:1.6rem 1rem}.mf-footer a{color:var(--muted);text-decoration:none;margin:0 .15rem}.mf-footer a:hover{color:var(--accent)}@media(max-width:720px){.kc-stats,.kc-routes{grid-template-columns:1fr}}
</style> </style>
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Datenschutzerklärung</title> <title>SysnaptiK Neural – Datenschutzerklärung</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-legal { max-width:860px; } .mf-legal { max-width:860px; }
.mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; } .mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; }
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Nutzungsbedingungen (AGB)</title> <title>SysnaptiK Neural – Nutzungsbedingungen (AGB)</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-legal { max-width:860px; } .mf-legal { max-width:860px; }
.mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; } .mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; }
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Richtlinien</title> <title>SysnaptiK Neural – Richtlinien</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-legal { max-width:860px; } .mf-legal { max-width:860px; }
.mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; } .mf-legal h1 { color:var(--heading); font-size:1.7rem; font-weight:800; margin:.2rem 0 .3rem; }
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MindMatch – SysnaptiK Neural</title> <title>MindMatch – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/mindmatch.css?v=5"> <link rel="stylesheet" href="/css/mindmatch.css?v=5">
</head> </head>
<body class="mm-body"> <body class="mm-body">
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>NetWorker · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/networker.css?v=1"><link rel="stylesheet" href="/css/networker-guide.css?v=1"><script src="/js/theme.js?v=3"></script></head><body><main class="nw-app"><header class="nw-top"><div style="display:flex;align-items:center;gap:.65rem"><a href="/dashboard" class="nw-back">← Dashboard</a><a href="/networker" class="nw-btn">NETZPLÄNE</a></div><div class="nw-brand"><b>NetWorker</b><span>NETZPLAN · DIAGNOSE</span></div><span class="mf-a11y-host"></span></header><section id="nwView" class="nw-view"><div class="nw-loading">NETZWERKPLÄNE WERDEN KALIBRIERT …</div></section></main><script src="/js/networker.js?v=1"></script><script src="/js/networker-guide.js?v=1"></script></body></html> <!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>NetWorker · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/networker.css?v=1"><link rel="stylesheet" href="/css/networker-guide.css?v=1"><script src="/js/theme.js?v=4"></script></head><body><main class="nw-app"><header class="nw-top"><div style="display:flex;align-items:center;gap:.65rem"><a href="/dashboard" class="nw-back">← Dashboard</a><a href="/networker" class="nw-btn">NETZPLÄNE</a></div><div class="nw-brand"><b>NetWorker</b><span>NETZPLAN · DIAGNOSE</span></div><span class="mf-a11y-host"></span></header><section id="nwView" class="nw-view"><div class="nw-loading">NETZWERKPLÄNE WERDEN KALIBRIERT …</div></section></main><script src="/js/networker.js?v=1"></script><script src="/js/networker-guide.js?v=1"></script></body></html>
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Profil</title> <title>SysnaptiK Neural – Profil</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-profile-pic { display:flex; justify-content:center; margin-bottom:1.3rem; } .mf-profile-pic { display:flex; justify-content:center; margin-bottom:1.3rem; }
.mf-profile-pic img { width:140px; height:140px; border-radius:50%; object-fit:cover; border:2px solid var(--border-accent); box-shadow:0 0 22px var(--glow-w); } .mf-profile-pic img { width:140px; height:140px; border-radius:50%; object-fit:cover; border:2px solid var(--border-accent); box-shadow:0 0 22px var(--glow-w); }
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fortschritt – SysnaptiK Neural</title> <title>Fortschritt – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style> <style>
.mf-progress-summary { display:flex; flex-wrap:wrap; align-items:center; gap:2rem; } .mf-progress-summary { display:flex; flex-wrap:wrap; align-items:center; gap:2rem; }
@@ -1 +1 @@
<!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>ServiceClash · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/serviceclash.css?v=1"><script src="/js/theme.js?v=3"></script></head><body><main class="sc-app"><header class="sc-top"><div class="sc-nav"><a href="/dashboard">← Dashboard</a><a href="/serviceclash" class="sc-nav-button">SCHICHTEN</a></div><div class="sc-brand"><b>ServiceClash</b><span>LEITSTAND · TRIAGE</span></div><span class="mf-a11y-host"></span></header><section id="scView" class="sc-view"><p class="sc-loading">LEITSTAND WIRD HOCHGEFAHREN …</p></section></main><script src="/js/serviceclash.js?v=2"></script></body></html> <!doctype html><html lang="de" data-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>ServiceClash · SysnaptiK Neural</title><link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/serviceclash.css?v=1"><script src="/js/theme.js?v=4"></script></head><body><main class="sc-app"><header class="sc-top"><div class="sc-nav"><a href="/dashboard">← Dashboard</a><a href="/serviceclash" class="sc-nav-button">SCHICHTEN</a></div><div class="sc-brand"><b>ServiceClash</b><span>LEITSTAND · TRIAGE</span></div><span class="mf-a11y-host"></span></header><section id="scView" class="sc-view"><p class="sc-loading">LEITSTAND WIRD HOCHGEFAHREN …</p></section></main><script src="/js/serviceclash.js?v=2"></script></body></html>
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SysnaptiK Neural – Einstellungen</title> <title>SysnaptiK Neural – Einstellungen</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<style> <style>
.mf-section-title { color:var(--accent); font-size:.78rem; letter-spacing:.12em; text-transform:uppercase; margin-bottom:.9rem; } .mf-section-title { color:var(--accent); font-size:.78rem; letter-spacing:.12em; text-transform:uppercase; margin-bottom:.9rem; }
.mf-check { display:flex; align-items:center; gap:.55rem; color:var(--text); font-size:.92rem; margin:.5rem 0; cursor:pointer; } .mf-check { display:flex; align-items:center; gap:.55rem; color:var(--text); font-size:.92rem; margin:.5rem 0; cursor:pointer; }
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NeuralNet – SysnaptiK Neural</title> <title>NeuralNet – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/neuralnet.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/neuralnet.css?v=3">
<script src="/js/theme.js?v=3"></script><script src="/js/neuralnet.js?v=5" defer></script> <script src="/js/theme.js?v=4"></script><script src="/js/neuralnet.js?v=5" defer></script>
</head> </head>
<body> <body>
<div class="mf-theme-float"><button class="mf-theme"></button></div> <div class="mf-theme-float"><button class="mf-theme"></button></div>
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Syntax Saga – SysnaptiK Neural</title> <title>Syntax Saga – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/syntaxsaga.css?v=2"> <link rel="stylesheet" href="/css/syntaxsaga.css?v=2">
</head> </head>
<body class="ss-body"> <body class="ss-body">
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TechTacular – SysnaptiK Neural</title> <title>TechTacular – SysnaptiK Neural</title>
<link rel="stylesheet" href="/css/theme.css?v=3"> <link rel="stylesheet" href="/css/theme.css?v=3">
<script src="/js/theme.js?v=3"></script> <script src="/js/theme.js?v=4"></script>
<link rel="stylesheet" href="/css/techtacular.css?v=4"> <link rel="stylesheet" href="/css/techtacular.css?v=4">
</head> </head>
<body class="tt-body"> <body class="tt-body">