/* ============================================================
   Lisa Leming — component styles
   Tokens come from theme.json (--wp--preset--*). This file only
   adds what theme.json cannot express: the translucent nav, the
   mobile action bar, chips, cards, reserved slots, and a few
   editorial touches. Kept intentionally small.
   ============================================================ */

/* ---------- Base refinements ---------- */
body {
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}
:focus-visible {
	outline: 2px solid var(--wp--preset--color--violet);
	outline-offset: 3px;
	border-radius: 4px;
}
::selection {
	background: var(--wp--preset--color--lilac);
}
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation: none !important;
		transition: none !important;
		scroll-behavior: auto !important;
	}
}

/* ---------- Sticky translucent header ---------- */
.ll-nav {
	position: sticky;
	top: 0;
	z-index: 100;
	background: rgba(245, 241, 236, 0.85);
	-webkit-backdrop-filter: saturate(180%) blur(18px);
	backdrop-filter: saturate(180%) blur(18px);
	border-bottom: 1px solid rgba(74, 53, 94, 0.14);
}
/* Align the nav row with page content (1180 band) and keep it off the edges. */
.ll-nav > .wp-block-group {
	max-width: var(--wp--style--global--wide-size, 1180px);
	margin-inline: auto;
	width: 100%;
	padding-inline: clamp(1.25rem, 4vw, 2.5rem);
	padding-block: 0.35rem;
	gap: 1rem;
}
.ll-nav .wp-block-navigation a {
	color: var(--wp--preset--color--ink-soft);
	text-decoration: none;
	padding-block: 0.55rem;
}
.ll-nav .wp-block-navigation a:hover {
	color: var(--wp--preset--color--ink);
}
.ll-nav .wp-block-navigation .current-menu-item > a {
	color: var(--wp--preset--color--plum);
	font-weight: 600;
	border-bottom: 2px solid var(--wp--preset--color--champagne);
}
/* "Request a Quote" button inside the nav */
.ll-nav-cta a,
.wp-block-navigation .ll-nav-cta a {
	background: var(--wp--preset--color--plum);
	color: var(--wp--preset--color--white) !important;
	border-radius: 999px;
	display: inline-flex;
	align-items: center;
	box-sizing: border-box;
	min-height: 44px;
	padding: 0.45rem 0.9rem !important;
	font-weight: 600;
	border-bottom: none !important;
}
.ll-nav-cta a:hover,
.wp-block-navigation .ll-nav-cta a:hover {
	background: var(--wp--preset--color--plum-deep);
}
/* Brand kicker next to the site title */
.ll-brand-sub {
	font-size: 0.62rem;
	font-weight: 600;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--wp--preset--color--violet);
}

/* Collapse the nav to a hamburger below 1100px to match the prototype. The
   navigation block's own "mobile" overlay setting
   only collapses under 600px, which leaves the full link row cramped against
   the CTA button on tablet portrait (768px). Core's rules that re-show the
   inline list start at 600px, so they are reversed across that band. */
@media (min-width: 600px) and (max-width: 1100px) {
	.ll-nav .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	.ll-nav .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}
}

