@layer reset, base, layout, components, components.select, viewtransitions, warnings;

@keyframes scale-up {
	from {
		opacity: 0;
		scale: 0.5;
	}
}

@keyframes scale-down {
	to {
		opacity: 0;
		scale: 0.5;
	}
}

@keyframes slide-up {
	to {
		translate: 0 -100%;
		opacity: 0;
	}
}

@keyframes slide-down {
	from {
		translate: 0 -100%;
		opacity: 0;
	}
}

@layer viewtransitions {
	/* Keep the document theme-toggle VT performant by not capturing any children */
	html:active-view-transition-type(theme-toggle) * {
		view-transition-name: none !important;
	}

	/* Keep the entries filter VT performant by not capturing any children of the entries */
	#entries:active-view-transition .entry * {
		view-transition-name: none !important;
	}
	

	::view-transition-group(*) {
		animation-duration: 500ms;
	}

	/* Track all entries */
	.entry {
		view-transition-name: match-element;
		view-transition-class: entry;

		/* Morph the button individually */
		button {
			view-transition-name: match-element;
		}

		/* Also apply hover styles during the transtion, to prevent the card from jumping during the transition */
		&:active-view-transition {
			transform: translateY(-5px);
			box-shadow: 0 10px 20px var(--entry-hover-shadow);
		}
	}

	/* Animations to use when filtering. */
	#entries::view-transition-new(.entry):not(:only-child) {
		animation: none;
	}
	#entries::view-transition-old(.entry):not(:only-child) {
		display: none;
	}
	#entries::view-transition-group(.entry) {
		overflow: clip;
		border-radius: 1.35rem; /* Same as the real entry */
	}
	#entries::view-transition-new(.entry):only-child {
		animation-name: scale-up;
	}
	#entries::view-transition-old(.entry):only-child {
		animation-name: scale-down;
	}

	/* Track the selection */
	#selected {
		li {
			view-transition-name: match-element;
			view-transition-class: selected;
		}

		&::view-transition-new(.selected):not(:only-child) {
			animation: none;
		}
		&::view-transition-old(.selected):not(:only-child) {
			display: none;
		}
		&::view-transition-new(.selected):only-child {
			animation-name: scale-up;
			transform-origin: 0 50%;
		}
		&::view-transition-old(.selected):only-child {
			animation-name: scale-down;
			transform-origin: 0 50%;
		}
	}

	/* Don’t cross-fade the sidebar wrapper, but give the illusion that it grows */
	#sidebar {
		view-transition-name: sidebar;
	}
	::view-transition-new(sidebar) {
		animation: none;
		height: 100%;
		width: 100%;
	}
	::view-transition-old(sidebar) {
		display: none;
	}

	/* Capture the h1, footer and weather individually from the sidebar so that they don’t stretch with the sidebar’s texture */
	#sidebar :is(footer, .weather, h1) {
		view-transition-name: match-element;
	}
}


