:root {
  color-scheme: light;
  background: #f4f4f4;
}

* {
  box-sizing: border-box;
}

html,
body {
  min-height: 100%;
  margin: 0;
}

body {
  overflow: auto;
  background: #f4f4f4;
}

.poster-stage {
  display: grid;
  min-height: 100vh;
  place-items: center;
}

.poster {
  position: relative;
  width: min(100vw, 75vh);
  aspect-ratio: 3 / 4;
  overflow: hidden;
  background: #fff;
  isolation: isolate;
}

.reminder-overlay {
  position: absolute;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
  border: 0;
  appearance: none;
  background: transparent;
  cursor: pointer;
  touch-action: manipulation;
}

.reminder-overlay img {
  display: block;
  width: 100%;
  height: auto;
  max-width: none;
  pointer-events: none;
  user-select: none;
}

.reminder-overlay[hidden] {
  display: none;
}

.reminder-overlay:focus-visible {
  outline: max(2px, 0.35vw) solid #ff4772;
  outline-offset: calc(max(2px, 0.35vw) * -1);
}

.layer {
  position: absolute;
  display: block;
  max-width: none;
  user-select: none;
  pointer-events: none;
}

.background {
  inset: 0;
  width: 100%;
  height: 100%;
}

.camera {
  left: 46.8772%;
  top: 27.7446%;
  width: 51.7969%;
  height: 40.0391%;
  cursor: pointer;
  pointer-events: auto;
  touch-action: manipulation;
  transform-origin: 50% 50%;
}

.camera:focus-visible {
  outline: max(2px, 0.35vw) solid #50eee8;
  outline-offset: max(3px, 0.45vw);
}

.dialog {
  left: 0;
  top: 15.4010%;
  width: 65.1563%;
  height: 57.4023%;
  cursor: pointer;
  pointer-events: auto;
  touch-action: manipulation;
  transform-origin: 50% 50%;
}

.dialog:focus-visible {
  outline: max(2px, 0.35vw) solid #50eee8;
  outline-offset: max(3px, 0.45vw);
}

.battery {
  left: 42.1901%;
  top: 57.5896%;
  width: 56.4844%;
  height: 38.5547%;
  cursor: pointer;
  pointer-events: auto;
  touch-action: manipulation;
  transform-origin: 50% 50%;
}

.battery:focus-visible {
  outline: max(2px, 0.35vw) solid #d57aff;
  outline-offset: max(3px, 0.45vw);
}

.compass {
  left: 5.2712%;
  top: 61.5110%;
  width: 45.8854%;
  height: 34.4141%;
  cursor: pointer;
  pointer-events: auto;
  touch-action: manipulation;
  transform-origin: 50% 50%;
}

.compass:focus-visible {
  outline: max(2px, 0.35vw) solid #ff4f9a;
  outline-offset: max(3px, 0.45vw);
}

.play {
  left: 21.8062%;
  top: 44.8909%;
  width: 58.4896%;
  height: 31.7383%;
  pointer-events: none;
  transform-origin: 50% 50%;
}

.play-hit {
  position: absolute;
  left: 39%;
  top: 50.5%;
  width: 24%;
  height: 20%;
  z-index: 10;
  padding: 0;
  border: 0;
  appearance: none;
  background: transparent;
  cursor: pointer;
  pointer-events: auto;
  touch-action: manipulation;
}

.play-hit:focus-visible {
  outline: max(2px, 0.35vw) solid #ff4772;
  outline-offset: max(3px, 0.45vw);
}

.poster.is-animating .play {
  animation: play-sequence 4.8s cubic-bezier(0.45, 0.05, 0.55, 0.95) both;
  cursor: wait;
  will-change: transform;
}

.poster.is-animating .dialog,
.poster.is-animating .battery {
  animation: vertical-bounce 4.8s cubic-bezier(0.45, 0.05, 0.55, 0.95) both;
  will-change: transform;
}