/* Keep core's accessible dialog, with a compact panel below the real header. */
@media (max-width: 1100px) {
	.ll-nav .wp-block-navigation { position: static; }
	.ll-nav:has(.is-menu-open) .wp-block-navigation__responsive-container-open {
		opacity: 0;
		pointer-events: none;
	}
	.ll-nav .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
		position: absolute;
		inset: 100% 0 auto;
		padding: 0;
		overflow: visible;
		background: var(--wp--preset--color--ivory);
		color: var(--wp--preset--color--plum);
		border-bottom: 1px solid var(--wp--preset--color--lilac);
		box-shadow: 0 12px 24px rgba(29, 26, 33, 0.12);
		animation: none;
	}
	/* Cover the page beneath the panel so modal taps cannot activate its links. */
	.ll-nav .is-menu-open::before {
		content: "";
		position: absolute;
		inset: 100% 0 auto;
		height: 100dvh;
		background: rgba(29, 26, 33, 0.12);
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation__responsive-close {
		max-width: var(--wp--style--global--wide-size, 1180px);
	}
	.ll-nav > .wp-block-group .wp-block-navigation .is-menu-open .wp-block-navigation__responsive-dialog {
		position: static;
		margin-top: 0;
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation__responsive-container-close {
		top: auto;
		bottom: calc(100% + 0.5rem);
		right: clamp(1.25rem, 4vw, 2.5rem);
		color: var(--wp--preset--color--plum);
		background: var(--wp--preset--color--ivory);
		border: 1px solid rgba(74, 53, 94, 0.3);
		border-radius: 8px;
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation__responsive-container-content {
		padding: 0.75rem clamp(1.25rem, 4vw, 2.5rem) calc(1rem + env(safe-area-inset-bottom));
		max-height: calc(100dvh - 5.5rem);
		overflow-y: auto;
		align-items: stretch;
		gap: 0;
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation__container {
		width: 100%;
		align-items: stretch;
		gap: 0;
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation-item {
		width: 100%;
		align-items: stretch;
		border-bottom: 1px solid var(--wp--preset--color--lilac);
	}
	.ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation-item__content {
		width: 100%;
		min-height: 48px;
		color: var(--wp--preset--color--plum);
		font-size: 1.05rem;
		text-align: left;
		border-bottom: none;
	}
	.ll-nav .wp-block-navigation .is-menu-open .ll-nav-cta {
		margin-top: 1rem;
		border-bottom: none;
	}
	.ll-nav .wp-block-navigation .is-menu-open .ll-nav-cta a {
		justify-content: center;
	}
	.admin-bar .ll-nav .wp-block-navigation .is-menu-open .wp-block-navigation__responsive-container-content {
		max-height: calc(100dvh - 5.5rem - 46px);
	}
}
.wp-block-navigation__responsive-container-open,
.wp-block-navigation__responsive-container-close {
	min-width: 44px;
	min-height: 44px;
}

/* ---------- Editorial helpers ---------- */
.ll-eyebrow {
	font-size: var(--wp--preset--font-size--x-small);
	font-weight: 600;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--wp--preset--color--violet);
}
.ll-gold-rule {
	width: 56px;
	height: 2px;
	background: var(--wp--preset--color--champagne);
	border: 0;
	margin-block: 1.5rem;
}
.ll-lead {
	font-size: var(--wp--preset--font-size--large);
	color: var(--wp--preset--color--ink-soft);
	line-height: 1.6;
	/* Prototype constrains intro copy by measure, not by container width. */
	max-width: 52ch;
}
.has-text-align-center.ll-lead {
	margin-inline: auto;
}
/* Hero headlines only — "display" font size is used solely on page h1s. */
.ll-display.has-display-font-size {
	max-width: 17ch;
}
.ll-display.has-display-font-size.has-text-align-center {
	margin-inline: auto;
}
.ll-kicker {
	font-size: var(--wp--preset--font-size--x-small);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold-ink);
	font-weight: 600;
}

/* Full-bleed hero band — pinned to a viewport-relative height so the crop
   stays constant no matter what aspect ratio the real photo arrives with.
   (Placeholder SVGs would otherwise dictate the height via intrinsic ratio.) */
.wp-block-image.alignfull img {
	width: 100%;
	height: clamp(380px, 66vh, 700px);
	object-fit: cover;
	background: var(--wp--preset--color--lilac);
}

/* Rounded image frames with lilac fallback */
.ll-frame img {
	border-radius: 28px;
	background: var(--wp--preset--color--lilac);
}
.ll-frame-sm img {
	border-radius: 10px;
	background: var(--wp--preset--color--lilac);
}

/* Ghost (outline) button variant — apply "is-style-outline" or .ll-btn-ghost */
.wp-block-button.is-style-outline .wp-block-button__link,
.ll-btn-ghost .wp-block-button__link {
	background: transparent;
	color: var(--wp--preset--color--plum);
	border: 1.5px solid rgba(74, 53, 94, 0.45);
}
.wp-block-button.is-style-outline .wp-block-button__link:hover,
.ll-btn-ghost .wp-block-button__link:hover {
	background: var(--wp--preset--color--lavender);
	color: var(--wp--preset--color--plum);
}
/* Buttons on the plum band */
.ll-on-plum .wp-block-button__link {
	background: var(--wp--preset--color--white);
	color: var(--wp--preset--color--plum);
}
.ll-on-plum .wp-block-button__link:hover {
	background: var(--wp--preset--color--lavender);
	color: var(--wp--preset--color--plum-deep);
}

/* ---------- Cards ---------- */
.ll-card {
	background: var(--wp--preset--color--white);
	border-radius: 18px;
	box-shadow: 0 6px 30px rgba(74, 53, 94, 0.08);
	overflow: hidden;
	transition: transform 0.3s, box-shadow 0.3s;
}
.ll-card:hover {
	transform: translateY(-4px);
	box-shadow: 0 14px 44px rgba(74, 53, 94, 0.14);
}
.ll-card img {
	border-radius: 0;
}

/* ---------- Service-area city names ---------- */
.ll-chip {
	display: inline-block;
	color: var(--wp--preset--color--plum);
	padding: 0.3rem 0.7rem;
	font-size: var(--wp--preset--font-size--x-small);
	font-weight: 500;
}
a.ll-chip { text-underline-offset: 0.2em; }

/* ---------- Homepage review excerpts ---------- */
.ll-testimonials .wp-block-quote {
	border: 0;
	padding: 0;
	margin: 1.5rem 0;
}
.ll-testimonials .wp-block-quote cite {
	display: block;
	margin-top: 0.5rem;
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--small);
	font-style: normal;
	color: var(--wp--preset--color--ink-soft);
}

/* Credentials support the reviews without leaving an empty column. */
.ll-home-trust .ll-testimonials { margin-top: var(--wp--preset--spacing--50); }
.ll-home-trust .ll-testimonial-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--wp--preset--spacing--40);
	margin-top: var(--wp--preset--spacing--40);
}
.ll-home-trust .ll-testimonial-grid > .wp-block-quote {
	display: flex;
	flex-direction: column;
	min-width: 0;
	margin: 0;
	padding-top: var(--wp--preset--spacing--40);
	border-top: 1px solid var(--wp--preset--color--lilac);
}
.ll-home-trust .ll-testimonial-grid .wp-block-quote p {
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.35;
}
.ll-home-trust .ll-testimonial-grid .wp-block-quote cite {
	padding-top: var(--wp--preset--spacing--30);
	margin-top: auto;
}
@media (min-width: 600px) {
	.ll-home-trust .ll-testimonial-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
	.ll-home-trust .ll-testimonial-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ---------- Reserved "Needs confirmation" slots ---------- */
.ll-reserved {
	border: 1.5px dashed var(--wp--preset--color--mauve);
	border-radius: 18px;
	background: var(--wp--preset--color--white);
	text-align: center;
}
.ll-tag-confirm {
	display: inline-block;
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--violet);
	background: var(--wp--preset--color--lavender);
	border: 1px dashed var(--wp--preset--color--mauve);
	border-radius: 8px;
	padding: 0.3rem 0.85rem;
}

