@import url(fonts/fonts.css);
:root {
   --background-color: #4490d3;
   --font-color: #ffffff;
   --container-color: #73b6e5;

   --score-best-title-color: #bce4ff;
   --score-best-text-color: #ffffff;
   --score-best-addition-color: rgba(0, 118, 214, 0.9);

   --link-color: #98ccff;
   --hr-color: #d8d4d0;

   --game-message-background-color: #4a95e380;
   --game-message-a-background-color: #06426c;
   --game-message-a-text-color: #f9f6f2;

   --game-won-background-color: #2e9eed80;
   --game-won-text-color: #f9f6f2;

   --grid-cell-background-color: rgba(218, 227, 238, 0.35);

   --restart-background-color: #06426c;
   --restart-text-color: #f9f6f2;

   --tile-box-shadow-color: 70, 221, 255;
   --tile-font-color: #004678;

   --default-font: 'DungGeunMo';
   --number-font: 'College-semi-condensed';
}

html,
body {
   margin: 0;
   padding: 0;
   background: var(--background-color);
   color: var(--font-color);
   font-family: var(--default-font), 'Helvetica Neue', Arial, sans-serif;
   font-size: 18px;
}

body {
   margin: 70px 0;
}

.heading {
   display: flex;
   align-items: center;
   justify-content: space-between;
   margin-bottom: 10px;
}
.heading > div {
   width: auto;
}
.title {
   font-family: var(--number-font);
   font-size: 100px;
   margin: 0;
}
.sub-title {
   font-family: var(--default-font);
   font-size: 20px;
   margin: 0;
}

@-webkit-keyframes move-up {
   0% {
      top: 25px;
      opacity: 1;
   }

   100% {
      top: -50px;
      opacity: 0;
   }
}
@-moz-keyframes move-up {
   0% {
      top: 25px;
      opacity: 1;
   }

   100% {
      top: -50px;
      opacity: 0;
   }
}
@keyframes move-up {
   0% {
      top: 25px;
      opacity: 1;
   }

   100% {
      top: -50px;
      opacity: 0;
   }
}
.scores-container {
   float: right;
   text-align: right;
   width: 50%;
}

.score-container,
.best-container {
   position: relative;
   display: inline-block;
   background: var(--container-color);
   padding: 18px 28px;
   font-family: var(--default-font);
   font-size: 30px;
   height: 25px;
   line-height: 47px;
   border-radius: 3px;
   color: var(var(--score-best-text-color));
   margin-top: 8px;
   text-align: center;
}
.score-container:after,
.best-container:after {
   position: absolute;
   width: 100%;
   top: 10px;
   left: 0;
   text-transform: uppercase;
   font-size: 20px;
   line-height: 15px;
   text-align: center;
   color: var(--score-best-title-color);
}
.score-container .score-addition,
.best-container .score-addition {
   position: absolute;
   right: 30px;
   color: red;
   font-size: 25px;
   line-height: 25px;
   font-weight: bold;
   color: var(--score-best-addition-color);
   z-index: 100;
   -webkit-animation: move-up 600ms ease-in;
   -moz-animation: move-up 600ms ease-in;
   animation: move-up 600ms ease-in;
   -webkit-animation-fill-mode: both;
   -moz-animation-fill-mode: both;
   animation-fill-mode: both;
}

.score-container:after {
   content: 'Score';
}

.best-container:after {
   content: 'Best';
}

p {
   margin-top: 0;
   margin-bottom: 10px;
   line-height: 1.65;
}

a {
   color: var(--link-color);
   text-decoration: underline;
   cursor: pointer;
}

strong.important {
   text-transform: uppercase;
}

hr {
   border: none;
   border-bottom: 1px solid var(--hr-color);
   margin-top: 20px;
   margin-bottom: 30px;
}

.container {
   width: 500px;
   margin: 0 auto;
}

@-webkit-keyframes fade-in {
   0% {
      opacity: 0;
   }

   100% {
      opacity: 1;
   }
}
@-moz-keyframes fade-in {
   0% {
      opacity: 0;
   }

   100% {
      opacity: 1;
   }
}
@keyframes fade-in {
   0% {
      opacity: 0;
   }

   100% {
      opacity: 1;
   }
}

