- Sync command zone visibility in the PlayerGraphicsItem constructor in case processPlayerInfo runs before the signal is connected.
- Emit CommandZone::effectiveHeightChanged() when a minimized zone's height changes so the stack zone repositions.
- Make AbstractCounter::setActive() the sole owner of counter visibility; document the contract.
- Drop the redundant setVisible() from CommandZone::rearrangeTaxCounters(); it now only lays out by isActive().
- Format tax log lines with a single atomic 4-arg arg() instead of mixing string and int overloads.
- Add missing isCommandZoneCounterBlocked check to cmdSetCounterActive
- Revert accidental deck view layout change from b4057a86
- Fix duplicate @param in playSelectedCardsImpl doc
- Add null check for PlayerLogic in CommandZoneMenu constructor
- Add index bounds check in CommandZone handleDropEvent
- Add index bounds check in StackZone handleDropEvent
- Add ownership comment for tax counter widget creation
- Add command zone to zoneGraphicsItems map
- Conditionally show command zone menu item based on server support
- Remove layer-violating includes from player_logic.cpp
- Fix tax counter increment (1 per cast, not 2)
- Add getTaxCounterIfActive() helper to PlayerGraphicsItem
1. CommandZoneMenu: Changed to take PlayerGraphicsItem* instead of
PlayerLogic*, accessing logic via player->getLogic()
2. Removed getCounterWidget() from PlayerLogic;
method already exists correctly in PlayerGraphicsItem
3. PlayerMenu: CommandZoneMenu, fixed signal
connection to use player->getLogic() for commandZoneSupportChanged
4. AbstractCounter: Connects to CounterState::activeChanged signal,
removing direct graphics calls from PlayerEventHandler
5. CommandZone: Explicit tax counter registration via registerTaxCounter()
with auto-cleanup, replacing childItems()/dynamic_cast iteration
Also fixed PlayerActions to query CounterState instead of AbstractCounter
for proper layer separation.