/* celloon Portfolio – Raster, Filter, Großansicht
 * Farben/Schrift lassen sich im Theme über diese Variablen anpassen. */
.celloon-portfolio {
	--cp-gap: 25px;
	--cp-muted: #b5b5b5;
	--cp-ink: #000;
	--cp-bg: #fff;
	--cp-track: .3em;
	display: block;
}

/* Filter ------------------------------------------------------------ */
.cp-filter ul {
	list-style: none;
	margin: 0 0 30px;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 6px 24px;
}
.cp-filter li { margin: 0; }
.cp-filter button {
	all: unset;
	cursor: pointer;
	color: var(--cp-muted);
	font-size: 13px;
	line-height: 1.5;
	letter-spacing: var(--cp-track);
	text-transform: uppercase;
	transition: color .2s ease;
	hyphens: manual;
}
.celloon-portfolio .cp-filter button:hover,
.celloon-portfolio .cp-filter button:focus { color: var(--cp-hover, #555); }
/* Aktive Kategorie: schwarz und kräftiger. Die Verstärkung per Kontur ändert die
   Textbreite nicht – dadurch springt nichts, auch nicht bei mehrzeiligen Einträgen. */
.celloon-portfolio .cp-filter button.is-active {
	color: var(--cp-ink);
	-webkit-text-stroke: .5px currentColor;
	text-shadow: 0 0 .01px currentColor;
}

/* Schutz gegen Button-Stile des Themes (z. B. Neve: schwarzer Hintergrund bei :hover) */
.celloon-portfolio button,
.celloon-portfolio button:hover,
.celloon-portfolio button:focus,
.celloon-portfolio button:active,
.cp-lightbox button,
.cp-lightbox button:hover,
.cp-lightbox button:focus,
.cp-lightbox button:active {
	background: transparent !important;
	border: 0 !important;
	border-radius: 0 !important;
	box-shadow: none !important;
}
.cp-filter button:focus-visible { outline: 1px solid var(--cp-ink); outline-offset: 4px; }

@media (max-width: 959px) {
	/* Mobil/Tablet: jede Kategorie in eigener Zeile */
	.cp-filter ul { flex-direction: column; flex-wrap: nowrap; gap: 0; margin-bottom: 36px; }
	.cp-filter li { margin-bottom: 16px; }
	.cp-filter li:last-child { margin-bottom: 0; }
}

@media (min-width: 960px) {
	.celloon-portfolio.has-filter {
		display: grid;
		grid-template-columns: 220px 1fr;
		gap: 0 40px;
		align-items: start;
	}
	.cp-filter { position: sticky; top: 100px; }
	.cp-filter ul { flex-direction: column; gap: 0; margin: 0; }
	.cp-filter li { margin-bottom: 30px; }
}

/* Raster (Blocksatz-Zeilen, Seitenverhältnisse bleiben erhalten) ------ */
.cp-grid {
	display: flex;
	flex-wrap: wrap;
	gap: var(--cp-gap);
}
.cp-item {
	position: relative;
	display: block;
	flex-grow: var(--ar);
	flex-basis: calc(var(--ar) * var(--cp-row));
	overflow: hidden;
	background: #f2f2f2;
	cursor: zoom-in;
	text-decoration: none;
	color: inherit;
}
.cp-item img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: var(--ar);
	object-fit: cover;
	transition: transform .5s ease, opacity .3s ease;
}
.cp-item:hover img { transform: scale(1.03); }
.cp-caption {
	position: absolute;
	inset: auto 0 0 0;
	padding: 10px 14px;
	background: rgba(255, 255, 255, .85);
	color: var(--cp-ink);
	font-size: 12px;
	line-height: 1.4;
	letter-spacing: .15em;
	text-transform: uppercase;
	opacity: 0;
	transform: translateY(100%);
	transition: all .25s ease;
}
.cp-item:hover .cp-caption,
.cp-item:focus-visible .cp-caption { opacity: 1; transform: none; }
.cp-item.is-hidden { display: none; }
/* Per Script berechnete Zeilen (exakter Blocksatz, letzte Zeile ungestreckt) */
.cp-grid.is-justified .cp-item { flex: 0 0 auto; }
.cp-spacer { flex-grow: 1000000; height: 0; }

@media (max-width: 600px) {
	.celloon-portfolio { --cp-gap: 12px; }
	.cp-item { flex-basis: 100%; }
	.cp-caption { opacity: 1; transform: none; position: static; background: transparent; padding: 8px 0 0; }
	.cp-item { background: transparent; }
}

/* Großansicht ------------------------------------------------------- */
.cp-lightbox {
	position: fixed;
	inset: 0;
	z-index: 100000;
	background: var(--cp-bg, #fff);
	display: grid;
	grid-template-rows: auto minmax(0, 1fr);
	padding: 0 100px 50px;
	opacity: 0;
	visibility: hidden;
	transition: opacity .25s ease, visibility .25s;
}
.cp-lightbox.is-open { opacity: 1; visibility: visible; }
.cp-lb-info {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 4px 10px;
	min-height: 100px;
	padding: 40px 60px 20px 0;
	line-height: 1.4;
	letter-spacing: 2.3px;
	text-transform: uppercase;
	font-size: 13px;
}
.cp-lb-title { color: var(--cp-ink, #000); font-weight: 700; text-transform: none; letter-spacing: 0; font-size: 14px; }
.cp-lb-album { color: #999; }
.cp-lb-count { color: #999; }
.cp-lb-stage {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-height: 0;
	padding: 10px;
	background: var(--cp-frame, #e1e1d4);
}
.cp-lb-view {
	position: relative;
	flex: 1 1 auto;
	min-height: 0;
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: hidden;
}
.cp-lb-stage img {
	display: block;
	min-height: 0;
	max-width: 100%;
	max-height: 100%;
	flex: 0 1 auto;
	object-fit: contain;
	transition: opacity .2s ease;
}
.cp-lb-stage img.is-loading { opacity: 0; }
.cp-lb-desc {
	flex: none;
	text-align: center;
	color: var(--cp-ink, #000);
	font-size: 13px;
	line-height: 20px;
	padding: 0 20px;
}
.cp-lb-desc[hidden] { display: none; }
.cp-lightbox button {
	all: unset;
	position: absolute;
	cursor: pointer;
	color: #000;
	opacity: .3;
	transition: opacity .2s;
	width: 48px;
	height: 48px;
	display: grid;
	place-items: center;
}
.cp-lightbox button:hover,
.cp-lightbox button:focus,
.cp-lightbox button:focus-visible { opacity: 1; color: #000; outline: none; }
.cp-lightbox button[hidden] { display: none; }
.cp-lightbox button svg { width: 24px; height: 24px; stroke: currentColor; fill: none; stroke-width: 1.5; transition: stroke-width .15s ease; }
.cp-lightbox button:hover svg,
.cp-lightbox button:focus-visible svg { stroke-width: 2.6; } /* beim Darüberfahren nur kräftiger */
.cp-lightbox .cp-lb-close { top: 26px; right: 88px; }
.cp-lightbox .cp-lb-prev { left: 26px; top: 50%; }
.cp-lightbox .cp-lb-next { right: 26px; top: 50%; }
body.cp-lb-lock { overflow: hidden; }

@media (max-width: 760px) {
	.cp-lightbox { padding: 0 0 70px; }
	.cp-lb-info { min-height: 0; padding: 20px 64px 14px 16px; }
	.cp-lb-stage { padding: 0 0 14px; }
	.cp-lightbox .cp-lb-close { top: 8px; right: 8px; }
	.cp-lightbox .cp-lb-prev,
	.cp-lightbox .cp-lb-next { top: auto; bottom: 12px; }
	.cp-lightbox .cp-lb-prev { left: 12px; }
	.cp-lightbox .cp-lb-next { right: 12px; }
}