.game-container {
   margin-top: 30px;
   position: relative;
   padding: 15px;
   cursor: default;
   -webkit-touch-callout: none;
   -ms-touch-callout: none;
   -webkit-user-select: none;
   -moz-user-select: none;
   -ms-user-select: none;
   -ms-touch-action: none;
   touch-action: none;
   background: var(--container-color);
   border-radius: 6px;
   width: 500px;
   height: 500px;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
}
.game-container .game-message {
   display: none;
   position: absolute;
   top: 0;
   right: 0;
   bottom: 0;
   left: 0;
   background: var(--game-message-background-color);
   border: 1px solid white;
   z-index: 100;
   text-align: center;
   -webkit-animation: fade-in 800ms ease 1200ms;
   -moz-animation: fade-in 800ms ease 1200ms;
   animation: fade-in 800ms ease 1200ms;
   -webkit-animation-fill-mode: both;
   -moz-animation-fill-mode: both;
   animation-fill-mode: both;
}
.game-container .game-message p {
   font-family: var(--default-font);
   font-size: 65px;
   text-shadow: -1px -1px 0 #000000, 1px -1px 0 #000000, -1px 1px 0 #000000, 1px 1px 0 #000000;
   height: 60px;
   line-height: 50px;
   margin: 15px 0;
}
.game-container .game-message .lower {
   display: block;
   font-family: var(--default-font);
   font-size: 25px;
   margin-top: 30px;
}
.game-container .game-message a {
   display: inline-block;
   background: var(--game-message-a-background-color);
   border-radius: 3px;
   padding: 0 20px;
   text-decoration: none;
   color: var(--game-message-a-text-color);
   height: 40px;
   line-height: 42px;
}
.game-container .game-message.game-won {
   background: var(--game-won-background-color);
   color: var(--game-won-text-color);
}
.game-container .game-message.game-won {
   display: block;
}

.game-container .game-message.game-over {
   display: flex;
   align-items: center;
   justify-content: center;
   flex-flow: column;
}

.game-container .game-message .image-swiper {
   width: 60%;
   height: 60%;
   margin: auto;
   margin-top: 25px;
   display: none;
}

swiper-container {
   width: 100%;
   height: 100%;
   pointer-events: none;
}

swiper-container img {
   width: 100%;
   display: block;
}

.swiper-btn {
   position: absolute;
   top: 50%;
   transform: translate(0, -50%);
   font-size: 50px;
   display: none;
}

.swiper-btn.next-btn {
   right: 20px;
}

.swiper-btn.prev-btn {
   left: 20px;
}

.grid-container {
   position: absolute;
   z-index: 1;
}

.grid-row {
   margin-bottom: 15px;
}
.grid-row:last-child {
   margin-bottom: 0;
}
.grid-row:after {
   content: '';
   display: block;
   clear: both;
}

.grid-cell {
   width: 106.25px;
   height: 106.25px;
   margin-right: 15px;
   float: left;
   border-radius: 3px;
   background: var(--grid-cell-background-color);
}
.grid-cell:last-child {
   margin-right: 0;
}

.tile-container {
   position: absolute;
   z-index: 2;
}