@layer components {
	@layer filter {
		#entries[data-filter-season="winter"] > .entry:not([data-season~="winter"]),
		#entries[data-filter-season="spring"] > .entry:not([data-season~="spring"]),
		#entries[data-filter-season="summer"] > .entry:not([data-season~="summer"]),
		#entries[data-filter-season="autumn"] > .entry:not([data-season~="autumn"]) {
			display: none !important;
		}

		#entries[data-filter-type="adventurous"] > .entry:not([data-type~="adventurous"]),
		#entries[data-filter-type="relaxing"] > .entry:not([data-type~="relaxing"]),
		#entries[data-filter-type="nature"] > .entry:not([data-type~="nature"]),
		#entries[data-filter-type="wildlife"] > .entry:not([data-type~="wildlife"]),
		#entries[data-filter-type="sightseeing"] > .entry:not([data-type~="sightseeing"]) {
			display: none !important;
		}
	}

	@layer layout {
		#entries {
			display: grid;
			grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr) );
			gap: 1.5rem;
		}

		button:not(select > button) {
			all: unset;
			background: var(--brand-btn-bg);
			color: var(--brand-btn-text);
			padding: 0.4rem 0.8rem;
			border-radius: 9999px;
			text-box: trim-both cap alphabetic;
			cursor: pointer;

			.checked &,
			&:hover,
			&:focus-visible {
				background: var(--brand-btn-hover-bg);
				color: var(--brand-btn-hover-text);
			}

			&:disabled {
				opacity: 0.5;
				cursor: not-allowed;
				pointer-events: none;
			}
		}

		.entry {
			background: var(--entry-bg);
			border: 1px solid var(--entry-border);
			filter: drop-shadow(1px 2px 8px var(--entry-shadow));
			color: var(--text-color);

			&.checked {
				background: var(--entry-checked-bg);
				color: var(--entry-checked-text);
				border-color: var(--entry-checked-border);
			}

			border-radius: 1.35rem;

			transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;

			&:hover {
				transform: translateY(-5px);
				box-shadow: 0 10px 20px var(--entry-hover-shadow);
			}

			display: grid;
			grid-template-rows: subgrid;
			grid-row: span 4;
			row-gap: 0;

			h2 {
				grid-row: 4;
				padding: 1rem;
				padding-top: 0;
			}

			img {
				width: 100%;
				height: auto;
				grid-row: 2;
			}

			p {
				grid-row: 3;
				padding: 1rem 0 0.15rem 1rem;
				font-size: 0.75em;
			}

			button {
				&::after {
					content: " +";
					font-weight: bold;
				}

				.checked &::after {
					content: ' ✓';
				}
			}

			header {
				grid-row: 1;

				display: flex;
				justify-content: space-between;
				padding: 1em;

				ul {
					list-style: none;
					display: flex;
					flex-direction: row;
					gap: 0.5em;
					align-items: center;

					li {
						background: var(--pill-bg);
						padding: 0.2rem 0.6rem;
						border-radius: 9999px;
						font-size: 0.75rem;
						color: var(--text-color);
						text-transform: capitalize;
						height: min-content;
					}
				}
			}
		}

		#selected:empty::after {
			content: "(Add activities from the grid using the Add buttons)";
			font-style: italic;
		}

		#selected {
			display: flex;
			flex-direction: column;
			gap: 0.75em;

			li {
				min-height: 2rem;
				height: auto;

				display: flex;
				flex-direction: row;
				gap: 0.5rem;
				align-items: center;

				img {
					height: 2em;
					width: auto;
					align-self: start;
          margin-top: 0.3em;
				}

				button.delete-btn {
					margin-left: auto;
					width: 24px !important;
					height: 24px !important;
					padding: 0 !important;
					background: transparent !important;
					color: inherit;
					opacity: 0.5;
				}

				button.delete-btn:hover, button.delete-btn:focus-visible {
					color: red;
					opacity: 1;
				}
			}
		}

		.weather ul {
			list-style: none;
			background: var(--weather-bg);
			padding: 0.8rem;
			border-radius: 1rem;
			color: var(--weather-text);
			display: flex;
			justify-content: space-between;
			align-items: center;
			margin-top: 1rem;
			font-size: 0.9rem;
			box-shadow: 0 2px 10px var(--weather-shadow);
		}
	}

	@layer select {
		select,
		select::picker(select) {
			appearance: base-select;
		}
		
		select {
			color: var(--select-text);
			background: var(--select-bg);
			backdrop-filter: blur(10px);
			border-radius: 9999px;
			padding: 0.5rem 1rem;
			border: 1px solid var(--select-border);
			cursor: pointer;

			transition: 
				background .2s ease,
				color .2s ease,
				border-color .2s ease
			;
		}

		select:hover,
		select:active,
		select:focus-visible,
		select:not(select:has(option[value=""]:checked)),
		select:open {
			background: var(--select-open-bg);
			color: var(--select-open-text);
		}

		select:hover,
		select:active,
		select:focus-visible {
			border-color: var(--select-hover-border);
		}

		select::picker(select) {
			transform-origin: 50% 0%;
			transition: 
				opacity .2s ease,
				transform .2s ease, 
				display .2s allow-discrete, 
				overlay .2s allow-discrete
			;

			opacity: 0;
			transform: scale(0.9);
		}

		select:open::picker(select) {
			opacity: 1;
			transform: scale(1);

			@starting-style {
				opacity: 0;
				transform: scale(0.9);
			}
		}

		select button {
			display: flex;
			align-items: center;
			justify-content: space-between;
			gap: 0.5rem;
			cursor: pointer;
			font-family: inherit;
		}

		select::picker(select) {
			background: var(--picker-bg);
			border-radius: 1rem;
			box-shadow: 0 4px 20px var(--picker-shadow);
			padding: 0.5rem;
			border: 1px solid var(--picker-border);
		}

		select option {
			display: flex;
			justify-content: space-between;
			align-items: center;
			padding: 0.5rem 1rem;
			color: var(--option-text);
			border-radius: 0.5rem;
			cursor: pointer;
			font-family: inherit;
		}

		select option:hover {
			background: var(--option-hover-bg);
		}

		select option::checkmark {
			display: none;
		}

		select option::after {
			content: "";
			width: 1.2rem;
			height: 1.2rem;
			border-radius: 50%;
			border: 2px solid var(--option-border);
			display: inline-block;
			transition: border-color 0.2s, background-color 0.2s;
		}

		select option:checked::after {
			border-color: var(--option-checked-bg);
			background: var(--option-checked-bg);
			box-shadow: inset 0 0 0 3px var(--option-checked-shadow);
		}
	}
}

