/* Web Databases block (acf/screen-mockup). Illustrated monitor with a
   screenshot corner-pinned into its screen shape via a projective
   transform computed in assets/js/conditional/blocks/screenMockup.js (same
   technique as the Web Mockup hero's Tablet case), surrounded by real HTML
   database cards connected to it by straight lines the same JS file draws
   at runtime (it measures actual rendered positions, so it works
   unchanged under either layout system below). Clicking a card selects it
   and updates the detail panel below.

   Two positioning systems exist side by side in the markup (see
   template-parts/blocks/block-screen-mockup.php's header comment) and this
   file's media queries pick which one is visible:
     - Desktop (>900px, the styles right below this comment, unscoped):
       cards are positioned absolutely by --spoke-left/--spoke-top (percent
       offsets PHP computes from each row's angle + radius — see the
       Spoke Angle Studio tool) inside a wide (1.6:1) diagram box.
     - Tablet/mobile (≤900px): the "@media (max-width: 900px)" block below
       reverts to the older CSS Grid slot system
       (.screenMockupDiagram--count-{2,3,4,5}), which hasn't been redone as
       spokes yet. Mobile additionally collapses that into a single-column
       accordion (@media max-width:600px, at the bottom of this file).

   All the block's non-typographic styling (card radius/border, colors,
   monitor size) comes in as CSS custom properties set inline per-instance
   from Design Tokens → Admin → Web Databases — see
   inc/helpers/database-types.php's shew_screen_mockup_*_css()/*_px()
   functions and the --sm-* var() defaults below. */

.screenMockupBlock
{
	--sm-block-bg: #ffffff;
	--sm-card-bg: #efece3;
	--sm-hover-bg: #efece3;
	--sm-click-bg: #efece3;
	--sm-icon-color: #3f5765;
	--sm-selected-bg: #f6e4d3;
	--sm-selected-accent: #c1602c;
	--sm-card-radius: 12px;
	--sm-card-border-width: 1px;

	display: flex;
	flex-direction: column;
	align-items: center;
	gap: clamp(1.5rem, 4vw, 3rem);
	width: 100%;
	margin: 0 auto;
	/* Standard block vertical padding (notes/block-design-standards.md §2) —
	   var()-with-clamp-fallback, same pattern as displayPosts.css/
	   displayCaseStudy.css/testimonialCards.css, so this block sits with the
	   same top/bottom rhythm as the rest of the library instead of relying on
	   whatever margin its neighbors happen to have. */
	padding-top: var(--sm-space-above, clamp(40px, 6vw, 100px));
	padding-bottom: var(--sm-space-below, clamp(40px, 6vw, 100px));
}

/* ── Diagram — desktop (>900px): radial spoke layout ─────────────────── */

/* Fixed, independent of the monitor's own width token (Design Tokens →
   Admin → Web Databases → Monitor Max Width). Card radius (0-100, in
   shew_screen_mockup_spoke_offset()) is a fraction of THIS box, same as
   the Spoke Angle Studio treated distance as relative to its own canvas
   rather than to the monitor icon drawn on it — so shrinking the monitor
   token shrinks the monitor alone and opens up more visible space around
   it, it doesn't pull the spokes in with it. .screenMockupStage's own
   max-width:100% (below) still exists as a safety net if the monitor
   token is ever set large enough to threaten the cards' radius.

   Wider than tall (1.6:1, not square) to match the reference mockup's fan
   — the 'top' spoke and the two side pairs read as a horizontal spread
   with headroom above/below, not a circle. Since shew_screen_mockup_spoke_
   offset() applies the same 0-100 radius fraction to both left/top
   percentages, a non-square box naturally stretches that into an
   elliptical (wider-than-tall) fan with no extra math needed. */
.screenMockupDiagram
{
	position: relative;
	width: min(880px, 100%);
	aspect-ratio: 1.6 / 1;
	margin: 0 auto;
}

/* Purely a layout hook for the 6-8 count "wrap" fallback below (a real flex
   box there, to center an incomplete last row — something a CSS Grid's
   fixed column tracks can't do on their own). display:contents everywhere
   else removes it from the box tree entirely, so its children behave as
   direct children of .screenMockupDiagram for every other layout system
   (desktop absolute spoke positioning, and the named-slot grid areas for
   1-5 databases) — unaffected by this wrapper's existence. */
