:root {
  --cube-size: 50vmin;
  --dot-size: calc(var(--cube-size) / 7);
  --border-width: 1px;
}

*, *::before, *::after {
  box-sizing: border-box;
  margin: 0; padding: 0;
}
html {
  height: 100%;
  touch-action: manipulation;
  background: #0e0e0e url('bgWuerfelbrett.png') no-repeat center/cover;
  display: flex; align-items: center; justify-content: center;
  font-family: sans-serif;
}

.scene {
  width: var(--cube-size); height: var(--cube-size);
  perspective: 1000px;
}
.rotator {
  width: 100%; height: 100%;
  transform-style: preserve-3d;
  transition: transform 0.6s ease-in-out;
}
.cube {
  width: 100%; height: 100%;
  position: relative;
  transform-style: preserve-3d;
}
.cube.animate {
  animation: bounce 0.5s ease;
}
@keyframes bounce {
  0%   { transform: translateY(0) scale(1); }
  30%  { transform: translateY(calc(-0.03 * var(--cube-size))) scale(1.05); }
  60%  { transform: translateY(calc(0.02 * var(--cube-size))) scale(0.97); }
  100% { transform: translateY(0) scale(1); }
}

.face {
  position: absolute; width: 100%; height: 100%;
  background: radial-gradient(circle at center, #333, #111);
  border: var(--border-width) solid #555;
  border-radius: 1rem;
  display: grid; grid-template: repeat(3,1fr)/repeat(3,1fr);
  place-items: center;
  backface-visibility: hidden;
}
.dot {
  width: var(--dot-size); height: var(--dot-size);
  background: #fff; border-radius: 50%;
}

.face.front  { transform: rotateY(  0deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }
.face.back   { transform: rotateY(180deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }
.face.right  { transform: rotateY( 90deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }
.face.left   { transform: rotateY(-90deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }
.face.top    { transform: rotateX( 90deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }
.face.bottom { transform: rotateX(-90deg) translateZ(calc(var(--cube-size)/2 - var(--border-width)/2)); }

button.fallback {
  position: absolute; bottom: 5vmin; left: 50%;
  transform: translateX(-50%);
  background: #444; color: #fff;
  padding: 2vmin 4vmin; font-size: 4vmin;
  border: none; border-radius: .5rem;
  cursor: pointer;
}
