/* Main stylesheet. */

:root {
	/* Red. */
	--colour-red-100: oklch(98.00% 0.018 32.2);
	--colour-red-200: oklch(95.20% 0.043 33.2);
	--colour-red-300: oklch(87.24% 0.096 33.8);
	--colour-red-400: oklch(75.31% 0.151 33.2);
	--colour-red-500: oklch(61.25% 0.162 32.4);
	--colour-red-600: oklch(47.19% 0.140 30.9);
	--colour-red-700: oklch(35.26% 0.122 26.5);
	--colour-red-800: oklch(27.30% 0.110 20.1);
	--colour-red-900: oklch(24.50% 0.099 09.3);

	/* Orange. */
	--colour-orange-100: oklch(98.00% 0.021 65.1);
	--colour-orange-200: oklch(95.20% 0.045 68.8);
	--colour-orange-300: oklch(87.24% 0.087 61.5);
	--colour-orange-400: oklch(75.31% 0.122 51.2);
	--colour-orange-500: oklch(61.25% 0.140 40.5);
	--colour-orange-600: oklch(47.19% 0.132 31.4);
	--colour-orange-700: oklch(35.26% 0.119 27.0);
	--colour-orange-800: oklch(27.30% 0.092 27.5);
	--colour-orange-900: oklch(24.50% 0.070 35.6);

	/* Yellow. */
	--colour-yellow-100: oklch(98.00% 0.034 84.6);
	--colour-yellow-200: oklch(95.20% 0.052 84.6);
	--colour-yellow-300: oklch(87.24% 0.074 84.6);
	--colour-yellow-400: oklch(75.31% 0.096 84.6);
	--colour-yellow-500: oklch(61.25% 0.102 84.6);
	--colour-yellow-600: oklch(47.19% 0.092 84.6);
	--colour-yellow-700: oklch(35.26% 0.078 84.6);
	--colour-yellow-800: oklch(27.30% 0.056 84.6);
	--colour-yellow-900: oklch(24.50% 0.036 84.6);

	/* Green. */
	--colour-green-100: oklch(98.00% 0.028 139.3);
	--colour-green-200: oklch(95.20% 0.047 139.8);
	--colour-green-300: oklch(87.24% 0.067 145.5);
	--colour-green-400: oklch(75.31% 0.090 156.4);
	--colour-green-500: oklch(61.25% 0.086 168.1);
	--colour-green-600: oklch(47.19% 0.072 178.9);
	--colour-green-700: oklch(35.26% 0.047 185.4);
	--colour-green-800: oklch(27.30% 0.041 187.7);
	--colour-green-900: oklch(24.50% 0.048 184.2);

	/* Blue. */
	--colour-blue-100: oklch(98.00% 0.011 286.6);
	--colour-blue-200: oklch(95.20% 0.025 268.9);
	--colour-blue-300: oklch(87.24% 0.049 253.8);
	--colour-blue-400: oklch(75.31% 0.086 242.5);
	--colour-blue-500: oklch(61.25% 0.100 237.9);
	--colour-blue-600: oklch(47.19% 0.090 242.3);
	--colour-blue-700: oklch(35.26% 0.072 242.6);
	--colour-blue-800: oklch(27.30% 0.062 251.4);
	--colour-blue-900: oklch(24.50% 0.068 267.7);

	/* Purple. */
	--colour-purple-100: oklch(98.00% 0.010 274.2);
	--colour-purple-200: oklch(95.20% 0.025 268.8);
	--colour-purple-300: oklch(87.24% 0.069 270.9);
	--colour-purple-400: oklch(75.31% 0.102 273.6);
	--colour-purple-500: oklch(61.25% 0.142 278.1);
	--colour-purple-600: oklch(47.19% 0.146 285.5);
	--colour-purple-700: oklch(35.26% 0.122 292.6);
	--colour-purple-800: oklch(27.30% 0.105 300.4);
	--colour-purple-900: oklch(24.50% 0.092 305.7);

	/* Grey. */
	--colour-grey-100: oklch(98.00% 0 0);
	--colour-grey-200: oklch(95.20% 0 0);
	--colour-grey-300: oklch(87.24% 0 0);
	--colour-grey-400: oklch(75.31% 0 0);
	--colour-grey-500: oklch(61.25% 0 0);
	--colour-grey-600: oklch(47.19% 0 0);
	--colour-grey-700: oklch(35.26% 0 0);
	--colour-grey-800: oklch(27.30% 0 0);
	--colour-grey-900: oklch(24.50% 0 0);

	/* Off-white */
	--colour-off-white: oklch(99.52% 0.012 92.25);

	/* Fonts. */
	--font-serif: "Garamond Premier Pro", "Georgia Pro", "Georgia",
		"Superclarendon", "URW Bookman", "Noto Serif", serif;
	--font-sans-serif: "Inter", "Helvetica Neue", system-ui, sans-serif;
	--font-monospace: ui-monospace, "Iosevka", "Source Code Pro",
		"Consolas", "Menlo", monospace;

	/* Default themes. */
	--colour-primary: var(--colour-green-500);
	--colour-danger: var(--colour-red-600);
	--foreground: var(--colour-grey-900);
	--foreground-alt: var(--colour-grey-600);
	--background: var(--colour-off-white);
	--background-alt: var(--colour-grey-200);
	--link: var(--colour-green-600);
	--link-visited: var(--colour-purple-600);
	--border: var(--colour-grey-300);
	--border-hover: var(--colour-grey-400);
	--button-primary: var(--colour-green-500);
	--button-primary-hover: var(--colour-green-600);
	--shadow-kbd: 0 0.125rem 0.125rem 0 var(--colour-grey-600),
		inset 0 0.125rem 0.125rem 0 var(--colour-grey-100);
}

