Commit Graph
100 Commits
Author SHA1 Message Date
qciganoandClaude Sonnet 5 c8f699034f Verwaltung: alle Kisten deutlich aufgewertet ("speziell speziell speziell")
Jede der 6 Kisten (Bestellstatus, Kennzahlen, Bestseller je Kategorie, Herkunft,
Stammkundschaft, Alle Bestellungen) bekommt jetzt:
- einen schimmernden Aurora-Rand in der eigenen Box-Farbe (derselbe Verlaufs-
  Trick wie beim Hero-Kopf, nur pro Kiste individuell eingefärbt)
- ihr eigenes Icon riesig und ganz dezent als Wasserzeichen im Hintergrund
- einen "Radar-Ping"-Ring, der leise vom Icon-Abzeichen ausgeht
- eine kleine farbige Eyebrow-Kennzeichnung über dem Titel (z.B. "TOP-VERKÄUFE",
  "GEOGRAFIE", "TREUE & WIEDERKEHR")

Die Kennzahlen-Kacheln bekommen zusätzlich einen Lichtstreif, der beim Hover
einmal quer durchläuft. Alles respektiert prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:50:45 +02:00
qciganoandClaude Sonnet 5 ac9f3771f2 Verwaltung: Lücke zwischen Stammkundschaft- und Alle-Bestellungen-Kiste behoben
Gleiche Ursache wie beim vorherigen Fix: "Alle Bestellungen" steckte noch in
einer eigenen <section>, deren Innenabstand sich mit dem der Auswertungs-
Section addiert hat. Jetzt alles eine Section — Abstand jetzt einheitlich
~22px wie zwischen allen anderen Kisten.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:35:11 +02:00
qciganoandClaude Sonnet 5 056ff6e574 Verwaltung: neue Kennzahlen-Kachel "Diesen Monat"
Bisher gab es nur "Heute"/"Letzte 7 Tage" — der ganze aktuelle Kalendermonat
fehlte. Neue Kachel zeigt Bestellanzahl + Umsatz diesen Monat, anklickbar wie
die anderen Kennzahlen-Kacheln (filtert die Bestellliste direkt danach). Auch
als neue Option "Dieser Monat" im Zeitraum-Dropdown ergänzt — bewusst als
echter Kalendermonat (ab dem 1.) berechnet, nicht einfach "letzte 30 Tage".

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:26:44 +02:00
qciganoandClaude Sonnet 5 398ff2f886 Verwaltung: riesige Lücke zwischen Kennzahlen- und Auswertungs-Kisten behoben
Die Auswertungs-Kisten steckten in einer eigenen <section>, deren Innenabstand
sich mit dem der vorherigen Section zu einem viel zu großen Zwischenraum
addierte. Jetzt in derselben Section wie Bestellstatus/Kennzahlen — Abstand
zwischen allen Kisten jetzt einheitlich ~22px statt teils 150px+.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:23:09 +02:00
qciganoandClaude Sonnet 5 76db073cb0 Verwaltung: Auswertungs-Kisten sind jetzt selbst der Klick-Auslöser (Accordion statt Extra-Knopf
Der separate "Auswertung anzeigen"-Knopf war nicht der Plan — stattdessen sind
jetzt die drei Kisten (Bestseller je Kategorie / Herkunft der Bestellungen /
Stammkundschaft) selbst klickbar und klappen unabhängig voneinander ihren
eigenen Inhalt auf, per sanfter CSS-Grid-Animation und rotierendem Chevron.
Startzustand: alle drei eingeklappt (nur Kopfzeile sichtbar).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:12:52 +02:00
qciganoandClaude Sonnet 5 03a9fa234c Verwaltung: Auswertungs-Kacheln (Bestseller/Herkunft/Stammkundschaft) im Stil der Bestellstatus-Kacheln
Jede Kategorie/jedes Land/jede Stammkundin ist jetzt eine eigene, klickbare Kachel
im selben Look wie die Bestellstatus-Kacheln oben (Wunsch: "sollen aussehen wie
screen2"). Klick auf eine Kachel öffnet direkt darunter ein Panel mit der
vollständigen Liste (nicht mehr nur den Top 4/8) — nochmal klicken klappt es
wieder ein.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 23:00:40 +02:00
qciganoandClaude Sonnet 5 5df0643a9d Fix: Bestell-E-Mail wird jetzt zuverlässig verschickt (await statt waitUntil)
context.waitUntil() lief in dieser Pages-Functions-Umgebung nicht zuverlässig zu
Ende, bevor die Anfrage beendet wurde - Bestellungen wurden korrekt gespeichert,
aber die Benachrichtigungs-Mail an [email protected] kam nie an.
Mit echten Live-Bestellungen verifiziert: mit waitUntil kam nichts bei Resend an,
mit await kam die Mail sofort und zuverlässig an.

Außerdem: "Auf Lager"-Feld im Produkt-Formular (Admin) steht jetzt über "Kategorie"
statt darunter, wie gewünscht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:48:45 +02:00
qciganoandClaude Sonnet 5 989006b6a6 Verwaltung: Auswertung erst per Klick einblenden, direkt unter den Kisten
Bestseller/Herkunft/Stammkundschaft nahmen bisher immer Platz auf der Seite ein, auch
ohne Bestellungen zum Auswerten. Jetzt standardmäßig eingeklappt hinter einem
"📊 Auswertung anzeigen"-Knopf direkt unter der Bestellstatus-/Kennzahlen-Kiste — ein
Klick blendet alle drei Auswertungs-Kisten sofort an genau dieser Stelle ein (vor der
Bestellliste), erneuter Klick klappt sie wieder ein. Mit echtem Klick-Test verifiziert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:36:38 +02:00
qciganoandClaude Sonnet 5 35ddc5cda8 Konto-Dropdown: echt zentriert unterm Knopf + kompakter, wie bei Dogfather
War rechtsbündig an der Knopfkante ausgerichtet, dadurch je nach Länge des Benutzernamens
optisch "nicht zentriert" zum Knopf. Jetzt wie auf der Dogfather-Referenzseite
(.nav-dropdown: left:50% + translateX(-50%)) — bleibt immer exakt mittig unterm Knopf.
Dropdown-Einträge außerdem etwas kompakter (kleinere Schrift/Padding, näher an der
Dogfather-Vorlage) statt für nur zwei Einträge unnötig groß zu wirken. Per Geometrie-Messung
verifiziert: 0px Abweichung zwischen Knopf- und Dropdown-Mitte.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:28:53 +02:00
qciganoandClaude Sonnet 5 e2b89483c2 Verwaltung: alles in eigene, farblich unterschiedliche "Kisten" gepackt
Auf Feedback ("das ist mir zu einfach, ich will das alles in Kisten ist") die komplette
Auswertungsseite umgebaut: jede zusammengehörige Gruppe (Bestellstatus, Kennzahlen, Alle
Bestellungen, Bestseller je Kategorie, Herkunft der Bestellungen, Stammkundschaft) steckt
jetzt in einer eigenen, klar abgegrenzten Box mit eigenem Icon-Abzeichen, eigener
Akzentfarbe (Cyan/Lila/Gold/Grün/Pink) und dezent pulsierendem Glanzrand — statt lose auf
der Seite zu stehen.

Genauso wichtig: die Leerzustände (bevor die erste echte Bestellung eingeht) sehen jetzt
nicht mehr trostlos aus — großes Icon + freundlicher Text statt nacktem Fließtext, jeweils
passend zur Box (📭 Bestellungen, 🧶 Bestseller, 🗺️ Herkunft, 💌 Stammkundschaft). Mit
echtem Screenshot-Vergleich (befüllt UND leer, per fetch-Mock simuliert) verifiziert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:25:09 +02:00
qciganoandClaude Sonnet 5 af729ba571 Gutscheine "nur einmal pro Person" + Bestell-E-Mail-Benachrichtigung
1) Gutscheincodes können jetzt im Adminbereich auf "nur einmal pro Person einlösbar"
   gestellt werden. Wird serverseitig durchgesetzt (neue Spalte orders.gutschein_code +
   Prüfung in functions/api/orders.js gegen die echte Bestelldatenbank, case-insensitiv
   nach E-Mail-Adresse) — kann also NICHT durch Löschen von localStorage/einen anderen
   Browser umgangen werden, anders als die bisherige rein clientseitige Rabattlogik.
   Stornierte Bestellungen zählen nicht als "schon benutzt". Ausführlich getestet: echter
   Browser-Checkout mit Einmal-Code funktioniert beim ersten Versuch, wird beim zweiten
   Versuch (gleiche E-Mail) korrekt mit klarer Fehlermeldung abgelehnt, mit anderer E-Mail
   weiterhin nutzbar.

2) Bestell-E-Mail-Benachrichtigung an [email protected]: recherchiert und
   vorbereitet (existierte vorher nirgends im Code). Läuft über Resend (kostenlos bis
   3.000 E-Mails/Monat), im Hintergrund per context.waitUntil() nach jeder neuen
   Bestellung — verzögert nie die Antwort an die Kundschaft und kann eine Bestellung
   niemals zum Scheitern bringen, selbst wenn der Versand fehlschlägt (mit ungültigem
   Testschlüssel verifiziert: Bestellung bleibt trotzdem erfolgreich gespeichert). Wird
   automatisch aktiv, sobald ein RESEND_API_KEY als Secret hinterlegt wird.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:16:38 +02:00
qciganoandClaude Sonnet 5 0c1c8f075f Versandfreigrenze pro Land, USt-ID, Rechtstexte+FAQ jetzt admin-editierbar
1) Versandkostenfreigrenze ist jetzt länderabhängig statt einer einzigen Zahl für alle:
   Deutschland 75 €, Österreich/Luxemburg 85 €, Schweiz 100 € (im Adminbereich unter
   "Versandkosten-Staffel" änderbar). Betrifft Warenkorb (live je nach gewähltem Land),
   Checkout-Berechnung, sowie alle Text-Hinweise (Topbar, FAQ, AGB) in allen 4 Sprachen.

2) Neues Feld "USt-IdNr." im Impressum (optional, admin-editierbar) — erscheint nur, wenn
   ausgefüllt.

3) Impressum, AGB, Datenschutzerklärung, Widerrufsbelehrung und FAQ sind jetzt vollständig
   im Adminbereich editierbar (neue Collection "⚖️ Rechtstexte & FAQ") statt fest im Code zu
   stehen. Jede Rechtsseite besteht aus frei bearbeitbaren Abschnitten (Überschrift + Text) —
   VanVan kann selbst Abschnitte ergänzen, ändern oder löschen. Freitext wird beim Anzeigen
   sicher escaped (kein kaputtes HTML durch Tippfehler möglich) und nackte Links automatisch
   klickbar gemacht. FAQ bleibt dabei weiterhin in allen 4 Sprachen separat pflegbar.

Ausführlich getestet: Freigrenze pro Land im echten Warenkorb verifiziert (Puppeteer,
84€ Warenwert -> DE kostenlos, AT/LU "noch 1€", CH "noch 16€"), Rechtstexte/FAQ/USt-ID
gegen den fertigen Build geprüft, EU-Streitschlichtung-Link-Bug (Satzzeichen wurde
mitverlinkt) gefunden und behoben.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 22:04:01 +02:00
qciganoandClaude Sonnet 5 9a2c75ebe6 Bestellverwaltung radikal ausgebaut: Suche, Zeitraum, Sortierung, PDF, u.v.m.
Auf ausdrücklichen Wunsch ("perfektioniere diese Seite aufs Maximum") die interne
Verwaltungsseite um alles erweitert, was ein echtes kleines Shop-Team im Alltag
braucht, aber vorher fehlte:

- Suchfeld (Bestellnummer/Name/E-Mail), Zeitraum-Filter (Heute/7/30 Tage), vier
  Sortiermodi — alle gleichzeitig mit dem bestehenden Status-Filter kombinierbar.
- CSV-Export der aktuell gefilterten Liste (für Buchhaltung/Steuer, Excel-taugliche
  UTF-8-Kodierung mit BOM).
- Tracking-Nummer direkt in der Bestellkarte editierbar (Enter oder Speichern-Knopf).
- Ein-Klick-Kopieren von E-Mail/Lieferadresse fürs Versandlabel.
- Echte PDF-Rechnung pro Bestellung per Klick (nutzt dieselbe jsPDF-Funktion wie im
  Kundenkonto, keine neue Abhängigkeit).
- Zwei neue Kennzahlen-Kacheln (Bestellungen heute/letzte 7 Tage, Ø Bestellwert) plus
  eine automatisch erscheinende Warn-Kachel für offene Bestellungen, die schon länger
  liegen (Schwelle 3 Tage) — sowohl als Kachel als auch als Warn-Chip direkt an der
  betroffenen Bestellung.
- "🆕 Neu"- und "🔁 Stammkundin"-Kennzeichnung pro Bestellung, neuer Abschnitt "Beste
  Kundinnen" (Umsatz nach wiederkehrender Kundschaft).
- Dezenter Hintergrund-Hinweis ("🔔 X neue Bestellungen"), wenn während des Arbeitens
  neue Bestellungen eingehen — unterbricht die aktuelle Ansicht/Filterung nicht.