.tile,
.tile .tile-inner {
   width: 107px;
   height: 107px;
   line-height: 107px;
}
.tile-inner-text {
   font-family: var(--number-font);
   text-shadow: -1px -1px 0 #ffffff, 1px -1px 0 #ffffff, -1px 1px 0 #ffffff, 1px 1px 0 #ffffff;
   margin-left: 6px;
   line-height: 1.3;
}
.tile.tile-position-1-1 {
   -webkit-transform: translate(0px, 0px);
   -moz-transform: translate(0px, 0px);
   -ms-transform: translate(0px, 0px);
   transform: translate(0px, 0px);
}
.tile.tile-position-1-2 {
   -webkit-transform: translate(0px, 121px);
   -moz-transform: translate(0px, 121px);
   -ms-transform: translate(0px, 121px);
   transform: translate(0px, 121px);
}
.tile.tile-position-1-3 {
   -webkit-transform: translate(0px, 242px);
   -moz-transform: translate(0px, 242px);
   -ms-transform: translate(0px, 242px);
   transform: translate(0px, 242px);
}
.tile.tile-position-1-4 {
   -webkit-transform: translate(0px, 363px);
   -moz-transform: translate(0px, 363px);
   -ms-transform: translate(0px, 363px);
   transform: translate(0px, 363px);
}
.tile.tile-position-2-1 {
   -webkit-transform: translate(121px, 0px);
   -moz-transform: translate(121px, 0px);
   -ms-transform: translate(121px, 0px);
   transform: translate(121px, 0px);
}
.tile.tile-position-2-2 {
   -webkit-transform: translate(121px, 121px);
   -moz-transform: translate(121px, 121px);
   -ms-transform: translate(121px, 121px);
   transform: translate(121px, 121px);
}
.tile.tile-position-2-3 {
   -webkit-transform: translate(121px, 242px);
   -moz-transform: translate(121px, 242px);
   -ms-transform: translate(121px, 242px);
   transform: translate(121px, 242px);
}
.tile.tile-position-2-4 {
   -webkit-transform: translate(121px, 363px);
   -moz-transform: translate(121px, 363px);
   -ms-transform: translate(121px, 363px);
   transform: translate(121px, 363px);
}
.tile.tile-position-3-1 {
   -webkit-transform: translate(242px, 0px);
   -moz-transform: translate(242px, 0px);
   -ms-transform: translate(242px, 0px);
   transform: translate(242px, 0px);
}
.tile.tile-position-3-2 {
   -webkit-transform: translate(242px, 121px);
   -moz-transform: translate(242px, 121px);
   -ms-transform: translate(242px, 121px);
   transform: translate(242px, 121px);
}
.tile.tile-position-3-3 {
   -webkit-transform: translate(242px, 242px);
   -moz-transform: translate(242px, 242px);
   -ms-transform: translate(242px, 242px);
   transform: translate(242px, 242px);
}
.tile.tile-position-3-4 {
   -webkit-transform: translate(242px, 363px);
   -moz-transform: translate(242px, 363px);
   -ms-transform: translate(242px, 363px);
   transform: translate(242px, 363px);
}
.tile.tile-position-4-1 {
   -webkit-transform: translate(363px, 0px);
   -moz-transform: translate(363px, 0px);
   -ms-transform: translate(363px, 0px);
   transform: translate(363px, 0px);
}
.tile.tile-position-4-2 {
   -webkit-transform: translate(363px, 121px);
   -moz-transform: translate(363px, 121px);
   -ms-transform: translate(363px, 121px);
   transform: translate(363px, 121px);
}
.tile.tile-position-4-3 {
   -webkit-transform: translate(363px, 242px);
   -moz-transform: translate(363px, 242px);
   -ms-transform: translate(363px, 242px);
   transform: translate(363px, 242px);
}
.tile.tile-position-4-4 {
   -webkit-transform: translate(363px, 363px);
   -moz-transform: translate(363px, 363px);
   -ms-transform: translate(363px, 363px);
   transform: translate(363px, 363px);
}

.tile {
   position: absolute;
   -webkit-transition: 100ms ease-in-out;
   -moz-transition: 100ms ease-in-out;
   transition: 100ms ease-in-out;
   -webkit-transition-property: -webkit-transform;
   -moz-transition-property: -moz-transform;
   transition-property: transform;
}
.tile .tile-inner {
   border-radius: 3px;
   background-size: cover;
   text-align: left;
   font-weight: bold;
   z-index: 10;
   font-size: 30px;
   color: var(--tile-font-color);
}
.tile.tile-2 .tile-inner {
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0), inset 0 0 0 1px rgba(255, 255, 255, 0);
}
.tile.tile-4 .tile-inner {
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0), inset 0 0 0 1px rgba(255, 255, 255, 0);
}
.tile.tile-8 .tile-inner {
   color: var(--tile-font-color);
}
.tile.tile-16 .tile-inner {
   color: var(--tile-font-color);
}
.tile.tile-32 .tile-inner {
   color: var(--tile-font-color);
}
.tile.tile-64 .tile-inner {
   color: var(--tile-font-color);
}
.tile.tile-128 .tile-inner {
   color: var(--tile-font-color);
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0.2381), inset 0 0 0 1px rgba(255, 255, 255, 0.14286);
}
.tile.tile-256 .tile-inner {
   color: var(--tile-font-color);
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0.31746), inset 0 0 0 1px rgba(255, 255, 255, 0.19048);
}
.tile.tile-512 .tile-inner {
   color: var(--tile-font-color);
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0.39683), inset 0 0 0 1px rgba(255, 255, 255, 0.2381);
}
.tile.tile-1024 .tile-inner {
   color: var(--tile-font-color);
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0.47619), inset 0 0 0 1px rgba(255, 255, 255, 0.28571);
}
@media screen and (max-width: 520px) {
   .tile.tile-1024 .tile-inner {
      font-size: 15px;
   }
}
.tile.tile-2048 .tile-inner {
   color: var(--tile-font-color);
   box-shadow: 0 0 30px 10px rgba(var(--tile-box-shadow-color), 0.55556), inset 0 0 0 1px rgba(255, 255, 255, 0.33333);
}
@media screen and (max-width: 520px) {
   .tile.tile-2048 .tile-inner {
      font-size: 15px;
   }
}
.tile.tile-super .tile-inner {
   color: var(--tile-font-color);
   background: #3c3a32;
}
@media screen and (max-width: 520px) {
   .tile.tile-super .tile-inner {
      font-size: 10px;
   }
}

