What I saw
The first assumption was that the tutorial logic itself was wrong. The same steps behaved correctly during development, though, which made the issue difficult to reproduce until the WebGL build was tested.
After tracing the flow, I narrowed it down to gameplay logic that used async/await. The timing and continuation did not behave the way I expected in that WebGL build, even though the Editor version appeared fine.
What I changed
I replaced that part of the flow with a coroutine. The tutorial then continued normally in the WebGL build.
This was a fix for a specific project and flow, not a rule that async/await can never be used in Unity WebGL. The useful lesson was to test the real target platform early when a gameplay flow depends on timing or asynchronous work.
What I took from it
- Editor testing does not replace a target-platform build.
- Deploy a small WebGL build early when the project is browser-bound.
- Keep tutorial and progression flows easy to trace when debugging.
- Choose the simplest control flow that is reliable for the target platform.