.carousel {
  display: block grid;
  grid: auto 1fr / 100%;

  & > header {
    anchor-name: --carousel;
    padding-inline: 3rem;
    font-size: 1.75rem;
    font-weight: 900;
  }

  & > ul {
    list-style-type: none;

    container-type: size;
    inline-size: 100%;
    block-size: min(60svh, 720px);

    display: grid;
    grid-auto-flow: column;

    overflow: visible auto;
    scroll-snap-type: inline mandatory;
    overscroll-behavior-inline: contain;

    justify-self: center;

    gap: 1em;
    padding-inline: 2em;
    scroll-padding-inline: 2em;
    padding-block: 2em 4em;
    margin-block-end: 5em;

    @media (prefers-reduced-motion: no-preference) {
      scroll-behavior: smooth;
    }

    /* the before and afters have unsnappable elements that create bouncy edges to the scroll */
    &::before,
    &::after {
      content: "";
      display: block;
    }

    &::before {
      order: 0;
      inline-size: 15cqi;
    }

    &::after {
      order: 11;
      inline-size: 50cqi;
    }

    &::scroll-button(*) {
      z-index: 20;
      background: oklch(from var(--surface-1) l c h / 50%);
      backdrop-filter: blur(10px);
    }

    &::scroll-button(inline-start) {
      position-area: center span-inline-start;
      content: "◄" / "Previous";
    }

    &::scroll-button(inline-end) {
      position-area: center span-inline-end;
      content: "►" / "Next";
    }

    & > li {
      scroll-snap-align: start;
      container-type: scroll-state;
      padding: 0;
      position: relative;

      order: calc(var(--sibling-count) - var(--sibling-index));
      z-index: var(--sibling-index);

      & > figure {
        @supports (animation-timeline: view()) {
          @media (prefers-reduced-motion: no-preference) {
            animation: slide-in linear both;
            animation-timeline: view(inline);
            animation-range: cover -100cqi contain 25cqi;
          }
        }
        @container scroll-state(snapped: inline) {
          outline: 1px solid var(--gray-1);
          outline-offset: 10px;
        }

        flex-shrink: 0;
        block-size: 100cqb;
        aspect-ratio: 9/16;
        background: light-dark(#ccc, #444);
        box-shadow: var(--shadow-5);
        border-radius: 20px;
        overflow: clip;

        display: flex;

        @container (width < 480px) {
          block-size: 50cqb;
        }

        & > img {
          inline-size: 100%;
          block-size: 100%;
          object-fit: cover;
        }
      }
    }
  }
}

@keyframes slide-in {
  from {
    transform: translateX(-100cqi) scale(0.75);
  }
}
