## [9.15.6] — 2026-06-17

### Fixed — Löschen entfernte den falschen Eintrag
- **Bug:** Die Buchliste wird nach Zeit **sortiert** (`sorted`-Kopie), aber gelöscht wurde per **Anzeige-Index** (`GDL:DeleteDeath(idx)`) gegen die **unsortierte** `guildData.deaths`. Folge: Beim Löschen von z. B. „TestHeld" flog ein ganz anderer Charakter raus, der eigentlich bleiben sollte.
- **Fix:** Neue Funktion `GDL:DeleteDeathByIdentity(name, timestamp)` entfernt den Eintrag **per Identität** (Name + Zeitstempel) — unabhängig von Sortierung/Filterung immer der richtige. Lokales Blacklisten + Gilden-Sync wie gehabt.
- Alle vier Lösch-Pfade umgestellt: Buchliste (direkt **und** mit Admin-Passwort) sowie das Todes-Overlay.
- Version 9.15.5 → 9.15.6.

## [9.15.5] — 2026-06-17

### Fixed — Doppel-Popup (endgültig) + Pipeline bestätigt
- **Diagnose via `/gdl pipetest` + Logbuch bestätigt:** die Todes-Pipeline läuft sauber durch (`1) HandleDeath` → `3) RecordLocalDeath ENTRY` → `5) notify=true overlay=true announce=true` → Overlay + Gildenmeldung). Das „kein Popup/keine Meldung" war ein nicht-geladener Zustand (kein Vollneustart) und ist behoben.
- **Doppel-Popup an der Anzeige-Wurzel abgefangen:** `UI:ShowOverlay` führt jetzt einen Backstop-Dedup (Name@Zeitstempel, 8-Sekunden-Fenster). Derselbe Tod erscheint **garantiert nur einmal** als Overlay — egal über wie viele Pfade `ShowOverlay` aufgerufen wird (DNL-Hook, eigenes Broadcast-Echo, Channel-Empfang).
- **Self-Echo-Lücke geschlossen:** `Sync:HandleDeath` ignorierte den eigenen Absender nicht — empfing also das eigene Broadcast zurück und verarbeitete es erneut (Doppel-Eintrag/-Anzeige möglich). Jetzt wird das eigene Echo per Absender-Check (`CanonName(sender) == CanonName(playerName)`) verworfen.
- Die Diagnose-Logbuchmarken (`1)`…`5)`, `P)`) bleiben drin — nützlich für künftiges Debugging.
- Version 9.15.4 → 9.15.5.

## [9.15.4] — 2026-06-17

### Diagnose — Todes-Pipeline instrumentiert
- **Regression gemeldet:** kein Todes-Popup und keine Gildenmeldung mehr. Da Popup und Announce seit 9.14.4 beide an derselben `ShouldNotify`-Sperre (`_notify`) hängen, fallen sie zusammen weg, wenn diese Sperre vorzeitig steht — die genaue Stelle muss aber empirisch lokalisiert werden.
- **Sechs Logbuch-Marken** (Kategorie `DEATH`) entlang der Kette: `1) HandleDeath` → `2) PipelineStep2` → `3) RecordLocalDeath ENTRY` → `4!) IsDuplicate-Abbruch` → `5) notify/overlay/announce/inGuild`, plus `P) ProcessIncomingDeath` für Channel-Tode. Über `/gdl log` ablesbar.
- So zeigt ein einziger Test eindeutig, ob (a) der Tod gar nicht erkannt wird (DNL/Bridge), (b) ein früher Return greift, oder (c) `ShouldNotify` false liefert (und mit welchen Settings).
- Version 9.15.3 → 9.15.4.

## [9.15.3] — 2026-06-17

