body {
  background: black;
  background-repeat: no-repeat;
  background-size: 100% 100vh;
  color: rgba(250,250,100,1);
  text-shadow: 0 0 .3em yellow;
  text-align:center;
  text-shadow: 0em -.2em .1em gold;
  display:flex;
  font-family: sans-serif;
  justify-content:center;
  overflow: hidden;
  align-items:center; 
}

/* animations */

@keyframes fade-in {
  0%{opacity:0;}
  100%{ opacity: 1; }
}

@keyframes floaty {
  0% { 
    transform:
      translateZ(16em);    
  }
  
  50% { 
    transform:
      translateZ(15.5em);    
  }
}

@keyframes rotate {
  0%{
    transform:
      rotateZ(0deg)
      translateZ(2em)      
      rotateX(-90deg)
      rotateY(45deg);   
  }
  50%{transform:
      rotateZ(180deg)
      translateZ(1.5em)      
      rotateX(-90deg)
      rotateY(45deg);   
  }
  100%{
    transform:rotateZ(360deg)
      translateZ(2em)       
      rotateX(-90deg)
      rotateY(45deg);   
  }
}

@keyframes wiggle {
  0% {
    transform: 
      translateZ(4em)
      rotateX(0deg)
      rotateY(0deg)
  }
  11% {
    transform: translateZ(4em)
      rotateX(1deg)
      rotateY(-1deg);
  }
  22% {
    transform: translateZ(4em)
      rotateX(1deg)
      rotateY(1deg);
  }
  33% {
    transform: translateZ(4em)
      rotateX(1deg)
      rotateY(0deg);
  }
  44% {
    transform: translateZ(4em)
      rotateX(-1deg)
      rotateY(-1deg);
  }
  55% {
    transform: translateZ(4em)
      rotateX(1deg)
      rotateY(1deg);
  }
  66% {
    transform: translateZ(4em)
      rotateX(-1deg)
      rotateY(0deg);
  }
  100%{
    transform: translateZ(4em) rotateX(0deg);
  }
}

@keyframes down {
  0%{transform: translateZ(16em);}
  100%{transform: translateZ(4em);}
}

@keyframes up {
  0%{
    transform: translateZ(4em) rotateX(0deg);
  }
  100%{
    transform: translateZ(16em) rotateX(0deg);
  }
}


/* container for floating text */
.qmark {
  font-size: 3em;
  font-weight: 700;
  text-shadow: 0 0 1em 0em rgba(250,250,0,1);
  position:absolute;
  transform: 
    translateZ(1em) 
    translateX(.8em)
    translateY(.5em)
    rotateX(-90deg)
    rotateY(45deg);
}
/* the present :D */
.heart-gift{ 
  color: crimson;
  animation: 
    rotate 2s infinite linear,
    fade-in 1.5s ease;
  opacity: 1;
  font-size: 3em;
  z-index: 2; 
  position: absolute;
  transform-origin: 50% 50%;
  text-shadow: 
    0 0 .1em crimson;
}
/* the container for the 3d stuffs */
.floor {
  top:40%;
  display: flex;
  align-items: center;
  justify-content:center; 
  z-index: 1;
  height: 20em;
  position: absolute;
  width: 20em;
  transform-origin: 0% 0%;
  transform: 
    rotateX(45deg) rotateZ(45deg);
  transform-style: preserve-3d;
  perspective: 1200px; 
}

/*  box container and parts */
.box {
  z-index:1;  
  position: relative;
  transform: translateZ(6em);
  transform-style: preserve-3d;  
}
.face {
  height: 6em;
  width: 6em;
  position: absolute;
  z-index: 1;
  box-shadow: 
    0 0 .5em .25em rgba(0,0,0,.2) inset;
}
.top {
  background-color: #880E4F; 
  background-image:
    linear-gradient(
      -90deg,
      transparent 49%,
      #F8BBD0 
    ),
    linear-gradient(
      0deg,
      transparent 49%,
      #F8BBD0
    );
  transform: translateZ(3em);
  box-shadow: 
    0 0 0 .4em #C2185B inset; 
}

