diff --git a/.projektstructure.txt b/.projektstructure.txt
index 89283b6..cccebce 100755
--- a/.projektstructure.txt
+++ b/.projektstructure.txt
@@ -5,6 +5,8 @@ Aktueller Projektstand
- Relevante Logik liegt in `src/App/Avatar/Lorelei.php`.
- Der Avatar-Proxy liegt unter `public/page/api/avatar.php`.
- Die visuelle Avatar-Konfiguration liegt im Dashboard-Modal unter `partials/landing/account/dashboard.php` und rendert Komponenten-Vorschauen live nach.
+- Neue Grundvarianten werden im gleichen Modal als separates Auswahlraster eingeblendet und übernehmen die aktuell gewählten Lorelei-Komponenten.
+- Alte statische Avatar-Presets und frühere Layer-Assets sind entfernt; aktiv ist nur noch der Lorelei-Generator.
- Änderungen an Funktionen mit Cookies, LocalStorage, SessionStorage, Geolocation, Tracking oder Drittanbietern müssen immer auch in Datenschutz-/Cookie-Hinweisen und im Consent-Flow berücksichtigt werden.
Ziel
diff --git a/PROJECT_CONTEXT.md b/PROJECT_CONTEXT.md
index 880925a..4bf5047 100644
--- a/PROJECT_CONTEXT.md
+++ b/PROJECT_CONTEXT.md
@@ -22,12 +22,13 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l
- Standortfunktionen sind relevant für lokale Treffen und werden künftig weiter ausgebaut.
- Profilbilder werden aktuell über DiceBear im Stil `lorelei` serverseitig erzeugt und lokal gecacht.
- Der Avatar-Editor bietet aktuell visuelle Komponenten-Vorschauen statt reiner Text-Dropdowns.
+- Frühere statische Preset-Avatar-Assets wurden entfernt; der aktuelle Stand nutzt nur noch den Generator mit Proxy/Cache.
## Navigation / Konto
- Eingeloggte Nutzer sehen rechts ein Profil-Menü statt einzelner `Dashboard`-/`Logout`-Buttons.
- Das Profil-Menü enthält aktuell `Profil`, `Kinder`, `Termine`, `Community`, `Einstellungen`, `Abmelden`.
- Der Mitgliederbereich selbst ist als Layout mit linker Bereichsnavigation aufgebaut.
-- Im Profil kann der Nutzer aktuell aus Lorelei-Varianten wählen, neue Seed-basierte Vorschläge laden und Komponenten wie Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe direkt per Vorschaubild auswählen.
+- Im Profil kann der Nutzer aktuell Komponenten wie Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe direkt per Vorschaubild auswählen; neue Grundvarianten werden separat als Auswahlraster mit bereits angewendeten Komponenten eingeblendet.
- Debug ist kein Menüpunkt und erscheint nur als Floating-Käfer für `site_admin` bei aktivem Debug-Modus.
## Community und Rechte
diff --git a/README.md b/README.md
index efd0c1d..4a3a023 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,8 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf lokale
- standortbasierte Sortierung für die neuesten Treffen
- eigener Einstellungsbereich für Standortfreigabe, Browser-Hinweise und Consent-Verwaltung
- modernes Avatar-System auf Basis von DiceBear `lorelei`, serverseitig über einen lokalen Proxy mit Cache ausgeliefert
-- Profilbild-Generator mit visueller Komponenten-Auswahl für Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe
+- Profilbild-Generator mit visueller Komponenten-Auswahl für Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe sowie einer separaten Auswahl neuer Grundvarianten
+- keine statischen Avatar-Preset-Dateien mehr im Repository; Vorschau und Auswahl laufen vollständig über den Lorelei-Generator
- Consent-Manager für Analyse und externe Dienste
- Navigation aktuell mit `Home`, `Suche`, `Community`
- eingeloggte Nutzer sehen rechts ein Profil-Menü mit Direktlinks zu `Profil`, `Kinder`, `Termine`, `Community`, `Einstellungen`
diff --git a/partials/landing/account/dashboard.php b/partials/landing/account/dashboard.php
index a508e52..e71dce0 100755
--- a/partials/landing/account/dashboard.php
+++ b/partials/landing/account/dashboard.php
@@ -352,6 +352,14 @@ $sectionLinks = [
+
diff --git a/public/assets/avatars/layers/modern/beard/full.svg b/public/assets/avatars/layers/modern/beard/full.svg
deleted file mode 100644
index b799da1..0000000
--- a/public/assets/avatars/layers/modern/beard/full.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/beard/mustache.svg b/public/assets/avatars/layers/modern/beard/mustache.svg
deleted file mode 100644
index 535a8ae..0000000
--- a/public/assets/avatars/layers/modern/beard/mustache.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/public/assets/avatars/layers/modern/beard/short.svg b/public/assets/avatars/layers/modern/beard/short.svg
deleted file mode 100644
index 00c77f2..0000000
--- a/public/assets/avatars/layers/modern/beard/short.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/features/default.svg b/public/assets/avatars/layers/modern/features/default.svg
deleted file mode 100644
index 6648a42..0000000
--- a/public/assets/avatars/layers/modern/features/default.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/glasses/round.svg b/public/assets/avatars/layers/modern/glasses/round.svg
deleted file mode 100644
index fc3b976..0000000
--- a/public/assets/avatars/layers/modern/glasses/round.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/glasses/square.svg b/public/assets/avatars/layers/modern/glasses/square.svg
deleted file mode 100644
index 014d8a1..0000000
--- a/public/assets/avatars/layers/modern/glasses/square.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hair/curly.svg b/public/assets/avatars/layers/modern/hair/curly.svg
deleted file mode 100644
index 059de85..0000000
--- a/public/assets/avatars/layers/modern/hair/curly.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hair/fade.svg b/public/assets/avatars/layers/modern/hair/fade.svg
deleted file mode 100644
index 2aaffa8..0000000
--- a/public/assets/avatars/layers/modern/hair/fade.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hair/parted.svg b/public/assets/avatars/layers/modern/hair/parted.svg
deleted file mode 100644
index b98134d..0000000
--- a/public/assets/avatars/layers/modern/hair/parted.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hair/short.svg b/public/assets/avatars/layers/modern/hair/short.svg
deleted file mode 100644
index 0f7f774..0000000
--- a/public/assets/avatars/layers/modern/hair/short.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hair/waves.svg b/public/assets/avatars/layers/modern/hair/waves.svg
deleted file mode 100644
index ea2d423..0000000
--- a/public/assets/avatars/layers/modern/hair/waves.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hat/beanie.svg b/public/assets/avatars/layers/modern/hat/beanie.svg
deleted file mode 100644
index d5ec582..0000000
--- a/public/assets/avatars/layers/modern/hat/beanie.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/hat/cap.svg b/public/assets/avatars/layers/modern/hat/cap.svg
deleted file mode 100644
index aab2d9a..0000000
--- a/public/assets/avatars/layers/modern/hat/cap.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/head/oval.svg b/public/assets/avatars/layers/modern/head/oval.svg
deleted file mode 100644
index 0d19968..0000000
--- a/public/assets/avatars/layers/modern/head/oval.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/head/round.svg b/public/assets/avatars/layers/modern/head/round.svg
deleted file mode 100644
index 353b967..0000000
--- a/public/assets/avatars/layers/modern/head/round.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/head/square.svg b/public/assets/avatars/layers/modern/head/square.svg
deleted file mode 100644
index 9bc08b5..0000000
--- a/public/assets/avatars/layers/modern/head/square.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/outfit/crew.svg b/public/assets/avatars/layers/modern/outfit/crew.svg
deleted file mode 100644
index fccbace..0000000
--- a/public/assets/avatars/layers/modern/outfit/crew.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/outfit/hoodie.svg b/public/assets/avatars/layers/modern/outfit/hoodie.svg
deleted file mode 100644
index 8e691f8..0000000
--- a/public/assets/avatars/layers/modern/outfit/hoodie.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/outfit/polo.svg b/public/assets/avatars/layers/modern/outfit/polo.svg
deleted file mode 100644
index 084f1d6..0000000
--- a/public/assets/avatars/layers/modern/outfit/polo.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/public/assets/avatars/layers/modern/outfit/tee.svg b/public/assets/avatars/layers/modern/outfit/tee.svg
deleted file mode 100644
index 3918e7d..0000000
--- a/public/assets/avatars/layers/modern/outfit/tee.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/assets/avatars/presets/modern_001.png b/public/assets/avatars/presets/modern_001.png
deleted file mode 100644
index 3b5852b..0000000
Binary files a/public/assets/avatars/presets/modern_001.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_002.png b/public/assets/avatars/presets/modern_002.png
deleted file mode 100644
index bd4d0a1..0000000
Binary files a/public/assets/avatars/presets/modern_002.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_003.png b/public/assets/avatars/presets/modern_003.png
deleted file mode 100644
index edd126f..0000000
Binary files a/public/assets/avatars/presets/modern_003.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_004.png b/public/assets/avatars/presets/modern_004.png
deleted file mode 100644
index cd8d704..0000000
Binary files a/public/assets/avatars/presets/modern_004.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_005.png b/public/assets/avatars/presets/modern_005.png
deleted file mode 100644
index 4ca8bcd..0000000
Binary files a/public/assets/avatars/presets/modern_005.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_006.png b/public/assets/avatars/presets/modern_006.png
deleted file mode 100644
index 8ecd4f6..0000000
Binary files a/public/assets/avatars/presets/modern_006.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_007.png b/public/assets/avatars/presets/modern_007.png
deleted file mode 100644
index 9d3da9e..0000000
Binary files a/public/assets/avatars/presets/modern_007.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_008.png b/public/assets/avatars/presets/modern_008.png
deleted file mode 100644
index 256c279..0000000
Binary files a/public/assets/avatars/presets/modern_008.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_009.png b/public/assets/avatars/presets/modern_009.png
deleted file mode 100644
index 98b76ad..0000000
Binary files a/public/assets/avatars/presets/modern_009.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_010.png b/public/assets/avatars/presets/modern_010.png
deleted file mode 100644
index c20f42f..0000000
Binary files a/public/assets/avatars/presets/modern_010.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_011.png b/public/assets/avatars/presets/modern_011.png
deleted file mode 100644
index d015725..0000000
Binary files a/public/assets/avatars/presets/modern_011.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_012.png b/public/assets/avatars/presets/modern_012.png
deleted file mode 100644
index 6e1c296..0000000
Binary files a/public/assets/avatars/presets/modern_012.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_013.png b/public/assets/avatars/presets/modern_013.png
deleted file mode 100644
index 921c86b..0000000
Binary files a/public/assets/avatars/presets/modern_013.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_014.png b/public/assets/avatars/presets/modern_014.png
deleted file mode 100644
index 156a4c0..0000000
Binary files a/public/assets/avatars/presets/modern_014.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_015.png b/public/assets/avatars/presets/modern_015.png
deleted file mode 100644
index 97ec793..0000000
Binary files a/public/assets/avatars/presets/modern_015.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_016.png b/public/assets/avatars/presets/modern_016.png
deleted file mode 100644
index c78a267..0000000
Binary files a/public/assets/avatars/presets/modern_016.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_017.png b/public/assets/avatars/presets/modern_017.png
deleted file mode 100644
index dab3449..0000000
Binary files a/public/assets/avatars/presets/modern_017.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_018.png b/public/assets/avatars/presets/modern_018.png
deleted file mode 100644
index 6d8c7a1..0000000
Binary files a/public/assets/avatars/presets/modern_018.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_019.png b/public/assets/avatars/presets/modern_019.png
deleted file mode 100644
index e104074..0000000
Binary files a/public/assets/avatars/presets/modern_019.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_020.png b/public/assets/avatars/presets/modern_020.png
deleted file mode 100644
index 5b01c79..0000000
Binary files a/public/assets/avatars/presets/modern_020.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_021.png b/public/assets/avatars/presets/modern_021.png
deleted file mode 100644
index 1c6768b..0000000
Binary files a/public/assets/avatars/presets/modern_021.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_022.png b/public/assets/avatars/presets/modern_022.png
deleted file mode 100644
index c839577..0000000
Binary files a/public/assets/avatars/presets/modern_022.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_023.png b/public/assets/avatars/presets/modern_023.png
deleted file mode 100644
index 3d16be9..0000000
Binary files a/public/assets/avatars/presets/modern_023.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_024.png b/public/assets/avatars/presets/modern_024.png
deleted file mode 100644
index f82395b..0000000
Binary files a/public/assets/avatars/presets/modern_024.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_025.png b/public/assets/avatars/presets/modern_025.png
deleted file mode 100644
index ce5f3ec..0000000
Binary files a/public/assets/avatars/presets/modern_025.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_026.png b/public/assets/avatars/presets/modern_026.png
deleted file mode 100644
index afe0828..0000000
Binary files a/public/assets/avatars/presets/modern_026.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_027.png b/public/assets/avatars/presets/modern_027.png
deleted file mode 100644
index 73d2f5f..0000000
Binary files a/public/assets/avatars/presets/modern_027.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_028.png b/public/assets/avatars/presets/modern_028.png
deleted file mode 100644
index cc2ee71..0000000
Binary files a/public/assets/avatars/presets/modern_028.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_029.png b/public/assets/avatars/presets/modern_029.png
deleted file mode 100644
index 389ea0f..0000000
Binary files a/public/assets/avatars/presets/modern_029.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_030.png b/public/assets/avatars/presets/modern_030.png
deleted file mode 100644
index d0f2060..0000000
Binary files a/public/assets/avatars/presets/modern_030.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_031.png b/public/assets/avatars/presets/modern_031.png
deleted file mode 100644
index 415e088..0000000
Binary files a/public/assets/avatars/presets/modern_031.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_032.png b/public/assets/avatars/presets/modern_032.png
deleted file mode 100644
index fc6db14..0000000
Binary files a/public/assets/avatars/presets/modern_032.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_033.png b/public/assets/avatars/presets/modern_033.png
deleted file mode 100644
index b0e879c..0000000
Binary files a/public/assets/avatars/presets/modern_033.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_034.png b/public/assets/avatars/presets/modern_034.png
deleted file mode 100644
index 744dd02..0000000
Binary files a/public/assets/avatars/presets/modern_034.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_035.png b/public/assets/avatars/presets/modern_035.png
deleted file mode 100644
index d7544e3..0000000
Binary files a/public/assets/avatars/presets/modern_035.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_036.png b/public/assets/avatars/presets/modern_036.png
deleted file mode 100644
index f881b1d..0000000
Binary files a/public/assets/avatars/presets/modern_036.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_037.png b/public/assets/avatars/presets/modern_037.png
deleted file mode 100644
index 02cae8a..0000000
Binary files a/public/assets/avatars/presets/modern_037.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_038.png b/public/assets/avatars/presets/modern_038.png
deleted file mode 100644
index 6b949e6..0000000
Binary files a/public/assets/avatars/presets/modern_038.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_039.png b/public/assets/avatars/presets/modern_039.png
deleted file mode 100644
index a8f723c..0000000
Binary files a/public/assets/avatars/presets/modern_039.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_040.png b/public/assets/avatars/presets/modern_040.png
deleted file mode 100644
index bb3066e..0000000
Binary files a/public/assets/avatars/presets/modern_040.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_041.png b/public/assets/avatars/presets/modern_041.png
deleted file mode 100644
index a4cb4c6..0000000
Binary files a/public/assets/avatars/presets/modern_041.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_042.png b/public/assets/avatars/presets/modern_042.png
deleted file mode 100644
index 1a919e4..0000000
Binary files a/public/assets/avatars/presets/modern_042.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_043.png b/public/assets/avatars/presets/modern_043.png
deleted file mode 100644
index 1adb599..0000000
Binary files a/public/assets/avatars/presets/modern_043.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_044.png b/public/assets/avatars/presets/modern_044.png
deleted file mode 100644
index 17bdceb..0000000
Binary files a/public/assets/avatars/presets/modern_044.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_045.png b/public/assets/avatars/presets/modern_045.png
deleted file mode 100644
index 8e40411..0000000
Binary files a/public/assets/avatars/presets/modern_045.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_046.png b/public/assets/avatars/presets/modern_046.png
deleted file mode 100644
index cb31649..0000000
Binary files a/public/assets/avatars/presets/modern_046.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_047.png b/public/assets/avatars/presets/modern_047.png
deleted file mode 100644
index 4915c31..0000000
Binary files a/public/assets/avatars/presets/modern_047.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_048.png b/public/assets/avatars/presets/modern_048.png
deleted file mode 100644
index 33547cf..0000000
Binary files a/public/assets/avatars/presets/modern_048.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_049.png b/public/assets/avatars/presets/modern_049.png
deleted file mode 100644
index 0196445..0000000
Binary files a/public/assets/avatars/presets/modern_049.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_050.png b/public/assets/avatars/presets/modern_050.png
deleted file mode 100644
index 5aee445..0000000
Binary files a/public/assets/avatars/presets/modern_050.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_051.png b/public/assets/avatars/presets/modern_051.png
deleted file mode 100644
index b249bed..0000000
Binary files a/public/assets/avatars/presets/modern_051.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_052.png b/public/assets/avatars/presets/modern_052.png
deleted file mode 100644
index afd19d6..0000000
Binary files a/public/assets/avatars/presets/modern_052.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_053.png b/public/assets/avatars/presets/modern_053.png
deleted file mode 100644
index ee30fd3..0000000
Binary files a/public/assets/avatars/presets/modern_053.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_054.png b/public/assets/avatars/presets/modern_054.png
deleted file mode 100644
index c387c87..0000000
Binary files a/public/assets/avatars/presets/modern_054.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_055.png b/public/assets/avatars/presets/modern_055.png
deleted file mode 100644
index cde53d6..0000000
Binary files a/public/assets/avatars/presets/modern_055.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_056.png b/public/assets/avatars/presets/modern_056.png
deleted file mode 100644
index 0f8bb76..0000000
Binary files a/public/assets/avatars/presets/modern_056.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_057.png b/public/assets/avatars/presets/modern_057.png
deleted file mode 100644
index f5001c5..0000000
Binary files a/public/assets/avatars/presets/modern_057.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_058.png b/public/assets/avatars/presets/modern_058.png
deleted file mode 100644
index 34ca3c9..0000000
Binary files a/public/assets/avatars/presets/modern_058.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_059.png b/public/assets/avatars/presets/modern_059.png
deleted file mode 100644
index fa46e66..0000000
Binary files a/public/assets/avatars/presets/modern_059.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_060.png b/public/assets/avatars/presets/modern_060.png
deleted file mode 100644
index 50381ce..0000000
Binary files a/public/assets/avatars/presets/modern_060.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_061.png b/public/assets/avatars/presets/modern_061.png
deleted file mode 100644
index ae1cc77..0000000
Binary files a/public/assets/avatars/presets/modern_061.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_062.png b/public/assets/avatars/presets/modern_062.png
deleted file mode 100644
index eb9e5ce..0000000
Binary files a/public/assets/avatars/presets/modern_062.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_063.png b/public/assets/avatars/presets/modern_063.png
deleted file mode 100644
index b30aeb5..0000000
Binary files a/public/assets/avatars/presets/modern_063.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_064.png b/public/assets/avatars/presets/modern_064.png
deleted file mode 100644
index 51f67a6..0000000
Binary files a/public/assets/avatars/presets/modern_064.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_065.png b/public/assets/avatars/presets/modern_065.png
deleted file mode 100644
index c19c4e2..0000000
Binary files a/public/assets/avatars/presets/modern_065.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_066.png b/public/assets/avatars/presets/modern_066.png
deleted file mode 100644
index 606cc12..0000000
Binary files a/public/assets/avatars/presets/modern_066.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_067.png b/public/assets/avatars/presets/modern_067.png
deleted file mode 100644
index 94aaf9e..0000000
Binary files a/public/assets/avatars/presets/modern_067.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_068.png b/public/assets/avatars/presets/modern_068.png
deleted file mode 100644
index a693bdf..0000000
Binary files a/public/assets/avatars/presets/modern_068.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_069.png b/public/assets/avatars/presets/modern_069.png
deleted file mode 100644
index b7e2047..0000000
Binary files a/public/assets/avatars/presets/modern_069.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_070.png b/public/assets/avatars/presets/modern_070.png
deleted file mode 100644
index 0928525..0000000
Binary files a/public/assets/avatars/presets/modern_070.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_071.png b/public/assets/avatars/presets/modern_071.png
deleted file mode 100644
index 91b9506..0000000
Binary files a/public/assets/avatars/presets/modern_071.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_072.png b/public/assets/avatars/presets/modern_072.png
deleted file mode 100644
index f83a646..0000000
Binary files a/public/assets/avatars/presets/modern_072.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_073.png b/public/assets/avatars/presets/modern_073.png
deleted file mode 100644
index 5c94b29..0000000
Binary files a/public/assets/avatars/presets/modern_073.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_074.png b/public/assets/avatars/presets/modern_074.png
deleted file mode 100644
index 0409b11..0000000
Binary files a/public/assets/avatars/presets/modern_074.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_075.png b/public/assets/avatars/presets/modern_075.png
deleted file mode 100644
index e28f77a..0000000
Binary files a/public/assets/avatars/presets/modern_075.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_076.png b/public/assets/avatars/presets/modern_076.png
deleted file mode 100644
index 757c51c..0000000
Binary files a/public/assets/avatars/presets/modern_076.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_077.png b/public/assets/avatars/presets/modern_077.png
deleted file mode 100644
index baa965f..0000000
Binary files a/public/assets/avatars/presets/modern_077.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_078.png b/public/assets/avatars/presets/modern_078.png
deleted file mode 100644
index b811a10..0000000
Binary files a/public/assets/avatars/presets/modern_078.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_079.png b/public/assets/avatars/presets/modern_079.png
deleted file mode 100644
index 3d0162b..0000000
Binary files a/public/assets/avatars/presets/modern_079.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_080.png b/public/assets/avatars/presets/modern_080.png
deleted file mode 100644
index d5ced01..0000000
Binary files a/public/assets/avatars/presets/modern_080.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_081.png b/public/assets/avatars/presets/modern_081.png
deleted file mode 100644
index 406c40d..0000000
Binary files a/public/assets/avatars/presets/modern_081.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_082.png b/public/assets/avatars/presets/modern_082.png
deleted file mode 100644
index 1d7f06e..0000000
Binary files a/public/assets/avatars/presets/modern_082.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_083.png b/public/assets/avatars/presets/modern_083.png
deleted file mode 100644
index 6129f1b..0000000
Binary files a/public/assets/avatars/presets/modern_083.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_084.png b/public/assets/avatars/presets/modern_084.png
deleted file mode 100644
index d3f3334..0000000
Binary files a/public/assets/avatars/presets/modern_084.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_085.png b/public/assets/avatars/presets/modern_085.png
deleted file mode 100644
index a9c5f56..0000000
Binary files a/public/assets/avatars/presets/modern_085.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_086.png b/public/assets/avatars/presets/modern_086.png
deleted file mode 100644
index 9391698..0000000
Binary files a/public/assets/avatars/presets/modern_086.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_087.png b/public/assets/avatars/presets/modern_087.png
deleted file mode 100644
index 9c117d6..0000000
Binary files a/public/assets/avatars/presets/modern_087.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_088.png b/public/assets/avatars/presets/modern_088.png
deleted file mode 100644
index 59e127a..0000000
Binary files a/public/assets/avatars/presets/modern_088.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_089.png b/public/assets/avatars/presets/modern_089.png
deleted file mode 100644
index b9c0251..0000000
Binary files a/public/assets/avatars/presets/modern_089.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_090.png b/public/assets/avatars/presets/modern_090.png
deleted file mode 100644
index 05db369..0000000
Binary files a/public/assets/avatars/presets/modern_090.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_091.png b/public/assets/avatars/presets/modern_091.png
deleted file mode 100644
index ec10cb6..0000000
Binary files a/public/assets/avatars/presets/modern_091.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_092.png b/public/assets/avatars/presets/modern_092.png
deleted file mode 100644
index a4cfac9..0000000
Binary files a/public/assets/avatars/presets/modern_092.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_093.png b/public/assets/avatars/presets/modern_093.png
deleted file mode 100644
index cf7f591..0000000
Binary files a/public/assets/avatars/presets/modern_093.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_094.png b/public/assets/avatars/presets/modern_094.png
deleted file mode 100644
index 0226046..0000000
Binary files a/public/assets/avatars/presets/modern_094.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_095.png b/public/assets/avatars/presets/modern_095.png
deleted file mode 100644
index 90d398f..0000000
Binary files a/public/assets/avatars/presets/modern_095.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_096.png b/public/assets/avatars/presets/modern_096.png
deleted file mode 100644
index e622def..0000000
Binary files a/public/assets/avatars/presets/modern_096.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_097.png b/public/assets/avatars/presets/modern_097.png
deleted file mode 100644
index d824ff6..0000000
Binary files a/public/assets/avatars/presets/modern_097.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_098.png b/public/assets/avatars/presets/modern_098.png
deleted file mode 100644
index e0f4100..0000000
Binary files a/public/assets/avatars/presets/modern_098.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_099.png b/public/assets/avatars/presets/modern_099.png
deleted file mode 100644
index 971e31e..0000000
Binary files a/public/assets/avatars/presets/modern_099.png and /dev/null differ
diff --git a/public/assets/avatars/presets/modern_100.png b/public/assets/avatars/presets/modern_100.png
deleted file mode 100644
index 9839405..0000000
Binary files a/public/assets/avatars/presets/modern_100.png and /dev/null differ
diff --git a/public/assets/css/app.css b/public/assets/css/app.css
index 3e0d4ad..e72bf0c 100755
--- a/public/assets/css/app.css
+++ b/public/assets/css/app.css
@@ -256,21 +256,31 @@ body {
.avatar-component-panel { display: none; width: 100%; gap: 10px; }
.avatar-component-panel.is-active { display: grid; }
.avatar-component-panel__head { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; }
-.avatar-component-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; max-height: 460px; overflow: auto; padding-right: 4px; }
-.avatar-component-card { position: relative; display: grid; gap: 8px; padding: 10px; background: #fff; border: 1px solid var(--color-border); border-radius: 16px; cursor: pointer; }
+.avatar-component-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; max-height: 420px; overflow: auto; padding-right: 4px; }
+.avatar-component-card { position: relative; display: grid; gap: 6px; padding: 8px; background: #fff; border: 1px solid var(--color-border); border-radius: 16px; cursor: pointer; }
.avatar-component-card input { position: absolute; opacity: 0; pointer-events: none; }
.avatar-component-card__thumb { display: block; aspect-ratio: 1; border-radius: 14px; overflow: hidden; background: linear-gradient(180deg, #f7efe6, #f0e4d7); border: 1px solid rgba(74, 52, 38, 0.08); }
.avatar-component-card__thumb img { width: 100%; height: 100%; object-fit: cover; object-position: center top; display: block; transform-origin: center; }
.avatar-component-card__label { font-size: 12px; font-weight: 700; color: var(--color-text); text-align: center; }
.avatar-component-card:has(input:checked) { border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(52,72,90,0.14); }
.avatar-component-panel--eyes .avatar-component-card__thumb img,
-.avatar-component-panel--eyebrows .avatar-component-card__thumb img { transform: scale(2.5) translateY(-14%); }
-.avatar-component-panel--mouth .avatar-component-card__thumb img { transform: scale(2.45) translateY(14%); }
-.avatar-component-panel--glasses .avatar-component-card__thumb img { transform: scale(2.25) translateY(-6%); }
-.avatar-component-panel--hair .avatar-component-card__thumb img { transform: scale(2.2) translateY(-26%); }
-.avatar-component-panel--beard .avatar-component-card__thumb img { transform: scale(2.3) translateY(8%); }
-.avatar-component-panel--earrings .avatar-component-card__thumb img { transform: scale(2.15) translateY(-2%); }
-@media (max-width: 860px){ .avatar-component-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
+.avatar-component-panel--eyebrows .avatar-component-card__thumb img { transform: scale(2.05) translateY(-12%); }
+.avatar-component-panel--mouth .avatar-component-card__thumb img { transform: scale(2.0) translateY(10%); }
+.avatar-component-panel--glasses .avatar-component-card__thumb img { transform: scale(1.95) translateY(-4%); }
+.avatar-component-panel--hair .avatar-component-card__thumb img { transform: scale(1.9) translateY(-20%); }
+.avatar-component-panel--beard .avatar-component-card__thumb img { transform: scale(1.95) translateY(7%); }
+.avatar-component-panel--earrings .avatar-component-card__thumb img { transform: scale(1.85) translateY(-1%); }
+.avatar-seed-picker { width: 100%; display: grid; gap: 12px; padding: 18px; background: rgba(255,255,255,0.82); border: 1px solid var(--color-border); border-radius: 18px; }
+.avatar-seed-picker[hidden] { display: none; }
+.avatar-seed-picker__head { display: flex; justify-content: space-between; gap: 12px; align-items: center; }
+.avatar-seed-picker__grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
+.avatar-seed-card { display: grid; gap: 8px; padding: 10px; border: 1px solid var(--color-border); border-radius: 16px; background: #fff; cursor: pointer; }
+.avatar-seed-card:hover { border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(52,72,90,0.08); }
+.avatar-seed-card__thumb { display: block; aspect-ratio: 1; border-radius: 14px; overflow: hidden; background: linear-gradient(180deg, #f7efe6, #f0e4d7); border: 1px solid rgba(74, 52, 38, 0.08); }
+.avatar-seed-card__thumb img { width: 100%; height: 100%; display: block; object-fit: cover; }
+.avatar-seed-card__label { text-align: center; font-size: 12px; font-weight: 700; }
+@media (max-width: 980px){ .avatar-component-grid, .avatar-seed-picker__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
+@media (max-width: 860px){ .avatar-component-grid, .avatar-seed-picker__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.avatar-swatch-group { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
.avatar-swatch { display: grid; grid-template-columns: 20px 18px minmax(0, 1fr); gap: 10px; align-items: center; padding: 10px 12px; border: 1px solid var(--color-border); border-radius: 14px; background: #fff; cursor: pointer; }
.avatar-swatch__color { width: 18px; height: 18px; border-radius: 999px; background: var(--swatch-color); border: 1px solid rgba(0,0,0,0.12); }
diff --git a/public/assets/js/app.js b/public/assets/js/app.js
index f7391c2..7846d68 100755
--- a/public/assets/js/app.js
+++ b/public/assets/js/app.js
@@ -726,36 +726,49 @@ document.addEventListener('DOMContentLoaded', () => {
});
document.addEventListener('pkt:open-consent', openConsentModal);
+ const readAvatarValue = (form, field) => {
+ const checked = form.querySelector(`[data-avatar-field="${field}"]:checked`);
+ if (checked) return checked.value;
+ const input = form.querySelector(`[data-avatar-field="${field}"]`);
+ return input ? input.value : '';
+ };
+
+ const avatarComponentFieldMap = {
+ avatar_lorelei_eyes_variant: 'eyesVariant',
+ avatar_lorelei_eyebrows_variant: 'eyebrowsVariant',
+ avatar_lorelei_mouth_variant: 'mouthVariant',
+ avatar_lorelei_glasses_variant: 'glassesVariant',
+ avatar_lorelei_hair_variant: 'hairVariant',
+ avatar_lorelei_beard_variant: 'beardVariant',
+ avatar_lorelei_earrings_variant: 'earringsVariant',
+ };
+
+ const avatarComponentFields = Object.keys(avatarComponentFieldMap);
+
+ const buildAvatarParams = (form, overrides = {}) => {
+ const seed = overrides.avatar_preset || readAvatarValue(form, 'avatar_preset');
+ if (!seed) return null;
+
+ const params = new URLSearchParams({ seed });
+ avatarComponentFields.forEach((field) => {
+ const value = Object.prototype.hasOwnProperty.call(overrides, field)
+ ? overrides[field]
+ : readAvatarValue(form, field);
+ const param = avatarComponentFieldMap[field];
+ if (value && param) params.set(param, value);
+ });
+
+ return params;
+ };
+
const updateAvatarPreview = (form) => {
const preview = form.querySelector('[data-avatar-preview] .pkt-avatar');
if (!preview) return;
-
- const readValue = (field) => {
- const checked = form.querySelector(`[data-avatar-field="${field}"]:checked`);
- if (checked) return checked.value;
- const input = form.querySelector(`[data-avatar-field="${field}"]`);
- return input ? input.value : '';
- };
const image = preview.querySelector('.pkt-avatar__img');
if (!image) return;
- const checked = form.querySelector('[data-avatar-field="avatar_preset"]:checked');
- const seed = checked?.value || '';
- if (!seed) return;
-
- const params = new URLSearchParams({ seed });
- [
- ['avatar_lorelei_eyes_variant', 'eyesVariant'],
- ['avatar_lorelei_eyebrows_variant', 'eyebrowsVariant'],
- ['avatar_lorelei_mouth_variant', 'mouthVariant'],
- ['avatar_lorelei_glasses_variant', 'glassesVariant'],
- ['avatar_lorelei_hair_variant', 'hairVariant'],
- ['avatar_lorelei_beard_variant', 'beardVariant'],
- ['avatar_lorelei_earrings_variant', 'earringsVariant'],
- ].forEach(([field, param]) => {
- const value = readValue(field);
- if (value) params.set(param, value);
- });
+ const params = buildAvatarParams(form);
+ if (!params) return;
const url = `/api/avatar?${params.toString()}`;
if (!url) return;
@@ -763,48 +776,50 @@ document.addEventListener('DOMContentLoaded', () => {
};
const updateAvatarOptionPreviews = (form) => {
- const baseSeed = readValue('avatar_preset');
- if (!baseSeed) return;
-
- const currentValues = {};
- [
- 'avatar_lorelei_eyes_variant',
- 'avatar_lorelei_eyebrows_variant',
- 'avatar_lorelei_mouth_variant',
- 'avatar_lorelei_glasses_variant',
- 'avatar_lorelei_hair_variant',
- 'avatar_lorelei_beard_variant',
- 'avatar_lorelei_earrings_variant',
- ].forEach((field) => {
- const checkedField = form.querySelector(`[data-avatar-field="${field}"]:checked`);
- currentValues[field] = checkedField ? checkedField.value : '';
- });
-
- const fieldMap = {
- avatar_lorelei_eyes_variant: 'eyesVariant',
- avatar_lorelei_eyebrows_variant: 'eyebrowsVariant',
- avatar_lorelei_mouth_variant: 'mouthVariant',
- avatar_lorelei_glasses_variant: 'glassesVariant',
- avatar_lorelei_hair_variant: 'hairVariant',
- avatar_lorelei_beard_variant: 'beardVariant',
- avatar_lorelei_earrings_variant: 'earringsVariant',
- };
-
form.querySelectorAll('[data-avatar-option-thumb]').forEach((image) => {
const field = image.getAttribute('data-avatar-option-field') || '';
const value = image.getAttribute('data-avatar-option-value') || '';
- const params = new URLSearchParams({ seed: baseSeed });
- Object.entries(currentValues).forEach(([currentField, currentValue]) => {
- const param = fieldMap[currentField];
- if (!param) return;
- const appliedValue = currentField === field ? value : currentValue;
- if (appliedValue) params.set(param, appliedValue);
- });
+ const params = buildAvatarParams(form, { [field]: value });
+ if (!params) return;
image.src = `/api/avatar?${params.toString()}`;
});
};
+ const renderAvatarSeedChoices = (form, seeds) => {
+ const picker = form.querySelector('[data-avatar-seed-picker]');
+ const grid = form.querySelector('[data-avatar-seed-picker-grid]');
+ if (!picker || !grid) return;
+
+ grid.innerHTML = '';
+ seeds.forEach((seed, index) => {
+ const params = buildAvatarParams(form, { avatar_preset: seed });
+ if (!params) return;
+
+ const card = document.createElement('button');
+ card.type = 'button';
+ card.className = 'avatar-seed-card';
+ card.setAttribute('data-avatar-seed-option', seed);
+ card.innerHTML = `
+
+
+
+
Variante ${index + 1}
+ `;
+ card.addEventListener('click', () => {
+ const seedField = form.querySelector('[data-avatar-field="avatar_preset"]');
+ if (!(seedField instanceof HTMLInputElement)) return;
+ seedField.value = seed;
+ picker.hidden = true;
+ updateAvatarPreview(form);
+ updateAvatarOptionPreviews(form);
+ });
+ grid.appendChild(card);
+ });
+
+ picker.hidden = false;
+ };
+
document.querySelectorAll('[data-avatar-builder]').forEach((form) => {
updateAvatarPreview(form);
updateAvatarOptionPreviews(form);
@@ -837,15 +852,7 @@ document.addEventListener('DOMContentLoaded', () => {
});
});
- [
- 'avatar_lorelei_eyes_variant',
- 'avatar_lorelei_eyebrows_variant',
- 'avatar_lorelei_mouth_variant',
- 'avatar_lorelei_glasses_variant',
- 'avatar_lorelei_hair_variant',
- 'avatar_lorelei_beard_variant',
- 'avatar_lorelei_earrings_variant',
- ].forEach((field) => {
+ avatarComponentFields.forEach((field) => {
form.querySelectorAll(`[data-avatar-field="${field}"]`).forEach((input) => {
input.addEventListener('change', () => setActiveComponentPanel(field));
});
@@ -866,7 +873,6 @@ document.addEventListener('DOMContentLoaded', () => {
'veit', 'vito', 'yaro', 'yuri', 'zeno', 'zuri',
];
const slugifySeed = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 64) || 'papa-kind-treff';
- const dicebearUrl = (seed) => `/api/avatar?seed=${encodeURIComponent(seed)}`;
const buildSeed = () => {
const prefix = avatarPrefixes[Math.floor(Math.random() * avatarPrefixes.length)];
const suffix = avatarSuffixes[Math.floor(Math.random() * avatarSuffixes.length)];
@@ -877,9 +883,20 @@ document.addEventListener('DOMContentLoaded', () => {
form.querySelector('[data-avatar-reroll]')?.addEventListener('click', () => {
const seedField = form.querySelector('[data-avatar-field="avatar_preset"]');
if (!(seedField instanceof HTMLInputElement)) return;
- seedField.value = buildSeed();
- updateAvatarPreview(form);
- updateAvatarOptionPreviews(form);
+ const currentSeed = readAvatarValue(form, 'avatar_preset');
+ const seeds = [];
+ while (seeds.length < 8) {
+ const candidate = buildSeed();
+ if (candidate === currentSeed || seeds.includes(candidate)) continue;
+ seeds.push(candidate);
+ }
+
+ renderAvatarSeedChoices(form, seeds);
+ });
+
+ form.querySelector('[data-avatar-seed-picker-close]')?.addEventListener('click', () => {
+ const picker = form.querySelector('[data-avatar-seed-picker]');
+ if (picker) picker.hidden = true;
});
});
diff --git a/src/App/AccountPages.php b/src/App/AccountPages.php
index 68f3dd4..b2de846 100755
--- a/src/App/AccountPages.php
+++ b/src/App/AccountPages.php
@@ -419,7 +419,6 @@ final class AccountPages
$section = 'profile';
}
$avatarOptions = Lorelei::options();
- $avatarPresetOptions = Lorelei::seedChoices((string)$profile['avatar_preset']);
return compact(
'flash',
@@ -437,7 +436,6 @@ final class AccountPages
'communityCanApply',
'communityRestrictions',
'avatarOptions',
- 'avatarPresetOptions',
'section',
'allowedSections'
);
diff --git a/src/App/Avatar/Lorelei.php b/src/App/Avatar/Lorelei.php
index 795cd06..121a55c 100644
--- a/src/App/Avatar/Lorelei.php
+++ b/src/App/Avatar/Lorelei.php
@@ -93,60 +93,6 @@ final class Lorelei
return substr($seed, 0, 64);
}
- public static function seedChoices(string $selectedSeed, int $count = 24): array
- {
- $selectedSeed = self::normalizeSeed($selectedSeed);
- $prefixes = [
- 'abend', 'ahorn', 'anker', 'atlas', 'berg', 'blick', 'brise', 'echo',
- 'eiche', 'fjord', 'fluss', 'fokus', 'hafen', 'herz', 'horizont', 'insel',
- 'kiesel', 'kompass', 'kraft', 'linie', 'licht', 'lotse', 'mond', 'morgen',
- 'nord', 'pfad', 'quelle', 'rauch', 'runde', 'sand', 'sommer', 'stein',
- 'sturm', 'tal', 'ufer', 'wald', 'welle', 'wind', 'winkel', 'zeit',
- ];
- $suffixes = [
- 'alpha', 'atlas', 'balu', 'bravo', 'caspar', 'dario', 'emil', 'felix',
- 'fiete', 'finn', 'gerrit', 'hanno', 'ilan', 'joris', 'kian', 'leon',
- 'linus', 'maik', 'malo', 'marlon', 'mats', 'mika', 'milan', 'noel',
- 'ole', 'oskar', 'pepe', 'quinn', 'remo', 'sam', 'taro', 'timo',
- 'veit', 'vito', 'yaro', 'yuri', 'zeno', 'zuri',
- ];
-
- $choices = [[
- 'seed' => $selectedSeed,
- 'label' => 'Aktuelle Auswahl',
- 'image' => self::dicebearUrl($selectedSeed),
- ]];
-
- $seen = [$selectedSeed => true];
- $base = abs((int) crc32($selectedSeed));
- $index = 0;
-
- while (count($choices) < $count) {
- $prefix = $prefixes[($base + ($index * 7)) % count($prefixes)];
- $suffix = $suffixes[($base + ($index * 11)) % count($suffixes)];
- $candidate = self::normalizeSeed($prefix . '-' . $suffix . '-' . (($base + $index) % 997));
- $index++;
-
- if (isset($seen[$candidate])) {
- continue;
- }
-
- $seen[$candidate] = true;
- $choices[] = [
- 'seed' => $candidate,
- 'label' => 'Variante ' . count($choices),
- 'image' => self::dicebearUrl($candidate),
- ];
- }
-
- return $choices;
- }
-
- public static function dicebearUrl(string $seed): string
- {
- return '/api/avatar?seed=' . rawurlencode(self::normalizeSeed($seed));
- }
-
public static function apiQuery(array $row): array
{
$avatar = self::normalize($row);
@@ -210,7 +156,7 @@ final class Lorelei
htmlspecialchars(implode(' ', [
'pkt-avatar',
'pkt-avatar--' . preg_replace('/[^a-z0-9\-]/', '', strtolower($size)),
- 'pkt-avatar--preset',
+ 'pkt-avatar--generated',
]), ENT_QUOTES),
htmlspecialchars('Avatar von ' . $name, ENT_QUOTES),
htmlspecialchars($src, ENT_QUOTES)