/* ---------- Numbered steps ---------- */
.ll-step-num {
	width: 2.1rem;
	height: 2.1rem;
	border-radius: 50%;
	background: var(--wp--preset--color--lavender);
	color: var(--wp--preset--color--plum);
	font-weight: 700;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: var(--wp--preset--font-size--small);
}

/* ---------- Service list bullets (champagne dots) ---------- */
.ll-svc-list {
	list-style: none;
	padding-left: 0;
}
.ll-svc-list li {
	padding: 0.5rem 0 0.5rem 1.6rem;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--ink-soft);
	position: relative;
}
.ll-svc-list li::before {
	content: "";
	position: absolute;
	left: 0.15rem;
	top: 1.05rem;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--wp--preset--color--champagne);
}

/* ---------- Region cards (service area) ---------- */
.ll-region {
	background: var(--wp--preset--color--white);
	border-radius: 18px;
	box-shadow: 0 6px 30px rgba(74, 53, 94, 0.08);
	border-top: 3px solid var(--wp--preset--color--lilac);
}

/* ---------- Blog cards ---------- */
.ll-post-card {
	background: var(--wp--preset--color--white);
	border-radius: 18px;
	box-shadow: 0 6px 30px rgba(74, 53, 94, 0.08);
	overflow: hidden;
	height: 100%;
}
.ll-post-card .wp-block-post-title a {
	color: var(--wp--preset--color--ink);
	text-decoration: none;
}
.ll-post-card .wp-block-post-title a:hover {
	color: var(--wp--preset--color--violet);
}

