:root {
	/* Layout */
	--navbar-height: 75px;
	--header-height: max(350px, min(75dvh, 700px));
	--main-padding: max(2em, 8%);
	--footer-height: 200px;

	--small-gap: 15px;
	--medium-gap: 30px;
	--big-gap: 50px;

	--min-card-width: 200px;
	--max-card-width: 500px;

	/* Colors */
	--light: #FFF;
	--dark: #000;
	--primary: #8A1538;
	--primary-complement: var(--light);
	--secundary-base: #F46614; /* Computed from this base for dark mode */
	--secundary: var(--secundary-base);
	--secundary-complement: var(--light);
	--neutral-base: #AABBFF; /* Computed from this base for dark mode */
	--neutral: var(--neutral-base);
	--neutral-complement: var(--dark);
	--action: var(--primary); /* For links, buttons, etc. */
	--action-complement: var(--primary-complement);

	/* Color modifiers */
	--alpha: 75%;
	--primary-alpha: hsl(from var(--primary) h s l / var(--alpha));
	--secundary-alpha: hsl(from var(--secundary) h s l / var(--alpha));
	--light-alpha: hsl(from var(--light) h s l / var(--alpha));
	--dark-alpha: hsl(from var(--dark) h s l / var(--alpha));

	/* Default colors */
	--bg: var(--light);
	--fg: var(--dark);

	/* Typography */
	--main-font: 14pt sans-serif;
	--brand-font: 700 24px sans-serif;

	@media (prefers-color-scheme: dark) {
		--bg: var(--dark);
		--fg: var(--light);
		--secundary: hsl(from var(--secundary-base) h s calc(l*0.75));
		--neutral: hsl(from var(--neutral-base) h s calc(l*0.25));
		--neutral-complement: var(--light);
		--action: var(--secundary);
		--action-complement: var(--secundary-complement);
	}
}

/*
I- Typography
II- General layout
III- Components
IV- Atoms
*/

html, body {
	margin: 0;
	padding: 0;
	font: 18px/1.5 sans-serif;
	background-color: var(--bg);
	color: var(--fg);
	font: var(--main-font);
}

body {
	display: flex;
	flex-direction: column;
	min-height: 100dvh;
}

:target {
	scroll-margin-top: var(--navbar-height);
}

/*********************************************************************
******************************************************** I- TYPOGRAPHY
*********************************************************************/

a {
	color: var(--action);
	text-decoration: none;
	&[href^=http] {
		text-decoration: dotted underline;
		&::after {
			background-color: currentcolor;
			content: "";
			display: inline-block;
			width: .75em;
			height: .75em;
			margin-left: .1em;
			mask-image: url(/img/external-link.svg);
			mask-size: cover;
			vertical-align: text-top;
		}
		&:visited {
			text-decoration-color: var(--bg);
		}
	}
}

h2, h3, h4, h5, h6 {
	color: var(--primary);
}

h1, h2 {
	font-variant: small-caps;
}

.sc {
	font-variant: small-caps;
}

.center {
	text-align: center;
}

/*********************************************************************
**************************************************** II- GENERAL LAYOUT
1. Navbar
2. Banner
3. Main content
4. Footer
*********************************************************************/

/* II-1. Navbar
*********************************************************************/

.keyboard-navigation {
	display: block;
	position: fixed;
	top: calc(1em + var(--navbar-height));
	left: -100%;
	z-index: 1000;
	border-radius: 1em;
	padding: 1em;
	background-color: var(--primary);
	color: var(--light);
	&:focus-within {
		left: var(--main-padding);
	}
}

.navbar {
	--bg: var(--primary);
	--fg: var(--primary-complement);
	--action: var(--primary-complement);
	position: sticky;
	left: 0;
	top: 0;
	z-index: 2;
	margin: 0;
	box-sizing: border-box;
	width: calc(100vw);
	min-height: var(--navbar-height);
	padding: 0 var(--main-padding);
	border-bottom: 1px solid var(--fg);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	background-color: var(--bg);
	color: var(--fg);
}

.navbar-brand {
	margin: 0;
	flex-grow: 1;
	display: flex;
	align-items: center;
	justify-content: flex-start;
	gap: var(--medium-gap);
	svg, img, object {
		height: calc(var(--navbar-height) / 2);
		display: none;
	}
	a {
		font: var(--brand-font);
	}
}

.navbar-content, .navbar-actions {
	display: flex;
	align-items: flex-start;
	justify-content: center;
	gap: var(--big-gap);
}

.navbar-actions {
	margin-left: var(--big-gap);
}

.navbar-dropdown {
	position: absolute;
	/* margin-left: -10em; */
	padding: 0 1em;
	border-radius: 0 0 15px 15px;
	border-bottom: 2px solid var(--light);
	border-left: 2px solid var(--light);
	@media (max-width: 1000px) {
		position: initial;
		max-height: initial;
		margin: 0;
		overflow-y: initial;
	}
	@media (min-width: 1000px) {
		background: linear-gradient(
			to bottom,
			var(--primary) 0%,
			var(--secundary) 100%
		);
		max-height: calc(100dvh - calc(1em + var(--navbar-height)));
		overflow-y: scroll;
	}
}