### Fixed/Added — Killer-Namen statt Kreatur-IDs
- **Problem:** In den Todesursachen (und bei Fremd-Toden generell) stand oft nur die Kreatur-**ID** („Kreatur #6226"), weil über DeathNotificationLib nur die `source_id` ankommt und keine geshippte NPC-Namensdatenbank existiert.
- **Lösung – lernende Namensdatenbank:** `KillerTracker` extrahiert aus dem eigenen Kampflog NPC-Name ↔ Kreatur-ID und speichert das **persistent** in `GuildDeathLogDB.npcNames`. Dadurch lernt der Client mit der Zeit die Namen aller Mobs, denen er begegnet – und kann gespeicherte IDs (auch von Gildentoden auf demselben Content) zu Namen auflösen.
- **Zentrale Auflösung:** Neue Helfer `KillerTracker:ResolveNpcName(id)` und `KillerTracker:CauseName(death)` (Reihenfolge: gelernt → `DeathNotificationLib.NPC_NAMES` → Deathlog-`id_to_npc` falls installiert → Fallback „Kreatur #ID"). `DNLBridge.ResolveKiller` nutzt jetzt denselben Resolver, ebenso die Statistiken-Seite und `/gdl threats`.
- Ergebnis: Sobald ein Mob einmal lokal gesehen wurde (oder Deathlog installiert ist), erscheint überall der echte Name statt der ID.
- Version 9.15.2 → 9.15.3.

## [9.15.2] — 2026-06-17

### Changed — Statistiken erweitert statt doppeltem Kapitel
- **„Häufigste Todesursachen" in die bestehende „Statistiken"-Seite integriert.** Die Seite zeigte bereits gefährlichste Zonen, Level-Verteilung und Todes-Uhrzeiten; ergänzt wurde eine gerankte Liste der häufigsten Killer/Ursachen (nur sichtbar, wenn echte Killer-Namen vorliegen; Transport-Quellen wie DNL/System/Blizzard werden gefiltert).
- **Kurzlebiges Kapitel „Hallen der Furcht" wieder entfernt** – es war fast vollständig redundant zur „Statistiken"-Seite (Zonen/Stufen). Index-Eintrag XVII, Dispatch, Titel und `UI:RenderThreats()` zurückgebaut.
- Der Chat-Befehl **`/gdl threats`** bleibt als schneller Überblick erhalten.
- Version 9.15.1 → 9.15.2.

## [9.15.0] — 2026-06-17

### Added — Vier neue Mehrwert-Features (Modul `Insights.lua`)
- **„Während du weg warst" – Login-Digest.** Beim Login fasst die Chronik zusammen, wer **seit deinem letzten Besuch** gefallen ist (Name, Stufe, Klasse, Gebiet; bis zu 8, Rest als „… und N weitere"). Pro Charakter gemerkt (`insights.lastSeen`), Erstlauf bleibt still. Manuell jederzeit per **`/gdl away`** (letzte 7 Tage).
- **Tödlichste-Stufe-Warnung.** Beim Stufenaufstieg prüft das Addon aus **echten Gildendaten**, ob auf dieser Stufe schon ≥3 Mitglieder gefallen sind, und warnt **einmalig pro Stufe/Charakter** per Toast + Chat. Reine HC-Risiko-Awareness, kein Spam.
- **`/gdl threats` – Hallen der Furcht.** Listet die **tödlichsten Gebiete** und **tödlichsten Stufen** der Gilde (Top 5) plus, falls verfügbar, häufigste Todesursachen. Transport-Quellen (DNL/System/Blizzard) werden gefiltert.
- **Gilden-Meilenstein-Toast.** Überschreitet die Gilde eine Schwelle (25/50/100/…), erscheint einmalig „Die Chronik zählt nun N Gefallene." Erstlauf merkt nur den Stand (kein Nachträglich-Spam).
- Alles **read-only** auf den Todesdaten, **DE/EN** per `GetLocale`, kompatibel mit 1.15.8 und 2.2.5. Neues Modul in der TOC nach `Anniversary.lua`.
- Version 9.14.4 → 9.15.0.

## [9.14.4] — 2026-06-17

### Fixed — Doppel-Popup & Doppel-Push bei Toden
- **Wurzelursache: `DeathNotificationLib` feuert `HookOnNewAddonEntry` mehrfach pro Tod** (Peer-Bestätigungen). Dadurch lief die komplette Pipeline (`HandleDeath` → `RecordLocalDeath`: Overlay, Gilden-Announce, Broadcast) mehrfach → doppeltes Todes-Popup und potenziell doppelte Gildenmeldung.
- **Fix 1 – Dedup an der Wurzel:** `DNLBridge:HandleDeath` lässt pro Spieler nur **einen** Durchlauf innerhalb von 60 s zu (ein Toter stirbt nicht erneut). Mehrfach-Feuer wird verworfen und ins Logbuch geschrieben.
- **Fix 2 – Announce unter dieselbe Sperre:** Die Gildenchat-Meldung in `RecordLocalDeath` hing **außerhalb** von `ShouldNotify` und konnte so doppelt pushen (bzw. beim eigenen Tod mit dem Channel-Announce kollidieren). Sie nutzt jetzt dieselbe `ShouldNotify`-Sperre wie Overlay/Sound → genau **eine** Meldung pro Tod.
- Hinweis: Eine zweite, anderssprachige Chat-Zeile (z. B. „rest in peace !") stammt **nicht** aus dem Addon – das ist eine manuelle Beileidsnachricht eines Gildenmitglieds.
- Version 9.14.3 → 9.14.4.

## [9.14.3] — 2026-06-17

### Fixed — „Die Ausdauernden" (Gilden-Bestenliste)
- **Eigene Streak war in der Gilden-Bestenliste unsichtbar.** Ursache: Beim Login lief `StartStreak` (0,5 s nach Load), bevor der Gildenname geladen war → der eigene Streak-Eintrag bekam `guild = nil`, und `GetGuildLeaderboard` filterte ihn per `guild == myGuild` wieder raus (Persönlich-Sektion zeigte ihn, die Liste nicht).
- **Fix:** Gilde wird robust ermittelt (Fallback `GetGuildInfo("player")`), der **aktuell gespielte Charakter wird immer** einbezogen, und sein Eintrag wird nachträglich mit Gilde/Level/Klasse gestempelt. Zusätzlich zieht ein `GUILD_ROSTER_UPDATE`/`PLAYER_GUILD_UPDATE`-Handler den Eintrag nach, sobald die Gilde geladen ist, und sendet die Streak einmalig (greift auch bei Gildenwechsel).
- **Nur Addon-Nutzer der eigenen Gilde**, gildenweit gesynct (Prefix `GDLStrk`, 20 s nach Login + alle 5 min + bei Roster-Update) und **persistent** in den SavedVariables (`db.streaks` / `db.guildStreaks`) — überlebt Logout.
- Version 9.14.2 → 9.14.3.

## [9.14.2] — 2026-06-17

### Changed — Buch-Größe nachjustiert
- **Default-`bookScale` 0.8 → 0.9.** 0.8 war zu klein, 1.0 war zu groß — 0.9 als Mitte. Feinjustage weiterhin per Strg+Mausrad (0.5–2.0), wird gespeichert.

## [9.14.1] — 2026-06-17

### Changed — Buch: Seitenfarbe & Größe
- **Seiten auf ruhiges, gleichmäßiges Alt-Beige umgetönt.** Das neue Artwork war zu hell/grell (heller Kern, verbrannte Ränder). Die Pergamentflächen werden jetzt per Maske auf einen weichen, gleichmäßigen Beigeton (≈ RGB 209/196/170) geflattet — feine Faserstruktur bleibt erhalten, dezenter Falz-Schatten für Tiefe. Leder, Messingbeschläge und Geometrie unverändert.
- **Buch standardmäßig kleiner.** Default-`bookScale` von 1.0 → 0.8. Feinjustage weiterhin per Strg+Mausrad (0.5–2.0), Einstellung wird gespeichert.
- Version 9.14.0 → 9.14.1.

## [9.14.0] — 2026-06-17

### Changed — Neues Buch-Design
- **Komplett neues, eigenes Buch-Artwork (`GDL_Book4.png`).** Mittelalterliche Gilden-Chronik: gealtertes Creme-Pergament mit Fasern und Stockflecken, dunkler Lederrand, Messing-Eckbeschläge, mittiger Falz mit Schatten. Ersetzt das alte Stock-Bild. Transparenter Rand (keine schwarze Kante mehr).
- **Seiten-Geometrie exakt auf das neue Buch ausgerichtet.** Die Pergamentflächen wurden vermessen und `leftPage`/`rightPage` (inkl. aller Kind-Elemente: Titel, Kapitelliste, Einträge, Statistiken, Scroll) entsprechend neu verankert (62/-36, 346×444; Falz bei x≈449). Text und Inhalte sitzen sauber innerhalb der Seiten, kein Überlauf auf den Lederrand.
- Altes Artwork (`GDL_Book3.png`) bleibt als Fallback im Ordner.
- Version 9.13.2 → 9.14.0.

## [9.13.2] — 2026-06-17

### Changed — Buch-Optik
- **Schwarzer Rand um das Buch entfernt.** Die Buch-Textur (`GDL_Book3.png`) hatte einen vollflächig schwarzen, deckenden Hintergrund (0,0,0,255) rund ums Artwork — der erzeugte den schwarzen Rahmen im Spiel. Der Hintergrund wird jetzt per Flood-Fill von den Rändern transparent gemacht; dunkle Stellen **im** Buch (Falz, Schatten, Lederbund) bleiben erhalten, da nur der mit dem Rand zusammenhängende Schwarzbereich entfernt wird. Kante leicht weichgezeichnet gegen Treppchen. Original als `GDL_Book3_orig.png` gesichert.
- Version 9.13.1 → 9.13.2.

## [9.13.1] — 2026-06-17

### Changed — Lokalisierung (DE/EN)
- **Die teilbare Grabstein-Karte (`MemorialCard`) ist jetzt zweisprachig.** Alle sichtbaren Texte (Kopfzeile, „gefallen in", „durch", Datum, Buttons, Copy-Fenster, Hinweise, Fehlermeldungen) laufen jetzt über das `Locale.lua`-System mit automatischer Client-Erkennung (`GetLocale`). Keys in deDE, enUS und ruRU ergänzt.
- Erster Schritt eines breiteren Lokalisierungs-Durchgangs; weitere neue Strings (Slash-Ausgaben, Karten-Tooltips) folgen im selben Muster.
- Version 9.13.0 → 9.13.1.

## [9.13.0] — 2026-06-17

### Fixed — Gilden-Isolation (kritisch)
- **Gildenkalender ist jetzt strikt pro Gilde getrennt.** Events werden mit der Gilde getaggt; `GetEvents` liefert nur Events der aktuellen Gilde. Auf einem Charakter außerhalb der Gilde (oder ohne Gilde) sind keine Gildenkalender-Einträge mehr sichtbar. Eingehende Events (GUILD-Channel) werden der eigenen Gilde zugeordnet; Alt-Einträge werden einmalig migriert.
- **Schwarzes Brett genauso isoliert.** Beiträge tragen die Gilde; Anzeige filtert nach aktueller Gilde; Löschen entfernt jetzt aus der echten Liste (per Identität, nicht aus der gefilterten Anzeige-Kopie). Neue Beiträge erzeugen eine **einmalige Push-Benachrichtigung** (DE/EN).

### Added — Die Ausdauernden gildenweit
- **Überlebens-Streaks werden jetzt gildenweit synchronisiert** (eigener Addon-Channel `GDLStrk`, alle 5 Min + 20 s nach Login). Die Bestenliste „Die Ausdauernden" zeigt eigene Chars der aktuellen Gilde **plus** alle Gildenmitglieder, die das Addon nutzen — dedupliziert, auf die aktuelle Gilde gefiltert, Remote-Einträge nach 30 Tagen verworfen.
- Eigene Streak-Einträge tragen jetzt Gilde/Klasse/Level (für Sync + Filter).

### Fixed — Gildenrangliste
- **„Unsere Kämpfer" zeigt nur noch Spieler, die das Addon nutzen** (`Sync:HasAddon`), zusätzlich zur bereits bestehenden Fraktion+Gilde-Trennung. Schützt auch gegen Altdaten.
- **Fehlende/ungültige Achievement- und Meilenstein-Icons** auf Classic-sichere Pfade umgestellt (Jahrhundertchronik, Zäh wie Leder, Wahrer Unsterblicher, Der Perfekte Handwerker).
- Version 9.12.0 → 9.13.0.

## [9.12.0] — 2026-06-17

### Added — Logbuch
- **Persistentes, zeitgenaues Logbuch.** Neues Modul `Logbook.lua`: schreibt zeitgestempelte Einträge (Kategorie + Text) in die SavedVariables, überlebt `/reload` und Relog. Ringpuffer mit 600 Einträgen.
- **`GDL:Debug` wird gespiegelt** — alle bestehenden Debug-Ereignisse (Sync, Tod-Verarbeitung etc.) landen jetzt automatisch persistent im Logbuch. Zusätzlich `GDL:Log(kategorie, text)` und `GDL:LogError(kontext, fehler)` für gezielte Einträge.
- **Befehl `/gdl log`** — `/gdl log [n]` zeigt die letzten n Einträge im Chat, `/gdl log export` öffnet ein Copy-Fenster mit allem, `/gdl log clear` leert das Logbuch.
- **Deutsch + Englisch** mit automatischer Client-Erkennung (`GetLocale`).
- Version 9.11.1 → 9.12.0.

## [9.11.1] — 2026-06-17

### Changed — Minimap-Button neu gestaltet
- **Neues Icon:** lederner Foliant (`INV_Misc_Book_09`) statt Totenkopf — passt zum „Buch der Gefallenen".
- **Sanft atmender goldener Glow-Ring** (eigene Textur `GDL_GlowRing.png`) statt der dauerhaften roten Aura und der Orbit-Runen/Funken. Ruhiger Look, per AnimationGroup statt Per-Frame-Code.
- Bei neuem Tod flammt der Ring kurz heller auf.
- Version 9.11.0 → 9.11.1.

## [9.11.0] — 2026-06-17

### Added — Grabsteine auf der Karte
- **Grabstein-Marker am Todesort** auf Weltkarte, Gebietskarten UND Minimap. Eigene Grabstein-Grafik (`GDL_Tombstone.png`) mit dezenter Klassen-Aura. Marker werden **30 Tage** angezeigt (Render-Altersfilter auf Welt- und Minimap).

### Fixed — Memorial-Erhalt
- **`PruneOldDeaths` löschte Tode älter als 30 Tage komplett aus `guildData.deaths`** — und damit auch aus dem Gedenkbuch. Jetzt No-Op: Gefallene bleiben für immer im Buch, die 30-Tage-Grenze gilt ausschließlich für die Karten-Marker.
- Version 9.10.0 → 9.11.0.

## [9.10.0] — 2026-06-17

### Added — Teilbare Grabstein-Karte
- **Befehl `/gdl card [Name]`** öffnet eine Gedenk-Karte des Gefallenen im Buch-Look (Klassen-Icon, Name in Klassenfarbe, Stufe/Klasse, Zone, Killer, letzte Worte).
- **Screenshot-Knopf** blendet die Bedienelemente kurz aus und knipst eine saubere Karte (`Screenshot()`).
- **Discord-Text-Knopf** öffnet ein Copy-Feld mit fertig formatiertem Text (nutzt `Export:FormatDeath`).
- Version 9.9.9 → 9.10.0.

## [9.9.9] — 2026-06-17

### Fixed — Stabilität
- **Doppeltes Todes-Popup behoben.** Zentrale `ShouldNotify`-Sperre (genau ein Overlay/Sound/Chat pro Tod, egal über wie viele Pfade er reinkommt) plus Namens-Normalisierung (Realm-Suffix entfernen), damit auch die DB-Dedup wieder greift — kein Doppel-Eintrag mehr im Buch.
- **Gilden-Broadcast-Sturm entschärft.** Fremde, via DNL erhaltene Tode werden nicht mehr von jedem Beobachter erneut in die Gilde gepusht; ein Jitter-Relay stellt sicher, dass der Tod garantiert genau einmal ankommt (wichtig für Gildies ohne DNL).
- **Gilden-Wettbewerb nach Fraktion + Gilde getrennt.** „Unsere Kämpfer" zeigte Twinks der Gegenfraktion. Daten liegen jetzt pro Scope (Fraktion::Gilde); beim Charakter-Wechsel wird sauber umgeschaltet.
- **Großer FPS-Fix beim Kapitelwechsel.** Kapitel werden gecacht — Zurückschalten baut die Seite nicht mehr komplett neu (vorher hunderte Frames pro Klick).

### Added
- **`/gdl status`** — Selbst-Diagnose (Version, Gilde/Fraktion, DNL/Sync-Status, Tode, Duplikate, Cache).
- **`/gdl dedupe`** — entfernt exakte Doppel-Einträge (gleicher Name + Zeitpunkt).
- Version 9.9.8 → 9.9.9.

## [9.9.8] — 2026-06-13

### Fixed — Zeichensatz & Datei-Integrität
- **Kapitel-Tooltip zeigte ein verstümmeltes Zeichen.** Beim Überfahren eines Eintrags stand in der Tooltip-Zeile „Klasse  Â·  Level X" statt „Klasse  ·  Level X" — ein doppelt-kodierter Mittelpunkt (`Â·` statt `·`) in `UIChapters.lua`. Sichtbarer Fix bei jedem Hover.
- **3 Debug-Strings in `Deathlog.lua` enthielten doppelt-kodierte Gedankenstriche** (`â€"` statt `–`). Nur im Debug-Modus sichtbar, aber echte Zeichensatz-Korruption — bereinigt. Damit sind alle String-Literale der Suite wieder sauberes UTF-8.
- **2 Null-Bytes Padding aus `UIChapters.lua` entfernt** (Cloud-Sync-Padding, Code unbeschädigt; WoW lud es zwar, Git/Editoren stolperten). Reine Byte-Bereinigung, **kein Verhaltenswechsel**. Backup unter `outputs\_corruption_backup\`.
- Version 9.9.7 → 9.9.8.

## [9.9.7] — 2026-06-12

### Fixed — Todes-Banner rekalibriert + Praesenz-Zaehlung
- **Lederfeld neu vermessen — diesmal richtig:** die alte Messung (Luminanz) hatte den dunklen METALLRAHMEN als Feld mitgezaehlt, daher sass der Name zu hoch und die letzten Worte hingen UNTER dem Feld auf dem Rahmen. Neue Messung trennt warmes Leder (R>B) von grauem Metall: nutzbar ist y 150-254, x 90-430. Kompletter Satz neu: Name (MORPHEUS 20, Klassenfarbe) bei -150, EINE Meta-Zeile "Stufe X Klasse · Zone · Uhrzeit" bei -176, "Getoetet von X · Faehigkeit" bei -194 (Faehigkeit jetzt IN der Zeile statt eigener), Gold-Trenner -216, letzte Worte -222 (max 2 Zeilen) — endet bei -248, sicher im Feld.
- **Schwebendes Symbol entfernt:** das war das 3D-Killer-Portrait, das mit der alten Geometrie frei neben dem Rahmen hing. Der Name traegt die Klassenfarbe (wie gewuenscht), das Portrait ist ersatzlos raus.
- **Gilden-/Server-Zaehlung, zwei echte Bugs:** (1) Sync speichert Namen MIT Realm-Suffix, ServerNet OHNE — die Union erkannte Duplikate nicht (haette denselben Spieler doppelt gezaehlt). Namen werden jetzt normalisiert. (2) Der TTL-Filter (isOnline) wurde in beiden Count-Funktionen ignoriert — Karteileichen zaehlten ewig mit. Beide Quellen jetzt TTL-gefiltert. Hinweis: die Zaehlung kann nur sehen, wer GLEICHZEITIG online ist und sendet — Validierung braucht zwei eingeloggte Clients.
- **Performance-Audit:** verbleibende OnUpdate-Handler geprueft — alles selbstbeendende Animationen, 30Hz-gedrosselt oder nur bei offener Weltkarte aktiv. Keine Dauerlast mehr ausserhalb der 30Hz-Embers bei offenem Buch.
- Version 9.9.6 → 9.9.7.

## [9.9.6] — 2026-06-12

### Design — Todes-Popup (Overlay) auf GuildChronicle-Banner umgebaut
- **Klarstellung der Systeme:** Das grosse Todes-Popup beim Gildentod ist das OVERLAY (UIOverlay) — der Test-Befehl zeigte deshalb noch das alte WoW-Logo-Artwork. Das DeathBell-Flash-Banner von 9.9.4 ist ein zweites, kurzes System. Jetzt tragen BEIDE das GuildChronicle-Artwork.
- **Neuaufbau:** 520x320 statt 660x460 (Banner-Aspekt 1.625 exakt, deutlich kompakter). Das Formular-Layout (Label links, Wert rechts, Fraktions-Icons) ist raus — stattdessen Banner-Satz, alles zentriert im vermessenen Lederfeld (x 100..427, y 128..277): Name in Klassenfarbe (MORPHEUS 22), darunter Stufe+Klasse, dann "Zone · Uhrzeit" als Zeile um die Mitte, "Getoetet von X" mit grauem Praefix und hellem Namen, optional "via Faehigkeit", kurzer Gold-Trenner, Letzte Worte in Gold (max 2 Zeilen).
- **Bedienung unveraendert:** Drag = verschieben, Shift+Drag = skalieren (Scale persistiert), Rechtsklick/X = schliessen. Klassen-Farbschimmer liegt jetzt exakt im Lederfeld. Reveal-Animationen (Typewriter-Name, gestaffeltes Einblenden) uebernommen.
- Version 9.9.5 → 9.9.6.

## [9.9.5] — 2026-06-12

### Performance — FPS-Drop bei offenem Buch (~100 FPS) behoben
- **ScrollChild-Recycling:** JEDER Kapitel-Render (jedes Buch-Oeffnen, jeder Kapitelklick) hat bisher komplett neue Frames/FontStrings erzeugt und alte nur versteckt — Frames sind in WoW nicht garbage-collectbar, der Speicher wuchs mit jedem Klick und ClearScrollChild baute pro Aufruf zwei Riesen-Tabellen ueber tausende Alt-Widgets. Jetzt: MakeBookLine (FontString-Pool) und MakeBookRow (Row-Pool mit festen Sub-Widgets) recyceln; ClearScrollChild gibt zurueck statt nur zu verstecken. Angeheftete Fremd-Kinder (z.B. Kalender-Loeschknopf) werden beim Recyceln versteckt, damit sie nicht in fremden Kapiteln auftauchen.
- **Glut-Ambience (Embers) entschaerft:** lief mit voller Framerate und machte pro Glut-Partikel und Frame ClearAllPoints+SetPoint+SetVertexColor+SetSize — Anker-Neuberechnung x10 pro gerenderter Frame. Jetzt: ~30 Hz Throttle, SetPoint ersetzt den gleichnamigen Anker direkt (ClearAllPoints raus), Farben nur noch beim Respawn. Optisch identisch, Kosten ~75% runter.
- **BreathGlow entfernt:** der ~970x590 ADD-Blend-Starburst pulsierte permanent hinter dem Buch — purer GPU-Overdraw, hinter dem fotorealistischen Artwork praktisch unsichtbar. Die Embers bleiben als Ambience.
- **Debug-Fenster:** UpdateAddOnMemoryUsage() (scannt ALLE Addons, teuer) lief bei jedem 2s-Refresh — jetzt max. alle 6s mit Cache. Die "springende" Memory-Anzeige war uebrigens zur Haelfte Ehrlichkeit: vorher stand sie eingefroren auf 0.0, jetzt zeigt sie echte Werte — und durch das Recycling hoert das echte Wachstum auch auf.
- Version 9.9.4 → 9.9.5.

## [9.9.4] — 2026-06-11

### Fixed
- **DeathBell.lua:184 Error-Flut (Count: 970):** bei progress==1 lief die Alpha-Kurve in einen Float-Drift (textAlpha = -0.000001) — SetAlpha warf, der OnUpdate-Handler brach VOR dem Hide() ab und feuerte den Fehler dann jeden Frame erneut. Fix: Ende-Check kommt jetzt ZUERST, alle Alphas geclampt auf 0..1.
- **Debug-Fenster, Online-Box ueberlappte:** der "(Niemand online)"-FontString wurde nie versteckt (GetChildren() liefert nur Frames, keine FontStrings) und pro Refresh kamen NEUE Row-Frames dazu (Frame-Leak alle paar Sekunden). Jetzt: FontString-Pool, lange Namen werden abgeschnitten statt umgebrochen.
- **"Serverweit/Gilde" zaehlt jetzt real:** die Gilden-Zaehlung mergt ServerNet-Heartbeats mit der Sync-Onlineliste (GUILD-Addon-Messages) — Gildenkollegen mit aelteren Versionen (z.B. v9.8.5 ohne GUILD-Heartbeat) werden damit sofort erfasst. Serverweit ist nie kleiner als die Gilden-Zahl.

### Neu — Death-Push, Gilden-Pushes & Trauer-Text
- **GuildChronicle-Death-Banner:** das neue Artwork (Stahlrahmen, Skull, Fluegel) ist jetzt die Todes-Benachrichtigung. JPEG mit .png-Endung -> gecroppt, Schwarz per Luminanz-Maske freigestellt, 1024x1024 PoT (Artwork in den oberen 630px, TexCoord-Trim), 460x283 am oberen Bildschirmrand, skaliert mit dem Overlay-Regler. Name in hellem Rot, Level/Zone und Letzte Worte im dunklen Lederfeld, Klassen-Icon daneben. Anzeigedauer 1.2s -> 4s (Lesezeit!), weicher Fade.
- **Gilden-Pushes (Setting `guildPushEnabled`, Standard AN):** erreichte Meilensteine ("Meilenstein erreicht: Stufe 40") und Titelwechsel ("Traegt nun den Titel: ...") gehen als Einzeiler in den ECHTEN Gildenchat — sichtbar fuer alle, auch ohne Addon. Titel-Push nur bei echtem Wechsel, nicht beim Re-Select.
- **Persoenliche Trauer-Nachricht (Opt-in, Standard AUS):** beim Tod eines Gildenmitglieds schreibt dein Char einen konfigurierbaren Text in den Gildenchat. `/gdl trauer an|aus`, `/gdl trauer <Text>` ({name} = Gefallener). Zufaellige 4-9s Verzoegerung, Dedup pro Tod, nie beim eigenen Tod.
- Version 9.9.3 → 9.9.4.

## [9.9.3] — 2026-06-11

### Design — Inhaltsverzeichnis: immer offenes Register (Akkordeon entfernt)
- **Alle 16 Kapitel dauerhaft sichtbar**, kein Auf-/Zuklappen mehr. Die Kategorien sind keine Buttons mehr, sondern schlanke 13px-Trennzeilen: Farb-Akzent, GOLD-Versalien, Haarlinie vom Label bis zum rechten Rand (klassischer Registersatz). Chevron, Kapitelzaehler, Hover- und Klick-Logik entfernt.
- **Layout-Budget verifiziert:** Start 54 + 4 Trenner a 14 + 16 Eintraege a 19px + 3 Zwischenluecken = 426px auf der 448px-Seite — passt mit Luft bis zum Fusszitat. Eintragshoehe dafuer von 21 auf 19px, Schriftgroesse bleibt bei den lesbaren 11px.
- **Aufgeraeumt:** `tocExpanded`-Persistenz, Akkordeon-Normalisierung beim Laden und das Auto-Aufklappen in SetActiveChapter ersatzlos gestrichen — weniger Zustand, weniger Kanten.
- Version 9.9.2 → 9.9.3.

## [9.9.2] — 2026-06-11

### Design — Buch-Artwork Nr. 2: das ledergebundene Tagebuch
- **Neues Material `GDL_Book3.png`** (2048x1024 PoT, 1,9 MB): aufgeschlagenes Tagebuch im Ledereinband mit hellem Pergament. Quelle wieder ein JPEG mit .png-Endung — auf Buch-BBox gecroppt. Aspekt 1.68 vs. Frame 1.73 = praktisch verzerrungsfrei; Seiten-Luminanz 187-207, KEINE kuenstliche Aufhellung noetig (die Tinten-Palette sitzt nativ). `GDL_Book2.png` (verbranntes Buch) geloescht.
- **Seiten auf die grosse helle Flaeche gesetzt:** links 84/-36 @ 352x448 (Inhalt beginnt nach dem fleckigen Seitenstapel-Rand), rechts -78/-36 @ 352x448. Gegenueber dem verbrannten Buch +53px Seitenhoehe — der Scroll-Bereich der rechten Seite zeigt ~20% mehr Inhalt. Titel/Ornamente wieder hoeher (keine Runen-Borduere mehr im Artwork).
- **Inhaltsverzeichnis entlang der linken Seite, Quest-Log-Typografie:** Buchtitel MORPHEUS 20, Kapitel-Eintraege FRIZQT 11px (vorher 10) mit 21px Zeilenhoehe und 17px Icons, Kategorie-Header 10px GOLD-Versalien — Lesbarkeit wie im Quest-Log, Stil bleibt Buch. Akkordeon-Verhalten bleibt (volles TOC waere auch hier hoeher als die Seite).
- Version 9.9.1 → 9.9.2.

## [9.9.1] — 2026-06-11

### Design — Das neue Buch (Artwork-Austausch)
- **Neues Buch-Material `GDL_Book2.png`** (2048x1024 PoT, 2,3 MB): fotorealistisches aufgeschlagenes Buch mit Ledereinband, zerrissenem Falz, verbrannten Raendern, Runen-Borduere, Allianz/Horde-Wasserzeichen und Blutspritzern. Quelle war ein JPEG (2800x1594) mit .png-Endung — auf Buch-Bounding-Box gecroppt, die Textzonen beider Seiten per weicher Ellipsen-Maske um ~22% aufgehellt und leicht entsaettigt (Tinten-Lesbarkeit!), Raender unangetastet dramatisch. Alte `Book.tga` geloescht.
- **Geometrie ans Artwork angepasst:** Seiten in die hellen Kernzonen gerueckt (links 50/-48 @ 340x395, rechts -70/-48 @ 354x392), TOC-Breiten 345->332, Stats-Bar 340->324, Titel unter die Runen-Borduere (-24/-26), Close-Button von der zerfransten Ecke weg.
- **Gemalter Buchfalz entfernt:** AddBookAtmosphere ist jetzt bewusst leer — das Artwork bringt Falz, Schatten und Vignette mit; jede gemalte Linie wuerde mit dem fotorealistischen Material kollidieren.
- **TOC als Akkordeon:** mit allen 4 Kategorien offen waere das Verzeichnis 452px hoch — die neue Seite hat 395 (verbrannte Unterkante). Jetzt ist immer genau EINE Sektion offen (Registerbuch-Verhalten): Klick oeffnet eine und schliesst die anderen, das aktive Kapitel klappt seine Sektion automatisch auf, Alt-Speicherstaende mit mehreren offenen Sektionen werden beim Laden normalisiert. Passt garantiert immer.
- Version 9.9.0 → 9.9.1.

## [9.9.0] — 2026-06-11

### Fixed — Sync-Hygiene (Debug-Fenster-Befunde)
- **ServerNet-Praesenz ("Serverweit: 1, Gilde: 1" trotz zweitem Nutzer):** Heartbeats liefen NUR ueber den versteckten Custom-Channel. Scheitert der Beitritt (Classic-Limit: 10 Channels — HC-Spieler haben hardcoredeaths, hcdeathalerts, world, ...), herrschte Funkstille, und der Empfangsfilter verwarf alles ausser channel=="CHANNEL". Jetzt: HI-Heartbeat laeuft ZUSAETZLICH als GUILD-Addon-Message (kein Channel-Limit), der Empfang filtert nur noch auf den exklusiven Prefix. Dazu Gilden-Fallback via GetGuildInfo("player") in SendHello und GetGuildOnlineCount — der erste Heartbeat lief bisher oft VOR dem Guild-Scan und sendete guild="".
- **PING-Salven / 3x-PONG-Spam:** GUILD_ROSTER_UPDATE feuert in Classic salvenweise; jede Salve stapelte Quick-Ping-Timer -> mehrere PINGs -> jeder Empfaenger antwortete mehrfach (die drei "<- PONG Mareska" im Log). Quick-Ping jetzt debounced (1 pending, min. 30s Abstand).
- **Berufe-Broadcast-Dauerfeuer:** SKILL_LINES_CHANGED feuert bei JEDEM Skillpunkt — beim Farmen ging alle paar Sekunden ein PROF-Broadcast an die Gilde (im Log: zwei Broadcasts binnen 4s). Event-Trigger laufen jetzt ueber QueueBroadcast: Salven werden gebuendelt, min. 60s Abstand; der periodische Ticker bleibt unveraendert.
- **Debug-Fenster, Memory: 0.0 KB:** GetAddOnMemoryUsage liefert ohne vorheriges UpdateAddOnMemoryUsage() immer 0. Behoben.
- **Zaehl-Verwirrung beschriftet:** "Addon-User" (Sync) zaehlt nur ANDERE, ServerNet zaehlt INKLUSIVE einem selbst — beide Anzeigen kennzeichnen das jetzt ("(+ du)" / "(inkl. dir)"), damit 1 vs. 1 vs. 1 nicht mehr nach Sync-Bruch aussieht.
- Version 9.8.9 → 9.9.0.

## [9.8.9] — 2026-06-11

### Fixed — Gilden-Wettbewerb Berechnungen (3 Sync-Bugs)
- **Exponentiell explodierende Kill-Zahlen behoben** (Screenshot: 119.967 Kills bei real 978). Ursachenkette: (1) `CHAT_MSG_ADDON` liefert den Sender als "Name-Realm", der Eigen-Echo-Check verglich aber mit dem nackten Namen — griff also NIE; (2) das eigene Echo setzte `_remote_total` auf die eigenen Daten; (3) der naechste Broadcast summierte `_remote_total` MIT in die Kill-Zahl — Verdopplung pro Sync-Zyklus (978 → 1.956 → ... → 119.967). Fixes: Sender wird per `strsplit("-")` normalisiert, P-Nachrichten ueber den eigenen Spieler werden grundsaetzlich verworfen (lokale Daten sind autoritativ), und `_remote_total` fliesst nie mehr in die Broadcast-Summe.
- **Punkte der Gildenkollegen ueberleben jetzt den Relog.** LoadState leitete Punkte aus den Kill-Kategorien ab — Remote-Spieler haben aber nur `_remote_total`, also standen alle Kollegen nach jedem Login mit 0 Punkten da, bis ihr naechster Broadcast kam (Screenshot: "Lastinline 0 Pkt | 2676 Kills"). Punkte werden jetzt explizit persistiert (`db.playerPoints`); fuer den eigenen Spieler bleiben die lokalen Kill-Kategorien autoritativ.
- **Selbstheilung:** beim Laden wird ein vergiftetes `_remote_total` des eigenen Spielers entfernt — die kaputten Bestandswerte korrigieren sich beim naechsten Login von allein, kein DB-Reset noetig. Verifiziert konsistent: Gildenscore = Summe Spielerpunkte − Strafpunkte; Jagdstatistik-Aufschluesselung (16×25 + 962×1 = 1.362) stimmt.

### Design — Gilden-Wettbewerb Kapitel neu gesetzt
- **Gilden-Rangliste:** zweizeilige Eintraege — Name + Punkte oben, darunter eine duenne Gold-Fortschrittslinie auf blasser Spur. Vorher lag der Gildenname AUF einem dunklen Balken (Matsch-Optik aus dem Screenshot). Eigene Gilde: warme Toenung, Gold-Akzentbalken links, dunkelste Tinte + "(wir)" statt "*". Raenge #1/#2/#3 als Gold/Silber/Bronze-Medaillenfarben.
- **Punkte-Kopf:** Score jetzt 24px in dunkelster Tinte mit kleinem "PUNKTE" in Gold daneben (vorher rotes "1.387 Punkte" in Warnfarbe — Punkte sind kein Alarm).
- **Unsere Kaempfer:** Medaillen-Raenge, eigener Charakter mit warmer Hervorhebung, Punkte in Gold / Kills in verblasster Tinte getrennt.
- **Jagdstatistik:** Mini-Balken pro Kategorie (Anteil an der groessten) — die Verteilung ist jetzt auf einen Blick lesbar.
- **Punktelegende:** zweispaltig statt langer Einzelliste — halbe Hoehe.
- Version 9.8.8 → 9.8.9.

## [9.8.8] — 2026-06-11

### Design — Inhaltsverzeichnis neu gesetzt
- **Neue Gliederung (4 statt 5 Kategorien):** "Tode & Gedaechtnis" enthaelt jetzt BEIDE Karten (Todeskarte + Heatmap waren vorher in zwei verschiedenen Kategorien), "Die Ausdauernden" gehoert zu "Ruhm & Fortschritt", "Schwarzes Brett" zu "Gilde & Gemeinschaft". Roemische Nummern I-XVI neu durchgezaehlt. Erste Kategorie standardmaessig aufgeklappt.
- **Gold-Chevrons statt Blizzard +/- Buttons:** die gruenen Plus/Minus-Quadrate passten nicht ins Pergament. Jetzt: goldener Pfeil (rechts = zu, nach unten rotiert = offen), Hover laesst Label und Chevron aufleuchten. Zugeklappte Kategorien zeigen rechts die Kapitelzahl ("4 Kapitel" in verblasster Tinte), dazu eine Gold-Haarlinie als Sektionstrenner.
- **Folio:** klassische Seitenzahl am unteren Blattrand der rechten Seite ("—  VII  —"), passend zum aktiven Kapitel.
- **Wechselnde Zitate:** der Fussbereich zieht bei jedem Oeffnen eines von sechs Zitaten — das Buch wiederholt sich nicht.

### Fixed — Fehlerjagd (statische Analyse mit luacheck ueber alle 52 Dateien)
- **UIChapters: kaputte Tabellen-Syntax `r, g, b = 0.08, ...`** in GUILD_CATS — Lua parst das im Konstruktor als Array-Eintraege + nur `b=`-Zuweisung; die Gilden-Achievement-Kategorien hatten dadurch nie ihre Farben (fielen still auf Fallbacks). Jetzt korrekt `r=, g=, b=`.
- **UIOverlay: `CLASS_ICONS` war ein globaler nil-Zugriff** (das Modul holte sich nur CLASS_COLORS aus der UI-Table) — `CLASS_ICONS[classId]` haette beim Rendern der Chronik-Zeilen einen Lua-Error geworfen. Local ref ergaenzt.
- **GuildStats: `CLASS_NAMES` existierte nirgends** — `pairs(nil)` = Lua-Error, sobald die Klassen-Verteilung berechnet wird. Tabelle (classId -> classFile) ergaenzt.
- **WhatsNew: `C_FEATURE`/`C_IMPROVE` undefiniert** — drei Timeline-Eintraege fielen still auf Grau zurueck. Konstanten definiert.
- **UI: Kapitel-Titel `adventurers`/`chronicle` fehlten** in CHAPTER_TITLES — die Seite zeigte als Ueberschrift nur "Kapitel".
- **UI: gespeicherter Kapitel-Index** wird beim Oeffnen jetzt ueber die Action aufgeloest statt ueber den rohen Zahlenindex — bei TOC-Umsortierungen (wie dieser) zeigte der alte Index sonst aufs falsche Kapitel.
- Version 9.8.7 → 9.8.8.

## [9.8.7] — 2026-06-11

### Design — Buchsatz-Ueberarbeitung ("Eine Tinte, ein Buch")
- **Zentrale Tinten-Palette** in UI.lua (`UI.INK` / `UI.INK_RGB`): 7 Stufen — DARK (Titel/Namen/Werte), BODY (Fliesstext), SOFT (Sekundaer), FADED (Meta/Datum), GOLD (Akzente/Nummern), GOLDHI (Hover), RED (Tod). Vorher waren ueber 30 verschiedene Brauntoene quer durchs Buch verteilt; ~200 Farb-Token in UIChapters/UIWindows/UIGuildStats/UI auf die Palette remapped. GameTooltip-Farben (helle Schrift auf dunklem Grund) bewusst unangetastet.
- **Klarere Hierarchie:** Buchtitel & Kapitel-Ueberschriften in dunkelster Tinte (vorher zu helles Mittelbraun), Buchtitel 18->19px, rechter Seitentitel 16->18px. Kapitel-Nummern (roemische Ziffern) und Gildenname in Gold. TOC-Kategorien jetzt GOLD + VERSALIEN — lesen sich wie Buchsektionen, die dunklen Kapitel klar darunter. Hover = Gold-Highlight, aktives Kapitel = dunkelste Tinte + goldene Nummer.
- **Fremdfarben raus:** blaues "Abenteurer"-Banner (inkl. blauem Schimmer) -> Pergament + Gold; Lila-Sektionsheader (Monster/Patreon) -> gedaempftes Pflaumen-Sepia; Magenta-Highlight -> Gold; Neongruen (00CC00/00AA00) und Knallrot (CC3333) -> die etablierten Seiten-Toene; Zonen-Blau -> gedaempftes Eisengallus-Blau (3A5068).
- **Flaechen statt Balken:** Kapitel-Banner (3 verschiedene Dunkelwerte) und MakeBookRow-Zeilen lagen als 30-45% dunkle Schleier auf dem Pergament — jetzt warme Toenung bei 9-16%, Lesbarkeit der dunklen Tinte deutlich besser. Stats-Werte von hellem Braun auf dunkle Tinte (waren der kontrastschwaechste Text im Buch), Labels in Versalien.
- **Scrollbalken eingefaerbt:** der blaugraue Blizzard-Standard-Scrollbalken faellt nicht mehr aus dem Buch (Thumb + Pfeile in warmem Gold-Braun).
- **Kleinkram:** Buttons (CreateElegantButton) hatten dunkles Gold auf dunklem Grund — Label-Kontrast gefixt. Rang-Medaillen #1/#2/#3 jetzt echte Gold/Silber/Bronze-Abstufung. TOC- und Listen-Icons croppen den schwarzen Icon-Rand (SetTexCoord). Mojibake-"Schloss" im Supporter-Lock (doppelt kaputtes UTF-8-Emoji, FRIZQT kann eh keine Emojis) durch WoW-Lock-Textur ersetzt.
- Version 9.8.6 → 9.8.7.

## [9.8.6] — 2026-06-11

### Performance — Frame-Pooling fuer das gesamte FX-System
- **Frame-Leak behoben:** Frames sind in WoW nicht garbage-collectbar. Bisher erzeugte JEDES Todespopup ~35 neue Frames (SoulRise 19, ArcaneOrbit 6, GlowRings, Shake-Ticker, revealFade-Ticker) und jedes Buch-Oeffnen weitere ~12 (Embers, BreathGlow) — die lebten alle bis zum /reload. Jetzt: generische `AcquireFXFrame`/`AcquireTicker`-Pools in AnimFX.lua; alle Einmal- und Ambience-Effekte (ScreenFlash, Vignette, ShakeFrame, GlowRing, ShimmerSweep, RuneCircle, DustMotes, SoulRise, ArcaneOrbit, RuneExplosion, EmberAmbience, TypewriterText, ScrollUnfurl) holen und releasen ihre Frames. BreathGlow wird pro Ziel-Frame gecacht. revealFade in UIOverlay.lua nutzt einen eigenen Ticker-Pool.
- **Permanente OnUpdate-Poller ersetzt:** Achievements (30s-Check) und MapMarkers (3s-Minimap-Update) liefen als OnUpdate bei jeder gerenderten Frame — jetzt `C_Timer.NewTicker`.
- **Minimap-Orbit gedrosselt:** Die 3 Orbit-Runen am Minimap-Button wurden mit voller Framerate repositioniert (bei 144 FPS: 432 SetPoint-Calls/s, dauerhaft). Jetzt ~30 FPS — optisch identisch bei 0.85 rad/s.
- **KillerTracker CLEU-Pfad entschlackt:** Damage-Subevents per Lookup-Table statt Regex-Match pro Combat-Event; `lastDamage`-Tabelle wird wiederverwendet statt pro Damage-Tick neu allokiert (GC-Druck im Kampf). `deathInfo` ist deshalb jetzt eine Kopie.

### Fixed
- **Mob-Kill-Zaehler (LastHours) zaehlte nie:** `UNIT_DIED` traegt keinen sourceGUID — der Check `sourceGUID == player` war immer false. Jetzt `PARTY_KILL` (feuert beim Todesstoss des Spielers, MIT sourceGUID). Das Abschiedsjournal zeigt damit erstmals echte Kill-Zahlen.
- **SWING_DAMAGE-Spellname:** KillerTracker las Param 13 blind als spellName — bei Nahkampftreffern ist das der Overkill-Wert. Nahkampf hat jetzt korrekt keinen Spellnamen, ENVIRONMENTAL_DAMAGE liefert den Umwelt-Typ.
- **`addon._compat = nil` Landmine entfernt:** GuildDeathLog.lua (laedt VOR den Modulen) hat den Compat-Table genullt; Deathlog.lua und GuildCompetition.lua lesen ihn aber zur Ladezeit. Die Fallback-Ketten haben das bisher abgefangen — jetzt bleibt der Table einfach stehen.

### Texturen
- **`GDLDeathFrame_New.png` von 3009x2004 (nicht Power-of-Two!) auf 1024x1024 PoT** gebracht: Artwork auf 1024x682 skaliert, transparent gepaddet, `SetTexCoord(0, 1, 0, 682/1024)` in UIOverlay.lua. Datei: 4,6 MB -> 1,0 MB; VRAM: ~24 MB (NPOT-Padding) -> 4 MB. Optisch unveraendert (Popup bleibt 660x460).
- **Tote Texturen entfernt:** `DeathPopup.png` war ein WebP mit falscher Endung (WoW laedt das gar nicht), `DeathPopup.tga` (6,3 MB) und `DeathFrame.tga` (0,7 MB) wurden nirgends referenziert. ZIP ~7 MB kleiner.
- Version 9.8.5 → 9.8.6.

## [9.8.5] — 2026-06-07

### Changed — Meilenstein-Popup: echter Pergament-Look
- Hintergrund jetzt echte Pergament-Textur (UI-Achievement-Parchment) statt Farbflaeche; Titel/Beschreibung in dunkler Schrift fuer Lesbarkeit. Kategoriefarbe bleibt auf Akzentleiste/Siegel/Zeitbalken. Deutlich sichtbarer Unterschied zum alten dunklen Balken.

### Fixed — Mehrfach-Push endgueltig
- Dedup-Guard direkt in `UI:ShowMilestoneToast` (Engpass, durch den JEDER Toast muss), persistent in `GuildDeathLogDB.toastShown`, GUID-gekeyt. Egal welches Modul auslöst (Milestones, SurvivalStreak): jeder Meilenstein erscheint nur einmal pro Charakter. `force`-Param fuer bewusste Vorschau.
- Version 9.8.4 → 9.8.5.

## [9.8.4] — 2026-06-07

### Fixed
- **Streak-Meilenstein-Toasts poppten bei jedem Login erneut.** Der "bereits angekündigt"-Status (`_announcedMilestones` in SurvivalStreak.lua) war eine modul-lokale Lua-Tabelle und wurde pro Session zurückgesetzt. Jetzt persistent in `GuildDeathLogDB.streakAnnounced` (GUID-gekeyt) → jeder Streak-Meilenstein erscheint nur noch genau einmal.

### Changed — Meilenstein-Popup hübscher
- Hintergrund von near-black auf warmes Dunkelbraun umgestellt (Pergament-Plakette statt schwarzem Balken), passend zum Buch.
- Grelle Kategoriefarben (Grün/Blau/Rot/Lila) auf gedämpfte, erdige Töne gebracht — Kategorie bleibt erkennbar, beißt sich aber nicht mehr mit dem Sepia-Look.
- Struktur/Animationen unverändert.
- Version 9.8.3 → 9.8.4.

## [9.8.3] — 2026-06-07

### Changed — Buch-UI aufgeräumt (die "Kästchen" raus)

- **Eck-Rechtecke entfernt:** `AddBookAtmosphere` zeichnete zwei dunkle 50×40-`SetColorTexture`-Flächen in die Ecken — gedacht als Vignette, aber `SetColorTexture` hat harte Kanten → sichtbare Kästen (die eingekreiste Box oben-links). Raus. Die Buch-Textur hat ohnehin abgenutzte Ecken.
- **Gold-Quadrate entfernt:** die "Rauten"-Endkappen der Ornament-Linien (`ornDotL/ornDotR`) waren 6×6-`SetColorTexture`-Quadrate → das gelbe Kästchen aus den Screenshots. Die dünnen Ornament-Linien bleiben als dezenter Akzent.
- **Toolbar-Icons** waren bereits randbereinigt (`SetTexCoord`), bleibt so.
- Buch-Textur, Layout und Daten unverändert — reine Aufräumarbeit an den Overlays.
- Version 9.8.2 → 9.8.3.

## [9.8.2] — 2026-06-07

### Changed — Rebranding: "Guild Chronicle"

- Der **angezeigte Name** ist ab jetzt überall **Guild Chronicle** (TOC-Titel, Chat-Präfix `[Chronicle]`, Tooltips, Einstellungen, Lade-Meldung).
- Neue Slash-Befehle **`/chronicle`** und **`/gc`** — die alten (`/gdl`, `/buch`, `/book`) funktionieren weiterhin.
- **Bewusst unverändert (Kompatibilität, kein Datenverlust):** Ordnername `GuildDeathLog`, interne Tabelle, SavedVariable `GuildDeathLogDB`, Addon-Message-Prefixes und der Netz-Channel. Ein Umbenennen dieser technischen IDs würde alle gespeicherten Todesdaten löschen und Cross-Version-Sync brechen.
- Der immersive **Buchtitel im Spiel ("Das Buch der Gefallenen") bleibt vorerst** — das ist eine gestalterische Entscheidung für das anstehende Redesign.
- Version 9.8.1 → 9.8.2.

## [9.8.1] — 2026-06-05

### Fixed — TBC Classic 2.5.5 Kompatibilität

- **Expansion-Erkennung repariert (Kernbug).** `Milestones.lua` und `Achievements.lua` lasen `addon._compat` zur Ladezeit — das wird vom Core aber bereits nach `GDL.*` kopiert und auf `nil` gesetzt, *bevor* die Module laden. Dadurch waren `_isClassicEra` und `_isTBC` auf TBC **beide `false`**, `_expTag` hing fest auf `"classic"`. Folgen auf 2.5.5:
  - alle TBC-Milestones (`expansion = "tbc"`, u.a. Level-70-Cap) wurden weggefiltert,
  - der Level-60-Meilenstein zeigte „Level 60 - UNSTERBLICH" statt „Auf nach Outland",
  - das Level-70-Achievement triggerte nie.
  Jetzt lesen beide Module aus dem persistenten `GDL.isTBC` / `GDL.isClassicEra` → korrekte Expansion-Logik.
- **`GuildRoster()` abgesichert:** mehrere Module rufen das globale `GuildRoster()` roh auf; falls ein Client (z.B. spätere TBC-Builds) es zugunsten von `C_GuildInfo.GuildRoster()` entfernt, setzt Compat jetzt defensiv einen Alias → kein „attempt to call a nil value".

### Verified

- TOC trägt beide Interfaces (`11508` Classic Era + `Interface-BCC: 20505`).
- HC-Todes-Channel & Hardcore-spezifische Logik bleiben korrekt auf Classic Era beschränkt (`hasHCChannel`), werden auf TBC sauber übersprungen.
- Keine `SetGradient`/`CreateColor`-Nutzung; versionssensible APIs (`C_Spell`, `C_AddOns`, `C_GuildInfo`) sind geguarded oder universal verfügbar.
- Version 9.8.0 → 9.8.1.

## [9.8.0] — 2026-06-05

### Added — Serverweite Präsenz (BETA)

- **Neues Modul `ServerNet.lua`:** zählt, wie viele GuildDeathLog-Nutzer **serverweit** online sind. Jeder Client schickt alle 2 Min einen unsichtbaren Addon-Heartbeat (`HI|version|guild`) über einen versteckten, passwortgeschützten Channel (`guilddeathlognet`); aus den eingehenden Heartbeats wird die Online-Zahl gebildet (TTL 6 Min). Es wird **kein sichtbarer Chat** gesendet.
- **Debug-Seite** zeigt jetzt: `Serverweit: X  Gilde: Y` (serverweite Addon-Nutzer und davon in der eigenen Gilde).
- **Hinweis:** Das ist reine Präsenz/Statistik und als **BETA** markiert — der Channel-Netzwerkcode konnte nicht ingame getestet werden. Bitte einmal prüfen und Feedback geben.

### Changed — Backfill verpasster Gildentode

- **Periodischer Re-Scan** (`Deathlog:ScanData` alle 3 Min): DNL synct serverweite Tode im Hintergrund nach, dadurch landen **verpasste eigene Gildentode** jetzt auch nachträglich automatisch im Buch — nicht nur beim Login. Bestehender 30s-Eigenthrottle bleibt.
- Der Import bleibt strikt **gildengefiltert** (`TryImportEntry`: nur Einträge mit `guild == eigene Gilde`).
- **Architektur-Klarstellung:** Der eigentliche serverweite Tod-Backfill läuft über DNL/Deathlog (die diese Daten netzweit sammeln), nicht über einen parallelen GDL-Channel — das wäre Doppelarbeit. `ServerNet` macht nur die Nutzer-Präsenz.
- Version 9.7.9 → 9.8.0.

## [9.7.9] — 2026-06-05

### Fixed — Einklappbares Inhaltsverzeichnis

- **Toggle-Bug behoben:** Die Gruppe mit dem aktuell geöffneten Kapitel ließ sich nicht zuklappen — `RelayoutTOC` erzwang bei *jedem* Durchlauf `_open=true` für die aktive Kategorie, also schnappte sie sofort wieder auf. Das Zwangs-Öffnen ist raus; die aktive Gruppe wird jetzt nur noch beim *Navigieren* zu einem Kapitel (`SetActiveChapter`) aufgeklappt. Alle Gruppen — auch die aktive — lassen sich frei auf/zu klappen.
- **Startposition:** Liste begann bei `y = -50`, direkt unter dem Buchtitel (zu knapp). Jetzt `-60` → klarer Abstand zum Titel/Ornament.
- **Standard:** ohne gespeicherten Zustand ist nur noch die aktive Gruppe offen (vorher zusätzlich immer Gruppe 1).
- Zeilenabstand der Gruppen leicht reduziert, damit auch „alles aufgeklappt" sauber in die Seite passt.
- Version 9.7.8 → 9.7.9.

## [9.7.8] — 2026-06-05

### Changed — Einklappbares Inhaltsverzeichnis

- **Linke Buchseite komplett neu organisiert.** Statt 21 fest sichtbarer Zeilen (5 Kategorien + 16 Kapitel, randvoll bis zur Unterkante) sind die Kategorien jetzt **ein-/ausklappbar**: ein Klick auf den Gruppenkopf faltet die Kapitel ein oder aus. Ein Plus/Minus-Knopf (`UI-PlusButton`/`UI-MinusButton`) zeigt den Zustand.
- **Standard:** die Gruppe des aktuell geöffneten Kapitels ist offen, der Rest eingeklappt → typischerweise ~9 sichtbare Zeilen statt 21 (241px statt 469px Höhe). Navigiert man zu einem Kapitel, öffnet sich dessen Gruppe automatisch.
- **Zustand wird gemerkt** (`GuildDeathLogDB.tocExpanded`) — wer alles offen haben will, klappt auf, und es bleibt so. Selbst voll aufgeklappt passt die Liste jetzt in die Seite (vorher wurde Kapitel XVI abgeschnitten).
- Die Kapitel-Einträge selbst (Hover-Glow, aktiver Balken, Tooltips) sind unverändert; nur Gruppierung + Positionierung (`UI:RelayoutTOC`) kamen dazu.
- Version 9.7.7 → 9.7.8.

## [9.7.7] — 2026-06-05

### Fixed — Rand-Artefakte am Buch

- **Flackernde Kästchen / „Pixel-Glimmern" am Buchrand entfernt.** Ursache war `AddBookAtmosphere`: ein Parallax-Lichtreflex (`pageSheen`) und 9 Staub-Partikel (`MOTES`, je eine harte 2px-`SetColorTexture`-Fläche) wurden relativ zum vollen Rahmen positioniert — der Buch-Textur-Rahmen (`900×520`, `SetAllPoints`) hat oben aber einen transparenten Rand, also saßen die Effekte *über* der sichtbaren Pergamentkante und drifteten mit der Maus. Komplett entfernt.
- **Buchfalz-Schatten (Spine):** Die Schatten-Linien waren ~`H`-hoch und am Rahmen-Top (`-10`/`-15`) verankert → ragten als Streifen über die Pergamentkante. Jetzt auf die Seitenfläche begrenzt (`SPINE_TOP = -42`, feste Höhe), kann nicht mehr überstehen.
- **Zwei Per-Frame-`OnUpdate`-Ticker** (Parallax + Motes) damit ersatzlos eliminiert — ruhigeres Bild, weniger CPU.

### Changed — Lesbarkeit der Kapitelliste

- **Leader-Striche entfernt:** Die 1px-Linie hinter jedem Kapiteltitel (`dots`, bis zum rechten Rand) erzeugte den „viele kleine Striche"-Eindruck. Raus → ruhigere, klarere Liste.
- **Römische Zahlen** (`I.`–`XVI.`): Farbe von blassem `#8A6848` auf lesbares `#6E4E1E` (Initial- und Inaktiv-Zustand), aktiver Eintrag bleibt dunkler `#5C3A10`.
- **Werkzeug-Icons (unten rechts):** schwarzer Icon-Eigenrand per `SetTexCoord(0.08, 0.92, …)` weggeschnitten; ausklappbarer Reiter startet jetzt eingeklappt.
- Version 9.7.6 → 9.7.7.

## [9.7.6] — 2026-06-05

### Changed — Buch-Politur

- **Werkzeug-Leiste neu:** Die Icons unten rechts hatten einen dunklen Backdrop-Balken (`ChatFrameBackground`, fast schwarz). Ersetzt durch einen ausklappbaren Reiter — ein kleiner Knopf klappt die 6 Werkzeuge (Aktualisieren, Sync, Export, Einstellungen, Debug, Supporter) nach links aus/ein. Dezente warme Pergament-Fläche statt schwarzem Block, Icons voll deckend.
- **„Schwarze Striche" entschärft:** Das waren die dunklen, gezackten Risskanten der Buch-Textur, durch die Stauchung (1024×512 auf 900×520-Rahmen) zu harten Marken verdichtet. Dunkle Kantenpixel zu warmem Braun angehoben, Außenkante leicht weichgezeichnet — Risskanten-Look bleibt, hartes Schwarz weg.
- **Buch-Hintergrund:** Die non-power-of-two `Book.png` (1600×911, hoher VRAM-Bedarf) entfernt; es bleibt die saubere Power-of-Two `Book.tga` (1024×512). Keine Lade-Mehrdeutigkeit mehr.

### Fixed — Versions-Anzeige

- `GDL.version` war separat als `"9.6.2"` hardcodiert (Debug-Seite zeigte deshalb 9.6.2). Liest jetzt via `GetAddOnMetadata` direkt aus der TOC → eine einzige Quelle, kein Desync mehr. `currentVersion` (Migration) und der Slash-Command-Header ziehen ebenfalls aus `GDL.version`.

## [9.7.5] — 2026-06-05

### Changed — Lesbarkeit & Buch-Kontrast

- **Navigations-Überschriften (linke Seite):** Die gesättigten Bunt-Farben (Rot/Grün/Blau/Orange/Türkis auf Pergament — schlechter Kontrast und gegen die Sepia-Palette) ersetzt durch kräftiges Dunkel-Sepia (`#3A2208`). Pro Kategorie jetzt ein kleiner Akzent-Balken in gedämpfter Farbe → Struktur bleibt, Lesbarkeit gewinnt. Schriftgröße 8 → 9, stärkerer Schatten.
- **Seitentitel (rechte Seite):** Farbe `#6B4510` → dunkler `#4A2C06`, Schatten-Alpha 0.15 → 0.28.
- **Ruhmeshalle:** Banner-Werte (`#8A6010`) und "keine Einträge"-Text (war Off-Theme-Grün `#3A5A30`) auf lesbares Dunkel-Sepia gezogen.
- Version 9.7.4 → 9.7.5.

## [9.7.4] — 2026-06-05

### Fixed & Hardened — Stabilitäts-Audit

- **Nameplate-Titel-Hook gehärtet:** Der `hooksecurefunc("CompactUnitFrame_UpdateName")`-Callback (feuert pro Nameplate-Namensupdate) ist jetzt vollständig in `pcall` gekapselt. Ein Fehler dort kann das UI nicht mehr pro Frame mit Fehlern zumüllen. Prophylaxe gegen den gemeldeten Fehler-Spam.
- **Doppelte Tod-Verarbeitung behoben:** `Deathlog.lua` registrierte zusätzlich zu `DNLBridge` einen eigenen `DeathNotificationLib_HookOnNewEntry` **plus** Secure-Hook → jeder Tod lief bis zu 3× durch `RecordLocalDeath`. Live-Feed läuft jetzt ausschließlich über `DNLBridge`; Deathlog-Hook nur noch als Fallback, falls DNLBridge fehlt. Der SavedVariables-Import (Alt-Daten) bleibt aktiv.
- **Achievement-Helfer Forward-Deklaration:** `GetNewestDeathTimestamp` / `GetOldestDeathTimestamp` wurden in den `check`-Closures referenziert, aber erst danach als `local function` definiert → die Closures zeigten aufs globale `nil` (vom `pcall` verschluckt). Dadurch konnten `g_nodeaths_7d`, `g_nodeaths_30d` und `g_old_30d` nie auslösen. Jetzt sauber forward-deklariert.

### Changed — Paket-Hygiene

- UTF-8 BOM aus `MapMarkers.lua`, `Deathlog.lua`, `Milestones.lua` entfernt.
- 5 tote Patch-/Scratch-Dateien aus dem Paket entfernt (waren nicht in der TOC, wurden nie geladen): `SyncDedup_Patch.lua`, `Sync_GDLOnly.lua`, `UIChapters_Patch.lua`, `GDL_Commands_v930.lua`, `GDL_Settings_v930.lua`.
- Version 9.7.3 → 9.7.4 (TOC, Config.lua, WhatsNew, CHANGELOG).

## [9.7.3] — 2026-03-13

### Changed — Einstellungen-Fenster visuelles Redesign

- Passender Stil zum Kalender-Fenster: gleicher Parchment/Gold-Rahmen, Schatten, Titel-Trennlinie
- Checkboxen: custom elegante Quadrate mit Gold-Haken (UI-CheckBox-Check Textur) statt WoW UICheckButtonTemplate
- Buttons (Test / Reset Pos / OK): dunkel-goldene ElegantButton statt roter UIPanelButtonTemplate
- Trennlinien zwischen Titelbereich, Slider-Bereich und Footer-Buttons
- Slider-Beschriftung als eigenes FontString statt OptionsSliderTemplate-Text (Kontrolle ueber Position)

## [9.7.2] — 2026-03-13

### Fixed — Altes Kalender-Standalone-Fenster entfernt

- `Calendar:Show()` und `Calendar:Toggle()` leiten jetzt immer ins Buch (Kapitel IX) um
- Toast-Klick öffnet das Buch am Kalender-Kapitel statt dem alten Frame
- `/gdl calendar` Slash-Command öffnet das Buch am Kalender-Kapitel
- Das alte standalone `GDLCalendar`-Frame bleibt als Fallback im Code erhalten, wird aber nie mehr direkt aufgerufen

## [9.7.1] — 2026-03-13

### Fixed — Kalender-Toast & Event-Erstellung

#### Toast Darstellung
- Badge-Text (`[Neues Gilden-Event erstellt]`): `OUTLINE` Flag entfernt → keine fett-schattierten Kanten mehr
- Badge Shadow entfernt (ohne Outline kontraproduktiv)
- TitleStr-Shadow von 0.30 auf 0.12 reduziert (dezenter)
- RSVP-Button Labels: `OUTLINE` Flag entfernt, Größe 10→9
- `✓` / `✗` Sonderzeichen entfernt — FRIZQT__.TTF rendert diese als Kästchen □; ersetzt durch einfache Texte „Ja", „Vllt", „Nein"

#### Event-Erstellung
- „+ Neues Event"-Button nutzt jetzt `Calendar:ShowAddEventDialog()` statt primitiven `StaticPopup`
- Dialog zeigt: Event-Typ (Icon-Auswahl), Name, Datum (TT.MM.JJJJ), Uhrzeit (HH:MM), Beschreibung
- Datum vorausgefüllt mit aktuellem Datum, Uhrzeit mit 20:00

## [9.7.0] - 2026-03-13

### Changed
- **Kalender-Toast komplett überarbeitet** — war dunkelblau/Tech-Optik, jetzt Pergament-Design passend zum Buch-UI
- Toast-Hintergrund: `UI-Achievement-Parchment-Horizontal` mit Gold-Border statt blauem `SetColorTexture`
- Badge-Texte und Titelfarben auf dunkles Braun/Gold umgestellt (lesbar auf Pergament)
- Schmaler farbiger Header-Balken (Gold bei Create, Rot bei Delete) ersetzt den breiten TopBar
- MORPHEUS-Font für Event-Namen im Toast (konsistent mit Buch-UI)

### Added
- **RSVP direkt im Toast**: Ja / Vielleicht / Nein Buttons erscheinen bei kommenden Events
- RSVP-Klick sendet Response sofort per `GDLCal`-Sync an die Gilde
- RSVP-Buttons zeigen aktuelle eigene Antwort farblich hervorgehoben
- Toast-Höhe dynamisch: 88px ohne RSVP (Delete/vergangene Events), 118px mit RSVP-Buttons
- `UI._calToastEventId` hält Event-ID für RSVP-Callbacks
- `UI:UpdateCalToastRSVP()` — aktualisiert Button-Zustände ohne Frame-Rebuild

---

## [9.6.2] — 2026-03-12

### TBC 2.5.5 Kompatibilitaet
- TOC: `## Interface-BCC: 20505` hinzugefuegt
- GuildCompetition nutzt jetzt den Compat-Layer (addon._compat) fuer SendAddonMessage und RegisterAddonMessagePrefix
- Kein direkter Zugriff auf C_ChatInfo mehr — funktioniert in Classic Era UND TBC

### Bugfix: Punkte-Persistenz
- **PLAYER_LOGOUT + PLAYER_LEAVING_WORLD**: Daten werden IMMER beim Ausloggen gespeichert
- **Dirty-Save Timer**: Kills werden 2s nach dem letzten Kill gebatcht gespeichert statt zufaellig (1:10 Chance war vorher = Datenverlust)
- Punkte bleiben jetzt zuverlaessig nach Relog/Disconnect stehen

### Verbesserung: Intra-Guild Spieler-Sync
- Neuer Nachrichtentyp "P" (Player): Gildenmitglieder teilen ihre eigenen Punkte + Kill-Anzahl per GUILD-Channel
- Spieler-Rangliste zeigt jetzt auch Kills von anderen Gildenmitgliedern (nicht nur eigene)
- Remote-Spielerdaten werden mit "nur hoeher"-Logik akzeptiert (kein Rollback)
- Gilden-Score wird weiterhin cross-guild per INSTANCE_CHAT und YELL geteilt

### Farb-Audit: Buch-Pergament Einheitlichkeit
- **UIChapters.lua**: Alle `|cffCC0000` (grelles Rot) auf `|cff7A3010` (Pergament-Rotbraun) geaendert
- **UIChapters.lua**: `|cff1A7A1A` (grelles Gruen) auf `|cff3A7030` (gedaempftes Gruen) geaendert
- **UIChapters.lua**: `|cffAA2020` (helles Rot) auf `|cff7A3010` (Pergament-Rotbraun) geaendert
- **UI.lua**: Gefahrenzonen-Farbstufen von Neon-Lila/Rot auf Braun-Abstufungen geaendert
- **UIGuildStats.lua**: Komplett neugeschrieben mit reiner Pergament-Palette (9 Braun/Sepia-Toene)

## [9.6.1] — 2026-03-12

### Bugfix: Meilenstein-Toast komplett repariert

#### UIToasts.lua
- **Kategorie-Mapping komplett**: Alle 12 Meilenstein-Kategorien (level, survival, dungeon, raid, kills, profession, pvp, wealth, quests, social, meta, secret) haben jetzt eigene Farben und Labels. Vorher nur 5 (combat, survival, social, legend, death) — keine davon passte zu den echten Kategorien
- **Korrekte Badge-Texte**: "CHARAKTER-LEVEL", "DUNGEON-MEILENSTEIN", "KAMPF-MEILENSTEIN" etc. statt generischem "MEILENSTEIN"
- **Safety-Fallbacks**: Icon faellt auf Fragezeichen-Icon zurueck wenn nil, Name faellt auf "Unbekannt" zurueck

#### SurvivalStreak.lua
- **Toast-Aufruf repariert**: Uebergab `title/text/subtext` statt `name/desc/icon/category` an ShowMilestoneToast — dadurch fehlten Icon, Name und Kategorie-Farbe komplett

## [9.6.0] — 2026-03-12

### Neues Feature: Gilden-Wettbewerb & Leaderboard

#### GuildCompetition.lua (Neues Modul)
- **Punktesystem**: Jeden Kill = Punkte je nach Gegnertyp (0-50 Pkt)
- **7 Gegnerkategorien**: Normal (1), Elite (5), Selten (10), Selten Elite (15), Dungeon-Boss (25), Weltboss (50)
- **Todes-Strafe**: Gildenmitglied-Tod = -500 Punkte (Hardcore!)
- **Cross-Guild Leaderboard**: Sync ueber "GDLComp" Addon-Channel (GUILD, INSTANCE_CHAT, YELL)
- **100+ bekannte Classic Dungeon-Bosse** als Lookup-Table fuer praezise Klassifizierung
- **Dirty-Flag Pattern** fuer performante Score-Neuberechnung
- **7-Tage Verfall** fuer inaktive Gilden im Leaderboard

#### UIGuildStats.lua (Neues UI-Modul)
- Buch-Kapitel XIII umgebaut: "Kill-Statistiken" → "Gilden-Wettbewerb"
- Gilden-Score gross im Buch-Stil (MORPHEUS-Font, Pergament-Farben)
- Leaderboard mit Balkendiagramm (eigene Gilde hervorgehoben)
- Spieler-Rangliste mit Klassenfarben und Kill-Aufschluesselung
- Persoenliche Jagdstatistik nach Kategorie
- Punktelegende am Seitenende

#### Integration
- KillStats.lua: Kills werden automatisch an GuildCompetition weitergeleitet
- Sync.lua: Tode loesen Strafpunkte in GuildCompetition aus
- SlashCommands.lua: `/gdl guildcomp` (Aliase: gc, wettbewerb, competition, leaderboard)

#### Housekeeping
- Versions-Mismatch behoben (Config.lua/SlashCommands sagten 9.3.0, TOC/Core sagten 9.5.0)
- Alle Versionsnummern konsistent auf 9.6.0

## [9.5.0] — 2026-03-10

### Fixed / Improved — UI Lesbarkeit & Kontrast

#### Buttons allgemein
- `CreateElegantButton`: Hintergrundfarbe deutlich aufgehellt (`0.38, 0.28, 0.14`), Textfarbe von fast-Schwarz auf Gold-Braun (`0.62, 0.46, 0.22`), Hover-State ebenso aufgehellt

#### Ruhmeshalle
- Banner-Text „Unsterbliche / Krieger des Lichts" von `#4A3A28` auf `#8A6010` angehoben

#### Grün-Farben (Pergament-Kontrast)
- Alle grellen `#00FF66` / `#44FF88` Grün-Töne auf dezentes `#3A7030` reduziert
- Lebend-Badges, Online-Status, Achievement-Status betroffen

#### Kill-Statistiken
- `#CC0000` Knallrot → `#7A3010` (Braunrot, Pergament-konform)
- Kill-Balken-Farbe gedämpft, Umgebungsschaden-Counter ebenfalls angepasst

#### Klassen-Icons
- `CLASS_ICONS` in `UI.lua` um String-Keys erweitert: englische Klassen-IDs (`WARLOCK`, `ROGUE`, etc.) und deutsche Namen (`Hexenmeister`, `Schurke`, etc.) → Icons erscheinen jetzt auch wenn `deathData.class` ein String ist

#### Schwarzes Brett
- „Neuen Beitrag anpinnen"-Button aufgehellt, lesbare Gold-Textfarbe

#### Gildenregeln
- Bearbeiten-Button aufgehellt
- **Offizier-Zugriff**: Button nur noch sichtbar für Rang ≤ 2 (GM / Officer / Senior Officer) via `GuildLeader:CanEdit()`

#### Gildenkalender
- „Neues Event"-Button aufgehellt
- Inaktive Response-Buttons (Zusagen / Absagen) kontrastreicher
- Event-Erstellung auf Officer+ beschränkt (`GuildLeader:CanEdit()`)

#### Footer-Icons (rechte Buchseite)
- Icons jetzt in einer dezenten Hintergrundleiste (`iconBar`) statt frei im Buchrand gequetscht
- Leiste mit Backdrop + Border, Icons sauber nebeneinander linksbündig ausgerichtet

### Added
- `GuildLeader:CanEdit()` — gibt `true` für Rang ≤ 2 zurück (GM / Officer / Senior Officer)

---

## [9.4.3] — 2026-03-10

### Fixed
- **GuildLeader.lua:869**: `GetGuildInfo("player") or (nil, nil, 0)` — Lua erlaubt kein Multi-Return mit `or` → auf zwei Zeilen aufgeteilt
- **UIChapters.lua:1702**: Literaler Zeilenumbruch in Lua-String → `\n` Escape

---

## [9.4.2] — 2026-03-10

### Fixed
- **Löschen im Buch**: Fehlender Delete-Button in `RenderMemorial` (Gedenkhalle). 
  - Kleines `×`-Symbol erscheint beim Hover über jeden Eintrag (links neben Nachruf-Edit)
  - Mit gesetztem Admin-Passwort → Passwort-Dialog; ohne Passwort → einfacher Bestätigungs-Dialog
  - Löschen wird per `BroadcastDelete` an alle Gildenmitglieder synchronisiert
  - Edit- und Delete-Button sind initial unsichtbar, erscheinen nur bei Hover
- **Calendar Serialize**: Eventname auf 40 Zeichen, Beschreibung auf 180 Zeichen begrenzt → verhindert Überschreiten des 255-Byte WoW-Addon-Message-Limits

### Confirmed Working
- **Gildenkalender-Sync**: Vollständig implementiert (ADD, DELETE, RESPONSE, SYNC, REQUEST über `GDLCal`-Channel). Alle Gildenmitglieder mit dem Addon empfangen Events automatisch.

---

## [9.4.1] — 2026-03-10

### Fixed
- **Nicht-Gildenmitglieder im Buch**: `Sync:RecordLocalDeath` prüfte den Gilden-Status des Toten nicht. Jetzt wird `Guild:IsMember()` + `inGuild`-Flag + Gildenname-Vergleich geprüft. GuildlessMode bleibt weiterhin die Opt-in-Ausnahme.
- **Koordinaten 0.0, 0.0**: `coordX/coordY` (Buch-Format) und `posX/posY` (Sync-Format) waren nicht synchronisiert. Normalisierung beim Speichern eingebaut. `0,0`-Werte werden zu `nil` gesetzt → Buch zeigt keine Koordinaten wenn keine vorhanden.
- **Killer #-1**: `source_id < 0` bedeutet Spieler-Kill (PvP) oder Environment → wird jetzt als "Unbekannt" aufgelöst statt "Kreatur #-1". Fallback-Detektor erkennt Spieler-GUIDs und setzt Killer auf Spielername.
- **Mehrere Töne bei Tod**: 
  - `AnimFX.BellTolls` + `AnimFX.DeathCinematic` spielten `PlaySound(878)` = **Level-Up Sound** → entfernt
  - `Sync:RecordLocalDeath` + `Sync:ProcessIncomingDeath` spielten `PlaySound(8959)` (Raid-Warn) direkt → entfernt, delegiert an `DeathBell:Play()`
  - `DeathBell`: Doppelton → Einzelton; Sound von `BellTollNightElf.ogg` → `BellTollAlliance.ogg` (tiefer, passender Grabgeläut)
  - Jetzt: **ein einziger Sound**, gesteuert durch DeathBell-Modul

---

## [9.4.0] — 2026-03-10

### Fixed (Vollständiger Cross-Module Audit)

**Methoden-Fehler:**
- **DNLBridge**: `KillerTracker:GetNPCName()` existiert nicht → durch `npcNames`-Tabellen-Lookup ersetzt
- **Calendar**: `GDL:IsAdmin()` existiert nicht, kein Guard → durch `GuildLeader:IsAdmin()` ersetzt
- **GuildLeader**: `IsAdmin()` neu hinzugefügt (Rang ≤ 1 = GM/Officer)
- **Milestones**: `TestLevelMilestones()` + `ForceUnlockCurrentLevel()` fehlten → beide hinzugefügt (für `/gdl` Slash-Commands)

**Config-Defaults:**
- `dangerZoneEnabled`, `deathBellEnabled`, `overlayPosition`, `patreonName` in `SETTING_DEFAULTS` ergänzt — verhindert nil-Crashes bei frischer DB

**Double-Initialize (13 Module):**
- `GDL:InitializeModules()` ruft `Initialize()` auf allen Modulen auf
- 13 Module (Anniversary, Calendar, DNLBridge, DeathHeatmap, GuildLeader, GuildRoster, KillerPortrait, LastHours, PlayedTime, Professions, Report, SurvivalStreak, ZoneWarning) riefen sich am Dateiende selbst auf → `_initialized`-Guard eingebaut

**Akzeptiert (kein Fix nötig):**
- `UI:RefreshRosterOverlay` — Guard vorhanden, Feature fehlt bewusst
- `MapMarkers WORLD_MAP_UPDATE` — pcall-gesichert
- `GDL:UpdateSupporterStatus/Milestones` — Guards vorhanden
- TOC-Ladereihenfolge DNLBridge — GetModule ist lazy, kein echtes Problem

---

## [9.3.3] — 2026-03-10

### Fixed (Death-Pipeline — kritisch)
- **DNLBridge**: Doppeltes Overlay entfernt — `_PipelineStep2` zeigte Overlay, `Sync:RecordLocalDeath` ebenfalls → jetzt nur noch über `RecordLocalDeath`
- **DNLBridge**: `HM.ShowForMap(mapId)` → `HM:UpdateMap()` (Funktion existierte nicht)
- **Sync**: `ShowOverlay(deathData, false)` → `ShowOverlay(deathData, deathData.isSelf)` — eigene Tode werden jetzt korrekt als solche angezeigt
- **Sync**: GuildlessMode-Fallback in `RecordLocalDeath` — Tode werden jetzt unter `_GUILDLESS_` gespeichert wenn kein Gildenname vorhanden (statt lautlosem Verwerfen)

---

## [9.3.2] — 2026-03-10

### Fixed
- **DNLBridge**: `GetModule("DeathScreenshot")` entfernt — Modul existiert nicht. Screenshot läuft intern über `PlayedTimeTracker` (kein Funktionsverlust)
- **GDL_Commands_v930.lua / UIChapters_Patch.lua**: Emojis (📍🗺️) durch WoW-kompatible Texte ersetzt (nicht im TOC, aber auf Disk — präventiv)

---

# Das Buch der Gefallenen - Changelog

## Version 9.3.0 — "Fake 3D: Das Buch lebt"

### UI: Fake-3D Parallax & Tiefe
- **Parallax-Effekt**: Staubmoten und Lichtreflex bewegen sich traege relativ zur Maus-Position
- **Tiefer Buchfalz-Schatten**: Multi-Layer Schatten statt flacher 2px Linie → echte Tiefenwirkung
- **Seiten-Lichtreflex**: Subtiler heller Schein auf der rechten Buchseite, folgt der Maus
- **Ecken-Vignette**: Dezente Abdunkelung an Buchecken fuer mehr Tiefe

### Visual Fixes (aus Screenshot-Analyse)
- **Gedenkhalle**: Datums-Anzeige rechts oben nicht mehr abgeschnitten (Font groesser, explizite Width)
- **Gedenkhalle**: Name-FontString begrenzt auf 190px damit kein Overlap mit Datum
- **Statistiken**: Zonennamen ueberlagern nicht mehr die Balken (Label-Width 100→120, Bar-Offset 100→122)
- **Kill-Statistiken**: Umgebungsschaden prominenter dargestellt mit Icon, Header-Box und Anteil-Balken
- **Kondolenzbuch**: Alternating Row-Tint fuer bessere Lesbarkeit
- **Kondolenzbuch**: Separatoren staerker sichtbar (Alpha 0.15→0.30, Offset angepasst)
- **Kondolenzbuch**: Hover-OnLeave stellt Alternating-Tint korrekt wieder her

### Technik
- Alle Fake-3D Effekte nutzen ausschliesslich SetColorTexture (keine SetGradient/CreateColor Abhaengigkeit)
- Parallax-Smoothing via Delta-Time Lerp (keine harten Spruenge)
- Staubmoten haben individuelle Parallax-Tiefe (depth-Parameter)
- Performance: Parallax-Ticker prueft IsShown() als Guard

### TOC
- Version: 9.2.0 → 9.3.0

---


## Version 9.2.0 — "What's New: Die Timeline"

### Neues Modul: WhatsNew.lua
Timeline-Style Changelog-Popup, inspiriert vom Deathlog-Addon.

- **Timeline-UI**: Vertikale Timeline mit Versions-Nodes von v4.5 bis aktuell
- **Farbcodierung**: Major (Gold), Feature (Gruen), Fix (Blau), Current (Highlight)
- **Auto-Popup**: Zeigt sich automatisch bei Versionsupdate (einmalig pro Version)
- **Discord-Integration**: Klickbarer Link mit Copy-Dialog (discord.gg/yHA6SKZPEv)
- **Scroll-to-Current**: Scrollt automatisch zum neuesten Eintrag
- **Slash-Commands**: `/gdl news`, `/gdl whatsnew`, `/gdl changelog`, `/gdl wn`
- **FadeIn-Animation + Sound** beim Oeffnen/Schliessen
- **Pulsierender Glow** am aktuellen Versions-Node

### SavedVariables
- `GuildDeathLogDB.whatsNewSeen` — gespeicherte letzte gesehene Version (verhindert Doppel-Popup)

### TOC
- Version: 9.1.0 → 9.2.0
- WhatsNew.lua nach UI-Modulen eingetragen

### SlashCommands
- `news` Command + Aliases registriert
- Help-Text aktualisiert auf v9.2.0

---

## Version 9.1.0 — "UI-Split: Das Monster zerlegt"

### UI.lua Aufspaltung (7292 → 5 Dateien)
Die monolithische UI.lua (7292 Zeilen) wurde in 5 spezialisierte Dateien aufgeteilt.
Alle Funktionen bleiben auf derselben UI-Table — externe Aufrufer (Sync, Deathlog, etc.) sind nicht betroffen.

- **UI.lua** (1019 Zeilen): Book-Frame, Navigation, Inhaltsverzeichnis, Show/Hide, Shared State + Helpers
- **UIChapters.lua** (2878 Zeilen): Alle RenderXxx() Funktionen fuer die rechte Buchseite (Memorial, HallOfFame, Statistics, Milestones, Achievements, Condolences, Calendar, etc.)
- **UIOverlay.lua** (856 Zeilen): Death-Popup-Overlay, Chronik-Eintraege, Tag-Trenner, Passwort-Dialog
- **UIToasts.lua** (810 Zeilen): Achievement-, Milestone- und Calendar-Toast-Benachrichtigungen
- **UIWindows.lua** (1805 Zeilen): Settings, Standalone-Fenster (HallOfFame, Statistics, KillStats, Milestones, Titles)

### Architektur
- Shared State ueber `addon._UI` Bridge: Sub-Files greifen auf dieselbe UI-Table zu
- File-lokale Queues (overlayQueue, achToastQueue, calToastQueue) auf `UI._xxx` Table verlagert
- GDL_ScaleLerp als `UI.ScaleLerp` exponiert, CLASS_COLORS/ICONS als `UI.CLASS_COLORS`/`UI.CLASS_ICONS`
- ClassColorHex, CleanKillerName, CountDeathsOnDay als UI-Methoden statt file-lokale Funktionen
- Einziges `GDL:RegisterModule("UI", UI)` in UI.lua Core — kein doppeltes Registrieren

### TOC
- Version: 9.0.0 → 9.1.0
- Ladereihenfolge: UI.lua → UIChapters.lua → UIOverlay.lua → UIToasts.lua → UIWindows.lua
- Klare Sektionskommentare

---

## Version 9.0.0 — "Architektur-Refactor: Modular Immersive Context UI Framework"

### BREAKING: Major Architecture Overhaul
Umbau nach den Projekt-Richtlinien (Modular Immersive Context UI Framework).
Alle Aenderungen sind abwaertskompatibel - SavedVariables bleiben erhalten.

### Core (GuildDeathLog.lua)
- **Slash-Commands ausgelagert**: 400-Zeilen if-elseif-Kette ersetzt durch Dispatch-Table in `SlashCommands.lua`
- **Version alignment**: Alle Versionsnummern konsistent auf 9.0.0 (TOC, Core, Help, InitDB)
- Core von 930 auf 531 Zeilen reduziert (-43%)

### Neue Dateien
- **Config.lua**: Zentrale Konfiguration (Konstanten, Defaults, Lookup-Tables) - keine Modul-Logik
- **Libs/AnimationHelper.lua**: Wiederverwendbare Animations-Bibliothek (FadeIn/Out, ScaleLerp, SlideIn, Bounce, Easing)
- **SlashCommands.lua**: Dispatch-Table fuer alle Slash-Commands mit Alias-Support

### Bugfixes (Kritisch!)
- **Anniversary.lua**: Registrierte sich bei `addon.modules` statt `_G["GuildDeathLog"].modules` → Modul war fuer den Core unsichtbar. Gefixt.
- **ZoneWarning.lua**: Identischer Bug wie Anniversary. Gefixt.
- **GuildRoster.lua**: Doppelte `RegisterModule("Roster")` Aufrufe (Zeile 100 + 463). Duplikat entfernt.
- **UI.lua**: `GDLChronicle` Frame ohne `BackdropTemplate` erstellt - Verstoß gegen Engine Rules. Gefixt.

### TOC (GuildDeathLog.toc)
- Version: 8.14.3 → 9.0.0
- Wrath-Interface (30401) entfernt (nicht supported)
- Neue Dateien eingetragen: Config.lua, Libs/AnimationHelper.lua, SlashCommands.lua
- Kommentare fuer Ladereihenfolge

### Cleanup
- 9 Python-Patch-Scripts aus Addon-Root in `_dev_scripts/` verschoben
- UTF-8 BOM aus UI.lua und CHANGELOG.md entfernt
- Windows Line-Endings (CRLF) in allen Lua/TOC/MD-Dateien gefixt

### Architektur-Verbesserungen
- Ordnerstruktur nach Richtlinie: Core → Config → Libs → SlashCommands → Module
- Module-Registrierung konsistent: alle nutzen jetzt `GDL:RegisterModule(name, table)`
- Slash-Command-System erweiterbar: neuer Command = 1 Zeile `RegisterCmd()`



## Version 8.14.2 — "Kondolenzenbuch: Guild-Sync aktiv"

### UI.lua
- **Kondolenzenbuch**: Nach dem Speichern einer Kondolenz wird `Sync:BroadcastKondolenz()` aufgerufen → Nachricht wird per `GUILD`-AddonMessage an alle Mitspieler mit Addon gesendet
- Kondolenzen werden so live in der Gedenkhalle (Hover-Tooltip) bei allen Gildenmitgliedern sichtbar

### Sync.lua (bereits enthalten)
- `BroadcastKondolenz(dKey, text)` sendet via `C_ChatInfo.SendAddonMessage("GDLSync", ..., "GUILD")`
- Empfangs-Handler für `KONDOLENZ` speichert eingehende Einträge in `GuildDeathLogDB.kondolenze` und refresht die Ansicht
- `BroadcastBulletin` + Empfangs-Handler für Schwarzes Brett ebenfalls aktiv

## Version 8.13.3 — "UI-Feinschliff: Namen, Kapitel, Icons"

### UI.lua
- **Abenteurer der Gilde**: Spielernamen ohne `OUTLINE`-Flag → weichere, lesbare Schrift
- **Inhaltsverzeichnis**: "Berufe der Gilde" entfernt (Berufe bereits in Abenteurer integriert)
  - Kapitel-Nummern neu: VIII→VII Titel, IX→VIII Kalender, IX Gilden-Regeln, X/XI/XII Auswertungen

### Titles.lua
- **Koenigs-Bezwinger**: Icon von `INV_Misc_Head_Ogre_01` (fehlendes Vanilla-Asset) auf `INV_Crown_01` geändert → Icon wieder sichtbar

## Version 8.13.2 — "Chronik + Gedenkhalle zusammengeführt"

### UI.lua — Kapitel-Merge
- **Chronik der Gefallenen** als eigenes Kapitel entfernt (war redundant mit Gedenkhalle)
- `RenderChapter("chronicle")` → leitet jetzt auf `RenderMemorial()` um (SavedVars-Kompatibilität gewahrt)
- `UpdateChronicle()` → Compatibility-Shim, ruft intern `RenderMemorial()` auf
- `isChronicle`-Flag in `SetRightPageHeader` auf `isMemorial` umgestellt → statsFrame/divider bei Gedenkhalle sichtbar
- Refresh-Button (Toolbar) ruft nun `RenderChapter("memorial")` auf
- Standard-Kapitel beim Öffnen: `"memorial"` statt `"chronicle"`
- `CHAPTER_TITLES`: Eintrag `chronicle` entfernt

### UI.lua — RenderMemorial (neue Vollversion)
- Alle Tode gelistet (nicht mehr auf 30 limitiert), neueste zuerst
- Stats-Banner: Gesamt / Heute / Diese Woche
- Hover-Tooltip pro Eintrag: Name, Klasse, Level, Zone, Mörder, Fähigkeit, Letzte Worte, Nachruf, Datum
- Hover-Hintergrundfarbe in Klassenfarbe
- Dekorative Blutflecken ab 5+ Gefallenen
- Kerzen-Icon (Helligkeit tageszeit-abhängig)
- Nachruf-Edit-Button pro Eintrag

## Version 8.12.0 — "Abenteurer der Gilde (GRM-Style Member Profiles)"

### Guild.lua — Erweitertes Daten-Scanning (GRM-Pattern)
- `GetGuildRosterLastOnline(i)` integriert → speichert `lastOnlineYears/Months/Days/Hours` pro Mitglied
- `status` Feld wird gespeichert: 0=offline, 1=online, 2=AFK, 3=DND
- Neue `Guild:FetchClubData()` Funktion nutzt `C_Club.GetMemberInfo` (Classic Era +2023 Communities API):
  - Lädt `race` + `raceId` via `C_CreatureInfo.GetRaceInfo`
  - Lädt `sex` (2=männlich, 3=weiblich)
  - Lädt `clubProf1/clubProf2` (Berufs-ID + Rang)
  - Alle C_Club-Daten additiv (überschreiben keine vorhandenen Werte)
  - Wird 2s nach jedem Scan asynchron aufgerufen via `C_Timer.After`
  - Vollständige `pcall`-Absicherung für Classic-Kompatibilität

### UI.lua — Neues Kapitel VIII: "Abenteurer der Gilde"
- Neuer Eintrag im Inhaltsverzeichnis (Kategorie "Gilde")
- **Banner**: Zeigt Gesamt-/Online-/Offline-Zahl mit farbigen Indikatoren
- **Rang-Sektionen**: Mitglieder nach Rang gruppiert (wie Meilenstein-Kategorien)
  - Header: Rang-Icon, Rang-Name, Online/Gesamt-Zähler
  - Farbton des Headers variiert mit Rang-Index (blau-grün Gradient)
- **Member-Karte** (`RenderMemberCard`) — 56px hohe Karte pro Mitglied:
  - Klassenfarbener Akzentbalken (links), Klassen-Icon (36x36)
  - Online-Status-Punkt (grün/gelb/rot/grau)
  - **Name** in Klassenfarbe (13pt OUTLINE)
  - **Subline**: Stufe · Rasse · Klasse (aus `RACE_NAMES_DE` + `CLASS_NAMES_DE_ADV`)
  - **Rang** (darunter, grün)
  - **Zone** (unten links)
  - **Online/LastSeen** (oben rechts): "● Online" / "vor X T." etc.
  - **Achievement-Punkte** (★ gold)
  - **Berufe** (unten rechts): aus Professions-Modul oder C_Club-Fallback
  - Hover-Highlight + **Tooltip** mit Note + Offiziersnotiz
- Bestehende Chapter-Nummerierung angepasst (IX–XIV)

---

## Version 8.11.0 — "Guild Leave ≠ Tod Fix"

### Guild.lua — ProcessLeave(): Falsch-Tod-Erkennung entfernt
- **Kritischer Bug**: Jeder Gilden-Austritt (freiwillig, Kick, Rename) hat automatisch einen Todeseintrag erstellt
- Ursache: `ProcessLeave()` rief `Sync:ProcessIncomingDeath()` auf für jeden fehlenden Roster-Eintrag
- Fix: Automatische Todeserstellung bei Guild-Leave komplett entfernt — Tod nur noch via `UNIT_DIED` / Deathlog
- `ProcessLeave()` pflegt nur noch `memberHistory` + `_removed` Flag in `guildData.members`

### Guild.lua — CommitSnapshot(): Offline-Leave-Erkennung
- Mitglieder die während Offline-Zeit die Gilde verlassen haben werden jetzt auch als `_removed = true` markiert
- Verhindert dass "ausgetretene" Mitglieder weiterhin als aktive Gildenmitglieder angezeigt werden

### Guild.lua — Aufräumen
- `LEAVE_DEATH_WINDOW`-Konstante (300s) entfernt (nicht mehr benötigt)

---

## Version 8.10.9 — "Guild.lua: Re-Join Member Crash Fix"

### Guild.lua — CommitSnapshot() Boolean-Guard
- `guildData.members[key]` kann `true` (boolean) zurückgeben wenn ein Spieler mit gleichem Namen erneut der Gilde beitritt
- `or {}` reicht nicht als Guard da `true or {}` → `true` ergibt (truthy bypass)
- Fix: `type(existing) ~= "table"` Prüfung ersetzt `or {}` → verhindert Index-Fehler auf boolean
- Behebt: `attempt to index local 'existing' (a boolean value)` bei Roster-Scan

---

## Version 8.10.2 — "Death Popup: Icon-Rahmen & Spell-Label Fix"

### UI.lua — CreateOverlay(): Icon-Rahmen ersetzt
- `UI-Quickslot2` (hässlicher Bag-Slot-Look) durch **4 dünne 1px Gold-Linien** ersetzt
- Sieht aus wie ein eleganter, schlanker Rahmen statt einem Inventar-Slot
- Wert-Texte jetzt explizit weiß (`SetTextColor(1,1,1)`) für maximalen Kontrast

### UI.lua — "Fähigkeit:"-Label-Bug behoben
- `makeInfoRow` gibt jetzt **lbl + val** zurück → `o.spellLabel` gespeichert
- `spellLabel` wird mit `spellText` zusammen ein-/ausgeblendet
- Kein leeres "Fähigkeit:" Label mehr wenn kein Todesfähigkeits-Wert vorhanden
- `spellLabel` auch in revealFade-Choreographie eingebunden (erscheint bei 1.10s wenn vorhanden)

---

## Version 8.10.1 — "Death Popup: Lesbarkeits-Feinschliff"

### UI.lua — CreateOverlay(): Schriftfarben & Abstände korrigiert

| Element | Alt | Neu |
|---|---|---|
| Label-Farbe ("Getötet von:" etc.) | `0.75, 0.60, 0.20` (zu dunkel) | `0.96, 0.83, 0.36` (helles Gold) |
| Label-Schriftgröße | 10pt | 11pt |
| classText ("Stufe X Klasse") | 13pt OUTLINE | **14pt THICKOUTLINE** |
| classText-Farbe | `r*1.05` | `r+0.15` (gleichmäßig aufgehellt) |
| Zeilenabstand Details-Rows | 22px | **26px** (kein Überlappen) |
| SEP2-Offset | INFO_Y−82 | INFO_Y−96 |
| "~ Letzte Worte ~"-Farbe | `0.65, 0.50, 0.18` | `0.90, 0.76, 0.30` |
| lastWordsText | 14pt, kein Height-Limit | **15pt, max 42px Höhe** (2 Zeilen) |
| Footer levelText | 12pt OUTLINE, `0.85, 0.72, 0.35` | **13pt THICKOUTLINE, helles Gold** |

### Overlap-Fix
- `lastWordsText:SetHeight(42)` — begrenzt auf 2 Zeilen, verhindert Überlappen mit Footer

---

## Version 8.10.0 — "Death Popup: Vertikale Karte (Forschungs-basiertes Redesign)"

### UI.lua — `CreateOverlay()` komplett neu (vertikale Karte)
- Layout von Tabellen-Design auf saubere **vertikale Karte** umgestellt (Branchen-Standard: HardcoreAlerts, DeathLog, DeathNotificationLib)
- **BLOCK 1 Header:** Klassen-Icon 68×68 px links + Name 26pt Morpheus THICKOUTLINE (Klassenfarbe) + Klasse/Level 13pt rechts
- **BLOCK 2 Details:** 4 Zeilen — Killer, Fähigkeit, Zone, Uhrzeit; je 10pt Gold-Label + 14pt Weiß-Wert; `SetWordWrap(false)` verhindert Overflow
- **BLOCK 3 Letzte Worte:** Dynamischer Block mit "~ Letzte Worte ~" Header + 14pt `SetWordWrap(true)`; komplett ausgeblendet wenn keine letzten Worte vorhanden
- **BLOCK 4 Footer:** Allianz/Horde-Icons 38×38 px + Level/Klasse-Text zentriert
- Goldene Separator-Linien (1px, Goldtint) zwischen allen Blöcken
- Subtiler Klassen-Farbgradient (ADD-Blend) als Hintergrundakzent
- Scale-Minimum: `0.50` (bleibt bei 50% gut lesbar durch OUTLINE-Fonts)

### UI.lua — `DisplayOverlay()`: Alpha-Reveal-Timing korrigiert
- `spellText`: `SetAlpha(0)` vor `Show()` — kein sofortiges Aufblenden vor Reveal-Fade
- `levelText`: `SetAlpha(0)` gesetzt — korrektes Einblenden bei 1.25s
- `lwLabel` ("~ Letzte Worte ~"): `SetAlpha(0)` + `revealFade(1.45s)` — fließender Übergang

### Reveal-Choreographie
| Zeit | Element |
|------|---------|
| 0.00–0.80s | Overlay fade-in (DeathCinematic) |
| 0.92s | Name TypewriterText startet |
| 1.00s | classText · killerText · timestampText · zoneText |
| 1.10s | spellText (wenn Todesfähigkeit bekannt) |
| 1.25s | levelText |
| 1.45s | lwLabel "~ Letzte Worte ~" |
| 1.60s | lastWordsText TypewriterText |

---

## Version 8.8.1 — "Death Popup: Scale-Fix & Layout-Overhaul"

### UI.lua — Scale-Minimum erzwungen
- `overlayScale` wird beim Laden und bei jedem Anzeigen auf `math.max(0.85, ...)` geclampt
- Drag-Scale Minimum angehoben: `0.5` → `0.85` (Popup bleibt immer lesbar)
- Gespeicherter Wert `0.789` wird automatisch auf `0.85` korrigiert

### UI.lua — Layout-Redesign (volle Innenfläche genutzt)
| Element | Alt | Neu |
|---|---|---|
| classIcon | 80×80 px | **100×100 px** |
| iconBacking | 84×84 px | **108×108 px** |
| iconBorder | 90×90 px | **116×116 px** |
| iconGlow | 120×120 px | **140×140 px** |
| nameText | MORPHEUS 27pt | **MORPHEUS 34pt** |
| nameY offset | CTY−166 | **CTY−148** (enger am Icon) |
| classText | FRIZQT 17pt (Kette) | **FRIZQT 14pt** |
| zoneText | FRIZQT 15pt (Kette) | **FRIZQT 13pt** |
| killerText | FRIZQT 15pt (Kette, overflow!) | **FRIZQT 13pt, BOTTOM-Anker** |
| lastWordsText | FRIZQT 13pt | **FRIZQT 13pt, BOTTOM-Anker** |

### UI.lua — Mutual Exclusion: killerText vs. lastWordsText
- Wenn `hasLastWords = true` → `killerText` wird ausgeblendet (Platzmangel)
- killerText und lastWordsText beide BOTTOM-verankert → kein Overflow aus Innenfeld

---

## Version 8.7.1 — "Buchseiten-Übergang: Balken entfernt, Bloom eingebaut"

### AnimFX.lua — `ShimmerSweep` komplett neu
| | Alt | Neu |
|---|---|---|
| Typ | Solider 36px-Balken (`WHITE8x8`) | 2 radiale Bloom-Texturen (`starburst` + `ping4`) |
| Bewegung | Gleitet von links nach rechts | Expandiert aus der Mitte heraus |
| Blend-Alpha | 0.85 (sehr auffällig) | 0.22 / 0.15 (subtil, elegant) |
| Größe | 36px breit, Framehöhe | 18%→110% / 30%→95% der Framebreite |
| Timing | Gleichförmig | Ease-out (`1-(1-t)²`), Starburst 70ms versetzt |

### UI.lua — Seitenübergang
- `GlowRing`-Größe nach Seitenwechsel: 80% → **60%** der Seitenbreite (weniger aufdringlich)
- `ShimmerSweep`-Dauer: 0.65s → **0.55s** (schneller, flüssiger)

---

## Version 8.7.0 — "GUILD DEATH LOG FRAME" — Neues Todes-Popup Artwork

### Neues Design — CreateOverlay() komplett ersetzt
| Änderung | Alt | Neu |
|---|---|---|
| Frame-Größe | 520×340 px | **660×460 px** |
| Hintergrund-Textur | `Textures/DeathPopup.tga` | **`Textures/GDLDeathFrame_New.png`** |
| Kopfbereich | Einfacher Artwork-Rahmen | **WoW-Logo + "GUILD DEATH LOG" Inschrift** |
| Eck-Dekoration | Keine | **Allianz-/Horde-Schädel + Embleme** |
| Innenbereich | Pergament-Look | **Dunkler Stein-Textur** |
| Icon-Rahmen | Einfaches UI-Quickslot | **UI-Quickslot2 mit Gold-Tint** |
| Content-Breite | 460px | **544px** (CW = W - CX×2) |
| Name-Font | MORPHEUS 26pt | **MORPHEUS 27pt** |
| Divider | 1px, gold 0.68/0.52/0.13 | **2px, gold 0.75/0.58/0.15** |

### AnimFX.lua — SetAlpha Floating-Point Guard
- `runes[i]:SetAlpha(alpha)` → `runes[i]:SetAlpha(math_max(0, alpha))`
  - Verhindert `-0.000000` Fehler bei `prog ≈ 1.0` durch IEEE 754 Floating-Point-Rundung
  - Betraf `AnimFX.RuneCircle` / ähnliche Ticker wenn `el` minimal `dur` überschritt

### Textures/
- `GDLDeathFrame_New.png` hinzugefügt (WoW "Guild Death Log" Frame-Artwork, 1:1 Größe)

---

## Version 8.6.0 — "BUGFIX: GuildRoster + AnimFX API Guards"

### GuildRoster.lua — Classic Era API-Kompatibilität
- `SendAddonMessage` direktaufrufe durch lokalen `SendMsg()`-Wrapper ersetzt
  - Unterstützt jetzt beide APIs: `C_ChatInfo.SendAddonMessage` (1.15.x+) und globales `SendAddonMessage` (ältere Classic-Clients)
- `GDL:GetClassIdFromLocale()` (nicht existent) ersetzt durch lokales `CLASS_ID_MAP[]`-Lookup
  - Enthält alle Klassen: Warrior–DemonHunter mit englischen Keys
- `GDL:GetSpecName()` (nicht existent) ersetzt durch lokale `GetCurrentSpec()`-Funktion
  - Nutzt `GetSpecialization`/`GetSpecializationInfo` wenn vorhanden, sonst leerer String
- `LE_PARTY_CATEGORY_HOME` (nil in Classic) ersetzt durch `IsInGroup()` ohne Argument
- `RegisterAddonMessagePrefix`-Guard war bereits korrekt (kein Bug dort)

### UI.lua — AnimFX Globale Referenz gefixt
- `HideBook()`: `AnimFX.ScreenFlash(...)` → `FX.ScreenFlash(...)` (nutzt jetzt korrekt die lokale `FX`-Variable)

---

## Version 8.4.0 — "CINEMATIC DEATH OVERHAUL" — Das ultimative Immersions-Arsenal

### Philosophie
Jeder Gildentod ist jetzt ein cineastisches Ereignis. Kein simples Popup mehr — eine vollständige Sequenz aus Dunkelheit, Glocken, Explosionen, aufsteigender Seele und kreisenden Runen.

### AnimFX.lua — 8 neue epische Funktionen

| Funktion | Beschreibung |
|---|---|
| `SoulRise(parent, r, g, b)` | 18 Seelen-Partikel steigen langsam aus dem Popup auf. Organisches Wobble, Ping4/Star4/Starburst Texturen, ADD-Blend. Returns Handle. |
| `ArcaneOrbit(parent, r, g, b)` | 5 Runen kreisen auf elliptischen Bahnen um das Popup (unterschiedl. Radien 78–175px, gemischte Richtungen, Puls-Alpha). Returns Handle. |
| `RuneExplosion(parent, r, g, b, count)` | N Runen explodieren radial aus dem Zentrum (Star4/Starburst, 200px/s → dezeleriert, Scale wächst, Alpha fällt). One-shot. |
| `PulseRings(parent, r, g, b, count, interval)` | N GlowRings feuern in schneller Sequenz (0.14s Abstand). Jeder Ring wird größer. |
| `ScreenBlackout(fadeDur, maxAlpha, holdDur, onPeak)` | Verdunkelt den Bildschirm. fadeDur Ein/Aus, holdDur Haltezeit, onPeak Callback. |
| `StartOverlayAmbience(overlay, r, g, b)` | Startet SoulRise + ArcaneOrbit als persistente Ambience. Returns Handle-Pair. |
| `StopOverlayAmbience(handles)` | Stoppt beide Ambience-Handles sauber. |
| `DeathCinematic(overlay, r, g, b)` | **Master-Orchestrator.** 12-stufige Kino-Sequenz: Blackout → Vignette → Glocke → Blutflash → ScrollUnfurl → Runen-Explosion × 2 → PulseRings → Shake → GlowRing → Shimmer → ParticleBurst × 3 → SoulRise + ArcaneOrbit. |

### UI.lua — `DisplayOverlay()` komplett umgebaut

| Änderung | Detail |
|---|---|
| `AnimFX.DeathCinematic(o, r, g, b)` | Ersetzt alle manuellen Effekt-Aufrufe (BellTolls, CinematicBars, DeathWail, introAnim, ScaleLerp) |
| TypewriterText-Effekt | Name erscheint nach 0.92s Zeichen-für-Zeichen (18 CPS) |
| Ambience-Cleanup | `StopOverlayAmbience` bei Schließen + neuem Tod |
| Hide-Timer | 10s → 12s (mehr Zeit für den Tod zu trauern) |

### Death Cinematic Zeitplan

```
t=0.00  ScreenBlackout (0.72 alpha) + Vignette (3.4s)
t=0.05  BellTolls: Glocke 2× + Klassenflash + Horror-Cut
t=0.30  Blutroter ScreenFlash (0.68 alpha)
t=0.44  Popup ScrollUnfurl (Pergament-Entrollen)
t=0.50  RuneExplosion × 8 (Klassenfarbe)
t=0.55  PulseRings × 3 (0.15s Abstand)
t=0.64  ShakeFrame (12px, 0.52s)
t=0.72  RuneExplosion × 6 (Gold)
t=0.75  GlowRing massiv (118% Framegröße)
t=0.82  ShimmerSweep (Gold)
t=0.88  ParticleBurst × 3 (Klasse + Gold + Weiß, 30+16+12 Partikel)
t=0.92  TypewriterText: Name enthüllt (18 CPS)
t=1.10  SoulRise + ArcaneOrbit starten (persistente Ambience)
t=1.25  Nachhall ParticleBurst × 20 (gedämpft)
t=12.0  Outro: FadeOut 1.5s → Ambience stop → CinematicBars aus
```

---



### Bugfixes
- **GuildRoster.lua** `Initialize()`: `RegisterAddonMessagePrefix` war in Classic Era 1.x nicht vorhanden → Fehler `attempt to call global 'RegisterAddonMessagePrefix' (a nil value)`. Fix: Dreistufiger Guard — `C_ChatInfo.RegisterAddonMessagePrefix` (Retail) → globales `RegisterAddonMessagePrefix` (Wrath+) → kein Call nötig (Classic Era 1.x empfängt CHAT_MSG_ADDON ohnehin).

### Verbesserungen
- **UI.lua** `CreateOverlay()`: Todes-Popup nutzt jetzt `Interface\AddOns\GuildDeathLog\Textures\DeathPopup` als nativen Artwork-Hintergrund statt programmatisch gezeichneter Borders. Frame-Größe: 480×295 → **520×340 px** für mehr Luft. Alle Textpositionen neu ausgerichtet. Klassen-ADD-Gradient bleibt dynamisch erhalten.

---

## Version 8.3.0 - "DAS LEBENDIGE GRIMOIRE" — Immersions-Arsenal

### Philosophie
Das Grimoire lebt. Jede Interaktion mit dem Addon soll sich anfühlen wie das Berühren eines uralten, magischen Buches.

### AnimFX.lua — 9 neue Immersions-Funktionen

| Funktion | Beschreibung |
|---|---|
| `EmberAmbience(frame, count, r, g, b)` | 10 Glut-Funken drift en langsam am Rand des Buches aufwärts — klassenfarbig. Einzel-Ticker für alle Partikel (kein GC-Spike). |
| `CandleFlicker(frame, offX, offY)` | Organisch unregelmäßiges Kerzenleuchten (80px Starburst + 26px Ping4). Lerp-basierte Alpha-Fluktuation (6-11ms Intervalle). |
| `BreathGlow(frame, r, g, b, period)` | Persistentes atmendes Außenleuchten via AnimationGroup BOUNCE (3.8s Periode, 0.40 maxAlpha). |
| `CinematicBars(show, dur)` | Letterbox-Balken (oben + unten, 60px) für Tod-Sequenz. Lazy-Init (nur ein globales Frame). IN³/OUT² Easing. |
| `TypewriterText(fs, text, cps, onDone)` | Schreibt Text Zeichen-für-Zeichen (Standard 40 CPS). Callback onDone. Ticker via :Hide() abbrechbar. |
| `ScrollUnfurl(frame, dur)` | Scale Y 0.04→1.0 von oben (OUT-Easing, 0.38s) + Alpha-Fade — Pergament-Entrolleffekt. |
| `PageTurn(contentFrame, populate, dir, dur)` | Slide + Alpha out (dir×slide), populate aufrufen, dann rein von Gegenseite. |
| `BellTolls(r, g, b)` | Vignette 2.4s + klassen-Flash + weißer Horror-Cut + PlaySound(878) zweimal (0.0s + 0.88s). |
| `DustMotes(frame, count, dur)` | 8 Staubpartikel für Kapitelwechsel (1.8s, einmalig, auto-cleanup). |

### UI.lua — Lebendige Atmosphäre

**`ShowBook()`** — Startet nach 0.12s:
- `EmberAmbience(f, 10)` — 10 goldene Funken
- `CandleFlicker(f, -390, 0)` + `CandleFlicker(f, +390, 0)` — links und rechts
- `BreathGlow(f, 0.92, 0.72, 0.22, 4.0, 0.35)` — goldenes Atemleuchten

**`HideBook()`** — Stoppt alle Handles sauber (`.active=false`, `:Hide()`, `:Stop()`).

**`HandleChapterClick()`** — `DustMotes(f, 7, 1.5)` bei jedem Kapitelwechsel.

**`DisplayOverlay()`** — Tod-Cinematic-Sequenz:
1. `BellTolls(r, g, b)` — Glocke + Vignette + klassenfarbener Flash
2. `CinematicBars(true, 0.50)` — Letterbox einblenden
3. `DeathWail()` nach 0.08s (bereits vorhanden)
4. Nach 10s outroAnim: `CinematicBars(false, 0.55)` — Letterbox ausblenden

### MinimapButton.lua — "Der Todesherold" (komplettes Redesign)

- **Icon**: `Spell_Shadow_DeathPact` (mystischer Totenkopf statt Buch)
- **Border**: Rot getönt `(0.88, 0.45, 0.42)` statt Gold
- **3 Orbit-Runen**: Goldene `ping4`-Funken, 19px Radius, 0.85 rad/s Rotation (via single OnUpdate)
- **Todes-Badge**: 15px roter Kreis oben-rechts mit weißer Zahl (auto-hidden wenn 0)
- **Atem-Leuchten**: Starburst ADD-Blend, BOUNCE 2.2s, `(0.80, 0.14, 0.08)` rot
- **Glow-Ring bei Tod**: Pulsiert 4-phasig (rot, ADD, 0.96s gesamt)
- **`Pulse()`**: Glow-Ring + Badge-Update + Orbit-Runen-Flash (1s)
- **Hover-Panel**: Dunkel `(0.04, 0.02, 0.01, 0.97)` + rote Borderfarbe + MORPHEUS-Header

---

## Version 8.2.1 - BUGFIXES

### Bugfixes
- **UI.lua** `BuildCalendarToastFrame`: Font-Pfade für `badge`, `titleStr`, `descStr`, `hint` von einfachem Backslash (`"Fonts\FRIZQT__.TTF"`) auf doppelten (`"Fonts\\FRIZQT__.TTF"`) korrigiert — Lua interpretierte `\F` als `F` → `SetFont` scheiterte stumm → `SetText` warf `Font not set` Fehler (Lua-Taint fix)
- **AnimFX.lua** `Vignette`: `math_max(0, ...)` Guard in der fallDur-Phase hinzugefügt — verhindert minimal-negativen Alpha-Wert durch Floating-Point-Präzision bei `SetAlpha()`

---

## Version 8.2.0 - CUSTOM DEATH POPUP DESIGN & GUILD ROSTER SYNC

### Neues Design: Todes-Popup (Death Overlay)

**Vollständig neu kodiertes cinematic Design (kein Bild benötigt):**
- 480×295 px statt 460×307 px — etwas breiter, kompakter
- **Dunkler Hintergrund** `(0.028, 0.013, 0.004, 0.97)` — fast schwarz mit warmem Ton
- **Dynamische Klassenfarb-Borders**: Alle 4 Rahmenseiten (3px) wechseln je nach gestorbener Klasse
- **Inneres ADD-Glow-Rechteck** — minimale Klassen-Ambient-Tönung
- **Oberer Klassen-Gradient** — 90px hohes `ADD`-Blend-Overlay in Klassenfarbe (subtil)
- **Header-Leiste**: 23px — `GILDEN TOD` links, `Das Buch der Gefallenen` rechts, Trennlinie
- **X-Schliessen-Knopf** oben rechts (rot, 48% Alpha, 100% bei Hover)
- **Klassen-Icon 82×82** mit:
  - 110×110 Glow-Ring (`star4`, ADD-Blend, pulsiert mit sin-Kurve, klassenfarb-gefärbt)
  - 88×88 Backing-Rechteck (klassenfarb-getönt)
  - Skull-Icon (22×22) direkt über dem Icon
  - Vier dekorative Eck-Punkte (5×5, gold)
- **Name**: MORPHEUS 24pt OUTLINE, zentriert, 30px Backing-Streifen
- **Trennlinie** unter dem Namen (klassenfarb-gesetzt)
- **Info-Sektion**: Level+Klasse (13pt, `0.9,0.8,0.6`), Zone (11pt, hell-blau), Timestamp (9pt), Killer (11pt, rot)
- **Letzte-Worte-Streifen**: 28px am Boden, eigene Trennlinie, warmbraune Schrift
- Drag & Shift+Drag-to-Scale vollständig erhalten

### Neues Modul: `Modules/GuildRoster.lua` — Alt/Twink/Rolle Sync

**Pattern: GRM (Guild Roster Manager) + Altoholic**
- Addon-Prefix `GDLRoster`, Channel `GUILD` + `PARTY` als Fallback
- Jeder Spieler broadcastet beim Login nach 10s eigene Daten:
  - Name, Level, ClassId, Spezialisierung, Alts-Liste, Rolle, Notiz
- Andere Spieler empfangen und speichern in `GuildDeathLogDB.roster`
- `REQ`-Broadcast nach 6s: andere antworten mit ihren Daten
- Partieller Broadcast nach Alt/Rolle-Änderung (0.5s Verzögerung)

**Slash-Commands:**
```
/gdl alt add Charname     → Alt zu deinem Charakter hinzufügen
/gdl alt remove Charname  → Alt entfernen
/gdl alt list             → Alle deine Alts anzeigen
/gdl alt clear            → Alle Alts löschen
/gdl role Main Tank       → Gilden-Rolle setzen (max 30 Zeichen)
/gdl note Mein Text       → Persönliche Notiz setzen (max 50 Zeichen)
/gdl roster               → Hilfe + eigene Alts anzeigen
```

**Roster-Sektion im Professions-Tab:**
- `BuildRosterSection()` — blauer Kategorie-Header (wie Meilensteine)
- Zeilen im MilRow-Stil: 38px (ohne Alts) / 56px (mit Alts)
- Icon-Backing klassenfarb-getönt, Name gold, Level+Spec warmbraun
- Rolle rechts in hell-blau
- Alts in der Bodenleiste grau mit `Alts:` Prefix

---

## Version 8.1.0 - CHRONIK DER GEFALLENEN: MEILENSTEIN-REDESIGN

### Redesign: Chronik der Gefallenen

**Tag-Trennbalken (`CreateDaySeparator`) — neu wie `RenderAchCategoryHeader`:**
- 30px Höhe (vorher 32px mit Morpheus-Schrift)
- Warmes Amber-Hintergrundtint `(0.32, 0.18, 0.04)` wie Meilenstein-Kategorie-Header
- Shimmer-Overlay oben (ADD Blend)
- Goldene 2px Toplinie + 1px Bottomlinie
- 3px linker Akzentbalken `(0.90, 0.68, 0.16)` — identisch mit RenderAchCategoryHeader
- Skull-Icon (20×20) + Datum in `|cffF0C060` mit FRIZQT 10pt (vorher MORPHEUS 11pt)
- Todes-Anzahl rechts: farbkodiert (rot ≥5, gold ≥2, grau =1)

**Eintragszeilen (`CreateDeathEntry`) — neu wie `RenderMilRow`:**
- 44px / 62px (mit Letzten Worten) — vorher 60px / 78px
- Warmes klassen-getöntes Hintergrundtint `(col*0.14)` wie MilRow
- Shimmer-Zone oben (ADD Blend, wie MilRow)
- **Icon-Layout**: 28×28 Klassen-Icon-Backing + 24×24 Icon — exakt wie MilRow (vorher 38×38)
- **Name**: `|cffF0C060` Gold 10pt (wie MilRow nameStr unlocked) — vorher helle Klassenfarbe 12pt
- **Info-Zeile 1**: Level + Klasse in warmem Braun `(0.68, 0.55, 0.32)` — wie MilRow descStr
- **Info-Zeile 2**: Zone (teal) + Töter (rot) — 8pt wie MilRow
- **Datum rechts**: zweistellig `dd.mm.yy` + Uhrzeit darunter (wie MilRow statusStr) — kein großes Badge mehr
- **Letzte Worte**: Bodenstreifen 20px in warmem Braun — konsistent mit MilRow
- **Hover**: Hintergrund-Aufhellung + Icon-Backing brightening — wie MilRow OnEnter/OnLeave
- Untertrennlinie 316×1px wie MilRow

---

## Version 8.0.0 - CINEMATIC ANIMATION OVERHAUL - "ABSOLUTE BOMBE"

### Neue Features

**AnimFX.lua - Zentrales Animations-Effekte-Modul (NEU):**
- `AnimFX.ScreenFlash(r,g,b,dur,alpha)` — Vollbild-Farb-Flash mit quadratischem Fade-out
- `AnimFX.Vignette(dur,alpha)` — Dramatisches Abdunkeln der Bildschirmränder (cinematic)
- `AnimFX.ParticleBurst(x,y,count,r,g,b,spread,life)` — Partikel-Explosion mit Physik (Gravitation, Rotation)
- `AnimFX.ShakeFrame(frame,intensity,dur)` — Frame-Shake via dediziertem Ticker (kein OnUpdate-Konflikt)
- `AnimFX.GlowRing(parent,r,g,b,size,dur)` — Expandierender Glow-Ring mit eased Scale
- `AnimFX.ShimmerSweep(frame,r,g,b,dur)` — Licht-Streif zieht von links nach rechts
- `AnimFX.IconPunch(frame,scale,dur)` — Spring-Bounce für Icons (Overshoot-Effekt)
- `AnimFX.SparkleTrail(frame,r,g,b,dur)` — Drei sequentielle Glitzer-Wellen sweepen horizontal
- `AnimFX.RuneCircle(parent,r,g,b,radius,dur)` — Vier Rune-Texturen orbiten den Frame
- `AnimFX.DeathWail(overlay,r,g,b)` — Volle Todessequenz: Vignette + Klassen-Flash + Weißschnitt + GlowRing + RuneOrbit + PartikelExplosion + Shake + Shimmer + Zweite Welle
- `AnimFX.MilestoneFanfare(toast,r,g,b)` — Gold-Fanfare: Flash + GlowRing + RuneOrbit + Partikel + SparkleTrail + Shimmer
- `AnimFX.AchievementFanfare(toast,r,g,b)` — Achievement-Fanfare in Grün/Gold
- `AnimFX.CalendarBell(toast,isDelete)` — Kalender-Toast FX in Blau (neu) / Rot (gelöscht)
- `AnimFX.BookOpenEffect(bookFrame)` — Staub-Partikel + Amber-Flash + Shimmer + RuneOrbit beim Buchöffnen
- Partikel-Pool: 64 wiederverwendbare Frames (KEINE Memory-Leaks, kein GC-Stress)
- Alle Effekte: `BlendMode("ADD")` für leuchtende WoW-native Optik
- Taint-sicher: keine geschützten Frames modifiziert

**Death-Overlay: Cinematic DeathWail-Sequenz:**
- Beim Öffnen des Todesframes wird `AnimFX.DeathWail` mit der Klassen-Farbe aufgerufen
- Vignette verdunkelt die Welt dramatisch für 2.8 Sekunden
- Klassen-farbiger Blitz, weißer Schnitt, Partikelexplosion, Shake, zweite Partikelwelle
- Intro-Scale von 0.85→1.0 für dramatischeren Eintritt (vorher 0.93→1.0)

**Milestones-Toast: Gold-Fanfare beim Unlock:**
- Am Ende der Slide-In-Animation wird `AnimFX.MilestoneFanfare` ausgelöst
- Goldener Bildschirm-Flash + expandierender Glow-Ring + Rune-Orbit + Partikel-Burst + Shimmer-Sweep

**Achievement-Toast: Grün/Gold-Fanfare:**
- Nach dem Slide-In: grüner Flash für Gilden-Achievements, goldener Flash für persönliche
- GlowRing + Partikel-Explosion + Shimmer-Sweep

**Calendar-Toast: Push-Bell-Effekt:**
- 0.28s nach dem Slide-In: blaue Partikel (neues Event) oder rote Partikel (gelöscht)
- GlowRing + Partikel-Burst + (bei neuem Event) Shimmer-Sweep

**Book-Öffnen: Staubige Pergament-Atmosphäre:**
- 0.12s nach dem Öffnen: goldene Staub-Partikel steigen auf
- Amber-Screen-Flash + Shimmer-Sweep durch das Buch + Rune-Orbit

### Technische Änderungen
- `Modules/AnimFX.lua` vor `Modules/UI.lua` in `GuildDeathLog.toc` eingetragen
- Version 8.0.0 (Major-Bump für vollständigen Animations-Overhaul)

---

## Version 7.16.0 - LIVE MAP TRACKING, KALENDER DELETE-PUSH & LESBARKEITS-FIX

### Neue Features

**Nameplates: GDL-Addon-Titel über Spielernamen (Titles.lua) — NUR Classic 1.15.8:**
- Addon-Titel anderer Spieler erscheinen direkt unter ihrem Namen auf der Nameplate
- Format: goldener Text `[Titel]` in `|cffF0C060` direkt unter dem Namens-FontString
- Aktivierung: IMMER aktiv für alle Spieler mit dem Addon (kein Supporter-Code nötig zum Anzeigen)
- Senden des eigenen Titels: Supporter-Feature (nur Inhaber eines Codes broadcasten ihren Titel)
- Broadcast-Kanäle: GUILD + PARTY + RAID (auch nicht-Gildenmitglieder in Gruppe sehen Titel)
- Request bei Login: automatische Anfrage nach 8s damit bereits gesendete Titel empfangen werden
- Guild-Beschränkung entfernt: jeder Spieler mit dem Addon wird angezeigt (nicht nur Gildenmitglieder)
- `CleanupNonMembers`: bereinigt nun Guild-Ex-Mitglieder UND behält Daten für aktive Gruppen-Member
- `IsForbidden()` Guard: verhindert Lua-Fehler bei geschützten Nameplate-Frames im Kampf
- **Bug fix**: `RefreshAllNameplateTitles` hatte `GetNamePlateForUnit and nil` (immer nil) → korrekte Unit-Token-Suche in `for i=1,40` loop
- Classic Era 1.15.8: `CompactUnitFrame_UpdateName` hook + `NAME_PLATE_UNIT_ADDED` Event (beide seit 1.13.2 verfügbar) ✓

**Weltkarte: Live-Positionstracking von Gildenmitgliedern (MapMarkers.lua):**
- Alle Spieler mit dem Addon senden alle 8s ihre Position via Addon-Kanal `GDLPos` an die Gilde
- Weltkarte zeigt klassen-farbige Marker für jeden Gildenmitglieder auf der aktuellen Karte
- Marker: Klassen-Icon (16×16) + farbiger Glow-Ring + Puls-Animation (ADD Blend, schlägt alle 2s)
- Name-Label über jedem Live-Marker (FRIZQT 7pt, OUTLINE)
- Tooltip: `[Live] Name` in Klassenfarbe + Koordinaten + "vor Xs aktualisiert"
- Minimap: Klassen-farbige Punkte für Gildenmitglieder auf gleicher Karte (3s Update-Rhythmus)
- Marker verschwinden automatisch nach 30s ohne Update (Spieler offline/Kartenwechsel)
- Classic 1.15.8 + TBC 2.5.5 kompatibel (verwendet `C_Map.GetBestMapForUnit` + `C_Map.GetPlayerMapPosition`)
- Todes-Marker (Totenkopf) und Live-Marker koexistieren auf der Weltkarte

**Kalender: Push-Benachrichtigung bei Event-Löschung:**
- `BroadcastEvent DELETE` Bug gefixt: Serialisierter Payload statt reiner Event-ID wurde gesendet → Event-IDs wurden nicht korrekt verglichen
- DELETE jetzt: `"DELETE|eventId"` (korrektes Format) → Empfänger findet Event zuverlässig
- Toast-Benachrichtigung für andere Spieler wenn jemand ein Event löscht (rote Akzentfarbe)
- Toast für den Löschenden selbst mit `[Event geloescht]` Badge
- Lösch-Toast: Roter Topbar (`0.55, 0.12, 0.04`) + rotes Linksakkzent + desaturiertes Icon
- CREATE-Toast: Weiterhin blau/teal (unverändert)

### Visuelle Fixes

**Berufe der Gilde – Textfarbe auf Pergament-Hintergrund:**
- Berufsname: `|cff684820` → `|cff3A2008` (dunkleres Braun, klar lesbar)
- Level-Text: `|cff684820` → `|cff3A2008`
- "Berufe unbekannt": `|cff583020` → `|cff705038` (sichtbarer)
- Trennzeile "Ohne Addon": `|cff785030` → `|cff3A2008`
- Zusammenfassungszeile: `|cff684820` → `|cff3A2008`

**Abenteurer der Gilde (Gildenkarte) – Textfarbe verbessert:**
- Online-Count Badge: `|cff006600` → `|cff1A7A1A` (satteres Grün, kein Ausbluten)
- Offline-Count: `|cff583830` → `|cff5A3818` (harmonischer)
- Gesamt: `|cff785030` → `|cff3A2008`
- Online-Header: `|cff006600` → `|cff1A7A1A`
- Mitglieder-Rows Level: `|cff684820` → `|cff3A2008`
- Zone: `|cff684820` → `|cff264870` (dunkles Marineblau – kontrastiert perfekt gegen Pergament)
- Offline-Header: `|cff583830` → `|cff5A3818`
- Offline-Namen: `|cff583020` → `|cff4A3020`
- Subtitle: `|cff583830` → `|cff3A2008`

---

## Version 7.15.0 - UI PREMIUM REFRESH: Lesbarkeit, Milestone-Stil & Gilden-Push

### Optik & Lesbarkeit

**Titel & Ränge (Kapitel VII) – Milestone-Style komplett überarbeitet:**
- Drei Kategorie-Header im `RenderAchCategoryHeader`-Stil: "Aktiver Titel", "Freigeschaltete Titel", "Gesperrte Titel"
- Aktiver Titel erhält goldene Hervorhebungszeile mit eigenem Bereich
- Freigeschaltete Titel: klickbare Rows mit Icon, Name, Beschreibung, Status-Badge, Hover-Tooltip & Highlight
- Gesperrte Titel: desaturiert, ausgegraut, mit Tooltip
- Konsistente Farbsprache: Gold für aktiv/freigeschaltet, Grau für gesperrt

**Gilden-Statistiken (Kapitel IX) – Schrift deutlich aufgehellt:**
- Labels: `|cff785030` → `|cffD4AA5E` (warmes Gold, deutlich lesbarer)
- Werte: `|cff684820` → `|cffE8C870` (helles Gold)
- Sub-Infos: `|cff583020` → `|cffB8A880` (warmes Creme)

**Chronik der Gefallenen – Komplett-Redesign v2 (Premium Layout):**
- Eintrags-Rows: 60px (Standard) / 78px (mit Letzten Worten) — saubere Proportionen
- 4px linker Klassen-Akzentbalken (vivid, α 1.0) + 20px ADD-Bloom Glow (breiter als vorher)
- Klassen-getönte Backgrounds: `col * 0.09 / 0.055 / 0.015` α 0.60 (kräftiger, besser lesbar)
- **FIX: Separator-Bug behoben** — `\xC2\xB7` (Kästchen im Spiel) ersetzt durch zwei klar getrennte Info-Zeilen
- Info-Zeile 1: `Lv.X  Klasse` in warmem Grau (`0.78, 0.68, 0.54`) — klar lesbar
- Info-Zeile 2: Zone in `|cff5AC8D8` (Teal) + Killer in `|cffFF7A68` (Rot) mit ` - ` Trenner
- Datum: Pill-Badge mit sichtbarem Dark-Background (`0.08, 0.055, 0.015, 0.82`) + klassen-getönter Top-Border
- Datum-Farbe: `|cffD0B878` (helles Gold), FRIZQT 8pt, RIGHT-aligned
- Klassen-Icon: 32×32 in 38×38 Backing-Square + Farb-Ring (zentriert, professioneller Rahmen)
- Name: FRIZQT 12pt (von 11pt), `col * 1.40 + 0.10` — markanter, präsenter
- Letzte Worte: 20px Strip unten + 1px Klassen-Divider-Linie + `|cffCCB490` Cream-Farbe, FRIZQT 9pt
- Hover: bg brightening auf 0.75, iconBorder-Ring leuchtet stärker
- Tooltip: Zone in `0.38, 0.80, 0.88` (kräftiges Teal), Letzte Worte `|cffCCB490`
- Day-Separator: 3px linker Gold-Akzentbalken, Count-Badge als Pill, Shimmer, MORPHEUS in `|cffF0C060`
- Admin-Delete-Button: BOTTOMRIGHT, α 0.18 → 1.0 on Hover (unverändert)

**Todeskarte (Death Overlay) – Text-Kontrast & Timestamp:**
- Zone/Killer/LastWords: alle Fonts erhalten `"OUTLINE"` Flag + Shadow-Color 100% schwarz
- Zone: Font 13 → 12 mit OUTLINE (knackige Lesbarkeit)
- Killer: Farbe 0.9,0.3,0.3 → 1.0,0.35,0.25 mit OUTLINE + Shadow
- Letzte Worte: Farbe 0.8,0.75,0.6 → 0.88,0.80,0.62 mit OUTLINE + Shadow
- **NEU: Timestamp-Zeile** – "Gefallen am TT.MM.JJJJ um HH:MM Uhr" in warmem Goldton (OUTLINE) zwischen Zone und Killer

### Neue Features

**Kalender – Gilden-Push-Notification:**
- Wenn ein Spieler ein Event erstellt → Toast-Notification mit Slide-In-Animation (blau/teal)
- Wenn ein Gildenmitglied ein neues Event anlegt (via Sync ADD) → Toast bei allen anderen Mitgliedern
- Toast zeigt: Event-Icon, Event-Name, Datum/Uhrzeit, Ersteller
- Klick auf Toast öffnet den Kalender direkt
- Auto-Hide nach 8 Sekunden mit Fade-Out-Animation
- Neue Funktion: `UI:ShowCalendarToast()`, `UI:BuildCalendarToastFrame()`, `UI:DisplayCalendarToast()`



### Feature: Modules/Milestones.lua — Expansion-basierte Meilenstein-Filterung

**Konzept:** Das Addon erkennt beim Laden automatisch ob es auf Classic 1.15.x
oder TBC 2.5.x läuft (via `Compat.lua` TOC-Version) und zeigt nur passende
Meilensteine an. Kein manuelles Umschalten nötig.

**Classic 1.15.x zeigt:**
- Level-Meilensteine 10–60 ("Level 60 – UNSTERBLICH!")
- Alle Classic-Dungeons & -Raids (RFC bis Naxx)
- Classic-Meta: `meta_immortal_veteran`, `meta_true_immortal`, `meta_godslayer`,
  `meta_perfectionist`, `meta_legend_azeroth`, `meta_pvp_master`, `meta_ultimate`
- Universelle Meilensteine (Kills, Playtime, Professions, PvP, Social)

**TBC 2.5.x zeigt:**
- Level-Meilensteine 10–60 (neutral: "Level 60") + Level 70 ("UNSTERBLICH!")
- Alle Classic-Dungeons & -Raids (weiterhin sichtbar, man kann sie machen)
- 15 neue Outland-Dungeon-Meilensteine (Ramparts bis Magister's Terrace)
- 8 neue TBC-Raid-Meilensteine (Karazhan bis Sunwell / Kil'jaeden)
- TBC-Meta: `meta_all_tbc_dungeons`, `meta_all_tbc_raids`, `meta_outland_legend`,
  `meta_immortal_vet_tbc`, `meta_true_immortal_tbc`, `meta_godslayer_tbc`
  (Illidan + Kil'jaeden), `meta_pvp_master_tbc`, `meta_ultimate_tbc`
- KEIN Classic-Level-60-Cap als "Endmeilenstein"

**Technisch:**
- `MILESTONE_DEFS_ALL` enthält alle Definitionen mit optionalem `expansion` Tag
- `TBC_MILESTONE_DEFS` enthält alle neuen TBC-Inhalte (alle mit `expansion = "tbc"`)
- `MILESTONE_DEFS` wird beim Laden einmalig aus gefilterten Listen gebaut
- Lokalisierung: deDE + enUS enthalten alle neuen TBC-Strings

### Feature: Modules/Achievements.lua — survivor_70 für TBC

- `survivor_70` "Wahrer Unsterblicher": Level 70 ohne zu sterben — nur aktiv wenn
  `addon._compat.isTBC` true ist (check gibt immer false in Classic)
- `survivorMap` in `CheckHCReset()` um Level 70 ergänzt

## Version 7.13.1 - UI-LESBARKEIT: Schrift fett/schattiert behoben

### Bugfix: Modules/UI.lua — OUTLINE und schwere Schatten entfernt

**Problem:** Fast alle FontStrings im Buch-UI verwendeten `"OUTLINE"` in `SetFont()`
was Text fett und schwer lesbar wirken ließ, dazu Shadow-Alpha-Werte bis 0.85
die auf dem hellen Pergament-Hintergrund die Schrift zusätzlich erschwerten.

**Fix:**
- `"OUTLINE"` aus allen `SetFont()`-Aufrufen im Buch-UI entfernt
  (Killstats-Rangliste, Errungenschaft-Status, Export-Buttons, Meilenstein-Fortschritt)
- Shadow-Alpha-Werte reduziert: >= 0.40 → 0.15, Werte 0.20–0.39 → 0.12
- **Ausnahmen (bewusst beibehalten):**
  - Tod-Overlay (`nameText`, `classText`, `scaleText`) — dunkler Hintergrund benötigt OUTLINE
  - Errungenschaft-/Meilenstein-Toast-Badges — dunkler Hintergrund benötigt OUTLINE
  - Tod-Overlay Schatten-Alpha 1.0 — für dramatischen Effekt auf dunklem Hintergrund
  - Delete-Button `x`-Label — funktionaler Minibutton, braucht OUTLINE für Sichtbarkeit

## Version 7.13.0 - CHARAKTER-ISOLATION: Errungenschaften & Meilensteine per Charakter

### KERN-BUGFIX: Achievements.lua — per-Charakter GUID-Speicherung

**Problem:** Errungenschaften wurden account-weit als Flat-Table gespeichert
(`GuildDeathLogDB.achievements[achievementId]`). Das bedeutete:
- Alle Chars auf dem Account teilten dieselben Errungenschaften
- Stirbt "Herbert" (HC), wird gelöscht, und ein neuer "Herbert" erstellt →
  der neue Herbert erbte alle Errungenschaften des alten, obwohl er sie nie selbst erreicht hat

**Fix — Achievements.lua:**
- **`GetCharacterKey()`** neu: Verwendet `UnitGUID("player")` als eindeutigen Char-Key
  (exakt wie Milestones.lua) — jeder Char hat seinen eigenen GUID-Slot
- **`MigrateOldData()`** neu: Erkennt altes Flat-Format und verschiebt es einmalig
  in den GUID-Slot des aktuellen Charakters — kein Datenverlust beim Update
- **`CheckHCReset()`** neu: Erkennt HC-Tod anhand Survivor-Meilenstein vs. aktuellem Level.
  Ist der Char deutlich unter seinem höchsten freigeschalteten Survivor-Level
  (>10 Level Differenz) → alter Stand wird archiviert, Fortschritt zurückgesetzt
- **`Initialize()`** überarbeitet: Registriert `PLAYER_LOGIN` Event (GUID erst dann verfügbar),
  richtet per-Charakter-Storage ein, führt Migration + HC-Reset-Check aus
- **`CheckAll()`** bereinigt: Guard `if not self.charKey then return end`,
  falsches `GuildDeathLogDB.achievements = self.unlocked` (Referenz-Überschreibung) entfernt

**Fix — Milestones.lua:**
- **`CheckHCReset()`** erweitert: Archiviert beim HC-Reset-Erkennen jetzt auch die
  Errungenschaften des Chars (`GuildDeathLogDB.achievements[charKey]`) und informiert
  das Achievements-Modul live über den neuen leeren Slot

**Resultat:**
- Neuer "Herbert" (neue GUID) → leerer Errungenschaften-Slot → muss alles selbst erspielen ✓
- Gleiche GUID nach HC-Tod (Softcore/Ghost) → CheckHCReset erkennt Level-Drop → Reset ✓
- Gilden-Errungenschaften bleiben weiterhin gild-/account-weit ✓
- Bestehende Daten werden per Migration automatisch dem aktuellen Charakter zugeordnet ✓

## Version 7.12.3 - INHALTSVERZEICHNIS: GRÖßERE SCHRIFT & BESSERE FÜLLUNG
**Linke Buchseite füllt nun den gesamten verfügbaren Platz (354/355px)**

### INHALTSVERZEICHNIS (UI.lua)
- **Kapitel-Einträge**: Höhe 19 → **22px**, Font 10pt → **11pt** — deutlich mehr Präsenz
- **Icons**: 16×16 → **18×18px** — proportional zur neuen Schriftgröße
- **Kapitelnummer-Breite**: 32 → **34px** — Platz für zweistellige Nummern bei 11pt
- **Aktiv-Balken**: Höhe 17 → **20px** — passt zur Eintrags-Höhe
- **Kategorie-Labels**: 8pt → **9pt**, Abstände angepasst (3+2+12 = 17px)
- **Schritt-Weite** pro Eintrag: 19 → **22px**
- Gesamtinhalt nutzt jetzt **354 von 355px** verfügbarer linker Seite

## Version 7.12.2 - ADDON-ONLINE-ANZEIGE & SCHRIFT-FEINSCHLIFF

### MINIMAP HOVER-PANEL
- **Neue Zeile**: `📖 X mit Addon online` — zeigt Anzahl der Gildenmitglieder, die GuildDeathLog aktiv haben (via Sync-Modul)
- Goldene `|cffFFD100` Zahl wenn jemand online, gedimmt `|cff3A3028` wenn niemand aktiv
- Panel-Höhe: 180 → 195px; alle folgenden Elemente (Moral, Aktionen) um 14px nach unten gerückt

### SCHRIFT-FEINSCHLIFF (UI.lua)
- Alle Body-Farben nochmals ~15 Einheiten dunkler:
  - Body-Standard: `#7A5030` → `#6A4020`
  - Abschnitts-Labels: `#8A6040` → `#785030`
  - Sub-Labels: `#7A5830` → `#684820`
  - Unter-Text: `#6A5040` → `#583830`
  - Klassen/Zonen: `#7A5838` → `#684828`
  - Nachruf: `#7A6050` → `#685040`
  - Memorial Sub-Info: `#8A6840` → `#785838`
  - Nav-Texte: `#6A5030` → `#583020`

## Version 7.12.1 - LESBARKEIT & GEDENKHALLE-FIX
**Helle Texte auf Pergament schwer lesbar — alle Body-Farben auf dunklere Warm-Töne korrigiert**

### LESBARKEIT (globale Korrekturen)
- **`MakeBookLine` Threshold**: MORPHEUS nur noch ab Größe ≥ 14pt (war 11pt) — verhindert ungewollten Fett-Text bei normaler Body-Schrift (11–13pt bleiben FRIZQT)
- **`MakeBookLine` Standardfarbe**: `|cff7A5030` (dunkles Warmbraun) statt `|cffC89870` (zu hell auf Pergament)
- **Masse-Replace**: `|cffC89870` → `|cff8A6040` (alle ~30 Inline-Stellen)
- **Masse-Replace**: `|cffA08060` → `|cff7A5830` (alle Sub-Label-Stellen)
- **Masse-Replace**: `|cff9A8068` → `|cff6A5040` (alle Unter-Text-Stellen)
- **Masse-Replace**: `|cff9A7A58` → `|cff6A5030` (Nav/TOC-Kapitel-Texte)
- **Masse-Replace**: `|cff9A7858` → `|cff7A5838` (Klassen-/Zonen-Texte)
- **`MakeBookRow`**: Sub-Text `|cff7A5840`, Rechts-Text `|cff8A6040`
- **Hinweis-Text** "Letzten Worte festlegen": `|cffC8A050` → `|cffA07840`

### GEDENKHALLE (Gedrungen-Fix)
- **Sub-Info** (Level/Zone/Mörder): Schriftgröße 8pt → 9pt, Farbe `|cff8A6840`
- **Nachruf-Text**: 8pt → 9pt, Farbe `|cff7A6050` (lesbares dunkles Warmbraun)
- **Trenner zwischen Einträgen**: Goldene 1px Ornament-Linie + 10px Abstand (war 6px hart)

## Version 7.12.0 - KOMPLETTES BUCH-REDESIGN: Narcissus/DialogueUI-Immersion
**Jede Seite, jeder Text, jedes Element überarbeitet — visuelles Gewicht, Atmosphäre, Lesbarkeit**

### GLOBALE FARB-REVOLUTION
- **Masse-Replace 1**: `|cff1A0A00` (nahezu-schwarz) → `|cffC89870` (warmes Pergament-Gold) — 27 Stellen
- **Masse-Replace 2**: `|cff2E1E0E` (fast-schwarz) → `|cffA08060` (mittleres Warmbraun) — 14 Stellen
- **Masse-Replace 3**: `|cff3A2A18` (dunkel, Nav) → `|cff9A7A58` (lesbar warm) — alle Nav-Texte
- **Masse-Replace 4**: `|cff4A3A28` (dunkel) → `|cff9A8068` (warm lesbar) — Memorial, Guild, Titles
- **Masse-Replace 5**: `|cff5A4A38` (dunkel) → `|cff9A7A58` (warm lesbar) — weitere Stellen
- **Masse-Replace 6**: `|cff5A4230` (Nav-Nummern dunkel) → `|cff8A6848` (sichtbar)

### LINKE BUCHSEITE
- **Buchtitel**: MORPHEUS 18pt (war 16pt), warmgold `#D4AA5E` (war fast-schwarz `#2C1A08`)
- **Gildenname**: Textfarbe 0.75/0.55/0.30 (war 0.42/0.30/0.18 = kaum sichtbar)
- **Ornamentlinie**: Helleres Gold 0.60/0.45/0.20 mit 0.70 Alpha
- **Kapitel-Hover**: `#F0C060` hell-gold statt mattem `#B8975A`

### RECHTE BUCHSEITE
- **Seitentitel**: MORPHEUS 16pt in `#D4AA5E` gold (war `#3a2518` dunkelbraun — kaum lesbar)
- **Ornamentlinien**: Heller 0.65/0.50/0.18 mit 0.70 Alpha + goldene Eckdots 0.82/0.62/0.20
- **Untertitel**: 0.68/0.52/0.32 (war 0.35/0.28/0.20 = zu dunkel)
- **SetRightPageHeader**: Kapitel-Titel immer in warmgold `#D4AA5E`

### MakeBookLine (Buchtext-Helper)
- **H1-Erkennung**: Schriftgröße ≥ 11 → automatisch MORPHEUS statt FRIZQT
- **H1-Standard-Farbe**: `#D4AA5E` (bright gold, dramatic) vs. `#C89870` für Fließtext
- **Text-Shadow** hinzugefügt: alle Texte mit 0.65 Alpha Shadow für Tiefe

### MakeBookRow (Datenzellen)
- **Zellen-Hintergrund**: Dunkelbraun 0.05/0.03/0.01 mit 0.30 Alpha (wie Narcissus data-rows)
- **Top-Trennlinie**: Gold 0.45/0.32/0.10 mit 0.18 Alpha pro Zeile
- **Icon**: 20×20 mit 4px Rand (war 2px), sauberer positioniert
- **Haupt-Text** mit Shadow, **Sub-Text** in `#9A8068`, **Rechts-Text** in `#C89870`

### STATISTIKEN-SEITE
- **Zonen-Balken**: Höhe 14px (war 10px), Farbe `0.82/0.20/0.12` mit 0.72 Alpha (lebendiges Rot)
- **Zonen-Labels**: `#8AA8C8` (helles Blaugrau) statt `#C89870` — klare Unterscheidung
- **Level-Balken**: Höhe 12px (war 8px), Heatmap-Farben kräftiger (0.75 Alpha)
- **Level-Zähler**: `#F0C060` bright-gold statt `#C89870`

### RUHMESHALLE
- **Namen**: MORPHEUS 11pt (war FRIZQT 11pt OUTLINE — fett/hässlich), klassenfarb-getönt
- **Level/Klasse**: `#C89870Lv. #F0C060Level  #9A7858Klasse` — 3-fach Farbhierarchie
- **Rang-Badge**: kein OUTLINE mehr (war OUTLINE 8pt)
- **Lebt-Badge**: kein OUTLINE mehr

### ERRUNGENSCHAFTEN-KATEGORIE-HEADER
- Höhe 30px (war 26px)
- 2px farbige Top-Linie + ADD-Shimmer
- Linker 3px Akzentbalken (kategorie-farbig)
- OUTLINE-freier Text in `#F0C060`
- Fortschritts-Badge: grün/gold/gedimmt je nach Prozentsatz

## Version 7.11.1 - CHRONIK DER GEFALLENEN: Vollständiges Immersiv-Redesign
**Narcissus/DialogueUI-Stil: Stärkeres visuelles Gewicht, mehr Atmosphäre, bessere Lesbarkeit**

### EINTRÄGE (CreateDeathEntry)
- **Höhe**: 80px (Standard) / 96px (mit Letzten Worten), war 62/78
- **Hintergrund**: Tieferes warmes Pergament `0.06/0.03/0.01` + Narcissus-Schimmer oben (26px)
- **Akzentbalken**: 4px statt 3px, ADD-Blend-Bloom (16px) hinter dem Balken
- **Klassen-Icon**: 38×38 statt 26×26, klassenfarb-getöntes Backing + Rahmen-Textur, Top-Sheen (Narcissus-Stil)
- **Name**: MORPHEUS 12pt (war 11pt), hellere Klassenfarbe ×1.25, Position bei 60px Abstand
- **Level/Klasse**: FRIZQT 9pt (war 8pt), klarer lesbar
- **Subtile Mittellinie** zwischen Name-Block und Kontext (Zone/Killer), klassenfarb-tönend
- **Hover**: Stärkeres Feedback – BG 0.14/0.08/0.02, Icon-Rahmen aufgehellt, Akzentbalken 100% sichtbar

### TAG-TRENNER (CreateDaySeparator)
- **Höhe**: 32px (war 24px)
- **Datum**: MORPHEUS 11pt in warmgold `#D4AA5E` (war FRIZQT 8pt) — deutlich dramatischer
- **2px goldene Kopflinie** + ADD-Shimmer-Streifen
- **Skull-Icon**: 18px (war 13px), stärkere Präsenz
- **Ornament-Linie** neben Skull
- Zähler rechts in warmem Orange statt gedämpftem Braun

## Version 7.11.0 - VISUELLER FEINSCHLIFF: Lesbarkeit & Immersion
**Alle Buchseiten: OUTLINE-Schriften entfernt, Farben aufgehellt, Kästchen-Icons ersetzt**

### VERBESSERUNGEN
- **Meilensteine – FETTE Schrift entfernt**: Erreichte Meilenstein-Namen verwenden kein `OUTLINE`-Flag mehr → schlankere, elegantere Darstellung. Neue Textfarbe `#F0C060` (warmgold) für freigeschaltete, `#7A7060` (gedämpft) für gesperrte Meilensteine
- **Errungenschaften – OUTLINE entfernt + Farben**: Gleiches Fix wie Meilensteine; freigeschaltete persönliche Errungenschaften in `#F0C060`, Gilden-Errungenschaften in `#88DDAA`
- **Graue Icon-Kästchen beseitigt**: Gesperrte Errungenschaften hatten `0.2/0.2/0.2` (grau) als Icon-Rahmen-Farbe – jetzt dunkles Warmbraun `#1A140D` statt Grau
- **Status-Badges entfernt**: Die hässlichen "Erreicht/Gesperrt"-Boxen durch ein simples Check/X-Icon ersetzt (kein Rahmen-Frame mehr)
- **Sub-Kategorie-Headers**: `OUTLINE` von Gilden-Unterkatgeorie-Beschriftungen entfernt
- **Chronik der Gefallenen – Textfarben aufgehellt**:
  - Level-Text: `#7A6250` → `#C89870` (gut lesbar warm)
  - Klassen-Text: `#4A3828` → `#9A7858` (lesbar)
  - Zonen-Text: `#506070` → `#8AA8C8` (helles Blaugrau)
  - Killer-Text: `#CC4444` → `#FF8878` (lebendiges Rot)
  - Letzte Worte: `#6A5840` → `#9A8868` (warmes Elfenbein)
  - Datum: `#5A4030` → `#9A8070`, Zeit: `#4A3828` → `#7A6858`

---

## Version 7.10.5 - BUGFIX: Gilden-Errungenschaften Zeitstempel
**Kritischer Logikfehler in "Sieben Tage Stille" und "Eiserne Ordnung" behoben**

### BUGFIXES
- **"Sieben Tage Stille" / "Eiserne Ordnung"** feuerten falsch, wenn Tode mit fehlendem oder ungültigem Timestamp (nil/0) gespeichert waren – `time() - 0` = Milliarden Sekunden → immer wahr
- **Root Cause**: `gd.deaths[#gd.deaths].timestamp or 0` – der Fallback `or 0` machte alle Zeitchecks permanent wahr bei defekten Einträgen
- **Fix**: Neue Helper-Funktionen `GetNewestDeathTimestamp()` und `GetOldestDeathTimestamp()` iterieren alle Tode und finden den echten Max/Min-Timestamp – kein Fallback auf 0 mehr
- **"Alte Garde"**: Gleicher Fix für `gd.deaths[1]` → nutzt jetzt ebenfalls `GetOldestDeathTimestamp()`

---

## Version 7.10.2 - FEINSCHLIFF & TYPOGRAFIE
**Buch-Icon entfernt, Schrift einheitlich, Supporter aus TOC, Close-Button neu positioniert**

### VERBESSERUNGEN
- **Buch-Icon aus Titel entfernt** – "Das Buch der Gefallenen" steht nun sauber zentriert ohne überlappende Grafik
- **Titel und Gildennamen zentriert** – alle Header-Offsets korrigiert, ornamentale Linie ebenfalls mittig
- **TOC-Schrift von MORPHEUS auf FRIZQT gewechselt** – Kapitelnummern & Titel nun schlank, gut lesbar (10pt, kein OUTLINE)
- **Kategorie-Labels OUTLINE entfernt** – dünnere, lesbarere Beschriftungen
- **Schatten auf TOC-Einträge** – subtile Tiefe ohne Lesbarkeits-Verlust
- **Supporter+ aus TOC entfernt** – Premium-Seite weiterhin über Toolbar-Icon erreichbar
- **Close-Button** in den rechten Buchrand integriert (TOPRIGHT -22, -22)

---

## Version 7.10.1 - LAYOUT-FIX
**Buch-Layout korrigiert: Header-Überlappung, Spine-Linie, Scroll-Bereich**

### BUGFIXES
- **Buch-Höhe** auf 900×520 erhöht (war 450) – mehr Platz für alle 14 Kapitel
- **Buchseiten** auf 365×465 vergrößert (war 385) – genug Raum für TOC-Liste
- **chY-Startposition** von -38 auf -58 korrigiert – kein Overlap mit Header mehr
- **Header-Icons** kompakter: Ring 52→32px, Icon 34→22px, Glow 70→46px
- **Schwarze Mittellinie (Spine)** von 4px auf 2px reduziert
- **Scroll-Offset Chronik** von -58 auf -80 korrigiert – kein Overlap mit Stats-Frame
- **Kapitel-Einträge** 21px→19px, Kategorie-Trenner 19px→17px für bessere Passung

---

## Version 7.3.0 - IMMERSION & INTELLIGENCE
**3 neue Module, 20 Buch-Zitate, UI-Verfeinerungen, Letzte Worte in Chronik**

---

### NEUE MODULE

**Todes-Jahrestag (Anniversary.lua)**
- Erinnert beim Login an Gildenmitglieder die heute/vor X Tagen gefallen sind
- Jahrestage (1 Jahr, 2 Jahre...) mit besonderer Gedenk-Nachricht
- Meilenstein-Erinnerungen: 7 Tage, 30 Tage, 100 Tage nach dem Tod
- Automatisch 15s nach Login

**Zonen-Warnung (ZoneWarning.lua)**
- Warnt beim Betreten einer Zone in der Gildenmitglieder gestorben sind
- Schweregrade: VORSICHT (2-4 Tode), GEFAEHRLICH (5-9), TODESZONE (10+)
- Zeigt bis zu 3 Namen der Gefallenen
- Sound-Warnung bei 5+ Toden
- ZONE_CHANGED_NEW_AREA + ZONE_CHANGED Events

**Woechentlicher Gildenbericht (Report.lua)**
- `/gdl report` oder `/gdl bericht`
- Zeigt: Tode diese Woche / Monat / Gesamt
- Gefaehrlichste Zone, Gefaehrdetste Klasse
- Hoechster Gefallener, Letzter Tod mit Zeitangabe

### BUCH-ZITATE
- 20 neue atmosphaerische Zitate (DE + EN)
- Beispiele: "Geschrieben mit Tinte und Traenen", "Die Tapfersten fallen zuerst"

### UI-VERFEINERUNGEN
- **Grauer Balken entfernt**: Aktives Kapitel nur noch goldene Textfarbe
- **Fette Schrift behoben**: OUTLINE bei Errungenschaften/PowerLevel entfernt
- **Chronik-Eintraege**: Dezentere Hintergruende, alle Texte mit Shadow
- **Stat-Zahlen**: Von gold zu dunkelbraun (lesbar auf Pergament)
- **Letzte Worte in Chronik**: Falls vorhanden, direkt im Eintrag als Zitat
- **f.quote Bug gefixt**: Quote-Crash (nil value) endgueltig behoben

### VERSION
- Addon Version: 7.2.1 -> 7.3.0

---

## Version 7.2.1 - TODERKENNUNG VERBESSERT
**Robustere Tod-Erkennung, Patreon-Link korrigiert, UI-Optimierung**

---

### TODERKENNUNG (KRITISCH)
- **11 Sprach-Muster** fuer System-Tod-Nachrichten (DE/EN/FR/ES):
  - "ist gestorben", "has died", "hat die Stufe", "hat Stufe", "hat Level",
  - "hat das Level", "hat es nicht", "died at level", "did not survive",
  - "est mort", "wurde besiegt"
- **Retry-Mechanismus** bei System-Tod: Roster wird neu geladen + 2s Retry wenn Mitglied nicht sofort gefunden
- **Roster-Detection jetzt mit Benachrichtigung** (Sound + Overlay + Chat) - nicht mehr stumm

### UI
- "INHALTSVERZEICHNIS" Schriftzug entfernt (mehr Platz fuer 14 Kapitel)
- Kapitel-Startposition optimiert (-38px statt -50px)

### BUGFIX
- Patreon-Link korrigiert: patreon.com/PsYke86 (statt /GuildDeathLog)

### VERSION
- Addon Version: 7.2.0 -> 7.2.1

---

## Version 7.2.0 - EPISCHE MEILENSTEINE & TITEL
**30+ neue Meilensteine, 25+ epische Titel, PvP/Social/Survival/Quest-Tracking, frFR Lokalisierung**

---

### NEUE MEILENSTEIN-KATEGORIEN

**PvP Ehrenhafte Siege (5 Stufen)**
- 10 / 50 / 100 / 500 / 1.000 Honorable Kills
- Tracking ueber GetPVPLifetimeStats()

**Gildentode Miterlebt (5 Stufen)**
- 1 / 10 / 25 / 50 / 100 Gildentode
- Basiert auf gespeicherten Todes-Daten im Buch

**Echtzeit-Ueberlebenstage (4 Stufen)**
- 7 / 30 / 90 / 365 Tage seit erstem Login
- Real-Time Tracking (nicht /played)

**Quest-Abschluesse (4 Stufen)**
- 100 / 250 / 500 / 1.000 Quests
- Live-Tracking ueber QUEST_TURNED_IN Event

**Gilden-Groesse (3 Stufen)**
- 10 / 25 / 50 aktive Gildenmitglieder

**Neue Meta-Meilensteine (3 Stufen)**
- PvP-Legende: 500 HKs + Level 60
- Ewiger Chronist: 50 Gildentode + Alle Dungeons
- Avatar von Azeroth: Level 60 + Alle Raids + 50k Kills + 30 Tage /played

### EPISCHE TITEL (25+ NEUE)

**PvP-Titel (m/w)**
- Ehrenhafter Streiter/Streiterin -> Schlachtfeld-Kaempfer/in -> Gladiator/in der Arena -> Eroberer/in von Azeroth -> Blutiger Kriegsherr/Blutige Kriegsherrin -> Legende der Schlachtfelder

**Todeschronist-Titel (m/w)**
- Zeuge/Zeugin des Untergangs -> Chronist/in des Jenseits -> Totengraeber/in von Azeroth -> Gefaehrte/in des Sensenmanns -> Hueter/in der verlorenen Seelen

**Ueberlebens-Titel (m/w)**
- der/die Zaehe -> Eiserner Wille -> der/die Unbeugsame -> Ewige Flamme von Azeroth

**Quest-Titel (m/w)**
- Auftragssucher/in -> Abenteuer-Sammler/in -> Meister/in der Auftraege -> Wissenshueter/in von Azeroth

**Gilden-Titel**
- Treuer Gildengefaehrte/Treue Gildengefaehrtin -> Herz der Gilde -> Bollwerk der Gilde

**Ultimative Meta-Titel**
- Ewiger Chronist der Gefallenen / Ewige Chronistin der Gefallenen
- Avatar von Azeroth (hoechste Prioritaet: 520!)

### INTERNATIONALISIERUNG
- Franzoesisch (frFR) fuer alle neuen Titel hinzugefuegt
- Geschlechts-Varianten (m/w) fuer ALLE Titel
- DE / EN / frFR Support

### VERSION
- Addon Version: 7.1.0 -> 7.2.0

---

## Version 7.1.0 - SUPPORTER+ INTEGRATION
**Supporter-System komplett ins Buch integriert, Patreon-Gating fuer Titel & Meilensteine**

---

### SUPPORTER+ KAPITEL (NEU)
- Neues Kapitel XIV "Supporter+" im Inhaltsverzeichnis
- Supporter-Status-Anzeige (Aktiv/Nicht aktiv) mit Tier-Info und Ablaufdatum
- Discord-ID Eingabefeld und Code-Einloesung direkt im Buch
- Patreon-Link Button (kopiert URL in Chat)
- Uebersicht aller Supporter-Perks nach Tier (Bronze/Silber/Gold)

### SUPPORTER-ICON IN TOOLBAR (NEU)
- Herz-Icon (Supporter+) in der unteren rechten Icon-Leiste neben Debug, Settings, etc.
- Ein Klick oeffnet direkt Kapitel XIV

### SUPPORTER-LOCK (NEU)
- Kapitel IV "Meilensteine" und VII "Titel & Raenge" zeigen Lock-Screen wenn kein Supporter
- Lock-Screen erklaert Feature als rein kosmetisch (kein Pay-to-Win)
- Direkter "Zu Supporter+" Button fuehrt zu Kapitel XIV zum Code einloesen

### INHALTSVERZEICHNIS OPTIMIERT
- 14 Kapitel mit leicht reduziertem Zeilenabstand (21px statt 22px)
- Kein Ueberlappen mit Footer-Zitat

### VERSION
- Addon Version: 7.0.0 -> 7.1.0

---

## Version 7.0.0 - IMMERSIONS-UPDATE
**Klassen-Totenglocke, Minimap-Skulls, Gedenk-Kerzen, Errungenschaften, Risiko-System**

---

### KLASSEN-TOTENGLOCKE (NEU)
- Jede Klasse hat eigene Todes-Sounds (Krieger=Gong, Paladin=Heilig, Jaeger=Wolfsheulen, Magier=Fizzle, etc.)
- Klassen-Icon statt generischem Totenkopf beim Bildschirm-Flash
- Fallback auf NightElf-Glocke wenn Klasse unbekannt

### MINIMAP-TOTENKOEPFE (NEU)
- Rote Totenkopf-Icons auf der Minimap an Orten wo Gildenmitglieder starben
- Hover zeigt Name, Level, Zone und Datum des Todes
- Aktualisiert sich alle 3 Sekunden basierend auf Spieler-Position
- Nur Tode mit gespeicherten Koordinaten (posX/posY > 0) werden angezeigt

### GEDENK-KERZEN (NEU)
- Kerzen-Icon (Gasthaus-Symbol) neben jedem Eintrag in der Gedenkhalle
- Nachts (20:00-06:00) leuchten Kerzen heller (Alpha 1.0 vs 0.6)
- Immersives Detail fuer das Gedenk-Erlebnis

### BLUTFLECKEN-SEITEN (NEU)
- Ab 5 Toden: Subtile rote Flecken-Textur oben rechts auf der Gedenkhalle
- Ab 15 Toden: Zweiter Blutfleck unten links
- Je mehr Tod, desto "befleckter" das Pergament

### TODES-UHRZEIT-HEATMAP (NEU)
- 24-Stunden Balkendiagramm: Zu welcher Stunde sterben die meisten?
- Heatmap-Farben: Wenig Tode = braun, Viele Tode = tiefrot
- Uhrzeit-Labels (0h, 6h, 12h, 18h, 23h) unter dem Diagramm

### MONATSVERGLEICH (NEU)
- Saisonale Statistik: "Jan 2026: 8 Tode, Feb 2026: 12 Tode"
- Balkendiagramm mit roten Balken, letzte 6 Monate
- Integriert in die Statistik-Seite

### RISIKO-ANZEIGE (ERWEITERT)
- DangerZone zeigt jetzt persoenliches Risiko-Level (NIEDRIG/MITTEL/HOCH/SEHR HOCH)
- Beruecksichtigt Spieler-Level: Tode von Spielern aehnlichen Levels zaehlen mehr
- Farbcodiert: Gruen -> Gelb -> Orange -> Rot
- Supporter-Beschraenkung entfernt - fuer alle verfuegbar

### ERRUNGENSCHAFTEN-SYSTEM (NEU)
- 11 Errungenschaften freigeschaltet durch Spielfortschritt:
  - Erster Zeuge, Chronist des Todes, Meister der Trauer
  - Zaeh wie Leder (Lvl 10), Hartgesotten (Lvl 20), Veteran (Lvl 40), Unsterblich (Lvl 60)
  - Vollbesetzte Gilde, Lebensmude, Nachruf-Schreiber, Letzte Worte
- Bildschirm-Ankuendigung + Sound bei Freischaltung
- Neues Kapitel XIII "Errungenschaften" im Buch
- Gilden-Power-Level: Summe aller Level der lebenden Mitglieder

### VERSION
- TOC + Addon Version: 6.5.0 -> 7.0.0

---

## Version 6.5.0 - DAS GROSSE UPDATE
**Totenglocke, Gilden-Rekorde, Level-Verteilung, Letzte Worte, Nachruf-Editor, Lesezeichen**

---

### TOTENGLOCKE (NEU)
- **Bildschirm-Flash**: Roter Overlay-Effekt wenn ein Gildenmitglied stirbt
- **Totenkopf-Icon + Name**: "X ist gefallen" mit Level und Zone
- **Doppelter Glockenschlag**: Dramatischer NightElf Bell Toll Sound
- Ein/Ausschaltbar in den Einstellungen
- Nur bei echten Toden (nicht bei Silent-Sync)

### LETZTE WORTE (ERWEITERT)
- **NEU**: "Meine letzten Worte festlegen" Button in der Gedenkhalle
- Spieler koennen vorab ihre letzten Worte eingeben
- Erscheinen im Buch wenn der Spieler faellt
- Werden gespeichert in GuildDeathLogDB.myLastWords

### NACHRUF-EDITOR (NEU)
- **NEU**: Bearbeiten-Button (Stift-Icon) neben jedem Gefallenen in der Gedenkhalle
- Individuellen Nachruf pro Gefallenem schreiben
- Ueberschreibt den Auto-Nachruf
- Gespeichert in GuildDeathLogDB.customNachrufe

### GILDEN-REKORDE (NEU)
- Hoechster Level-Tod (Name + Level)
- Niedrigster Level-Tod (Name + Level)
- Toedlichster Tag (Datum + Anzahl Tode)
- Erster und Letzter Eintrag im Buch
- Jeder Rekord mit thematischem Icon

### LEVEL-VERTEILUNG (NEU)
- Histogramm: Bei welchem Level sterben die meisten?
- 7 Level-Brackets (1-9, 10-19, ..., 60)
- Heatmap-Farben: Je mehr Tode, desto roeter der Balken
- Integriert in die Statistik-Seite

### LESEZEICHEN (NEU)
- Letzte geoeffnete Buchseite wird gespeichert
- Beim naechsten Oeffnen des Buches automatisch auf der letzten Seite

### VERSION
- TOC + Addon Version: 6.4.0 -> 6.5.0

---

## Version 6.4.0 - STATISTIK-REDESIGN & VISUAL BARS
**Visuelle Balkendiagramme, Klassen-Icons, deutsche Klassennamen**

---

### STATISTIKEN KOMPLETT NEU
- **NEU**: Klassenstatistik mit visuellen Balken in Klassenfarben
- **NEU**: Klassen-Icons (Krieger-Schwert, Magier-Hut etc.) vor jedem Eintrag
- **NEU**: Deutsche Klassennamen statt numerischer IDs (Krieger, Paladin, Jaeger, etc.)
- **NEU**: Zonen-Statistik mit roten Gefahren-Balken (proportional)
- Leere Zonen werden nicht mehr angezeigt (kein "Unbekannt: 6" mehr)
- Balkenbreite proportional zum hoechsten Wert

### VERSION
- TOC + Addon Version: 6.3.0 -> 6.4.0

---

## Version 6.3.5 - BERUFE & ROSTER-DETECTION
**Alle Gildenmitglieder im Buch, Roster-Tod-Erkennung, Lesbarkeit**

---

### BERUFE-SEITE ERWEITERT
- **NEU**: Zeigt jetzt ALLE Gildenmitglieder, nicht nur Addon-Nutzer
- Oben: Mitglieder mit Berufsdaten (alphabetisch sortiert, mit Klassen-Icon)
- Unten: Mitglieder ohne Addon mit "Berufe unbekannt (kein Addon)"
- Zusammenfassung: "X mit Berufsdaten | Y ohne Addon"

### ROSTER-CHANGE DETECTION
- **NEU**: Guild:UpdateMembers() erkennt jetzt verschwundene Mitglieder
- Wenn ein Mitglied aus dem Gilden-Roster verschwindet = moeglicher HC-Tod
- Erstellt automatisch einen Todes-Eintrag mit gespeichertem Level/Klasse/Zone
- Duplikat-Pruefung: Kein doppelter Eintrag wenn Tod bereits bekannt (24h Fenster)
- `syncedFrom = "Roster-Detection"` zur Nachverfolgung

### LESBARKEIT VERBESSERT
- Statistiken: Alle Texte in #1A0A00 (fast schwarz), Zahlen in #CC0000 (dunkelrot)
- Gildenkarte: Online #006600 (dunkelgruen), Offline #4A3A28 (braun)
- MakeBookRow: SubText #2E1E0E, RightText #3A2A18 (global dunkler)
- Kill-Statistik: "Umgebung / Unbekannt" entfernt, nur echte Gegner im Ranking
- Inhaltsverzeichnis: Kompakter (24px statt 27px), ueberlappt Fusszeile nicht mehr

### KALENDER ERWEITERT
- **NEU**: Zusagen/Vielleicht/Absagen Buttons pro Event
- Aktive Antwort farblich hervorgehoben
- Teilnehmerliste: "Dabei: Spieler1, Spieler2, ..."

### BUGFIXES
- Fix: StaticPopup editBox -> EditBox Kompatibilitaet (Classic Era)
- Fix: Memorial nachruf war Table statt String (.memorial extrahiert)
- Fix: Titel jetzt klickbar mit Hover-Tooltip und Auswahl-Funktion

---

## Version 6.3.4 - GILDEN-SYNC & MEMBER-TRACKING
**Gildenmitglieder vollstaendig tracken, auch ohne Addon**

---

### GILDEN-SYNC VERBESSERUNGEN
- **NEU**: `Guild:UpdateMembers()` speichert jetzt vollstaendige Mitglieder-Daten (Name, Rang, Level, Klasse, Zone, Online-Status, Berufe, LastSeen)
- **NEU**: `Guild:GetMemberInfo(name)` - Einzelnen Spieler-Snapshot abfragen
- **NEU**: `Guild:GetAllMembers()` - Gesamte Gildenliste abrufen
- **NEU**: `Sync:ProcessIncomingDeath()` - Tode werden jetzt mit Gilden-Roster angereichert:
  - Fehlende `classId` wird aus Gilden-Snapshot ergaenzt
  - Fehlende `level` wird aus Gilden-Snapshot ergaenzt
  - Fehlende `zone` wird aus Gilden-Snapshot ergaenzt
- **Ergebnis**: Tode von Gildenmitgliedern OHNE Addon werden jetzt vollstaendig erfasst (Klasse, Level, Zone)

### GILDENKARTE ERWEITERT
- **NEU**: Gildenkarte zeigt jetzt ALLE Mitglieder (Online + Offline) statt nur Online-Spieler
- Online-Spieler: Gruen markiert mit Zone, Rang und Level
- Offline-Spieler: Grau markiert, begrenzt auf 30 Eintraege mit "... und X weitere" Hinweis
- Gesamt-Uebersicht: "X Online | Y Offline | Z Gesamt"

### DATENSTRUKTUR
- `guildData.members[key]` speichert jetzt vollstaendige Table-Objekte statt Boolean
- Abwaertskompatibel: Alte `true`-Eintraege werden beim naechsten Roster-Update automatisch ersetzt

---

## Version 6.3.3 - UI POLISH & FUNKTIONS-FIXES
**Layout, Lesbarkeit, Titel, Kill-Stats, Kalender, Regeln**

---

### BUGFIXES
- **FIX**: Titel-Seite zeigte "table: 000001B26EF9EC50" - `GetSelectedTitle()` gibt direkt Table-Objekt zurueck, jetzt korrekt `.name` extrahiert
- **FIX**: Kill-Statistiken: Leere/unbekannte Killernamen werden zu "Umgebung / Unbekannt" zusammengefasst
- **FIX**: Extra `end` in RenderTitles entfernt (Syntax-Fehler)
- **FIX**: Kalender "Neues Event"-Button war unsichtbar (canEdit-Check entfernt, jeder kann Events erstellen)
- **FIX**: Gilden-Regeln "Regeln bearbeiten"-Button war unsichtbar (canEdit-Check entfernt)
- **FIX**: GuildStats zeigte "Letzter: ?" - jetzt wird letztes Todesdatum und Zone aus deaths-Array gelesen

### LAYOUT-VERBESSERUNGEN
- **ScrollFrame**: Bottom-Padding von 10px auf 40px erhoeht - Content ueberlappt nicht mehr die Icon-Leiste
- **Nicht-Chronik Seiten**: Scroll-Start von -30 auf -36 verschoben - mehr Abstand zum Seiten-Header
- **MakeBookLine**: WordWrap aktiviert mit dynamischer Hoehe (`GetStringHeight`) - Gilden-Regeln und lange Texte ueberlappen nicht mehr
- **Chronik**: Hintergrundfarben staerker kontrastiert, Info/Zone/Datum-Text heller fuer bessere Lesbarkeit

### DARSTELLUNG
- **Kill-Statistiken**: Neue Formatierung mit Rang-Nummern, "X Kills" und Prozentangaben
- **Titel**: Freigeschaltete Titel in Gruen mit "Freigeschaltet", gesperrte in Rot mit "Gesperrt"
- **GuildStats**: Zeigt letztes Todesdatum + Zone statt "?"

---

## Version 6.3.2 - FUNKTIONS-UPDATE & BUGFIXES
**Crashes, Schriftfarben, Gedenkhalle, Kalender, Gilden-Regeln, Kill-Statistiken**

---

### CRASH-FIXES
- **CRASH FIX**: `Professions:GetClassColor()` gibt Table zurueck statt String - jetzt korrekte Konvertierung zu Hex-Farbcode
- **FIX**: Chronik-Seite ueberlappte andere Kapitel wenn GUILD_ROSTER_UPDATE ausgeloest wurde - jetzt wird `UpdateChronicle` nur bei aktivem Kapitel I ausgefuehrt
- **FIX**: Kill-Statistiken zeigten "Unbekannt" weil `killedBy` nicht existiert - korrigiert zu `killerName` (+ Fallbacks)

### SCHRIFTFARBEN (v2)
- Komplett ueberarbeitet: **Dunkle Schrift auf hellem Pergament** statt umgekehrt
  - Standard-Text: `#2E1E0E` (dunkles Braun)
  - Sub-Text: `#4A3A28` (mittleres Braun)
  - Rechts-Text: `#5A4A38` (warmes Braun)
  - Header: `#1E0E00` (fast Schwarz)
  - Platzhalter: `#6A5A48` (gedaempft)
  - Kapitel-Titel: `#3A2A18` (klar lesbar)

### NEUE FEATURES
- **Gilden-Regeln**: "Regeln bearbeiten"-Button fuer Offiziere/Gildenleiter mit Popup-Editor
- **Kalender**: "+ Neues Event"-Button + Loeschen-Button (X) pro Event fuer Offiziere
- **Gedenkhalle**: Jeder Eintrag zeigt jetzt einen generierten Nachruf (ueber Memorial-Modul)
  - Fallback-Nachruf wenn Memorial-Modul keinen liefert
  - Killer-Name wird angezeigt wenn verfuegbar
  - Datum korrekt formatiert (auch aus Timestamp)
- **Kill-Statistiken**: Killer-Daten aus korrektem Feld (`killerName`) - zeigt jetzt echte Daten

### VERBESSERUNGEN
- Statistik-Seite: Killer-Counts nutzen korrektes Datenfeld
- Gedenkhalle: Unterstuetzt sowohl `class` als auch `classId` fuer Klassen-Farben

---

## Version 6.3.1 - BUGFIX & VISUAL POLISH
**Crash-Fixes, Schriftfarben, Debug-Icon, Modul-Kompatibilitaet**

---

### BUGFIXES
- **CRASH FIX**: `f.quote` nil-Error in `UpdateChronicle()` behoben (Zeile 827) - tritt nicht mehr auf wenn Buch-Quote nicht vorhanden
- **CRASH FIX**: `Titles:GetActiveTitle()` existierte nicht - ersetzt durch `Titles:GetSelectedTitle()` + `GetTitleById()`
- **CRASH FIX**: `Titles:IsTitleUnlocked()` existierte nicht - ersetzt durch `Titles:GetUnlockedTitles()` Lookup-Map
- **CRASH FIX**: `Professions:GetGuildProfessions()` existierte nicht - ersetzt durch `Professions:GetAllProfessions()` mit korrekter Datenstruktur (prof1/prof2 statt Array)

### VISUELLE VERBESSERUNGEN
- **Schriftfarben komplett ueberarbeitet**: Alle Texte auf der rechten Buchseite sind jetzt heller und gut lesbar
  - Standard-Text: `#E8D4B0` (warmes Creme)
  - Sub-Text: `#C8B498` (goldbraun)
  - Rechts-Text: `#B8A888` (warm)
  - Platzhalter-Text: `#B8A888` statt unsichtbarem Dunkelbraun
- **Linke Seite aufgehellt**: Buchtitel, Inhaltsverzeichnis, Kapitel-Nummern und -Titel jetzt gut sichtbar
  - Haupttitel: `#F0E0C0` (hell-gold)
  - Kapitel-Nummern: `#C8A868` (gold)
  - Kapitel-Titel: `#D8C0A0` (helles Pergament)
- **Chronik-Leertext**: Gruene Meldungen aufgehellt fuer bessere Lesbarkeit

### NEUE FEATURES
- **Debug-Icon**: 5. Icon in der Toolbar (Fragezeichen) oeffnet das Debug-Fenster direkt aus dem Buch

---

## Version 6.3.0 - DAS GROSSE BUCH-UPDATE
**Zwei-Seiten-Buch-Design, Inhaltsverzeichnis, 15+ Bugfixes, Code-Qualitaet**

---

### NEU: Echtes Zwei-Seiten-Buch-Layout
Das komplette UI wurde als **offenes Buch** (880x500) mit Buch.png-Textur redesigned!

**Linke Seite - Inhaltsverzeichnis:**
- 12 Kapitel mit roemischen Ziffern (I - XII)
- Icons, Titel und gepunktete Trennlinien
- Hover-Effekt (goldene Hervorhebung)
- Aktives Kapitel wird dauerhaft markiert
- Zitat am unteren Seitenrand

**Rechte Seite - Chronik & Content:**
- Statistik-Leiste (Gefallene, Heute, Woche, Avg Lvl)
- Scroll-Bereich fuer die Todesliste
- Totenkopf-Ornament als Trenner
- Zitat am unteren Seitenrand
- Kompakte Utility-Buttons (Refresh, Sync, Export, Settings)
- Debug + Gildenleitung (Offizier-only)
- Scroll-fuer grosse Bildschirme und kleine Aufloesungen
- "Inhalt" / "Chronik" Buttons zum Wechseln zwischen Seiten

**Kapitel:**
| Nr. | Kapitel | Beschreibung |
|-----|---------|-------------|
| I | Die Chronik der Gefallenen | Alle Tode, verewigt auf Pergament |
| II | Ruhmeshalle der Unsterblichen | Jene, die dem Tod trotzten |
| III | Statistiken des Todes | Zahlen, die Geschichten erzaehlen |
| IV | Meilensteine & Erfolge | Errungenschaften auf dem Pfad der Sterblichen |
| V | Berufe der Gilde | Das Handwerk unserer Kameraden |
| VI | Die Todeskarte | Wo das Schicksal zuschlug |
| VII | Titel & Raenge | Ehren, verdient durch Ausdauer |
| VIII | Gedenkhalle | In Erinnerung an die Gefallenen |
| IX | Gilden-Statistiken | Das Gesamtbild unserer Gilde |
| X | Gilden-Regeln | Die Gesetze unserer Gemeinschaft |
| XI | Gilden-Kalender | Vergangene und kuenftige Ereignisse |
| XII | Kill-Statistiken | Wer oder was uns das Leben nahm |

---

### Bugfixes (15 Probleme behoben)

**Kritisch:**
- **Version-String Mismatch** - Header und Print-Nachricht sagten "v6.0.3" statt "v6.3.0"
- **MinimapButton Supporter-Crash** - `GuildDeathLogDB.supporter.tier` existierte nicht (korrekter Pfad: `supporterTier`), Supporter-Tier "VIP" zu "Silber" korrigiert, Farbe angepasst
- **TestMode.lua abgeschnitten** - Datei endete mitten im Code (Zeile 119), Slash-Command-Handler fehlte komplett

**Nil-Access Schutz:**
- **KillerTracker.lua** - Nil-Check fuer `subevent` hinzugefuegt bevor `:match()` aufgerufen wird
- **KillerTracker.lua** - Nil-Check fuer `playerName` nach `strsplit()` hinzugefuegt

**Double-Hide Bugs (7 Stellen in 6 Dateien):**
- Calendar.lua - `btn:Hide()` wurde doppelt aufgerufen
- Debug.lua - `c:Hide()` wurde doppelt aufgerufen (2 Stellen: onlineChild + logChild)
- GuildLeader.lua - `row:Hide()` wurde doppelt aufgerufen
- GuildStats.lua - `child:Hide()` wurde doppelt aufgerufen
- HallOfFame.lua - `c:Hide()` wurde doppelt aufgerufen
- Memorial.lua - `child:Hide()` wurde doppelt aufgerufen

**Logic-Bugs:**
- **GuildStats.lua Global Pollution** - `CLASS_NAMES` war global statt `local`, verschmutzte den globalen Namespace
- **GuildStats.lua Classic-Kompatibilitaet** - Death Knight (6) und Monk (10) entfernt (existieren nicht in Classic Era)
- **Calendar.lua Delimiter-Sicherheit** - `:` in Event-Namen/Beschreibungen wird jetzt sanitisiert (verhindert Parsing-Fehler bei Deserialisierung)
- **GuildRules.lua Broadcast-Storm** - Antworten auf RULES_REQUEST werden nur gesendet wenn eigene Regeln existieren, Random-Delay auf 1-4s erhoeht

---

### Code-Qualitaet
- Alle Module auf Nil-Sicherheit geprueft
- TestMode.lua komplett repariert und mit Guard versehen
- Version-Strings synchronisiert (TOC, Header, Print)
- 6 Subagent-Reviews durchgefuehrt

---

## Version 5.9.9 - RESCAN BLACKLIST FIX
**Geloeschte Eintraege kommen beim Rescan nicht mehr zurueck!**

### Deathlog.lua Fix
- `TryImportEntry()` prueft jetzt die Blacklist BEVOR ein Tod importiert wird
- Gelöschte Namen werden beim Deathlog-Rescan ignoriert

### Sync.lua Fix
- `RecordLocalDeath()` prueft jetzt auch die Blacklist
- Verhindert dass geloeschte Tode auf anderem Weg wieder reinkommen

### Betroffene Stellen (alle mit Blacklist-Check):
1. `Sync:ProcessIncomingDeath()` - empfangene Sync-Daten ✓
2. `Sync:RecordLocalDeath()` - lokale neue Tode ✓
3. `Deathlog:TryImportEntry()` - Deathlog-Import/Rescan ✓

---

## Version 5.9.8 - RUSSISCHE LOKALISIERUNG + MULTI-CLIENT FIX
**Volle Unterstuetzung fuer DE, EN und RU Clients!**

### Neue Sprache: Russisch (ruRU)
- Komplette UI-Uebersetzung ins Russische
- Alle Buttons, Menues, Statistiken, Meldungen
- Russische Zitate im Buch
- Russische Todesnachrichten

### Professions.lua - Multi-Client Fix
- Header-Erkennung funktioniert jetzt auf allen Clients:
  - Deutsch: "Berufe", "Sekundaere Fertigkeiten"
  - English: "Professions", "Trade Skills", "Secondary Skills"
  - Russisch: "Профессии", "Ремёсла", "Вторичные навыки"
- Spezialisierungen (Talentbaeume) fuer alle drei Sprachen
- Keine manuellen String-Vergleiche mehr, Table-Lookup stattdessen

### Locale.lua Erweiterungen
- ruRU Lokalisierung komplett hinzugefuegt (~180 neue Strings)
- Klassen-Namen auf Russisch
- Alle UI-Texte uebersetzt

---

## Version 5.9.7 - PERSISTENTE BLACKLIST FIX
**Geloeschte Eintraege bleiben jetzt PERMANENT geloescht!**

### Hauptproblem gefixt
- **BUG:** Geloeschte Eintraege kamen nach Relog/Reload zurueck
- **URSACHE:** Blacklist war nur im RAM, nicht in SavedVariables
- **FIX:** Blacklist wird jetzt pro Gilde in `GuildDeathLogDB.guilds[name].deletedDeaths` gespeichert

### Aenderungen in Sync.lua
- Neue Helper-Funktionen: `GetBlacklist()`, `IsBlacklisted()`, `AddToBlacklist()`
- `ProcessIncomingDeath()` prueft jetzt die persistente Blacklist
- `BroadcastDelete()` und `HandleDeleteSync()` nutzen jetzt `AddToBlacklist()`
- Blacklist ist jetzt GILDEN-SPEZIFISCH (nicht global)

### Neue Befehle
- `/gdl blacklist` - Zeigt alle geloeschten Eintraege
- `/gdl clearblacklist` - Leert die Blacklist (nur Offiziere/GL)

### Migration
- `GetGuildData()` erstellt automatisch `deletedDeaths = {}` fuer alte Gilden

---

## Version 5.4.5 - TEXT-POSITIONEN KORRIGIERT
**Name nicht mehr über dem Header!**

### Positionen gefixt
- Name jetzt **unter** dem "Guild Death Log" Text (contentTop = -95)
- Klassen-Icon besser positioniert (links, vertikal zentriert)
- Alle Texte besser im dunklen Bereich zentriert
- Kleinere Schriftgrößen für bessere Passform

### Layout
- Name: 22pt (war 24pt)
- Level/Klasse: 13pt 
- Zone: 11pt
- Killer: 10pt
- Letzte Worte: 10pt, unten bei Y=30

---

## Version 5.4.4 - KORREKTES SEITENVERHÄLTNIS
**Popup jetzt mit Original-Bildproportionen 3:2!**

### Seitenverhältnis gefixt
- Original-Bild ist **1536 x 1024** Pixel (Verhältnis 3:2)
- Popup jetzt **460 x 307** Pixel - passt perfekt zum Bild!
- Keine Verzerrung mehr - Totenköpfe sehen wieder gut aus!

### Sound wieder da
- Epischer Death Sound (8959) ist zurück
- Raid Warning Echo nach 0.15 Sekunden

### Layout verbessert
- Klassen-Icon links (56x56)
- Name, Level, Zone mittig im dunklen Bereich
- Letzte Worte unten zentriert
- Alles passend zum "Todesmeldung" Header im Bild

---

## Version 5.4.3 - GEISTERHAFTER SOUND + LAYOUT FIX
**Engelshafter Chor statt Alarm + bessere Proportionen!**

### Neuer Sound: Geisterhaft/Engelshaft 👻
- **Engelshafter Chor** (Sound 11466) - "Ahhhhhhh" wie bei Geistern
- **Geister-Echo** (Sound 3332) - Leises Nachhall
- Kein nerviger Alarm-Ton mehr!

### Layout verbessert
- Popup ist jetzt **breiter** (580x155 statt 500x200) - wie ein Banner
- **Alle Texte zentriert** im Inhaltsbereich
- Name, Level, Zone alle schön mittig ausgerichtet
- Größeres Klassen-Icon (52x52)
- Bessere Abstände zwischen den Elementen

### Proportionen
- Das Popup passt jetzt viel besser zur Custom-Textur
- Kein "gequetschtes" Aussehen mehr

---

## Version 5.4.2 - EPISCHES TODES-POPUP
**Brandneues Custom-Design mit Skalierungsfunktion!**

### Neues Todes-Popup Design
**Custom Textur:** Epischer dunkler Rahmen mit Totenköpfen und rotem Akzent
- Professionelles "Todesmeldung / Guild Death Log" Design
- Passend zum Hardcore-Thema

### Skalierungsfunktion
**SHIFT + Linke Maustaste ziehen** = Popup größer/kleiner machen
- Skalierung von 50% bis 250%
- Live-Anzeige der aktuellen Größe während des Skalierens
- Einstellung wird automatisch gespeichert

### Bedienung
- **Linke Maustaste ziehen** = Popup verschieben
- **SHIFT + Linke Maustaste ziehen** = Popup skalieren
- **Rechte Maustaste** = Popup sofort schließen

### Weitere Verbesserungen
- Sanfteres Fade-In/Fade-Out (0.3s / 1.5s)
- Popup bleibt 10 Sekunden sichtbar (statt 8)
- Name wird in Klassenfarbe angezeigt
- Größerer Platz für letzte Worte (80 Zeichen)

---

## Version 5.4.1 - UI LAYOUT FIX + DEATHLOG ERKENNUNG
**Leitung-Button + Deathlog-Erkennung verbessert!**

### Fix: "Leitung" Button außerhalb des Fensters
**Problem:** Der Gildenleiter-Button (Leitung) hing außerhalb des Fensterrahmens
**Ursache:** Button-Position war bei Y = -2 (negativ = unter dem Fensterrand)
**Lösung:** 
- Fenster von 650px auf 700px Höhe vergrößert
- Alle Button-Positionen angepasst für 4 Reihen
- Footer und Scroll-Container neu positioniert
**Ergebnis:** Alle Buttons sind jetzt sauber im Fenster

### Fix: Deathlog-Addon wird nicht erkannt
**Problem:** Deathlog Status zeigte "Nein" obwohl Deathlog installiert ist
**Ursache:** Nur eine spezifische Variable wurde geprüft (`deathlog_data`)
**Lösung:** 
- Prüft jetzt 10+ verschiedene mögliche Variablennamen
- Prüft auch Addon-Tabellen (`Deathlog`, `DeathLog`, etc.)
- Prüft ob Addon geladen ist über `IsAddOnLoaded`
- Mehrere Erkennungsversuche (nach 2s, 5s, 10s)
- Verschiedene Datenstrukturen werden unterstützt
**Neuer Debug-Befehl:** `/gdl dlcheck` zeigt Deathlog-Status und alle globalen "death" Variablen

---

## Version 5.4.0 - PERFORMANCE & BUG FIXES
**Community-Feedback Update - 6 wichtige Bugs behoben!**

---

### Fix 1: FPS-Einbrüche beim Scrollen (Klassen/Berufe)
**Problem:** Bei 250+ Mitgliedern brachen die FPS stark ein, teilweise Freezes
**Ursache:** Bei jedem Scroll/Update wurden 250+ neue Frames erstellt und zerstört
**Lösung:** Frame-Pooling implementiert - Frames werden wiederverwendet statt neu erstellt
**Ergebnis:** Flüssiges Scrollen auch bei großen Gilden

### Fix 2: Einstellungen setzten sich zurück
**Problem:** Checkboxen in den Einstellungen wurden bei jedem Login zurückgesetzt
**Ursache:** Bei JEDER Versionsänderung wurden alle Settings überschrieben
**Lösung:** Settings werden nur noch bei komplett neuer Installation auf Defaults gesetzt
**Ergebnis:** Einstellungen bleiben dauerhaft gespeichert

### Fix 3: Neues Setting für Meilenstein-Nachrichten
**Problem:** Chat wurde bei großen Gilden mit Achievement-Nachrichten geflutet
**Lösung:** Zwei neue Einstellungen hinzugefügt:
- "Meilenstein-Nachrichten" - Chat-Ankündigungen an/aus
- "Meilenstein-Popup" - Popup-Fenster an/aus
**Ergebnis:** Jeder kann selbst entscheiden was angezeigt wird

### Fix 4: Bessere Lesbarkeit der Schrift
**Problem:** Graue Schrift war auf hellem Hintergrund schwer zu lesen
**Lösung:** Dunklere Schriftfarben (0.15, 0.1, 0.05 statt 0.3, 0.25, 0.2)
**Ergebnis:** Deutlich besserer Kontrast auf dem Pergament-Hintergrund

### Fix 5: Verbesserte Todes-Synchronisation
**Problem:** Todesstatistik war bei verschiedenen Spielern unterschiedlich
**Lösung:** 
- Sync-Intervall auf 5 Minuten reduziert (statt 15)
- Proaktiver Push alle 10 Minuten
- Zusätzlicher Sync 30 Sekunden nach Login
- Mehr Tode pro Sync (50 statt 20)
**Ergebnis:** Alle Gildenmitglieder sehen die gleichen Tode

### Fix 6: Berufe-Werte Synchronisation
**Problem:** Verschiedene Spieler sahen unterschiedliche Berufe-Werte für dieselbe Person
**Ursache:** Keine Konfliktlösung bei widersprüchlichen Daten
**Lösung:** Timestamp-basierte Konfliktlösung - nur neuere Daten werden akzeptiert
**Ergebnis:** Konsistente Berufe-Anzeige bei allen Spielern

---

### Technische Details

**Performance-Optimierungen:**
- Frame-Pooling: ~99% weniger Garbage Collection
- Wiederverwendbare UI-Elemente statt ständiger Neuerschaffung
- Reduzierte Memory-Allokationen beim Scrollen

**Sync-Verbesserungen:**
- Ping-Intervall: 3 Minuten (statt 5)
- Full-Sync: alle 5 Minuten (statt 15)
- Proaktiver Broadcast: alle 10 Minuten
- Login-Sync: nach 5s und 30s

**Neue Settings:**
- `milestoneAnnounce` - Meilenstein-Chat-Nachrichten (default: AN)
- `milestonePopup` - Meilenstein-Popup-Fenster (default: AN)

---

## Version 4.9.8 - HEUTE-ZÄHLER FIX
**Hauptfenster und Debug zeigen jetzt die gleiche Anzahl**

---

### Bug behoben: "Heute" Zähler

**Problem:**
- Debug-Fenster zeigte "3 heute"
- Hauptfenster zeigte "0 Heute"
- Beide sollten identisch sein!

**Ursache:**
- UI.lua verwendete UTC-Zeit: `time() - (time() % 86400)`
- Debug.lua verwendete lokale Zeit: `date("*t")` + `time({...})`
- Bei Zeitzone CET (UTC+1) führte das zu 1 Stunde Unterschied

**Fix:**
- UI.lua verwendet jetzt auch lokale Zeitzone
- Beide Fenster zeigen jetzt die gleiche Anzahl "Tode heute"

---

## Version 4.9.7 - TALENT-SPEC FIX
**Spezialisierung aktualisiert sich jetzt korrekt**

---

### Professions-Modul verbessert

**Neue Events für Talent-Aktualisierung:**
- `CHARACTER_POINTS_CHANGED` - Classic: Wenn Talentpunkte verteilt werden
- `PLAYER_TALENT_UPDATE` - Retail/WOTLK: Wenn Talente geändert werden
- `PLAYER_LEVEL_UP` - Bei Level-Up werden Infos neu gesendet

**Aktualisierungs-Zeiten:**
- Bei Berufsskill-Änderung: nach 2 Sekunden
- Bei Talent-Änderung: nach 1 Sekunde
- Bei Level-Up: nach 3 Sekunden
- Automatisch: alle 60 Sekunden

**Die Spezialisierung wird jetzt angezeigt für:**
- Alle Spieler ab Level 10 die Talentpunkte verteilt haben
- Aktualisiert sich automatisch wenn Talente geändert werden
- Zeigt den Talentbaum mit den meisten Punkten

---

## Version 4.9.6 - HOTFIX
**Debug-Fenster Anchor-Fix**

---

### Bug behoben

- **SetPoint Anchor Error** in Debug.lua Zeile 218 behoben
- `serverBox` Referenz zu `deathStatsBox` korrigiert
- Debug-Fenster oeffnet sich jetzt ohne Fehler

---

## Version 4.9.5 - FINALE VERSION
**STABIL, GETESTET, GILDEN-INTERN**

---

### ALLE SYSTEME VALIDIERT

Diese Version wurde gruendlich geprueft und alle Funktionen funktionieren wie geplant:

**13 Buttons - Alle funktionsfaehig:**
| Button | Funktion |
|--------|----------|
| Aktualisieren | Deathlog scannen + UI aktualisieren |
| Einstellungen | Einstellungsfenster oeffnen |
| Sync | Gilden-Sync anfordern |
| Export | Export-Fenster oeffnen |
| Debug | Debug-Fenster oeffnen |
| Ruhmeshalle | Hall of Fame anzeigen |
| Statistiken | Statistik-Fenster oeffnen |
| Meilensteine | Meilenstein-Fenster oeffnen |
| Berufe | Berufe-Fenster oeffnen |
| Gilden-Karte | Live-Tracker togglen |
| Titel | Titel-Fenster oeffnen |
| Gedenkhalle | Memorial-Fenster oeffnen |
| Gilden-Stats | Gilden-Statistiken anzeigen |

### Debug-Fenster verbessert

**6 Info-Boxen (neu organisiert):**
1. **Sync Status** - Version, Online Users, letzter Sync
2. **Online** - Liste der Gildenmitglieder mit Addon
3. **Deathlog** - Deathlog Addon Status, Eintraege
4. **Tode-Stats** - Gesamttode, Tode heute, letzter Tod (NEU!)
5. **Live-Tracker** - Tracker Status, Spieler auf Karte
6. **Addon Info** - Module, Speicher, Events

*Die redundante "Gilden-Sync" Box wurde durch "Tode-Stats" ersetzt.*

### Condolences v2.0 - Epische Todesnachrichten

**~125,000+ einzigartige Kombinationen:**
- 49 INTROS (epische Einleitungen)
- 48 CORES (Kernaussagen)
- 51 OUTROS (wuerdevolle Abschluesse)
- 51 SPECIALS (eigenstaendige Nachrichten)
- 45 Klassen-spezifische (9 Klassen × 5)
- 17 Level-basierte (4 Kategorien)

**Nur wuerdevolle, epische Nachrichten - keine Witze!**

### Gilden-interne Kommunikation

| Prefix | Modul | Funktion |
|--------|-------|----------|
| GDLSync | Sync | Todesfaelle syncen |
| GDLTrack | GuildTracker | Live-Positionen |
| GDLMile | Milestones | Meilensteine |
| GDLProf | Professions | Berufe |
| GDLTitle | Titles | Titel |

**Alles bleibt in der Gilde - keine Server-weite Kommunikation!**

### Bug-Fixes aus vorherigen Versionen

- Guild.lua: PLAYER_ENTERING_WORLD Event fuer korrektes Member-Loading
- GuildRoster() wird beim Login aufgerufen
- IsMember() laedt Members neu wenn leer
- Keine redundanten Debug-Boxen mehr

---

## Version 4.8.4
**VEREINFACHUNG: NUR GILDEN-INTERN**

---

### Server-weiten Counter ENTFERNT

Das Addon kommuniziert jetzt **NUR noch innerhalb der Gilde**:
- Kein Public Channel mehr
- Kein Server-weiter Counter
- Alles bleibt Gilden-intern wie gewuenscht

### Alle Kommunikation ist jetzt GILDEN-INTERN:

| System | Channel | Reichweite |
|--------|---------|------------|
| **Todes-Sync** | GUILD Messages | Nur Gilde |
| **Live-Tracker** | GUILD Messages | Nur Gilde |
| **Meilensteine** | GUILD Messages | Nur Gilde |
| **Berufe** | GUILD Messages | Nur Gilde |
| **PING/PONG** | GUILD Messages | Nur Gilde |

Fremde Gilden oder andere Spieler sehen **NICHTS** von euren Daten!

### Debug-Fenster angepasst

- "Server Users" Box umbenannt zu "Gilden-Sync"
- Zeigt jetzt: Mitglieder mit Addon online + Gesamtzahl Gildenmitglieder
- Kein externer Counter mehr

### Guild.lua Fix (aus v4.8.2)

- `PLAYER_ENTERING_WORLD` Event hinzugefuegt
- `GuildRoster()` wird beim Login aufgerufen
- `IsMember()` funktioniert jetzt korrekt
- Tode von Gildenmitgliedern werden erkannt

---

## Version 4.8.2
**SERVER USER COUNTER FIX + TOD-ERKENNUNG DEBUG**

---

### Server User Counter - DUAL MODE

Der Counter nutzt jetzt ZWEI Methoden gleichzeitig fuer maximale Kompatibilitaet:

**Methode 1: Public Channel (server-weit)**
- Channel: `GuildDeathLogCount`
- Messages: `GDL_COUNT_PING` / `GDL_COUNT_PONG`
- Fuer: v4.8.2+ User (auch aus anderen Gilden!)

**Methode 2: GUILD Messages (backward compatible)**
- Prefix: `GDLCnt`
- Messages: `CPING` / `CPONG` (und andere Varianten)
- Fuer: v4.8.0 und v4.8.1 User

Damit werden jetzt ALLE Addon-User gezaehlt, egal welche Version sie haben!

### Tod-Erkennung - Verbessertes Debugging

Bei Problemen mit der Tod-Erkennung zeigt `/gdl debug` jetzt genau:
- Warum ein Tod ignoriert wurde
- Ob der Blizzard HC-Channel aktiv ist
- Ob ein Spieler als Gildenmitglied erkannt wurde

### Systeme-Uebersicht

| System | Channel | Reichweite |
|--------|---------|------------|
| Gilden-Sync | GUILD Messages | Nur Gilde |
| Live-Tracker | GUILD Messages | Nur Gilde |
| Meilensteine | GUILD Messages | Nur Gilde |
| Berufe | GUILD Messages | Nur Gilde |
| Server Counter | PUBLIC + GUILD | Server-weit + Gilde |

---

## Version 4.8.1
**MAP-PINS FIX + SERVER USER COUNTER + KILLSTATS BUGFIX**

---

### WICHTIG: KillStats Bugfix!

**Problem:** Kills wurden gezaehlt wenn man nur in der Naehe war (mouseover, target, nameplate) und jemand ANDERES den Mob getoetet hat.

**Loesung:** 
- Neues Flag `damagedByPlayer` im Cache
- Wird NUR gesetzt wenn DU oder dein PET Schaden macht
- `UNIT_DIED` zaehlt jetzt nur wenn `damagedByPlayer=true`
- Pet-Kills werden korrekt mitgezaehlt

**Resultat:** NUR deine eigenen Kills zaehlen fuer Meilensteine!

### Debug-Fenster komplett neu!

6 gleichgrosse Info-Boxen in 2 Zeilen:

**Zeile 1:** Sync Status | Online | Deathlog Status
**Zeile 2:** Server Users | Live-Tracker | Addon Info

- Server Users werden automatisch beim Oeffnen gezaehlt
- Live-Tracker zeigt Status + Spieler auf Karte
- Addon Info zeigt Memory, Module-Anzahl, Uptime
- Module-Anzahl wird jetzt korrekt gezaehlt (kein "?" mehr)

### Karten-Pins komplett ueberarbeitet!

**Vorher:** Grosses Icon mit haesslichem schwarzen Kasten
**Jetzt:** Kleines, sauberes 16x16 Klassenicon mit dezenten Glow

- Kein schwarzer Border mehr
- Klassenicon in Originalfarben
- Dezenter pulsierender Glow in Klassenfarbe
- Wird groesser bei Hover (20x20)

### Tooltip-Fix

- Unicode-Symbole entfernt (WoW Classic Kompatibilitaet)
- Klare Textanzeige: "LIVE", "vor 7s" etc.
- Farbcodierung: Gruen=Live, Gelb=Kuerzlich, Orange=Aelter

### Server Addon-User im Status integriert!

`/gdl users` oder `/gdl trackerstatus` zeigt jetzt:

```
===========================================
GuildTracker v2.1 Status
===========================================
Gilde Live: 3 Spieler
Server Addon-User: (wird gezaehlt...)
-------------------------------------------
  Beatevonuse Lv42 - Stormwind [LIVE]
===========================================
Server Addon-User: 47
```

Die Server-Zaehlung laeuft automatisch nach 3 Sekunden.

---

## Version 4.8.0
**GUILDTRACKER v2.0 + EPISCHE TODESNACHRICHTEN!**

---

### Condolences v2.0 - EPISCHE Todesnachrichten!

**Modulares Nachrichten-System:**
Nachrichten werden dynamisch aus würdevollen Bausteinen zusammengesetzt.
**NUR epische, trauernde, respektvolle Nachrichten** - Hardcore-Tod verdient Würde.

**Aufbau:** `[INTRO] + [CORE] + [OUTRO]`
- **~50 Intros:** Dramatische, würdevolle Einleitungen
  - "Die Glocken von Sturmwind läuten..."
  - "Ein Schatten fällt über Azeroth."
  - "Die Ahnen rufen einen der Ihren heim..."
- **~50 Cores:** Ehrenvolle Hauptaussagen
  - "NAME ist gefallen"
  - "NAME wurde in die Hallen der Tapferen aufgenommen"
  - "NAME kämpfte bis zum bitteren Ende"
- **~50 Outros:** Würdevolle Abschlüsse
  - ". Ruhe in Frieden."
  - ". Mögen die Titanen über dich wachen."
  - ". Niemals vergessen."

**Spezial-Kategorien:**
- **~40 eigenständige Spezial-Nachrichten** (episch, emotional)
- **Klassen-spezifisch:** Würdevolle Nachrichten für jede Klasse
  - Paladin: "Das Licht weint um NAME. Ein Paladin ist heimgekehrt."
  - Krieger: "NAME's Schwert ist verstummt. Der Krieger ruht in Ehren."
- **Level-basiert:** Passend zum erreichten Level
  - "NAME (Level 60) - Ein wahrer Champion ist gefallen. Ewige Ehre sei dir."

**~125.000+ mögliche Kombinationen!**

**Test-Befehle:**
- `/gdl msgtest` - Zeigt 10 zufällige Nachrichten
- `/gdl msgstats` - Zeigt Statistiken

---

### 🗺️ GuildTracker v2.0 - Komplett neu!

**Adaptive Broadcast-Intervalle:**
- **3 Sekunden** bei Bewegung (statt 0.75s - reduziert Netzwerklast)
- **15 Sekunden** bei Stillstand (intelligente Erkennung)
- **30 Sekunden** Heartbeat für Spieler die komplett still stehen

**Robustes Stale-System:**
- **60 Sekunden** Timeout (statt 5s - kein Flackern mehr!)
- Spieler verschwinden erst nach 60s ohne Update
- Sauberes Cleanup alle 10 Sekunden

**Delta-basiertes Senden:**
- Position wird nur gesendet wenn sie sich ändert
- Spart Bandbreite und verhindert Rate-Limiting
- Bewegungserkennung mit 0.1% Threshold

**Smooth Interpolation:**
- Hermite-Spline für extra-flüssige Pin-Bewegung
- 20 FPS Pin-Updates (50ms Intervall)
- 3 Sekunden Interpolationsdauer

**Neue Events:**
- ZONE_CHANGED_NEW_AREA: Sofortiges Broadcast bei Zonenwechsel
- ZONE_CHANGED: Position wird bei jedem Zonenwechsel aktualisiert

**Level-Anzeige:**
- Spieler-Level wird jetzt mit gesynct
- Anzeige im Tooltip und am Pin

---

### 📊 Technische Details

| Parameter | Alt (v4.7) | Neu (v4.8) | Begründung |
|-----------|------------|------------|------------|
| Broadcast (Bewegung) | 0.75s | 3s | GuildMap Standard |
| Broadcast (Stillstand) | 0.75s | 15s | Bandbreite sparen |
| Stale-Timeout | 5s | 60s | Kein Flackern |
| Heartbeat | - | 30s | Präsenz-Check |
| Pin-Update FPS | 33 | 20 | Performance |
| Interpolation | Linear | Hermite | Smoother |

---

### 🔧 Befehle

- `/gdl tracker` - Toggle GuildTracker an/aus
- `/gdl trackerstatus` - Zeige Status und Online-Spieler

---

## Version 4.7.0
**NEUE MODULE: Gedenkhalle & Gilden-Statistiken!**

---

### 🪦 NEU: Memorial-Modul (Gedenkhalle)
Ehre die Gefallenen mit zufaelligen Nachrufen!

**Features:**
- Liste aller verstorbenen Gildenmitglieder
- **56 zufaellige Nachrufe** (28 DE + 28 EN)
  - Ehrenvoll: "Ruhe in Frieden, tapferer Held."
  - Humorvoll: "'Ich tank das' - Letzte Worte."
  - Episch: "Selbst der Tod konnte deinen Ruhm nicht mindern."
- Klassenicon mit Totenkopf-Overlay
- Level, Zone, Killer, Todesdatum
- **Verstorbene werden automatisch aus Berufe-Liste entfernt**

**Befehle:** `/gdl memorial`, `/gdl rip`, `/gdl gedenken`

---

### 📊 NEU: GuildStats-Modul (Gilden-Statistiken)
Ueberblick ueber die gesamte Gilde!

**Durchschnittslevel:**
- Gesamt-Durchschnitt aller Gildenmitglieder
- Online vs Offline getrennt angezeigt
- Anzahl Mitglieder

**Tode pro Charakter (Ranking):**
- 🥇 Gold / 🥈 Silber / 🥉 Bronze fuer Top 3
- Klassenicon + Name in Klassenfarbe
- Anzahl Tode (farbcodiert: Rot ≥5, Orange ≥3, Gelb <3)
- **Hover-Tooltip** mit allen Tod-Details:
  - Level bei jedem Tod
  - Zone wo gestorben
  - Datum des Todes

**Befehle:** `/gdl gstats`, `/gdl guildstats`, `/gdl gildenstat`

---

### 🎨 UI-Verbesserungen

**Fenster sind jetzt vollstaendig deckend:**
- Gedenkhalle und GuildStats hatten transparenten Hintergrund
- Jetzt mit solidem Pergament-Hintergrund
- Gold-Border wie alle anderen Fenster

**Schriftfarben optimiert (GuildStats):**
- Durchschnittslevel: Grosses Gold mit Outline
- Online/Offline: Gut lesbare Gruen/Grau-Toene
- Rang-Medaillen: Echte Gold/Silber/Bronze Farben
- Namen: Volle Klassenfarben (nicht abgedunkelt)
- Header: Mittleres Braun passend zum Pergament

**Fenster-Positionen (Cascade-Layout):**
- **Keine Ueberlappung** mehr wenn mehrere Fenster offen sind
- Alle Fenster sind verschiebbar (Drag & Drop)
- Gestaffelte Anordnung links/rechts vom Hauptfenster

```
  LINKS                    MITTE                    RECHTS
  
  Memorial (-480, +200)                    Settings (+500, +250)
                                           Titles (+420, +200)
                                           HallOfFame (+480, +100)
                           [HAUPT]
                             (0,0)         Statistics (+460, -50)
                                           GuildStats (+400, -100)
  Professions (-460, -200)                 Milestones (+440, -200)
  
                          Debug (0, -350)
```

---

### 🔄 Live-Sync fuer alle Fenster
Wenn ein Tod eingeht (lokal oder gesynct), werden alle offenen Fenster automatisch aktualisiert:
- ✓ Hauptfenster (Chronik)
- ✓ Gedenkhalle
- ✓ GuildStats
- ✓ Berufe-Fenster (Verstorbene werden entfernt)

---

### 🎯 Neue Buttons im Hauptfenster
**Reihe 3:** `[Titel] [Gedenkhalle] [Gilden-Stats]`

---

### 📋 Zusammenfassung der Aenderungen

| Kategorie | Aenderung |
|-----------|-----------|
| Neue Module | Memorial (Gedenkhalle), GuildStats |
| Neue Befehle | `/gdl memorial`, `/gdl rip`, `/gdl gstats`, `/gdl gildenstat` |
| UI | Cascade-Layout, deckende Fenster, lesbare Farben |
| Sync | Live-Update fuer alle offenen Fenster |
| Berufe | Verstorbene werden automatisch entfernt |

---

## Version 4.6.0
**GROSSES UPDATE: Echtzeit Gilden-Karte, Kill-Meilensteine & Titel-System!**

### 🚨 KRITISCHER BUG-FIX
**Mehrere Module wurden nie initialisiert!** Das betrifft:
- `GuildTracker` - Spieler auf der Karte wurden nicht angezeigt
- `Sync` - Todes-Synchronisation funktionierte nicht richtig
- `Professions` - Berufe wurden nicht gesynct
- `Milestones` - Level-Tracking startete nicht

**Alle Gildenmitglieder muessen auf v4.6.0 updaten!**

---

### 🗺️ ECHTZEIT Gilden-Karte
Sieh deine Gildenmitglieder LIVE auf der Weltkarte!

**Features:**
- **Echtzeit-Tracking**: Positionen werden alle 1.5 Sekunden gesynct
- **Fluessige Bewegung**: Pins bewegen sich smooth durch Interpolation (20 FPS)
- **Dezentes Design**: Kleiner farbiger Punkt in Klassenfarbe
- **Name bei Hover**: Name erscheint nur beim Ueberfahren mit der Maus
- **Tooltip**: Zone und letztes Update werden angezeigt

**Technische Details:**
| Einstellung | Wert |
|-------------|------|
| Broadcast-Intervall | 1.5 Sekunden |
| Stale-Timeout | 10 Sekunden |
| Pin-Update | 50ms (20 FPS) |
| Interpolation | Smooth Easing |

---

### 🏆 Custom Titel-System
Verdiene Titel durch Meilensteine - sichtbar fuer alle Gildenmitglieder!

**31 Titel verfuegbar:**

**Leichte Titel (ab 10-25 Kills):**
| Titel | Anforderung |
|-------|-------------|
| Wegelagerer | 25 Humanoide |
| Jaeger | 25 Wildtiere |
| Grabschaender | 25 Untote |
| Daemonentoeter | 25 Daemonen |
| Elementarjaeger | 25 Elementare |
| Welpentoeter | 10 Drachkin |
| Riesentoeter | 10 Riesen |

**Mittlere Titel (100 Kills):**
| Titel | Anforderung |
|-------|-------------|
| Banditenjaeger | 100 Humanoide |
| Wildnisjaeger | 100 Wildtiere |
| Untotenjaeger | 100 Untote |
| Daemonenbekaempfer | 100 Daemonen |
| Funkensammler | 100 Elementare |

**Hohe Titel:**
- Seuchenreiniger (5.000 Untote)
- Drachenbane (1.000 Drachkin)
- Eredarbane (1.000 Daemonen)
- Bestienmeister (2.000 Wildtiere)
- Titanentoeter (250 Riesen)

**Raid-Titel:**
- Champion von Naxxramas (Kel'Thuzad)
- Bezwinger von C'Thun
- Drachentoeter (Nefarian)
- Bezwinger des Feuerlords (Ragnaros)

---

### ⚔️ KillStats Modul
Trackt automatisch getoetete Kreaturen nach Typ:

**27 Kill-Meilensteine** (vorher 21):
| Kreaturtyp | Stufen |
|------------|--------|
| Humanoide | 25, 100, 500, 2.000 |
| Wildtiere | 25, 100, 500, 2.000 |
| Untote | 25, 100, 500, 1.000, 5.000 |
| Daemonen | 25, 100, 500, 1.000 |
| Elementare | 25, 100, 500 |
| Drachkin | 10, 50, 250, 1.000 |
| Riesen | 10, 50, 250 |

---

### 📊 UI-Verbesserungen

**Fortschrittsbalken fuer Kill-Meilensteine:**
- Kompakte Leiste unter der Beschreibung
- Stoppt bei 100% (kein Ueberlauf mehr)
- Automatische Freischaltung wenn Ziel erreicht

**Bessere Lesbarkeit:**
- Charakter-Info in Gold statt Grau
- Kategorie-Header groesser und kontrastreicher
- Kill-Zeilen dynamisch hoeher fuer Progress-Platz

**Tooltip-Fix:**
- Titel erscheint nur noch einmal (nicht doppelt)

---

### 🔧 Neue Befehle

| Befehl | Funktion |
|--------|----------|
| `/gdl titles` | Titel-Auswahl oeffnen |
| `/gdl mytitles` | Eigene Titel anzeigen |
| `/gdl kills` | Kill-Statistiken |
| `/gdl killcheck` | Verpasste Meilensteine nachholen |
| `/gdl trackstatus` | GuildTracker Status (LIVE/offline) |

---

### 🔧 Technische Aenderungen

- **Module initialisieren jetzt korrekt** via PLAYER_ENTERING_WORLD
- **Doppelte Initialisierung verhindert** durch self.initialized Flag
- **Creature Type Caching** fuer Kill-Tracking (WoW gibt Typ nach Tod nicht)
- **Interpolation** fuer fluessige Kartenpin-Bewegung
- **OnUpdate Frame** fuer 20 FPS Pin-Updates

---

## Version 4.5.3
**Weniger Chat-Spam - Nur eine Startup-Meldung**

### Aenderungen
- **Nur noch eine Login-Meldung:** Buch der Gefallenen: Aktiv (v4.5.3)
- Entfernt: Alle Debug-Meldungen bei Login

---

# Guild Death Log - Changelog (English)

## Version 4.6.0
**MAJOR UPDATE: Real-Time Guild Map, Kill Milestones & Title System!**

### 🚨 CRITICAL BUG FIX
**Several modules were never initialized!** This affects:
- `GuildTracker` - Players on map weren't displayed
- `Sync` - Death synchronization didn't work properly
- `Professions` - Professions weren't synced
- `Milestones` - Level tracking didn't start

**All guild members must update to v4.6.0!**

---

### 🗺️ REAL-TIME Guild Map
See your guild members LIVE on the world map!

**Features:**
- **Real-time tracking**: Positions sync every 1.5 seconds
- **Smooth movement**: Pins move fluidly through interpolation (20 FPS)
- **Clean design**: Small colored dot in class color
- **Name on hover**: Name only appears when hovering with mouse
- **Tooltip**: Zone and last update shown

**Technical Details:**
| Setting | Value |
|---------|-------|
| Broadcast interval | 1.5 seconds |
| Stale timeout | 10 seconds |
| Pin update | 50ms (20 FPS) |
| Interpolation | Smooth Easing |

---

### 🏆 Custom Title System
Earn titles through milestones - visible to all guild members!

**31 titles available:**

**Easy Titles (10-25 kills):**
| Title | Requirement |
|-------|-------------|
| Highwayman | 25 Humanoids |
| Hunter | 25 Beasts |
| Grave Robber | 25 Undead |
| Demon Slayer | 25 Demons |
| Elemental Hunter | 25 Elementals |
| Whelp Slayer | 10 Dragonkin |
| Giant Slayer | 10 Giants |

**Medium Titles (100 kills):**
| Title | Requirement |
|-------|-------------|
| Bandit Hunter | 100 Humanoids |
| Wilderness Hunter | 100 Beasts |
| Undead Hunter | 100 Undead |
| Demon Fighter | 100 Demons |
| Spark Collector | 100 Elementals |

**High Titles:**
- Plague Cleanser (5,000 Undead)
- Dragonbane (1,000 Dragonkin)
- Eredarbane (1,000 Demons)
- Beastmaster (2,000 Beasts)
- Titan Slayer (250 Giants)

**Raid Titles:**
- Champion of Naxxramas (Kel'Thuzad)
- Slayer of C'Thun
- Dragonslayer (Nefarian)
- Firelord Slayer (Ragnaros)

---

### ⚔️ KillStats Module
Automatically tracks killed creatures by type:

**27 Kill Milestones** (previously 21):
| Creature Type | Tiers |
|---------------|-------|
| Humanoids | 25, 100, 500, 2,000 |
| Beasts | 25, 100, 500, 2,000 |
| Undead | 25, 100, 500, 1,000, 5,000 |
| Demons | 25, 100, 500, 1,000 |
| Elementals | 25, 100, 500 |
| Dragonkin | 10, 50, 250, 1,000 |
| Giants | 10, 50, 250 |

---

### 📊 UI Improvements

**Progress bars for kill milestones:**
- Compact bar below description
- Stops at 100% (no overflow)
- Auto-unlock when goal reached

**Better readability:**
- Character info in gold instead of gray
- Category headers larger and higher contrast
- Kill rows dynamically taller for progress bar

**Tooltip fix:**
- Title now appears only once (not duplicated)

---

### 🔧 New Commands

| Command | Function |
|---------|----------|
| `/gdl titles` | Open title selection |
| `/gdl mytitles` | Show your titles |
| `/gdl kills` | Kill statistics |
| `/gdl killcheck` | Catch up missed milestones |
| `/gdl trackstatus` | GuildTracker status (LIVE/offline) |

---

### 🔧 Technical Changes

- **Modules now initialize correctly** via PLAYER_ENTERING_WORLD
- **Double initialization prevented** through self.initialized flag
- **Creature type caching** for kill tracking (WoW doesn't provide type after death)
- **Interpolation** for smooth map pin movement
- **OnUpdate frame** for 20 FPS pin updates

---

## Version 4.5.3
**Less Chat Spam - Only One Startup Message**

### Changes
- **Only one login message:** Book of the Fallen: Active (v4.5.3)
- Removed: All debug messages at login