- Neuer, deutlich premiumerer Seitenkopf (Farbverlauf-Rand, Funkeln) passend zum Rest
  der Seite.

Alle neuen Funktionen einzeln end-to-end gegen die echte lokale D1-Datenbank getestet
(Suche, Zeitraum, Sortierung, Tracking-Speichern, Kopieren, PDF-Erzeugung, Warn-/Neu-/
Stammkunden-Kennzeichnung) — keine Konsolenfehler, Screenshot-verifiziert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 21:36:52 +02:00
qciganoandClaude Sonnet 5 7f7abd4d80 Konto-Dropdown: "Mein Konto"/"Abmelden" zentriert statt linksbündig
Auf Screenshot-Feedback: die beiden Menüpunkte im Konto-Dropdown sollen zentriert stehen statt
am linken Rand der Box zu kleben.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 21:27:20 +02:00
qciganoandClaude Sonnet 5 fb7a7b76c2 Echtes Bestellsystem: Cloudflare D1 statt Beispieldaten in der Verwaltung
Ersetzt die Phase-1-Beispieldaten in /verwaltung/ durch ein echtes, funktionierendes
Bestellsystem:

- Neue D1-Datenbank (vans-diy-bastelbedarf-db) mit orders/order_items-Tabellen,
  an das Pages-Projekt gebunden (wrangler.toml).
- Neue API-Routen (Pages Functions): POST /api/orders legt beim Checkout eine echte
  Bestellung an (mit Validierung); GET/PATCH /api/verwaltung/orders(/:id) listen bzw.
  ändern Bestellungen — beide zusätzlich zur Middleware nochmal eigenständig gegen die
  Zugangscode-Sitzung geprüft (Verteidigung in der Tiefe). Gemeinsame Auth-Logik aus
  _middleware.js nach functions/_shared/auth.js ausgelagert.
- Checkout (4 Sprachen) sendet beim Absenden die echte Bestellung an die API, zeigt bei
  einem Fehler eine klare Meldung statt einfach auf die Danke-Seite weiterzuleiten.
- /verwaltung/ lädt Bestellungen jetzt live per fetch(), mit Lade-/Fehlerzustand, und
  erlaubt direktes Ändern des Bestellstatus per Dropdown (sofort in der Datenbank
  gespeichert). Neuer Status "storniert" (zählt nicht in Umsatz/Auswertung mit).

Vollständig lokal end-to-end getestet (wrangler pages dev + lokale D1): echter
Browser-Checkout -> Bestellung landet in der Datenbank -> erscheint sofort in der
Verwaltung -> Status ändern bleibt nach Neuladen bestehen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 20:32:46 +02:00
qciganoandClaude Sonnet 5 9170b9bb22 Treuebonus-Karte deutlich detaillierter: Meilensteine, Kennzahlen, Regeln
Die Treuebonus-Karte im Konto zeigte bisher nur einen nackten Fortschrittsbalken
mit einem Satz Text. Jetzt: (1) zehn Meilenstein-Striche direkt im Balken plus
Geschenk-Symbol am Ziel, (2) vier Kennzahl-Kacheln im gleichen Stil wie beim Abo-
Status (Gesammelt, Noch nötig, Bonus bei Ziel, Bisher eingelöst), (3) ein neues
Datenfeld "wie oft insgesamt schon eingelöst + wann zuletzt" (account.ts), das in
einer eigenen, gold→grün abgewandelten "Bonus bereit"-Karte mit Glow-Effekt landet
statt eines einfachen Links, (4) eine kurze Icon-Liste mit den Sammelregeln statt
einem einzelnen Erklärsatz. Alles in 4 Sprachen, mit echten Vorschau-Zuständen
(Fortschritt/bereit/gesperrt) per Screenshot verifiziert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 20:14:29 +02:00
qciganoandClaude Sonnet 5 5c1ebfac60 Treuebonus-Funkeln im gleichen besonderen Stil wie Abo, aber eigene Farbe
Treuebonus-Kiste im Konto-Dashboard bekam bisher das normale kleine  wie
Bestellungen/Sendungen/Wunschliste. Jetzt nutzt sie denselben großen, kräftig
pulsierenden 🌟-Stern wie die Abo-Kiste (4 Sprachen). Die CSS-Regel dafür gilt
jetzt für beide Kisten gemeinsam und färbt den Glanz automatisch in der jeweils
eigenen --nav-color ein (Abo = Gold, Treuebonus = Grün) statt eines fest codierten
Goldtons — Stil bleibt identisch, nur die Farbe unterscheidet die beiden klar.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 19:58:58 +02:00
qciganoandClaude Sonnet 5 b888e682d8 Musik-Button (Van-Van Spotify) unten rechts, seitenweit persistent + Chamäleon-Farben
Vorschau-Umschalter (🎭) nach unten links verschoben, damit unten rechts Platz für
den neuen Musik-Button ist. Astro ClientRouter (View Transitions) eingeführt, damit
der Spotify-Player beim Seitenwechsel als echtes, unverändertes DOM-Element bestehen
bleibt (transition:persist) statt neu zu laden — die Musik läuft beim Weiterklicken
einfach weiter. Der Button-Farbverlauf passt sich per Canvas-Farbanalyse an das
Hauptbild der jeweiligen Seite an, mit einem seiten-spezifischen Fallback-Farbpaar
für bildlose Seiten (Warenkorb, Rechtstexte, ...).