/* ---------- Footer ---------- */
.ll-footer {
	border-top: 1px solid rgba(74, 53, 94, 0.14);
}
.ll-footer-heading {
	font-size: var(--wp--preset--font-size--x-small);
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--wp--preset--color--gold-ink);
	font-weight: 600;
}
.ll-footer a {
	color: var(--wp--preset--color--ink-soft);
	text-decoration: none;
}
.ll-footer a:hover {
	color: var(--wp--preset--color--plum);
}
@media (max-width: 781px) {
	.ll-footer .ll-svc-list-plain a {
		display: inline-flex;
		align-items: center;
		min-inline-size: 44px;
		min-block-size: 44px;
	}
}

/* ---------- Staging-only build-version line ---------- */
/* Printed via wp_footer on non-production only (see functions.php). Discreet,
   full-width, muted — a quick visual confirmation of the deployed build. */
.ll-version-note {
	text-align: center;
	font-size: var(--wp--preset--font-size--x-small);
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--ink-soft);
	background: var(--wp--preset--color--ivory);
	border-top: 1px solid rgba(74, 53, 94, 0.14);
	padding: 0.9rem 1rem;
}

/* ---------- Serif display headings ---------- */
.ll-display {
	font-family: var(--wp--preset--font-family--serif);
	font-weight: 500;
	letter-spacing: 0;
	line-height: 1.08;
	color: var(--wp--preset--color--plum);
}

/* Keep portrait service photographs equal in height without stretching them. */
.ll-card .wp-block-image img {
	width: 100%;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	object-position: 50% 28%;
}

/* A visible label makes the collapsed navigation easier to recognize. */
@media (max-width: 1100px) {
	.ll-nav .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
		align-items: center;
		gap: 0.4rem;
		padding: 0.4rem 0.65rem;
		border: 1px solid rgba(74, 53, 94, 0.3);
		border-radius: 8px;
		color: var(--wp--preset--color--plum);
	}
	.ll-nav .wp-block-navigation__responsive-container-open::after {
		content: "Menu";
		font-size: 0.875rem;
		font-weight: 600;
	}
	.ll-nav .wp-block-site-title {
		font-size: 1.25rem;
		white-space: nowrap;
	}
	.ll-nav > .wp-block-group > .wp-block-group {
		flex-direction: column;
		align-items: flex-start;
		gap: 0;
	}
	.ll-brand-sub {
		font-size: 0.6rem;
	}
}

/* Backdrop filters create a containing block for fixed descendants. Let the
   core navigation dialog cover the viewport while it is open. */
html.has-modal-open .ll-nav {
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
}

