Follow-up work on single-source branch. Merged upstream/main fixes + new player display features.
## Player display animations
- Active->inactive: scale/slide/fade out, then removed from display list
- Inactive->active: scale/slide/fade in
- displayParticipants state separate from raw participants so cards stay mounted during exit animation
- DM display unchanged (keeps inactive visible)
- 1-list order preserved, no re-sort
## Death visual
- Alive->dead: dim + desaturate + red rim + pulsing skull overlay
- Dead stays visible, no removal
- Dying/stable: full visible, no fade
## Merged
- upstream/main (8cf3dad..3646a9c): src/App.js fixes
307 tests, all green.
Player display now tracks displayParticipants separately from raw encounter
participants so active->inactive can animate out before removal, and inactive->
active can animate in. This preserves 1-list order, keeps DM display behavior
unchanged, and avoids fading dying/stable participants.
PlayerParticipantCard handles transitions:
- active->inactive: scale/slide/fade out, then parent removes from display list
- inactive->active: scale/slide/fade in
- alive->dead: keep visible with dim/desaturate/red-rim death cue + skull pulse
- dying/stable: full visible, no fade/removal
DisplayView inactive characterization updated to wait for exit animation before
asserting removal. TODO item removed.
@robert heads up: this PR bumps both Dockerfiles (root firebase-mode + docker/ caddy) from node:18-alpine to node:22-alpine. Needed because PR #6 bumped better-sqlite3 to v12 which requires node 20+. Node 18 builds fail (node-gyp/python errors, no prebuilt binary). openssl-legacy-provider flag kept for react-scripts 5 compat. Also removed .env* from .dockerignore so root Dockerfile .env.local COPY works.
@robert heads up: this PR bumps both Dockerfiles (root firebase-mode + docker/ caddy) from node:18-alpine to node:22-alpine. Needed because PR #6 bumped better-sqlite3 to v12 which requires node 20+. Node 18 builds fail (node-gyp/python errors, no prebuilt binary). openssl-legacy-provider flag kept for react-scripts 5 compat. Also removed .env* from .dockerignore so root Dockerfile .env.local COPY works.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up work on single-source branch. Merged upstream/main fixes + new player display features.
Player display animations
Death visual
Merged
307 tests, all green.
@robert heads up: this PR bumps both Dockerfiles (root firebase-mode + docker/ caddy) from node:18-alpine to node:22-alpine. Needed because PR #6 bumped better-sqlite3 to v12 which requires node 20+. Node 18 builds fail (node-gyp/python errors, no prebuilt binary). openssl-legacy-provider flag kept for react-scripts 5 compat. Also removed .env* from .dockerignore so root Dockerfile .env.local COPY works.