Hola hay algo interesante en el código que se está estudiando y por qué en unos casos funciona y en otros no ¿Por qué querySelectorAll no funciona? Esto está relacionado con la diferencia entre HTMLCollection y NodeList
document.querySelectorAll(".cuadrante") devuelve un object HTMLCollection, esto significa que este método devuelve una lista estática donde los cambios que tengan lugar a posteriori de su inicialización no se reflejan. En este caso en el momento de la inicialización no había nodos, de ahí que la lista estática esté vacía y el método no funcione.
document.getElementsByClassName("cuadrante") devuelve un object NodeList vivo, esto es, una lista dinámica de nodos donde se referencia a los elementos incluyendo los cambios que puedan existir en ellos durante la ejecución. En este caso en el momento de la inicialización no había nodos, pero luego son creados y la referencia dinámica permite acceder a estos elementos cuando se invoca la función.
Aclaración terminológica: a veces se habla de NodeList vivos o dinámicos frente a NodeList no-vivos o estáticos. En ocasiones hay métodos que devuelven NodeList no-vivos (estáticos), por ejemplo document.querySelectorAll se diría que devuelve un NodeList no-vivo o estático. Es un tanto confuso y depende de la referencia que miremos, la cuestión es tener clara la diferencia entre dinámico y estático.
Saludos