* {
	/* Account for padding and borders when calculating all dimensions. */
	box-sizing: border-box;

	/* Remove all margins. */
	margin: 0;

	scroll-margin: 2.4rem;

	/* Scrollbar styling for Firefox and modern Webkit/Blink browsers. */
	scrollbar-color: var(--background-alt) var(--background);

	/* Scrollbar styling for Safari and older Blink browsers. */
	&::-webkit-scrollbar-thumb {
		background-color: var(--background-alt);
	}

	&::-webkit-scrollbar-track {
		background-color: var(--background);
	}
}

html {
	/* Base styling. */
	color: var(--foreground);
	background-color: var(--background);
	accent-color: var(--colour-primary);
	font-family: var(--font-serif);
	font-feature-settings: "onum" 1, "pnum" 1;
	/* font-size: 120%; */
	line-height: 1.4;
	text-wrap: pretty;

	/* Use CSS smooth scrolling. */
	scroll-behavior: smooth;
}

body {
	min-height: 100svh;
	font-size: 125%;

	/* Main layout. */
	display: grid;
	grid-template-columns:
		minmax(2rem, 1fr)
		[content-start] min(100% - 4rem, 65ch) [content-end]
		minmax(2rem, 1fr);
	grid-template-rows:
		[header-start title-start] auto [title-end nav-start] auto
		[nav-end header-end main-start] 1fr [main-end footer-start]
		auto [footer-end];
}

::selection {
	background: oklch(from var(--colour-primary) L C h / 0.5);
}

/* Headings. */

h1, h2, h3, h4, h5, h6 {
	margin-block-end: 0.5rem;
	color: var(--foreground-alt);
	letter-spacing: -0.03125rem;
	text-wrap: balance;
	overflow: auto;
	padding-block-end: 0.5rem;
}

h1 {
	font-size: 4rem;
	font-weight: 550;
	line-height: 4.5rem;
}

h2 {
	font-size: 3rem;
	font-weight: 500;
	line-height: 3.5rem;
}

h3 {
	font-size: 2.5rem;
	font-weight: 450;
	line-height: 3rem;
}

h4 {
	font-size: 2rem;
	font-weight: 450;
	line-height: 2.5rem;
}

h5 {
	font-size: 1.5rem;
	font-weight: 450;
	line-height: 2rem;
}

h6 {
	font-size: 1.25rem;
	font-weight: 450;
	line-height: 1.75rem;
}

div[role="doc-subtitle"] {}

/* Body copy. */

p {
	text-align: justify;
	hyphens: auto;
	-webkit-hyphens: auto;
	hyphenate-limit-chars: 6;
	hanging-punctuation: first last allow-end;
}

small {
	font-size: 80%;
}

