@import url("https://fonts.googleapis.com/css2?family=Yeseva+One&display=swap");
* {
  box-sizing: border-box;
  margin: auto;
}

body {
  position: relative;
  height: 100vh;
  display: flex;
  background: radial-gradient(circle at bottom right, #007cb7, #83b4b6 69%, #e6ecebaf 70%, #00abc5), #00abc5;
  overflow: hidden;
  perspective: 1440px;
  font-family: "Yeseva One";
}

svg {
  position: absolute;
}

.quote {
  position: relative;
  width: 90%;
  max-width: 90vh;
  aspect-ratio: 1/1;
  display: flex;
  flex-direction: column;
  border-radius: 20px 20px 50% 50%;
  overflow: hidden;
  text-align: center;
  word-wrap: no-wrap;
  filter: drop-shadow(-20px 20px 5px #006793);
}
.quote figure {
  margin: auto;
  font-size: clamp(12vh, 12vh, 6rem);
  filter: drop-shadow(0 0 5px #006793);
}
.quote figure span.wave {
  background: -50% 0%/200% 100% linear-gradient(90deg, #ffffff0f, #006793, #ffffff0f);
  background-position: -50% 0;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: flow 5s linear infinite, sheen 10s linear infinite;
}
.quote figure span.wave.oppo {
  animation-direction: reverse;
}
.quote figure figcaption {
  font-size: clamp(8vh, 8vh, 4rem);
  text-align: right;
}
.quote .frame {
  position: absolute;
  width: 100%;
  height: 100%;
  background: #ffffff;
}
.quote .frame:nth-of-type(1) {
  height: 33.3%;
  opacity: 0.6;
}
.quote .frame:nth-of-type(2) {
  height: 66.6%;
  opacity: 0.4;
}
.quote .frame:nth-of-type(3) {
  height: 99.9%;
  opacity: 0.2;
}

.pond {
  position: absolute;
  width: 100%;
  height: 100%;
  background: #ffff000f;
}
.pond .film {
  position: absolute;
  width: 100%;
  height: 100%;
  backdrop-filter: blur(8px);
  background-size: cover;
  filter: url(#displacementFilter) url(#goo);
}
.pond .ripple {
  position: absolute;
  width: 50vw;
  aspect-ratio: 1/1;
  border-radius: 50%;
  border: 5px solid #fff;
  transform-origin: center;
  transform: translate(-50%, -50%) scale(0);
  opacity: 0;
  animation: ripple 5s ease-in-out infinite;
}
.pond .ripple:nth-of-type(1) {
  width: 39vw;
  top: 97vh;
  left: 37vw;
  border-width: 3px;
  animation-duration: 10s;
  animation-delay: 2.2086746947s;
}
.pond .ripple:nth-of-type(2) {
  width: 44vw;
  top: 29vh;
  left: 85vw;
  border-width: 3px;
  animation-duration: 7s;
  animation-delay: 1.0333116266s;
}
.pond .ripple:nth-of-type(3) {
  width: 34vw;
  top: 38vh;
  left: 71vw;
  border-width: 3px;
  animation-duration: 10s;
  animation-delay: 2.2578703182s;
}
.pond .ripple:nth-of-type(4) {
  width: 43vw;
  top: 66vh;
  left: 41vw;
  border-width: 5px;
  animation-duration: 8s;
  animation-delay: 2.9458084984s;
}
.pond .ripple:nth-of-type(5) {
  width: 48vw;
  top: 10vh;
  left: 93vw;
  border-width: 5px;
  animation-duration: 8s;
  animation-delay: 1.3194726614s;
}
.pond .ripple:nth-of-type(6) {
  width: 43vw;
  top: 88vh;
  left: 18vw;
  border-width: 4px;
  animation-duration: 10s;
  animation-delay: 2.9194580981s;
}
.pond .ripple:nth-of-type(7) {
  width: 50vw;
  top: 79vh;
  left: 90vw;
  border-width: 5px;
  animation-duration: 8s;
  animation-delay: 2.5205259124s;
}
.pond .ripple:nth-of-type(8) {
  width: 29vw;
  top: 36vh;
  left: 100vw;
  border-width: 4px;
  animation-duration: 9s;
  animation-delay: 2.5644322622s;
}
.pond .fish {
  position: absolute;
  width: 38px;
  aspect-ratio: 0.3/1;
  display: flex;
  flex-direction: column;
  filter: url(#goo);
  animation: voyage 20s linear infinite;
  transform: rotate(38deg);
}
.pond .fish .part {
  width: 100%;
  flex-grow: 2;
  background: #006793;
}
.pond .fish .part.head {
  transform-origin: bottom center;
  clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
  animation: swim 1.3s linear infinite;
}
.pond .fish .part.tail {
  transform-origin: top center;
  flex-grow: 4;
  clip-path: polygon(50% 100%, 100% 0%, 0% 0%);
  animation: swim 1.3s linear infinite reverse;
}
.pond .fish:nth-of-type(1) {
  top: 110vh;
  left: 30vw;
  animation-delay: 0.1013253884s;
  animation-duration: 14s;
}
.pond .fish:nth-of-type(2) {
  top: 50vh;
  left: -5vw;
  animation-delay: 1.4177067705s;
  animation-duration: 20s;
}
.pond .fish:nth-of-type(3) {
  top: 110vh;
  left: 70vw;
  animation-delay: 2.1338460188s;
  animation-duration: 17s;
}

.wave {
  -webkit-mask: radial-gradient(46.6154480832px at 50% calc(100% - (27px + 38px)), blue 99%, #0000 101%), radial-gradient(46.6154480832px at 50% calc(100% + 38px), #0000 99%, red 101%) repeat-x;
  -webkit-mask-size: calc(4*27px) 100%;
  -webkit-mask-position: calc(50% - 2*27px) 0, 50% calc(100% - 27px);
  animation: flow 5s linear infinite;
}
.wave.oppo {
  animation-direction: reverse;
}

@keyframes flow {
  100% {
    -webkit-mask-position: calc(50% - 6*27px) 0, calc(50% - 4*27px) calc(200% - 27px);
  }
}
@keyframes swim {
  0%, 100% {
    transform: rotate(0deg);
  }
  33.3% {
    transform: rotate(15deg);
  }
  75% {
    transform: rotate(-15deg);
  }
}
@keyframes voyage {
  100% {
    translate: 40vw -130vh;
  }
}
@keyframes sheen {
  100% {
    background-position: 150% 0%;
  }
}
@keyframes ripple {
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(1);
  }
}
@media (max-width: 700px) {
  .quote figure, .quote figure figcaption {
    font-size: clamp(30px, 10vw, 4rem);
  }
}