@-webkit-keyframes appear {
   0% {
      opacity: 0;
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   100% {
      opacity: 1;
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
@-moz-keyframes appear {
   0% {
      opacity: 0;
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   100% {
      opacity: 1;
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
@keyframes appear {
   0% {
      opacity: 0;
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   100% {
      opacity: 1;
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
.tile-new .tile-inner {
   -webkit-animation: appear 200ms ease 100ms;
   -moz-animation: appear 200ms ease 100ms;
   animation: appear 200ms ease 100ms;
   -webkit-animation-fill-mode: backwards;
   -moz-animation-fill-mode: backwards;
   animation-fill-mode: backwards;
}

@-webkit-keyframes pop {
   0% {
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   50% {
      -webkit-transform: scale(1.2);
      -moz-transform: scale(1.2);
      -ms-transform: scale(1.2);
      transform: scale(1.2);
   }

   100% {
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
@-moz-keyframes pop {
   0% {
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   50% {
      -webkit-transform: scale(1.2);
      -moz-transform: scale(1.2);
      -ms-transform: scale(1.2);
      transform: scale(1.2);
   }

   100% {
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
@keyframes pop {
   0% {
      -webkit-transform: scale(0);
      -moz-transform: scale(0);
      -ms-transform: scale(0);
      transform: scale(0);
   }

   50% {
      -webkit-transform: scale(1.2);
      -moz-transform: scale(1.2);
      -ms-transform: scale(1.2);
      transform: scale(1.2);
   }

   100% {
      -webkit-transform: scale(1);
      -moz-transform: scale(1);
      -ms-transform: scale(1);
      transform: scale(1);
   }
}
.tile-merged .tile-inner {
   z-index: 20;
   -webkit-animation: pop 200ms ease 100ms;
   -moz-animation: pop 200ms ease 100ms;
   animation: pop 200ms ease 100ms;
   -webkit-animation-fill-mode: backwards;
   -moz-animation-fill-mode: backwards;
   animation-fill-mode: backwards;
}

.above-game {
   display: flex;
   align-items: center;
   justify-content: space-between;
}

.game-intro {
   float: left;
   line-height: 42px;
   margin-bottom: 0;
}

.restart-button {
   display: inline-block;
   width: 100px;
   background: var(--restart-background-color);
   border-radius: 3px;
   padding: 0 20px;
   font-family: var(--default-font);
   text-decoration: none;
   color: var(--restart-text-color);
   height: 40px;
   font-size: 20px;
   line-height: 40px;
   display: block;
   text-align: center;
}

.game-explanation {
   margin-top: 50px;
}

@media screen and (max-width: 520px) {
   html,
   body {
      font-size: 15px;
   }

   body {
      margin: 50px 0;
      padding: 0 20px;
   }

   span.title {
      margin-top: unset;
      font-size: 60px;
   }

   p.sub-title {
      font-size: 15px;
   }

   .container {
      width: 280px;
      margin: 0 auto;
   }

   .score-container,
   .best-container {
      margin-top: 0;
      padding: 15px 10px;
      min-width: 40px;
      font-size: 20px;
   }

   .score-container:after,
   .best-container:after {
      font-size: 15px;
   }

   .game-container .game-message p {
      margin: 10px 0;
   }

   .swiper-btn {
      font-size: 30px;
   }

   .heading {
      margin-bottom: 10px;
   }

   .game-intro {
      width: 55%;
      display: block;
      box-sizing: border-box;
      line-height: 1.65;
   }

   .restart-button {
      width: 30%;
      font-size: 13px;
      padding: 0;
      display: block;
      box-sizing: border-box;
      margin-top: 2px;
      height: 30px;
      line-height: 31px;
   }

   .game-container {
      margin-top: 17px;
      width: 280px;
      height: 280px;
      padding: 10px;
   }
   .game-container .game-message a {
      height: 30px;
      line-height: 30px;
   }
   .game-container .game-message .lower {
      font-size: 18px;
   }
   .grid-row {
      margin-bottom: 10px;
   }
   .grid-cell {
      width: 57.5px;
      height: 57.5px;
      margin-right: 10px;
   }

   .tile,
   .tile .tile-inner {
      width: 58px;
      height: 58px;
      line-height: 58px;
   }
   .tile.tile-position-1-1 {
      -webkit-transform: translate(0px, 0px);
      -moz-transform: translate(0px, 0px);
      -ms-transform: translate(0px, 0px);
      transform: translate(0px, 0px);
   }
   .tile.tile-position-1-2 {
      -webkit-transform: translate(0px, 67px);
      -moz-transform: translate(0px, 67px);
      -ms-transform: translate(0px, 67px);
      transform: translate(0px, 67px);
   }
   .tile.tile-position-1-3 {
      -webkit-transform: translate(0px, 135px);
      -moz-transform: translate(0px, 135px);
      -ms-transform: translate(0px, 135px);
      transform: translate(0px, 135px);
   }
   .tile.tile-position-1-4 {
      -webkit-transform: translate(0px, 202px);
      -moz-transform: translate(0px, 202px);
      -ms-transform: translate(0px, 202px);
      transform: translate(0px, 202px);
   }
   .tile.tile-position-2-1 {
      -webkit-transform: translate(67px, 0px);
      -moz-transform: translate(67px, 0px);
      -ms-transform: translate(67px, 0px);
      transform: translate(67px, 0px);
   }
   .tile.tile-position-2-2 {
      -webkit-transform: translate(67px, 67px);
      -moz-transform: translate(67px, 67px);
      -ms-transform: translate(67px, 67px);
      transform: translate(67px, 67px);
   }
   .tile.tile-position-2-3 {
      -webkit-transform: translate(67px, 135px);
      -moz-transform: translate(67px, 135px);
      -ms-transform: translate(67px, 135px);
      transform: translate(67px, 135px);
   }
   .tile.tile-position-2-4 {
      -webkit-transform: translate(67px, 202px);
      -moz-transform: translate(67px, 202px);
      -ms-transform: translate(67px, 202px);
      transform: translate(67px, 202px);
   }
   .tile.tile-position-3-1 {
      -webkit-transform: translate(135px, 0px);
      -moz-transform: translate(135px, 0px);
      -ms-transform: translate(135px, 0px);
      transform: translate(135px, 0px);
   }
   .tile.tile-position-3-2 {
      -webkit-transform: translate(135px, 67px);
      -moz-transform: translate(135px, 67px);
      -ms-transform: translate(135px, 67px);
      transform: translate(135px, 67px);
   }
   .tile.tile-position-3-3 {
      -webkit-transform: translate(135px, 135px);
      -moz-transform: translate(135px, 135px);
      -ms-transform: translate(135px, 135px);
      transform: translate(135px, 135px);
   }
   .tile.tile-position-3-4 {
      -webkit-transform: translate(135px, 202px);
      -moz-transform: translate(135px, 202px);
      -ms-transform: translate(135px, 202px);
      transform: translate(135px, 202px);
   }
   .tile.tile-position-4-1 {
      -webkit-transform: translate(202px, 0px);
      -moz-transform: translate(202px, 0px);
      -ms-transform: translate(202px, 0px);
      transform: translate(202px, 0px);
   }
   .tile.tile-position-4-2 {
      -webkit-transform: translate(202px, 67px);
      -moz-transform: translate(202px, 67px);
      -ms-transform: translate(202px, 67px);
      transform: translate(202px, 67px);
   }
   .tile.tile-position-4-3 {
      -webkit-transform: translate(202px, 135px);
      -moz-transform: translate(202px, 135px);
      -ms-transform: translate(202px, 135px);
      transform: translate(202px, 135px);
   }
   .tile.tile-position-4-4 {
      -webkit-transform: translate(202px, 202px);
      -moz-transform: translate(202px, 202px);
      -ms-transform: translate(202px, 202px);
      transform: translate(202px, 202px);
   }

   .tile .tile-inner {
      font-size: 20px;
   }

   .game-message p {
      font-size: 30px !important;
      height: 30px !important;
      line-height: 30px !important;
   }
   .game-message .lower {
      margin-top: 0px !important;
   }

   .game-container .game-message .image-swiper {
      margin-top: 20px;
   }
}
