.carousel.carousel {
	margin-top: calc(80 * var(--variable-px));
	transform: translate(0);

	.carousel-slide {
		display: flex;
		white-space: nowrap;
		touch-action: pan-y pinch-zoom;
		cursor: grab;

		:is(img, video) {
			position: relative;
			display: inline-block;
			user-select: none;
			flex: 0 0 auto;
			height: auto;
			padding: 0 20px;

			&:first-child,
			&:last-child {
				--fade-factor: Min(calc(var(--over-slide-factor, 0) / 1.5 + 0.5), 1);
				// Fade to white (combining invert and brightness, see <https://stackoverflow.com/a/78478074/775283>) and desaturate
				filter: Invert(calc(var(--fade-factor) / 2)) Brightness(calc(1 + var(--fade-factor))) Grayscale(var(--fade-factor));
			}

			&:first-child {
				margin-left: -20px;
			}

			&:last-child {
				margin-right: -20px;
			}
		}
	}

	&:not(.dragging, .jostling) .carousel-slide :is(img, video) {
		transition: transform 500ms;
	}

	.carousel-slide:not(.torn) {
		overflow: hidden;
	}

	.carousel-slide.torn {
		position: fixed;
		top: 0;
		z-index: -1;
		// Torn edge mask
		mask-repeat: no-repeat;
		mask-size: contain;

		&.left {
			padding-left: 160px;
			margin-left: -160px;
			mask-image: url("https://static.graphite.art/textures/torn-edge-left__2.png");
			mask-position: top left;
		}

		&.right {
			padding-right: 160px;
			margin-right: -160px;
			mask-image: url("https://static.graphite.art/textures/torn-edge-right__2.png");
			mask-position: top right;
		}
	}

	.screenshot-details {
		display: flex;
		margin: 20px 0;
		gap: 20px 40px;

		@media screen and (max-width: 800px) {
			flex-wrap: wrap;
			justify-content: center;
		}

		.carousel-controls {
			display: flex;
			align-items: center;
			flex: 0 0 auto;

			button {
				outline: none;
				background: none;
				border: none;
				padding: 0;
				color: inherit;
				cursor: pointer;

				svg {
					display: block;
				}

				+ button {
					margin-left: 20px;
				}
			}

			.direction {
				fill: currentColor;
			}

			.dot {
				width: 16px;
				height: 16px;
				box-sizing: border-box;
				border-radius: 50%;
				border: 2px solid currentColor;

				&.active {
					border: none;
					background: var(--color-crimson);
				}
			}
		}

		.screenshot-description {
			display: flex;
			align-items: center;
			min-height: calc(2em * 1.5);

			p + p {
				margin: 0;
			}

			p:not(.active) {
				display: none;
			}
		}
	}

	&.center {
		.screenshot-details {
			justify-content: center;
		}
	}

	&.window-size-1 .carousel-slide :is(img, video) {
		width: 100%;
	}

	&.window-size-2 .carousel-slide :is(img, video) {
		width: calc((100% / 2) - 10px);
		padding: 0 10px;

		&:first-child {
			margin-left: -10px;
		}

		&:last-child {
			margin-right: -10px;
		}
	}

	&.window-size-3 .carousel-slide :is(img, video) {
		width: calc((100% / 3) - 10px * (4 / 3));
		padding: 0 10px;

		&:first-child {
			margin-left: -10px;
		}

		&:last-child {
			margin-right: -10px;
		}
	}

	@media screen and (max-width: 1000px) {
		margin-left: calc(-1 * var(--page-edge-padding));
		margin-right: calc(-1 * var(--page-edge-padding));

		.screenshot-details {
			margin-left: var(--page-edge-padding);
			margin-right: var(--page-edge-padding);
		}
	}

	@media screen and (max-width: /* The value of --max-width-plus-padding: */ 1280px) {
		.carousel-slide.torn {
			display: none;
		}
	}
}