.poster.is-animating .camera,
.poster.is-animating .compass {
  animation: counter-clockwise-turn 4.8s cubic-bezier(0.45, 0.05, 0.55, 0.95) both;
  will-change: transform;
}

.poster.is-animating .dialog,
.poster.is-animating .play-hit,
.poster.is-dialog-active .play-hit {
  pointer-events: none;
}

.dialog-backdrop,
.danmaku-layer,
.compass-backdrop,
.camera-backdrop,
.battery-backdrop {
  position: absolute;
  display: block;
  max-width: none;
  pointer-events: none;
  opacity: 0;
}

.dialog-backdrop {
  left: 0;
  top: 29.5654%;
  width: 100%;
  height: 70.4492%;
  z-index: 100;
}

.danmaku-layer {
  left: -10.5768%;
  top: 31.9312%;
  width: 124.1671%;
  height: 61.9122%;
  z-index: 103;
}

.poster.is-dialog-active .dialog-backdrop {
  animation: backdrop-focus 3.6s ease-in-out both;
}

.poster.is-dialog-active .dialog {
  z-index: 102;
  animation: dialog-focus 3.6s cubic-bezier(0.4, 0, 0.2, 1) both;
  cursor: wait;
  will-change: left, top, width, height;
  outline: none;
}

.poster.is-dialog-active .danmaku-layer {
  animation: danmaku-travel 3.6s linear both;
}

.compass-backdrop {
  left: 0;
  top: 29.5654%;
  width: 100%;
  height: 70.4492%;
  z-index: 104;
}

.compass-focus {
  position: absolute;
  left: 19.7854%;
  top: 40.5969%;
  width: 56.4406%;
  height: 42.3289%;
  z-index: 105;
  opacity: 0;
  pointer-events: none;
  transform-origin: 50% 50%;
}

.compass-dial,
.compass-needle {
  position: absolute;
  display: block;
  max-width: none;
  user-select: none;
}

.compass-dial {
  inset: 0;
  width: 100%;
  height: 100%;
}

.compass-needle {
  left: 13.123%;
  top: 4.111%;
  width: 76.216%;
  height: 85.612%;
  transform-origin: 50% 50%;
}

.poster.is-compass-active .compass {
  animation: compass-source-visibility 4.4s linear both;
  pointer-events: none;
  outline: none;
}

.poster.is-compass-active .compass-backdrop {
  animation: compass-backdrop-focus 4.4s ease-in-out both;
}

.poster.is-compass-active .compass-focus {
  animation: compass-focus-sequence 4.4s cubic-bezier(0.4, 0, 0.2, 1) both;
  will-change: transform, opacity;
}

.poster.is-compass-active .compass-needle {
  animation: compass-needle-sequence 4.4s linear both;
  will-change: transform, opacity;
}

.poster.is-compass-active .play-hit,
.poster.is-compass-active .dialog {
  pointer-events: none;
}

.camera-sequence {
  position: absolute;
  inset: 0;
  z-index: 106;
  opacity: 0;
  overflow: hidden;
  pointer-events: none;
}

.camera-backdrop {
  left: 0;
  top: 29.5654%;
  width: 100%;
  height: 70.4492%;
  z-index: 1;
}

.camera-focus {
  position: absolute;
  left: 15%;
  top: 38%;
  width: 66.5%;
  height: 51.4%;
  z-index: 3;
  opacity: 0;
  transform-origin: 50% 50%;
}

.camera-body,
.camera-light,
.camera-star {
  position: absolute;
  display: block;
  max-width: none;
  user-select: none;
}

.camera-body {
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 2;
}

.camera-light {
  opacity: 0;
  transform-origin: 50% 50%;
}

.camera-light-1 {
  left: 21.15%;
  top: 4.19%;
  width: 80%;
  height: 76.3%;
  z-index: 1;
}

.camera-light-2 {
  left: 28.65%;
  top: 10.84%;
  width: 65%;
  height: 63%;
  z-index: 4;
}

