html,
body {
  height: 100%;
  width: 100%;
  overflow: hidden;
}

html {
  box-sizing: border-box;
}

body {
  display: flex;
  justify-content: center;
  background-color: #304E85;
}

.container {
  position: relative;
  top: -70px;

  width: 500px;
  height: 500px;
}

.frame {
  position: absolute;
  top: 43%;
  
  background: #304E85;
  border-top: 2px solid white;
  border-radius: 50%;
  width: 500px;
  height: 500px;
  opacity: .7;
}

.frame::before {
  position: absolute;
  right: -5%;
  top: 17%;
  
  background: #304E85;
  border-radius: 50%;
  content: '';
  display: block;
  width: 550px;
  height: 550px;
}

.castle {
  background-color: #487FD9;
}

.portcullis {
  position: absolute;
  left: 41%;
  bottom: -7%;
  
  background-color: #304E85;;
  border-radius: 50% 50% 0 0 / 50% 50% 0 0;
  width: 20%;
  height: 20%;
  z-index: 2;
  transition: border-radius .3s;
}

a:hover .portcullis {
  border-radius: 50%;
}

.portcullis::before {
  position: absolute;
  bottom: 67%;
  right: 65%;
  content: '';
  transition: all .3s;
}

a:hover .portcullis::before { 
  background-color: #304E85;
  border-radius: 50%;
  width: 60%;
  height: 60%;
}

.portcullis::after {
  position: absolute;
  bottom: 67%;
  right: -20%;
  content: '';
  transition: all .3s;
}

a:hover .portcullis::after {  
  background-color: #304E85;
  border-radius: 50%;
  width: 60%;
  height: 60%;
} 

.base {
  position: absolute;
  left: 15.5%;
  bottom: 0;
  
  width: 70%;
  height: 10%;
}

.base-2 {
  position: absolute;
  left: 20%;
  bottom: 9%;
  
  width: 65%;
  height: 7%;
}

.base-3 {
  position: absolute;
  left: 24%;
  bottom: 15%;
  
  width: 55%;
  height: 6%;
}

.base-4 {
  position: absolute;
  left: 24%;
  bottom: 20%;
  
  width: 50%;
  height: 6%;
}

.base-4::after {
  position: absolute;
  bottom: 50%;
  left: 76%;
  
  border-top: 0px solid transparent;
  border-left: 30px solid transparent;
  border-right: 30px solid transparent;
  border-bottom: 60px solid #487FD9;
  content: '';
  display: block;
}

.base-tower {
  position: absolute;
  
  width: 0;
  height: 0;
  border-top: 0px solid transparent;
  border-left: 30px solid transparent;
  border-right: 30px solid transparent;
  border-bottom: 60px solid #487FD9;
}

.left {
  bottom: 9.5%;
  left: 12.5%;
}

.base-tower.left::after { /* flag */
  position: absolute;
  bottom: 10%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .2s infinite;
  transform-origin: right;
}

.right {
  bottom: 9.5%;
  left: 76.5%;
}

.base-tower.right::after { /* flag */
  position: absolute;
  bottom: 10%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .3s infinite;
  transform-origin: right;
}

.mid-tower-left {
  position: absolute;
  left: 24%;
  bottom: 15%;
  
  width: 9%;
  height: 13%;
}

.mid-tower-left::after {
  position: absolute;
  top: -20%;
  left: -13px;
  
  border-top: 45px solid #487FD9;
  border-left: 35px solid transparent;
  border-right: 35px solid transparent;
  border-bottom: 0px solid transparent;
  content: '';
  display: block; 
}

.mid-tower-left-roof {
  position: absolute;
  left: 22.3%;
  bottom: 30%;
  
  border-top: 0px solid transparent;
  border-left: 30px solid transparent;
  border-right: 30px solid transparent;
  border-bottom: 60px solid #487FD9;
}

