Calculating state
While the physics server works out what happens next, the time-control bar says so. It swaps its middle for a spinner and a word, keeps its frame and its place, and leaves the scene alone.
A · When it triggers
- A
/simulateround-trip is still in flight after 2 seconds. Most calculations finish well inside that and never show this state at all. - Once shown it stays for at least 1.5 seconds, so a response landing just after the threshold cannot make it flash on and off.
- It clears when the response arrives — or when the calculation fails. A failure has to clear it too, or the bar would sit there until the next calculation.
- It does not care what started the calculation: pressing Continue, confirming a widget, releasing a drip all reach the same signal.
- If the bar is not on screen — before the lesson has loaded, or after it has finished — nothing is shown. Those two windows belong to the loading screen and the completion screen, so the student is never left without a signal.
B · The state on its own
Running
Calculating
Calculating · squeezed
Same bar, same frame, same 530 × 56. Only the contents change, and the speed dial holds its place in both states — it is pinned to the right edge, so nothing shifts under the cursor. The third bar is the same state with the width squeezed: nothing about the calculating state is fixed-width, so it narrows exactly as the running bar does, and the label truncates rather than wrapping or pushing the dial out.
C · In the lab
The whole signal is one bar at the bottom of the screen. Nothing is drawn over the experiment and nothing intercepts the pointer, so the student can still orbit and zoom the camera while the calculation runs — which is the reason the state lives here rather than over the scene.
D · What changes, and why
Four controls go, one stays.
- Pause/Play, the scrubber, the readout. Already dimmed and unusable for the whole calculation — there is nothing to scrub through until the results arrive. The swap replaces controls that were pretending to be controls with an explanation of why they are dead.
- Previous. Removed for correctness, not tidiness. Pressing it mid-calculation moves the lesson on while the request is still out, and when the answer lands it is applied to whatever step is on screen by then. Taking the button away for the two or three seconds it is dangerous is the cheap fix; the real one is to teach the app which step asked the question.
- The speed dial stays. It only sets playback rate, cannot reorder anything, and is deliberately left interactive whenever the bar is locked.
Nothing is removed from the page. The controls are hidden, so the scrubber keeps its position and its wiring and is simply shown again when the state clears. Leaving the frame in place is what makes this read as the bar changing what it says, rather than one widget being torn out and another dropped in.
E · What this replaced
Until August 2026 the same signal was a card centred over the scene behind a faint wash across the whole viewport. Two things were wrong with it. It covered the experiment the student was trying to watch; and because the wash lay over the 3D canvas it swallowed camera drag and wheel-zoom for as long as it was up — so the one thing that was safe to do during a calculation was the one thing it prevented.