The timing window calculations for ADOFAI are quite complex! While I think all the information about it is already out there, it seems like a good idea to keep a canonical explanation of it available to prevent any confusion.
At their core, the timing windows are based off of the angle difference between the planet and the tile when a key is pressed. For $d = (\text{planet angle}) - (\text{tile angle})$, we have the following judgments:
Early!! (too early)Early!EPerfect!Perfect!LPerfect!Late!Late!! (too late)To put it more simply:
Perfect!EPerfect! / LPerfect!Early! / Late!Early!! / Late!! (too early/late)As a visualization, this is the where the timing windows line up:

With the angle based calculations, it means the faster the BPM the smaller the hit windows. We can convert the angle windows to millisecond windows with the following formula:
$$ \text{angle\degree} * \frac{1 \text{ beat}}{180\degree} * \frac{1}{\text{BPM}} * \frac{60 \text{ s}}{1 \text{ min}} * \frac{1000\text{ ms}}{1\text{ s}} =\frac{\text{angle\degree}}{\text{BPM}} * \frac{1000}{3} $$