@layer layout {
	body {
		display: grid;
		gap: 1.5rem;
		grid-template-rows: auto auto;
		padding: 1rem;
	}

	@media (min-width: 800px) {
		body {
			grid-template-columns: auto min(30rem, 30vw);
			grid-template-rows: 5rem auto;
			grid-template-areas:
				"header header"
				"main aside";
		}
	}

	@media (min-width: 800px) {
		.mobile-toggle, .mobile-close {
			display: none !important;
		}
	}

	button.btn-icon {
		all: unset;
		cursor: pointer;
		display: flex;
		align-items: center;
		justify-content: center;
		padding: 0.5rem !important;
		border-radius: 50%;
		color: var(--text-color);
		transition: background 0.2s;
		box-sizing: border-box !important;
		width: 40px !important;
		height: 40px !important;
	}

	button.btn-icon svg {
		width: 24px !important;
		height: 24px !important;
		display: block;
	}

	button.btn-icon:hover, button.btn-icon:focus-visible {
		background: var(--pill-bg);
	}

	#sidebar-toggle {
		position: relative !important; /* battle with layer order … */
	}

	#sidebar-toggle[data-count]::after {
		content: attr(data-count);
		position: absolute;
		bottom: -4px;
		left: -6px;
		background: #ff3b3b;
		color: white;
		font-size: 0.75rem;
		font-weight: bold;
		min-width: 20px;
		height: 20px;
		line-height: 20px;
		text-align: center;
		border-radius: 10px;
		padding: 0 4px;
		box-sizing: border-box;
		pointer-events: none;
	}

	.mobile-close {
		align-self: flex-end;
	}

	#header {
		grid-area: header;

		display: flex;
		flex-direction: row;
		justify-content: space-between;

		align-items: center;

		h1 {
			text-transform: lowercase;
			color: var(--header-h1);
		}

		nav {
			flex: 1;
			display: flex;
			flex-direction: row;
			align-items: center;
			gap: 2rem;
		}

		nav > ul {
			display: flex;
			flex-direction: row;
			justify-content: center;
			flex: 1;
			gap: 2rem;

			a {
				color: var(--header-link);
				text-decoration: none;
				text-transform: uppercase;
				transition: color 0.2s ease;
			}

			a:hover,
			a:focus-visible {
				color: var(--header-link-hover);
			}
		}
	}

	main {
		grid-area: main;

		h1 {
			font-size: 1.25rem;
			padding: 1.5rem 0;
		}
	}

	#sidebar {
		grid-area: aside;

		background: var(--entry-checked-bg);
		color: var(--entry-checked-text);
		border: 1px solid var(--select-border);
		border-radius: 1.35rem;
		padding: 1rem;
		height: min-content;

		position: sticky;
		top: 2rem;
		margin-top: 5rem;

		display: flex;
		flex-direction: column;
		gap: 1rem;
	}

	.sidebar-header {
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	#filter {
		display: flex;
		flex-direction: row;
		gap: 1rem;
		align-items: center;
	}

	.theme-toggle {
		border: 1px solid var(--select-border);
		background: var(--select-bg);
		border-radius: 9999px;
		padding: 0.25rem;
		gap: 0.25rem;
		backdrop-filter: blur(10px);
		display: flex;
		transition: border-color .2s ease;
	}

	.theme-toggle:hover,
	.theme-toggle:focus-within {
		border-color: var(--select-hover-border);
	}

	.theme-toggle label {
		display: flex;
		align-items: center;
		justify-content: center;
		padding: 0.35rem;
		border-radius: 50%;
		cursor: pointer;
		color: var(--select-text);
		transition: background 0.2s, color 0.2s, transform 0.2s;
	}

	.theme-toggle label:hover,
	.theme-toggle label:focus-visible {
		background: var(--option-hover-bg);
	}

	.theme-toggle label:has(input:checked) {
		background: var(--select-open-bg);
		color: var(--select-open-text);
		box-shadow: 0 2px 5px var(--picker-shadow);
	}

	.theme-toggle input {
		display: none;
	}

	.visually-hidden {
		position: absolute;
		width: 1px;
		height: 1px;
		padding: 0;
		margin: -1px;
		overflow: hidden;
		clip: rect(0, 0, 0, 0);
		border: 0;
	}

	@media (max-width: 799px) {
		body {
			grid-template-columns: 1fr;
			grid-template-areas: "header" "main";
		}

		#header #main-nav {
			position: fixed; top: 0; left: 0; bottom: 0;
			width: 80vw; max-width: 300px; background: var(--bg-color);
			z-index: 1000; padding: 2rem;
			transform: translateX(-100%); transition: transform 0.3s ease;
			border-right: 1px solid var(--select-border);
			display: flex; flex-direction: column; gap: 2rem;
		}

		#header #main-nav.open {
			transform: translateX(0);
			box-shadow: 0 0 50px rgba(0,0,0,0.5);
		}

		#header #main-nav > ul {
			flex-direction: column;
		}

		#header #main-nav > ul li {
			padding: 1rem 0;
			border-bottom: 1px solid var(--select-border);
		}

		#header #main-nav > ul li:last-child {
			border-bottom: none;
		}
		
		#header #main-nav > ul a {
			font-size: 1.25rem;
		}

		#header #main-nav .theme-toggle {
			margin-top: auto;
		}

		#sidebar {
			position: fixed !important; top: 0 !important; right: 0 !important; bottom: 0 !important;
			width: 90vw !important; max-width: 400px !important; z-index: 1000 !important;
			transform: translateX(100%); transition: transform 0.3s ease !important;
			overflow-y: auto !important; border-radius: 0 !important;
			border-left: 1px solid var(--select-border) !important;
			height: 100vh !important;
		}

		#sidebar.open {
			transform: translateX(0) !important;
			box-shadow: 0 0 50px rgba(0,0,0,0.5) !important;
		}

		#header {
			justify-content: space-between;
		}

		#filter {
			flex-wrap: wrap;
			justify-content: center;
		}

		#filter legend {
			display: none;
		}
	}
}