.mid-tower-left-roof::after { /* flag */
  position: absolute;
  bottom: 10%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .4s infinite;
  transform-origin: right;
}

.mid-tower-right {
  position: absolute;
  left: 71%;
  bottom: 20.8%;
  
  border-top: 0px solid transparent;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
  border-bottom: 70px solid #487FD9;
}

.mid-tower-right::after {
  position: absolute;
  bottom: 10%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .2s infinite;
  transform-origin: right;
}

.level-2-tower-left {
  position: absolute;
  left: 34%;
  bottom: 25%;
  
  border-top: 0px solid transparent;
  border-left: 23px solid transparent;
  border-right: 23px solid transparent;
  border-bottom: 70px solid #487FD9;
}

.level-3-tower {
  position: absolute;
  left: 65%;
  bottom: 26%;
  
  width: 5%;
  height: 12%;
}

.level-3-tower-roof {
  position: absolute;
  bottom: 37%;
  right: 28.5%;
  
  border-top: 0px solid transparent;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
  border-bottom: 40px solid #487FD9;
}

.keep {
  position: absolute;
  left: 42.5%;
  bottom: 25%;
  
  width: 23%;
  height: 10.5%;
}

.side-tower {
  position: absolute;
  bottom: 20%;
  left: 40%;
  
  border-top: 40px solid #487FD9;
  border-left: 20px solid transparent;
  border-right: 20px solid transparent;
  border-bottom: 0px solid transparent;
  width: 5px;
}

.side-tower.roof {
  position: absolute;
  bottom: 38%;
  left: 41%;
  
  border-top: 0px solid transparent;
  border-left: 18px solid transparent;
  border-right: 18px solid transparent;
  border-bottom: 45px solid #487FD9;
  width: 0;
}

.side-tower.roof::after { /* flag */
  position: absolute;
  bottom: 1%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .2s infinite;
  transform-origin: right;
}

.keep-main {
  position: absolute;
  left: 49.3%;
  bottom: 35%;
  
  width: 14%;
  height: 16%;
  -webkit-clip-path: polygon(50% 0%, 100% 0, 100% 100%, 0 100%, 0 49%, 50% 49%);
  clip-path: polygon(50% 0%, 100% 0, 100% 100%, 0 100%, 0 49%, 50% 49%);
}

.main-side-roof {
  position: absolute;
  left: 49.3%;
  bottom: 43%;
  
  border-top: 0px solid transparent;
  border-left: 18px solid transparent;
  border-right: 18px solid transparent;
  border-bottom: 45px solid #487FD9;
  width: 0;
}

.main-tower {
  position: absolute;
  left: 54.7%;
  bottom: 50%;
  
  width: 10%;
  height: 10%;
  -webkit-clip-path: polygon(16% 0, 85% 0, 85% 38%, 100% 38%, 86% 100%, 15% 100%, 0 37%, 16% 37%);
clip-path: polygon(16% 0, 85% 0, 85% 38%, 100% 38%, 86% 100%, 15% 100%, 0 37%, 16% 37%);
}

.main-tower-roof {
  position: absolute;
  left: 54.7%;
  bottom: 59%;
  
  border-top: 0px solid transparent;
  border-left: 25px solid transparent;
  border-right: 25px solid transparent;
  border-bottom: 45px solid #487FD9;
  width: 0;
}

.main-tower-roof::after { /* flag */
  position: absolute;
  bottom: 10%;
  right: 10%;
  
  content: '';
  display: block;
  
  -webkit-clip-path: polygon(100% 0, 0 47%, 100% 100%);
  clip-path: polygon(100% 0, 0 47%, 100% 100%);
  background: #487FD9;
  width: 1.2rem;
  height: .6rem;  
  
  animation: .3s wave .4s infinite;
  transform-origin: right;
}

@keyframes wave {
  0%, 100% {
    transform: skew(0);
  }
  50% {
    transform: skew(0, 15deg);
  }
}