The intro ends when three separate things agree.
A preloader that waits only for load flashes on a fast connection and lies on a slow one. This one opens three gates independently — a counter that must finish its own run, a mark animation that must finish the cycle it is in, and the actual page load — and leaves only when all three are open.
Counter reached 100—
Mark finished its current cycle—
Page reported loaded—
The second gate is the interesting one: the mark loops forward and back until the page is ready, then finishes the cycle it happens to be in rather than cutting mid-motion. The intro therefore never stops on a half-drawn frame, whatever the connection does.
Returning visitors get the short version — the counter is skipped, one cycle plays, and the curtain lifts. That decision is stored per session, so it survives navigation but not a new visit.