.right {
  background-image: linear-gradient(
      to top,
      rgba(0,0,0,0) 33%,
      #F48FB1 34% 65%, 
      rgba(0,0,0,0) 66%);
  background-color: #AD1457;
  transform: rotateY(90deg) translateZ(3em);
}

.left {
  background-image: linear-gradient(
      to right,
      rgba(0,0,0,0) 33%,
      #F8BBD0 33% 66%,
      rgba(0,0,0,0) 66%);
  background-color: #C2185B;
  transform: rotateX(-90deg) translateZ(3em);
}

/* lid and parts */
.lid{ 
  animation: 
    wiggle 1.5s infinite cubic-bezier(.2,1.2,.6,1.1); 
  position: absolute;
  height: 6.5em;
  width: 6.5em;  
  transform-style:preserve-3d;
  z-index:2;
}
.open{
  transform: translateZ(16em); 
  animation: up 1s ease-out,
    floaty 2s 1s infinite linear;
}
.close { 
  transform: translateZ(4em);
  animation: down 1s ease-out,
    wiggle 1.5s  1s infinite cubic-bezier(.2,1.2,.6,1.1); 
}
.ltop {
  height: 6.5em;
  width: 6.5em;
  background-color: #E91E63;
  background-image: linear-gradient(
      to right,
      rgba(0,0,0,0) 33%,
      #F8BBD0 34% 65%,
      rgba(0,0,0,.1) 66% 68%,
      rgba(0,0,0,0) 69%),
  linear-gradient(
      to top,
      rgba(0,0,0,0) 33%,
      #F48FB1 34% 65%,
      rgba(0,0,0,0) 66%);
}

.lright {
  z-index:2;
  background-color: #D81B60;
  width: 3em;
  height: 6.5em;
  transform:
    rotateY(90deg) 
    translateX(1.5em) 
    translateZ(5em);
  background-image: linear-gradient(
      to top,
      rgba(0,0,0,0) 33%,
      #F8BBD0 34% 65%,
      rgba(0,0,0,0) 66%);
}

.lleft {
  height: 3em;
  width: 6.5em;
  background-image:
    linear-gradient(
      to right,
      rgba(0,0,0,0) 33%,
      #FFCDD2 33% 66%,
      rgba(0,0,0,0) 66%);
  background-color: #AD1457;
  transform: 
    rotateX(-90deg) 
    translateY(1.5em)
    translateZ(5em);
}

/*.shadow {
  position:absolute;
  top:54%;
  left:57.3%;
  z-index:2;
  height:18em;
  width: 7.9em;
  border-radius: 25% 0 0 0;
  background: linear-gradient(#4446, rgba(0,0,0,0));
  transform:
    rotateZ(-20deg)
    translateZ(3em);
}
.shadow2 {
  position:absolute;
  top:50%;
  left:50%;
  z-index:2;
  height:20em;
  width: 6em;
  background: linear-gradient(#4446, rgba(0,0,0,0));
  transform:
    translateZ(3em);
}


.shadow3 {
  position:absolute;
  top:45%;
  left:36.5%;
  z-index:2;
  height:22em;
  width: 8em;
  border-radius: 0 50% 0 0;
  background: linear-gradient(#4446, rgba(0,0,0,0));
  transform:
    rotateZ(13deg)
    
    translateZ(3em);
}*/

.message {
  position: fixed;
  top: 80%;
  left: 50%;
  transform: translateX(-80%, -80%);
  text-align: center;
  font-size: 3em;
  color: #ff66cc;
  font-family: 'Comic Sans MS', cursive, sans-serif;
  text-shadow: 0 0 10px #ff1493, 0 0 20px #ff1493;
  animation: fade-in 1.5s ease forwards;
  z-index: 999; 
  pointer-events: none; 
}


@keyframes fade-in {
  from { opacity: 0; transform: scale(0.9); }
  to { opacity: 1; transform: scale(1); }
}

#confetti-canvas {
  position: fixed;
  top: 0;
  left: 0;
  pointer-events: none;
  width: 100vw;
  height: 100vh;
  z-index: 998;
}
