Moi poprzednicy dali Ci dużo sugestii dot. CSS/HTML, ja natomiast chciałbym Ci wskazać kilka kwestii związanych z JS:
var listButtons = document.getElementsByClassName('main__list-question-element');
articles = document.getElementsByClassName('main__question-article');
Na końcu linii, w której deklarujesz zmienną listButtons masz średnik. W takim przypadku kolejna zmienna "articles" zostanie zadeklarowana jako zmienna w zasięgu globalnym! Poczytaj o trybie ścisłym ('use strict'). Aby zastosować jedną instrukcję VAR do deklaracji kilku zmiennych to na końcu każdej deklaracji daj przecinek, a nie średnik.
raz stosujesz addEventListener, a raz "onclick", "onkeypress". Nie jest to błąd wpływający na działanie programu ale warto ujednolicić sposób przypisywania obsługi zdarzeń.
for(var i=0; i<listButtons.length; i++)
Generalnie dobrą praktyką jest stosowanie w pętli for (drugi element) wartości obliczonych już wcześniej, czyli np. wejście do pętli ze zmienną i=0 oraz max=listButtons.length, a następnie przyrównywanie warunku i<max. W Twoim rozwiązaniu przy każdej iteracji musi nastąpić obliczenie łącznej ilości elementów. Co prawda współczesne przeglądarki z tego co wiem radzą sobie z tym, szczególnie jeśli nie iterujemy po elementach DOM ale polecam korzystanie z dobrych praktyk. Ponadto poczytaj sobie o metodach forEach, pętlach for-of itp.
Co prawda tych metod nie masz w pseudotablicy zwróconej przez getElementsByClassName, ale łatwo możesz sobie stworzyć "normalną" tablicę z Array.prototype poprzez:
let listButtons = [...document.getElementsByClassName('main__list-question-element')];
typeof listButtons.forEach; //'function'
Pomijam w tej chwili kwestię wydajności forEach vs for, gdyż w tego typu projektach jest to praktycznie niezauważalne. Osobiście preferuję stosowanie metod Array.prototype gdyż uważam to za bardziej czytelną formę - od razu widać czy tylko iterujemy "coś robiąc" forEach, czy potrzebujemy tablicę zwrotną (metoda map), filtrujemy dane (metoda filter) itp. itd. Ale to już kwestia indywidualnego wyboru sposobu pisania kodu.
Ponad to masz złą walidację adresu e-mail w polu formularza. Stosujesz tam walidację HTML5, ale niestety akurat w zakresie e-mail to html5 jest porażką... poprawny jest np. adres tomek@wp (brak ostatniej części domeny). Nie jest to błąd, ale jest to dobre miejsce np. do poćwiczenia prostych wyrażeń regularnych lub zapoznania się z zewnętrznymi bibliotekami walidującymi (choć akurat w kwestii e-mail to najczęściej walidują one wg. RFC).