/* MAIN */
* {
    margin: 0;
    padding: 0;
}

body {
    overflow-x: hidden;
    -webkit-user-select: none;
    -webkit-text-size-adjust: none;
    font-family: Helvetica;
    -webkit-perspective: 800;
    -webkit-transform-style: preserve-3d;
}

body > * {
    -webkit-backface-visibility: hidden;
    -webkit-box-sizing: border-box;
    position: absolute;
    left: 0;
    width: 100%;
    -webkit-transform: translate3d(0,0,0) rotate(0) scale(1);
}

.selectable, input, textarea {
    -webkit-user-select: auto;
}

.no-wrap {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* SCROLLER */

.scroll {
  position:relative;
  z-index:1;
  width:auto/* your desired width, auto and 100% are fine */;
  height:auto/* element height */;
  overflow:hidden;
}

.scroll > div {
  padding-bottom:10px;/* todo: experimental*/;
}


/* ANIMATIONS */

.in {
    z-index: 10;
}

.out {
    z-index: 0;
}

.in, .out {
  -webkit-animation-timing-function: ease-in-out;
  -webkit-animation-duration: 350ms;
  -webkit-animation-fill-mode: forwards; /* Persist the last frame of the animation */
}

/* Slide left */

.slide.in {
    -webkit-animation-name: slideLeftIn;
}

.slide.out {
    -webkit-animation-name: slideLeftOut;
}

@-webkit-keyframes slideLeftIn {
    0% {
        -webkit-transform: translateX(100%);
    } 
    100% {
        -webkit-transform: translateX(0);
    }
}

@-webkit-keyframes slideLeftOut {
    0% {
        -webkit-transform: translateX(0px);
    } 
    100% {
        -webkit-transform: translateX(-100%);
    }
}

/* Slide right */

.slide.in.reverse {
    -webkit-animation-name: slideRightIn;
}

.slide.out.reverse {
    -webkit-animation-name: slideRightOut;
}

@-webkit-keyframes slideRightIn {
    0% {
        -webkit-transform: translateX(-100%);
    } 
    100% {
        -webkit-transform: translateX(0);
    }
}

@-webkit-keyframes slideRightOut {
    0% {
        -webkit-transform: translateX(0);
    } 
    100% {
        -webkit-transform: translateX(100%);
    }
}


/* Fade */

.fade.in {
    -webkit-animation-name: fadeIn;
}

.fade.out {
    -webkit-animation-name: fadeOut;
}

@-webkit-keyframes fadeIn {
    0% {
        opacity: 0;
    } 
    100% {
        opacity: 1;
    }
}

@-webkit-keyframes fadeOut {
    0% {
        opacity: 1;
    } 
    100% {
        opacity: 0;
    }
}


/* Pop */

.pop.in {
    -webkit-animation-name: popIn;
}

.pop.out {
    -webkit-animation-name: popOut;
}

@-webkit-keyframes popIn {
    0% {
        -webkit-transform: scale(.2);
        opacity: 0;
    } 
    100% {
        -webkit-transform: scale(1);
        opacity: 1;
    }
}

@-webkit-keyframes popOut {
    0% {
        -webkit-transform: scale(1);
        opacity: 1;
    } 
    100% {
        -webkit-transform: scale(.2);
        opacity: 0;
    }
}

/* Dissolve */

.dissolve.in {
    -webkit-animation-name: dissolveIn;
}

.dissolve.out {
    -webkit-animation-name: dissolveOut;
}

@-webkit-keyframes dissolveIn {
    0% {
        opacity: 0;
    } 
    100% {
        opacity: 1;
    }
}

@-webkit-keyframes dissolveOut {
    0% {
        opacity: 1;
    } 
    100% {
        opacity: 0;
    }
}


/* Slide up */

.slideup.in {
    z-index: 10;
    -webkit-animation-name: slideUpIn;
}

.slideup.out {
    z-index: 0;
    -webkit-animation-name: slideUpOut;
}

@-webkit-keyframes slideUpIn {
    0% {
        -webkit-transform: translateY(100%);
    } 
    100% {
        -webkit-transform: translateY(0);
    }
}

@-webkit-keyframes slideUpOut {
    0% {
        -webkit-transform: translateY(0);
    } 
    100% {
        -webkit-transform: translateY(0);
    }
}


.slideup.in.reverse {
    z-index: 0;
    -webkit-animation-name: slideDownIn;
}

.slideup.out.reverse {
    z-index: 10;
    -webkit-animation-name: slideDownOut;
}

@-webkit-keyframes slideDownIn {
    0% {
        -webkit-transform: translateY(0);
    } 
    100% {
        -webkit-transform: translateY(0);
    }
}

@-webkit-keyframes slideDownOut {
    0% {
        -webkit-transform: translateY(0);
    } 
    100% {
        -webkit-transform: translateY(100%);
    }
}


/* Flip Left */

.flip {
    -webkit-backface-visibility: hidden;
}

.flip.in {
    -webkit-animation-name: flipLeftIn;
}

.flip.out {
    -webkit-animation-name: flipLeftOut;
}

@-webkit-keyframes flipLeftIn {
    0% {
        -webkit-transform: rotateY(180deg) scale(.8);
    } 
    100% {
        -webkit-transform: rotateY(0deg) scale(1);
    }
}

@-webkit-keyframes flipLeftOut {
    0% {
        -webkit-transform: rotateY(0deg) scale(1);
    } 
    100% {
        -webkit-transform: rotateY(-180deg) scale(.8);
    }
}



/* Flip Right */


.flip.in.reverse {
    -webkit-animation-name: flipRightIn;
}

.flip.out.reverse {
    -webkit-animation-name: flipRightOut;
}

@-webkit-keyframes flipRightIn {
    0% {
        -webkit-transform: rotateY(-180deg) scale(.8);
    } 
    100% {
        -webkit-transform: rotateY(0deg) scale(1);
    }
}

@-webkit-keyframes flipRightOut {
    0% {
        -webkit-transform: rotateY(0deg) scale(1);
    } 
    100% {
        -webkit-transform: rotateY(180deg) scale(.8);
    }
}

/* Swap Left */

.swap {
    -webkit-animation-duration: .7s;
    -webkit-transform: perspective(800);
    -webkit-animation-timing-function: ease-out;
}
.swap.in {
    -webkit-animation-name: swapLeftIn;
}
.swap.out {
    -webkit-animation-name: swapLeftOut;
}

@-webkit-keyframes swapLeftIn {
    0% {
        -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg);
        opacity:0;
    }
    35% {
        -webkit-transform: translate3d(180px, 0px, -400px) rotateY(-20deg);
        opacity:1;
    }
    100% {
        opacity:1;
        -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg);
    }
}

