* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: sans-serif;
}

body {
  display: flex;
  flex-direction: column;
  background: #191919;
  color: #fff;
  min-height: 100dvh;
}

header {
  background: #765eff;
  background-image: url("https://www.skaliber.net/caelesti/lilypad_banner.png");
  background-size: cover;
  background-position: center;
  height: 8rem;
  padding: 1rem;
} header > img {
  height: 100%;
  width: 100%;
  object-fit: contain;
  image-rendering: pixelated;
}

main {
  padding: 1rem;
  display: flex;
  width: 100vw;
  max-width: 64rem;
  margin-inline: auto;
  justify-content: flex-start;
  gap: 1rem;
}

aside {
  display: flex;
  flex-direction: row;
  gap: 1rem;
  width: 8rem;
  flex-wrap: wrap;
  align-content: flex-start;
  transition: width 0.2s;
} aside > img {
  width: 8rem;
  height: 8rem;
  cursor: pointer;
  transition: transform 0.2s;
} aside > img:hover {
  transform: scale(1.1);
}

aside.wide {
  width: 100%;
  justify-content: center;
} aside.wide > img {
  width: 16rem;
  height: 16rem;
} aside.wide > img:hover {
  transform: scale(1.05);
}

#viewer {
  position: sticky;
  top: 1rem;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  background: #292929;
  width: 100%;
  height: 100%;
  padding: 1rem;
  opacity: 1;
  transition: opacity 0.2s, transform 0.2s;
} #viewer.hidden {
  opacity: 0;
  transform: translateY(1rem);
} iframe {
  width: 100%;
  aspect-ratio: 16 / 9;
}

ul { padding-left: 1rem }

footer {
  padding: 1rem;
  width: 100vw;
  max-width: 64rem;
  margin-inline: auto;
}

@media (max-width: 768px) {
  main {
    flex-direction: column;
  }
  
  aside {
    justify-content: center;
    flex-wrap: wrap;
    width: 100%;
  }
}