<div class="intro">
  <h1 class="intro-title">Dj Kreemz </h1>

  <p class="intro-text intro-text--can">
   
    <br/>
    <button class="intro-text-play" data-play>&#9654;</button>
  </p>

  <p class="intro-text intro-text--shouldnt">
   
    <br/>
    <a class="intro-text-button" href="https://www.google.com/chrome/browser/">
      Download Chrome
    </a>
    <button class="intro-text-button" data-play>
      Play Anyway
    </button>
  </p>

  <p class="intro-text intro-text--cant">
    Unfortunately your browser doesn't support this demo. Please download
    Google Chrome, and try running it again.
    <br/>
    <a class="intro-text-button" href="https://www.google.com/chrome/browser/">

    </a>
  </p>

  <noscript>
    The following demo requires javascript to run. Please enable it and
    refresh the browser.
  </noscript>
</div>

<div class="viewport">
  <div class="scene">
    <div class="title title--full">
      <div class="title-word">
        <span class="title-word-letter" data-letter="S1">
          <span class="title-word-letter-large">D</span>
          <div class="titlebar titlebar--left"></div>
        </span>
        <span class="title-word-letter" data-letter="T1">j</span>
        <span class="title-word-letter" data-letter="R1"></span>
        <span class="title-word-letter" data-letter="A"></span>
        <span class="title-word-letter" data-letter="N1"></span>
        <span class="title-word-letter" data-letter="G1"></span>
        <span class="title-word-letter" data-letter="E"></span>
        <span class="title-word-letter" data-letter="R2">
          <span class="title-word-letter-large"></span>
          <div class="titlebar titlebar--right"></div>
        </span>
        <div class="titlebar titlebar--top"></div>
      </div>

      <div></div>

      <div class="title-word title-word--second">
        <span class="title-word-letter" data-letter="T2">K</span>
        <span class="title-word-letter" data-letter="H">r</span>
        <span class="title-word-letter" data-letter="I">e</span>
        <span class="title-word-letter" data-letter="N2">e</span>
        <span class="title-word-letter" data-letter="G2">m</span>
        <span class="title-word-letter" data-letter="S2">z</span>
      </div>
    </div>

    <div class="title title--scene title--scene0"></div>
    <div class="title title--scene title--scene1">
      <div class="title-word">
        <div class="title-word-letter" data-letter="A">D</div>
      </div>
    </div>
    <div class="title title--scene title--scene2">
      <div class="title-word">
        <div class="title-word-letter" data-letter="N">j</div>
      </div>
    </div>
    <div class="title title--scene title--scene3">
      <div class="title-word">
        <div class="title-word-letter" data-letter="R">K</div>
        <div class="title-word-letter" data-letter="I">r</div>
      </div>
    </div>
    <div class="title title--scene title--scene4">
      <div class="title-word">
        <div class="title-word-letter" data-letter="S">e</div>
        <div class="title-word-letter" data-letter="G">z</div>
      </div>
    </div>
    <div class="title title--scene title--scene5">
      <div class="title-word">
        <div class="title-word-letter" data-letter="R">R</div>
        <div class="title-word-letter" data-letter="S">S</div>
      </div>
    </div>
    <div class="title title--scene title--scene6">
      <div class="title-word">
        <div class="title-word-letter" data-letter="I">K</div>
        <div class="title-word-letter" data-letter="A">r</div>
        <div class="title-word-letter" data-letter="T">e</div>
        <div class="title-word-letter" data-letter="H">e</div>
        <div class="title-word-letter" data-letter="N">m</div>
        <div class="title-word-letter" data-letter="G">z</div>
      </div>
    </div>
  </div>

  <div class="credits">
    <div class="credits-group">
      <div class="credits-group-credit">
        A Ant Bravo Production
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit" data-text="Winona Ryder">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit">
    
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit" data-text="Finn Wolfhard">

      </div>
      <div class="credits-group-credit" data-text="Millie Bobby Brown">
     
      </dllie>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit" data-text="Gaten Matarazzo">
        
      </div>
      <div class="credits-group-credit" data-text="Caleb McLaughlin">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit" data-text="Natalia Dyer">
        
      </div>
      <div class="credits-group-credit" data-text="Charlie Heaton">
       
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-credit" data-text="Cara Buono">
      
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="And">
        
      </div>
      <div class="credits-group-credit" data-text="Matthew Modine">
       
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="Co-Executive Producer">
        
      </div>
      <div class="credits-group-credit" data-text="Iain Paterson">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="Executive Producer">
        
      </div>
      <div class="credits-group-credit" data-text="Karl Gajdusek">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="Executive Producers">
        
      </div>
      <div class="credits-group-credit" data-text="Cindy Holland">
        
      </div>
      <div class="credits-group-credit" data-text="Brian Wright">
        
      </div>
      <div class="credits-group-credit" data-text="Matt Thunell">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="Executive Producers">
        
      </div>
      <div class="credits-group-credit" data-text="Shawn Levy">
        
      </div>
      <div class="credits-group-credit" data-text="Dan Cohen">
        
      </div>
    </div>

    <div class="credits-group">
      <div class="credits-group-sub" data-text="Executive Producers">
      </div>
      <div class="credits-group-credit" data-text="The Duffer Brothers">
      </div>
    </div>

    <div class="credits-final">
      <div class="credits-group-sub" data-text="Created By">
        
      </div>
      <div class="credits-group-credit" data-text="Will O'Beirne">
        
      </div>

      <a
        href="https://wbobeirne.github.io" target="_blank"
        class="credits-final-link credits-final-link--website"
      ></a>
      <a
        href="https://twitter.com/wbobeirne" target="_blank"
        class="credits-final-link credits-final-link--twitter"
      ></a>
      <a
        href="https://github.com/wbobeirne" target="_blank"
        class="credits-final-link credits-final-link--github"
      ></a>
      <a
        href="https://codepen.io/wbobeirne" target="_blank"
        class="credits-final-link credits-final-link--codepen"
      ></a>
    </div>
  </div>