abbr {
	font-variant-caps: all-small-caps;
	font-variant-numeric: oldstyle-nums;
	font-style: normal;
}

figure {
	& img {
		max-width: 100%;
	}

	& figcaption {
		text-align: center;
	}
}

/* Links. */

a {
	color: var(--link);
	text-decoration-thickness: 1px;

	&:hover {
		text-decoration: none;
	}

	main.content &:visited {
		color: var(--link-visited);
	}

	&.invalid {
		color: var(--colour-danger);
		text-decoration: line-through;
		cursor: not-allowed;
		pointer-events: none;
	}
}

/* Lists. */

:is(ol, ul) {
	padding-inline-start: 2em;
}

ol {
	list-style: decimal;
}

ul {
	list-style: circle;
}

:is(ol, ul) :is(ol, ul) {
	padding-inline-start: 1em;
}

ol.latin {
	list-style: upper-latin;
}

ol.latin.lower {
	list-style: lower-latin;
}

ol.roman {
	list-style: upper-roman;
}

ol.roman.lower {
	list-style: lower-roman;
}

/* Tables. */

table {
	width: 100%;
	margin: 2rem 0;
	border-collapse: collapse;
	text-align: left;
}

th, td {
	padding: 0.75rem;
	border-bottom: 0.0625rem solid var(--foreground-alt);
}

:is(th, td):first-child {
	padding-left: 0;
}

:is(th, td):last-child {
	padding-right: 0;
}

/* Code. */

code, samp, kbd {
	padding: 0.2em 0.4em;
	border-radius: 0.2em;
	color: var(--foreground);
	background-color: var(--background-alt);
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
	font-family: var(--font-monospace);
	font-size: 0.8em;
	font-feature-settings: normal;
}

kbd {
	border: 1px solid var(--border);
	border-radius: 0.4em;
	box-shadow: var(--shadow-kbd);
}

pre {
	margin: 2rem 0;
}

pre > :is(code, samp) {
	display: block;
	border: 1px solid var(--border);
	padding: 1rem 1.25rem;
	overflow-y: auto;
}

/* Buttons and forms. */

:where(input:is([type="button"],
[type="submit"], [type="reset"]), button) {
	height: 2em;
	padding: 0 2em;
	margin: 0.4em 0;
	border: 0.0625rem solid var(--border);
	border-radius: 0.25rem;
	color: var(--foreground-alt);
	background-color: var(--background-alt);
	cursor: pointer;
	font-family: var(--font-sans-serif);
	font-size: 1rem;
	font-feature-settings: normal;
	text-align: center;
	line-height: 2em;
	white-space: nowrap;
}

:where(input:is([type="button"],
[type="submit"], [type="reset"]), button):is(:hover, :focus) {
	border-color: var(--border-hover);
	background-color: var(--background);
}

:where(input:is([type="button"],
[type="submit"], [type="reset"]), button).primary {
	color: var(--background);
	background-color: var(--button-primary);
}

:where(input:is([type="button"], [type="submit"],
[type="reset"]), button).primary:is(:hover, :focus) {
	background-color: var(--button-primary-hover);
}

textarea, input:where([type="text"], [type="number"],
[type="datetime-local"], [type="date"], [type="time"],
[type="month"], [type="week"], [type="tel"],
[type="url"], [type="email"], [type="password"], [type="search"]) {
	height: 2em;
	padding: 0 0.5em;
	margin: 0.5em 0;
	border: 0.0625rem solid var(--border);
	border-radius: 0.25rem;
	color: var(--foreground-alt);
	background-color: var(--background-alt);
	font-family: var(--font-sans-serif);
	font-size: 1rem;
	font-feature-settings: normal;
	outline: 0;
}

:where(textarea, input:is([type="text"], [type="number"],
[type="datetime-local"], [type="date"], [type="time"],
[type="month"], [type="week"], [type="tel"], [type="url"],
[type="email"], [type="password"], [type="search"])):focus {
	border-color: var(--border-hover);
}

:where(textarea, input:is([type="text"], [type="number"],
[type="datetime-local"], [type="date"], [type="time"],
[type="month"], [type="week"], [type="tel"], [type="url"],
[type="email"], [type="password"], [type="search"]))::placeholder {
	color: var(--foreground-alt);
}