/* ---------- Centered quote page ---------- */
.ll-contact-form { width: 100%; }
.ll-contact-form .ll-inquiry { max-width: none; }
body .ll-inquiry__submit { border-radius: 8px; }
.ll-booking-steps {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 1.5rem;
	padding-left: 0;
	list-style: none;
	counter-reset: booking;
}
.ll-booking-steps > li {
	counter-increment: booking;
	border-top: 2px solid var(--wp--preset--color--lilac);
	padding-top: 0.8rem;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--ink-soft);
}
.ll-booking-steps > li::before {
	content: counter(booking) ". ";
	color: var(--wp--preset--color--plum);
	font-weight: 600;
}
.ll-contact-support .wp-block-column > .wp-block-group { height: 100%; box-sizing: border-box; }
@media (max-width: 900px) { .ll-booking-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) {
	.ll-booking-steps { grid-template-columns: 1fr; gap: 1rem; }
	.ll-post-card .wp-block-post-featured-image img { object-position: 50% 28%; }
}
.ll-post-card .wp-block-post-featured-image img { object-position: 50% 28%; }
@media (max-width: 781px) {
	.wp-block-query .wp-block-post-template.is-layout-grid { grid-template-columns: 1fr; }
}
.ll-article-image img { height: auto; max-height: 850px; object-fit: contain; }

.ll-nav .is-menu-open .wp-block-navigation-item__content {
	display: flex;
	align-items: center;
	min-height: 44px;
	box-sizing: border-box;
}

/* Preserve the original article order and show each source image once. */
.single-post:has(.ll-story-inline-cover) .wp-block-post-featured-image {
	display: none;
}
.ll-source-story .wp-block-image img {
	width: auto;
	max-height: 900px;
	object-fit: contain;
}

/* Keep each Blog row's reading links aligned despite different title lengths. */
.ll-post-card,
.ll-post-card > .wp-block-group,
.ll-post-card .wp-block-post-excerpt {
	display: flex;
	flex-direction: column;
}
.ll-post-card > .wp-block-group,
.ll-post-card .wp-block-post-excerpt { flex: 1; }
.ll-post-card .wp-block-post-excerpt__more-text {
	margin-top: auto;
	padding-top: 1rem;
}

/* Match article action heights; label length determines desktop width. */
.ll-article-actions { gap: 1rem; }
.ll-article-actions .wp-block-button__link {
	box-sizing: border-box;
	min-height: 44px;
}
.ll-article-actions .is-style-outline > .wp-block-button__link {
	padding: calc(0.85rem - 1.5px) calc(1.9rem - 1.5px);
}
/* Paired actions share height; fill and natural label widths carry hierarchy. */
:is(.entry-content .wp-block-buttons, .ll-article-actions):has(> .wp-block-button.is-style-outline):has(> .wp-block-button:not(.is-style-outline)) {
	align-items: stretch;
}
:is(.entry-content .wp-block-buttons, .ll-article-actions):has(> .wp-block-button.is-style-outline):has(> .wp-block-button:not(.is-style-outline)) > .wp-block-button {
	display: flex;
}
:is(.entry-content .wp-block-buttons, .ll-article-actions):has(> .wp-block-button.is-style-outline):has(> .wp-block-button:not(.is-style-outline)) .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	min-height: max(44px, calc(1lh + 1.7rem));
}
:is(.entry-content .wp-block-buttons, .ll-article-actions):has(> .wp-block-button.is-style-outline):has(> .wp-block-button:not(.is-style-outline)) > .is-style-outline > .wp-block-button__link {
	padding: calc(0.85rem - 1.5px) calc(1.9rem - 1.5px);
}
@media (max-width: 480px) {
	.ll-article-actions .wp-block-button,
	.ll-article-actions .wp-block-button__link { width: 100%; }
}

/* Quote actions share a pill silhouette, including the outlined footer action.
   Match destinations so hosted native blocks need no editorial rewrite. */
.wp-block-button > .wp-block-button__link[href$="/contact/"] {
	border-radius: 999px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	min-height: 44px;
}

