# Changelog

## 0.9.2.4-alpha

### Added
- Guild-wide key discovery (whispers on login + periodic refresh) now reaches alts of leaderboard players too, not just their main character, via a new `GetLeaderboardTargets()` that matches on shared Discord ID (comms.lua).
- Dashboard "Current SEAMEN Keys" card now also surfaces keys from leaderboard players' alts, deduplicated per Discord ID (keeps whichever character was seen most recently).
- Alt-aware online status: if a player's own listed character isn't online but one of their alts is, the leaderboard status dot, "View Crew" popup, and "My Crew" card all reflect that, via a new `TOAST.RefreshOnlineStatus()` / `TOAST._onlineCharByDiscordId` mapping.
- Right-click "Invite" on a leaderboard row now invites whichever character is actually online, if that's an alt rather than the listed character.
- "View Crew" popup: the online character in the group is now highlighted (gold row tint + left accent bar), and a status dot next to the Discord name shows whether anyone in the group is currently online.
- Leaderboard: dedicated fixed-width status-marker column between the rank number and the Discord identity group, so the online/known dot no longer shifts the prefix icon and always reserves its own space, shown or not.

### Changed
- Unified "prefix icon → prefix label → Discord name" spacing (0px, then 4px, relatively anchored) across the leaderboard, dashboard Status Report card, My Crew, View Crew popup, and Current Keys card — previously each used different fixed-column offsets that drifted depending on prefix label width.
- Unified character-realm display everywhere: class-colored name followed by "-Realm" in #CCCCCC, as a single string, matching the leaderboard's existing format. Previously View Crew and My Crew used a separate white-at-50%-alpha realm column, and the Status Report tile colored the whole "-Realm" suffix in the class color instead of just the name.
- Unified role icon (20px) and prefix icon (20px) sizes across the leaderboard rows, dashboard Status Report, My Crew, View Crew popup, and Current Keys card.
- `DUNGEON_SHORT` dungeon-name abbreviation table centralized as `TOAST.DUNGEON_SHORT` in core.lua instead of being duplicated in comms.lua and keys.lua.
- LibKS key updates now always overwrite the stored key instead of only storing it the first time, so key changes broadcast via LibKS are actually picked up.

### Internal
- `RecognizePlayer()` and `GetLeaderboardTargets()` in comms.lua now use a cached name→member lookup instead of scanning `TOAST.members` on every call.
- Leaderboard's `RefreshStatusDots()` now looks up each row's leaderboard entry by index (`r.index`) instead of a linear per-row name search across the whole leaderboard.
- Deduplicated the identical `ITEM_CHANGED`/`ITEM_PUSH` keystone-change handling in comms.lua into a single `CheckKeyUpdate()` helper.

## 0.9.2.3-alpha

### Added
- Leaderboard: clickable column-header filters for Role (HEAL/TANK/DPS), Discord prefix (cycles TIDE/SMN/CPT), and Key level minimum (cycles 15+/18+/20+/22+), combined with the existing search box via AND logic.
- Leaderboard: "Reset" affordance next to the search box, shown only while a column filter is active, clears all column filters and the search text in one click.
- Leaderboard: gold underline marks the active/hovered filter on each header (Role icons, Discord prefix, Key), sized to the actual icon/label content rather than spanning the full column.
- Dashboard and leaderboard windows now remember their position across `/reload` (saved to `TOAST_DB.windowPos`) instead of always reopening centered.
- Right-click on the DASHBOARD/LEADERBOARD header buttons opens the other window without closing the current one, so both can be open side by side.

### Changed
- Leaderboard: Role column header icons enlarged (14px → 20px) and repositioned to align with the row role icons directly below them; unselected role icons dim only once a role filter is active, otherwise all three read normally.
- Leaderboard: RIO column recentered to sit at the exact horizontal midpoint between the Role icon group and the Resi column, and switched from right- to center-aligned to match its header.
- Dashboard header rebuilt to match the leaderboard's structure: banner/logo/title now live on a dedicated draggable header child frame (dragging is scoped to the header band, not the whole window), with the same elevated-frame fix for the gold top accent so the banner texture can't draw over it.
- Dashboard's top accent line and header medallion size now match the leaderboard's (2px / 32px) instead of being slightly thinner/smaller.
- The LEADERBOARD button moved from inside the "Your Progress" card to the header (top-right), mirroring the leaderboard's DASHBOARD button placement; both cross-navigation buttons are now the same width (90px) and use matching all-caps labels.
- "My Crew" card row context menu trimmed to just Copy Name (Invite/Whisper removed); the separate "View Crew" popup menu is unaffected.
- "View Crew" popup: Discord rank now sits on the same row as the Discord name, right-aligned, instead of on its own line below; popup header height shrunk to match.

### Fixed
- Leaderboard: clicking an already-active role filter a second time failed to clear it, caused by the classic Lua `cond and nil or x` idiom collapsing back to `x` whenever the "true" branch evaluates to `nil`; replaced with an explicit if/else.

## 0.9.2.2-alpha

### Changed
- Dashboard "Your Status" card redesigned into a compact "Status Report" Player Card: title row, "Ahoy!" greeting with Discord prefix/name, character-realm line, and an at-a-glance chip row (rank, RIO, resi, key).
- Removed the developer-style status badges (Recognized / In TIDE and Crew / Key shared, key-sharing ON/OFF, last-broadcast line) from the main card view.
- Technical diagnostics (recognized/community/leaderboard/roster status, key-sharing state, last broadcast, detected key, addon version) are now available via a subtle "?" hover tooltip in the card's top-right corner instead of cluttering the main view.
- Player Card now has the same gold top accent and title styling as the dashboard's other cards.

### Fixed
- Dashboard and welcome-screen header banner occasionally failing to load: replaced the uncompressed `tentakel_2.tga` asset with a losslessly re-encoded PNG (2.0MB → 957KB), matching the format already used reliably by the leaderboard banner.

### Internal
- Split `BuildDashboard()` in `dashboard.lua` into per-card builder functions (`BuildCardA`, `BuildMyCrewCard`, `BuildCardB`, `BuildCardC`, `BuildFooter`) to fix a Lua 5.1 60-upvalue-per-function limit that was breaking the addon on load.