.navbar-dropdown > li {
	list-style: none;
	padding-bottom: 1em;
	margin: 1em auto;
}

.navbar-menu-toggler, .navbar-menu-toggler-label {
	display: none;
}

@media (max-width: 1000px) {
	.navbar-content {
		display: none;
	}

	.navbar-brand {
		svg, img, object {
			display: inline-block;
		}
		a {
			display: none;
		}
	}

	.navbar-menu-toggler-label {
		display: block;
		padding-right: 2em;
	}

	.navbar-menu-toggler {
		display: block;
		appearance: none;
		outline: none;
		position: relative;
		height: 2em;
		width: 2em;
		border-top: 5px solid var(--fg);
		border-bottom: 5px solid var(--fg);
		transition: 0.2s;
		&:focus-within {
			--fg: var(--neutral);
		}
		&::before, &::after {
			content: "";
			position: absolute;
			height: 5px;
			width: 2em;
			top: calc(1em - 8px);
			transition: 0.15s;
			background-color: var(--fg);
			transition: 0.2s;
		}
		&:checked {
			border: 0px solid var(--primary);
			transition: .2s;
			&::before {
				transform: rotate(45deg);
			}
			&::after {
				transform: rotate(-45deg);
			}
		}
	}

	.navbar-menu-toggler:checked ~ .navbar-content, .navbar-content:focus-within {
		position: fixed;
		top: var(--navbar-height);
		bottom: 0;
		left: 0;
		box-sizing: border-box;
		width: 95vw;
		height: calc(100dvh - var(--navbar-height));
		overflow-y: scroll;
		display: flex;
		align-items: flex-start;
		justify-content: space-around;
		gap: var(--big-gap);
		flex-direction: column;
		padding: var(--big-gap) var(--main-padding);
		background: var(--secundary);
		transition: .2s;
	}
}

/* II-2. Banner
*********************************************************************/

.banner {
	min-height: var(--header-height);
	position: relative; /* For absolute positionning of .banner-img-credit */
	display: grid;
}

.banner-img {
	position: absolute;
	object-fit: cover;
	object-position: bottom;
	height: 100%;
	width: 100%;
}

.banner-img-credit {
	z-index: 1;
	background-color: var(--light-alpha);
	writing-mode: vertical-rl;
	position: absolute;
	bottom: 0;
	right: 0;
	font-size: 10px;
	padding: .25em;
	@media (max-width: 800px) {
		display: none;
	}
}

.banner-content {
	z-index: 1;
	grid-area: 1/1;
	margin: 0;
	box-sizing: border-box;
	height: 100%;
	padding: var(--small-gap) var(--main-padding);
	display: flex;
	flex-direction: column;
	align-items: start;
	justify-content: space-around;
	background: linear-gradient(
		to right bottom,
		hsl(from var(--bg) h s l),
		hsl(from var(--bg) h s l / .75) 50%,
		transparent 99%);
	backdrop-filter: blur(3px);
	color: var(--fg);
	@media (max-width: 800px) {
		background: hsl(from var(--bg) h s l / .75);
	}
	@media (min-width: 800px) {
		> * {
			width: 75%;
		}
	}
}

.banner-top {
	display: flex;
	align-items: center;
	gap: var(--medium-gap);
}
.banner-icon {
	svg, img, object {
		height: 7em;
	}
}

.banner-middle {
	border-left: 1px solid var(--secundary);
    padding-left: 1em;
}

.breadcrumb {
	--bg: hsl(from var(--primary) h s l / var(--alpha));
	--fg: var(--light);
	--action: var(--light);
	min-height: 50px;
	padding: 0 var(--main-padding);
	width: calc(100% - calc(2 * var(--main-padding)));
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 2em;
	background-color: var(--bg);
	color: var(--fg);
}

/* II-3. Main content
*********************************************************************/

main {
	--extra-height: calc(var(--banner-height) + var(--footer-height));
	padding: 0 var(--main-padding);
	/* width: calc(95% - calc(2 * var(--main-padding))); */
	flex-grow: 1;
}

section {
	padding: 2em 0;
	margin: auto;
	max-width: 100ch;
}

/* II-4. Footer
*********************************************************************/

footer {
	--bg: var(--primary);
	--fg: var(--primary-complement);
	margin-top: var(--main-padding);
	min-height: var(--footer-height);
	background-color: var(--bg);
	p, a, h3 {
		color: var(--fg);
		margin: 0;
	}
	a:not([href^=mailto])::before {
		content: "ð ";
		font-size: .5em;
		color: transparent;
		text-shadow: 0 0 0 var(--fg);
	}
	a[href^=mailto]::before {
		content: "ð ";
		font-size: .75em;
		font-weight: bold;
	}
	@media(min-width: 850px) {
		display: flex;
	}
}