/* Portfolio is a quieter text action; retain a comfortable hit area and focus. */
.wp-block-button > .wp-block-button__link.wp-element-button[href$="/portfolio/"] {
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	color: var(--wp--preset--color--plum);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	min-height: 44px;
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.25em;
}
.wp-block-button > .wp-block-button__link.wp-element-button[href$="/portfolio/"]:hover,
.wp-block-button > .wp-block-button__link.wp-element-button[href$="/portfolio/"]:focus-visible {
	background: transparent;
	color: var(--wp--preset--color--plum-deep);
}

/* Home's opening copy supports the photography instead of filling a screen.
   Match its existing native heading so hosted editorial content needs no rewrite. */
.home .entry-content > .wp-block-group:has(> h1.ll-display) {
  padding-top: var(--wp--preset--spacing--40) !important;
  padding-bottom: var(--wp--preset--spacing--30) !important;
}
.home .entry-content > .wp-block-group:has(> h1.ll-display) > h1 {
  max-width: var(--wp--style--global--wide-size);
  font-size: var(--wp--preset--font-size--huge) !important;
  text-wrap: balance;
}
.home .entry-content > .wp-block-group:has(> h1.ll-display) > * + * {
  margin-block-start: var(--wp--preset--spacing--20);
}
.home .entry-content > .wp-block-group:has(> h1.ll-display) > .ll-lead {
  max-width: 68ch;
}
@media (max-width: 600px) {
  .home .entry-content > .wp-block-group:has(> h1.ll-display) {
    padding-top: var(--wp--preset--spacing--30) !important;
  }
  .home .entry-content > .wp-block-group:has(> h1.ll-display) > .ll-lead {
    font-size: var(--wp--preset--font-size--medium);
  }
}

/* Complete landscape frames; only the first renders before playback advances.
   Reserve the tallest selected ratio so fades never move the next section. */