.screenMockupCards
{
	display: contents;
}

.screenMockupConnectors
{
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	overflow: visible;
	pointer-events: none;
	z-index: 1;
}

/* Stroke width follows the same Card Border Width token (Design Tokens →
   Admin → Web Databases → Card & Layout Controls, --sm-card-border-width)
   as the cards' own border, rather than a hardcoded value independent of
   it, so the two read as one consistent linework weight. */
.screenMockupConnectorLine
{
	stroke: var(--sm-icon-color);
	stroke-width: var(--sm-card-border-width, 1.5px);
	stroke-linecap: round;
	opacity: 0.5;
}

.screenMockupConnectorLine.is-active
{
	stroke: var(--sm-selected-accent);
	stroke-width: calc(var(--sm-card-border-width, 1.5px) + 0.5px);
	opacity: 1;
}

.screenMockupDiagram .screenMockupSlot--mon
{
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%);
}

/* ── Monitor (corner-pin stage) ──────────────────────────────────────── */

.screenMockupStage
{
	position: relative;
	/* Above .screenMockupConnectors (z-index:1) so the monitor + its screen
	   contents render on top of the spoke lines, which visually originate
	   from the monitor's center — without this, each line's start point
	   drew over the monitor artwork instead of appearing to come from
	   behind it. Below .screenMockupCard (z-index:3) so a card's own
	   spoke, if their radius ever brings them close enough to overlap,
	   still reads on top of the monitor rather than under it. */
	z-index: 2;
	max-width: 100%;
}

/* Opaque backdrop for the clipped screen shape (clip-path is set inline per-
   instance in block-screen-mockup.php from the illustration's corner-pin
   data) — needs its own solid background so whatever sits behind it (namely
   each spoke's connector line, which starts right at the monitor's center
   and so runs directly underneath this shape) never shows through, however
   .screenMockupScreenshotLayer above it fades during the entrance
   animation. Uses the Block Background token (Design Tokens → Admin → Web
   Databases), so a screenshot with a transparent background shows that
   color behind it, not a hardcoded white. */
