* {
  border: 0;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  --hue: 223;
  --sat: 90%;
  --primary1: hsl(var(--hue),var(--sat),90%);
  --primary5: hsl(var(--hue),var(--sat),50%);
  --primary9: hsl(var(--hue),var(--sat),10%);
  --red: hsl(343,90%,50%);
  --teal: hsl(163,90%,50%);
  --purple: hsl(283,90%,50%);
  --trans-dur: 0.3s;
  color-scheme: light dark;
  font-size: clamp(1rem,0.9rem + 0.5vw,1.5rem);
}

body {
  background-color: light-dark(var(--primary1), var(--primary9));
  color: light-dark(var(--primary9), var(--primary1));
  display: flex;
  font: 1em/1.5 sans-serif;
  height: 100vh;
  transition: background-color var(--trans-dur), color var(--trans-dur);
}

.pl {
  display: block;
  margin: auto;
  width: 16em;
  height: auto;
}
.pl__curve, .pl__dot, .pl__scene {
  animation-duration: 1s;
  animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
  animation-iteration-count: infinite;
}
.pl__curve, .pl__dot {
  transition: stroke var(--trans-dur);
}
.pl__curve {
  animation-name: curve-offset;
  stroke: var(--primary5);
}
.pl__layer + .pl__layer .pl__curve {
  stroke: var(--teal);
}
.pl__dot {
  animation-name: dot-move;
  stroke: var(--red);
}
.pl__layer + .pl__layer .pl__dot {
  stroke: var(--purple);
}
.pl__scene {
  animation-name: scene-move;
  animation-timing-function: linear;
}

/* Animations */
@keyframes curve-offset {
  from {
    stroke-dashoffset: 25.12;
  }
  46% {
    stroke-dashoffset: 0;
  }
  92%, to {
    stroke-dashoffset: -24.97;
  }
}
@keyframes dot-move {
  from, 25% {
    stroke-dashoffset: 0;
  }
  50%, to {
    stroke-dashoffset: -15.99;
  }
}
@keyframes scene-move {
  from {
    transform: translate(0, 0);
  }
  to {
    transform: translate(-16px, 0);
  }
}