</div>

<div class="vignette"></div>
<div class="grain"></div>
<div class="letterbox">
  <div class="letterbox-cover letterbox-cover--top"></div>
  <div class="letterbox-cover letterbox-cover--left"></div>
  <div class="letterbox-cover letterbox-cover--right"></div>
  <div class="letterbox-cover letterbox-cover--bottom"></div>
</div>
// Variables
$desired-ratio-y: 9;
$desired-ratio-x: 16;
$desired-ratio: #{$desired-ratio-x} / #{$desired-ratio-y};
$desired-ratio-multiplier: $desired-ratio-y / $desired-ratio-x;

$color-bg: #000;
$color-title: #C11B1F;
$color-credits: #A8A6A7;
$color-credits-top: #B2B0B1;
$color-credits-bottom: $color-credits;

$font-title: 'BenguiatITCW01-BoldCn';
$font-credits: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, AppleGothic, sans-serif;

$title-fsize: 28vmin;
$title-fsize-large: 34vmin;
$title-spacing: -1.3vmin;
$title-stroke: 0.4vmin;
$title-shadow: 2vmin;

$titlebar-height: 1vmin;
$titlebar-border: 0.4vmin;
$titlebar-shadow-outer: 1.2vmin;
$titlebar-shadow-inner: 0.5vmin;
$titlebar-radius: 0.1vmin;

$credits-fsize: 6vmin;
$credits-fsize-small: 4.6vmin;
$credits-margin: 0vmin;
$credits-speed: 3000ms;
$credits-link-size: 12vmin;
$credits-link-margin: 5vmin;
$credits-shadow-offset: 0.3vmin;
$credits-shadow-blur: 0.15vmin;

/// Remove the unit of a length
@function strip-unit($number) {
  @if type-of($number) == 'number' and not unitless($number) {
    @return $number / ($number * 0 + 1);
  }

  @return $number;
}

