#app {
	transition: 1s opacity;

	&[v-cloak] {
		opacity: 0;
	}
}

fieldset {
	display: flex;
	gap: 3em;
	margin: 1em;

	label {
		display: flex;
		gap: 1em;
		align-items: center;
		text-align: center;
	}

	.icon {
		--width: 4em;
		width: var(--width);
		height: 3.5em;
		display: flex;
		flex-flow: column;
		gap: var(--gap);
		text-align: left;
		font-size: 60%;
	}

	.label-grid {
		.icon {
			--gap: .25em;

			> div {
				border-radius: .1em;
				background: hsl(220 10% 80%) no-repeat;
				background-image: linear-gradient(to right,
					transparent var(--p),
					white 0 calc(var(--p) + var(--gap)),
					transparent 0 calc(2 * var(--p)),
					white 0 calc(2 * var(--p) + var(--gap)),
					transparent 0
				);
				flex: 1;

				&:nth-child(1) {
					--p: 35%;
					background-size: 90% 100%;
					flex: 7
				}

				&:nth-child(2) {
					--p: 40%;
					flex: 6
				}

				&:nth-child(3) {
					--p: 35%;
					background-size: 80% 100%;
					flex: 8
				}
			}
		}
	}

	.label-list {
		.icon {
			--gap: .3em;

			> div {
				display: grid;
				grid-template-columns: 1.3em 1fr;
				gap: .5em;

				&::before {
					content: '';
					min-height: 1em;
					border-radius: .1em;
					background: hsl(220 10% 80%) no-repeat;
				}

				&::after {
					content: '⎯⎯⎯⎯⎯⎯';
					border-radius: .1em;
					color: hsl(220 10% 60%);
					line-height: .2;
					word-break: break-word;
				}

				&:nth-child(2)::after {
					content: '⎯⎯⎯⎯⎯';
				}

				&:nth-child(3)::after {
					content: '⎯⎯⎯⎯⎯⎯⎯';
				}
			}
		}
	}
}

.project {
	h2 {
		margin-top: 0;
	}

	header p {
		margin-bottom: 0;
	}
}

.image-container {
	img {
		display: block;
		object-fit: cover;
		width: 100%;
	}

	a[download] {
		display: block;
	}
}

.projects.list {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 2em .5em;
	container-name: list;
	container-type: inline-size;
	contain: inline-size;

	.project {
		grid-column: 1 / -1;
		display: grid;
		grid-template-columns: 1fr;
		gap: 1em 1.5em;
	}

	.image-container {
		img {
			border: .3em solid transparent;
			border-radius: .3em;
			box-shadow: .05em .1em 1em -.5em hsl(220 10% 50%);
			border-top-width: 1.3em;
			background-color: hsl(220 10% 90%);
			background-image:
				radial-gradient(circle, oklch(67% 47% 25) 66%, transparent 70%),
				radial-gradient(circle, oklch(75% 40% 70) 66%, transparent 70%),
				radial-gradient(circle, oklch(71% 45% 136) 66%, transparent 70%);
			background-position-x: .4em, 1.1em, 1.8em;
			background-position-y: .4em;
			background-size: .5em .5em;
			background-clip: border-box;
			background-origin: border-box;
			background-repeat: no-repeat;
		}
	}

	header {
		grid-column: 1 / -1;
		grid-row: 1;

		p {
			margin: 0;
		}
	}

	@container (width > 600px) {
		.project {
			grid-template-columns: subgrid;
		}

		.content {
			grid-column: 2;
			grid-row: 2;
		}

		.image-container {
			grid-column: 1;
			grid-row: 2;
			max-width: 20rem;
		}
	}
}

.projects.grid {
	display: flex;
	flex-wrap: wrap;
	grid-template-columns: repeat(3, 1fr);
	--gap: .4em;
	gap: var(--gap);
	padding: var(--gap);

	.project {
		--aspect-ratio: calc(var(--w) / var(--h));
		--h-factor: calc(var(--row-max-h) / var(--h));
		--flex: calc(var(--w) * var(--h-factor));

		position: relative;
		box-shadow: 0 0 0 1px hsl(220 10% 75%) inset;
		order: var(--index);

		&:target {
			order: calc(var(--index) - 1 - var(--row-index));
			--padding-inline: 1em;
			padding: 1em var(--padding-inline);

			> .image-container {
				display: block;
				margin-inline: calc(-1 * var(--padding-inline));
				margin-block: 1em;
			}
		}

		&:not(:target) {
			aspect-ratio: var(--aspect-ratio);
			flex: var(--flex);
			flex-basis: calc(100% * (var(--flex) / var(--row-w)) - var(--gap));
			overflow: clip;

			header {
				position: absolute;
				top: 100%;
				left: 0;
				right: 0;
				padding: .5em;
				font-size: 70%;
				transition: 300ms transform;
				background: hsl(0 0 100 / 75%);
				-webkit-backdrop-filter: blur(.1em);
				backdrop-filter: blur(.1em);
				color: black;

				h2 {
					font-size: 120% !important;
					font-weight: bold;
					display: inline;

					> a {
						color: inherit;
					}
				}
			}

			&:hover header {
				transform: translateY(-100%);
			}

			.content {
				display: none;
			}
		}
	}

	.project:where(:target, :not(:target):not(:hover)) .image-container {
		img {
			mix-blend-mode: multiply;
		}
	}
}





.close {
	position: absolute;
	top: 0;
	right: 0;
	cursor: pointer;
	border: none;
	border-bottom-left-radius: .3em;
	background: hsl(220 10% 70%);
	color: white;
	line-height: 1.3;

	&:hover {
		background: hsl(220 10% 60%);
	}

	&:not(:target *) {
		display: none;
	}
}





.content {
	display: flex;
	flex-flow: column;
	gap: 1em;
	font-size: 80%;

	> * {
		margin: 0;
	}
}

.question {
	font-weight: bold;
}

.url {
	margin-top: auto;
	font-weight: 600;
	font-size: 1rem;

	svg {
		vertical-align: -.15em;
		margin-right: .2em;
	}
}

.keywords {
	display: flex;
	flex-wrap: wrap;
	gap: .4em;
	color: hsl(220 10% 50%);
}

.keyword {
	padding: .33em 1em;
	border-radius: 2em;
	background: color-mix(in oklab, canvas, currentcolor 13%);
	font-weight: 600;
}