Deux problèmes de lisibilité/placement signalés :
1. Le texte des cartes Événement (nom + description) restait illisible
malgré le passage précédent de l'échelle 0.55 à 0.8 — le composant dédié
EventCardObject affichait une grande carte réduite, écrasant
systématiquement le texte quelle que soit l'échelle choisie.
Fix : suppression complète d'EventCardObject, remplacé par le même
pattern que les objets/bâtiments (ItemBoardToken, nouveau kind='event') :
un petit jeton compact (46x46) toujours visible sur le plateau, avec la
carte détaillée affichée en TAILLE RÉELLE (police 13-16px, jamais
réduite) au survol de la souris, et un bouton "JOUER" (au lieu
d'"ACHETER") pour confirmer. ItemBoardToken généralisé pour supporter ce
3e kind (pas de badge de coût affiché — déjà payé à la pioche — mais
badge "!" repris pour les événements à effet négatif type Épidémie).
Extraction de client/src/game/objects/tokenLayout.js (ICON_SIZE) dans un
module SANS dépendance à Phaser, pour que eventHandLayout.js (et ses
tests Vitest) puisse l'importer sans jamais charger Phaser — qui échoue
à l'import en environnement jsdom (canvas natif requis, absent de jsdom).
2. Les mini-cartes objets/bâtiments déjà achetés par un ADVERSAIRE étaient
affichées SOUS son slot de jeu, visuellement en dessous/après sa carte
jouée. Déplacées AU-DESSUS de son slot pour les mettre davantage en
évidence, comme posées sur sa carte plutôt que cachées dessous.
- 43 tests unitaires client mis à jour (eventHandLayout.test.js migré vers
ICON_SIZE au lieu de CARD_W/CARD_H/scale, désormais indépendant de Phaser).
- e2e/tests/helpers.js : playEventCard adapté au nouveau flux
survol->bouton JOUER (au lieu d'un simple clic direct sur la carte) ;
drawEventUntil corrigé pour ne jamais défausser une carte 'royal_accord'
sans fournir ses 2 cibles de ciblage séquentiel obligatoire (le jeu sans
cible bloquait silencieusement la séquence, sans jamais émettre
'play-event', rendant la boucle de pioche très peu fiable).
- Vérification ciblée via un test E2E existant (pas de nouvelle suite E2E
lourde, conformément à la demande de privilégier les tests unitaires) :
le nouveau flux jeton->survol->JOUER->résolution fonctionne bout en bout
(Récolte exceptionnelle +2 Nourriture confirmé après résolution).
Les cartes Événement (bouton de pioche + main) étaient positionnées trop
près du bouton "CONFIRMER MA CARTE" — le bouton de pioche chevauchait même
physiquement son bord droit de ~25px (x = width/2 + 210, même Y), au point
de prêter à confusion entre "piocher un événement" et "jouer une carte".
- Nouveau module pur client/src/game/objects/eventHandLayout.js
(eventDrawButtonPosition, eventHandGeometry, eventCardPosition) : ancre
toute la zone événement en bas-DROITE du canvas, clairement séparée du
bouton de confirmation (centré) et de la main de personnages (centrée).
- EVENT_CARD_SCALE remonté de 0.55 à 0.8 pour que le nom de l'événement
(police de base augmentée 12px -> 15px) reste réellement lisible une fois
réduit — ajout d'un bandeau semi-opaque derrière le texte (EventCardObject)
pour garantir le contraste quel que soit le portrait en arrière-plan.
- La légende des attributs occupait déjà le coin bas-droit : déplacée en
bas-GAUCHE (setOrigin ajusté en conséquence) pour laisser la place à la
nouvelle zone événement.
- 16 nouveaux tests unitaires Vitest (eventHandLayout.test.js) couvrant la
géométrie : positions dans les limites du canvas, absence de
chevauchement avec le bouton de confirmation/la main/la légende, ancrage
stable au bord droit avec 1 ou 2 cartes, robustesse sur petite résolution
(1280x720) et cardCount=0. Choix explicite de tests UNITAIRES (rapides,
~600ms pour toute la suite client) plutôt que E2E pour cette correction
de positionnement pur, les tests E2E de ce projet étant lents (plusieurs
minutes par scénario à cause de la pioche aléatoire à stabiliser).