/*
 * Copyright 2017 The Cobalt Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
*/

body {
  overflow: hidden;
  font-size: 1.4815vh;  /* Corresponds to 16px at 1080p. */
}

#splash {
  background-color: #ffffff;
  background-image: url("h5vcc-embedded://cobalt_word_logo_356.png");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: auto 33%;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
}

#loading {
  position: absolute;
  top: 52em;
  width: 100%;
}

#spinner {
  /* The spinner starts with display set to none, and JavaScript will set this
     to 'block' after some time has passed, if the splash screen is still
     visible. */
  display: none;

  height: 5.33em;
  margin: 0 auto;
  position: relative;
  width: 5.33em;
}

.dot {
  background-color: #cbcbcb;
  border-radius: 50%;
  height: 1.17em;
  position: absolute;
  width: 1.17em;
}

@keyframes fade1 {
  0%,100% {opacity: 0}
  50% {opacity: 1}
}

@keyframes fade2 {
  0%,100% {opacity: .25}
  37.5% {opacity: 1}
  87.5% {opacity: 0}
}

@keyframes fade3 {
  0%,100% {opacity: .5}
  25% {opacity: 1}
  75% {opacity: 0}
}

@keyframes fade4 {
  0%,100% {opacity: .75}
  12.5% {opacity: 1}
  62.5% {opacity: 0}
}

@keyframes fade5 {
  0%,100% {opacity: 1}
  50% {opacity: 0}
}

@keyframes fade6 {
  0%,100% {opacity: .75}
  37.5% {opacity: 0}
  87.5% {opacity: 1}
}

@keyframes fade7 {
  0%,100% {opacity: .5}
  25% {opacity: 0}
  75% {opacity: 1}
}

@keyframes fade8 {
  0%,100% {opacity: .25}
  12.5% {opacity: 0}
  62.5% {opacity: 1}
}

#dot1 {
  animation: fade8 .72s infinite ease;
  left: 0;
  top: 2.09em;
}

#dot2 {
  animation: fade7 .72s infinite ease;
  left: .61em;
  top: .61em;
}

#dot3 {
  animation: fade6 .72s infinite ease;
  left: 2.09em;
  top: 0;
}

#dot4 {
  animation: fade5 .72s infinite ease;
  right: .61em;
  top: .61em;
}

#dot5 {
  animation: fade4 .72s infinite ease;
  right: 0;
  top: 2.09em;
}

#dot6 {
  animation: fade3 .72s infinite ease;
  bottom: .61em;
  right: .61em;
}

#dot7 {
  animation: fade2 .72s infinite ease;
  bottom: 0;
  left: 2.09em;
}

#dot8 {
  animation: fade1 .72s infinite ease;
  bottom: .61em;
  left: .61em;
}

.hidden {
  height: 0;
  visibility: hidden;
}
