/* Write your global styles here, in PostCSS syntax */
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
	:root {
		--background: 224 71% 4%;
		--foreground: 213 31% 91%;

		--muted: 223 47% 11%;
		--muted-foreground: 215.4 16.3% 56.9%;

		--popover: 224 71% 4%;
		--popover-foreground: 215 20.2% 65.1%;

		--card: 224 71% 4%;
		--card-foreground: 213 31% 91%;

		--border: 216 34% 17%;
		--input: 216 34% 17%;

		--primary: 210 40% 98%;
		--primary-foreground: 222.2 47.4% 1.2%;

		--secondary: 222.2 47.4% 11.2%;
		--secondary-foreground: 210 40% 98%;

		--accent: 216 34% 17%;
		--accent-foreground: 210 40% 98%;

		--destructive: 359 51% 48%;
		--destructive-foreground: 210 40% 98%;

		--ring: 216 34% 17%;

		--radius: 0.5rem;
	}
}

@layer base {
	* {
		@apply border-border;
	}
	body {
		@apply bg-background text-foreground;
		font-feature-settings: 'rlig' 1, 'calt' 1;
	}
}

.gradient-text {
	background-clip: text;
	-webkit-text-fill-color: transparent;
	@apply bg-gradient-to-r font-bold;
}

p:not(.reset):not(:last-child) {
	@apply pb-5;
}

a:not(.reset) {
	@apply gradient-text text-cyan-300 from-cyan-200 to-cyan-300 underline decoration-cyan-300/30 transition-colors;
}

a:hover:not(.reset) {
	@apply gradient-text text-cyan-500 from-cyan-400 to-cyan-500 decoration-cyan-500;
}

ul li:not(.reset)::before {
	content: "- ";
}

.dim {
	@apply text-gray-400;
}

a.dim:not(.reset) {
	@apply gradient-text text-cyan-600 from-cyan-600 to-cyan-700;
}

a.dim:hover:not(.reset) {
	@apply gradient-text text-cyan-400 from-cyan-300 to-cyan-400 underline decoration-cyan-400;
}

h2:not(.reset) {
	@apply inline-block;
}