.camera-stars {
  position: absolute;
  inset: 0;
  z-index: 4;
}

.camera-star {
  width: 6.5%;
  height: 4.9%;
  opacity: 0;
  transform-origin: 50% 50%;
}

.camera-star-1 { left: 35%; top: 48%; --star-x: -261.46%; --star-y: -224.36%; --star-scale: 3; --star-turn: -12deg; }
.camera-star-2 { left: 59%; top: 43%; --star-x: 169.54%; --star-y: -163.36%; --star-scale: 2.7; --star-turn: 10deg; }
.camera-star-3 { left: 36%; top: 64%; --star-x: -215.46%; --star-y: 61.64%; --star-scale: 2.8; --star-turn: 9deg; }
.camera-star-4 { left: 57%; top: 63%; --star-x: 169.54%; --star-y: 142.64%; --star-scale: 2.9; --star-turn: -11deg; }

.poster.is-camera-active .camera {
  animation: camera-source-visibility 5.4s linear both;
  pointer-events: none;
  outline: none;
}

.poster.is-camera-active .camera-sequence {
  animation: camera-sequence-lifecycle 5.4s linear both;
}

.poster.is-camera-active .camera-backdrop {
  animation: camera-backdrop-sequence 5.4s ease-in-out both;
}

.poster.is-camera-active .camera-focus {
  animation: camera-focus-sequence 5.4s cubic-bezier(0.4, 0, 0.2, 1) both;
  will-change: transform, opacity;
}

.poster.is-camera-active .camera-light-1 {
  animation: camera-light-one 5.4s ease-in-out both;
}

.poster.is-camera-active .camera-light-2 {
  animation: camera-light-two 5.4s ease-in-out both;
}

.poster.is-camera-active .camera-star {
  animation: camera-star-sequence 5.4s cubic-bezier(0.33, 0, 0.2, 1) both;
  will-change: transform, opacity;
}

.poster.is-camera-active .play-hit,
.poster.is-camera-active .dialog,
.poster.is-camera-active .compass,
.poster.is-camera-active .battery {
  pointer-events: none;
}

.battery-sequence {
  position: absolute;
  inset: 0;
  z-index: 107;
  opacity: 0;
  pointer-events: none;
  overflow: hidden;
}

.battery-star,
.battery-empty,
.battery-cell,
.battery-lightning {
  position: absolute;
  display: block;
  max-width: none;
  user-select: none;
}

.battery-backdrop {
  left: 0;
  top: 29.5654%;
  width: 100%;
  height: 70.4492%;
  z-index: 1;
  opacity: 0;
}

.battery-stars {
  position: absolute;
  inset: 0;
  z-index: 2;
}

.battery-focus {
  position: absolute;
  left: 13.125%;
  top: 34.844%;
  width: 71.25%;
  height: 48.594%;
  z-index: 3;
  opacity: 0;
  transform-origin: 50% 50%;
}

.battery-empty,
.battery-lightning,
.battery-cells,
.battery-cell {
  inset: 0;
  width: 100%;
  height: 100%;
}

.battery-empty {
  z-index: 1;
}

.battery-cells {
  position: absolute;
  z-index: 2;
}

.battery-cell {
  right: auto;
  bottom: auto;
  left: var(--cell-left);
  top: var(--cell-top);
  width: 68%;
  height: 75.5%;
  opacity: 0;
  transform-origin: 50% 50%;
}

.battery-cell-1 { --cell-left: -5%; --cell-top: 35.8%; --cell-delay: 0.65s; }
.battery-cell-2 { --cell-left: 5%; --cell-top: 26.3%; --cell-delay: 1.1s; }
.battery-cell-3 { --cell-left: 15%; --cell-top: 16.8%; --cell-delay: 1.55s; }
.battery-cell-4 { --cell-left: 25%; --cell-top: 7.3%; --cell-delay: 2s; }
.battery-cell-5 { --cell-left: 35%; --cell-top: -2.2%; --cell-delay: 2.45s; }

