It's true that the event is triggered before the Panel is actually visible, but as it is written here, `this.update` will not be invoked until 50 milliseconds *after* the event fires. The sequence is:

1. `visibilitychange` event is emitted
2. Your handler is invoked
3. Panel becomes visible
4. (50 milliseconds pass)
5. The scheduler invokes `this.update.bind(this)`

So, depending on the transition effect, the Stopwatch may be visible when the `update` method runs. (I have experienced the undesirable flashing locally.)