textarea {
	width: 100%;
	max-width: 100%;
	min-height: 4rem;
	padding: 0.5rem;
}

input:where([type="radio"], [type="checkbox"]) {
	width: 2rem;
}

legend {
	font-weight: bold;
}

fieldset {
	padding: 0;
	margin: 2rem 0;
	border: none;
}

/* Horizontal rule. */

hr {
	max-width: 16rem;
	margin-inline: auto;
	border: none;
	border-top: 1px solid var(--border);
	overflow: visible;
	text-align: center;

	&:after {
		content: "*\2002*\2002*";
		position: relative;
		top: -1rem;
		padding-inline: 1.25rem;
		color: var(--border);
		background-color: var(--background);
		font-size: 150%;
	}
}

/* Header, navigation, and footer. */

header.header, nav.navbar {
	z-index: 1;
	display: grid;
	grid-column: 1 / -1;
	grid-template-columns: subgrid;
	padding-block: 0.5rem;
	background-color: oklch(from var(--background) L C h / 0.75);
	border-bottom: 1px solid var(--border);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
}

header.header div.title {
	grid-column: content;
	grid-row: title;
	margin: 0;
	font-size: 200%;
	font-weight: 500;
	font-feature-settings: "liga" 0, "smcp" 1, "onum" 1, "pnum" 1, "swsh" 1;
	line-height: 1.2;

	& a {
		color: var(--colour-primary);
		text-decoration: none;
	}
}

nav.navbar {
	position: sticky;
	top: 0;
	grid-row: nav;
	font-family: var(--font-sans-serif);
}

ul.navbar-list {
	grid-column: content;
	display: flex;
	flex-wrap: wrap;
	gap: 2em;
	padding: 0;
	align-items: center;
	list-style: none;

	& a {
		color: var(--foreground-alt);
		text-decoration: none;

		&:hover {
			color: var(--foreground);
			text-decoration: underline;
		}
	}

	@media (width < 30rem) {
		gap: 1em;
	}
}

footer.footer {
	grid-column: content;
	grid-row: footer;
	margin: 1rem 0;
	color: var(--foreground-alt);
	font-size: 90%;

	& a {
		color: var(--link);
	}

	@media (width < 30rem) {
		font-size: 75%;
	}
}

/* Main content. */

main.content {
	grid-column: content;
	grid-row: main;

	& > * {
		margin-block-start: 1.75rem;
	}

	& > :is(h1, h2) {
		margin-block-start: 4rem;
	}

	& > :is(h3, h4) {
		margin-block-start: 3rem;
	}

	& > :is(h5, h6) {
		margin-block-start: 2.25rem;
	}

	& > hr {
		margin-block: 4rem;
	}
}

/* Utility classes. */

.container {
	display: grid;
	grid-gap: 1rem;
	grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.text-center {
	text-align: center;
}

.text-left {
	text-align: left;
}

/* General media queries. */

@media print {
	:root {
		color: #000000;
		background-color: #ffffff;
		font-size: 8pt;
	}
}

dl.contacts {
	display: grid;
	grid-template-columns: auto auto;
	gap: 0.5rem 1rem;
	margin: 1rem 0;

	& span {
		display: flex;
		gap: 0 0.5rem;
	}

	& dt {
		grid-column: 1 / 2;
		display: inline-flex;
		justify-self: right;
		align-content: center;
		text-align: right;
		font-feature-settings: "liga" 0, "smcp" 1;
	}

	& dd {
		display: inline;
		grid-column: 2 / 3;
		justify-self: left;
	}

	& svg {
		justify-self: center;
		align-self: center;
		height: 1rem;
		width: 1rem;
		position: relative;
		top: 0.07rem;
	}

	&.horizontal {
		display: flex;
		flex-wrap: wrap;
		justify-content: space-around;
	}
}

div.tags {
	margin: 0;
	display: flex;
	gap: 0.5rem;

	& span.tag {
		padding-inline: 4px;
		background-color: var(--colour-blue-300);
		border: 1px solid var(--colour-blue-500);
		border-radius: 4px;
		font-size: 1rem;
		user-select: none;

		&.red {
			background-color: var(--colour-red-300);
			border: 1px solid var(--colour-red-500);
		}
	}
}
