The part about initial="hidden" baking opacity: 0 into the server-rendered markup matches something I've hit too. One thing that helped me was gating the hidden state behind a class set by a tiny inline script (e.g. js-enabled on the html element), so no-JS or failed-hydration visitors still see the content. Did you also try a CSS fallback animation with a short delay that forces opacity back to 1 if the bundle never runs?