Root cause: the lake had (when (not (client?)) ...) guard — SSR rendered
"the joy of sx" preview but client skipped it. replaceChildren swapped
in an empty lake. The rebuild-preview effect was skipped (first-run
optimization), so the preview stayed blank for ~500ms.
Fix: remove the client? guard so the lake renders on both server and
client. The template's steps-to-preview produces the initial preview.
The effect only fires on subsequent step changes (not first run).
Test: replaced MutationObserver approach with screenshot comparison.
Loads page with JS blocked (pure SSR), takes screenshot. Loads with JS
(hydration), takes screenshot. Compares pixels. Any visual difference
fails the test.
Result: "No visual flash: screenshots identical" — passes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>