/*
 * Theme Name: Lou
 * Description: Custom theme for Lou multipercussion ensemble
 * Version: 0.3.0
 * Author: nevaforget
 *
 * Stylesheet structure:
 *   1.  Fonts                  @font-face declarations (self-hosted)
 *   2.  Design tokens          CSS custom properties
 *   3.  Reset                  Box-sizing, padding, margin
 *   4.  Base typography        html, a, p, strong, hr, ul
 *   5.  Utilities              .screen-reader-text, .wrapper
 *   6.  Layout                 body grid, body.home, body:not(.home)
 *   7.  Page content           main.content
 *   8.  Header / Hero / Nav    .hero (+ .navbar, .menu, .burger, overlay)
 *   9.  Buttons                .btn, wpforms button
 *  10.  Headlines              .headline
 *  11.  Teasers                .teaser, .main-teasers, .who-is-lou
 *  12.  Archive                .archive-list, .archive-item, .concert-banner
 *  13.  Calendar widget        .date-as-cal
 *  14.  Tags / Termine         .tags, .termine, ul.compact
 *  15.  Pagination             .pagination
 *  16.  Forms                  .wpforms-*
 *  17.  Footer                 footer.page-footer
 *  18.  Misc                   .logo, .the-heart, .social-links
 *  19.  Konzert-Galerie        .wp-block-gallery.eindruecke
 */


/* ============================================================
 * 1. FONTS
 * Josefin Sans = body. Josefin Slab = headlines (currently off).
 * Files self-hosted under assets/fonts/, served via filemtime
 * cache-busted enqueue in functions.php.
 * ============================================================ */