.battery-lightning {
  right: auto;
  bottom: auto;
  left: 24.85%;
  top: 27.33%;
  width: 49.12%;
  height: 51.13%;
  z-index: 3;
}

.battery-star {
  width: 8.6%;
  height: 6.45%;
  opacity: 0;
  transform-origin: 50% 50%;
}

.battery-star-1 { left: 45%; top: 39%; --fly-x: 5%; --fly-y: -205%; --spin: 45deg; --fly-scale: 2; }
.battery-star-2 { left: 20%; top: 55%; --fly-x: -185%; --fly-y: -76%; --spin: -40deg; --fly-scale: 2; }
.battery-star-3 { left: 31%; top: 79%; --fly-x: -48%; --fly-y: 82%; --spin: 50deg; --fly-scale: 2.1; }
.battery-star-4 { left: 63%; top: 61%; --fly-x: 152%; --fly-y: -14%; --spin: -45deg; --fly-scale: 2.1; }

.poster.is-battery-active .battery {
  animation: battery-source-visibility 6.6s linear both;
  pointer-events: none;
  outline: none;
}

.poster.is-battery-active .battery-sequence {
  animation: battery-sequence-lifecycle 5.7s ease-in-out both;
}

.poster.is-battery-active .battery-backdrop {
  animation: battery-backdrop-sequence 6.6s ease-in-out both;
}

.poster.is-battery-active .battery-focus {
  animation: battery-focus-sequence 6.6s cubic-bezier(0.4, 0, 0.2, 1) both;
  will-change: transform, opacity;
}

.poster.is-battery-active .battery-cell {
  animation: battery-cell-appear 0.28s cubic-bezier(0.22, 1, 0.36, 1) var(--cell-delay) both;
}

.poster.is-battery-active .battery-star {
  animation: battery-star-sequence 6.6s cubic-bezier(0.33, 0, 0.2, 1) both;
  will-change: transform, opacity;
}

.poster.is-battery-active .play-hit,
.poster.is-battery-active .dialog,
.poster.is-battery-active .compass {
  pointer-events: none;
}

.supporting-type {
  left: 1.9906%;
  top: 33.0129%;
  width: 96.0417%;
  height: 65.9375%;
}

.headline-type {
  left: 2.9661%;
  top: 2.2465%;
  width: 95.7031%;
  height: 27.3242%;
}

@keyframes play-sequence {
  0% {
    transform: scale(1);
  }

  14% {
    transform: scale(1.22);
  }

  28% {
    transform: scale(0.84);
  }

  42% {
    transform: scale(1.14);
  }

  56% {
    transform: scale(0.9);
  }

  69% {
    transform: scale(1.08);
  }

  80% {
    transform: scale(0.95);
  }

  89% {
    transform: scale(1.025);
  }

  96% {
    transform: scale(0.992);
  }

  100% {
    transform: scale(1);
  }
}

@keyframes vertical-bounce {
  0% {
    transform: translateY(0);
  }

  14% {
    transform: translateY(-7.5%);
  }

  28% {
    transform: translateY(5.5%);
  }

  42% {
    transform: translateY(-4.3%);
  }

  56% {
    transform: translateY(3.1%);
  }

  69% {
    transform: translateY(-2%);
  }

  80% {
    transform: translateY(1.2%);
  }

  89% {
    transform: translateY(-0.6%);
  }

  96% {
    transform: translateY(0.2%);
  }

  100% {
    transform: translateY(0);
  }
}

@keyframes counter-clockwise-turn {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(-720deg);
  }
}

@keyframes backdrop-focus {
  0%,
  100% {
    opacity: 0;
  }

  14%,
  88% {
    opacity: 1;
  }
}

@keyframes dialog-focus {
  0%,
  100% {
    left: 0;
    top: 15.401%;
    width: 65.1563%;
    height: 57.4023%;
  }

  14%,
  88% {
    left: 11.9122%;
    top: 19.8136%;
    width: 92.2013%;
    height: 81.2289%;
  }
}

