/**
 * Block layouts for Related Mic.
 *
 * Additive stylesheet: the legacy layouts (grid/list/compact/slider) stay in
 * public/css/related-mic-public.css untouched. This file adds the
 * two TMN-required layouts plus shared design tokens.
 *
 * Tokens default to theme inheritance (currentColor / inherit) so the blocks
 * pick up the site's typography and palette without hardcoded hex fights.
 *
 * Both layouts are 100% functional without JavaScript:
 *  - responsive-list: native vertical stack on narrow containers, native
 *    horizontal scroll (scroll-snap) on wide containers.
 *  - editorial-float: pure CSS float >=768px, normal in-flow block below.
 */

.related-mic-related-recipes,
.related-mic-editorial-float {
	--related-mic-gap: 1rem;
	--related-mic-radius: 8px;
	--related-mic-border-color: rgba(128, 128, 128, 0.25);
	--related-mic-meta-color: inherit;
	--related-mic-card-bg: transparent;
	--related-mic-focus-color: currentColor;
	--related-mic-title-size: 1em;
	--related-mic-meta-size: 0.85em;
}

/* ---------------------------------------------------------------------------
 * Responsive list (required layout #1)
 * Mobile: vertical stack of horizontal media-object cards.
 * Desktop (wide containers): one horizontal scroll-snap row.
 * ------------------------------------------------------------------------- */

.related-mic-layout-responsive-list {
	container-type: inline-size;
	container-name: related-mic-list;
}

.related-mic-layout-responsive-list .related-mic-recipes {
	display: flex;
	flex-direction: column;
	gap: var(--related-mic-gap);
	margin: 0;
	padding: 0;
}

.related-mic-layout-responsive-list .related-mic-recipe {
	display: flex;
	flex-direction: row;
	align-items: center;
	gap: calc(var(--related-mic-gap) * 0.75);
	min-height: 44px; /* whole-card tap target */
	border: 1px solid var(--related-mic-border-color);
	border-radius: var(--related-mic-radius);
	background: var(--related-mic-card-bg);
	padding: calc(var(--related-mic-gap) * 0.5);
	box-sizing: border-box;
}

.related-mic-layout-responsive-list .related-mic-recipe-image {
	flex: 0 0 96px;
	margin: 0;
}

.related-mic-layout-responsive-list .related-mic-recipe-image img {
	display: block;
	width: 96px;
	height: 96px;
	object-fit: cover;
	border-radius: calc(var(--related-mic-radius) * 0.75);
	max-width: 100%;
}

.related-mic-layout-responsive-list .related-mic-recipe-content {
	flex: 1 1 auto;
	min-width: 0;
}

.related-mic-layout-responsive-list .related-mic-recipe-title {
	font-size: var(--related-mic-title-size);
	margin: 0 0 0.25em;
}

.related-mic-layout-responsive-list .related-mic-recipe-title a {
	color: inherit;
	text-decoration: none;
}

.related-mic-layout-responsive-list .related-mic-recipe-title a:hover {
	text-decoration: underline;
}

.related-mic-layout-responsive-list .related-mic-recipe-meta {
	font-size: var(--related-mic-meta-size);
	color: var(--related-mic-meta-color);
}

/* Focus visibility: cards and the scroll region itself. */
.related-mic-layout-responsive-list .related-mic-recipe-title a:focus-visible,
.related-mic-layout-responsive-list .related-mic-recipes:focus-visible {
	outline: 2px solid var(--related-mic-focus-color);
	outline-offset: 2px;
}

/* Wide container: horizontal scroll-snap row with a perceivable scrollbar. */
@media (min-width: 1024px) {
	.related-mic-layout-responsive-list .related-mic-recipes {
		flex-direction: row;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		padding-bottom: calc(var(--related-mic-gap) * 0.5);
		scrollbar-width: thin;
	}

	.related-mic-layout-responsive-list .related-mic-recipe {
		flex: 0 0 240px;
		scroll-snap-align: start;
		flex-direction: column;
		align-items: stretch;
	}

	.related-mic-layout-responsive-list .related-mic-recipe-image {
		flex: 0 0 auto;
	}

	.related-mic-layout-responsive-list .related-mic-recipe-image img {
		width: 100%;
		height: 150px;
	}
}