.ll-hero-slideshow {
  position: relative;
  height: auto;
  aspect-ratio: 3 / 2;
  overflow: hidden;
  background: var(--wp--preset--color--ivory, #f5f1eb);
}
.ll-hero-slideshow > .wp-block-image {
  position: absolute;
  inset: 0;
  max-width: none !important;
  margin: 0 !important;
  opacity: 0;
  transition: opacity 800ms ease;
  pointer-events: none;
}
.ll-hero-slideshow:not(.is-enhanced) > .wp-block-image:first-child,
.ll-hero-slideshow > .wp-block-image.is-active { opacity: 1; }
.ll-hero-slideshow .wp-block-image img {
  display: block;
  width: 100%;
  height: 100%;
  aspect-ratio: auto;
  object-fit: contain;
  object-position: center;
  background: var(--wp--preset--color--ivory);
}
/* Meet the white introduction directly, without the inherited ivory gap. */
.home .entry-content > .ll-hero-slideshow + .wp-block-group {
  margin-block-start: 0;
}
/* Equal service choices within a row; stacked cards keep natural heights. */
@media (min-width: 782px) {
  .home .entry-content .wp-block-column:has(> .ll-card) {
    display: flex;
  }
  .home .entry-content .wp-block-column > .ll-card,
  .home .entry-content .ll-card > .wp-block-group {
    display: flex;
    flex-direction: column;
    flex: 1;
  }
  .home .entry-content .ll-card > .wp-block-group > p:last-child {
    margin-block-start: auto;
    padding-block-start: 0.5rem;
  }
}
/* The remaining work photo uses the centered content width and its full frame. */
.ll-about-work .wp-block-image img {
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: contain;
  object-position: center top;
}
.ll-hero-toggle {
  position: absolute;
  right: 1rem;
  bottom: 1rem;
  z-index: 2;
  min-width: 44px;
  min-height: 44px;
  padding: .25rem .4rem;
  border: 0;
  border-radius: 4px;
  background: transparent;
  box-shadow: none;
  color: #fff;
  font: inherit;
  font-size: .6875rem;
  text-shadow: 0 1px 3px rgb(0 0 0 / 80%), 0 0 1px rgb(0 0 0 / 90%);
  cursor: pointer;
}
.ll-hero-toggle[hidden] { display: none; }
.ll-hero-toggle:focus-visible {
  outline: 3px solid #fff;
  outline-offset: 3px;
  box-shadow: 0 0 0 7px rgb(0 0 0 / 65%);
}
@media (max-width: 600px) {
  .ll-hero-slideshow .wp-block-image.ll-hero-photo img { height: 100%; aspect-ratio: auto; }
}
/* The editor shows all native Image blocks for easy replacement. */
.editor-styles-wrapper .ll-hero-slideshow { height: auto; aspect-ratio: auto; overflow: visible; }
.editor-styles-wrapper .ll-hero-slideshow > .wp-block-image {
  position: relative;
  opacity: 1;
  pointer-events: auto;
}
.editor-styles-wrapper .ll-hero-slideshow .wp-block-image img { height: auto; }

/* Selected portfolio originals retain complete framing inside equal gallery cells. */
.wp-block-gallery.has-nested-images figure.wp-block-image.ll-photo-full img {
	/* Core's cropped-gallery rule includes an ID guard; keep this override local. */
	object-fit: contain !important;
	background: var(--wp--preset--color--white);
}

/* Home's compact preview fills equal portrait frames; lightboxes retain originals. */
.home .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image {
	aspect-ratio: 3 / 4;
}
.home .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img {
	object-fit: cover !important;
	object-position: 50% 50%;
	border-radius: 10px;
}
.home .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-223 { object-position: 55% 50%; }
.home .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-225 { object-position: 42% 50%; }
/* Core carries preview geometry into its overlay; show the whole photo there. */
.home .wp-lightbox-overlay img { object-fit: contain !important; }

/* Consistent photo previews on Services and Portfolio; originals stay untouched. */
.page-id-6 .entry-content :is(#weddings, #events, #professional) .wp-block-columns,
.page-id-6 .entry-content :is(#weddings, #events, #professional) .wp-block-column {
	align-items: flex-start;
	align-self: flex-start;
}
.page-id-6 .entry-content :is(#weddings, #events, #professional) .ll-frame img {
	width: 100%;
	height: auto;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: 10px;
}
.page-id-6 .entry-content #events img.wp-image-42 { object-position: 50% 12%; }
.page-id-7 .entry-content .wp-block-gallery.has-nested-images {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	align-items: start;
}
/* Four-photo galleries fill one desktop row and a balanced 2x2 grid on phones. */
.page-id-7 .entry-content .wp-block-gallery.has-nested-images.columns-4 {
	grid-template-columns: repeat(4, minmax(0, 1fr));
}
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image {
	width: 100% !important;
	margin: 0 !important;
	aspect-ratio: 3 / 4;
}
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img {
	width: 100%;
	height: 100%;
	aspect-ratio: 3 / 4;
	object-fit: cover !important;
	object-position: 50% 50%;
	border-radius: 10px;
}
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-223 { object-position: 55% 50%; }
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-225 { object-position: 42% 50%; }
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-227 { object-position: 40% 50%; }
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-228 { object-position: 12% 50%; }
.page-id-7 .entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img.wp-image-229 { object-position: 65% 50%; }
/* Fit both native layers to the actual photo so rounding meets its visible edges. */
.page-id-7 .wp-lightbox-overlay .wp-block-image img {
  width: min(100%, calc(var(--wp--lightbox-container-height) * var(--ll-photo-ratio, 0.75)));
  height: min(100%, calc(var(--wp--lightbox-container-width) / var(--ll-photo-ratio, 0.75)));
  min-width: 0;
  min-height: 0;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain !important;
  object-position: center;
  border-radius: 10px;
  background: transparent;
  border: 0;
  padding: 0;
}
@media (max-width: 781px) {
	.page-id-7 .entry-content .wp-block-gallery.has-nested-images,
	.page-id-7 .entry-content .wp-block-gallery.has-nested-images.columns-4 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}