@keyframes danmaku-travel {
  0% {
    transform: translateX(-26%);
    opacity: 0;
  }

  12% {
    transform: translateX(-20%);
    opacity: 0;
  }

  22% {
    transform: translateX(-15%);
    opacity: 1;
  }

  52% {
    transform: translateX(0);
    opacity: 1;
  }

  78% {
    transform: translateX(13%);
    opacity: 1;
  }

  88% {
    transform: translateX(18%);
    opacity: 0;
  }

  100% {
    transform: translateX(24%);
    opacity: 0;
  }
}

@keyframes compass-source-visibility {
  0%,
  3%,
  99%,
  100% {
    opacity: 1;
  }

  5%,
  98% {
    opacity: 0;
  }
}

@keyframes compass-backdrop-focus {
  0%,
  100% {
    opacity: 0;
  }

  12%,
  76% {
    opacity: 1;
  }

  98% {
    opacity: 0;
  }
}

@keyframes compass-focus-sequence {
  0% {
    opacity: 0;
    transform: translate(-35.061%, 40.060%) scale(0.813);
  }

  4% {
    opacity: 1;
  }

  12%,
  76% {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }

  98% {
    opacity: 1;
    transform: translate(-35.061%, 40.060%) scale(0.813);
  }

  99%,
  100% {
    opacity: 0;
    transform: translate(-35.061%, 40.060%) scale(0.813);
  }
}

@keyframes compass-needle-sequence {
  0%,
  16% {
    opacity: 1;
    transform: translate(0, 0) rotate(0deg);
  }

  24% {
    transform: translate(0, 0) rotate(250deg);
  }

  32% {
    transform: translate(0, 0) rotate(-230deg);
  }

  40% {
    transform: translate(0, 0) rotate(330deg);
  }

  48% {
    transform: translate(0, 0) rotate(-300deg);
  }

  56% {
    opacity: 1;
    transform: translate(0, 0) rotate(410deg);
  }

  68% {
    opacity: 0;
    transform: translate(180%, -250%) rotate(620deg);
  }

  69%,
  72% {
    opacity: 0;
    transform: translate(0, 0) rotate(0deg);
  }

  74%,
  100% {
    opacity: 1;
    transform: translate(0, 0) rotate(0deg);
  }
}

@keyframes camera-source-visibility {
  0%,
  3%,
  97%,
  100% {
    opacity: 1;
  }

  5%,
  95% {
    opacity: 0;
  }
}

@keyframes camera-sequence-lifecycle {
  0%,
  100% {
    opacity: 1;
  }
}

@keyframes camera-backdrop-sequence {
  0%,
  100% {
    opacity: 0;
  }

  8%,
  88% {
    opacity: 1;
  }

  96% {
    opacity: 0;
  }
}

@keyframes camera-focus-sequence {
  0% {
    opacity: 0;
    transform: translate(36.9%, -31%) scale(0.779);
  }

  5% {
    opacity: 1;
    transform: translate(36.9%, -31%) scale(0.779);
  }

  14%,
  25% {
    opacity: 1;
    transform: translate(-8%, -22%) scale(0.86) rotate(44deg);
  }

  36% {
    opacity: 1;
    transform: translate(-6%, -20%) scale(0.66) rotate(44deg);
  }

  50% {
    opacity: 1;
    transform: translate(-10%, -23%) scale(1.05) rotate(44deg);
  }

  64%,
  72% {
    opacity: 1;
    transform: translate(-8%, -22%) scale(0.86) rotate(44deg);
  }

  82%,
  88% {
    opacity: 1;
    transform: translate(-8%, -22%) scale(0.86) rotate(44deg);
  }

  97% {
    opacity: 1;
    transform: translate(36.9%, -31%) scale(0.779);
  }

  99%,
  100% {
    opacity: 0;
    transform: translate(36.9%, -31%) scale(0.779);
  }
}

