setPointerCapture() leitet Compatibility Mouse Events (inkl. click) an das
capturing Element um – e.target im click-Handler war immer .timeline-scroll,
nie das angeklickte .timeline-track. Fix: document.elementFromPoint() für
zuverlässigen Hit-Test unabhängig von Pointer Capture.
Pan-Threshold zusätzlich von 3px auf 8px erhöht.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Eine Timeline-Zeile pro Ability statt pro Job
- Schilde ausgeblendet (außer Panhaima SGE)
- Balken zeigt aktive Dauer vs. Cooldown via Gradient
- Klick auf leere Zeile fügt Ability direkt hinzu
- Drop nur auf passende Ability-Zeile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Pläne aus localStorage als Ref-Quelle auswählbar ("+Plan als Referenz")
- planToRefEvents() konvertiert Plan-Mechaniken ins refEvents-Format
- PLAN-Label statt REF, kein Delta, kein Schadenswert
- Buff-Icons mit "fehlt"-Markierung, Debuffs im Header
- Shield-Assignments als "Schild"-Text mit Tooltip
- Schließt sich mit anderen Ref-Quellen gegenseitig aus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Neues api/players.php: playerDetails + maxHp aus DamageTaken in einem GQL-Query
- Import-Modal übernimmt Jobs UND Namen (Heiler → DPS → Tank → Alphabet)
- buildPlayerRoster/extractJobComp: einheitliche Sortierreihenfolge
- Ref-Fight Export überträgt jetzt auch die Jobaufstellung
- Job-Slots zeigen importierte Spielernamen an
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ref-Vergleich prüft jetzt ob die aktuelle Gruppe den passenden Job hat
(via ABILITY_JOBS-Map), statt Spielernamen zu matchen. Fehlende
Mitigations werden nur noch in der REF-Zeile hervorgehoben — der
aktive Pull zeigt ausschließlich tatsächlich genutzte Mitigations.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fehlende Mitigations werden nun anhand des Job-Typs (z.B. SGE, PLD)
zugeordnet statt per Spielername — funktioniert auch wenn der Referenz-
Fight mit einer anderen Gruppe gespielt wurde.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wenn eine Referenz aktiv ist, öffnet der Export-Button ein kleines
Dropdown mit den Optionen "Aktueller Fight" und "Referenz-Fight".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Lokalisierte Ability-Namen in Badges und Modal
- Aktiver Plan wird per localStorage über Reload hinweg gespeichert
- Aktiver Tab wird per localStorage gespeichert
- refreshPlanLanguage() aktualisiert Namen beim Sprachwechsel
- api/analysis.php gibt mitigation_names zurück
- ff14-language-change Event in app.js
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Info-Panel in Sidebar: Farbschema-Legende + prägnante Hinweise bei fehlenden Jobs/Zuordnungen
- fight.php: immer englischen Endpoint nutzen damit Fight-Namen sprachunabhängig stabil sind
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Grüner Hinweis wenn Äquivalent verfügbar (z.B. → Kerachole (SGE)?)
- Roter Hinweis "→ Kein Äquivalent!" wenn kein Ersatz vorhanden
- Grau-kursiv "→ Job zuordnen" bei Abilities ohne Job-Zuordnung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ordner CRUD (erstellen, umbenennen, löschen) in der Plan-Sidebar
- Pläne per 📁-Button in Ordner verschieben (Picker-Dropdown)
- Ordner auf-/zuklappbar mit Chevron-Animation
- Rechtsklick auf Ability-Badge entfernt die Zuweisung
- uniquePlanName(): Duplikat-Namen beim manuellen Erstellen blockieren
- Import-Modal: Name wird direkt mit eindeutigem Namen vorbefüllt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Export button in AoE Timeline card title row (replaces bottom bar)
- Import modal with mechanic-only vs with-mitigations choice,
new plan vs merge into existing plan
- Merge logic: match by abilityName + timestamp ±5s, keep existing assignments
- Color-coded assignment badges: blue=buff, red=debuff, gold=shield
- buffType stored in assignments for color rendering
- Modal radio button layout fix (override global input width:100%)
- Auto-switch to Planner tab after import
- window.showTab exposed from tabs.js
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Steps 1+2 of the planner roadmap: data model, create/rename/copy/delete
plans, read-only mechanic timeline, two-column layout mirroring the
analysis tab style.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When an external reference report is loaded and its roster differs from the
current report, a second player section appears below the main grid showing
all REF report players. REF tanks are hidden by default. Clicking any REF
player card toggles their visibility in the REF timeline rows.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace ghost icons (missing buffs in current pull) with green-bordered
icons on the REF row, indicating buffs unique to the reference pull
- Add shield tooltip to REF row absorbed values showing which shields were
active and which are missing in the current pull
- Filter same-report and external ref fight dropdowns to only show fights
matching the current fight name; current fight excluded from same-report list
- Extract FFLogs report code from pasted URLs in the ext-report input field
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All MITIGATION_ABILITIES entries now carry a statusId field (FFLogs status ID =
XIVAPI row_id + 1,000,000). The mitigIdMap is seeded from these static IDs as
fallback for abilities absent from masterData (e.g. pre-pull shields). Removes
the need for separate applybuff/removebuff API calls for name resolution. Also
adds shield buffType with tooltip on absorbed value, expanded icon set, and
unmitigatedAmount/mitigated passthrough.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Debuffs (Reprisal, Feint, Addle, etc.) now appear once next to the
ability name and REF label instead of repeating under each player card.
Flex layout on .aoe-ability matches the REF row spacing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Cross-report comparison: toggle panel to load fights from a second
report code, select a fight to use as reference (mutually exclusive
with same-report ref dropdown)
- Fix ref-row player filter: use hiddenPlayerNames (name-based) so
ext-report targets with different actor IDs are correctly hidden
- Fix negative delta formatting: pass Math.abs(diff) to fmtDmg so
negative values are abbreviated the same way as positive ones
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>