Песочница не рабочая.
Если объяснять проблему, то суть в том, что браузер видя display: none, который потом, я полагаю, меняется на display: block(допустим), показывает его без анимации. Если вы добавили что-то вроде opacity: 0 -> opacity: 1, анимации все равно не будет, потому что браузер сначала применит opacity, потом display. Браузер пытается запихнуть все изменения свойств стилей как бы в одну пачку операций.
Решение: сначала делаем display, потом, в следующей операции применяем стили анимации.
Как сделать применение стилей анимации в следующей операции? Один из способов - setTimeout(callback, 0);