@-webkit-keyframes swapLeftOut {
    0% {
        -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg);
        opacity:1;
    }
    35% {
        -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg);
        opacity:.5;
    }
    100% {
        -webkit-transform:  translate3d(0px, 0px, -800px) rotateY(70deg);
        opacity:0;
    }
}

/* Swap Right */


.swap.in.reverse {
    -webkit-animation-name: swapRightIn;
}
.swap.out.reverse {
    -webkit-animation-name: swapRightOut;
}

@-webkit-keyframes swapRightIn {
    0% {
        -webkit-transform: translate3d(0px, 0px, -800px) rotateY(70deg);
        opacity:0;
    }
    35% {
        -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg);
        opacity:1;
    }
    100% {
        -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg);
        opacity:1;
    }
}

@-webkit-keyframes swapRightOut {
    0% {
        -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg);
        opacity:1;
    }
    35% {
        -webkit-transform:  translate3d(180px, 0px, -400px) rotateY(-20deg);
        opacity:.5;
    }
    100% {
        -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg);
        opacity:0;
    }
}



/* Cube Left */

.cube {
    -webkit-animation-duration: .55s;
}

.cube.in {
    -webkit-transform-origin: 100% 50%;
    -webkit-animation-name: cubeLeftIn;
}

.cube.out {
    -webkit-transform-origin: 0% 50%;
    -webkit-animation-name: cubeLeftOut;
}

