From 32836704b7033aa254a4ecf3d012389e44f5df57 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Fri, 29 May 2026 23:36:59 -0400 Subject: [PATCH] my_sea_visit: add --visible on live-filled spectator slots so the card lands at final opacity (no empty->filled ease race) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit register's _fillSlot sets --filled (opacity:0) but not --visible — the owner adds --visible on stage-dismiss, but the spectator fills directly w. no modal, so the live card raced the empty->filled opacity transition (the long-standing my_sea ease-in-before-ease-out glitch). Add --visible in the same tick after register so the card matches the refreshed state: instant for the outer slots, the intended sea-cover/cross-appear fade for cover/cross. Code architected by Disco DeDisco Git commit message Co-Authored-By: Claude Opus 4.8 (1M context) --- src/templates/apps/gameboard/my_sea_visit.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/templates/apps/gameboard/my_sea_visit.html b/src/templates/apps/gameboard/my_sea_visit.html index ded7aac..52ca954 100644 --- a/src/templates/apps/gameboard/my_sea_visit.html +++ b/src/templates/apps/gameboard/my_sea_visit.html @@ -158,6 +158,15 @@ for (var k in card) { if (Object.prototype.hasOwnProperty.call(card, k)) c[k] = card[k]; } c.reversed = !!e.reversed; window.SeaDeal.register(c, '.sea-pos-' + e.position, e.polarity === 'levity'); + // register's _fillSlot sets --filled (opacity:0) but not + // --visible (the owner adds that on stage-dismiss; the + // spectator has no modal). Add it here in the SAME tick so the + // card lands at its final opacity — matching the refreshed + // state — instead of racing the empty→filled opacity transition + // (the long-standing my_sea ease-in/ease-out glitch). + var cell = cross.querySelector('.sea-pos-' + e.position); + var filled = cell && cell.querySelector('.sea-card-slot--filled'); + if (filled) filled.classList.add('sea-card-slot--visible'); }); // Re-empty any slot the owner cleared (DEL → empty-hand broadcast). cross.querySelectorAll('.sea-card-slot.sea-card-slot--filled').forEach(function (slot) {