footer > div {
	/* max-height: calc(var(--footer-height) - var(--gap-size)); */
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: center;
	column-gap: 2em;
	padding: 2em;
	flex-wrap: wrap;
	&:not(:first-child) {
		border-top: 1px solid var(--light);
	}
	@media(min-width: 850px) {
		width: 33%;
		padding: 0 2em;
		&:not(:first-child) {
			border: none;
			border-left: 1px solid var(--light);
		}
	}
}

/*********************************************************************
****************************************************** III- COMPONENTS
III-1. Cards
III-2. Details
*********************************************************************/

/* III-1. Cards
*********************************************************************/

.card-and-article {
	min-width: 100%;
	.card {
		float: left;
		margin-right: var(--medium-gap);
	}
	&::after {
		content: "";
		display: block;
		clear: both;
	}
}

.cards-list, .small-cards-list {
	display: grid;
	grid-gap: var(--medium-gap);
	justify-content: center;
	grid-template-columns: repeat(
		auto-fit,
		minmax(var(--min-card-width), var(--max-card-width))
	);
}

.card {
	--fg: var(--primary);
	--action: var(--secundary);
	border: 2px solid var(--primary);
	border-radius: 15px;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	text-align: center;
	min-width: var(--min-card-width);
	max-width: var(--max-card-width);
	&.card-small {
		width: var(--min-card-width);
	}
}

.card-header {
	display: flex;
	flex-direction: column;
	padding: var(--small-gap);
	align-items: center;
	justify-content: space-around;
	border-bottom: 2px solid var(--fg);
	height: 200px;
}

.card-icon {
	max-width: 25%;
	padding: var(--small-gap);
}

.card-title {
	font-weight: bold;
}

.card-content {
	--bg: var(--primary-alpha);
	--fg: var(--light);
	--action: var(--light);
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	flex-grow: 1;
	background-color: var(--bg);
	color: var(--fg);
	@media (max-width: 1000px) {
		p {
			text-align: left;
		}
	}
	.btn-primary {
		--action: var(--primary);
	}
	padding: var(--small-gap) var(--medium-gap);
	.card-actions {
		margin: 0 calc(-1 * var(--medium-gap));
		margin-bottom: calc(-1 * var(--small-gap));
	}
}

.card-header svg {
	max-height: 100px;
	color: var(--primary);
}

.card h2 {
	color: var(--primary);
}

.card-actions {
	background: linear-gradient(var(--light), var(--secundary));
	padding: 2em;
	display: flex;
	align-items: center;
	justify-content: center;
	flex-direction: column;
	flex-grow: 1;
	text-align: justify;
	color: var(--primary);
}

.card-btn {
	text-align: center;
	background-color: var(--light);
	color: var(--primary);
	margin: 10px;
	padding: 1em;
	border: 1px solid var(--primary);
	border-radius: 15px;
	display: flex;
	gap: 1em;
	align-items: center;
	justify-content: flex-start;
}

.card-btn svg {
	height: 2em;
	color: var(--primary);
}

/* III-2. Details
 * Note: we don't want to capture details used for navbar dropdown,
 *       which is why everything is prefixed with main.
*********************************************************************/

summary {
	/* margin-left: calc(-.5 * var(--main-padding)); */
	cursor: pointer;
	h3, h4, h5, h6 {
		display: inline;
	}
}

main details {
	padding: 0 var(--small-gap);
	border-left: 1px solid var(--primary);
	& summary::before {
		float: right;
		border: 1px solid var(--primary);
		border-radius: 50%;
		width: 1.5em;
		height: 1.5em;
		text-align: center;
		content: "+";
		flex-shrink: 0;
	}
	&[open] {
		border-bottom: 1px solid var(--primary);
		border-bottom-left-radius: 1em;
		padding-bottom: 1em;
		& summary::before {
			content: "-";
		}
	}
}

/*********************************************************************
 ****************************************************** IV- ATOMS
IV-1. Images
IV-2.
IV-9. Miscelaneous
*********************************************************************/

/* IV-1. Images
*********************************************************************/

svg {
	fill: currentcolor;
	width: auto;
	height: auto;
}

/* Inline svgs */
dd svg, h1 svg, h2 svg, h3 svg, h4 svg, h5 svg, h6 svg, p svg, li svg, .tags svg {
	height: 1em;
}

/* IV-3. Buttons
*********************************************************************/

.btn-primary {
	text-align: center;
	background-color: var(--fg);
	color: var(--action);
	margin: var(--small-gap) 0;
	padding: 1em;
	border: 1px solid var(--action);
	border-radius: 15px;
	display: flex;
	gap: 1em;
	align-items: center;
	justify-content: flex-start;
}


/* IV-9. Misc
*********************************************************************/

code {
	padding: 2px 6px;
	border-radius: 2px;
	background: #F5F5F5
}

.plainpage {
	margin: 15dvw auto;
	font-size: 24pt;
	text-align: center;
	font-weight: bold;
	progress {
		width: 100%;
		accent-color: var(--primary);
	}
}

.tags {
	display: flex;
	flex-wrap: wrap;
	gap: var(--small-gap);
}
.tags > * {
	list-style: none;
	padding: .5em;
	border: 1px solid var(--fg);
	border-radius: 1em;
}