@-webkit-keyframes cubeLeftIn {
    0% {
        -webkit-transform: rotateY(90deg) translateZ(100%) scale(.5);
        opacity: .5;
    }
    100% {
        -webkit-transform: rotateY(00deg) translateZ(0) scale(1);
        opacity: 1;
    }
}

@-webkit-keyframes cubeLeftOut {
    0% {
        -webkit-transform: rotateY(0deg) translateX(0) scale(1);
        opacity: 1;
    }
    100% {
        -webkit-transform: rotateY(-90deg) translateZ(100%) scale(.5);
        opacity: .5;
    }
}


/* Cube Right */


.cube.in.reverse {
    -webkit-transform-origin: 0% 50%;
    -webkit-animation-name: cubeRightIn;
}

.cube.out.reverse {
    -webkit-transform-origin: 100% 50%;
    -webkit-animation-name: cubeRightOut;
}

@-webkit-keyframes cubeRightIn {
    0% {
        -webkit-transform: rotateY(-90deg) translateZ(100%) scale(.5);
        opacity: .5;
    }
    100% {
        -webkit-transform: rotateY(0deg) translateZ(0) scale(1);
        opacity: 1;
    }
}

@-webkit-keyframes cubeRightOut {
    0% {
        -webkit-transform: rotateY(0deg) translateX(0) scale(1);
        opacity: 1;
    }
    100% {
        -webkit-transform: rotateY(90deg) translateZ(100%) scale(.5);
        opacity: .5;
    }
}

/* Layout */

.hbox {
        display: -webkit-box;
        -webkit-box-orient: horizontal;
        -webkit-box-align: stretch;
 
        display: -moz-box;
        -moz-box-orient: horizontal;
        -moz-box-align: stretch;
 
        display: box;
        box-orient: horizontal;
        box-align: stretch;
}

.hbox> * {
        -webkit-box-flex: 0;
        -moz-box-flex: 0;
        box-flex: 0;
}

.vbox {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-box-align: stretch;
 
        display: -moz-box;
        -moz-box-orient: vertical;
        -moz-box-align: stretch;
 
        display: box;
        box-orient: vertical;
        box-align: stretch;
}

.vbox> * {
        -webkit-box-flex: 0;
        -moz-box-flex: 0;
        box-flex: 0;
}
 
.boxSpacer {
        -webkit-box-flex: 1;
        -moz-box-flex: 1;
        box-flex: 1;
}

.boxReverse {
        -webkit-box-direction: reverse;
        -moz-box-direction: reverse;
        box-direction: reverse;
}

.boxAlignStart {
        -webkit-box-align: start;
        -moz-box-align: start;
        box-align: start;
}

.boxAlignCenter {
        -webkit-box-align: center;
        -moz-box-align: center;
        box-align: center;
}

.boxAlignEnd {
        -webkit-box-align: end;
        -moz-box-align: end;
        box-align: end;
}


.boxPackStart {
        -webkit-box-pack: start;
        -moz-box-pack: start;
        box-pack: start;
}

.boxPackCenter {
        -webkit-box-pack: center;
        -moz-box-pack: center;
        box-pack: center;
}

.boxPackEnd {
        -webkit-box-pack: end;
        -moz-box-pack: end;
        box-pack: end;
}

.boxFlex0 {
        -webkit-box-flex: 0;
        -moz-box-flex: 0;
        box-flex: 0;
}
 
.boxFlex1, .boxFlex {
        -webkit-box-flex: 1;
        -moz-box-flex: 1;
        box-flex: 1;
}
 
.boxFlex2 {
        -webkit-box-flex: 2;
        -moz-box-flex: 2;
        box-flex: 2;
}
 
.boxGroup1 {
        -webkit-box-flex-group: 1;
        -moz-box-flex-group: 1;
        box-flex-group: 1;
}
 
.boxGroup2 {
        -webkit-box-flex-group: 2;
        -moz-box-flex-group: 2;
        box-flex-group: 2;
}