/*
	Define common sizes and spacings
*/
:root {
	--theme-navbar-height: 6rem;
	--theme-mobile-toc-height: 4rem;
	--theme-left-sidebar-width: 18rem;
	--theme-right-sidebar-width: 18rem;
	/*
		Minimum visual horizontal spacing from the edges of the viewport,
		and between vertically arranged elements
	*/
	--min-spacing-inline: 1rem;
	/* Vertical spacing around the article content and the right sidebar */
	--doc-padding-block: 0.5rem;
	--max-width: 100%;
	--cur-viewport-height: 100vh;
	/* Font sizes */
	--theme-text-lg: 1.25rem;
	--theme-text-base: 1rem;
	--theme-text-sm: 0.9375rem;
	--theme-text-xs: 0.875rem;
	/* Animation helpers */
	--theme-ease-bounce: cubic-bezier(0.4, 2.5, 0.6, 1);
}

@media (min-width: 50em) {
	:root {
		--min-spacing-inline: 1.5rem;
		--doc-padding-block: 1rem;
		--max-width: 46em;
		--theme-text-sm: 0.875rem;
		--theme-text-xs: 0.8125rem;
	}
}

@media (min-width: 72em) {
	:root {
		--doc-padding-block: 2rem;
	}
}

/* Use dynamic viewport height if the unit is supported by the browser */
@supports (height: 100dvh) {
	:root {
		--cur-viewport-height: 100dvh;
	}
}

/*
	Define common fonts and colors
*/
:root,
::backdrop {
	--font-fallback: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif,
		Apple Color Emoji, Segoe UI Emoji;
	--font-body: system-ui, var(--font-fallback);
	--font-mono: 'IBM Plex Mono', Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console',
		'Lucida Sans Typewriter', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Liberation Mono',
		'Nimbus Mono L', Monaco, 'Courier New', Courier, monospace;

	/*
		Variables with --color-base prefix define
		the hue, and saturation values to be used for
		hsla colors.

		Example:
		--color-base-{color}: {hue}, {saturation};
	*/

	--color-base-white: 0, 0%;
	--color-base-black: 240, 100%;
	--color-base-gray: 250, 14%;
	--color-base-blue: 212, 100%;
	--color-base-blue-dark: 212, 72%;
	--color-base-teal: 180, 80%;
	--color-base-green: 158, 79%;
	--color-base-orange: 22, 100%;
	--color-base-purple: 269, 79%;
	--color-base-red: 351, 100%;
	--color-base-yellow: 41, 100%;

	/*
		Color palettes are made using --color-base 
		variables, along with a lightness value to
		define different variants.
	*/

	--color-gray-5: var(--color-base-gray), 5%;
	--color-gray-10: var(--color-base-gray), 10%;
	--color-gray-20: var(--color-base-gray), 20%;
	--color-gray-30: var(--color-base-gray), 30%;
	--color-gray-40: var(--color-base-gray), 40%;
	--color-gray-50: var(--color-base-gray), 50%;
	--color-gray-60: var(--color-base-gray), 60%;
	--color-gray-70: var(--color-base-gray), 70%;
	--color-gray-80: var(--color-base-gray), 80%;
	--color-gray-90: var(--color-base-gray), 90%;
	--color-gray-95: var(--color-base-gray), 95%;

	--color-blue: var(--color-base-blue), 61%;
	--color-blue-dark: var(--color-base-blue-dark), 39%;
	--color-green: var(--color-base-green), 42%;
	--color-orange: var(--color-base-orange), 50%;
	--color-purple: var(--color-base-purple), 54%;
	--color-red: var(--color-base-red), 54%;
	--color-yellow: var(--color-base-yellow), 59%;
}