.screenMockupScreenshotMask
{
	position: absolute;
	inset: 0;
	overflow: hidden;
	background: var(--sm-block-bg, #fff);
}

.screenMockupScreenshotLayer
{
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	overflow: hidden;
	transform-origin: 0 0;
	will-change: transform;
	opacity: 1;
}

.screenMockupScrollInner
{
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}

/* width:100%/height:auto is only the resting size before JS measures the
   image and takes over — screenMockup.js's sizeImageToCover() sets an
   explicit width/height/margin-left inline once the image loads, covering
   the stage box exactly (cropped sides for a short screenshot, overflowing
   height — enabling the scroll-linked translateY above — for a tall one).
   That's done in JS rather than via object-fit:cover here because this box
   sits under a matrix3d transform (the corner-pin homography, applied to
   its ancestor .screenMockupScreenshotLayer) and object-fit's cover sizing
   wasn't holding up reliably under that combination. */
.screenMockupScrollInner IMG
{
	display: block;
	width: 100%;
	height: auto;
}

.screenMockupLineart
{
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	pointer-events: none;
}

/* ── Database cards — desktop (>900px): positioned by spoke offset ──────
   --spoke-left/--spoke-top are set inline per card from PHP (percent of
   the diagram box, center-origin); width is fixed here since the card is
   no longer sized by a grid track. */

.screenMockupCard
{
	position: absolute;
	left: var(--spoke-left, 50%);
	top: var(--spoke-top, 50%);
	/* Standalone `translate` property (not the `transform` shorthand) so
	   this self-centering offset composes with, rather than gets clobbered
	   by, the Card Entrance Animation's own `transform: translate3d(...)`
	   (motion-effects.css) — the two are independent CSS properties that
	   combine, unlike two rules both setting `transform` where the later/
	   more-specific one wins outright and silently drops the other's
	   offset. Losing the -50%/-50% here shifted every revealed card by
	   half its own box size (75px right + a proportional amount down for
	   this card's 150px width) since it fell back to "top-left corner at
	   the spoke point" instead of "centered on it". */
	translate: -50% -50%;
	z-index: 3;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.35rem;
	width: 150px;
	padding: 1.1rem 0.85rem;
	background: var(--sm-card-bg);
	border: var(--sm-card-border-width) solid transparent;
	border-radius: var(--sm-card-radius);
	color: var(--sm-card-color, var(--sm-icon-color));
	font-family: inherit;
	cursor: pointer;
	transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

/* Explicit background-color here (not just the filter below) is required —
   .screenMockupCard is a real <button>, and the parent theme's own generic
   `button:hover { background-color: ... }` (assets/css/global/components/
   buttons.css) otherwise wins by default since this block never declared a
   hover background of its own, turning every unselected card a dark
   near-black on hover regardless of this block's own card colors. Hover
   Card Background (Design Tokens → Admin → Web Databases → Color Controls,
   --sm-hover-bg) falls back to the card's own Background while unset, so
   the default is "no visible hover background change" rather than
   reintroducing that dark theme default under another name. */
.screenMockupCard:hover
{
	background-color: var(--sm-hover-bg, var(--sm-card-bg));
	filter: brightness(0.98);
}

/* Click Card Background (Design Tokens → Admin → Web Databases → Color
   Controls, --sm-click-bg) — the CSS :active state, i.e. only while the
   mouse button/touch is actually down. Distinct from :hover above (cursor
   resting over it) and .is-selected below (the persistent state once the
   click completes) — this is the brief in-between moment. Comes after
   :hover in source order so it wins over :hover's background-color while
   both apply (a real click always starts by hovering first). */
.screenMockupCard:active
{
	background-color: var(--sm-click-bg, var(--sm-hover-bg, var(--sm-card-bg)));
}

.screenMockupCard.is-selected
{
	background: var(--sm-selected-bg);
	border-color: var(--sm-selected-accent);
	color: var(--sm-selected-accent);
}

.screenMockupCardIcon
{
	display: block;
	width: var(--sm-icon-size, 2rem);
	height: var(--sm-icon-size, 2rem);
	flex: 0 0 auto;
}

.screenMockupCardIcon SVG
{
	display: block;
	width: 100%;
	height: 100%;
}

.screenMockupCardText
{
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.35rem;
}

.screenMockupCardLabel
{
	font-family: var(--sm-card-label-family, inherit);
	font-weight: var(--sm-card-label-weight, 700);
	font-style: var(--sm-card-label-style, normal);
	font-size: var(--sm-card-label-size, 0.8rem);
	line-height: var(--sm-card-label-line-height, normal);
	letter-spacing: var(--sm-card-label-letter-spacing, 0.04em);
	text-transform: var(--sm-card-label-text-transform, none);
	color: var(--sm-card-label-color, var(--text-color, #1c2027));
}

.screenMockupCardDescription
{
	font-family: var(--sm-card-desc-family, inherit);
	font-weight: var(--sm-card-desc-weight, 400);
	font-style: var(--sm-card-desc-style, normal);
	font-size: var(--sm-card-desc-size, 0.8rem);
	line-height: var(--sm-card-desc-line-height, normal);
	letter-spacing: var(--sm-card-desc-letter-spacing, normal);
	text-transform: var(--sm-card-desc-text-transform, none);
	color: var(--sm-card-desc-color, var(--text-color, #1c2027));
	opacity: 0.65;
	text-align: center;
}

/* Chevron (mobile accordion only) and inline per-card detail (mobile
   accordion only) — both hidden by default; the mobile media query below
   turns them on and hides the desktop equivalents (connectors + the shared
   .screenMockupDetail panel) instead. */
.screenMockupCardChevron
{
	display: none;
	flex: 0 0 auto;
	width: 1rem;
	height: 1rem;
	color: var(--sm-icon-color);
	transition: transform 0.2s ease;
}

.screenMockupCardChevron SVG
{
	display: block;
	width: 100%;
	height: 100%;
}

.screenMockupCard.is-expanded .screenMockupCardChevron
{
	transform: rotate(180deg);
}

/* display:block + max-height/opacity (not display:none) so the mobile
   accordion's expand/collapse (below, .screenMockupCard.is-expanded) can
   actually transition instead of snapping open/closed instantly — display
   itself isn't animatable, and this element (a <span> holding a Body
   paragraph plus a wrapping Fields tag list, so its true height is
   unpredictable) isn't a good fit for the grid-template-rows:0fr/1fr trick
   either, since that needs a single grid item to collapse correctly rather
   than two independent children. max-height's ceiling (800px) just needs to
   comfortably clear real content, not match it exactly — only the collapsed
   (0) state needs to be precise, since that's the one that must read as
   fully hidden with zero height. On desktop/tablet this only ever sits at
   its collapsed default, since .is-expanded is never added there (mobile-
   only, screenMockup.js). */
.screenMockupCardDetail
{
	display: block;
	max-height: 0;
	overflow: hidden;
	opacity: 0;
	transition: max-height 0.35s ease, opacity 0.25s ease;
}

/* ── Detail panel (selected database) ───────────────────────────────── */

.screenMockupDetail
{
	width: 100%;
	max-width: 100%;
	box-sizing: border-box;
	padding: 1.5rem;
	background: var(--sm-detail-bg, var(--sm-card-bg));
	border-radius: var(--sm-card-radius);
	transition: opacity var(--sm-detail-transition-duration, 250ms) ease;
}

/* Detail Content Transition — Design Tokens → Admin → Web Databases.
   Toggled by screenMockup.js around a click-triggered content swap: fades
   out, swaps the text while invisible, fades back in. */
.screenMockupDetail.is-swapping
{
	opacity: 0;
}

.screenMockupDetailHeading
{
	margin: 0 0 0.75rem;
	font-family: var(--sm-heading-family, inherit);
	font-weight: var(--sm-heading-weight, 700);
	font-style: var(--sm-heading-style, normal);
	font-size: var(--sm-heading-size, 1.5rem);
	line-height: var(--sm-heading-line-height, normal);
	letter-spacing: var(--sm-heading-letter-spacing, normal);
	text-transform: var(--sm-heading-text-transform, none);
	color: var(--sm-heading-color, inherit);
}

.screenMockupDetailBody
{
	margin: 0 0 1rem;
	font-family: var(--sm-body-family, inherit);
	font-weight: var(--sm-body-weight, 400);
	font-style: var(--sm-body-style, normal);
	font-size: var(--sm-body-size, inherit);
	line-height: var(--sm-body-line-height, normal);
	letter-spacing: var(--sm-body-letter-spacing, normal);
	text-transform: var(--sm-body-text-transform, none);
	color: var(--sm-body-color, inherit);
	opacity: 0.85;
}

.screenMockupDetailFields
{
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
}

.screenMockupDetailFieldsLabel
{
	font-family: var(--sm-fields-label-family, var(--font-mono, monospace));
	font-weight: var(--sm-fields-label-weight, 400);
	font-style: var(--sm-fields-label-style, normal);
	font-size: var(--sm-fields-label-size, 0.7rem);
	line-height: var(--sm-fields-label-line-height, normal);
	letter-spacing: var(--sm-fields-label-letter-spacing, 0.06em);
	text-transform: var(--sm-fields-label-text-transform, none);
	color: var(--sm-fields-label-color, inherit);
	opacity: 0.55;
	margin-right: 0.25rem;
}

/* Shared by both field-tag chip variants — the panel's own tags here and
   the mobile accordion's inline .screenMockupCardDetailFieldTag below —
   since Design Tokens controls them as a single "Field Tag" style. Each
   variant keeps its own padding/font-size (sized for its context). */
.screenMockupDetailFieldTag,
.screenMockupCardDetailFieldTag
{
	font-family: var(--sm-field-tag-family, inherit);
	font-weight: var(--sm-field-tag-weight, 400);
	font-style: var(--sm-field-tag-style, normal);
	line-height: var(--sm-field-tag-line-height, normal);
	letter-spacing: var(--sm-field-tag-letter-spacing, normal);
	text-transform: var(--sm-field-tag-text-transform, none);
	color: var(--sm-field-tag-color, inherit);
	background: var(--sm-field-tag-bg, var(--sm-block-bg));
}

.screenMockupDetailFieldTag
{
	padding: 0.2rem 0.6rem;
	border-radius: 100px;
	font-size: var(--sm-field-tag-size, 0.75rem);
}

/* ── Tablet/mobile (≤900px): revert to the older CSS Grid slot system —
   not redone as spokes yet (see file header). Card/monitor positioning
   goes back to static-in-grid; template-areas exist for counts 1-5 (2-5
   have their own named layout, 1 borrows 3's "top" slot). 6-8 have no
   named slots, so .screenMockupDiagram--wrap below gives them a plain
   auto-wrapping grid instead. */
@media only screen and (max-width: 900px)
{
	.screenMockupDiagram
	{
		position: relative;
		display: grid;
		width: 100%;
		max-width: 980px;
		aspect-ratio: auto;
		margin: 0 auto;
		/* Not bare `auto` — inside a CSS Grid track, .screenMockupStage's own
		   max-width:100% (below, "Monitor (corner-pin stage)") has no
		   percentage basis to resolve against on an auto track, so browsers
		   resolve it to max-width:0, which then clamps the monitor's own
		   width:clamp(...) down to 0 regardless of its min-px floor — the
		   monitor silently renders at 0×0 between the two side cards.
		   minmax(var(--sm-monitor-min), auto) gives the track a real floor
		   (the same Monitor Min Width token, Design Tokens → Admin → Web
		   Databases, that .screenMockupStage's own clamp() uses) so the
		   percentage has something to resolve against. */
		grid-template-columns: 1fr minmax(var(--sm-monitor-min, 128px), auto) 1fr;
		gap: clamp(1rem, 3vw, 2rem);
		align-items: center;
		justify-items: center;
	}

	.screenMockupDiagram--count-2
	{
		grid-template-areas:
			"lu  mon  ru"
			".   mon  .";
	}

	.screenMockupDiagram--count-3
	{
		grid-template-areas:
			".  top  ."
			"l  mon  r";
	}

	.screenMockupDiagram--count-4
	{
		grid-template-areas:
			"lu  mon  ru"
			"ll  mon  rl";
	}

	.screenMockupDiagram--count-5
	{
		grid-template-areas:
			".   top  ."
			"lu  mon  ru"
			"ll  mon  rl";
	}

	/* 6-8 databases: no hand-arranged slots exist at this range yet, so the
	   monitor just sits alone above a single full-width row holding
	   .screenMockupCards — a real flex box here (see its base rule above),
	   which centers each wrapped line independently. A CSS Grid track
	   layout can't do that: auto-fit's column count is fixed for the whole
	   grid, so an incomplete last row (e.g. 2 cards where a full row holds
	   3) just leaves the unused track on the right instead of centering. */
	.screenMockupDiagram--wrap
	{
		grid-template-columns: 1fr;
		grid-template-areas: none;
	}

	.screenMockupDiagram--wrap .screenMockupCards
	{
		display: flex;
		flex-wrap: wrap;
		justify-content: center;
		gap: clamp(1rem, 3vw, 2rem);
	}

	.screenMockupDiagram--wrap .screenMockupCard
	{
		width: auto;
		flex: 0 1 160px;
	}

	.screenMockupSlot--top  { grid-area: top; }
	.screenMockupSlot--l    { grid-area: l; }
	.screenMockupSlot--r    { grid-area: r; }
	.screenMockupSlot--lu   { grid-area: lu; }
	.screenMockupSlot--ru   { grid-area: ru; }
	.screenMockupSlot--ll   { grid-area: ll; }
	.screenMockupSlot--rl   { grid-area: rl; }

	.screenMockupDiagram .screenMockupSlot--mon
	{
		position: relative;
		left: auto;
		top: auto;
		transform: none;
		grid-area: mon;
	}

	/* Comes after the grid-area:mon reset above (same specificity) so it
	   wins for the 6-8 wrap case, where "mon" isn't a real named area. */
	.screenMockupDiagram--wrap .screenMockupSlot--mon
	{
		grid-area: auto;
		grid-column: 1 / -1;
	}

	.screenMockupCard
	{
		position: relative;
		left: auto;
		top: auto;
		transform: none;
		/* `translate` is a separate CSS property from `transform` — the
		   desktop rule above (>900px, unscoped) sets translate:-50% -50% to
		   self-center each card on its --spoke-left/--spoke-top point.
		   Resetting `transform` alone doesn't touch it, so without this the
		   card stayed shifted left/up by half its own box size at every
		   width ≤900px, clipping it off the left edge of the viewport. */
		translate: none;
		width: 100%;
		max-width: 200px;
		padding: 1.25rem 1rem;
	}
}

/* ── Tablet (601–900px): first pass — same grid as above, just tightened
   up so it doesn't feel oversized at these widths. Not based on a
   reference mockup yet; revise once real-device screenshots come back. */
@media only screen and (min-width: 601px) and (max-width: 900px)
{
	.screenMockupDiagram
	{
		gap: clamp(0.75rem, 2.5vw, 1.5rem);
	}

	.screenMockupCard
	{
		max-width: 160px;
		padding: 1rem 0.75rem;
	}

	.screenMockupCardLabel,
	.screenMockupCardDescription
	{
		font-size: 0.72rem;
	}
}

/* ── Mobile (≤600px): monitor on top, database cards become a single-column
   accordion list below it — each row toggles open to show its own Body/
   Fields inline (screenMockup.js), replacing the diagram's connector lines
   + shared detail panel, neither of which make sense once the cards aren't
   arranged spatially around the monitor anymore. */
@media only screen and (max-width: 600px)
{
	.screenMockupDiagram,
	.screenMockupDiagram--count-2,
	.screenMockupDiagram--count-3,
	.screenMockupDiagram--count-4,
	.screenMockupDiagram--count-5,
	.screenMockupDiagram--wrap
	{
		grid-template-columns: 1fr;
		grid-template-areas: none;
	}

	/* Resetting the container's own template above isn't enough on its own:
	   each card still carries a named grid-area (.screenMockupSlot--lu etc.,
	   assigned in the ≤900px block above for the tablet named-area layout).
	   With grid-template-areas:none those names no longer match a defined
	   area, but CSS Grid still treats an unmatched named grid-area as a
	   request for an implicit named line pair — silently growing the grid
	   back out to multiple columns instead of collapsing to the single
	   column declared above, which is what put cards on top of each other
	   instead of stacking them. */
	.screenMockupSlot--top,
	.screenMockupSlot--l,
	.screenMockupSlot--r,
	.screenMockupSlot--lu,
	.screenMockupSlot--ru,
	.screenMockupSlot--ll,
	.screenMockupSlot--rl,
	.screenMockupDiagram .screenMockupSlot--mon
	{
		grid-area: auto;
	}

	.screenMockupDiagram .screenMockupSlot--mon
	{
		order: -1;
	}

	.screenMockupConnectors
	{
		display: none;
	}

	.screenMockupCard
	{
		flex-direction: row;
		flex-wrap: wrap;
		align-items: center;
		justify-content: flex-start;
		gap: 0.85rem;
		width: 100%;
		max-width: none;
		padding: 0.9rem 1rem;
	}

	/* Click Card Background (--sm-click-bg) is desktop/tablet-only — on
	   mobile a tap already toggles the row's own accordion open/closed
	   (.is-expanded below), so a separate tap-down color flash on top of
	   that is just visual noise. Falls straight back to the card's own
	   resting Background, ignoring both --sm-click-bg and --sm-hover-bg. */
	.screenMockupCard:active
	{
		background-color: var(--sm-card-bg);
	}

	/* Overrides the 601-900px wrap fallback's flex-basis:160px (screenMockup
	   .screenMockupDiagram--wrap .screenMockupCard, above) — at this width
	   6-8 databases fold into the same single-column accordion as every
	   other count, not a centered multi-card row. */
	.screenMockupDiagram--wrap .screenMockupCard
	{
		flex: 1 1 100%;
		width: 100%;
		max-width: none;
	}

	.screenMockupCardText
	{
		align-items: flex-start;
		flex: 1 1 auto;
		min-width: 0;
	}

	.screenMockupCardDescription
	{
		text-align: left;
	}

	.screenMockupCardChevron
	{
		display: block;
	}

	.screenMockupCard.is-expanded .screenMockupCardDetail
	{
		max-height: 800px;
		opacity: 1;
		width: 100%;
		margin-top: 0.25rem;
		padding-left: calc(2rem + 0.85rem); /* align under the label, past the icon */
		text-align: left;
	}

	.screenMockupCardDetailBody
	{
		display: block;
		margin: 0 0 0.6rem;
		font-size: 0.85rem;
		/* Always black — otherwise it inherits the card button's
		   --sm-card-color (the row's icon color). */
		color: #000;
	}

	.screenMockupCardDetailFields
	{
		display: flex;
		flex-wrap: wrap;
		gap: 0.4rem;
	}

	.screenMockupCardDetailFieldTag
	{
		padding: 0.15rem 0.55rem;
		border-radius: 100px;
		font-size: var(--sm-field-tag-size, 0.7rem);
	}

	/* Superseded by each card's own inline detail above. */
	.screenMockupDetail
	{
		display: none;
	}
}