// Ensure that things resize properly, even without the correct aspect ratio
@mixin v-rule($rule, $vmin-val) {
  $vw-val: '';

  // Convert multiple args into the proper values, i.e. 10px 20px 5px
  @if type-of($vmin-val) == 'list' {
    @each $val in $vmin-val {
      // 0 and 'auto' or 'none' don't like being mathed
      @if type-of($val) == 'string' or type-of($val) == 'color' or unitless($val) {
        $w-val: #{$vw-val} #{$val};
      }
      @else {
        $vw-val: #{$vw-val} #{strip-unit($val * $desired-ratio-multiplier)}vw;
      }
    }
  }
  // Convert a regular single value, i.e. 100vmin
  @else {
    $vw-val: #{strip-unit($vmin-val * $desired-ratio-multiplier)}vw;
  }

  #{$rule}: $vmin-val;
  @media screen and (max-aspect-ratio: $desired-ratio) {
    #{$rule}: $vw-val;
  }
}

// Simply center something
@mixin centerize() {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-50%);
}

// Font
@font-face {
  font-family: $font-title;
  src: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/BenguiatProITC-BoldCond.eot') format('embedded-opentype'),
       url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/BenguiatProITC-BoldCond.woff') format('woff'),
       url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/BenguiatProITC-BoldCond.ttf') format('truetype');
  font-style: normal;
  font-weight: bold;
}

// Styles
body {
  background: $color-bg;
  text-align: center;
  line-height: 1;
  margin: 0;
  -webkit-font-smoothing: subpixel-antialiased;
  overflow: hidden;
  box-sizing: border-box;

  *, *:before, *:after {
    box-sizing: inherit;
  }
}