@layer base {
	:root {
		color-scheme: light dark;
		--bg-color: light-dark(#e4e4e7, #333);
		--text-color: light-dark(#111, white);
		--brand-btn-bg: light-dark(#10854b, #10854b);
		--brand-btn-text: light-dark(white, white);
		--brand-btn-hover-bg: light-dark(color-mix(in srgb, #c4ff8d 40%, #10854b), #c4ff8d);
		--brand-btn-hover-text: light-dark(#f8f9fa, #095732);
		--entry-bg: light-dark(rgb(255 255 255 / 0.7), rgb(0 0 0 / 0.35));
		--entry-border: light-dark(rgb(0 0 0 / 0.1), rgb(255 255 255 / 0.15));
		--entry-shadow: light-dark(rgb(0 0 0 / 0.1), rgb(0 0 0 / 0.35));
		--entry-checked-bg: light-dark(#fff, rgb(255 255 255 / 0.15));
		--entry-checked-text: light-dark(#095732, #c4ff8d);
		--entry-checked-border: light-dark(#333, #666);
		--entry-hover-shadow: light-dark(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.2));
		--pill-bg: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.2));
		--weather-bg: light-dark(white, rgb(255 255 255 / 0.1));
		--weather-text: light-dark(#095732, #c4ff8d);
		--weather-shadow: light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.2));
		--select-bg: light-dark(rgb(255 255 255 / 0.7), rgb(0 0 0 / 0.35));
		--select-text: light-dark(#111, white);
		--select-border: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.15));
		--select-open-bg: light-dark(white, #222);
		--select-open-text: light-dark(#111, white);
		--select-hover-border: light-dark(#333, #666);
		--picker-bg: light-dark(white, #222);
		--picker-shadow: light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3));
		--picker-border: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1));
		--option-text: light-dark(#111, white);
		--option-hover-bg: light-dark(#f0f0f0, #333);
		--option-border: light-dark(#ccc, #555);
		--option-checked-bg: light-dark(#10854b, #10854b);
		--option-checked-shadow: light-dark(white, #222);
		--header-h1: light-dark(#10854b, #c7fe8e);
		--header-link: light-dark(#111, white);
		--header-link-hover: light-dark(color-mix(in srgb, #c4ff8d 40%, #10854b), #c4ff8d);
		--sidebar-bg: light-dark(#fff, rgb(30 30 30 / 0.8));
		--sidebar-text: light-dark(#095732, #c4ff8d);
	}

	html {
		background-color: var(--bg-color);
		color: var(--text-color);

		background:
			linear-gradient(light-dark(rgb(255 255 255 / 0.5), rgb(0 0 0 / 0.25)), light-dark(rgb(255 255 255 / 0.5), rgb(0 0 0 / 0.25))),
			var(--bg-color) url(https://picsum.photos/id/10/400/200?blur) no-repeat center / cover;
		background-attachment: fixed;

		font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, Adwaita Sans, Cantarell, Ubuntu, roboto, noto, helvetica, arial, sans-serif;
	}
}


@layer reset {
	* {
		padding: 0;
		margin: 0;
		box-sizing: border-box;
	}

	ul[class] {
		list-style: none;
	}

	html {
		height: 100%;
		background: var(--bg-color);
		overflow-x: hidden;
	}
}

@layer warnings {

	.warnings {
		position: fixed;
		top: 6em;
		left: 1em;
		right: 1em;
		view-transition-name: warning; /* Don’t transition this with the rest of the stuff */
    z-index: 9999;

		@media (max-width: 799px) {
			top: unset;
			bottom: 1em;
		}
	}

	@layer warning {
		.warning {
			box-sizing: border-box;
			padding: 1em;
			margin: 1em auto;
			border: 1px solid #ccc;
			background: rgba(255 255 205 / 0.9);
			display: none;
            color:black;
			text-align: center;
			width: fit-content;
			max-width: 90vw;
			font-weight: bold;
		}

		.warning > :first-child {
			margin-top: 0;
		}

		.warning > :last-child {
			margin-bottom: 0;
		}

		.warning a {
			color: blue;
		}
		.warning--info {
			border: 1px solid #123456;
			background: rgb(205 230 255 / 0.8);
		}
		.warning--alarm {
			border: 1px solid red;
			background: #ff000010;
		}
	}
}