@font-face {
	font-family: 'Josefin Sans';
	src: url('assets/fonts/josefin-sans-latin.woff2') format('woff2');
	font-weight: 100 700;
	font-style: normal;
	font-display: swap;
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Josefin Sans';
	src: url('assets/fonts/josefin-sans-latin-ext.woff2') format('woff2');
	font-weight: 100 700;
	font-style: normal;
	font-display: swap;
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
	font-family: 'Josefin Sans';
	src: url('assets/fonts/josefin-sans-italic-latin.woff2') format('woff2');
	font-weight: 100 700;
	font-style: italic;
	font-display: swap;
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Josefin Sans';
	src: url('assets/fonts/josefin-sans-italic-latin-ext.woff2') format('woff2');
	font-weight: 100 700;
	font-style: italic;
	font-display: swap;
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Josefin Slab: only latin subset published — Umlauts work,
   slavic accents fall back to next stack font. */
@font-face {
	font-family: 'Josefin Slab';
	src: url('assets/fonts/josefin-slab-latin.woff2') format('woff2');
	font-weight: 100 700;
	font-style: normal;
	font-display: swap;
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Josefin Slab';
	src: url('assets/fonts/josefin-slab-italic-latin.woff2') format('woff2');
	font-weight: 100 700;
	font-style: italic;
	font-display: swap;
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* ============================================================
 * 2. DESIGN TOKENS
 * ============================================================ */

:root {
	--site-spacing: 1rem;
	--color-medium-gray: #D9D9D9;
	--color-text: var(--color-accent-0);
	--color-off-white: #f7f0f4;
	--color-accent-0: #141e28;

	--color-accent-1: #bfd4e8;
	--color-accent-2: #FFF8E6;

	--color-accent-3: #FFE3AA;
	--color-accent-4: #e1ecf5;

	--border-radius: 10px;

	@media (min-width: 801px) {
		--site-spacing: 1.5rem;
	}
}


/* ============================================================
 * 3. RESET
 * ============================================================ */

*,
*::before,
*::after {
	box-sizing: border-box;
	padding: 0;
	margin: 0;
}


/* ============================================================
 * 4. BASE TYPOGRAPHY
 * ============================================================ */

html {
	font-family: "Josefin Sans";
	color: var(--color-text);
	background: var(--color-off-white);
	font-size: 1.25rem;
	line-height: 1.6;
}

/* Headlines: experimenting with Josefin Slab — currently off. */
/*h1,
h2,
h3,
h4,
h5,
h6 {
	font-family: "Josefin Slab";
	font-weight: 500;
}*/

a {
	color: var(--color-text);

	&.nostyle {
		text-decoration: none;
		color: inherit;
	}
}

p {
	margin-bottom: 1rem;

	&:last-child {
		margin-bottom: 0;
	}
}

strong {
	font-weight: 600;

	&.bolder {
		font-weight: 700;
	}
}

hr {
	height: 2px;
	background: var(--color-accent-0);
	border: none;

	/* Section divider: a horizontal line interrupted in the middle
	   by a centered solid dot. Achieved with a clipped gradient
	   background and an absolutely positioned ::after circle. */
	&.with-dot {
		position: relative;
		height: 12px;
		transform: translateY(50%);

		background:
			linear-gradient(to right,
				var(--color-accent-0) 0,
				var(--color-accent-0) calc(50% - 12px),
				transparent calc(50% - 12px),
				transparent calc(50% + 12px),
				var(--color-accent-0) calc(50% + 12px),
				var(--color-accent-0) 100%) no-repeat center / 100% 2px;

		&::after {
			content: '';
			position: absolute;
			left: 50%;
			top: 50%;
			width: 12px;
			height: 12px;
			background: var(--color-accent-0);
			border-radius: 50%;
			transform: translate(-50%, -50%);
		}
	}
}

ul {
	list-style-position: inside;

	&.menu {
		list-style: none;
		display: flex;
		flex-direction: column;
		gap: var(--site-spacing);
		font-weight: bold;
		font-size: 1rem;

		a {
			text-decoration-thickness: 2px;
			letter-spacing: 2px;
			text-transform: uppercase;
			font-weight: 300;
			text-decoration: none;
		}

		/* Underline animates from 0 → full width on hover and
		   stays full-width for the current item. */
		.menu-item-label {
			position: relative;
			display: inline-block;

			&::after {
				content: "";
				position: absolute;
				top: calc(100%);
				left: 0;
				width: 0;
				height: 2px;
				background: var(--color-accent-0);
				transition: width 300ms ease-in-out;
			}
		}

		a:hover .menu-item-label::after {
			width: 100%;
		}

		.current-menu-item .menu-item-label::after {
			width: 100%;
		}
	}
}


/* ============================================================
 * 5. UTILITIES
 * ============================================================ */

/* Visually hidden but readable by screen readers.
   Do NOT replace with display:none — that drops the element
   from the accessibility tree entirely. */
.screen-reader-text {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	width: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	white-space: nowrap;
	word-wrap: normal !important;
}

.wrapper {
	max-width: 1600px;
	margin: 0 auto;

	&.with-padding {
		padding-left: var(--site-spacing);
		padding-right: var(--site-spacing);
	}

	&.with-double-padding {
		padding-left: calc(var(--site-spacing)*2);
		padding-right: calc(var(--site-spacing)*2);
	}
}


/* ============================================================
 * 6. LAYOUT
 * Body grid keeps the footer at the bottom even on short pages.
 * ============================================================ */

body {
	min-height: 100vh;
	display: grid;
	grid-template-rows: 1fr auto;
}

body.home {
	.hero {
		min-height: 400px;
		margin-bottom: 0;

		.hero-img {
			object-position: center;
		}

		@media (min-width: 801px) {
			min-height: 960px;
		}
	}
}

body:not(.home) {
	main.wrapper {
		max-width: 960px;
		margin-top: -2.1rem;
	}
}


/* ============================================================
 * 7. PAGE CONTENT
 * Editorial styles for inner pages (page.php / single.php).
 * ============================================================ */

main {
	&.content {
		h1 {
			display: inline-flex;
			background: var(--color-accent-2);
			margin-bottom: calc(var(--site-spacing)*2);
		}

		figure {
			margin-bottom: 1rem;
		}

		h2,
		h3,
		h4,
		h5,
		h6 {
			margin-bottom: 1rem;
		}

		.archive-item-text {
			hr {
				/*			height: 2px;
			background: var(--color-accent-0);*/
				margin: var(--site-spacing) 0;
			}

		}

		.event-details {
			display: flex;
			flex-direction: column;
			gap: var(--site-spacing);
		}


	}
}

article {
	&.content {
		hr {
			margin: calc(var(--site-spacing)*2) 0;
		}
	}
}

/* ============================================================
 * 8. HEADER / HERO / NAVIGATION
 * The .hero block holds both the cover image and the fixed
 * navbar overlay. .full breaks out of the wrapper-constraint.
 * ============================================================ */

.hero {
	position: relative;
	overflow: hidden;
	min-height: 200px;
	padding-bottom: var(--site-spacing);
	border-radius: var(--border-radius);

	.hero-img {
		position: absolute;
		inset: 0;
		width: 100%;
		height: 100%;
		object-fit: cover;
		object-position: top center;
		z-index: -1;
	}

	@media (min-width: 801px) {
		padding: var(--site-spacing);
		max-width: 1600px;
		margin: 0 auto;
	}

	@media (min-width: 1601px) {
		margin-top: var(--site-spacing);
	}

	/* Full-bleed variant: breaks out of .wrapper's max-width via
	   width:100vw + negative half-margin trick. */
	&.full {
		width: 100vw;
		margin-left: calc(50% - 50vw);
		border-radius: 0;

		@media (min-width: 801px) {
			padding: 0;
			padding-bottom: var(--site-spacing);
			max-width: none;
			margin-left: calc(50% - 50vw);
		}

		@media (min-width: 1601px) {
			margin-top: 0;
		}
	}

	.navbar {
		padding: 0;
		display: flex;
		justify-content: space-between;
		align-items: center;
		position: fixed;
		width: 100%;
		top: 0;
		left: 0;
		z-index: 9999;
		isolation: isolate;
		transition: 300ms all ease-in-out;
		overflow: hidden;

		&.hide {
			@media (max-width: 1101px) {
				opacity: 0;
				visibility: hidden;
				transform: translateY(-100%);
			}
		}

		&::before {
			content: '';
			position: absolute;
			top: 0;
			bottom: 0;
			left: 50%;
			transform: translateX(-50%);
			width: 100%;
			background: var(--color-accent-1);
			z-index: -1;
			transition: width 300ms ease-in-out;
		}

		@media (min-width: 1101px) {
			width: calc(100vw - var(--site-spacing)*2);
			left: 50%;
			transform: translateX(-50%);
			top: calc(var(--site-spacing));
			border-radius: var(--border-radius);
		}

		@media (min-width: 1601px) {
			width: calc(1600px - var(--site-spacing)*2);
			top: calc(var(--site-spacing)*2);
		}

		.logo {
			/*max-width: 200px;*/
			text-decoration: none;
			font-weight: bold;

			display: inline-flex;
			flex-direction: column;
			align-items: flex-start;
			gap: .3rem;
			color: var(--color-text);
			letter-spacing: 2px;
			text-transform: uppercase;
			line-height: 0.7rem;
			font-size: 0.7rem;
			background: var(--color-accent-3);
			padding: 1rem var(--site-spacing);

			br {
				display: none;
			}

			@media (min-width: 501px) {
				flex-direction: row;
				align-items: center;
				line-height: 1rem;
				font-size: 0.9rem;
				gap: .7rem;

				br {
					display: inline;
				}
			}

			@media (min-width: 1101px) {
				padding: var(--site-spacing);
			}

			svg {
				height: auto;
				max-height: 1rem;
				width: auto;
				display: block;

				@media (min-width: 501px) {
					max-height: 2rem;
				}

				@media (min-width: 1101px) {
					max-width: none;
				}

			}
		}

		.social-links {
			background: var(--color-accent-2);
			padding: calc(var(--site-spacing)*2) var(--site-spacing) 1rem;
			flex: 1;
			flex-direction: column;
			align-self: stretch;
			align-items: center;
			justify-content: flex-start;

			@media (min-width: 1101px) {
				padding: 1rem var(--site-spacing);
				flex: initial;
				flex-direction: row;
				align-items: center;

				.handle {
					display: none;
				}
			}
		}

		/* Mobile-only burger. Hidden ≥1101px. */
		.burger {
			display: flex;
			flex-direction: column;
			justify-content: center;
			gap: 6px;
			width: 36px;
			height: 36px;
			background: none;
			border: none;
			cursor: pointer;
			padding: 0;
			margin-right: var(--site-spacing);
			z-index: 2;

			span {
				display: block;
				width: 100%;
				height: 3px;
				background: var(--color-accent-0);
				border-radius: 2px;
				transition: 300ms all ease-in-out;
				transform-origin: center;
			}

			&.active {
				span:nth-child(1) {
					transform: translateY(9px) rotate(45deg);
				}

				span:nth-child(2) {
					opacity: 0;
				}

				span:nth-child(3) {
					transform: translateY(-9px) rotate(-45deg);
				}
			}

			@media (min-width: 1101px) {
				display: none;
			}
		}

		.menu-main-container {
			.menu {
				font-size: 1.2rem;
				text-transform: uppercase;
				font-weight: 300;
				letter-spacing: 2px;

				a {

					text-decoration: none;
				}
			}

			@media (min-width: 1101px) {
				.menu {
					flex-direction: row;
					font-size: 1rem;
				}
			}
		}

		.nav-group {
			display: none;

			@media (min-width: 1101px) {
				display: flex;
				align-items: center;
				align-self: stretch;
				gap: 1rem;
				margin-left: auto;
			}
		}

		.nav-divider {
			width: 100%;
			margin: 0;
			margin-top: calc(var(--site-spacing) * 2);

			@media (min-width: 1101px) {
				display: none;
			}
		}

		/* Mobile menu overlay: triple-state (opening / open / closing)
		   drives a fade + slide animation handled by nav.js. */
		.nav-group.overlay-opening,
		.nav-group.overlay,
		.nav-group.overlay-closing {
			display: flex;
			flex-direction: column;
			align-items: center;
			gap: 0;
			position: fixed;
			top: 0;
			bottom: 0;
			left: 0;
			right: 0;
			background: var(--color-accent-1);
			z-index: 1;
			width: 100%;
			padding-top: calc(var(--site-spacing)*4);
			opacity: 1;
			transform: translateY(0);
			transition: opacity 300ms ease-in-out, transform 300ms ease-in-out;

			.menu {
				width: 100%;
				display: flex;
				flex-direction: column;
				justify-content: center;
				align-items: center;

				li {
					width: 100%;
					text-align: center;

					a {
						display: block;
					}
				}
			}
		}

		.nav-group.overlay-opening,
		.nav-group.overlay-closing {
			opacity: 0;
			transform: translateY(-100%);
		}
	}
}

/* When the page has scrolled past the threshold, navbar loses its
   border-radius constraint and becomes flush at the top.
   Toggled by scroll.js on the body element. */
body.scroll-break-passed {

	.navbar {
		overflow: visible;

		@media (min-width: 1101px) {
			top: 0;
			padding-left: 0;
			padding-right: 0;
		}

		&::before {
			@media (min-width: 1101px) {
				width: 100vw;
			}
		}
	}
}


/* ============================================================
 * 9. BUTTONS
 * .btn doubles for native wpforms submit buttons.
 * Trailing arrow is the SVG mask pattern reused for pagination.
 * ============================================================ */

.btn,
.wpforms-form button,
.wp-block-buttons .wp-block-button__link {
	border: 2px solid var(--color-text);
	text-transform: uppercase;
	font-weight: 700;
	text-decoration: none;
	padding: 0.7rem 0.9rem 0.5rem 0.9rem;
	transition: 300ms all ease-in-out;
	font-size: 0.9rem;
	line-height: 0.9rem;
	letter-spacing: 2px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	border-radius: var(--border-radius);
	overflow: hidden;
	cursor: pointer;

	&:hover {
		background: var(--color-off-white);
	}

	&:after {
		content: "";
		display: inline-block;
		width: 18px;
		height: 14px;
		background-color: currentColor;
		mask: url('assets/images/arrow-right.svg') no-repeat center / contain;
		-webkit-mask: url('assets/images/arrow-right.svg') no-repeat center / contain;
		transform: translateY(-2px);
	}

	&.small {
		font-size: 0.7rem;
		line-height: 0.8rem;
		letter-spacing: 2px;
		padding: 0.5rem 0.6rem 0.35rem 0.6rem;
		gap: 0.4rem;

		&:after {
			width: 12px;
			height: 10px;
			transform: translateY(-2px);
		}
	}
}

/* WP-Block-Editor-Buttons übernehmen den .small-Look, damit sie im
   Content-Flow nicht wie ein prominenter CTA wirken. */
.wp-block-buttons .wp-block-button__link {
	font-size: 0.7rem;
	line-height: 0.8rem;
	padding: 0.5rem 0.6rem 0.35rem 0.6rem;
	gap: 0.4rem;

	&:after {
		width: 12px;
		height: 10px;
	}
}


/* ============================================================
 * 10. HEADLINES
 * Section heading with a bullet-prefix. Used in teasers and
 * standalone above content blocks.
 * ============================================================ */

.headline {
	padding: 1.2rem 1.2rem 0.95rem 1.2rem;
	/*border: 2px solid var(--color-text);*/
	font-size: 1.6rem;
	display: flex;
	align-items: center;
	line-height: 1.8rem;
	border-radius: var(--border-radius);
	overflow: hidden;
	/*justify-content: space-between;*/


	/*	&:before {
		content: "";
		display: inline-block;
		flex-shrink: 0;
		width: calc(var(--site-spacing)/2);
		height: calc(var(--site-spacing)/2);
		border-radius: 50%;
		background: var(--color-text);
		margin-right: 1rem;
		transform: translateY(-3px);
	}*/

	/*	&:after {
		content: "";
		display: inline-block;
		flex-shrink: 0;
		width: calc(var(--site-spacing)/2);
		height: calc(var(--site-spacing)/2);
		border-radius: 50%;
		background: var(--color-text);
		margin-left: .5rem;
		transform: translateY(-3px);
	}*/
}


/* ============================================================
 * 11. TEASERS
 * .teaser is the generic card. .main-teasers is the front-page
 * row pulling cards above the hero seam (negative margin-top).
 * .who-is-lou is a dedicated full-bleed teaser variant.
 * ============================================================ */

.wp-block-image {
	border-radius: var(--border-radius);
	overflow: hidden;
}

.teaser {
	border-radius: var(--border-radius);
	overflow: hidden;
	background: var(--color-accent-3);
	/*border: 2px solid var(--color-accent-0);*/

	.headline {
		border-radius: 0;
		border: none;
		border-bottom: 2px solid var(--color-accent-0);
	}

	.body {
		padding: 2.4rem 1.2rem 2.3rem 1.2rem;

		h2 {
			margin-bottom: 0.4rem;
		}
	}
}

.main-teasers {
	display: flex;
	flex-direction: column;
	gap: var(--site-spacing);
	margin-top: -5rem;
	margin-bottom: calc(var(--site-spacing)*3);

	@media (min-width: 801px) {
		margin-top: -9rem;
	}

	.teaser {

		&.live-teaser {
			background: var(--color-accent-2);

			.title {
				font-size: 1.2rem;
				line-height: 1.4rem;
				margin-bottom: var(--site-spacing);
			}

			.next {
				a {
					display: flex;
					flex-direction: row;
					gap: 1rem;
					font-size: 1.2rem;

					@media (min-width: 501px) {
						/*align-items: center;*/
						flex-direction: row;
					}

					img {
						min-width: 75px;
						max-width: 100px;
						width: 100%;
						height: auto;
						border-radius: var(--border-radius);

						@media (min-width: 501px) {
							width: auto;
							height: auto;
						}

						@media (min-width: 701px) {
							max-width: 200px;
						}
					}

					.arrow {
						transition: 150ms all ease-in-out;
					}

					.date {
						font-weight: 300;
					}

					&:hover {
						.arrow {
							transform: translateX(.5rem);
						}
					}
				}
			}
		}

		&.contact-teaser {
			background: var(--color-accent-2);
		}
	}

	@media (min-width: 1001px) {
		flex-direction: row;
		align-items: flex-start;

		.teaser {
			width: 50%;
		}
	}
}

.who-is-lou {
	display: flex;
	flex-direction: column;
	isolation: isolate;
	border-radius: var(--border-radius);
	overflow: hidden;

	/* Mobile: image block stacks above teaser. ≥801px the image
	   becomes an absolute background and the teaser overlays
	   bottom-right at half-width. */
	.who-is-lou-bg {
		width: 100%;
		height: 320px;
		object-fit: cover;
		object-position: center;
	}

	.teaser {
		background: var(--color-accent-1);
		border-radius: 0;
	}

	@media (min-width: 801px) {
		position: relative;
		min-height: 660px;
		flex-direction: row;
		justify-content: flex-end;
		align-items: flex-end;

		.who-is-lou-bg {
			position: absolute;
			inset: 0;
			height: 100%;
			z-index: -1;
		}

		.teaser {
			max-width: 50%;
			border-top-left-radius: var(--border-radius);
		}
	}
}


/* ============================================================
 * 12. ARCHIVE
 * Listing pages (e.g. archive-konzerte.php).
 * ============================================================ */

.concert-banner {
	img {
		width: 100%;
		height: auto;
	}
}

.archive-list {
	display: flex;
	flex-direction: column;
	gap: calc(var(--site-spacing)*2);
}

.archive-item {
	display: flex;
	flex-direction: column;
	gap: var(--site-spacing);
	align-items: flex-start;
	border-radius: var(--border-radius);
	background: var(--color-accent-4);
	padding: var(--site-spacing);
	max-width: calc(100vw - var(--site-spacing)*2);

	@media (min-width: 601px) {
		flex-direction: row;
	}

	h2 {
		a {
			text-decoration: none;
		}
	}

	.archive-item-body {
		flex: 1;
		min-width: 0;
	}

	.archive-item-header {
		display: flex;
		flex-direction: column;
		gap: 1rem;
		margin-bottom: 1rem;

		@media (min-width: 401px) {
			flex-direction: row;
		}

		.archive-item-header-group {
			display: flex;
			flex-direction: column;
			gap: .5rem;
			order: -1;

			@media (min-width: 401px) {
				order: unset;
				padding-top: .4rem;
			}
		}

		h2 {
			margin-bottom: 0;
			line-height: 34px;
		}

		.tags {
			margin-bottom: 0;
		}
	}

	.archive-item-media {
		display: flex;
		flex-direction: column;
		gap: 1rem;
		align-items: stretch;

		@media (min-width: 801px) {
			flex-direction: row;
			align-items: flex-start;
		}
	}

	.archive-item-thumb {
		flex: 0 0 auto;
		border-radius: var(--border-radius);
		overflow: hidden;

		img {
			display: block;
			width: 100%;
			height: auto;

			@media (min-width: 801px) {
				width: auto;
				max-width: 300px;
			}
		}
	}

	.archive-item-text {
		flex: 1;
		min-width: 0;
	}
}


/* ============================================================
 * 13. CALENDAR WIDGET
 * Pill-shaped date display (month / day / year stacked).
 * ============================================================ */

.date-as-cal {
	display: inline-flex;
	flex-direction: column;
	align-items: stretch;
	text-align: center;
	width: 64px;
	border: 2px solid var(--color-accent-0);
	background: var(--color-off-white);
	overflow: hidden;
	line-height: 1;
	font-weight: 600;
	border-radius: var(--border-radius);

	.month {
		background: var(--color-accent-0);
		color: var(--color-off-white);
		text-transform: uppercase;
		font-size: 12px;
		letter-spacing: 1px;
		padding: 5px 0 3px;
	}

	.day {
		font-size: 30px;
		padding: 8px 0 4px;
		background: var(--color-off-white);
	}

	.year {
		font-size: 11px;
		font-weight: 400;
		padding: 0 0 5px;
		background: var(--color-off-white);
	}
}


/* ============================================================
 * 14. TAGS / TERMINE
 * Inline pill lists. .small variant for cramped contexts.
 * ============================================================ */

.tags,
.termine {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 1rem;
	margin-bottom: var(--site-spacing);

	li {
		background: var(--color-accent-2);
		padding: 0.25rem 0.5rem 0.1rem 0.5rem;
		/*border: 2px solid var(--color-accent-0);*/
		border-radius: var(--border-radius);
		overflow: hidden;
	}

	&.small {
		gap: 0.5rem;
		margin-bottom: 1rem;
		font-size: 0.7rem;
		line-height: 0.9rem;

		li {
			padding: 0.15rem 0.4rem 0.05rem 0.4rem;
		}
	}
}

ul.compact {
	li {
		line-height: 1.2rem;
	}
}


/* ============================================================
 * 15. PAGINATION
 * the_posts_pagination() output. Prev/next markers reuse the
 * arrow-right SVG via mask + scaleX(-1) for the prev side.
 * ============================================================ */

.pagination {
	margin-top: calc(var(--site-spacing)*2);
	display: flex;
	justify-content: center;

	a {
		text-decoration: none;

		&.page-numbers {
			&:hover {
				background: var(--color-accent-3);
			}
		}
	}

	.current {
		background: var(--color-accent-2);
	}

	.nav-links {
		padding: 0 1rem;
		display: flex;
		align-items: center;
		gap: 1.5rem;
	}

	.page-numbers {
		padding: 0 0.5rem;
		border-radius: var(--border-radius);
		/*border: 2px solid var(--color-accent-0);*/
		display: inline-block;
		height: 1.7rem;

		/* Numeric items get a baseline nudge so digits sit
		   optically centered inside the rounded box. */
		&:not(.next):not(.prev) {
			padding-top: 0.15rem;
		}
	}

	.prev,
	.next {
		display: inline-flex;
		align-items: center;
	}

	.prev::before,
	.next::after {
		content: "";
		display: block;
		width: 18px;
		height: 14px;
		background-color: currentColor;
		mask: url('assets/images/arrow-right.svg') no-repeat center / contain;
		-webkit-mask: url('assets/images/arrow-right.svg') no-repeat center / contain;
	}

	.prev::before {
		transform: scaleX(-1);
	}
}


/* ============================================================
 * 16. FORMS
 * wpforms styling. Buttons live with the .btn block above.
 * ============================================================ */

.wpforms-form {

	input,
	textarea,
	select {
		height: 2rem;
		font-size: .8rem;
	}

	input {
		line-height: 2rem;
	}
}

.wpforms-confirmation-container {
	background: var(--color-accent-2);
	padding: var(--site-spacing);
	border-bottom: 2px solid var(--color-accent-0);
}


/* ============================================================
 * 17. FOOTER
 * Multi-column block layout fed by the WP block editor.
 * .parent-1 / .parent-2 mirror the editor's group structure.
 * ============================================================ */

footer.page-footer {
	background: var(--color-accent-1);
	margin-top: calc(var(--site-spacing)*3);
	margin-left: 0;
	margin-right: 0;
	justify-self: center;
	width: 100%;
	/*border: 2px solid var(--color-accent-0);*/
	border-radius: var(--border-radius);
	overflow: hidden;

	@media (min-width: 1601px) {
		margin-bottom: var(--site-spacing);
	}

	.menu {

		gap: 0.5rem;

		a {
			font-size: 0.8rem;
		}

		@media (min-width: 601px) {
			flex-direction: row;
			gap: var(--site-spacing);
		}
	}

	.menu-item-label::after {
		top: auto;
		bottom: 0;
	}

	.logo {
		/*margin-bottom: 1rem;*/
		text-align: center;
		display: flex;

		@media (min-width: 601px) {
			text-align: left;
		}

		svg {
			max-width: 200px;
			height: auto;
			width: 100%;

			@media (min-width: 601px) {
				max-width: 240px;
			}

		}

	}

	.parent-1 {
		display: flex;
		flex-direction: column;
		border-bottom: 2px solid var(--color-accent-0);

		.group:first-child {
			border-bottom: 2px solid var(--color-accent-0);
		}

		.group:not(:first-child) {
			flex: 1;
		}

		.group-1 {
			display: flex;
			flex-direction: column;

			.block:first-child {
				display: flex;
				flex-direction: column;
				gap: calc(var(--site-spacing)/2);

				@media (min-width: 401px) {
					flex-direction: row;
					align-items: center;
					gap: var(--site-spacing);
				}

				@media (min-width: 1101px) {
					flex-direction: column;
					gap: calc(var(--site-spacing)/2);
				}
			}

			.block:last-child {
				flex: 1;
				background-color: var(--color-accent-3);
			}
		}

		.group-2 {
			flex: 1;
			display: flex;
			flex-direction: column;

			.row {
				display: flex;
				flex-direction: column;
				border-bottom: 2px solid var(--color-accent-0);

				.block:first-child {
					border-bottom: 2px solid var(--color-accent-0);
				}
			}

			.block {
				.menu {
					display: inline-flex;
					padding: var(--site-spacing);
				}
			}

			.block:last-child {
				background: var(--color-accent-2);
			}
		}

		@media (min-width: 801px) {
			.group-2 .row {
				flex-direction: row;

				.block:first-child {
					border-bottom: none;
					border-right: 2px solid var(--color-accent-0);
				}

				.block:nth-child(2) {
					flex: 1;
					display: flex;
				}
			}
		}

		@media (min-width: 1101px) {
			flex-direction: row;

			.group:first-child {
				border-bottom: none;
				border-right: 2px solid var(--color-accent-0);
			}

			.group-2>.block:last-child {
				flex: 1;
				align-self: flex-start;
				border-right: 2px solid var(--color-accent-0);
				align-items: center;
				display: flex;
			}
		}
	}

	.parent-2 {
		.group-1 {
			display: flex;
			flex-direction: column;

			.block:first-child {
				border-bottom: 2px solid var(--color-accent-0);
			}

			.block:last-child {
				background: var(--color-accent-3);
				flex: 1;
			}

			@media (min-width: 1101px) {
				flex-direction: row;

				.block:first-child {
					border-bottom: none;
					border-right: 2px solid var(--color-accent-0);
				}
			}
		}
	}

	.block {
		padding: var(--site-spacing);

		&.no-padding {
			padding: 0;
		}
	}

	figure {
		font-weight: 300;
		max-width: 900px;

		blockquote {
			font-size: 1.1rem;
			line-height: 1.5rem;
			font-style: italic;

			@media (min-width: 801px) {
				font-size: 1.8rem;
				line-height: 2.5rem;
			}
		}

		figcaption {
			font-size: 0.95rem;
			text-align: right;

			@media (min-width: 801px) {
				font-size: 1.2rem;
			}
		}
	}
}


/* ============================================================
 * 18. MISC
 * ============================================================ */

.logo {
	display: inline-flex;
	align-items: center;
}

.the-heart {
	margin-right: .3em;
}

/* Standalone social-links list (footer + mobile overlay). The
   .navbar .social-links nested rule above adapts spacing for
   the desktop navbar context. */
.social-links {
	list-style: none;
	display: flex;
	align-items: center;
	gap: 1rem;
	padding: 0;
	margin: 0;

	a {
		display: flex;
		align-items: center;
		gap: 0.5rem;
		color: var(--color-text);
	}

	svg {
		display: block;
		width: 1.2rem;
		height: 1.2rem;
	}
}


/* ============================================================
 * 19. KONZERT-GALERIE
 * Server-rendered wp:gallery for the ACF "Eindrücke" field on
 * single-konzerte. Core gives every nested figure flex-grow: 1,
 * so a single item in an incomplete last row stretches to fill
 * the whole row width — even with explicit columns set, because
 * flex-grow overrides flex-basis when free space exists. The
 * one-line override below pins items to the basis core already
 * calculates from the columns-N class.
 * ============================================================ */

.wp-block-gallery.eindruecke.has-nested-images figure.wp-block-image {
	flex-grow: 0;
}