Let me just first say I believe the overall visual design is fantastic! Now the bad news, the JavaScript code is loaded with code sections which are not DRY (Do Not Repeat Yourself).
For example, the following:
document.getElementsByClassName("confirm-btn")[0].addEventListener("click", function(event){
document.getElementsByClassName("flipper")[0].style.transition = "0.6s";
flip();
userIcon.updateIcon("user-square");
if (gameObj.firstMove === "user"){
document.getElementsByClassName("open-icon-select-btn")[0].style.backgroundImage =
"url('icons/" + userIcon.icon + "/" + userIcon.icon + " " + userIcon.colour + ".png')";
} else {
document.getElementsByClassName("open-icon-select-btn")[1].style.backgroundImage =
"url('icons/" + userIcon.icon + "/" + userIcon.icon + " " + userIcon.colour + ".png')";
}
});
could be replaced with:
document.getElementsByClassName("confirm-btn")[0].addEventListener("click", function(event){
document.getElementsByClassName("flipper")[0].style.transition = "0.6s";
flip();
userIcon.updateIcon("user-square");
var index = gameObj.firstMove === "user" ? 0 : 1;
document.getElementsByClassName("open-icon-select-btn")[index].style.backgroundImage =
"url('icons/" + userIcon.icon + "/" + userIcon.icon + " " + userIcon.colour + ".png')";
});
Also, when you reference the same element more than once, you should assign it to a variable. For example, I see the following at least twice in your code:
document.getElementsByClassName("confirm-btn")
I would assign this to a variable like below and then reference it like:
var iconConfirmBtn = document.getElementsByClassName("confirm-btn");
iconConfirmBtn[0].addEventListener('click', function() {.......});
iconConfirmBtn[1].addEventListener('click', function() {.......});
Actually, even with the above, I would figure out a way to only have a single click event handler for both buttons which would allow you to delete an entire event handler.
There are many such sections of code where 98% of the code is repeated. Make your code DRY and you will have a very impressive project to add to your portfolio.