Da Astro Skripte bei Client-seitigen Übergängen nicht automatisch neu ausführt, musste
das komplette Header-Skript (Warenkorb-Zähler, Konto-Menü, Hamburger, Installations-
Button) auf das "astro:page-load"-Ereignis umgestellt werden; echte Dauer-Listener
(document/window) wurden dabei bewusst nur einmal registriert, um Duplikate bei jeder
Navigation zu vermeiden. Ausführlich mit einem headless-Chrome-Testskript verifiziert:
Iframe-Persistenz über mehrere Navigationen hinweg, keine doppelten Klick-Listener,
keine Konsolenfehler.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 19:50:02 +02:00
qciganoandClaude Sonnet 5 d3efaf8aba Interne Bestellverwaltung mit Status-Übersicht + Auswertung (/verwaltung/)
Neue Seite, dauerhaft nur für qciga/vanvan sichtbar (functions/_middleware.js
schützt /verwaltung/* jetzt IMMER — unabhängig vom SITE_PUBLIC-Schalter, mit
dem der Rest der Seite später öffentlich geschaltet wird):

- Status-Kacheln: Offen / In Bearbeitung / Versendet / Abgeschlossen (klickbar
  als Filter) + Gesamtumsatz-Kachel
- Filterbare Bestellliste (nutzt dieselben Status-Badges/-Farben wie die
  Kunden-Kontoseite)
- Auswertung "Meistverkaufte Produkte je Kategorie" (Balken nach verkaufter
  Menge, aus den echten Produktdaten berechnet)
- Auswertung "Bestellungen nach Land" (DE/AT/CH/LU, Balken + Prozent)

Wie an anderer Stelle im Projekt: es gibt noch keine echte, geräteüber-
greifende Bestell-Datenbank (Phase 1) — die Seite zeigt realistische
Beispieldaten in exakt der Struktur, die echte Bestellungen später haben
werden (Cloudflare Worker + D1), klar als solche gekennzeichnet.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 19:27:21 +02:00
qciganoandClaude Sonnet 5 533724654a Gate-Seite: echtes Van's-Logo als riesiges Wasserzeichen im Hintergrund
Das Rund-Logo (schwarze Linien auf weißem Grund) wird per invert()+
mix-blend-mode:screen so eingefärbt, dass der weiße Kreis komplett
verschwindet und nur die Linienzeichnung als dezentes, leicht leuchtendes
Wasserzeichen übrig bleibt — kein Bildbearbeitungsprogramm nötig, rein CSS.
Riesig, zentriert, sehr langsam rotierend für einen dezenten Lebendig-Effekt.
Dazu ein wanderndes Glanzlicht auf der Zugangscode-Karte selbst, passend zum
Rest der Seite.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 19:10:35 +02:00
qciganoandClaude Sonnet 5 8bb1bb8949 Nav-Kacheln: Funkeln leuchtet jetzt farblich passend zur jeweiligen Kiste
Die kleinen -Sternchen oben rechts in den Kontobereich-Kacheln waren
bisher überall neutral-gelb, unabhängig von der Kistenfarbe. Jetzt bekommt
jedes Funkeln einen farbigen Schein passend zur eigenen Akzentfarbe der
Kiste (Lila/Teal/Pink/Grün/Gold).

Das Abo-Funkeln sticht zusätzlich klar heraus: eigener goldener Stern (🌟
statt ), größer, kräftiger und schneller leuchtend — soll dem Premium-
Charakter des Abos gerecht werden und auf den ersten Blick auffallen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 18:59:16 +02:00
qciganoandClaude Sonnet 5 ad07584906 Eigene Zugangscode-Schranke statt Cloudflare Access — löst VanVans Login-Problem
Ersetzt die (fehlerhaft auf die GANZE Domain wirkende) Cloudflare-Zero-
Trust-Access-Sperre durch eine eigene, schlanke Lösung nach dem bewährten
Vorbild von "Dogfather Universe": eine Pages-Functions-Middleware
(functions/_middleware.js) prüft bei jeder Anfrage ein HMAC-signiertes
Session-Cookie; ohne gültiges Cookie geht's zu public/gate.html (im Van's-
Design), wo ein Zugangscode eingegeben wird. Zwei getrennte Codes für qciga
und VanVan, 90 Tage gültig, danach neu eingeben. /admin/* ist komplett
ausgenommen — läuft weiter über das echte GitHub-OAuth-Login, das für
VanVan schon funktioniert.

Bonus: die drei separaten Vorschau-Seiten (demo-normal/demo-konto/demo-abo)
sind jetzt überflüssig und entfernt. Stattdessen gibt's ein schwebendes
Umschalter-Widget (Layout.astro), das NUR sichtbar ist, wenn das Gate-Cookie
vorhanden ist (also nur für uns beide) — auf jeder beliebigen Seite kann
per Knopfdruck zwischen "Normaler Besucher", "Angemeldete Kundin" und
"Abonnentin" gewechselt werden, ohne die Seite verlassen zu müssen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 18:55:44 +02:00
qciganoandClaude Sonnet 5 6b1920dfb3 Admin-CMS: Abo-System-Bereich unter Partner-Rabattcodes einsortiert
Reihenfolge im Adminbereich jetzt: ... Gutscheine, Partner-Rabattcodes,
Abo-System, Bankverbindung (statt Bankverbindung vor Abo-System).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 18:38:35 +02:00
qciganoandClaude Sonnet 5 3d06c5379e Zwei weitere interne Vorschau-Seiten: normale und angemeldete Ansicht
Ergänzt /demo-abo/ (bereits vorhanden) um:
- /demo-normal/ — Shop wie ein nicht angemeldeter Besucher ihn sieht (räumt
  ein evtl. simuliertes Konto im Browser vorher auf)
- /demo-konto/ — Kundenkonto einer angemeldeten Person OHNE Abo (Treuebonus
  dadurch im gesperrten Zustand zu sehen)

Damit gibt es jetzt für jede Sicht einen eigenen Link. Beide noindex + aus
der Sitemap ausgeschlossen, wie /demo-abo/.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 18:23:27 +02:00
qciganoandClaude Sonnet 5 25055d9345 Konto-Dropdown: Menüpunkte sauber ausgerichtet statt schiefem Emoji-Versatz
"Mein Konto" und "Abmelden" starteten je nach Breite des Emojis (👤 vs 🚪)
an leicht unterschiedlichen Stellen. Jetzt echtes Flex-Layout mit fester
Icon-Spalte (1.2em, zentriert) — beide Labels stehen exakt untereinander.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:52:32 +02:00
qciganoandClaude Sonnet 5 2c6d4dedae Abo-Bereich visuell auf Premium-Niveau gehoben
Plan-Karten: eigenes Icon je Stufe (🌱/🌿/👑), Rabatt als farbiger Chip statt
reinem Fließtext, Prämien-Intervalle als eigene Chips (aus den admin-
konfigurierten Werten berechnet), Preis mit Farbverlauf, sanft pulsierender
Rahmen für die aktuell gebuchte Stufe.

Abo-Status: Tabelle durch ein Stat-Kachel-Raster ersetzt (Icon + Label + Wert
pro Kennzahl, Rabatt farblich hervorgehoben), echte Fortschrittsbalken statt
Text für den Weg zum nächsten Teddy (Prozent aus dem admin-konfigurierten
Intervall berechnet), "Bereits erhalten" als Badge-Chip, verfügbare Prämien
als eigene, leicht glühende Karten statt schlichter Buttons.

Benachrichtigungen: farbiger Icon-Kreis pro Ereignistyp (Erfolg/Prämie/
Warnung/Abbruch/Info) statt einheitlicher grauer Liste — auf einen Blick
erkennbar, worum es bei jedem Eintrag geht.

Alles in 4 Sprachen (DE/EN/CH/FR), neues i18n-Template aboRewardEveryLabel
für die Prämien-Intervall-Chips.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:49:24 +02:00
qciganoandClaude Sonnet 5 28ded7faae Sprach- und Konto-Dropdown öffnen jetzt automatisch beim Drüberfahren
Bisher musste man auf "Deutsch ▾" bzw. das Konto-Menü in der Kopfzeile klicken,
damit sich das Untermenü öffnet. Jetzt reicht auf dem Desktop einfaches
Drüberfahren mit der Maus (mit kurzer Schließverzögerung beim Verlassen,
damit der Wechsel vom Button zum Menü nicht sofort wieder zuklappt) — Klick
funktioniert als Fallback für Touch-Geräte/Tastatur weiterhin ganz normal.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:37:51 +02:00
qciganoandClaude Sonnet 5 fec6626d1a Interne Vorschau-Seite /demo-abo/ für Konto mit aktivem Abo
Neue, nicht verlinkte Seite (noindex, aus der Sitemap ausgeschlossen), die
beim Aufruf ein Demo-Konto mit aktivem "Großes Abo" (14 bezahlte Monate,
verfügbare + bereits eingelöste Teddy-Prämien, mehrere Benachrichtigungen,
laufender Treuebonus-Fortschritt) ins localStorage DES AUFRUFENDEN BROWSERS
schreibt und direkt zum Abo-Tab im Kundenkonto weiterleitet — ändert nichts
an echten Kundendaten, jede Person sieht die Vorschau nur bei sich selbst.

Dafür neu: Layout.astro bekommt eine noindex-Prop, und die Kontoseite
unterstützt jetzt Deep-Links per URL-Hash (#abo, #treuebonus, …), damit die
Vorschau direkt im richtigen Tab landet.

Separat per `wrangler pages deploy --branch=vorschau-abo` auf eine eigene
Vorschau-URL deployed (vorschau-abo.vans-diy-bastelbedarf.pages.dev) —
komplett getrennt von der normalen Produktions-URL, wird nicht durch den
GitHub-Actions-Workflow (nur branch=main) überschrieben.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:34:06 +02:00
qciganoandClaude Sonnet 5 380a32db87 Abo-Benachrichtigungen: informativer Leerzustand statt "Noch keine Benachrichtigungen."
Erklärt jetzt direkt, was in dieser Liste erscheinen wird (Zahlungen, neue
Teddy-Prämien, Stufenwechsel), statt nur eine leere Aussage zu zeigen — in
allen 4 Sprachen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:28:11 +02:00
qciganoandClaude Sonnet 5 902516753d Treuebonus nur noch mit aktivem Abo nutzbar
Der Treuebonus (10 Bestellungen → 20% Rabatt) sammelt jetzt nur noch, solange
ein aktives, bezahltes Abo besteht — ohne Abo bleibt der Fortschritt einfach
stehen, statt weiterzuzählen (account.ts: registriereAbgeschlosseneBestellung()).
Ebenso greift ein bereits freigeschalteter Rabatt im Warenkorb/Checkout nur,
solange das Abo aktiv ist (cart.ts: treuebonusDiscount()).

Im Kundenkonto wird die Treuebonus-Karte ohne aktives Abo nicht einfach
ausgeblendet, sondern zeigt bewusst einen einladenden gesperrten Zustand
("🔒 Nur mit aktivem Abo verfügbar" + Button "Zum Abo →") statt der üblichen
Fortschrittsanzeige — soll als klarer Anreiz fürs Abo wirken, nicht als totes
Feature. Dieselbe Sperre greift auch im Warenkorb: das Auswahl-Radio/Badge für
den Treuebonus-Artikel erscheint nur noch bei tatsächlich aktivem Abo, damit
nie ein Rabatt suggeriert wird, der beim Checkout dann doch nicht greift.

Alles in 4 Sprachen (DE/EN/CH/FR).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:23:41 +02:00
qciganoandClaude Sonnet 5 64110484de Konto-Kopfkarte: "Meine Daten"-Button statt Abo-Button
Der "Mein Abo verwalten"-Button in der Kopfkarte fällt wieder weg — der
Zugriff aufs Abo läuft ab jetzt nur noch über die eigene "Mein Abo"-Nav-
Kachel. Stattdessen wandert "Meine Daten" aus der Schnellnavigation direkt
in die Kopfkarte: ein neuer, gleich premium gestylter Button (Teal/Lila statt
Gold, gleiches wanderndes Glanzlicht) unten rechts in der Karte, der zum
Profil-Bereich springt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:11:20 +02:00
qciganoandClaude Sonnet 5 a222d6c96e Abo-System: VanVan kann jetzt wirklich alles im Admin einstellen
Bisher waren nur Preis, Rabatt-% und ein paar Verhaltensregeln im CMS
editierbar — Namen, Vorteilstexte und die Teddy-Vergabe-Intervalle steckten
fest im Code. Jetzt ist pro Abo-Stufe (Klein/Mittel/Groß) direkt im
Adminbereich einstellbar:

- Name & Vorteilstext der Stufe, in allen 4 Sprachen einzeln
- Ob die Stufe aktuell überhaupt neu buchbar ist (bestehende Abonnent:innen
  behalten ihre Vorteile trotzdem, im Kundenkonto wird die Stufe nur für neue
  Buchungen ausgegraut mit "Derzeit nicht buchbar")
- Nach wie vielen Monaten es den kleinen/großen Teddy gibt (ersetzt die vorher
  fest verankerten 6-/12-Monats-Abstände)
- Welches Produkt als "kleiner"/"großer" Teddy für die Prämien-Einlösung
  verwendet wird (Produktauswahl statt festem Slug im Code)

Alle Berechnungen (Meilensteine, Fortschrittsanzeige) laufen jetzt komplett
über diese Admin-Werte statt über Konstanten im Code. Konto-Plan-Karten in
allen 4 Sprachen zeigen die admin-gepflegten Texte live an.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 17:03:28 +02:00
qciganoandClaude Sonnet 5 208d995941 Abosystem mit dauerhaften Rabatten und Teddy-Prämien
Drei Mitgliedschaftsstufen (Klein 4,99€/5%, Mittel 9,99€/10%, Groß 19,99€/20%)
mit automatischem Bestellrabatt und Teddy-Prämien nach Meilensteinen (12-Monats-
Rhythmus bzw. 6+12 bei Groß). Preise/Rabatte und alle Admin-Regeln (Kombinier-
barkeit mit anderen Rabatten, Fortsetzung bei Wiederanmeldung, Monate über
Stufen zusammenzählen, kostenloser Versand bei Prämie) sind über Decap CMS
einstellbar (src/content/abo-einstellungen.json).

Neuer "Mein Abo"-Bereich im Kundenkonto (6. Nav-Kachel) mit Plan-Vergleich,
Live-Status (Laufzeit, nächste Zahlung, Rabatt, Fortschritt bis zur nächsten
Prämie), Einlösen-Buttons für freigeschaltete Teddys, Kündigen/Wechseln sowie
einer übersetzten Benachrichtigungsliste. Dazu ein extra hervorgehobener
"Mein Abo verwalten"-Button neben Abmelden in der Kopfkarte.

Warenkorb/Checkout rechnen den Abo-Rabatt korrekt in die Summe ein und stellen
eingelöste Teddys als 0€-Gratisposition dar. Alles in 4 Sprachen (DE/EN/CH/FR).

Unterwegs zwei echte Bugs gefunden und behoben: addMonateISO() vermischte
lokale Zeit mit toISOString() (UTC) und verlor dadurch bei jeder Monats-
verlängerung reproduzierbar einen Tag; die Checkout-Positionsliste zeigte für
Gratis-Prämien fälschlich den vollen Preis statt 0€.

Wie beim Treuebonus gilt: Speicherung aktuell im localStorage des Geräts
(Phase 1) statt einer echten geräteübergreifenden Datenbank — folgt mit der
Zahlungsanbindung in Phase 2.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 16:54:25 +02:00
qciganoandClaude Sonnet 5 0cb7d3ca65 Treuebonus-System: 10 abgeschlossene Bestellungen = 20% Rabatt auf einen frei wählbaren Artikel
Neue eigene Kiste "Treuebonus" im Kundenkonto (5. Nav-Tab, grüner Akzent)
zeigt den Fortschritt ("X von 10 Bestellungen") mit Fortschrittsbalken und
Restanzahl-Hinweis, nach Freischaltung eine Erfolgsmeldung mit Link zum
Warenkorb. Es zählen ausschließlich erfolgreich abgeschickte, bezahlte
Bestellungen (in Phase 1: jede erfolgreich abgeschlossene Demo-Bestellung
im Checkout) — abgebrochene Bestellungen zählen nie mit.

Sobald der Bonus aktiv ist, erscheint im Warenkorb ein Hinweis-Banner und
bei jedem Artikel eine Auswahl ("Für 20% Treuebonus auswählen") — es kann
immer nur EIN Artikel gewählt werden (Radiobutton-Verhalten über alle
Positionen hinweg). Der Rabatt fließt automatisch in Warenkorb- und
Checkout-Summe ein (neue treuebonusDiscount()-Funktion in scripts/cart.ts,
in totalDiscount() eingerechnet). Nach erfolgreichem Bestellabschluss wird
die Belohnung als eingelöst markiert und der Fortschrittszähler beginnt
wieder bei 0 — beides dauerhaft im Konto (localStorage, Phase 1) gespeichert
und eindeutig diesem Kundenkonto zugeordnet.

Neue Funktionen in scripts/account.ts: registriereAbgeschlosseneBestellung(),
setTreuebonusArtikel(), treuebonusEinloesen(), treueFortschritt(). Beide
Zustandsübergänge (Fortschritt zählen vs. Belohnung einlösen) end-to-end
über den echten Checkout-Ablauf getestet und verifiziert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 15:03:48 +02:00
qciganoandClaude Sonnet 5 d7ba1b9bff Konto: echte "Rechnung downloaden"-Funktion neben "Rechnung ansehen"
Neuer Button lädt die Rechnung als echte PDF-Datei herunter — komplett
clientseitig mit jsPDF + jspdf-autotable (beide MIT-lizenziert, per
dynamic import erst beim Klick nachgeladen, kein Einfluss auf die normale
Seitenladezeit). Zeigt exakt dieselben Daten wie der "Rechnung ansehen"-
Dialog (Rechnungsnummer/-datum, Verkäufer, Empfänger, Artikeltabelle,
Gesamtbetrag, §19-UStG-Hinweis), sauber formatiert mit Kopfzeile, zwei
Spalten für Verkäufer/Empfänger und einer echten Tabelle. Datei heißt
"Rechnung-<Bestellnummer>.pdf". Mit Node-Testskript verifiziert, dass die
PDF-Erzeugung fehlerfrei ein valides PDF mit korrekten Umlauten liefert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 14:34:21 +02:00
qciganoandClaude Sonnet 5 e523d6f0e5 Kundenkonto: einheitlicher "premium" Look für alle Kisten + größerer Avatar
Größeres Profilbild in der "Mein Konto"-Karte. Alle vier Navigations-
Knöpfe (Bestellungen/Offene Sendungen/Wunschliste/Meine Daten) haben jetzt
denselben besonderen Stil wie vorher nur "Meine Daten": wanderndes Verlaufs-
licht in der eigenen Akzentfarbe, pulsierender Glanzrand, funkelndes
Sternchen und Farbverlauf-Text — nur die Farbe unterscheidet sich pro
Knopf. Der "Meine Daten"-Inhaltsbereich (Profilkarte) bekommt dieselbe
"mega besondere" Behandlung wie die Begrüßungs-Karte (wandernder Verlaufs-
rand, Farbschein, Glanz-Sweep, Sternchen). Bestellkarten bekommen einen
passenden dezenten Glanz-Sweep und pulsierenden Schein in ihrer Status-
farbe für ein stimmigeres Gesamtbild.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 14:20:17 +02:00
qciganoandClaude Sonnet 5 8873c5e8eb Konto-Navigation: Bestellungen-Zahl zählt jetzt nur angekommene Bestellungen
Die Zahl im "Bestellungen"-Kasten zeigte bisher alle Bestellungen, obwohl
der Tab selbst nur die angekommenen anzeigt. Jetzt stimmen Zahl und Liste
überein. "Offene Sendungen" zählt entsprechend alles, was noch nicht
abgeschlossen ist (nicht nur "versendet"), passend zum Tab-Filter.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 14:12:31 +02:00
qciganoandClaude Sonnet 5 e2a19db663 Konto: Rechnung direkt auf der Seite ansehen statt nur Download-Platzhalter
Der bisherige "Rechnung (PDF)"-Knopf war ein toter Link (href="#"). Jetzt
öffnet "Rechnung ansehen" pro Bestellung ein natives Dialog-Fenster direkt
auf der Seite mit vollständiger Rechnung: Rechnungsnummer/-datum,
Verkäufer, Rechnungsempfänger (live mit dem aktuellen Kontonamen befüllt),
Artikeltabelle mit Einzel-/Gesamtpreisen und dem §19-UStG-Hinweis — kein
Herunterladen nötig, schließbar per Kreuz, Schließen-Knopf oder Klick auf
den abgedunkelten Hintergrund.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 14:10:25 +02:00
qciganoandClaude Sonnet 5 fac404190f Begrüßungs-Karte im Kundenkonto besonders gestaltet
Wandernder Mehrfarb-Verlaufsrand, sanfter Farbschein im Hintergrund, ein
Glanz-Sweep, der regelmäßig durchläuft, ein pulsierender Leucht-Ring um
den Avatar und zwei funkelnde -Sternchen — dieselbe Formsprache wie beim
"Meine Daten"-Knopf, nur größer und ruhiger für gute Lesbarkeit.
Respektiert prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 14:02:28 +02:00
qciganoandClaude Sonnet 5 57183825a0 Konto: "Meine Bestellungen"-Tab zeigt jetzt nur angekommene Bestellungen
Bisher zeigte der Bestellungen-Tab ALLE Bestellungen (Überschneidung mit
"Offene Sendungen"). Jetzt ist es eine echte Trennung: "Bestellungen"
zeigt nur bereits angekommene/abgeschlossene, "Offene Sendungen" nur die
noch nicht angekommenen. Eigene Leermeldung, falls noch keine Bestellung
angekommen ist.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:59:03 +02:00
qciganoandClaude Sonnet 5 5434801dda Konto: Name jetzt fest wie E-Mail/Lieferadresse, nur Benutzername änderbar
Der echte Name war bisher versehentlich ebenfalls editierbar. Jetzt steht
er als reine Anzeige in derselben Tabelle wie E-Mail und Lieferadresse —
änderbar bleibt ausschließlich der optionale Benutzername (Spitzname).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:56:00 +02:00
qciganoandClaude Sonnet 5 279960b950 Konto-Navigation: Reihenfolge "Offene Sendungen" vor "Wunschliste" getauscht
Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:49:23 +02:00
qciganoandClaude Sonnet 5 11d6f6c6e4 "Meine Daten"-Knopf im Kontobereich besonders gestaltet
Sanft wanderndes Mehrfarb-Verlaufslicht im Hintergrund, pulsierender
Glanzrand, funkelndes -Sternchen und ein Farbverlauf-Text — hebt sich
jetzt deutlich von den anderen drei Knöpfen ab, ohne kitschig zu wirken.
Respektiert prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:45:49 +02:00
qciganoandClaude Sonnet 5 f8864b39da Konto-Dashboard: kein Tab beim Laden aktiv, "Meine Daten" jetzt auch ein Tab
Bisher war "Bestellungen" beim Öffnen der Seite automatisch aktiv. Jetzt
ist standardmäßig KEIN Knopf gedrückt — man muss selbst auswählen, was man
sehen möchte. Solange nichts angeklickt ist, steht direkt "Zuletzt
angesehen" da. "Meine Daten" ist jetzt ein vierter, gleichwertiger Tab-
Knopf (👤, goldener Akzent) statt permanent sichtbar — genau wie
Bestellungen/Wunschliste/Offene Sendungen erscheint das Profilformular
erst nach Klick.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:40:10 +02:00
qciganoandClaude Sonnet 5 b5be6e0e61 Konto-Navigation: Klick zeigt jetzt wirklich NUR den passenden Bereich
Die Schnellnav-Leiste sprang bisher nur zum Abschnitt (der Rest blieb
sichtbar). Jetzt sind es echte Filter-Tabs: Klick auf "Bestellungen" /
"Wunschliste" / "Offene Sendungen" blendet alle anderen Bereiche komplett
aus und zeigt nur den ausgewählten. "Offene Sendungen" filtert zusätzlich
innerhalb der Bestellungen auf noch nicht abgeschlossene. Der aktive Tab
bleibt farbig hinterlegt und unterstrichen erkennbar. Start-Ansicht:
Bestellungen-Tab aktiv.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:33:31 +02:00
qciganoandClaude Sonnet 5 fd7b5f4ea5 Konto: Benutzername (Spitzname) im Profil über dem echten Namen anzeigen
Reihenfolge im "Meine Daten"-Formular getauscht, wie gewünscht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:27:44 +02:00
qciganoandClaude Sonnet 5 4b78ebb270 Konto-Dashboard: Statistik-Kästchen zu klickbarer Schnellnavigations-Leiste
Die drei losen "Bestellungen/Wunschliste/Offene Sendungen"-Kästchen waren
nur Zahlen ohne Verbindung zu den Abschnitten weiter unten. Jetzt sind sie
eine zusammenhängende Leiste direkt über "Meine Bestellungen" — jedes
Segment ist ein echter Sprunglink zum passenden Abschnitt (📦 Bestellungen,
🩵 Wunschliste, 🚚 Offene Sendungen), mit eigener Akzentfarbe je Segment und
einem Hover-Unterstrich, der die Klickbarkeit deutlich macht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:25:38 +02:00
qciganoandClaude Sonnet 5 3c0747eb5b Bestellstatus im Kundenkonto deutlich sichtbar unterscheiden (unterwegs vs. angekommen)
Bisher unterschied sich der Status nur durch eine kleine, ähnlich gefärbte
Pille — auf einen Blick kaum zu erkennen. Jetzt bekommt jede Bestellkarte
einen eigenen farbigen Rand plus dezenten Farbschein passend zum Status
(Blau = versendet/unterwegs, Grün = abgeschlossen/angekommen, Gold = in
Bearbeitung/Versand wird vorbereitet, Violett = bezahlt), zusätzlich ein
Icon direkt in der Status-Pille (🚚 unterwegs,  angekommen, usw.) — genau
wie schon bei den Zahlungskarten im Checkout.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:19:52 +02:00
qciganoandClaude Sonnet 5 5b14630986 Konto: echter Name jetzt getrennt vom optionalen Benutzernamen (Spitzname)
Bisher gab es nur ein "Benutzername"-Feld, das überall (Begrüßung, Header,
Rezensionen) angezeigt wurde. Jetzt gibt es zwei getrennte Felder: einen
festen "Name" (Pflichtangabe, z.B. für Bestellungen) und einen optionalen
"Benutzername (Spitzname)" als Bonus, falls man lieber mit einem Spitznamen
statt dem echten Namen angezeigt werden möchte.

Überall, wo bisher nur der Benutzername angezeigt wurde (Header-Konto-Menü,
Begrüßung im Dashboard, Rezensions-Autorenname, "angemeldet als"-Hinweis),
gilt jetzt: Spitzname bevorzugt, sonst echter Name als Rückfalloption
(neue anzeigeName()-Hilfsfunktion in scripts/account.ts).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 13:16:04 +02:00
qciganoandClaude Sonnet 5 7549ec239b Zahlungskarten im Checkout kräftiger/edler gestaltet
Jede Zahlungsart-Karte hat jetzt einen deutlich sichtbaren Farbschein in
der jeweiligen Markenfarbe (auch im Ruhezustand, nicht erst bei Hover),
einen feinen Farbstreifen am oberen Rand und einen dezenten Glanz-Sweep
beim Hover — wirkt hochwertiger/"geiler", bleibt aber gedeckt genug fürs
dunkle Gesamtdesign. Kreditkarte (Visa/Mastercard) bekommt einen eigenen
Gold-Akzent statt der bisherigen, kaum sichtbaren Farbe.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 12:48:20 +02:00
qciganoandClaude Sonnet 5 c9a9370039 Checkout & Login: echte Markenlogos statt Platzhaltern, Vorschau-Link fürs Kundenkonto
Nach Recherche zu den Markenrichtlinien von PayPal, Klarna, Visa und
Mastercard: Zahlungsoptionen im Checkout zeigen jetzt echte Markenlogos in
den offiziellen Farben (PayPal- und Klarna-Icon, Visa-Wortmarke auf Weiß,
Mastercard-Kreise in Rot/Orange unverändert nebeneinander) statt grober
Buchstaben-/Emoji-Platzhalter — genau die Verwendung, die die jeweiligen
Markenrichtlinien für die Kennzeichnung akzeptierter Zahlungsarten
vorsehen. Dieselbe PayPal-Grafik jetzt auch beim Social-Login auf der
Anmeldeseite statt eines schlichten "P".

Zusätzlich: Ein Vorschau-Link auf der Anmeldeseite meldet mit einem Demo-
Konto an und führt direkt zum Kundenbereich-Dashboard — bleibt dauerhaft
erreichbar, damit VanVan und wir jederzeit sehen können, wie der Bereich
für angemeldete Kund:innen aussieht, ohne das Formular jedes Mal
auszufüllen.

Der Phase-1-Demo-Hinweis auf Checkout- und Anmeldeseite steht jetzt am
Ende der Seite statt direkt unter der Überschrift, damit zuerst der
fertige, professionelle Eindruck zählt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 11:41:03 +02:00
qciganoandClaude Sonnet 5 ab3bf675b9 Login-Seite professionalisiert: Social-Login-Optionen, Passwort-Toggle, DSGVO-Hinweis
Nach Recherche zu üblichen Anmelde-Standards bei deutschen Online-Shops:
Ergänzt Social-Login-Buttons für Google, Apple und PayPal (PayPal explizit
wegen seiner Marktdominanz bei Zahlungen in DE/DACH), da Social Login
Registrierung/Login deutlich beschleunigt und laut Studien die Conversion
spürbar erhöht. Die Buttons sind noch nicht funktional (kein OAuth ohne
eigenes Backend) — ein Klick zeigt stattdessen ehrlich einen Phase-2-
Hinweis, statt eine Anmeldung vorzutäuschen.

Zusätzlich: Passwort-Sichtbarkeits-Toggle (Augen-Icon, eine der
wirkungsvollsten Login-UX-Verbesserungen laut UX-Recherche), "Angemeldet
bleiben"-Checkbox, sowie ein DSGVO-konformer Hinweis mit Link zur
Datenschutzerklärung unterhalb des Formulars. Gastbestellung ("Neu hier?")
war als gleichwertige Alternative schon vorhanden und bleibt bestehen —
Gastbestellung gilt laut EDPB-Empfehlung als Standard neben der freiwilligen
Registrierung.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 04:33:12 +02:00
qciganoandClaude Sonnet 5 cc3e84bd98 Fix: Kategorie-/Bewertungs-Dropdown im Shop-Filter kaputt + horizontaler Scrollbalken
Beim Einbau der Kundenbewertungen in den Shop-Filter (voriger Commit) landete
ein "import" mitten in einem define:vars-Skript, das aber gar keine Module
unterstützt. Dadurch brach das komplette Filter-Skript auf allen 4 Sprachen
mit einem SyntaxError ab, sobald es geladen wurde – Kategorie-Dropdown,
Mindestbewertung-Dropdown und Sortierung reagierten dadurch gar nicht mehr
auf Klicks. Die lokal gespeicherten Kundenbewertungen werden jetzt in einem
eigenen, echten Modul-Skript direkt danach eingerechnet.

Zusätzlich: horizontaler Scrollbalken im Dropdown-Menü entfernt (nur noch
vertikal scrollbar), wie gewünscht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 04:26:30 +02:00
qciganoandClaude Sonnet 5 6f10e41386 Kundenrezensionen jetzt vollständig durch Kund:innen selbst, nicht mehr über Admin
Bisher musste VanVan Bewertungen manuell im CMS eintragen. Jetzt können
angemeldete Kund:innen Rezensionen direkt auf der Produktseite abgeben
(inkl. Herzen-Sternebewertung und Text). Die Durchschnittsbewertung wird
automatisch berechnet und überall live eingebunden: Produktkarten
(shop-weit), Produktdetailseite, Shop-Filter/Sortierung nach Bewertung
und die Kundenstimmen-Sektion auf der Startseite.

Neu dazu: ein Kontobereich fürs Login (Demo-Login per E-Mail), Profilfoto-
Upload, wählbarer Benutzername, und ein Header-Kontomenü, das nur bei
Anmeldung erscheint. Jede Bestellung im Konto-Dashboard hat einen
"Rezension schreiben"-Link, der direkt zur Produktseite führt und dort
per Bestellnummer verknüpft wird; im Profil ist dann sofort sichtbar,
welche Bestellungen schon bewertet wurden.

Technisch als reines Frontend/localStorage-System umgesetzt (kein Backend
in dieser Phase), analog zum bestehenden Warenkorb-Muster. Admin-CMS-Feld
für manuelle Bewertungen entfernt, da Rezensionen jetzt ausschließlich von
Kund:innen kommen (auch aus rechtlichen Gründen: keine Fake-Bewertungen).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 04:17:04 +02:00
qciganoandClaude Sonnet 5 d27a858d8f Mindestbewertung-Filter: echte Lila-Babyblau-Verlaufsherzen statt System-Emoji
Im Filter "Mindestbewertung" wurden bisher schlichte 🩵-Emojis angezeigt. Grund:
das war ein natives <select>, und in der browsereigenen Auswahlliste lassen
sich weder Farbverlaeufe noch eigene Grafiken darstellen - der Browser rendert
dort nur das System-Emoji in seiner festen hellblauen Farbe.

Ersetzt durch dasselbe eigene Dropdown, das schon der Kategorie-Filter nutzt.
Dadurch erscheinen jetzt die echten HeartRating-Herzen mit dem Marken-Verlauf
von Lila (--c-purple-glow) nach Babyblau (--c-accent) - auch im geschlossenen
Knopf, sobald eine Bewertung gewaehlt ist. Der Verlauf bekam zusaetzlich einen
weichen Zwischenton, damit er im kleinen Herz-Format nicht hart umschlaegt,
sondern wirklich wie eine Mischung beider Farben wirkt.

Die Dropdown-Logik ist dabei fuer BEIDE Filter zu einem gemeinsamen Code
zusammengefasst worden (statt zweimal fast dasselbe): beide verhalten sich
identisch, oeffnen sich gegenseitig zu, schliessen bei Klick daneben und bei
Escape - nur noch eine Stelle zum Pflegen.

Im Browser funktional geprueft: 5 Optionen, oeffnet/schliesst korrekt, 10
Verlaufsherzen in der Liste, Auswahl setzt den Filterwert und uebernimmt die
Herzen in den Knopf, gegenseitiges Schliessen funktioniert. Gilt fuer alle 4
Sprachen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 03:35:31 +02:00
qciganoandClaude Sonnet 5 0a819b6a4d Kundenbereich-Vorschau, VanVans Geschichte neben ihr Foto, Emoji-Kreis entfernt
1. Neue Seite /konto/angemeldet/ (alle 4 Sprachen): zeigt, was Kund:innen nach
   dem Anmelden sehen - Begruessung, Kennzahlen, Bestellhistorie mit farbigem
   Bestellstatus, Sendungsverfolgung (echter DHL-Link), Rechnung/Nochmal-
   bestellen, Wunschliste, "Zuletzt angesehen" und Profildaten. Klar als
   Vorschau gekennzeichnet: es gibt noch kein echtes Login und keine Datenbank
   (Phase 2), die Bestellungen sind Beispieldaten fuer die Gestaltung. Von der
   Login-Seite aus verlinkt, damit die Ansicht ueberhaupt erreichbar ist.

2. "Ueber die Kreative": der erste Abschnitt ihrer Geschichte ("Meine Reise
   begann mit einer einzigen Masche") steht jetzt direkt neben dem Foto statt
   darunter. Foto bleibt beim Lesen sichtbar (sticky), die restlichen
   Abschnitte folgen wie bisher darunter.

3. Kategorie-Seiten: der farbige Kreis um das Emoji bei "Hauptkategorie" ist
   entfernt, das Emoji steht jetzt frei neben der Ueberschrift.

Dabei gefundener und behobener eigener Fehler: das noetige "align-items: start"
fuer das neue Nebeneinander-Layout hat im gestapelten Handy-Layout die
Grid-Zeile zu niedrig berechnet, wodurch das Foto 80px in den Text darunter
ragte (per Messung im Browser nachgewiesen, nicht nur per Screenshot geraten).
Jetzt sauber auf Bildschirme ab 901px begrenzt - Handy misst 24px Abstand.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 03:27:26 +02:00
qciganoandClaude Sonnet 5 b384938b92 Neu: Kundenrezensionen mit Herzen in Lila-Babyblau, ueberall im Shop integriert
Neue HeartRating-Komponente (Herzen statt Sterne, Lila-Babyblau-Verlauf wie
der Rest der Markenoptik) + komplettes Rezensions-System:

- Produktkarten: Bewertungszeile (Herzen + Anzahl) unter dem Titel, nur wenn
  Bewertungen vorhanden sind.
- Produktseite: volle "Kundenrezensionen"-Sektion mit Durchschnitt und
  einzelnen Rezensionen (Name, Herzen, Datum, Text) bzw. "Noch keine
  Bewertungen"-Hinweis.
- Shop-Filter: neuer "Mindestbewertung"-Filter im Filter-Sidebar + neue
  Sortierung "Beste Bewertung".
- Startseite: "Was unsere Kund:innen sagen"-Sektion mit Gesamtbewertung und
  den 3 neuesten Rezensionen - erscheint automatisch, sobald die erste echte
  Bewertung existiert.
- Adminbereich: neues Feld "Bewertungen" pro Produkt (Name/Herzen/Text/Datum),
  mit deutlichem Hinweis, dass hier nur echte Kundenrueckmeldungen eingetragen
  werden duerfen - erfundene Bewertungen sind in Deutschland/der EU gesetzlich
  verboten (UWG). Deshalb bewusst OHNE Beispiel-Bewertungen im Code: alle
  Bereiche starten leer und blenden sich automatisch ein, sobald VanVan die
  erste echte Rezension eintraegt.

Mit temporaeren Testdaten end-to-end durchgetestet (Herzen-Darstellung,
Rezensions-Section, Filter, Startseiten-Sektion) und vor dem Commit wieder
aus den echten Produktdaten entfernt. Gilt fuer alle 4 Sprachen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 03:15:00 +02:00
qciganoandClaude Sonnet 5 1add9a42a1 Checkout: Kreis-Icon bei Kreditkarte durch schlichtes Kartensymbol ersetzt
Die zwei ueberlappenden Kreise (Visa/Mastercard-Anmutung) beim
Kreditkarte-Zahlungsoption wirkten wie ein fremdes Marken-Logo statt einem
neutralen eigenen Icon. Ersetzt durch ein schlichtes SVG-Kartensymbol, im
gleichen Stil wie die anderen Zahlungsarten-Icons (PayPal/Klarna).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:58:57 +02:00
qciganoandClaude Sonnet 5 52429c5a16 Fix: VanVan-Fotos wurden wieder beschnitten (Oktopus/Schildkroete abgeschnitten)
Zwei Fotos betroffen:
1. "Ueber die Kreative"-Seite: eine alte, spezifischere CSS-Regel
   (.intro .portrait-frame.portrait img) hat lautlos die bereits einmal
   gefixte 2:3-Bildkorrektur wieder auf 1:1 zurueckgesetzt (per Computed-
   Style-Debug bestaetigt: ratio war 1/1 statt 2/3). Diese Regel stammte aus
   einem laengst ersetzten Layout (Foto+Text nebeneinander), das nirgends
   mehr benutzt wird, ausser eben ungewollt hier durch geteilte Klassennamen.
   aspect-ratio aus dieser Regel entfernt, die 2/3-Regel greift jetzt wieder.
2. Startseite "Die Kreative"-Bereich (vanvan-portrait.png, 1122x1402 ≈ 4/5):
   nutzte noch die allgemeine 1:1-Regel und schnitt das Foto ebenfalls
   quadratisch zu. Eigenes Seitenverhaeltnis (4/5) ergaenzt, width/height
   Attribute korrigiert (640x800 statt 640x640) fuer korrekte Bildproportion
   schon vor dem CSS-Laden.

Per Screenshot auf Desktop und Mobil verifiziert: beide Fotos jetzt komplett
sichtbar, inkl. Oktopus- und Schildkroeten-Plushie.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:55:47 +02:00
qciganoandClaude Sonnet 5 22c475d6a5 Shop-Filter: Tier-Unterkategorien im Kategorie-Dropdown jetzt klar sichtbar
Der native <select> mit optgroups zeigte Kuh/Hase/Wal/Oktopus/Schildkroete/
Pinguin zwar technisch an, aber in der schmucklosen Browser-eigenen Liste
kaum erkennbar (kein Kontrast, keine Struktur). Ersetzt durch ein eigenes,
zum Rest der Seite passendes Dropdown (Verlaufsrand-Look wie beim
Sprach-Umschalter): Hauptkategorien mit Icon als Gruppen-Header, Tier-
Unterkategorien darunter eingerueckt mit denselben freundlichen Namen wie auf
den Kategorie-Seiten ("Kuh „Frieda"", "Hase „HasiDog"" usw.) statt schlichtem
Kategorienamen. Filterlogik, URL-Preset (?kategorie=) und Barrierefreiheit
(role=listbox/option, aria-selected) unveraendert erhalten. Gilt fuer alle 4
Sprachen, gebaut und per Screenshot in offenem und geschlossenem Zustand
geprueft.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:49:10 +02:00
qciganoandClaude Sonnet 5 af0093e401 "Unterkategorien" & "Hauptkategorie" auf der Kategorie-Seite deutlicher erkennbar
Beide Beschriftungen waren identisch schlichter grauer Kleinschrift-Text, kaum
von normalem Fliesstext zu unterscheiden. Jetzt: "Unterkategorien" bekommt ein
kleines Icon + zwei kurze Verlaufslinien als dezenten Trenner, "Hauptkategorie"
zusaetzlich einen Farbverlaufs-Icon-Kreis (Kategorie-Icon) und einen schmalen
Leucht-Trenner darunter, der die eigentliche Produktreihe einleitet - bewusst
mit den schon vorhandenen Marken-Verlaufsfarben statt neuer Effekte.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:41:47 +02:00
qciganoandClaude Sonnet 5 4f8e6d87a7 Rechtstexte: fehlende gesetzliche Pflichtangaben ergaenzt (Impressum, AGB, Datenschutz, Versand)
Auf Wunsch geprueft, was in den Rechtstexten laut Gesetz zwingend stehen muss
(unabhaengig von VanVans persoenlichen Daten, die weiterhin als Platzhalter
bleiben). Ergaenzt:

- Impressum: veraltete Rechtsgrundlage "§ 5 TMG" korrigiert zu "§ 5 DDG"
  (Digitale-Dienste-Gesetz hat das TMG im Mai 2024 abgeloest).
- AGB § 4: Kreditkarte als Zahlungsart ergaenzt (ist seit heute im Checkout
  echt waehlbar, fehlte aber noch im Rechtstext).
- AGB § 10: Pflicht-Vorbehalt fuer zwingende Verbraucherschutzvorschriften
  bei Rechtswahl deutschen Rechts gegenueber EU-Verbraucher:innen (Art. 6
  Rom-I-VO).
- Datenschutzerklaerung: fehlenden Pflichtabschnitt "Kontaktformular" als
  eigenen Verarbeitungszweck ergaenzt, Widerrufsrecht der Einwilligung
  (Art. 7 Abs. 3 DSGVO), Pflichthinweis zu automatisierter Entscheidungs-
  findung/Profiling (Art. 22 DSGVO) und konkretere Beschwerderecht-Formulierung
  (Art. 77 DSGVO) ergaenzt.
- Versand & Zahlung (alle 4 Sprachen): Pflichthinweis auf Schweizer
  Einfuhrumsatzsteuer/Zollgebuehren bei CH-Lieferungen ergaenzt (Art. 246a
  EGBGB verlangt vorvertragliche Information ueber Zusatzkosten) sowie
  Kreditkarte in den Zahlungsarten.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:35:35 +02:00
qciganoandClaude Sonnet 5 944e20d9a3 FAQ und Versand&Zahlung: fehlende/veraltete Infos ergaenzt (alle 4 Sprachen)
Beim Durchgehen aller FAQ-Antworten gegen den tatsaechlichen Seiteninhalt
aufgefallen: Kreditkarte ist seit heute ein echtes, waehlbares Zahlungsmittel
im Checkout, fehlte aber noch in der FAQ und auf der Versand&Zahlung-Seite.
Ausserdem: Sendungsverfolgung wird auf der Konto-Seite genannt, fehlte aber in
der FAQ-Antwort zum Kundenkonto. Zusaetzlich professioneller/konkreter
formuliert, aber ausschliesslich mit bereits vorhandenen Infos (keine neuen
Behauptungen erfunden):
- Versandkosten-Frage verweist jetzt auf die Versand&Zahlung-Seite fuer die
  Staffelung unterhalb der 75-Euro-Grenze.
- Pflege-Antwort nennt konkrete, handhäkel-typische Pflege (Handwaesche,
  kein Trockner, liegend trocknen).
- Widerruf-Antwort nennt die 14-Tage-Frist explizit und den Hinweis "bei
  Standardartikeln gilt es regulaer" (1:1 aus der Widerrufsbelehrung-Seite
  uebernommen).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:28:29 +02:00
qciganoandClaude Sonnet 5 346a0ed14e Kontaktseite: "Direkter Kontakt" & "Antwortzeit" in eigene, auffaellige Kiste gepackt
Standen bisher als freier Text neben dem Formular. Jetzt in einer eigenen Karte
mit demselben Verlaufsrand-Look wie der Rest der Seite, zusaetzlich mit einem
sanften Akzent-Glow (wie bei den Charakter-Story-Boxen) und kleinen Icons vor
den Ueberschriften, damit die wichtigen Kontaktinfos etwas mehr Aufmerksamkeit
bekommen, ohne aus dem Design zu fallen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:22:57 +02:00
qciganoandClaude Sonnet 5 b6f8b4339f Fix: zu großer Abstand zwischen Story-Box und Platzhalterkarten bei Tier-Familien ohne Produkt
Familien ohne eigenes Produkt (z.B. Frieda bei der Kuh) zeigten die Story-Box
und die Platzhalterkarten darunter in zwei getrennten <section>-Bloecken -
dadurch addierten sich zwei section-Innenabstaende zu einem viel zu grossen
Zwischenraum (im Vergleich zur Hase-Seite, wo Story-Box und echte Produktkarte
in derselben Sektion stehen). Platzhalterkarten stehen jetzt in derselben
Sektion wie die Story-Box, Abstand ist ueberall einheitlich eng.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:15:01 +02:00
qciganoandClaude Sonnet 5 739c0845ba Fix: Haupt-Charakter einer Tier-Familie verliert Story-Box nicht mehr ohne Produkt
Der letzte Commit hatte Story-Boxen komplett an ein zugeordnetes Produkt
gekoppelt - das entfernte zwar wie gewuenscht HasiGott/Mama Hase (Hase-Familie
hat bereits HasiDog als Produkt), loeschte aber ungewollt auch die Box des
Haupt-Charakters bei Familien ohne eigenes Produkt (z.B. Frieda bei der Kuh).

Jetzt bekommt immer der erste/Haupt-Charakter einer Familie eine Story-Box,
zusaetzliche Charaktere weiterhin nur mit echtem Produkt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 02:01:52 +02:00
qciganoandClaude Sonnet 5 fa5287484e Charakter-Story-Boxen zeigen nur noch Charaktere mit echtem Produkt
Bisher wurden auf den Tier-Familien-Seiten Vorstellungsboxen für ALLE im Admin
angelegten Charaktere gezeigt, auch ohne zugeordnetes Produkt (z.B. HasiGott,
Mama Hase auf der Hase-Seite ohne echte Ware). Auf Wunsch entfernt: die
Story-Boxen erscheinen jetzt nur noch für Charaktere, denen im Admin auch
wirklich ein Produkt zugeordnet ist - genau wie die Shop-Karten darunter.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:54:45 +02:00
qciganoandClaude Sonnet 5 7720396be2 Fix: Menüpunkte in der Kopfzeile brachen bei mittleren Bildschirmbreiten um
"Über die Kreative" (und potenziell andere Menüpunkte) konnte bei
mittleren Fensterbreiten (zwischen ca. 860-1100px) in eine zweite Zeile
umbrechen — durch die kürzlich vergrößerte Kopfzeile plus den neuen
Installieren-Button wurde es dort schlicht zu eng für die Hauptnavi.

Fix: white-space:nowrap auf den Menüpunkten (bricht nie mehr um) +
den Umschaltpunkt zum Hamburger-Menü von 860px auf 1100px angehoben,
damit auf mittleren Breiten gar nicht erst versucht wird, alles
nebeneinander reinzuquetschen, sondern rechtzeitig auf das kompakte
Menü umgeschaltet wird. Geprüft: bei 1100px sauberer Wechsel zum
Hamburger-Menü, kein Umbruch und kein horizontaler Überlauf mehr bei
1150-1600px.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:43:59 +02:00
qciganoandClaude Sonnet 5 1b55604cba Badges kräftiger für bessere Lesbarkeit + Admin-Install-Icon endlich zuverlässig
Badges ("NEU", "HANDGEMACHT" ...) sitzen direkt auf Produktfotos mit
unterschiedlichsten Hintergründen — die alte, sehr transparente Pille
ging auf manchen Fotos optisch unter. Gleiche Farben/gleicher Stil,
aber kräftigerer (deutlich weniger transparenter) Hintergrund + eigener
Rand + dezenter Schlagschatten hinterm Text für Kontrast auf jedem
Untergrund.

Den eigentlichen Grund für das wacklige Verhalten beim Installieren des
Admin-Bereichs gefunden: Sveltia CMS liest selbst den "logo"-Eintrag in
config.yml (eigentlich nur fürs Branding IN der CMS-Oberfläche gedacht)
und fügt daraus automatisch EIGENE Icon-/Manifest-Verknüpfungen in den
<head> ein — u.a. ein live generiertes, eigenes Manifest als blob:-URL
— NACH unseren eigenen. Zwei "rel=manifest"-Links gleichzeitig sind
technisch erlaubt, aber welcher beim Installieren gewinnt, war nicht
zuverlässig vorhersagbar. Das erklärt, warum es mal geklappt hat und
mal nicht, unabhängig vom Icon-Inhalt selbst.

Fix: ein MutationObserver entfernt Sveltias eigene, automatisch
eingefügte Icon-/Manifest-Verknüpfungen sofort wieder, sobald sie
auftauchen — übrig bleiben ausschließlich unsere eigenen (Favicon =
echtes Logo, Install-Icon = lila V). Verifiziert: nach vollständigem
Laden inkl. Sveltia sind nur noch unsere 5 eigenen Verknüpfungen im
<head> vorhanden, 0 Installability-Errors.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:24:40 +02:00
qciganoandClaude Sonnet 5 8da322699b Admin: Produktformular-Felder umsortiert (Kategorie/Auszeichnungen/Unterkategorie/Charakter vor Preis)
Neue Reihenfolge: Kategorie → Auszeichnungen → Unterkategorie →
Charakter → Preis (danach unverändert wie bisher weiter). Reiner
Reihenfolge-Tausch, keine Felder inhaltlich verändert.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:18:54 +02:00
qciganoandClaude Sonnet 5 19f8ce6e6f Browser-Tab-Icon wieder das echte Logo — "V" nur noch fürs Installieren
Klarstellung: Favicon (Browser-Tab, Lesezeichen) zeigt wieder das echte
VanVan-Logo, wie überall sonst auf der Seite. Nur das Icon, das beim
Installieren als App auf dem PC/Handy verwendet wird (icon-192/512 +
maskable-Varianten, apple-touch-icon), bleibt das eigens gestaltete
lila "V" von eben.

Dafür die favicon-16x16/32x32-Einträge aus beiden Web-App-Manifesten
entfernt (die enthielten noch das jetzt wieder logo-basierte Favicon)
— die Manifeste referenzieren jetzt ausschließlich die V-Icons, damit
beim Installieren garantiert nie versehentlich das Logo statt des V
gezogen wird. Erneut auf 0 Installability-Errors geprüft.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:15:53 +02:00
qciganoandClaude Sonnet 5 ba3ab44ef3 Fotos mit dem Finger wischen (Swipe) — auf jeder Karte, überall auf der Seite
Das Foto-Karussell auf den Produktkarten (Shop-Grid, Startseite, Sale,
Charakter-Kacheln, "Weitere Modelle" — überall wo ProductCard.astro
verwendet wird) lässt sich jetzt zusätzlich zu den ‹/›-Pfeilen auch per
Wisch-Geste bedienen: Finger auf dem Handy oder Maus ziehen am PC.
Technisch über die Pointer-Events-API (deckt Touch UND Maus mit
derselben Logik ab). Ein Wisch zählt erst ab einer Mindeststrecke und
nur bei überwiegend horizontaler Bewegung, damit normales Scrollen der
Seite nicht versehentlich als Wisch missverstanden wird. Da die ganze
Karte ein Link ist, wird der nachfolgende Klick nach einem echten Wisch
unterdrückt — sonst würde man ungewollt zur Produktseite springen, nur
weil man durch die Fotos blättern wollte.

Gleiches Wischen jetzt auch auf der Produktdetailseite selbst, für das
große Hauptbild (springt zum nächsten/vorherigen Thumbnail).

Verifiziert: Wisch ändert das Bild UND verhindert nachweislich die
Navigation; normale Klicks navigieren weiterhin korrekt; die Pfeil-
Buttons funktionieren unverändert (kein Regressionsfehler).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:12:46 +02:00
qciganoandClaude Sonnet 5 c7c500e23b App-Icon: eigens gestaltetes lila "V" statt echtem Foto-Logo
Falls das Problem beim Installieren (falsches/generisches Icon) am
Foto-Logo lag, ersetzt dieses Icon-Set es testweise durch ein rein
vektoriell gezeichnetes "V"-Symbol — glänzender Lila-zu-Türkis-Verlauf
(exakt die Markenfarben --c-purple/--c-purple-glow/--c-accent der
Seite), abgerundetes App-Icon-Quadrat, weicher Farbschimmer im
Hintergrund für einen "premium" statt flachen Look. Kein Systemfont
nötig (komplett aus Formen gezeichnet), dadurch garantiert überall
identisch. Nebeneffekt: die Dateien sind jetzt auch viel kleiner (z.B.
512px-Icon: 39 KB statt vorher von einem 380-KB-Foto abgeleitet) —
falls die Dateigröße beim Installieren mit reinspielte, hilft das
zusätzlich.

Alle anderen Dateien (Manifest, Service Worker, Installations-Button)
unverändert — die Dateinamen blieben exakt gleich, nur der Bildinhalt
wurde ersetzt. Lokal erneut auf 0 Installability-Errors geprüft
(Chrome DevTools Protocol), sowohl Hauptseite als auch Adminbereich.

An der Cloudflare-Access-Sperre (Login-Pflicht für die ganze Seite)
wurde NICHTS geändert — die Seite bleibt genauso privat/unsichtbar
für Außenstehende wie bisher, nur das Icon selbst wurde ersetzt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:06:13 +02:00
qciganoandClaude Sonnet 5 a4aff8aa7d Charakter-Vorstellungen wieder für alle sichtbar, Shop-Karten bleiben streng
Klarstellung zur gestrigen Änderung: die persönliche Vorstellung
("Hallo, ich bin Frieda...") ist reiner Text ohne Kaufversprechen und
wird jetzt wieder für JEDEN im Admin definierten Charakter gezeigt,
auch bevor ein passendes Produkt existiert (Frieda, Sam, Siggi, Gaby,
Pingi sind wieder mit ihrem echten Vorstellungstext auf ihren Seiten
zu sehen). Die "Mehr über mich"-Schaltfläche bleibt aber weiterhin nur
bei Charakteren mit hinterlegtem Link (aktuell nur HasiDog).

Die eigentliche Shop-Karte (Foto/Preis/Kaufinfos) bleibt dagegen streng
wie gestern festgelegt: die gibt es nach wie vor NUR für Charaktere mit
echtem, im Admin zugeordnetem Produkt — kein Vorstellungstext täuscht
mehr einen kaufbaren Artikel vor. Ohne Produkt erscheinen stattdessen
die bereits vorbereiteten, namenlosen "Kommt bald"-Karten darunter.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 01:01:52 +02:00
qciganoandClaude Sonnet 5 8700e2c588 Tier-Familien-Seiten: nur noch Charaktere mit echtem Admin-Produkt sichtbar
Wichtige Verhaltensänderung: ein Charakter (aus dem Kategorien-Bereich im
Admin) ist ab jetzt nur noch eine VORBEREITETE Definition. Er erscheint
auf der Seite NUR, wenn ihm im Admin tatsächlich ein Produkt mit genau
diesem Charakter-Code zugeordnet wurde (das Feld "Charakter" am
Produkt = seine "Rolle"). Ohne zugeordnetes Produkt taucht er nirgends
mehr auf — auch nicht mehr als Platzhalter-Karte mit seinem Namen.
Konkret: HasiGott und Mama Hase verschwinden von der Hase-Seite, weil
für sie (noch) keine Produkte im Admin angelegt wurden. Sobald VanVan
ein Produkt mit charakter: hasigott anlegt, erscheint er automatisch.

Familien ganz ohne Produkte (Kuh, Wal, Oktopus, Schildkröte, Pinguin)
zeigen weiterhin die bereits vorbereiteten, namenlosen "Kommt bald"-
Karten (unverändert) — nur die NAMENTLICHE Vorab-Anzeige einzelner
Charaktere ohne Produkt entfällt.

Zusätzlich: der "Mehr über mich"-Button in der Story-Box hatte keinen
erklärenden Text — man wusste nicht, wohin/wozu er führt. Jetzt steht
davor "Wenn du mehr über mich erfahren möchtest, dann klicke [hier →]"
in allen 4 Sprachen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:47:25 +02:00
qciganoandClaude Sonnet 5 b28475c26a Admin-Lücke geschlossen: Banner-Name jetzt auch von VanVan selbst editierbar
Vollständige Prüfung der ganzen Website durchgeführt (auf Wunsch:
"nicht einen einzigen Fehler finden"): jede Seite mit Listen (Shop-
Grid, Startseite, Sale, Kategorie-/Unterkategorie-Seiten, Footer,
Navigation) zieht ihre Einträge bereits vollständig aus den
Admin-Inhalten (products/*.json, categories/*.json) — neue Produkte,
Kategorien, Unterkategorien und Charaktere erscheinen automatisch,
ohne dass Code angefasst werden muss. Mit einem echten Test bestätigt:
testweise eine komplett neue Unterkategorie samt Charakter angelegt
(wie VanVan es im Admin tun würde) → Seite erschien automatisch,
korrekt in allen 4 Sprachen, inkl. Eintrag auf der übergeordneten
Kategorie-Seite. Testdaten danach wieder exakt zurückgesetzt.

Einzige echte Lücke gefunden: das `bannerName`-Feld (aus dem letzten
Update, überschreibt die große Bannerüberschrift mit dem bekanntesten
Charakternamen) existierte zwar im Code/in den JSON-Dateien, aber
NICHT im Admin-Formular — ich hatte es bislang nur selbst direkt in
die Dateien geschrieben. VanVan hätte es also für neue Tier-Familien
nicht selbst setzen können. Jetzt als eigenes Feld "Name im großen
Banner oben (optional)" direkt unter dem normalen Namen der
Unterkategorie ergänzt, mit erklärendem Hinweistext.

Alle anderen Admin-Formulare (Produkte, Gutscheine, Partnercodes,
Versandkosten-Staffel, Bankverbindung) 1:1 gegen ihre Datenmodelle
geprüft — keine weiteren Lücken gefunden.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:39:30 +02:00
qciganoandClaude Sonnet 5 d1acf1d377 Alle Tier-Familien-Seiten mit Charakternamen im Banner vorbereitet
Analog zu "Hase" → "HasiDog" bekommen jetzt auch die restlichen fünf
Tier-Familien ihren Charakternamen als große Bannerüberschrift statt
des Artnamens: Kuh → Frieda, Wal → Sam, Oktopus → Siggi,
Schildkröte → Gaby, Pinguin → Pingi.

Die restliche Seitenstruktur (Story-Box + Kartenreihe) brauchte keine
Änderung — die Vorlage war schon vollständig datengetrieben und zeigt
automatisch für JEDE Familie mit Charakteren dieselbe Optik wie bei
Hase. Da bei diesen fünf Familien noch keine echten Produkte hinterlegt
sind, erscheint (wie bei HasiGott/Mama Hase auf der Hase-Seite auch)
nur die vorbereitete Platzhalter-Karte, aber noch keine Story-Box —
die blendet sich automatisch ein, sobald VanVan im Admin ein passendes
Produkt anlegt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:29:33 +02:00
qciganoandClaude Sonnet 5 e6e86c556a Hase-Seite: Banner zeigt "HasiDog", doppelte Überschrift in der Story-Box entfernt
- Bannerüberschrift zeigt wieder "HasiDog" statt "Hase" (bannerName
  erneut gesetzt).
- Die weiße "HasiDog"-Überschrift in der Story-Box darunter entfernt —
  war doppelt, weil der cyanfarbene Obertitel ("Hallo, ich bin HasiDog.")
  den Namen schon nennt. Das ist eine allgemeine Änderung an der
  Story-Box-Vorlage (gilt für alle Charaktere/Familien, nicht nur Hase),
  da die Überschrift überall strukturell redundant war.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:21:16 +02:00
qciganoandClaude Sonnet 5 4aee6c7b98 Als App auf dem PC installierbar — mit gut sichtbarem Installations-Button
Die Icons/Manifeste waren schon vorbereitet, aber es gab keinen echten
Weg, die Installation auch zu STARTEN, ohne das kleine, leicht zu
übersehende Icon im Browser selbst zu suchen. Jetzt:

- Ein Service Worker (public/sw.js) ist Voraussetzung dafür, dass
  Browser die Seite überhaupt als "installierbare App" erkennen. Bewusst
  minimal gehalten: strikt "network-first" — bei bestehender Verbindung
  wird IMMER zuerst das echte Netzwerk gefragt, der Cache dient nur als
  Rückfalllösung, wenn wirklich keine Verbindung besteht. Dadurch besteht
  KEIN Risiko, dass der Adminbereich veraltete Inhalte zeigt, während man
  online ist — als Bonus funktionieren bereits besuchte Seiten aber auch
  kurz offline (mit echtem Offline-Test geprüft).
- Neuer "Installieren"-Button direkt in der Kopfzeile (Hauptseite) bzw.
  unten rechts (Adminbereich) — erscheint automatisch, sobald der
  Browser eine Installation wirklich anbietet, verschwindet danach
  wieder bzw. bleibt komplett versteckt, wenn schon als App installiert.
  Ein Klick reicht, kein Suchen im Browser-Menü mehr nötig.
- Beide Bereiche (Hauptseite + Admin) nutzen dieselben, bereits
  vorhandenen Logo-Icons/Manifeste — landet also mit dem echten
  VanVan-Logo auf dem Startbildschirm/Desktop.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:16:23 +02:00
qciganoandClaude Sonnet 5 0ff6412e1e Admin-Bereich: echtes Logo statt generiertem Icon bei Installation als App
Der Adminbereich hatte zwar schon einen Favicon-Link, aber kein eigenes
Web-App-Manifest — wer /admin/ als App installiert hat, bekam deshalb
ein automatisch generiertes Platzhalter-Icon statt des echten VanVan-
Logos (gleiches Problem wie zuvor schon auf der Hauptseite behoben).
Neues manifest.webmanifest für den Adminbereich verlinkt jetzt dieselben
Logo-Icons wie die Hauptseite (inkl. maskable-Varianten).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-03 00:09:43 +02:00
qciganoandClaude Sonnet 5 2d2ade1aa8 Kopfzeile (Logo, Navigation, Buttons) etwas größer
Logo, Markenname, Hauptnavigation, Sprachumschalter, Konto-/Warenkorb-
Icons sowie die zweite Kategorien-Leiste darunter sind jetzt insgesamt
etwas größer/luftiger (Schriftgrößen, Icon-Maße, Innenabstände moderat
erhöht) — wie gewünscht "bissl größer" statt eines kompletten Redesigns.

Dabei einen kleinen, durch die Vergrößerung ausgelösten Folgefehler
gleich mitbehoben: auf schmalen Handy-Breiten (<480px) hätte der neue,
größere Header nicht mehr komplett reingepasst und den Menü-Button (☰)
rechts aus dem sichtbaren Bereich geschoben, unerreichbar für Klicks.
Neue Media Query verkleinert dort gezielt Logo/Markentext und blendet
den Sprachumschalter-Text (bleibt nur der Globus) sowie den Pfeil aus —
geprüft: kein horizontales Überlaufen mehr bei 420px, 700px und
Desktop-Breite.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:54:51 +02:00
qciganoandClaude Sonnet 5 3e2be5a420 Doppeltes "HasiDog" auf der Hase-Seite entfernt
Die Bannerüberschrift zeigte "HasiDog", direkt gefolgt von der
Story-Box, die den Namen nochmal als eigene Überschrift zeigt ("Hallo,
ich bin HasiDog. HasiDog ...") — wirkte doppelt. Banner zeigt jetzt
wieder den Familiennamen "Hase" (bannerName-Override entfernt, das
Feld selbst bleibt im Datenmodell bestehen, falls später mal gebraucht).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:48:36 +02:00
qciganoandClaude Sonnet 5 2e1101deac Karten im Haupt-Shop gleich groß + Versandkosten-Feld direkt unter Rabatte
Fix: Auf der Haupt-Shop-Seite (/shop/) wirkten Produktkarten in derselben
Reihe unterschiedlich groß, je nachdem wie lang Titel/Beschreibung waren.
Ursache: jede Karte steckt dort zusätzlich in einem .product-slot-Div
(fürs Filtern/Sortieren per JS). CSS Grid streckt dieses Div zwar auf die
volle Zeilenhöhe, die Karte DARIN füllte diese Höhe aber nicht aus (ein
normales <div> reicht "stretch" nicht an sein Kind weiter). Jetzt ist
das Slot-Div selbst ein Flex-Container, wodurch sich die Karte darin auf
die volle Höhe ausdehnt — alle Karten einer Reihe sind jetzt exakt
gleich groß, unabhängig von der Textlänge.

Admin: "🚚 Eigene Versandkosten je Land" steht jetzt direkt unter
"🏷️ Rabatte" (vorher lag "Auf Lager" dazwischen).

Die "🤝 Partner-Rabattcodes" bereits vorhandene Sektion sitzt weiterhin
direkt unter "🎟️ Gutscheincodes" in der linken Bereichsliste (per
Screenshot verifiziert) — falls sie nicht sichtbar war, lag es an
gecachtem Admin-Tab, nicht an fehlender Konfiguration.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:46:32 +02:00
qciganoandClaude Sonnet 5 e48700f982 Tier-Familien-Seiten verfeinert, Foto-Karussell, Partnercode auf Sale-Ausschluss
Mehrere Feinschliff-Punkte auf den Tier-Familien-Seiten (z.B. "Hase"):
- Abstand zwischen der Story-Box und der Kartenreihe verkleinert (vorher
  durch zwei separate Section-Umrandungen unnötig groß) — beide Bereiche
  teilen sich jetzt eine gemeinsame Section statt zwei gestapelte.
- Platzhalter-Karten (Charaktere ohne Foto) bekommen jetzt exakt die
  gleiche Bildhöhe wie eine Karte mit echtem Foto (vorher griff nur die
  allgemeine Mindesthöhe, wirkte kleiner/anders proportioniert).
- Neues optionales Feld `bannerName` an der Unterkategorie: überschreibt
  NUR die große Bannerüberschrift (Breadcrumb/Chips bleiben unverändert)
  — für "Hase" jetzt auf "HasiDog" gesetzt, den bekanntesten Charakter
  der Familie.
- Unterkategorie-Seiten ganz ohne Produkte/Charaktere (z.B. Maschen-
  markierer, Holzknöpfe) zeigen jetzt schon 3 vorbereitete Platzhalter-
  Karten im selben Kartenstil statt nur einer nackten Textzeile — die
  Seite "sieht schon fertig aus", auch bevor echte Produkte da sind.
  Nebenbei einen Bug behoben: bei Unterkategorien ohne Charaktere, aber
  MIT echten Produkten, erschien vorher zusätzlich fälschlich der
  "noch keine Produkte"-Hinweis über der echten Produktreihe.

Neu: Mini-Bildkarussell direkt auf jeder Produktkarte (Shop-Grid,
Charakter-Kacheln, "Weitere Modelle", Sale-Seite, Startseite — überall
wo ProductCard verwendet wird). Sobald ein Produkt mehrere Fotos hat
(Admin-Bereich erlaubt das bereits über das Foto-Listenfeld), erscheinen
dezente ‹/›-Pfeile plus Punkte-Indikator direkt auf der Karte, ganz ohne
erst die Produktseite öffnen zu müssen.

Neu: Partner-Rabattcodes können im Admin jetzt gezielt auf "gilt NICHT
für Artikel, die schon im Sale sind" gestellt werden (giltAufSale:
false) — der Rabatt berechnet sich dann nur noch auf den regulär
bepreisten Teil des Warenkorbs, damit sich der Partner-Rabatt nicht
zusätzlich auf einen bereits reduzierten Preis obendrauf summiert.
Standardverhalten (Feld leer/true) bleibt wie bisher unverändert.

Alle Änderungen lokal mit Test-Daten durchgespielt (mehrere Testfotos,
Testprodukt im Sale + Partnercode mit/ohne giltAufSale, leere
Unterkategorie-Seite) und vor dem Commit wieder zurückgesetzt.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:41:27 +02:00
qciganoandClaude Sonnet 5 6fc64e0972 Neu: Partner-/Influencer-Rabattcodes (Warenkorb, Checkout, Admin)
Neben dem allgemeinen Gutscheincode gibt es jetzt einen zweiten,
unabhängigen "Partner-Rabattcode"-Slot — für Codes, die VanVan gezielt
mit einzelnen Streamer:innen/Content-Creator:innen aushandelt. Kund:innen
lösen ihn genauso ein wie einen Gutschein (eigene, optisch identische Box
direkt unter dem Gutschein im Warenkorb bzw. im Checkout), beide Codes
können unabhängig voneinander gleichzeitig aktiv sein und ihre Rabatte
werden addiert (auf die Zwischensumme gedeckelt, damit der Preis nie
unter 0 € fällt).

Admin (Sveltia CMS): neuer Bereich "🤝 Partner-Rabattcodes", getrennt von
den allgemeinen Gutscheinen geführt. Pro Code lässt sich hinterlegen, zu
welcher Partnerin/welchem Partner er gehört (nur für VanVans eigene
Übersicht, wird Kund:innen nirgends gezeigt), Prozent- ODER Betrags-
Rabatt, optionales Ablaufdatum, ein "Aktiv"-Schalter zum Pausieren ohne
Löschen, sowie ein freies Notizfeld für die vereinbarten Konditionen
(z.B. Provision) — echtes automatisches Auswerten, wer wie oft welchen
Code einlöst, bräuchte ein eigenes Backend (Phase 2) und ist bewusst
nicht Teil dieser rein statischen Umsetzung.

Nebenbei einen bestehenden Bug behoben: die define:vars-Variablenliste
im Checkout-Skript war bei EN/CH/FR unvollständig (discountLabel,
couponInvalid, Klarna-/Bank-Texte fehlten) — dadurch wären dort Teile
der Checkout-Seitenleiste als "undefined" gerendert worden. Jetzt an
die vollständige Liste der DE-Version angeglichen.

Neu erstellte Dateien lokal mit Test-Codes durchgespielt (Gutschein +
Partnercode gleichzeitig eingelöst, Rabatte korrekt addiert, Admin-
Formular mit allen Feldern geprüft) und wieder auf leere Listen
zurückgesetzt vor dem Commit.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:28:01 +02:00
qciganoandClaude Sonnet 5 45f64b95ee Echtes Logo statt generiertem Buchstaben-Icon (Browser-Tab + Installation als App)
Bisher wurde als Icon nur Astros Standard-Platzhalter-SVG (ein Pfeil-Symbol,
kein eigenes Branding) verlinkt. Weil kein Web-App-Manifest mit Icons
hinterlegt war, generierten Browser beim "Auf PC installieren" automatisch
einen Buchstaben-Kreis ("V") als App-Icon statt des echten Logos.

Aus dem vorhandenen public/logo.png automatisch alle nötigen Icon-Größen
erzeugt (favicon.ico mit 16/32/48px, Apple-Touch-Icon 180px, sowie 192px/
512px normal + eigene "maskable"-Varianten mit Weißraum-Sicherheitszone,
damit runde/eckige OS-Zuschnitte beim Installieren nicht den Rand des
Logos abschneiden). Neues manifest.webmanifest verlinkt alle Icons plus
Name/Theme-Farbe für die Installation. Layout.astro und der
Admin-Bereich verlinken jetzt überall das echte Logo statt des alten
Platzhalters.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:11:11 +02:00
qciganoandClaude Sonnet 5 0ae990baad Charakter-Story-Box aufgewertet: eigener Look statt schlichter Basiskarte
Die "Hallo, ich bin ..."-Box wirkte leer und generisch. Ohne Text zu
ändern, bekommt sie jetzt: ein großes, dezentes Anführungszeichen als
Wasserzeichen oben rechts (im Marken-Verlauf Cyan/Lila/Rosa), einen
sanften Farbschimmer rund um die ganze Box statt des flachen
Standard-Schattens, eine leicht verlaufsgefärbte Überschrift und einen
eigens gestalteten "hier"-Button im Akzent-Verlauf statt schlichtem
Outline-Rahmen (inkl. Hover-Anhebung). Bleibt ruhig/professionell,
fügt sich in den bestehenden Kartenstil der Seite ein.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:05:14 +02:00
qciganoandClaude Sonnet 5 5febeeaa2f Charakter-Geschichtsboxen nur noch für Charaktere mit echtem Produkt
Bisher bekam jeder Charakter einer Tier-Familie (z.B. Hase) automatisch
seine eigene Story-Box, auch wenn für ihn noch gar kein Produkt existiert.
Das wirkte unfertig (z.B. HasiGott und Mama Hase zeigten volle
Persönlichkeitstexte, obwohl beide noch keine Produkte haben). Jetzt
erscheint die Story-Box nur noch für Charaktere mit mindestens einem
zugeordneten Produkt (aktuell also nur HasiDog). Die kompakten Karten
darunter (mit Platzhalter-Foto und "Produkte folgen bald") bleiben für
alle Charaktere sichtbar, damit die Familie als Ganzes trotzdem gezeigt
wird.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 23:00:43 +02:00
qciganoandClaude Sonnet 5 e212fb17d6 Fix: Versandkosten-Feld im Admin besser auffindbar machen
Das Feld für produktspezifische Versandkosten existierte bereits, war
aber kaum zu finden: es stand ganz unten im Formular (nach Lieferzeit)
und war zusätzlich hinter Sveltias "+ Add"-Checkbox versteckt (weil das
Objektfeld selbst required:false hatte). Jetzt direkt nach "Auf Lager"
platziert und ohne required:false auf dem Objekt, sodass die vier
Länder-Preisfelder sofort sichtbar sind, genau wie bei "Name" und
"Beschreibung". Hinweistext zusätzlich präzisiert (verweist jetzt
namentlich auf den Bereich "Versandkosten-Staffel").

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-02 22:57:58 +02:00
qcigano 8cd0145003 Charaktergeschichten von den Shop-Karten getrennt: eigene volle-Breite Boxen oben, reine Foto/Preis-Karten darunter
Bisher stand die persönliche Charaktergeschichte (Hallo-ich-bin-Text)
direkt in derselben Karte wie Foto und Kaufinfos. Jetzt zweigeteilt:
- Oben: jede Geschichte in einer eigenen, vollen Breite Karte
  (character-stories/.character-story), übereinander gestapelt.
- Darunter: eine Kartenreihe wie im Shop-Grid, die für Charaktere mit
  echtem Produkt direkt die vorhandene ProductCard-Komponente wiederverwendet
  (Foto, Badges, Preis, Kurzbeschreibung — 1:1 wie überall sonst im Shop),
  für Charaktere ohne Produkt ein passender Platzhalter im gleichen
  Kartenstil. Keine Geschichten mehr in dieser Reihe.

Verifiziert per Puppeteer: alle drei Geschichten-Boxen ohne Preis, alle
drei Shop-Karten ohne Geschichtstext, HasiDog-Karte zeigt echten Preis
(42,00 € durchgestrichen, 25,00 €) über die wiederverwendete ProductCard-
Komponente.
2026-08-02 22:44:51 +02:00
qcigano bdb1b323c7 Charakter-Vorstellungen umgebaut: kompakte Karten nebeneinander statt großflächiger Text/Foto-Splits
Die großen abwechselnden Foto/Text-Boxen (voller Formularbreite je
Charakter, viel Leerraum bei kurzem Text) sind ersetzt durch kompakte
Karten im exakt gleichen Stil wie die Produktkarten im Shop-Grid: Foto
oben, Text darunter in voller Kartenbreite, alle Charaktere einer Familie
nebeneinander in einer Reihe statt einzeln untereinander.

Betrifft alle Tier-Familien (Hase, Kuh, Wal, Oktopus, Schildkröte,
Pinguin) — wächst weiterhin automatisch mit, sobald neue Charaktere
ergänzt werden. Die "Über die Kreative"-Seite nutzt dieselbe .intro-
CSS-Klasse für ihr eigenes Layout und ist unangetastet geblieben.

Verifiziert per Puppeteer: alle drei Hase-Karten korrekt (Foto, Text,
Link), "Über die Kreative" weiterhin fehlerfrei und unverändert.
2026-08-02 22:38:20 +02:00
qcigano ffddd33a38 Charakter-Vorstellungen: Text und Foto bekommen beide die Kartenoptik der Produktkarten
Auf den Tier-Familien-Seiten (z.B. /shop/diy-plushies/hase/) standen Foto
und Text bisher als freischwebende Elemente nebeneinander, ohne Rahmen.
Jetzt bekommen beide Seiten die gleiche Verlaufsrand-"Kisten"-Optik wie
die Produktkarten im Shop-Grid — zwei gleichwertige, gerahmte Boxen
nebeneinander statt unauffälligem Text neben einem randlosen Foto.

Zusätzlich: HasiDog (1. Charakter der Hase-Familie) hat jetzt den Text
links und das Foto rechts (vorher umgekehrt) — die Abwechslung für
weitere Charaktere (HasiGott, Mama Hase, ...) bleibt erhalten, nur die
Startseite ist gespiegelt.

Verifiziert per Puppeteer-Screenshot: alle drei Hase-Charaktere zeigen
jetzt beide Karten im Verlaufsrand-Stil, HasiDog korrekt mit Text links.
2026-08-02 22:28:57 +02:00
qcigano eddc70e698 Fix: "Foto folgt"-Platzhalter bekommt jetzt den gleichen edlen Rahmen wie echte Fotos
Innerhalb eines Portrait-Frames (z.B. Charakter-Box ohne zugeordnetes
Produkt wie HasiGott/Mama Hase) hatte der Platzhalter keinen Rahmen/Ring,
während echte Fotos schon den dunklen Ring + Akzent-Leuchtrand hatten
(.portrait-frame img). Jetzt bekommt .img-placeholder innerhalb eines
Portrait-Frames genau denselben Rahmen — behält dabei seine eigene
Flex-Zentrierung für den "Produktfoto folgt"-Text.

Verifiziert per Puppeteer: Platzhalter hat jetzt denselben box-shadow-
Ring wie echte Fotos, Textzentrierung (display:flex) bleibt erhalten.
2026-08-02 22:16:16 +02:00
qcigano 3cebb9c3cd Fix: alter Preis bei Rabatt war auf der Produktseite nicht durchgestrichen
.price-old hatte nur in ProductCard.astro (Produktkarten im Shop-Grid)
eine CSS-Regel — auf der Produktdetailseite fehlte sie sitesweit
komplett, der alte Preis stand deshalb dort einfach nur normal daneben
statt durchgestrichen zu sein. Jetzt global definiert, gilt überall.

Verifiziert per Puppeteer: text-decoration ist jetzt line-through.
2026-08-02 21:08:45 +02:00
qcigano f4a48c519c Fix: "+"-Button der Mengensteuerung war unsichtbar, wenn die maximale Lagermenge bereits im Warenkorb war
Ursache gefunden: wenn der Lagerbestand komplett im Warenkorb war, bekam
der "In den Warenkorb"-Button den kompletten langen Hinweissatz als
Text ("Maximale verfügbare Menge ist bereits im Warenkorb"). Der Button
wurde dadurch riesig (3 Zeilen) und hat die danebenliegende
Mengen-Steuerung samt "+"-Button optisch verschluckt — auf schmalen
Bildschirmen war der "+" komplett unsichtbar.

Fix: Der Button bekommt jetzt eine kurze Beschriftung ("Bereits im
Warenkorb"), der ausführliche Satz steht weiterhin im separaten
Hinweistext darunter. Zusätzlich .qty-row jetzt mit flex-wrap
abgesichert, damit ein zu langer Button-Text künftig einfach umbricht
statt die Mengen-Steuerung zu überlagern.

Verifiziert per Puppeteer auf schmalem Viewport (420px): "+" jetzt
sichtbar und klickbar, Button zeigt Kurztext, Hinweis zeigt weiterhin
den vollen Satz.
2026-08-02 21:06:17 +02:00
qcigano 0ee884364d Unterkategorien-Chips: mittig ausgerichtet + Verlaufsrand-Stil statt schlichter Pillen
Die Chip-Reihe war linksbündig statt zentriert und nutzte einfache
Einzelfarb-Pillen. Jetzt mittig auf der Seite und im selben
Verlaufsrand-Stil wie die Karten der Seite (cyan → lila → rosa,
sanftes Leuchten, Hover-Anhebung) — wirkt dadurch "speziell" und
markentypisch, bleibt aber ruhig genug für den professionellen
Gesamtlook.

Verifiziert per Puppeteer-Screenshot.
2026-08-02 20:55:42 +02:00
qcigano a61336b9ee Fix: Überschrift über der Produktreihe zeigt jetzt wirklich "Hauptkategorie" statt den Kategorienamen zu wiederholen
Missverständnis aus einer früheren Anfrage korrigiert: die Überschrift
zwischen den Unterkategorie-Chips und der Produktreihe sollte das Wort
"Hauptkategorie" zeigen (spiegelbildlich zur "Unterkategorien"-
Beschriftung darüber), nicht den Kategorienamen ("DIY Plushies")
wiederholen. Jetzt im exakt gleichen dezenten Stil wie
"Unterkategorien" — beide Beschriftungen sind jetzt visuell symmetrisch.

Verifiziert per Puppeteer: Seite zeigt "UNTERKATEGORIEN" und
"HAUPTKATEGORIE" als passendes Beschriftungs-Paar.
2026-08-02 20:52:46 +02:00
qcigano dc1d7a41ff Unterkategorien-Chips zeigen wieder den Charakternamen (z.B. Hase „HasiDog")
Seit der Umstellung auf "eine Seite pro Tier-Familie" hießen die Chips
nur noch generisch (Kuh, Hase, Wal, ...). Jetzt zeigen sie zusätzlich
den ersten/bekanntesten Charakter der Serie in Anführungszeichen — z.B.
"Hase „HasiDog"" — behalten dabei aber die neue Datenstruktur
(Subcategory.characters) bei, damit Familien mit mehreren Charakteren
(wie Hase: HasiDog, HasiGott, Mama Hase) technisch weiterhin
funktionieren.

Neue Helper-Funktion subcategoryChipLabel() in categories.ts, pro
Sprache mit den richtigen Anführungszeichen (DE/CH „...", EN "...",
FR « ... »).

Verifiziert per Puppeteer: alle 6 Chips zeigen exakt die gewünschten
Labels.
2026-08-02 20:49:26 +02:00
qcigano ee4ec0053e Checkout: AGB/Widerruf-Checkboxen stehen jetzt direkt unter Gesamt/USt-Hinweis statt separat unterhalb beider Spalten
Die Checkboxen standen bisher außerhalb des Zwei-Spalten-Layouts, über
die volle Formularbreite. Jetzt stehen sie direkt im Anschluss an
"Gemäß §19 UStG..." in derselben (rechten) Spalte — wie gewünscht direkt
unter der Bestellübersicht statt separat darunter.

Verifiziert per Puppeteer-Screenshot (Desktop + schmale Ansicht).
2026-08-02 20:45:54 +02:00
qcigano 51ac0affa7 Warenkorb/Produktseite: nie mehr in den Warenkorb legen können als auf Lager ist
- Produktseite: Mengen-Stepper und manuelle Eingabe sind jetzt auf den
  tatsächlichen Lagerbestand begrenzt (zählt bereits im Warenkorb
  liegende Menge desselben Produkts mit). Ist das Maximum schon
  erreicht, wird der "In den Warenkorb"-Button deaktiviert und zeigt
  "Maximale verfügbare Menge ist bereits im Warenkorb"; bei wenig Rest-
  bestand (≤5) erscheint stattdessen "Nur noch X auf Lager".
- Warenkorb-Seite: der "+"-Button bei der Mengenauswahl ist ebenfalls auf
  den Lagerbestand begrenzt.
- Als zusätzliche Absicherung greift das Limit jetzt auch direkt in
  addToCart()/updateQuantity() selbst (cart.ts) — unabhängig davon,
  welche Oberfläche die Funktion aufruft, kann so nie mehr Menge als
  Bestand ins localStorage gelangen.

Verifiziert per Puppeteer an einem Produkt mit Bestand 2: 6× auf "+"
klicken bleibt bei 2, manuelles Eintippen von 999 wird auf 2 geklemmt,
nach dem Hinzufügen ist der Button deaktiviert, der "+"-Button im
Warenkorb erhöht nicht weiter — keine Konsolenfehler.
2026-08-02 20:42:21 +02:00