Сode review, как улучшить функионал?
P.s. В промисах, async/await и другой магии адептов - пока что не разбираюсь...
Разбирайся
Добавление класса перевёртыша выполняется мгновенно, но отображается анимацией в течение 1 секунды (см. стиль .active:
console.log(`Card ${key + 1} start!`);
el.classList.add('active');
console.log(`Card ${key + 1} end!`); // выполнится почти одновременно с предыдущими строками
Поймать конец CSS-анимации можно примерно: установив setTimeout на то же время, что длится анимация:console.log(`Card ${key + 1} start!`);
el.classList.add('active');
setTimeout(() => console.log(`Card ${key + 1} end!`), 1000);
Более грамотный вариант слушать событие окончания анимации. См. transitionend и animationendel.addEventListener('transitionend', () => {
  console.log(`Card ${key + 1} end!`);
});

spoilersetTimeout(() => {
        console.log(`Card ${key + 1} start!`);
        const onTransitionEnd = () => {
          console.log(`Card ${key + 1} end!`);
          el.removeEventListener('transitionend', onTransitionEnd);
        }
        el.addEventListener('transitionend', onTransitionEnd); 
        el.classList.add('active');
      }, ms);