.carousel {
    --items: 6;
    --carousel-duration: 40s;
    @media (width > 600px) {
        --carousel-duration: 90s;
    }
    --carousel-width: min(
        100vw,
        1200px
    ); /* note - it will "break" if it gets too wide and there aren't enough items */
    --carousel-item-width: 320px;
    --carousel-item-height: 600px;
    --carousel-item-gap: 2rem;

    --clr-cta: #15803d;

    position: relative;
    width: var(--carousel-width);
    height: var(--carousel-item-height);
    overflow: clip;

    &[mask] {
        /* fade out on sides */
        mask-image: linear-gradient(
            to right,
            transparent,
            black 10% 90%,
            transparent
        );
    }

    &[reverse] > article {
        animation-direction: reverse;
    }
    /* hover pauses animation */
    &:hover > article {
        animation-play-state: paused;
    }
}
.carousel > article {
    position: absolute;
    top: 0;
    left: calc(100% + var(--carousel-item-gap));
    width: var(--carousel-item-width);
    height: var(--carousel-item-height);
    display: grid;
    grid-template-rows: 200px auto 1fr auto;
    gap: 0.25rem;
    border: 1px solid light-dark(rgba(0 0 0 / 0.25), rgba(255 255 255 / 0.15));

    padding-block-end: 1rem;
    border-radius: 10px;
    background: light-dark(white, rgba(255 255 255 / 0.05));
    color: light-dark(rgb(49, 65, 88), white);

    /* animation */
    will-change: transform;
    animation-name: marquee;
    animation-duration: var(--carousel-duration);
    animation-timing-function: linear;
    animation-iteration-count: infinite;
    animation-delay: calc(
        var(--carousel-duration) / var(--items) * 1 * var(--i) * -1
    );
    &:nth-child(1) {
        --i: 0;
    }
    &:nth-child(2) {
        --i: 1;
    }
    &:nth-child(3) {
        --i: 2;
    }
    &:nth-child(4) {
        --i: 3;
    }
    &:nth-child(5) {
        --i: 4;
    }
    &:nth-child(6) {
        --i: 5;
    }
    &:nth-child(7) {
        --i: 6;
    }
    &:nth-child(8) {
        --i: 7;
    }
}
.carousel img {
    width: 100%;
    height: 100%;
    object-fit: cover;

    border-radius: 10px 10px 0 0;
}
.carousel > article > *:not(img) {
    padding: 0 1rem;
}
.carousel > article > div {
    grid-row: span 2;
    display: grid;
    grid-template-rows: subgrid;
    font-size: 0.8rem;
}
.carousel > article h2 {
    font-size: 1.2rem;
    font-weight: 500;
    padding-block: 0.75rem 0.25rem;
    margin: 0;
}
.carousel > article p {
    margin: 0;
}
.carousel > article a {
    text-decoration: none;
    border: 1px solid var(--clr-cta);
    color: light-dark(var(--clr-cta), white);
    border-radius: 3px;
    padding: 0.25rem 0.5rem;
    place-self: start;
    transition: 150ms ease-in-out;
    &:hover,
    &:focus-visible {
        background-color: var(--clr-cta);
        color: white;
        outline: none;
    }
}

@keyframes marquee {
    100% {
        transform: translateX(
            calc(
                (var(--items) * (var(--carousel-item-width) + var(--carousel-item-gap))) *
                    -1
            )
        );
    }
}