.intro {
  padding: 0 20px;
  width: 100%;
  max-width: 440px;
  @include centerize;
  transition: opacity 600ms ease, visibility 0ms linear 800ms;

  &--hide {
    opacity: 0;
    visibility: hidden;
  }

  &-title {
    font-family: $font-title;
    color: $color-title;
    font-size: 34px;
    margin-bottom: 15px;
  }

  &-text {
    text-align: center;
    color: $color-credits;
    font-size: 16px;
    line-height: 22px;
    font-family: $font-credits;
    display: none;

    &--show {
      display: block;
    }

    &-button {
      display: inline-block;
      vertical-align: top;
      cursor: pointer;
      padding: 0;
      margin: 20px 5px 0;
      width: 160px;
      height: 42px;
      line-height: 42px;
      border: none;
      text-decoration: none;
      font-size: 16px;
      border-radius: 4px;
      font-family: $font-credits;
      background: $color-title;
      color: #FFF;

      &:hover {
        background: darken($color-title, 10%);
      }
    }

    &-play {
      display: block;
      cursor: pointer;
      width: 120px;
      height: 120px;
      margin: 30px auto 0;
      border: 4px solid #FFF;
      font-size: 40px;
      text-indent: 10px;
      color: #FFF;
      background: rgba(#555, 0.2);
      opacity: 0.3;
      border-radius: 100%;
      transition: color 100ms ease, opacity 100ms ease;
      transform: translateZ(0);

      &:hover,
      &:focus,
      &:active {
        opacity: 1;
        color: $color-title;
        outline: 0;
      }
    }
  }
}

.viewport {
  height: 100vh;
  width: 100vw;
  user-select: none;
  display: none;

  &--show {
    display: block;
  }
}

.title {
  @include centerize;
  transform: translateX(-50%) translateY(-45%);
  width: 100%;
  font-size: 0;
  font-family: $font-title;
  color: $color-bg;
  letter-spacing: $title-spacing;
  font-weight: bold;
  display: none;

  -webkit-text-stroke-color: $color-title;
  @include v-rule(-webkit-text-stroke-width, $title-stroke);
  @include v-rule(text-shadow, 0 0 $title-shadow rgba($color-title, 0.5));

  .no-textstroke & {
    text-shadow: 3px  0 $title-shadow $color-title,
                -3px  0 $title-shadow $color-title,
                 0 -3px $title-shadow $color-title,
                 0  3px $title-shadow $color-title;
  }

  &--show {
    display: block;
  }

  &-word {
    position: relative;
    display: inline-block;

    &--second {
      transform: translateY(-38%);
    }

    &-letter {
      display: inline-block;
      position: relative;
      vertical-align: top;
      @include v-rule(font-size, $title-fsize);

      &-large {
        display: inline-block;
        transform: translateY(-2.8%);
        @include v-rule(font-size, $title-fsize-large);
      }
    }
  }
}
.titlebar {
  position: absolute;
  border-style: solid;
  border-color: $color-title;
  @include v-rule(height, $titlebar-height);
  @include v-rule(border-width, $titlebar-border);
  @include v-rule(border-radius, $titlebar-radius);
  box-shadow: 0 0 $titlebar-shadow-outer rgba($color-title, 0.8),
              0 0 $titlebar-shadow-inner rgba($color-title, 0.8) inset;

  &--top {
    bottom: 100%;
    width: 100%;
  }

  &--left,
  &--right {
    top: 90%;
  }

  &--left {
    left: 0;
    right: -12%;
  }
  &--right {
    left: -15%;
    right: 0;
  }
}


.credits {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  font-family: $font-credits;
  font-weight: bold;
  @include v-rule(font-size, $credits-fsize);


  $wiggle: 0.015vmin;
  @keyframes credits-wiggle {
    0%  { transform: translateX(-50%) translateY(-50%) translateX(0)        translateY(0);        }
    20% { transform: translateX(-50%) translateY(-50%) translateX(0)        translateY(-$wiggle); }
    40% { transform: translateX(-50%) translateY(-50%) translateX($wiggle)  translateY(-$wiggle); }
    60% { transform: translateX(-50%) translateY(-50%) translateX(0)        translateY($wiggle);  }
    80% { transform: translateX(-50%) translateY(-50%) translateX(-$wiggle) translateY(0);        }
    100%{ transform: translateX(-50%) translateY(-50%) translateX(-$wiggle) translateY($wiggle);  }
  }
  @keyframes credits-flash {
    0%, 30%   { opacity: 1;    }
    40%       { opacity: 0.97; }
    42%, 85%  { opacity: 1;    }
    92%       { opacity: 0.94; }
    94%, 100% { opacity: 1;    }
  }
  &-group,
  &-final {
    @include centerize;
    width: 90%;
    opacity: 0;
    transition: opacity $credits-speed * 0.1 ease;

    &--show {
      opacity: 1;
      transition-delay: $credits-speed * 0.1;
      animation: credits-wiggle 200ms infinite $credits-speed * 0.1,
                 credits-flash 2200ms infinite $credits-speed * 0.1;
    }
  }

  &-group {
    &-credit,
    &-sub {
      position: relative;
      @include v-rule(margin-bottom, $credits-margin);
      color: $color-credits;
      background: linear-gradient($color-credits-top, $color-credits-bottom);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;

      .no-textstroke & {
        background: none;
        // Just in case
        -webkit-background-clip: border-box;
        -webkit-text-fill-color: currentcolor;
      }

      // Background clip text fill makes shadows not work, so put them in
      // an :after element
      &:after {
        content: attr(data-text);
        position: absolute;
        z-index: -1;
        width: 100%;
        top: 0;
        left: 0;
        background: none;
        text-shadow: $credits-shadow-offset
                     $credits-shadow-offset
                     $credits-shadow-blur #000;
      }
    }

    &-credit {
      font-weight: 800;
      text-transform: uppercase;

      > span {
        @include v-rule(font-size, $credits-fsize * 0.8);
      }
    }

    &-sub {
      @include v-rule(font-size, $credits-fsize-small);
    }
  }

  &-final {
    @include centerize;

    &-link {
      display: inline-block;
      @include v-rule(width, $credits-link-size);
      @include v-rule(height, $credits-link-size);
      @include v-rule(margin, $credits-link-margin);
      background-size: 100% 100%;

      &:hover {
        opacity: 0.8;
      }

      &--website {
        background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/website.svg");
      }

      &--github {
        background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/github.svg");
      }

      &--twitter {
        background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/twitter.svg");
      }

      &--codepen {
        background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/codepen.svg");
      }
    }
  }
}

.grain {
  @keyframes grain-wiggle {
    0%  { transform: translateX(8%)   translateY(-5%);  }
    10% { transform: translateX(0%)   translateY(0%);   }
    20% { transform: translateX(10%)  translateY(-15%); }
    30% { transform: translateX(-10%) translateY(0%);   }
    40% { transform: translateX(25%)  translateY(15%);  }
    50% { transform: translateX(10%)  translateY(-10%); }
    60% { transform: translateX(-5%)  translateY(5%);   }
    70% { transform: translateX(15%)  translateY(0%);   }
    80% { transform: translateX(-20%) translateY(-10%); }
    90% { transform: translateX(20%)  translateY(15%);  }
    100%{ transform: translateX(4%)   translateY(7%);   }
  }

  position: fixed;
  top: -50vh;
  left: -50vw;
  height: 200vh;
  width: 200vw;
  background: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/grain.png");
  animation: grain-wiggle 5s steps(10) infinite;
  pointer-events: none;
}

.letterbox {
  @include centerize;
  position: fixed;
  height: 100vh;
  width: 100vh / $desired-ratio-multiplier;
  pointer-events: none;
  display: none;

  &--show {
    display: block;
  }

  @media screen and (max-aspect-ratio: $desired-ratio) {
    height: 100vw * $desired-ratio-multiplier;
    width: 100vw;
  }

  &-cover {
    // Arbitrarily large
    position: absolute;
    width: 5000px;
    height: 5000px;
    background: #000;

    &--top,
    &--bottom {
      left: 50%;
      transform: translateX(-50%);
    }

    &--left,
    &--right {
      top: 50%;
      transform: translateY(-50%);
    }

    &--top {
      bottom: 100%;
    }

    &--left {
      right: 100%;
    }

    &--right {
      left: 100%;
    }

    &--bottom {
      top: 100%;
    }
  }
}


// Title Animations
@mixin letter($letter: null, $scale: null) {
  $selector: "data-letter";
  @if $letter != null {
    $selector: '#{$selector}="#{$letter}"';
  }

  .title-word-letter[#{$selector}] {
    @if $scale != null {
      @include v-rule(font-size, $title-fsize * $scale);

      .textstroke & {
        @include v-rule(text-shadow, 0 0 $title-shadow * $scale rgba($color-title, 0.5));
        @include v-rule(-webkit-text-stroke-width, $title-stroke * $scale);
      }
    }

    @content;
  }

  @if $letter == null and $scale != null {
    .title-word-letter[#{$selector}] .title-word-letter-large {
      @include v-rule(font-size, $title-fsize-large * $scale);
    }
  }
}

@mixin scaled-bar($scale) {
  @include v-rule(height, $titlebar-height * $scale);
  @include v-rule(border-width, $titlebar-border * $scale);
  @include v-rule(border-radius, $titlebar-radius * $scale);
  box-shadow: 0 0 $titlebar-shadow-outer * $scale rgba($color-title, 0.8),
              0 0 $titlebar-shadow-inner * $scale rgba($color-title, 0.8) inset;
}

.title {
  &--scene {
    .title-word {
      @include centerize;
    }
  }

  &--scene1 {
    @keyframes scene1 {
      0%   { transform: translateX(-43.85%) translateY(-40%) scale(2.2);   }
      100% { transform: translateX(-43.85%) translateY(-40%) scale(1); }
    }

    @include letter("A", 60) {
      @include centerize;
      animation: scene1 7000ms ease-out forwards;
      transform-origin: 43.85% 40%;
    }
  }

  &--scene2 {
    @keyframes scene2-word {
      0%   { transform: translateX(-68%) translateY(-41%); }
      100% { transform: translateX(-68%) translateY(-38%); }
    }
    @keyframes scene2-letter {
      0%   { transform: scale(1); }
      100% { transform: scale(0.92); }
    }

    .title-word {
      animation: scene2-word 3000ms linear forwards;
    }

    @include letter("N", 20) {
      animation: scene2-letter 3000ms linear forwards;
      transform-origin: 68.4% 40%;
    }
  }

  &--scene3 {
    @keyframes scene3-r {
      0%   { transform: translateX(-78%) translateY(-30%) scale(0.95);   }
      100% { transform: translateX(-81%) translateY(-30%) scale(0.84); }
    }
    @keyframes scene3-i {
      0%   { transform: translateX(15%) translateY(-50%);  }
      100% { transform: translateX(35%) translateY(-50%); }
    }

    @include letter("R", 23) {
      @include centerize;
      animation: scene3-r 3000ms linear forwards;
      transform-origin: 75% 27%;
    }
    @include letter("I", 23) {
      @include centerize;
      animation: scene3-i 3000ms linear forwards;
    }
  }

  &--scene4 {
    @keyframes scene4-word {
      0%   { transform: translateX(-50%) translateY(-50%) scale(1); }
      100% { transform: translateX(-50%) translateY(-50%) scale(0.9); }
    }
    @keyframes scene4-s {
      0%   { transform: translateX(-53%) translateY(-11%); }
      100% { transform: translateX(-65%) translateY(-11%); }
    }
    @keyframes scene4-g {
      0%   { transform: translateX(-42%) translateY(-90%); }
      100% { transform: translateX(-34%) translateY(-90%); }
    }

    .title-word {
      animation: scene4-word 3000ms linear forwards;
    }

    @include letter("S", 18) {
      @include centerize;
      animation: scene4-s 3000ms linear forwards;
    }
    @include letter("G", 18) {
      @include centerize;
      animation: scene4-g 3000ms linear forwards;
    }
  }

  &--scene5 {
    @keyframes scene5-r {
      0%   { transform: translateX(-118%) translateY(-30%); }
      100% { transform: translateX(-112%) translateY(-34%); }
    }
    @keyframes scene5-s { 
      0%   { transform: translateX(-19%) translateY(-28.5%); }
      100% { transform: translateX(-22%) translateY(-32%);   }
    }

    @include letter("R", 14) {
      @include centerize;
      animation: scene5-r 3000ms linear forwards;
    }
    @include letter("S", 14) {
      @include centerize;
      animation: scene5-s 3000ms linear forwards;
    }
  }

  &--scene6 {
    @keyframes scene6-fade-out {
      0%, 40%   { opacity: 1; }
      85%, 100% { opacity: 0; }
    }
    @keyframes scene6-i {
      0%        { transform: translateX(-105%) translateY(-91%); };
      85%, 100% { transform: translateX(-135%) translateY(-85%); };
    }
    @keyframes scene6-a {
      0%        { transform: translateX(14%) translateY(-91%); };
      85%, 100% { transform: translateX(34%) translateY(-85%); };
    }
    @keyframes scene6-t {
      0%        { transform: translateX(-134%) translateY(-7%); };
      85%, 100% { transform: translateX(-111%) translateY(-1%); };
    }
    @keyframes scene6-h {
      0%        { transform: translateX(24%) translateY(-7%); };
      85%, 100% { transform: translateX(15%) translateY(-1%); };
    }

    @keyframes scene6-fade-in {
      0%, 40%   { opacity: 0; }
      85%, 100% { opacity: 1; }
    }
    @keyframes scene6-n {
      0%, 40% { transform: translateX(-170%) translateY(-50%); }
      100%    { transform: translateX(-147%) translateY(-50%); }
    }
    @keyframes scene6-g {
      0%, 40% { transform: translateX(82%) translateY(-50%); }
      100%    { transform: translateX(49%) translateY(-50%);  }
    }

    @include letter("I", 8) {
      @include centerize;
      animation: scene6-i        6000ms linear forwards,
                 scene6-fade-out 6000ms linear forwards;
    }
    @include letter("A", 8) {
      @include centerize;
      animation: scene6-a        6000ms linear forwards,
                 scene6-fade-out 6000ms linear forwards;
    }
    @include letter("T", 8) {
      @include centerize;
      animation: scene6-t        6000ms linear forwards,
                 scene6-fade-out 6000ms linear forwards;
    }
    @include letter("H", 8) {
      @include centerize;
      animation: scene6-h        6000ms linear forwards,
                 scene6-fade-out 6000ms linear forwards;
    }

    @include letter("N", 3) {
      @include centerize;
      animation: scene6-n       6000ms linear forwards,
                 scene6-fade-in 6000ms linear forwards;
    }
    @include letter("G", 3) {
      @include centerize;
      animation: scene6-g       6000ms linear forwards,
                 scene6-fade-in 6000ms linear forwards;
    }
  }

  &--full {
    @keyframes full-title {
      0% {
        opacity: 1;
        transform: translateX(-50%) translateY(-41%) scale(0.8);
      }
      90% { opacity: 1; }
      100% {
        opacity: 0;
        transform: translateX(-50%) translateY(-45%) scale(0.06);
      }
    }

    // First word
    @keyframes full-s1 {
      0%, 50%   { transform: translateX(-200%); }
      76%, 100% { transform: translateX(0%);    }
    }
    @keyframes full-t1 {
      0%, 40%   { transform: translateY(-120%); }
      75%, 100% { transform: translateY(0%);    }
    }
    @keyframes full-r1 {
      0%, 25%   { transform: translateX(-55%); }
      72%, 100% { transform: translateX(0%);   }
    }
    @keyframes full-a {
      0%        { transform: translateX(-15%); }
      40%, 100% { transform: translateX(0%);   }
    }
    @keyframes full-n1 {
      0%        { transform: translateX(15%); }
      40%, 100% { transform: translateX(0%);  }
    }
    @keyframes full-g1 {
      0%        { transform: translateX(30%); }
      55%, 100% { transform: translateX(0%);  }
    }
    @keyframes full-e {
      0%, 50%   { transform: translateY(-120%); }
      75%, 100% { transform: translateY(0%);    }
    }
    @keyframes full-r2 {
      0%, 45%   { transform: translateX(200%); }
      71%, 100% { transform: translateX(0%);    }
    }

    // Second word
    @keyframes full-t2 {
      0%, 30%   { transform: translateX(-80%); }
      60%, 100% { transform: translateX(0%);   }
    }
    @keyframes full-h {
      0%, 36%   { transform: translateY(200%); }
      76%, 100% { transform: translateY(0%);   }
    }
    @keyframes full-i {
      0%, 25%   { transform: translateX(-70%); }
      75%, 100% { transform: translateX(0%);   }
    }
    @keyframes full-n2 {
      0%, 10%   { transform: translateY(70%); }
      40%, 100% { transform: translateY(0%);   }
    }
    @keyframes full-g2 {
      0%        { transform: translateX(30%); }
      45%, 100% { transform: translateX(0%);  }
    }
    @keyframes full-s2 {
      0%, 40%   { transform: translateY(200%); }
      80%, 100% { transform: translateY(0%);   }
    }

    // Bars
    @keyframes full-bar-top {
      0%, 67%   { transform: scaleX(0); }
      72%, 100% { transform: scaleX(1); }
    }
    @keyframes full-bar-side {
      0%, 70%   { transform: scaleX(0); }
      75%, 100% { transform: scaleX(1); }
    }

    width: 1000vw;
    animation: full-title 20s cubic-bezier(0.15, 0.7, 0.26, 0.88) forwards;
    transform-origin: 50% 45%;

    @include letter(null, 10);
    @include letter("S1") {
      animation: full-s1 20s ease forwards;
    }
    @include letter("T1") {
      animation: full-t1 20s ease forwards;
    }
    @include letter("R1") {
      animation: full-r1 20s ease forwards;
    }
    @include letter("A") {
      animation: full-a 20s ease forwards;
    }
    @include letter("N1") {
      letter-spacing: -15vmin;
      animation: full-n1 20s ease forwards;
    }
    @include letter("G1") {
      animation: full-g1 20s ease forwards;
    }
    @include letter("E") {
      animation: full-e 20s ease forwards;
    }
    @include letter("R2") {
      animation: full-r2 20s ease forwards;
    }

    @include letter("T2") {
      animation: full-t2 20s ease forwards;
    }
    @include letter("H") {
      animation: full-h 20s ease forwards;
    }
    @include letter("I") {
      animation: full-i 20s ease forwards;
    }
    @include letter("N2") {
      letter-spacing: -15vmin;
      animation: full-n2 20s ease forwards;
    }
    @include letter("G2") {
      animation: full-g2 20s ease forwards;
    }
    @include letter("S2") {
      animation: full-s2 20s ease forwards;
    }

    .titlebar {
      @include scaled-bar(10);

      &--top {
        animation: full-bar-top 20s ease forwards;
      }

      &--left,
      &--right {
        animation: full-bar-side 20s ease forwards;
      }

      &--left {
        transform-origin: right;
      }

      &--right {
        transform-origin: left;
      }
    }
  }
}
View Compiled
// Real quick add another modernizr check foooor...
Modernizr.addTest('textstroke', function() {
  var h1 = document.createElement('h1');
  if (!('webkitTextStroke' in h1.style) && !('textStroke' in h1.style)) {
    return false;
  }
  else {
    return true;
  }
});

document.addEventListener("DOMContentLoaded", () => {
  let bind = false;
  let text = null;

  // Must-haves
  if (!Modernizr.audio || !Modernizr.cssanimations || !Modernizr.textshadow) {
    text = document.getElementsByClassName("intro-text--cant")[0];
  }
  // Should-haves
  else if (!Modernizr.textstroke) {
    bind = true;
    text = document.getElementsByClassName("intro-text--shouldnt")[0];
  }
  // All good!
  else {
    bind = true;
    text = document.getElementsByClassName("intro-text--can")[0];
  }

  text.className += " intro-text--show";

  if (bind) {
    const btns = document.querySelectorAll("[data-play]");
    for (let i = 0; i < btns.length; i++) {
      btns[i].addEventListener("click", () => {
        start();
      });
    }
  }
});

// Fade out intro, start music and animation
let started = false;
function start() {
  if (started) {
    return;
  }
  started = true;

  const intro = document.getElementsByClassName("intro")[0];
  
  const music = new Audio("https://s3-us-west-2.amazonaws.com/s.cdpn.io/161676/music.mp3");

  intro.className += " intro--hide";

  music.addEventListener("canplay", () => {
    setTimeout(() => {
      startAnimation();
      setTimeout(() => {
        music.play();
      }, 200);
    }, 1500);
  });
}

// Kick off the animation
function startAnimation() {
  // In milliseconds, how long each one is
  const creditsMs = 3000;
  const scenesMs = [
    creditsMs,
    creditsMs * 2,
    creditsMs,
    creditsMs,
    creditsMs,
    creditsMs,
    creditsMs * 2,
    19500,
  ];

  // Elements
  const viewport = document.getElementsByClassName("viewport")[0];
  const letterbox = document.getElementsByClassName("letterbox")[0];
  const scenes = document.getElementsByClassName("title--scene");
  const fullTitle = document.getElementsByClassName("title--full")[0];
  const credits = document.getElementsByClassName("credits-group");
  const finalCredit = document.getElementsByClassName("credits-final")[0];

  viewport.className += " viewport--show";
  letterbox.className += " letterbox--show";

  // Set up credits to show every interval
  let activeCredits = null;
  for (let i = 0; i < credits.length; i++) {
    setTimeout(() => {
      if (credits[i - 1]) {
        credits[i - 1].className = "credits-group";
      }
      credits[i].className = "credits-group credits-group--show";
    }, i * creditsMs);

    if (!credits[i + 1]) {
      setTimeout(() => {
        credits[i].className="credits-group";
      }, i * creditsMs + creditsMs);
    }
  }

  // Set up scenes to show after each interval
  let offset = 0;
  for (let i = 0; i < scenes.length; i++) {
    setTimeout(() => {
      if (scenes[i - 1]) {
        scenes[i - 1].className = scenes[i - 1]
          .className.replace("title--show", "");
      }
      scenes[i].className += " title--show";
    }, offset);

    offset += scenesMs[i];

    if (!scenes[i + 1]) {
      // Show the last scene
      setTimeout(() => {
        scenes[i].className = scenes[i].className.replace("title--show", "");
        fullTitle.className += " title--show";
      }, offset);

      // Show the final credits
      setTimeout(() => {
        finalCredit.className += " credits-group--show";
      }, offset + scenesMs[i + 1] + 1500);
    }
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js