Sea Select: keep the sky btn lit on a revisited felt (+ clean felt-swap); slow the glow-handoff ease-out — TDD

Symmetry (user-spec): Sky Select leaves the burger sea btn lit while the sky
felt is up; Sea Select now mirrors it — openSea disables ONLY id_text_btn, no
longer id_sky_btn, so a revisited Sea Select keeps the completed sky one click
away. An adversarial pass flagged that the two felts are equal-z (z-index:5)
siblings and neither open path drops the other's open-class, so leaving the sky
btn lit and clicking it from inside the sea felt would DOUBLE-OPEN (sea paints
over sky → confusing no-op) — the same latent stack already reachable in the
sky->sea direction on a both-complete reload. Fixed in BOTH directions: openSea
now closes the sky felt first + openSky closes the sea felt first (each exposes
its close on window: closeSeaFelt / closeSkyFelt), so clicking the other phase's
lit btn performs a clean SWAP. The text-btn disable/restore chain stays correct
across the swap (closeSky restores text, openSea re-disables + recaches it).

Glow: the glow-handoff pulse ease-OUT now runs ~2.8s (was ~1.4s) — moved the
cycle to 3.2s with the bright peak at 12.5%, keeping the ease-IN swell at ~0.4s
(user asked for a longer linger).

[[feedback-felt-aperture-fill-covers-felt]] [[feedback-inline-partial-script-defer-for-later-partial]]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-06-08 00:57:24 -04:00
parent 82f4af9bcc
commit 945d110171
4 changed files with 53 additions and 10 deletions

View File

@@ -449,13 +449,18 @@ via epic:sea_save. `?seat` threads the CARTE-selected seat onto the action URLs.
}
hidden.addEventListener('change', sync);
// ── Open / close the felt (DRAW SEA ⇄ gear NVM nav). On open: disable the
// burger Text + Sky sub-btns. The sea btn is NOT activated here — it's the
// post-completion reopen affordance (see the cascade + the reopen binding).
// ── Open / close the felt (DRAW SEA ⇄ gear NVM nav). On open: disable ONLY the
// burger Text sub-btn (its swipe machine would drive into a scroll-locked
// reelhouse). The SKY sub-btn is left .active (lit) — symmetric with Sky Select,
// which leaves the sea btn lit while the sky felt is up (user-spec 2026-06-08):
// both completed phases stay one click apart. The sea btn itself is NOT
// activated here — it's the post-completion reopen affordance (see the cascade
// + the reopen binding). Clicking the lit sky btn from here SWAPS felts cleanly
// (openSea/openSky close each other — see openSea below).
var _disabledBtns = [];
function _disablePhaseBtns() {
_disabledBtns = [];
['id_text_btn', 'id_sky_btn'].forEach(function (id) {
['id_text_btn'].forEach(function (id) {
var b = document.getElementById(id);
if (b && b.classList.contains('active')) { b.classList.remove('active'); _disabledBtns.push(b); }
});
@@ -465,6 +470,13 @@ via epic:sea_save. `?seat` threads the CARTE-selected seat onto the action URLs.
_disabledBtns = [];
}
function openSea() {
// Clean SWAP, not a double-open: if the sky felt is up (its lit sea btn was
// just clicked) close it first — both felts are z-5 siblings that otherwise
// stack (sea paints over sky), and neither open path drops the other's
// open-class on its own. Mirrored by openSky closing the sea felt.
if (document.documentElement.classList.contains('sky-open') && window.closeSkyFelt) {
window.closeSkyFelt();
}
document.documentElement.classList.add('sea-open');
document.documentElement.classList.add('sea-entered');
_disablePhaseBtns();
@@ -476,6 +488,7 @@ via epic:sea_save. `?seat` threads the CARTE-selected seat onto the action URLs.
if (window.RoomViews && window.RoomViews.syncGear) window.RoomViews.syncGear();
}
window.openSeaFelt = openSea;
window.closeSeaFelt = closeSea;
var pickSeaBtn = document.getElementById('id_pick_sea_btn');
if (pickSeaBtn) pickSeaBtn.addEventListener('click', openSea);