:root,
::backdrop {
	color-scheme: light;
	--theme-accent: hsla(var(--color-orange), 1);
	--theme-accent-secondary: hsl(324, 75%, 38%);
	--theme-dim: hsla(var(--color-gray-70), 1);
	--theme-dim-light: hsla(var(--color-gray-80), 1);
	--theme-dim-lighter: hsla(var(--color-gray-90), 1);
	--theme-accent-opacity: 0.1;
	--theme-divider: hsla(var(--color-purple), 0.1);
	--theme-shade-subtle: hsla(var(--color-purple), 0.3);
	--theme-text: hsla(var(--color-gray-10), 1);
	--theme-text-light: hsla(var(--color-gray-30), 1);
	--theme-text-lighter: hsla(var(--color-gray-40), 1);
	--theme-bg: hsl(273, 37%, 93%);
	--theme-bg-gradient-top: var(--theme-bg);
	--theme-bg-gradient-bottom: #fdfeff;
	--theme-bg-hover: hsla(var(--color-purple), 0.075);
	--theme-bg-offset: hsla(var(--color-purple), 0.1);
	--theme-bg-accent: hsla(var(--color-purple), var(--theme-accent-opacity));
	--theme-backdrop-overlay: hsla(var(--color-gray-50), 0.8);
	--theme-code-inline-bg: hsla(var(--color-purple), 0.1);
	--theme-code-inline-text: var(--theme-text);
	--theme-code-bg: hsla(257, 31%, 22%, 1);
	--theme-code-tabs: hsla(257, 38%, 32%, 1);
	--theme-code-text: hsla(var(--color-gray-95), 1);
	--theme-navbar-bg: var(--theme-bg);
	--theme-selection-color: hsla(var(--color-purple), 1);
	--theme-selection-bg: hsla(var(--color-purple), var(--theme-accent-opacity));
	--theme-code-selection-bg: hsla(var(--color-purple), 0.4);
	--theme-code-mark-bg: hsl(226, 50%, 33%);
	--theme-code-mark-border: hsl(224, 50%, 54%);
	--theme-code-ins-bg: hsl(122, 22%, 23%);
	--theme-code-ins-border: hsl(128, 42%, 38%);
	--theme-code-ins-text: hsl(128, 31%, 65%);
	--theme-code-del-bg: hsl(338, 40%, 26%);
	--theme-code-del-border: hsl(338, 46%, 53%);
	--theme-code-del-text: hsl(338, 36%, 70%);

	--theme-bg-gradient: linear-gradient(
		180deg,
		var(--theme-bg-gradient-top),
		var(--theme-bg-gradient-top) calc(var(--theme-navbar-height) + var(--theme-mobile-toc-height)),
		var(--theme-bg-gradient-bottom)
	);

	--theme-glow-highlight: transparent;
	--theme-glow-diffuse: hsla(var(--color-base-purple), 65%, 0.5);
	--theme-glow-blur: 10px;
}

:root.theme-dark,
.theme-dark ::backdrop {
	color-scheme: dark;
	/* We lighten-up the orange in dark mode, to help with link contrast. */
	--color-orange: var(--color-base-orange), 60%;
	--theme-accent-opacity: 0.4;
	--theme-accent: hsla(var(--color-orange), 1);
	--theme-accent-secondary: hsla(var(--color-orange), 1);
	--theme-text-accent: hsla(var(--color-orange), 1);
	--theme-dim: hsla(var(--color-gray-90), 0.3);
	--theme-dim-light: hsla(var(--color-gray-90), 0.2);
	--theme-dim-lighter: hsla(var(--color-gray-90), 0.1);
	--theme-divider: hsla(var(--color-gray-95), 0.1);
	--theme-shade-subtle: hsla(var(--color-gray-95), 0.4);
	--theme-text: hsla(var(--color-gray-90), 1);
	--theme-text-light: hsla(var(--color-gray-80), 1);
	--theme-text-lighter: hsla(var(--color-gray-70), 1);
	--theme-bg: hsl(256, 27%, 19%);
	--theme-bg-gradient-top: var(--theme-bg);
	--theme-bg-gradient-bottom: hsl(251, 29%, 11%);
	--theme-bg-hover: hsla(var(--color-purple), 0.2);
	--theme-bg-offset: #0008;
	--theme-backdrop-overlay: hsla(var(--color-gray-10), 0.8);
	--theme-code-inline-bg: #ffffff16;
	--theme-code-inline-text: var(--theme-text-light);
	--theme-code-bg: hsla(257, 31%, 11%, 1);
	--theme-code-tabs: hsla(261, 40%, 21%, 1);
	--theme-code-text: hsla(var(--color-base-white), 80%, 1);
	--theme-navbar-bg: var(--theme-bg);
	--theme-selection-color: hsla(var(--color-base-white), 100%, 1);
	--theme-code-mark-bg: hsl(224, 60%, 25%);
	--theme-code-mark-border: hsl(225, 42%, 46%);
	--theme-code-ins-bg: hsl(122, 29%, 17%);
	--theme-code-ins-border: hsl(128, 41%, 32%);
	--theme-code-ins-text: hsl(128, 31%, 55%);
	--theme-code-del-bg: hsl(337, 47%, 19%);
	--theme-code-del-border: hsl(340, 34%, 43%);
	--theme-code-del-text: hsl(340, 24%, 65%);

	--theme-glow-highlight: hsla(var(--color-base-purple), 50%, 1);
	--theme-glow-diffuse: hsla(var(--color-base-purple), 35%, 0.4);
}

::selection {
	color: var(--theme-selection-color);
	background-color: var(--theme-selection-bg);
}