/* Tablet: 2-up grid when the viewport is between the breakpoints. */
@media (min-width: 768px) and (max-width: 1023px) {
	.related-mic-layout-responsive-list .related-mic-recipes {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* Container-query refinement: a block does not own the viewport. When the
 * effective container is genuinely narrow (a sidebar or a phone-width column),
 * fall back to the stacked presentation even on desktop viewports.
 *
 * The threshold is deliberately 479px, not the card-composition breakpoint. A
 * normal article column (TMN's is 645px) must still receive the documented
 * tablet two-up and desktop scroll-row compositions; an earlier 679px
 * threshold overrode both and forced a single vertical column at every
 * viewport. Only true mobile/sidebar containers stack. */
@supports (container-type: inline-size) {
	@container related-mic-list (max-width: 479px) {
		.related-mic-layout-responsive-list .related-mic-recipes {
			display: flex;
			flex-direction: column;
			overflow-x: visible;
		}

		.related-mic-layout-responsive-list .related-mic-recipe {
			flex: 1 1 auto;
			flex-direction: row;
			align-items: center;
		}

		.related-mic-layout-responsive-list .related-mic-recipe-image img {
			width: 96px;
			height: 96px;
		}
	}
}

/* ---------------------------------------------------------------------------
 * Editorial float (required layout #2)
 * Desktop/tablet: fixed-width aside floated beside article text.
 * Mobile: full-width in-flow block (never hidden).
 * ------------------------------------------------------------------------- */

.related-mic-editorial-float {
	--related-mic-float-width: 300px;
	box-sizing: border-box;
	width: 100%;
	border: 1px solid var(--related-mic-border-color);
	border-radius: var(--related-mic-radius);
	background: var(--related-mic-card-bg);
	padding: var(--related-mic-gap);
	margin: 0 0 var(--related-mic-gap);
}

.related-mic-editorial-float__title {
	font-size: 1.05em;
	margin: 0 0 0.75em;
}

.related-mic-editorial-float__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: calc(var(--related-mic-gap) * 0.75);
}

.related-mic-editorial-float__item {
	margin: 0;
	padding: 0;
}

.related-mic-editorial-float__link {
	display: flex;
	align-items: center;
	gap: calc(var(--related-mic-gap) * 0.75);
	min-height: 44px; /* tap target */
	color: inherit;
	text-decoration: none;
}

.related-mic-editorial-float__link:hover .related-mic-editorial-float__item-title {
	text-decoration: underline;
}

.related-mic-editorial-float__link:focus-visible {
	outline: 2px solid var(--related-mic-focus-color);
	outline-offset: 2px;
}

.related-mic-editorial-float__thumb {
	flex: 0 0 64px;
	width: 64px;
	height: 64px;
	object-fit: cover;
	border-radius: calc(var(--related-mic-radius) * 0.75);
	max-width: 100%;
}

.related-mic-editorial-float__text {
	display: flex;
	flex-direction: column;
	min-width: 0;
}

.related-mic-editorial-float__item-title {
	font-weight: 600;
	font-size: var(--related-mic-title-size);
}

.related-mic-editorial-float__meta {
	font-size: var(--related-mic-meta-size);
	color: var(--related-mic-meta-color);
}

@media (min-width: 768px) {
	.related-mic-editorial-float--right {
		float: right;
		width: var(--related-mic-float-width);
		margin: 0 0 1em 1.5em;
	}

	.related-mic-editorial-float--left {
		float: left;
		width: var(--related-mic-float-width);
		margin: 0 1.5em 1em 0;
	}
}

/* ---------------------------------------------------------------------------
 * Editor placeholder + shared bits
 * ------------------------------------------------------------------------- */

.related-mic-block-placeholder {
	border: 1px dashed var(--related-mic-border-color, rgba(128, 128, 128, 0.4));
	border-radius: 8px;
	padding: 1.5em;
	text-align: center;
	opacity: 0.8;
	font-size: 0.9em;
}

@media (prefers-reduced-motion: reduce) {
	.related-mic-layout-responsive-list .related-mic-recipes {
		scroll-behavior: auto;
	}
}

/* ---------------------------------------------------------------------------
 * Stretched card link inside the block layouts
 *
 * The base pattern lives in the public stylesheet
 * (.related-mic-recipe--linked / ::after). These rules only make sure the block
 * layouts do not break it: the card must stay the positioning context and
 * flex children must be allowed to shrink.
 * ------------------------------------------------------------------------- */

.related-mic-layout-responsive-list .related-mic-recipe--linked {
	position: relative;
}

.related-mic-layout-responsive-list .related-mic-recipe--linked .related-mic-ingredient-filter {
	position: relative;
	z-index: 1;
}

/* ---------------------------------------------------------------------------
 * 320px / 200% text zoom: preserve every string without page overflow
 * ------------------------------------------------------------------------- */

.related-mic-layout-responsive-list .related-mic-recipe,
.related-mic-editorial-float__item {
	max-width: 100%;
	box-sizing: border-box;
}

.related-mic-layout-responsive-list .related-mic-recipe-image,
.related-mic-layout-responsive-list .related-mic-recipe-content,
.related-mic-editorial-float__link,
.related-mic-editorial-float__text {
	min-width: 0;
}

.related-mic-layout-responsive-list .related-mic-recipe-title,
.related-mic-layout-responsive-list .related-mic-recipe-title a,
.related-mic-editorial-float__item-title,
.related-mic-editorial-float__text,
.related-mic-editorial-float__meta {
	min-width: 0;
	max-width: 100%;
	overflow-wrap: anywhere;
	word-break: break-word;
}

.related-mic-editorial-float {
	max-width: 100%;
}

/* A narrow float must never exceed the column it sits in. */
@media (min-width: 768px) {
	.related-mic-editorial-float--right,
	.related-mic-editorial-float--left {
		max-width: 100%;
	}
}