@keyframes camera-light-one {
  0%,
  25% {
    opacity: 0;
    transform: scale(0.84);
  }

  32%,
  66% {
    opacity: 1;
    transform: scale(1);
  }

  72%,
  100% {
    opacity: 0;
    transform: scale(1.08);
  }
}

@keyframes camera-light-two {
  0%,
  42% {
    opacity: 0;
    transform: scale(0.82) rotate(-8deg);
  }

  48%,
  66% {
    opacity: 1;
    transform: scale(1) rotate(0deg);
  }

  72%,
  100% {
    opacity: 0;
    transform: scale(1.12) rotate(8deg);
  }
}

@keyframes camera-star-sequence {
  0%,
  55% {
    opacity: 0;
    transform: translate(0, 0) rotate(0deg) scale(0.2);
  }

  63%,
  68% {
    opacity: 1;
    transform: translate(0, 0) rotate(0deg) scale(1);
  }

  82%,
  88% {
    opacity: 1;
    transform: translate(var(--star-x), var(--star-y)) rotate(var(--star-turn)) scale(var(--star-scale));
  }

  94%,
  100% {
    opacity: 0;
    transform: translate(var(--star-x), var(--star-y)) rotate(var(--star-turn)) scale(var(--star-scale));
  }
}

@keyframes battery-source-visibility {
  0%,
  3%,
  86%,
  100% {
    opacity: 1;
  }

  5%,
  84% {
    opacity: 0;
  }
}

@keyframes battery-sequence-lifecycle {
  0%, 100% { opacity: 1; }
}

@keyframes battery-backdrop-sequence {
  0%, 100% { opacity: 0; }
  8%, 77% { opacity: 1; }
  86% { opacity: 0; }
}

@keyframes battery-focus-sequence {
  0% {
    opacity: 0;
    transform: translate(30.45%, 36.5%) scale(0.793);
  }

  5% { opacity: 1; }

  12%, 77% {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }

  86% {
    opacity: 0;
    transform: translate(30.45%, 36.5%) scale(0.793);
  }

  100% {
    opacity: 0;
    transform: translate(30.45%, 36.5%) scale(0.793);
  }
}

@keyframes battery-cell-appear {
  0% {
    opacity: 0;
  }

  100% {
    opacity: 1;
  }
}

@keyframes battery-star-sequence {
  0%,
  41% {
    opacity: 0;
    transform: translate(0, 0) rotate(0deg) scale(0.2);
  }

  45% {
    opacity: 1;
    transform: translate(0, 0) rotate(0deg) scale(1);
  }

  52% {
    opacity: 1;
    transform: translate(0, 0) rotate(12deg) scale(1);
  }

  75% {
    opacity: 1;
    transform: translate(var(--fly-x), var(--fly-y)) rotate(var(--spin)) scale(var(--fly-scale));
  }

  77%,
  100% {
    opacity: 0;
    transform: translate(var(--fly-x), var(--fly-y)) rotate(var(--spin)) scale(2.35);
  }
}

@media (prefers-reduced-motion: reduce) {
  .poster.is-camera-active .camera,
  .poster.is-camera-active .camera-sequence,
  .poster.is-camera-active .camera-backdrop,
  .poster.is-camera-active .camera-focus,
  .poster.is-camera-active .camera-light,
  .poster.is-camera-active .camera-star,
  .poster.is-battery-active .battery,
  .poster.is-battery-active .battery-sequence,
  .poster.is-battery-active .battery-backdrop,
  .poster.is-battery-active .battery-focus,
  .poster.is-battery-active .battery-cell,
  .poster.is-battery-active .battery-star,
  .poster.is-battery-active .battery-lightning {
    animation-duration: 1ms;
  }
}

@media (max-aspect-ratio: 3 / 4) {
  .poster-stage {
    align-items: start;
  }

  .poster {
    width: 100vw;
  }
}
