/* iSplash Sites - Generated CSS */

:root {
  --color-link: #2F6F1C;
  --theme-link: #2F6F1C;
  --color-text: #17231B;
  --theme-text: #17231B;
  --color-error: #B42318;
  --theme-error: #B42318;
  --color-muted: #64706A;
  --theme-muted: #64706A;
  --color-accent: #4f46e5;
  --theme-accent: #4f46e5;
  --color-border: #e5e7eb;
  --theme-border: #e5e7eb;
  --color-neutral: #64706A;
  --theme-neutral: #64706A;
  --color-primary: #3F7D27;
  --theme-primary: #3F7D27;
  --color-success: #2E7D32;
  --theme-success: #2E7D32;
  --color-surface: #f8fafc;
  --theme-surface: #f8fafc;
  --color-warning: #8A5A00;
  --theme-warning: #8A5A00;
  --color-secondary: #5BA137;
  --theme-secondary: #5BA137;
  --color-background: #F7FAF5;
  --theme-background: #F7FAF5;
  --focus-ring: #2F6F1C;
  --font-heading: Outfit, "Work Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  --font-body: "Work Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  --font-button: "Work Sans", var(--font-body);
  --font-accent: "Work Sans", var(--font-heading);
  --font-heading-weight: 700;
  --font-body-weight: 400;
  --font-accent-weight: 600;
  --site-content-width: 1200px;
  --site-side-padding: 24px;
  --btn-primary-bg: var(--theme-primary);
  --btn-primary-text: #FFFFFF;
  --btn-primary-border-width: 1px;
  --btn-primary-border-color: transparent;
  --btn-primary-border: 1px solid transparent;
  --btn-primary-bg-hover: #315F20;
  --btn-primary-text-hover: #ffffff;
  --btn-primary-border-color-hover: transparent;
  --btn-primary-hover-animation: none;
  --btn-primary-hover-transform: none;
  --btn-primary-hover-shadow: none;
  --btn-primary-icon-left-hover-transform: none;
  --btn-primary-icon-right-hover-transform: none;
  --btn-primary-label-hover-transform: none;
  --btn-secondary-bg: var(--theme-secondary);
  --btn-secondary-text: #17231B;
  --btn-secondary-border-width: 1px;
  --btn-secondary-border-color: transparent;
  --btn-secondary-border: 1px solid transparent;
  --btn-secondary-bg-hover: var(--theme-primary);
  --btn-secondary-text-hover: #ffffff;
  --btn-secondary-border-color-hover: transparent;
  --btn-secondary-hover-animation: none;
  --btn-secondary-hover-transform: none;
  --btn-secondary-hover-shadow: none;
  --btn-secondary-icon-left-hover-transform: none;
  --btn-secondary-icon-right-hover-transform: none;
  --btn-secondary-label-hover-transform: none;
  --btn-text-bg: transparent;
  --btn-text-text: var(--theme-primary);
  --btn-text-border-width: 0;
  --btn-text-border-color: transparent;
  --btn-text-border: 0 solid transparent;
  --btn-text-bg-hover: transparent;
  --btn-text-text-hover: var(--theme-primary);
  --btn-text-border-color-hover: transparent;
  --btn-text-hover-animation: none;
  --btn-text-hover-transform: none;
  --btn-text-hover-shadow: none;
  --btn-text-icon-left-hover-transform: none;
  --btn-text-icon-right-hover-transform: none;
  --btn-text-label-hover-transform: none;
  --btn-outline-bg: var(--btn-text-bg);
  --btn-outline-text: var(--btn-text-text);
  --btn-outline-border-width: var(--btn-text-border-width);
  --btn-outline-border-color: var(--btn-text-border-color);
  --btn-outline-border: var(--btn-text-border);
  --btn-outline-bg-hover: var(--btn-text-bg-hover);
  --btn-outline-text-hover: var(--btn-text-text-hover);
  --btn-outline-border-color-hover: var(--btn-text-border-color-hover);
  --btn-outline-hover-animation: var(--btn-text-hover-animation);
  --btn-outline-hover-transform: var(--btn-text-hover-transform);
  --btn-outline-hover-shadow: var(--btn-text-hover-shadow);
  --btn-outline-icon-left-hover-transform: var(--btn-text-icon-left-hover-transform);
  --btn-outline-icon-right-hover-transform: var(--btn-text-icon-right-hover-transform);
  --btn-outline-label-hover-transform: var(--btn-text-label-hover-transform);
  --btn-radius: 6px;
  --btn-font-family: "Work Sans", var(--font-body);
  --btn-font-weight: 600;
  --btn-letter-spacing: 0;
  --btn-transition: 200ms;
  --btn-icon-gap: 8px;
  --btn-icon-size: 1em;
  --theme-h1-font-size: 64px;
  --theme-h1-font-size-tablet: 54.4px;
  --theme-h1-font-size-mobile: 44.8px;
  --theme-h1-font-weight: 700;
  --theme-h1-line-height: 1.08;
  --theme-h2-font-size: 44px;
  --theme-h2-font-size-tablet: 38.72px;
  --theme-h2-font-size-mobile: 33px;
  --theme-h2-font-weight: 700;
  --theme-h2-line-height: 1.12;
  --theme-h3-font-size: 28px;
  --theme-h3-font-size-tablet: 25.2px;
  --theme-h3-font-size-mobile: 22.4px;
  --theme-h3-font-weight: 600;
  --theme-h3-line-height: 1.2;
  --theme-h4-font-size: 22px;
  --theme-h4-font-size-tablet: 20.9px;
  --theme-h4-font-size-mobile: 18.7px;
  --theme-h4-font-weight: 600;
  --theme-h4-line-height: 1.25;
  --theme-h5-font-size: 20px;
  --theme-h5-font-size-tablet: 19px;
  --theme-h5-font-size-mobile: 17px;
  --theme-h5-font-weight: 600;
  --theme-h5-line-height: 1.25;
  --theme-h6-font-size: 18px;
  --theme-h6-font-size-tablet: 17.1px;
  --theme-h6-font-size-mobile: 15.3px;
  --theme-h6-font-weight: 600;
  --theme-h6-line-height: 1.25;
  --text-body-size: 17px;
  --text-body-weight: 400;
  --text-body-lh: 1.65;
  --text-lead-size: 20px;
  --text-lead-weight: 400;
  --text-lead-lh: 1.5;
  --text-small-size: 14px;
  --text-small-weight: 400;
  --text-small-lh: 1.5;
  --text-caption-size: 12px;
  --text-caption-weight: 400;
  --text-caption-lh: 1.4;
  --surface-card-bg: #ffffff;
  --surface-card-radius: 16px;
  --surface-card-shadow: 0 0 44px 8px rgba(15, 23, 42, 0.07);
}

/* Theme heading tokens follow the same Desktop-derived §3.2 scale as an
   explicitly sized heading widget. Per-widget responsive rules are emitted
   later with !important, so a user's breakpoint override still wins. */
@media (min-width: 768px) and (max-width: 1023.98px) {
  :root {
    --theme-h1-font-size: var(--theme-h1-font-size-tablet);
    --theme-h2-font-size: var(--theme-h2-font-size-tablet);
    --theme-h3-font-size: var(--theme-h3-font-size-tablet);
    --theme-h4-font-size: var(--theme-h4-font-size-tablet);
    --theme-h5-font-size: var(--theme-h5-font-size-tablet);
    --theme-h6-font-size: var(--theme-h6-font-size-tablet);
  }
}
@media (max-width: 767.98px) {
  :root {
    --theme-h1-font-size: var(--theme-h1-font-size-mobile);
    --theme-h2-font-size: var(--theme-h2-font-size-mobile);
    --theme-h3-font-size: var(--theme-h3-font-size-mobile);
    --theme-h4-font-size: var(--theme-h4-font-size-mobile);
    --theme-h5-font-size: var(--theme-h5-font-size-mobile);
    --theme-h6-font-size: var(--theme-h6-font-size-mobile);
  }
}

/* Reset */
*, *::before, *::after { box-sizing: border-box; }
html, body { max-width: 100%; overflow-x: clip; overflow-y: visible; font-family: var(--font-body); }
body { margin: 0; font-family: var(--font-body); font-weight: var(--text-body-weight, var(--font-body-weight, 400)); font-size: var(--text-body-size, 16px); color: var(--theme-text, var(--color-text, #111827)); background: var(--theme-background, var(--color-background, #fff)); line-height: var(--text-body-lh, 1.6); }
/* Hidden state must clear the viewport COMPLETELY: with top:1rem, a plain
   translateY(-120%) leaves height*0.2 - 1rem of the pill peeking into the
   page top (~7px at the default 46px height) — invisible on white headers,
   obvious over a transparent-header hero. -100% - 2rem guarantees the box
   (and its drop shadow, suppressed until focus) ends above y=0. */
.skip-link { position: absolute; inset-inline-start: 1rem; top: 1rem; transform: translateY(calc(-100% - 2rem)); z-index: 10001; display: inline-flex; align-items: center; min-height: 44px; padding: 0.65rem 1rem; border-radius: 0.375rem; background: var(--theme-background, var(--color-background, #fff)); color: var(--theme-primary, var(--color-primary, #2563eb)); font-weight: 700; text-decoration: none; transition: transform 160ms ease; }
.skip-link:focus-visible { transform: translateY(0); outline: 2px solid var(--theme-primary, var(--color-primary, #2563eb)); outline-offset: 2px; box-shadow: 0 10px 30px rgba(15, 23, 42, 0.18); }
@media (prefers-reduced-motion: reduce) { .skip-link { transition: none; } }
body :where(p, li, a, label, input, textarea, select, button, td, th, figcaption, blockquote) {
  font-family: var(--font-body);
}
img, video { max-width: 100%; height: auto; display: block; }
a { color: var(--link-context, var(--theme-primary, var(--color-primary, #2563eb))); }
.isplash-rich-text a {
  color: var(--link-context, var(--theme-link, var(--theme-primary, var(--color-primary, #2563eb))));
  text-decoration: underline;
  text-decoration-color: currentColor;
  text-underline-offset: 2px;
}
@media (hover: hover) { .isplash-rich-text a:hover { opacity: 0.85; } }
/* FOUNDER RULE — a link inside a toolbar-coloured selection follows that
   colour (mirror of the canvas rule in globals.css; declaration-boundary
   match; !important beats the per-block link-colour override too — the
   selection-level choice is the most specific). Spans stamped data-block-lift
   are colour PROMOTED from the block on edit, not a selection — links inside
   those follow the theme Link colour instead (founder decision 2026-08-12). */
.isplash-rich-text span[style^="color:"]:not([data-block-lift]) a:not([style^="color:"]):not([style*="; color:"]),
.isplash-rich-text span[style*="; color:"]:not([data-block-lift]) a:not([style^="color:"]):not([style*="; color:"]) {
  color: inherit !important;
}
/* Same decision, other nesting order: the promoted span can sit INSIDE the
   link — the lifted colour must not repaint link text. */
.isplash-rich-text a span[data-block-lift] {
  color: inherit !important;
}

/* Published typography parity: body copy should never fall back to browser serif defaults. */
.isplash-rich-text,
.isplash-rich-text * {
  font-family: var(--font-body);
}
.block-text,
.block-text .isplash-rich-text,
.block-text .isplash-rich-text * { font-family: var(--font-body); }
/* Owner decision 2026-08-18 — a HEADING IS A HEADING, everywhere. The body-font
   catch-alls above ((0,1,0) and (0,2,0)) beat the bare h1-h6 element rule
   ((0,0,1)), so a heading created inside a Text widget via the format dropdown
   (a first-class flow, RULE 2.1.5) published in the BODY font while the canvas
   showed the heading font. These exceptions out-rank each catch-all
   ((0,1,1)/(0,2,1) + descendants) so canvas == published. */
.isplash-rich-text :is(h1, h2, h3, h4, h5, h6),
.isplash-rich-text :is(h1, h2, h3, h4, h5, h6) *,
.block-text .isplash-rich-text :is(h1, h2, h3, h4, h5, h6),
.block-text .isplash-rich-text :is(h1, h2, h3, h4, h5, h6) * { font-family: var(--font-heading); }
.block-large-title,
.block-small-title,
.block-large-title .isplash-rich-text,
.block-small-title .isplash-rich-text,
.block-large-title .isplash-rich-text *,
.block-small-title .isplash-rich-text * { font-family: var(--font-heading); }

/* Headings */
h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); font-weight: var(--font-heading-weight, 700); line-height: 1.2; margin: 0 0 0.5em; }
h1 { font-size: var(--theme-h1-font-size, 48px); font-weight: var(--theme-h1-font-weight, var(--font-heading-weight, 700)); line-height: var(--theme-h1-line-height, 1.1); }
h2 { font-size: var(--theme-h2-font-size, 36px); font-weight: var(--theme-h2-font-weight, var(--font-heading-weight, 700)); line-height: var(--theme-h2-line-height, 1.2); }
h3 { font-size: var(--theme-h3-font-size, 28px); font-weight: var(--theme-h3-font-weight, var(--font-heading-weight, 600)); line-height: var(--theme-h3-line-height, 1.25); }
h4 { font-size: var(--theme-h4-font-size, 22px); font-weight: var(--theme-h4-font-weight, var(--font-heading-weight, 600)); line-height: var(--theme-h4-line-height, 1.3); }
h5 { font-size: var(--theme-h5-font-size, 18px); font-weight: var(--theme-h5-font-weight, var(--font-heading-weight, 600)); line-height: var(--theme-h5-line-height, 1.35); }
h6 { font-size: var(--theme-h6-font-size, 16px); font-weight: var(--theme-h6-font-weight, var(--font-heading-weight, 600)); line-height: var(--theme-h6-line-height, 1.4); }

/* Rich text parity with the editor canvas. */
.isplash-rich-text { margin: 0; padding: 0; overflow: visible; width: 100%; display: block; }
.isplash-rich-text > :first-child { margin-top: 0; }
.isplash-rich-text > :last-child { margin-bottom: 0; }

/* Container */
.site-page { max-width: 1280px; margin: 0 auto; }

/* Responsive images */
.block-image { overflow: hidden; min-width: 0; max-width: 100%; box-sizing: border-box; }
.block-image a,
.block-image figure { display: block; width: 100%; max-width: 100%; border-radius: inherit; }
.block-image img { width: 100%; max-width: 100%; max-height: 100%; object-fit: cover; border-radius: inherit; loading: lazy; }
.block-image > img { min-height: inherit; }
.block-image.is-contain-image {
  overflow: visible;
  display: flex;
  align-items: center;
  justify-content: center;
}
.block-image.is-contain-image a,
.block-image.is-contain-image figure {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.block-image figure.image-composition {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
  min-height: 0;
  overflow: visible;
}
.block-image .image-media-row {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  border-radius: inherit;
}
.block-image.is-contain-image .image-media-row {
  display: flex;
  align-items: center;
  justify-content: center;
}
.block-image[data-image-composition="bounded"] {
  display: grid;
  grid-template-rows: minmax(0, 1fr);
  overflow: hidden;
}
.block-image[data-image-composition="bounded"] > figure.image-composition {
  display: grid;
  grid-template-rows: minmax(0, 3fr) minmax(0, 1fr);
  width: 100%;
  max-width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}
.block-image[data-image-composition="bounded"] > figure.image-composition > .image-media-row {
  height: 100%;
  min-height: 0;
  overflow: hidden;
}
.block-image[data-image-composition="bounded"] > figure.image-composition > .image-caption {
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scrollbar-gutter: stable;
  box-sizing: border-box;
  overflow-wrap: anywhere;
  margin-top: 0;
  padding-top: .5rem;
  outline-offset: -2px;
}
.block-image .image-caption:focus-visible {
  outline: 2px solid var(--focus-ring, #2563eb);
  outline-offset: -2px;
}
.block-image > a:focus-visible,
.block-image .image-media-row > a:focus-visible {
  outline: 2px solid var(--focus-ring, #2563eb);
  outline-offset: -2px;
}

/* Logo grids use fixed-height image boxes. Contain must fit the entire mark, not crop it. */
.block-image img[data-object-fit="contain"],
.block-image img[style*="object-fit:contain"] {
  width: 100% !important;
  height: 100% !important;
  max-width: 100% !important;
  max-height: 100% !important;
  object-fit: contain !important;
  object-position: center !important;
}
.block-image[data-preserve-aspect="true"]:not([data-fit-box="true"]) img {
  width: auto !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: 100% !important;
  object-fit: contain !important;
  object-position: center !important;
}
.block-image.is-source-body-logo {
  overflow: visible !important;
  padding: 12px;
  min-height: 112px;
}
.block-image.is-source-body-logo a,
.block-image.is-source-body-logo figure {
  height: 100%;
  min-height: 88px;
}
.block-image.is-source-body-logo img {
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: 88px !important;
  object-fit: contain !important;
  object-position: center !important;
}
/* Compact source-logo proof (URL-rebuilder carrier band): overrides the
   generic source-body-logo bulk so a logo-proof image fills its fixed proof
   box (restored after an accidental rebuild loss — commit 66e661c8). */
.block-image.is-logo-proof-image {
  overflow: visible !important;
  padding: 0 !important;
  min-height: 0 !important;
  display: flex;
  align-items: center;
  justify-content: center;
}
.block-image.is-logo-proof-image a,
.block-image.is-logo-proof-image figure {
  width: 100%;
  height: 100%;
  min-height: 0 !important;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
}
.block-image.is-logo-proof-image img {
  width: 100% !important;
  height: 100% !important;
  max-width: 100% !important;
  max-height: 100% !important;
  object-fit: contain !important;
  object-position: center !important;
}
.block-image.is-logo-proof-image[data-image-composition="bounded"] {
  display: grid;
  grid-template-rows: minmax(0, 1fr);
  overflow: hidden !important;
}
.block-image.is-logo-proof-image[data-image-composition="bounded"] > .image-media-row {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}
.block-image.is-logo-proof-image[data-image-composition="bounded"] > figure.image-composition {
  display: grid;
}

/* Shared footers are full-bleed backgrounds with boxed content, matching section behavior. */
.block-footer > .footer-container {
  width: 100%;
  max-width: var(--site-content-width, 1200px);
  margin-left: auto;
  margin-right: auto;
  padding-left: var(--site-side-padding, 20px);
  padding-right: var(--site-side-padding, 20px);
  box-sizing: border-box;
}
.block-footer > .footer-container > .block-section {
  max-width: 100% !important;
}
.block-footer .section-container {
  max-width: 100% !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.block-footer .block-section {
  width: 100%;
}

/* Columns */
.block-row { display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; gap: 24px; }
.block-columns { display: flex; flex-wrap: wrap; }
.block-column { flex: 1; min-width: 0; }
/* G27 — background video layer (behind content; the host sets position:relative). */
.bg-video-layer { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -1; pointer-events: none; border: 0; }
@media (prefers-reduced-motion: reduce) { .bg-video-layer { display: none; } }
@media (max-width: 767.98px) {
  .stack-mobile .block-column { flex: 0 0 100%; }
}
@media (max-width: 1023.98px) {
  .stack-tablet .block-column { flex: 0 0 100%; }
}

/*
 * Responsive column auto-stacking — RESPONSIVE_CONSTRAINTS.md §3.1
 *   Desktop : N columns side-by-side
 *   Tablet  : 2-col stays 2; 3-col becomes 2+1 wrap; 4-col becomes 2×2;
 *             5-col becomes 3+2 wrap; 6-col becomes 3×2
 *   Mobile  : everything stacks to 1 column except 6-col which stays 2×3
 * The user can override any of these by setting an explicit column width
 * at the breakpoint (not handled here — this is the auto-default layer).
 */
@media (min-width: 768px) and (max-width: 1023.98px) {
  .block-columns[data-col-count="3"] > .block-column:nth-child(-n+2) { flex: 0 0 calc(50% - 12px); }
  .block-columns[data-col-count="3"] > .block-column:nth-child(3) { flex: 0 0 100%; }
  .block-columns[data-col-count="4"] > .block-column { flex: 0 0 calc(50% - 12px); }
  .block-columns[data-col-count="5"] > .block-column:nth-child(-n+3) { flex: 0 0 calc(33.333% - 16px); }
  .block-columns[data-col-count="5"] > .block-column:nth-child(n+4) { flex: 0 0 calc(50% - 12px); }
  .block-columns[data-col-count="6"] > .block-column { flex: 0 0 calc(33.333% - 16px); }
}
@media (max-width: 767.98px) {
  .block-columns[data-col-count="2"] > .block-column,
  .block-columns[data-col-count="3"] > .block-column,
  .block-columns[data-col-count="4"] > .block-column,
  .block-columns[data-col-count="5"] > .block-column { flex: 0 0 100%; }
  /* 6-col keeps a 2-per-row grid on mobile per §3.1 so stacks don't get absurd */
  .block-columns[data-col-count="6"] > .block-column { flex: 0 0 calc(50% - 8px); }
  .block-section,
  .section-container,
  .block-row,
  .block-columns,
  .block-column,
  .block-inner-column {
    max-width: 100%;
    min-width: 0;
  }
  .block-section .block-text,
  .block-section .block-large-title,
  .block-section .block-small-title,
  .block-section .isplash-rich-text,
  .block-section .isplash-rich-text * {
    max-width: 100%;
    min-width: 0;
    white-space: normal !important;
    overflow-wrap: anywhere;
    word-break: normal;
  }
  .block-section .block-button,
  .block-section .btn {
    max-width: 100%;
    white-space: normal;
  }
}

/*
 * Heading auto-scale — RESPONSIVE_CONSTRAINTS.md §3.2
 * Theme token sizes are switched above through Desktop-derived tablet/mobile
 * variables. Explicit per-widget sizes use the canonical shared resolver and
 * are emitted by responsive.css, where breakpoint overrides win.
 */

/* Section padding auto-scale is emitted per block by the shared responsive
 * resolver. This keeps its thresholds and explicit overrides identical to the
 * Canvas instead of layering a second blanket multiplier on Published. */

/* Navigation */
.block-nav { display: flex; align-items: center; gap: 1.5rem; }
.block-nav.nav-vertical { flex-direction: column; align-items: flex-start; gap: .75rem; }
.block-nav a { text-decoration: none; color: inherit; font-weight: 500; }
.block-nav-links { display: block; width: 100%; }
.block-nav-links ul {
  display: flex;
  align-items: center;
  justify-content: var(--nav-justify, flex-start);
  flex-wrap: wrap;
  gap: var(--nav-gap, 24px);
  row-gap: 0.5rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.block-nav-links li {
  position: relative;
  flex: 0 0 auto;
  margin: 0;
  padding: 0;
}
.block-nav-links a,
.block-nav-links .nav-menu-button {
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  gap: 0.25rem;
  min-height: 44px;
  border: 0;
  padding: 0;
  background: transparent;
  color: var(--nav-link-color, inherit);
  cursor: pointer;
  font: inherit;
  font-weight: inherit;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  border-bottom: var(--nav-link-border, none);
  background-color: var(--nav-link-bg, transparent);
  transition: color 150ms ease, background-color 150ms ease, border-color 150ms ease;
}
.block-nav-links a:hover,
.block-nav-links .nav-menu-button:hover {
  color: var(--nav-hover-color, #2563eb);
  border-bottom: var(--nav-hover-border, var(--nav-link-border, none));
  background-color: var(--nav-hover-bg, var(--nav-link-bg, transparent));
  font-weight: var(--nav-hover-weight, inherit);
}
.block-nav-links .nav-link:focus-visible,
.block-nav-links .nav-mobile-link:focus-visible {
  outline: 2px solid var(--nav-hover-color, var(--theme-primary, var(--color-primary, #2563eb)));
  outline-offset: 3px;
  border-radius: var(--btn-radius, 6px);
}
.block-nav-links a[aria-current="page"] {
  color: var(--nav-active-color, #2563eb);
  border-bottom: var(--nav-active-border, none);
  background-color: var(--nav-active-bg, transparent);
  font-weight: var(--nav-active-weight, inherit);
}
/* O4: item separators (horizontal top-level items only). data-separator on the
   nav — emitted only when set — becomes an ::after glyph after each item except
   the last; scoped to the top-level ul so submenu items are never affected. */
.block-nav-links.nav-horizontal[data-separator="bar"] > ul > li:not(:last-child)::after,
.block-nav-links.nav-horizontal[data-separator="slash"] > ul > li:not(:last-child)::after,
.block-nav-links.nav-horizontal[data-separator="dot"] > ul > li:not(:last-child)::after {
  display: inline-block;
  margin-left: 0.6em;
  opacity: 0.5;
  pointer-events: none;
  vertical-align: middle;
}
.block-nav-links.nav-horizontal[data-separator="bar"] > ul > li:not(:last-child)::after { content: "|"; }
.block-nav-links.nav-horizontal[data-separator="slash"] > ul > li:not(:last-child)::after { content: "/"; }
.block-nav-links.nav-horizontal[data-separator="dot"] > ul > li:not(:last-child)::after { content: "•"; }
.block-nav-links .nav-parent-marker {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.85em;
  line-height: 1;
  opacity: 0.72;
  transition: transform 180ms ease;
}
.block-nav-links li.has-children[data-dropdown-open="true"] > .nav-link .nav-parent-marker,
.block-nav-links li.has-children:hover > .nav-link .nav-parent-marker,
.block-nav-links li.has-children:focus-within > .nav-link .nav-parent-marker {
  transform: rotate(180deg);
}
.block-nav-links li.has-children[data-dropdown-suppressed="true"] > .nav-link .nav-parent-marker,
.block-nav-links li.has-children[data-dropdown-open="false"] > .nav-link .nav-parent-marker {
  transform: rotate(0deg);
}
@media (prefers-reduced-motion: reduce) {
  .block-nav-links .nav-parent-marker {
    transition: none;
    animation: none;
  }
}
.block-nav-links .nav-mobile-toggle,
.block-nav-links .nav-mobile-panel { display: none; }
.block-nav-links .nav-mobile-toggle {
  min-width: 44px;
  min-height: 44px;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 5px;
  border: 0;
  border-radius: var(--btn-radius, 6px);
  background: transparent;
  color: inherit;
  cursor: pointer;
}
.block-nav-links .nav-mobile-toggle span {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 999px;
  background: currentColor;
}
.block-nav-links .nav-mobile-panel {
  position: fixed;
  inset: 0 0 0 auto;
  z-index: 999;
  width: var(--nav-mobile-panel-width, min(60vw, 360px));
  max-width: 100vw;
  flex-direction: column;
  gap: 1.5rem;
  overflow-y: auto;
  padding: 1.25rem;
  background: var(--theme-background, var(--color-background, #ffffff));
  color: var(--theme-text, var(--color-text, #111827));
  box-shadow: -24px 0 48px rgba(15, 23, 42, 0.18);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateX(100%);
  transition: transform 220ms ease, opacity 220ms ease, visibility 0s linear 220ms;
}
.block-nav-links[data-mobile-open="true"] .nav-mobile-panel {
  display: flex;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateX(0);
  transition: transform 220ms ease, opacity 220ms ease;
}
/* G2: dimmed backdrop behind the mobile drawer (matches the editor canvas). */
.block-nav-links .nav-mobile-overlay {
  position: fixed;
  inset: 0;
  z-index: 998;
  background: rgba(0, 0, 0, 0.4);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 220ms ease, visibility 0s linear 220ms;
}
.block-nav-links[data-mobile-open="true"] .nav-mobile-overlay {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity 220ms ease;
}
.block-nav-links .nav-mobile-close {
  align-self: flex-end;
  min-width: 44px;
  min-height: 44px;
  border: 0;
  border-radius: var(--btn-radius, 6px);
  background: var(--theme-surface, var(--color-surface, #f8fafc));
  color: inherit;
  font-size: 1.75rem;
  line-height: 1;
  cursor: pointer;
}
.block-nav-links .nav-mobile-links {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.block-nav-links .nav-mobile-item {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 0.25rem;
}
.block-nav-links .nav-mobile-row,
.hamburger-row {
  display: flex;
  min-width: 0;
  width: 100%;
  align-items: stretch;
  gap: 0.25rem;
}
.block-nav-links .nav-mobile-links a,
.block-nav-links .nav-mobile-link {
  display: flex;
  width: 100%;
  min-height: 44px;
  align-items: center;
  gap: 0.75rem;
  justify-content: flex-start;
  border-radius: var(--btn-radius, 6px);
  padding: 0.75rem 0.875rem;
  color: inherit;
  text-decoration: none;
}
.block-nav-links .nav-mobile-row > .nav-mobile-link,
.hamburger-row > .hamburger-link {
  min-width: 0;
  width: auto;
  flex: 1 1 auto;
}
.block-nav-links .nav-mobile-label,
.hamburger-label {
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  background: none;
  border: none;
  font: inherit;
  text-align: left;
}
.block-nav-links .nav-mobile-submenu-toggle,
.hamburger-submenu-toggle {
  display: inline-flex;
  min-width: 44px;
  min-height: 44px;
  flex: 0 0 44px;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: var(--btn-radius, 6px);
  background: transparent;
  color: inherit;
  cursor: pointer;
}
.block-nav-links .nav-mobile-submenu-toggle:hover,
.hamburger-submenu-toggle:hover {
  background: var(--theme-surface, var(--color-surface, #f8fafc));
}
.block-nav-links .nav-mobile-link span:first-child,
.hamburger-link span:first-child {
  min-width: 0;
  flex: 1 1 auto;
  overflow-wrap: anywhere;
}
.block-nav-links .nav-mobile-parent-marker,
.hamburger-parent-marker {
  flex: 0 0 auto;
  opacity: 0.7;
  transition: transform 200ms ease;
}
/* G3: chevron flips up when the parent is expanded. */
.block-nav-links .nav-mobile-item[data-expanded="true"] > .nav-mobile-row .nav-mobile-parent-marker,
.hamburger-item[data-expanded="true"] > .hamburger-row .hamburger-parent-marker {
  transform: rotate(180deg);
}
/* G4: the current page is highlighted in the drawer. */
.block-nav-links .nav-mobile-current,
.hamburger-current {
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 3px;
}
/* A descendant is current: show a structural cue without falsely applying
   aria-current to the parent landing-page link. */
.block-nav-links .nav-mobile-current-section > .nav-mobile-row,
.hamburger-current-section > .hamburger-row {
  border-left: 3px solid currentColor;
  padding-left: 0.25rem;
  font-weight: 700;
}
/* G5: tablet overflow-collapse. The header nav stays on one row; the runtime
   (isplashUpdateNavOverflow) sets data-nav-overflow when the links don't fit the
   available width, which collapses this nav to the hamburger drawer. Desktop
   never collapses; mobile always collapses (its own media query). */
@media (min-width: 768px) and (max-width: 1023.98px) {
  .block-header .block-nav-links { position: relative; width: 100%; }
  .block-header .block-nav-links[data-nav-overflow="true"] {
    display: flex;
    justify-content: flex-end;
  }
  .block-header .block-nav-links > ul { flex-wrap: nowrap; }
  .block-header .block-nav-links[data-nav-overflow="true"] > ul {
    position: absolute;
    visibility: hidden;
    pointer-events: none;
  }
  .block-header .block-nav-links[data-nav-overflow="true"] .nav-mobile-toggle {
    display: inline-flex;
    margin-left: auto;
  }
  .block-header .block-nav-links[data-nav-overflow="true"][data-mobile-open="true"] .nav-mobile-panel {
    display: flex;
  }
}
.block-nav-links .nav-mobile-links a:hover {
  background: var(--theme-surface, var(--color-surface, #f8fafc));
}
.block-nav-links .nav-mobile-contact {
  margin-top: 1.5rem;
  border: 1px solid color-mix(in srgb, currentColor 18%, transparent);
  border-radius: var(--btn-radius, 8px);
  padding: 1rem;
  background: color-mix(in srgb, currentColor 5%, transparent);
}
.block-nav-links .nav-mobile-contact-heading {
  margin: 0 0 0.75rem;
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.block-nav-links .nav-mobile-contact-link {
  display: flex;
  min-height: 44px;
  align-items: center;
  border-radius: var(--btn-radius, 6px);
  padding: 0.625rem 0.75rem;
  color: inherit;
  font-weight: 600;
  text-decoration: none;
}
.block-nav-links .nav-mobile-contact-link:hover {
  background: var(--theme-surface, var(--color-surface, #f8fafc));
}
.block-nav-links .nav-mobile-children {
  display: none;
  flex-direction: column;
  gap: 0.25rem;
  margin: 0.125rem 0 0.375rem 0.875rem;
  padding-left: 0.75rem;
  border-left: 1px solid color-mix(in srgb, currentColor 18%, transparent);
}
/* G3: accordion — a parent's direct children show only when it is expanded. */
.block-nav-links .nav-mobile-item[data-expanded="true"] > .nav-mobile-children {
  display: flex;
}
.block-nav-links .nav-mobile-sublink {
  padding-left: 1.5rem;
  color: var(--theme-muted, var(--color-muted, #6b7280));
}
.block-nav-links .nav-mobile-depth-1 > .nav-mobile-link,
.block-nav-links .nav-mobile-depth-2 > .nav-mobile-link,
.block-nav-links .nav-mobile-depth-1 > .nav-mobile-row > .nav-mobile-link,
.block-nav-links .nav-mobile-depth-2 > .nav-mobile-row > .nav-mobile-link {
  color: var(--theme-muted, var(--color-muted, #6b7280));
  font-size: 0.95em;
}
.block-nav-links.nav-vertical > ul {
  flex-direction: column;
  align-items: flex-start;
  gap: var(--nav-gap, 6px);
}
.block-nav-links.nav-dropdown > ul {
  flex-direction: column;
  align-items: stretch;
  gap: var(--nav-gap, 6px);
}
/* BUG-034 Part B — vertical / dropdown navs: top-level links hug their text so
   the Gap control ALONE governs inter-link spacing (gap=0 => flush). The shared
   min-height:44px floor on .block-nav-links a turns every stacked link into a
   44px row, so a vertical nav could never tighten below ~44px between items. We
   drop the floor here and preserve the 44px touch target as a transparent,
   centered ::before overlay that expands the hit area WITHOUT adding layout
   height — so the VISUAL box (and canvas parity) hugs the text while taps stay
   accessible. Horizontal navs keep the simple floor (side-by-side items create
   no vertical ghost space). Scoped to the top-level > ul > li > .nav-link so
   submenu panels and the mobile drawer are untouched.
   CAVEAT: at gap=0 adjacent hit overlays overlap (each is ≥44px tall, centered);
   a tap in the overlap resolves to the lower link. Raising the Gap separates
   them. Intentional trade so gap=0 can mean visually flush. */
.block-nav-links.nav-vertical > ul > li > .nav-link,
.block-nav-links.nav-dropdown > ul > li > .nav-link {
  position: relative;
  min-height: 0;
}
.block-nav-links.nav-vertical > ul > li > .nav-link::before,
.block-nav-links.nav-dropdown > ul > li > .nav-link::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 100%;
  min-height: 44px;
  transform: translateY(-50%);
  pointer-events: auto;
}
/* F3 — dropdown mechanics. The panel is ALWAYS laid out (visibility, never
   display:none) so open/close can animate: enter fades + scales up from the
   trigger edge (~300ms, slight overshoot), exit mirrors shorter (180ms).
   visibility flips after the exit fade via transition-delay so the panel
   stays interactive while fading. Fixed system offset: 10px below the
   trigger. Hover-intent (200ms close grace) lives in effects.js. */
.block-nav-links .nav-sub {
  position: absolute;
  left: 0;
  top: calc(100% + 10px);
  z-index: 30;
  display: flex;
  min-width: 180px;
  flex-direction: column;
  align-items: stretch;
  gap: var(--nav-sub-gap, 0);
  border: 1px solid var(--theme-border, var(--color-border, #e5e7eb));
  border-radius: 8px;
  background: var(--nav-sub-bg, var(--theme-background, var(--color-background, #ffffff)));
  padding: 0.5rem;
  box-shadow: var(--nav-sub-shadow, 0 12px 30px rgba(15, 23, 42, 0.12));
  visibility: hidden;
  opacity: 0;
  transform: translate(var(--sub-x, 0px), 4px) scale(0.97);
  transform-origin: top center;
  pointer-events: none;
  /* Tall menus stay reachable instead of running under the fold. */
  max-height: min(70vh, 480px);
  overflow-y: auto;
  transition:
    opacity 180ms ease-in,
    transform 180ms ease-in,
    visibility 0s linear 180ms;
}
/* Keep the trigger-to-panel hover path unbroken across the 10px offset gap.
   The bridge MUST live on the li, not the panel: the old panel ::before died
   the day the panel gained overflow-y:auto — overflow clips pseudo-elements
   outside the box — leaving a real dead gap that closed the menu before the
   cursor could reach it. Rendered only while the item is open/hovered so it
   never swallows stray clicks under an idle header. */
.block-nav-links li.has-children:hover::after,
.block-nav-links li.has-children:focus-within::after,
.block-nav-links li.has-children[data-dropdown-open="true"]::after {
  content: "";
  position: absolute;
  top: 100%;
  left: -8px;
  right: -8px;
  height: 16px;
}
/* Hover opens only on real hover devices (spec §6 — touch gets tap-to-open
   via the runtime instead, so a first tap never navigates blindly). Keyboard
   focus and the runtime's state attribute stay device-independent. */
@media (hover: hover) {
  .block-nav-links li:hover > .nav-sub {
    visibility: visible;
    opacity: 1;
    transform: translate(var(--sub-x, 0px), 0) scale(1);
    pointer-events: auto;
    transition:
      opacity 300ms cubic-bezier(0.2, 0.9, 0.3, 1.12),
      transform 300ms cubic-bezier(0.2, 0.9, 0.3, 1.12),
      visibility 0s;
  }
}
.block-nav-links li:focus-within > .nav-sub,
.block-nav-links li[data-dropdown-open="true"] > .nav-sub {
  visibility: visible;
  opacity: 1;
  transform: translate(var(--sub-x, 0px), 0) scale(1);
  pointer-events: auto;
  transition:
    opacity 300ms cubic-bezier(0.2, 0.9, 0.3, 1.12),
    transform 300ms cubic-bezier(0.2, 0.9, 0.3, 1.12),
    visibility 0s;
}
.block-nav-links li.has-children[data-dropdown-suppressed="true"] > .nav-sub,
.block-nav-links li.has-children[data-dropdown-open="false"] > .nav-sub {
  visibility: hidden;
  opacity: 0;
  transform: translate(var(--sub-x, 0px), 4px) scale(0.97);
  pointer-events: none;
  transition:
    opacity 180ms ease-in,
    transform 180ms ease-in,
    visibility 0s linear 180ms;
}
/* Placement presets (fixed system: Below-Center default / Below-Start /
   Below-End — no free pixel inputs). Presets only set the anchor (left/right)
   and the X part of the motion via --sub-x, so every open/close state agrees
   on X and a collision flip can never animate a horizontal slide. */
.block-nav-links[data-sub-placement="center"] li > .nav-sub {
  left: 50%;
  --sub-x: -50%;
}
.block-nav-links[data-sub-placement="end"] li > .nav-sub {
  left: auto;
  right: 0;
}
/* Collision flips (runtime): "left" pins the panel's right edge (right-side
   viewport overflow), "start" pins its left edge (left-side overflow, which
   the centered default can now cause). Placed after the presets so the
   equal-specificity var/anchor overrides win in both states. */
.block-nav-links li > .nav-sub[data-align="left"] {
  left: auto !important;
  right: 0;
  --sub-x: 0px;
}
.block-nav-links li > .nav-sub[data-align="start"] {
  left: 0 !important;
  right: auto;
  --sub-x: 0px;
}
/* F7 — cascading flyouts (explicit submenu mode). A nested panel opens to
   the SIDE of its parent row, top-aligned to the row (the -0.5rem cancels
   the parent panel's padding so first rows line up). The li in the selector
   ties the placement presets' specificity, and source order below them wins
   — a nested panel must ignore the top-level center/end anchors. */
.block-nav-links .nav-sub li > .nav-sub {
  left: 100%;
  right: auto;
  top: -0.5rem;
  margin-left: 6px;
  --sub-x: 0px;
  transform-origin: top left;
}
/* A cascade panel holding a nested flyout must NOT scroll: the child panel
   sits outside its parent's box, and overflow-y:auto would clip it
   invisible (the same clipping that killed the old panel-side hover
   bridge). Scoped with :has() so leaf-level cascade panels — no nested
   parents — KEEP the tall-menu scroll cap (70vh/480px); only panels that
   actually spawn flyouts trade scrolling for reachability. All baseline
   browsers ship :has(); an engine without it clips flyouts in cascade mode
   only, and every other mode is untouched. */
.block-nav-links .nav-sub.nav-sub-cascade:has(li.has-children) {
  overflow: visible;
  max-height: none;
}
/* Side collision (runtime): the nested panel flips to the row's other side. */
.block-nav-links .nav-sub li > .nav-sub[data-align="side-left"] {
  left: auto !important;
  right: 100%;
  margin-left: 0;
  margin-right: 6px;
  transform-origin: top right;
}
/* The trigger-to-panel hover bridge turns sideways for nested rows — cover
   the horizontal gap on BOTH sides so the flipped orientation stays
   traversable. Still on the li: panels clip their own pseudo-elements. */
.block-nav-links .nav-sub li.has-children:hover::after,
.block-nav-links .nav-sub li.has-children:focus-within::after,
.block-nav-links .nav-sub li.has-children[data-dropdown-open="true"]::after {
  top: -8px;
  bottom: -8px;
  left: -10px;
  right: -10px;
  width: auto;
  height: auto;
}
/* Nested parent markers point INTO the flyout (right) and stay put when
   open — the top-level 180° flip would leave them pointing left. */
.block-nav-links .nav-sub li.has-children > .nav-link .nav-parent-marker,
.block-nav-links .nav-sub li.has-children:hover > .nav-link .nav-parent-marker,
.block-nav-links .nav-sub li.has-children:focus-within > .nav-link .nav-parent-marker,
.block-nav-links .nav-sub li.has-children[data-dropdown-open="true"] > .nav-link .nav-parent-marker,
.block-nav-links .nav-sub li.has-children[data-dropdown-suppressed="true"] > .nav-link .nav-parent-marker {
  transform: rotate(-90deg);
}
@media (prefers-reduced-motion: reduce) {
  .block-nav-links .nav-sub,
  .block-nav-links li:hover > .nav-sub,
  .block-nav-links li:focus-within > .nav-sub,
  .block-nav-links li[data-dropdown-open="true"] > .nav-sub,
  .block-nav-links li.has-children[data-dropdown-suppressed="true"] > .nav-sub,
  .block-nav-links li.has-children[data-dropdown-open="false"] > .nav-sub {
    transition: none;
  }
}
/* F3 — panel content presets. Rows-with-sublines: label + muted description
   per row. Multi-column (mega-menu-lite): category groups side by side; also
   auto-selected when a parent's children have children (hover dropdowns stay
   one level deep — deeper trees become columns). */
.block-nav-links .nav-sub.nav-sub-detailed .nav-link {
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  min-height: 44px;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.block-nav-links .nav-sub .nav-sub-desc {
  display: block;
  font-size: 0.8125rem;
  line-height: 1.35;
  color: var(--theme-muted, var(--color-muted, #6b7280));
  white-space: normal;
}
/* Content-aware panel: the grid sizes to its labels (capped) instead of
   forcing 160px tracks that long labels painted straight across — measured
   32px of text overlapping the neighbouring column before this. */
.block-nav-links .nav-sub.nav-sub-columns {
  display: grid;
  grid-template-columns: repeat(var(--nav-sub-cols, 2), minmax(160px, 1fr));
  gap: 0.75rem 1.5rem;
  padding: 1rem;
  width: max-content;
  max-width: min(86vw, 760px);
}
/* Panel rows may wrap — the top-level bar keeps its nowrap. F7: cascade
   panels can hold <button> triggers (submenu-only parents), so every row
   rule covers .nav-menu-button alongside a. */
.block-nav-links .nav-sub a,
.block-nav-links .nav-sub .nav-menu-button {
  white-space: normal;
}
.block-nav-links .nav-sub-group { display: flex; flex-direction: column; gap: 0.25rem; }
.block-nav-links .nav-sub-group-title {
  display: block;
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--theme-muted, var(--color-muted, #6b7280));
  padding: 0 0.75rem 0.25rem;
}
.block-nav-links .nav-sub-group > ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 2px;
  row-gap: 2px;
}
/* A linked group title is still a title first: beat the generic .nav-sub a
   row styling (min-height/hover bg) at higher specificity. */
.block-nav-links .nav-sub a.nav-sub-group-title {
  min-height: 0;
  padding: 0 0.75rem 0.25rem;
  border-radius: 4px;
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--theme-muted, var(--color-muted, #6b7280));
}
.block-nav-links .nav-sub a,
.block-nav-links .nav-sub .nav-menu-button {
  min-height: 36px;
  width: 100%;
  border-radius: 6px;
  padding: 0 0.75rem;
}
/* C-1 — a non-navigating "group label" nav item. Inert text that keeps the
   sibling row metrics but never looks or behaves like a link: no hover bg, no
   pointer cursor, muted heading weight. */
.block-nav-links .nav-sub-label {
  display: flex;
  align-items: center;
  min-height: 36px;
  width: 100%;
  padding: 0 0.75rem;
  cursor: default;
  font-weight: 600;
  color: var(--theme-muted, var(--color-muted, #6b7280));
}
.block-nav-links .nav-sub a:hover,
.block-nav-links .nav-sub .nav-menu-button:hover { background: var(--theme-surface, var(--color-surface, #f8fafc)); }
.block-nav-links .nav-mobile-depth-2 {
  padding-left: 2.25rem;
}

/* Hamburger menu widget */
.block-hamburger { position: relative; display: inline-flex; align-items: center; }
.block-hamburger.mobile-only { display: none; }
.hamburger-toggle {
  display: inline-flex;
  min-width: 44px;
  min-height: 44px;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  border: 0;
  border-radius: var(--btn-radius, 6px);
  background: transparent;
  color: inherit;
  cursor: pointer;
}
.hamburger-toggle span {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 999px;
  background: currentColor;
  transition: transform 200ms ease, opacity 200ms ease;
}
.block-hamburger[data-open="true"] .hamburger-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.block-hamburger[data-open="true"] .hamburger-toggle span:nth-child(2) { opacity: 0; }
.block-hamburger[data-open="true"] .hamburger-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.hamburger-panel {
  position: fixed;
  z-index: 999;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  background: var(--theme-background, var(--color-background, #ffffff));
  color: var(--theme-text, var(--color-text, #111827));
  box-shadow: 0 24px 60px rgba(15, 23, 42, 0.18);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: transform 220ms ease, opacity 220ms ease, visibility 0s linear 220ms;
}
.hamburger-panel.panel-right { inset: 0 0 0 auto; width: min(60vw, 360px); transform: translateX(100%); }
.hamburger-panel.panel-left { inset: 0 auto 0 0; width: min(60vw, 360px); transform: translateX(-100%); }
.hamburger-panel.panel-top { inset: 0 0 auto 0; max-height: min(88vh, 520px); transform: translateY(-100%); }
.hamburger-panel.panel-fullscreen { inset: 0; transform: scale(0.98); }
.block-hamburger[data-open="true"] .hamburger-panel {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(0, 0) scale(1);
  transition: transform 220ms ease, opacity 220ms ease;
}
/* G2: dimmed backdrop behind the hamburger drawer (matches the editor canvas). */
.block-hamburger .hamburger-overlay {
  position: fixed;
  inset: 0;
  z-index: 998;
  background: rgba(0, 0, 0, 0.4);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 220ms ease, visibility 0s linear 220ms;
}
.block-hamburger[data-open="true"] .hamburger-overlay {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity 220ms ease;
}
@media (prefers-reduced-motion: reduce) {
  .block-nav-links .nav-mobile-panel,
  .block-nav-links .nav-mobile-overlay,
  .hamburger-panel,
  .hamburger-overlay,
  .hamburger-toggle span {
    transition: none;
    animation: none;
  }
}
.hamburger-close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  display: inline-flex;
  min-width: 44px;
  min-height: 44px;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: var(--btn-radius, 6px);
  background: var(--theme-surface, var(--color-surface, #f8fafc));
  color: inherit;
  font-size: 1.75rem;
  line-height: 1;
  cursor: pointer;
}
.hamburger-nav {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  min-width: 0;
  padding: 4.5rem 1.25rem 1.25rem;
}
.hamburger-item {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 0.25rem;
}
.hamburger-link {
  display: flex;
  min-height: 44px;
  width: 100%;
  align-items: center;
  gap: 0.75rem;
  justify-content: flex-start;
  border-radius: var(--btn-radius, 6px);
  padding: 0.75rem 1rem;
  color: inherit;
  text-decoration: none;
}
.hamburger-link:hover { background: var(--theme-surface, var(--color-surface, #f8fafc)); }
/* C-1 — a non-navigating "no link" label in the hamburger drawer: inert text,
   no hover affordance, muted heading weight. */
.hamburger-static-label {
  cursor: default;
  font-weight: 600;
  color: var(--theme-muted, var(--color-muted, #6b7280));
}
.hamburger-static-label:hover { background: none; }
.hamburger-children {
  display: none;
  flex-direction: column;
  gap: 0.25rem;
  margin: 0.125rem 0 0.375rem 0.875rem;
  padding-left: 0.75rem;
  border-left: 1px solid color-mix(in srgb, currentColor 18%, transparent);
}
/* G3: accordion — a parent's direct children show only when it is expanded. */
.hamburger-item[data-expanded="true"] > .hamburger-children {
  display: flex;
}
.hamburger-depth-1 > .hamburger-link,
.hamburger-depth-2 > .hamburger-link,
.hamburger-depth-1 > .hamburger-row > .hamburger-link,
.hamburger-depth-2 > .hamburger-row > .hamburger-link {
  color: var(--theme-muted, var(--color-muted, #6b7280));
  font-size: 0.95em;
}
@media (max-width: 767.98px) {
  .block-hamburger.mobile-only { display: inline-flex; }
}

/* Header — HEADER_CONSTRAINTS.md §2, §3, §5, §7.
   The 4 presets (data-layout) use distinct inner-container layouts.
   Vertical centering (Rule 3.3.1) is mandatory: every preset uses
   align-items: center (except Stacked, which centers via flex column).
   Header ALWAYS spans full viewport width (Rule 6.3.1 — no "Full Width"
   toggle exists; the header is full-width by definition). */
.block-header {
  box-sizing: content-box;
  width: 100%;
  max-width: 100vw;
  overflow-x: clip;
  min-height: 80px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.block-header[data-layout="stacked"] { min-height: 120px; }
.block-header > .header-container {
  max-width: var(--site-content-width, 1200px);
  margin-left: auto;
  margin-right: auto;
  width: 100%;
  flex: 1 1 0%;
  padding-left: var(--site-side-padding, 20px);
  padding-right: var(--site-side-padding, 20px);
}
.block-header .block-column,
.block-header .header-column {
  display: flex;
  flex-direction: row;
  align-items: center;
  min-height: auto;
  padding: 0;
  margin: 0;
}
.block-header .header-column-logo { flex: 0 0 auto; justify-content: flex-start; }
.block-header .header-column-nav { flex: 1 1 auto; justify-content: flex-end; }
.block-header .header-column-cta { flex: 0 0 auto; justify-content: flex-end; }
.block-header .header-column-aux { flex: 0 0 auto; justify-content: center; }
.block-header .header-column-nav .block-nav-links { width: auto; }

/* Rule 5.1.1 — Logo Left / Nav Right */
.block-header[data-layout="logo-left-nav-right"] > .header-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
}

/* Rule 5.1.2 — Logo Left + Nav Center + CTA Right (3-col grid) */
.block-header[data-layout="logo-left-nav-center-cta-right"] > .header-container {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 1.5rem;
}
.block-header[data-layout="logo-left-nav-center-cta-right"] > .header-container > *:nth-child(2) {
  justify-self: center;
}

/* Rule 5.1.3 — Logo Center (Split Nav). 1fr | auto | 1fr pins the logo
   dead center, so whichever child is #2 (logo) gets center alignment. */
.block-header[data-layout="logo-center-nav-split"] > .header-container {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 1.5rem;
}
.block-header[data-layout="logo-center-nav-split"] > .header-container > *:nth-child(2) {
  justify-self: center;
}

/* Rule 5.1.4 — Stacked: logo row on top, nav row below, both centered. */
.block-header[data-layout="stacked"] > .header-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  padding: 1rem 0;
}

/* Explicit multi-row headers (promo/utility row + main nav row) are already
   authored as real Row blocks in the editor. Publish must preserve that row
   order and let each row's saved padding/background drive the visual result. */
.block-header[data-explicit-rows="true"] {
  min-height: 0;
  justify-content: flex-start;
}
.block-header[data-explicit-rows="true"] > .header-container {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 0;
  max-width: none;
  padding-left: 0;
  padding-right: 0;
}
.block-header[data-explicit-rows="true"] > .header-container > .block-row {
  width: 100%;
}

/* Tablet header auto-layout.
   Header columns are slot wrappers, not generic section columns. At
   responsive breakpoints they must ignore saved desktop percentage splits
   so editor preview and published sites keep the same bounded header row. */
@media (min-width: 768px) and (max-width: 1023.98px) {
  .block-header[data-layout="logo-left-nav-right"] > .header-container,
  .block-header[data-layout="logo-left-nav-center-cta-right"] > .header-container,
  .block-header[data-layout="logo-center-nav-split"] > .header-container,
  .block-header[data-layout="stacked"] > .header-container {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    grid-template-columns: none;
    gap: 0.75rem;
    max-width: 100%;
    min-width: 0;
    overflow-x: clip;
    box-sizing: border-box;
  }
  .block-header .header-column-logo,
  .block-header .header-column-nav,
  .block-header .header-column-cta,
  .block-header .header-column-aux {
    width: auto !important;
    min-width: 0;
    max-width: 100%;
    align-self: center;
  }
  .block-header .header-column-logo {
    order: 0;
    flex: 0 1 auto !important;
    flex-basis: auto !important;
    max-width: 32%;
    justify-content: flex-start;
  }
  .block-header .header-column-nav {
    order: 1;
    flex: 1 1 0% !important;
    flex-basis: 0% !important;
    justify-content: center;
  }
  .block-header .header-column-cta {
    order: 2;
    flex: 0 1 auto !important;
    flex-basis: auto !important;
    max-width: 32%;
    margin-left: auto;
    justify-content: flex-end;
  }
  .block-header .header-column-aux {
    /* aux slot sits rightmost — parity with the canvas inline order:3. */
    order: 3;
  }

  .block-header[data-mobile-layout="logo-centered"] > .header-container {
    display: grid !important;
    grid-template-columns: minmax(44px, 1fr) auto minmax(44px, 1fr) !important;
    justify-content: stretch !important;
  }
  [data-mobile-layout="logo-centered"] .header-column-cta {
    grid-column: 1 !important;
    grid-row: 1 !important;
    order: 0 !important;
    margin-left: 0 !important;
    justify-content: flex-start !important;
    justify-self: stretch !important;
  }
  [data-mobile-layout="logo-centered"] .header-column-logo {
    grid-column: 2 !important;
    grid-row: 1 !important;
    order: 1 !important;
    max-width: 100% !important;
    justify-content: center !important;
    justify-self: center !important;
  }
  [data-mobile-layout="logo-centered"] .header-column-nav {
    grid-column: 3 !important;
    grid-row: 1 !important;
    order: 2 !important;
    margin-left: 0 !important;
    justify-content: flex-end !important;
    justify-self: end !important;
  }

  .block-header .header-column-cta .block-button,
  .block-header .header-column-cta .btn {
    max-width: 100%;
  }
  .block-header .header-column-nav .block-nav-links {
    width: 100% !important;
    max-width: 100%;
  }
  .block-header .block-nav-links > ul {
    flex-wrap: wrap;
    /* F4: auto-center is a DEFAULT — an explicit per-breakpoint alignment
       override (re-emitted as --nav-justify !important) must win through. */
    justify-content: var(--nav-justify, center);
    row-gap: 0.5rem;
  }
}

/* F5 — footer column layout presets (FOOTER_CONSTRAINTS §3). Arrangement is
   attribute-driven so preset switches never touch content. The grid applies
   to the footer's direct children; missing columns simply leave cells empty.
   Tablet: two columns (brand row spans full width on brand-links); Mobile:
   single stacked column, centered. */
.block-footer[data-footer-layout] > .footer-container {
  display: grid;
  gap: 2rem;
  /* RULE 2.1.2 — equal-height columns by default, never opt-in. */
  align-items: stretch;
}
.block-footer[data-footer-layout="simple"] > .footer-container {
  grid-template-columns: 1fr;
  justify-items: center;
  text-align: center;
}
.block-footer[data-footer-layout="two-column"] > .footer-container {
  grid-template-columns: 1fr 1fr;
}
.block-footer[data-footer-layout="multi-column"] > .footer-container {
  grid-template-columns: repeat(3, 1fr);
}
.block-footer[data-footer-layout="brand-links"] > .footer-container {
  grid-template-columns: 2fr 1fr 1fr;
}
@media (min-width: 768px) and (max-width: 1023.98px) {
  .block-footer[data-footer-layout="multi-column"] > .footer-container,
  .block-footer[data-footer-layout="brand-links"] > .footer-container {
    grid-template-columns: 1fr 1fr;
  }
  .block-footer[data-footer-layout="brand-links"] > .footer-container > *:first-child {
    grid-column: 1 / -1;
  }
}
@media (max-width: 767.98px) {
  .block-footer[data-footer-layout] > .footer-container {
    grid-template-columns: 1fr;
    justify-items: center;
    text-align: center;
  }
}

/* Rule 7.1 — Sticky header. Real position:sticky applies ONLY in publish
   (the editor canvas suppresses this per Rule 7.1.4 and renders inline). */
.block-header.header-sticky {
  position: sticky;
  top: 0;
  z-index: 100;
}

/* Rule 7.2 — "Transparent at top" starts transparent and a small runtime
   scroll listener toggles data-scrolled="true" past the hero. The solid
   background is whatever the user configured via Design → Style; we just
   provide a smooth transition so the swap isn't jarring. */
.block-header[data-transparent="true"] {
  background-color: transparent !important;
  box-shadow: none !important;
  transition: background-color 250ms ease, box-shadow 250ms ease;
}
.block-header[data-transparent="true"][data-scrolled="true"] {
  background-color: var(--header-bg, #ffffff) !important;
}

/* F1 — Transparent-at-Top overlap: the header reserves NO flow space; the
   first section starts at the viewport top underneath it. The generator marks
   <main> with data-header-overlap when this page renders a transparent header
   and opens with a section. The runtime (effects.js) measures the header's
   AT-TOP height into --isw-overlap-h (80px pre-JS fallback = header
   min-height); the ::before spacer inside the first section keeps its CONTENT
   below the header band while the section's own background (hero image/video)
   extends up underneath the transparent header. */
main[data-header-overlap="true"] {
  margin-top: calc(-1 * var(--isw-overlap-h, 80px));
}
main[data-header-overlap="true"] > .block-section:first-child::before {
  content: "";
  display: block;
  height: var(--isw-overlap-h, 80px);
}
/* A per-breakpoint-hidden first section stays in the HTML (display:none in a
   media band — RESPONSIVE RULE 3.5.4), so its ::before spacer vanishes while
   the pull-up would remain and slide the NEXT section's content under the
   header. The generator lists those breakpoints in data-overlap-skip; these
   band rules restore normal flow there. */
@media (min-width: 1024px) {
  main[data-overlap-skip~="desktop"] { margin-top: 0; }
}
@media (min-width: 768px) and (max-width: 1023.98px) {
  main[data-overlap-skip~="tablet"] { margin-top: 0; }
}
@media (max-width: 767.98px) {
  main[data-overlap-skip~="mobile"] { margin-top: 0; }
}
/* The pulled-up hero paints AFTER the header in DOM order, so a transparent
   header must stack above it. Sticky headers already carry z-index 100 via
   .header-sticky; this covers the non-sticky case without touching its
   position value. */
.block-header[data-transparent="true"]:not(.header-sticky) {
  position: relative;
  z-index: 100;
}

/* F2 — logo variant scroll swap (HEADER_LOGO_CONSTRAINTS §6.3): both variants
   are stacked in one grid cell and cross-faded (200ms, no flicker) when the
   header toggles data-scrolled. data-logo-top names the at-rest variant; the
   other one shows once scrolled. Emitted only when both variants exist and the
   auto-pick differs per state — a single uploaded variant never swaps. */
.block-logo .logo-swap-stack {
  display: inline-grid;
  align-items: center;
}
.block-logo .logo-swap-stack > img {
  grid-area: 1 / 1;
  transition: opacity 200ms ease;
}
/* Shrink-on-Scroll's own logo transition (height/max-height) would otherwise
   cascade over the cross-fade — transition is one property, so a combined,
   more specific rule keeps both animating. */
.block-header[data-shrink-on-scroll="true"] .block-logo .logo-swap-stack > img {
  transition:
    height var(--hdr-shrink-ms, 250ms) ease,
    max-height var(--hdr-shrink-ms, 250ms) ease,
    opacity 200ms ease;
}
.block-logo[data-logo-top="primary"] .logo-swap-stack > img[data-logo-variant="alternate"],
.block-logo[data-logo-top="alternate"] .logo-swap-stack > img[data-logo-variant="primary"] {
  opacity: 0;
}
.block-header[data-scrolled="true"] .block-logo[data-logo-top="primary"] .logo-swap-stack > img[data-logo-variant="alternate"],
.block-header[data-scrolled="true"] .block-logo[data-logo-top="alternate"] .logo-swap-stack > img[data-logo-variant="primary"] {
  opacity: 1;
}
.block-header[data-scrolled="true"] .block-logo[data-logo-top="primary"] .logo-swap-stack > img[data-logo-variant="primary"],
.block-header[data-scrolled="true"] .block-logo[data-logo-top="alternate"] .logo-swap-stack > img[data-logo-variant="alternate"] {
  opacity: 0;
}

/* F2(b) — scrolled-state header colors: applied only when the header opted in
   (data-scrolled-colors gates the selectors so unset var() can never wipe the
   cascaded nav/text colors on ordinary headers). */
.block-header[data-scrolled-colors="true"] {
  /* transition is a single cascaded property: carry the background/shadow
     list from the transparent/scroll-bg rules so opting into scrolled colors
     never kills the background fade. */
  transition: background-color 250ms ease, box-shadow 250ms ease, color 250ms ease;
}
.block-header[data-scrolled-colors="true"][data-scrolled="true"] {
  color: var(--header-scrolled-text, inherit);
}
.block-header[data-scrolled-colors="true"][data-scrolled="true"] .block-nav-links a {
  color: var(--header-scrolled-link, var(--header-scrolled-text, inherit));
}
.block-header[data-scrolled-colors="true"][data-scrolled="true"] .block-social-icons .social-icon,
.block-header[data-scrolled-colors="true"][data-scrolled="true"] .hamburger-toggle,
.block-header[data-scrolled-colors="true"][data-scrolled="true"] .block-nav-links svg {
  /* Scoped to nav/social/hamburger icons — button (CTA) icons keep the
     button system's own colors. */
  color: var(--header-scrolled-icon, var(--header-scrolled-text, inherit));
}

/* O5 — "Background on scroll": a non-transparent header swaps to a configured
   background once the runtime toggles data-scrolled past the top (same
   mechanism as Transparent-at-Top), with a smooth transition. */
.block-header[data-scroll-bg="true"] {
  transition: background-color 250ms ease, box-shadow 250ms ease;
}
.block-header[data-scroll-bg="true"][data-scrolled="true"] {
  background-color: var(--header-scroll-bg) !important;
}

/* O5(b) — reduce-on-scroll: collapse the top (secondary) row of a multi-row
   header once scrolled past the top, keeping the primary nav row visible. The
   runtime measures the row's real height so it collapses smoothly (no clip). */
.block-header[data-collapse-top-row="true"] .header-container > *:first-child {
  overflow: hidden;
  /* The runtime measures the row's natural height into --collapse-row-h; the
     none fallback keeps the row unclipped before JS runs (and with no JS). */
  max-height: var(--collapse-row-h, none);
  transition: max-height 250ms ease, opacity 250ms ease, padding 250ms ease, margin 250ms ease;
}
.block-header[data-collapse-top-row="true"][data-scrolled="true"] .header-container > *:first-child {
  max-height: 0 !important;
  opacity: 0 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  pointer-events: none;
}

/* Rule 9 — Shrink on Scroll.
   A small runtime listener (emitted by effects-js.ts) watches scrollY
   and toggles the .header-shrunk class past the configured threshold
   with hysteresis (shrinks at threshold, restores at threshold - 40).
   The CSS here only declares the shrunk end-state + transition — no JS
   keyframes, so the browser can interrupt smoothly if the user reverses
   scroll direction before the transition completes (Rule 9.6.1). */
.block-header[data-shrink-on-scroll="true"] {
  transition:
    min-height var(--hdr-shrink-ms, 250ms) ease,
    height var(--hdr-shrink-ms, 250ms) ease,
    padding var(--hdr-shrink-ms, 250ms) ease,
    background-color var(--hdr-shrink-ms, 250ms) ease,
    box-shadow var(--hdr-shrink-ms, 250ms) ease;
}
.block-header[data-shrink-on-scroll="true"] .block-logo img,
.block-header[data-shrink-on-scroll="true"] .block-logo svg {
  transition: height var(--hdr-shrink-ms, 250ms) ease,
              max-height var(--hdr-shrink-ms, 250ms) ease;
}
@media (prefers-reduced-motion: reduce) {
  .block-header[data-transparent="true"],
  .block-header[data-scroll-bg="true"],
  .block-header[data-shrink-on-scroll="true"],
  .block-header[data-shrink-on-scroll="true"] .block-logo img,
  .block-header[data-shrink-on-scroll="true"] .block-logo svg,
  .block-header[data-collapse-top-row="true"] .header-container > *:first-child,
  .block-logo .logo-swap-stack > img,
  .block-header[data-scrolled-colors="true"] {
    transition: none;
    animation: none;
  }
}
/* Shrunk end-state. Runtime writes inline custom props for the exact
   pixel values (so the editor Design panel stays the single source of
   truth), and falls back to the spec defaults (60px header, 28px logo)
   if they're missing. */
.block-header.header-shrunk {
  min-height: var(--hdr-shrunk-height, 60px) !important;
  /* Rule 9.1.2 — modest padding reduction (~8px) so the chrome tightens
     without jarring the user. */
  padding-top: 0.5rem !important;
  padding-bottom: 0.5rem !important;
  /* Rule 9.1.5 — subtle shadow once the header detaches from the page. */
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important;
}
.block-header.header-shrunk .block-logo img,
.block-header.header-shrunk .block-logo svg {
  max-height: var(--hdr-shrunk-logo-height, 28px) !important;
  height: var(--hdr-shrunk-logo-height, 28px) !important;
  width: auto !important;
}

/* Rule 8.1 — Mobile auto-collapse. Below 768px the header always stacks
   to a single row, nav items shrink-wrap, and the hamburger menu takes
   over (the hamburger widget's own visibility toggle handles that).
   We keep enough min-height for tappable targets. */
@media (max-width: 767.98px) {
  .block-header,
  .block-header[data-layout="stacked"] {
    min-height: 64px;
  }
  .block-header[data-layout="logo-left-nav-right"] > .header-container,
  .block-header[data-layout="logo-left-nav-center-cta-right"] > .header-container,
  .block-header[data-layout="logo-center-nav-split"] > .header-container,
  .block-header[data-layout="stacked"] > .header-container {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    grid-template-columns: none;
    gap: 0.5rem;
    padding: 0.5rem 0.75rem;
    max-width: 100vw;
    box-sizing: border-box;
  }
  .block-header .header-column-logo {
    order: 0;
    width: auto !important;
    flex: 0 1 28% !important;
    flex-basis: 28% !important;
    max-width: 28%;
    justify-content: flex-start;
  }
  .block-header .header-column-nav {
    order: 2;
    width: auto !important;
    flex: 0 0 44px !important;
    flex-basis: 44px !important;
    max-width: 44px;
    margin-left: 0.5rem;
    margin-right: 0;
    justify-content: flex-end;
  }
  .block-header .header-column-cta {
    order: 1;
    width: auto !important;
    flex: 1 1 auto !important;
    flex-basis: auto !important;
    min-width: 0;
    max-width: none;
    margin-left: auto;
    justify-content: flex-end;
  }
  .block-header .header-column-nav,
  .block-header .header-column-cta {
    min-height: 48px !important;
  }
  .block-header.header-shrunk .header-column-nav,
  .block-header.header-shrunk .header-column-cta {
    min-height: auto !important;
  }
  .block-header .header-column-aux {
    /* aux slot sits rightmost — parity with the canvas inline order:3. */
    order: 3;
  }

  .block-header .header-column-cta .block-button,
  .block-header .header-column-cta .btn {
    max-width: 100%;
    white-space: nowrap;
  }
  .block-header .header-column-nav .block-nav-links {
    display: flex !important;
    justify-content: flex-end !important;
    width: 100% !important;
    max-width: 100%;
  }
  .block-header .block-nav-links > ul {
    display: none;
  }
  .block-header .block-nav-links .nav-mobile-toggle {
    display: inline-flex;
    margin-left: auto;
  }
  .block-header .block-nav-links[data-mobile-open="true"] .nav-mobile-panel {
    display: flex;
  }
  .block-header[data-explicit-rows="true"] > .header-container {
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 0;
    padding-left: 0;
    padding-right: 0;
  }
}

/* Buttons — theme-driven system */
.block-button { width: fit-content; max-width: 100%; }
.block-button .btn-full { width: 100%; white-space: normal; overflow-wrap: anywhere; }
.btn { display: inline-flex; min-height: 44px; align-items: center; justify-content: center; gap: var(--btn-icon-gap, 8px); border-radius: var(--btn-radius, 6px); font-family: var(--btn-font-family, inherit); font-weight: var(--btn-font-weight, 600); letter-spacing: var(--btn-letter-spacing, 0); text-align: center; text-decoration: none; line-height: 1.2; box-sizing: border-box; max-width: 100%; min-width: 0; overflow-wrap: anywhere; white-space: nowrap; -webkit-user-select: none; user-select: none; box-shadow: none; transition: background-color var(--btn-transition, 200ms) ease, color var(--btn-transition, 200ms) ease, border-color var(--btn-transition, 200ms) ease, transform var(--btn-transition, 200ms) ease, box-shadow var(--btn-transition, 200ms) ease; cursor: pointer; border: 0 solid transparent; }
.btn-primary { background-color: var(--btn-primary-bg, var(--theme-primary, var(--color-primary, #2563eb))); color: var(--btn-primary-text, #fff); border-width: var(--btn-primary-border-width, 0); border-style: solid; border-color: var(--btn-primary-border-color, transparent); --btn-hover-transform: var(--btn-primary-hover-transform, none); --btn-hover-shadow: var(--btn-primary-hover-shadow, none); --btn-icon-left-hover-transform: var(--btn-primary-icon-left-hover-transform, none); --btn-icon-right-hover-transform: var(--btn-primary-icon-right-hover-transform, none); --btn-label-hover-transform: var(--btn-primary-label-hover-transform, none); }
.btn-secondary { background-color: var(--btn-secondary-bg, var(--theme-secondary, var(--color-secondary, #6366f1))); color: var(--btn-secondary-text, #fff); border-width: var(--btn-secondary-border-width, 0); border-style: solid; border-color: var(--btn-secondary-border-color, transparent); --btn-hover-transform: var(--btn-secondary-hover-transform, none); --btn-hover-shadow: var(--btn-secondary-hover-shadow, none); --btn-icon-left-hover-transform: var(--btn-secondary-icon-left-hover-transform, none); --btn-icon-right-hover-transform: var(--btn-secondary-icon-right-hover-transform, none); --btn-label-hover-transform: var(--btn-secondary-label-hover-transform, none); }
.btn-text, .btn-outline { background-color: transparent; border-width: 0; border-style: solid; border-color: transparent; color: var(--btn-text-text, var(--btn-outline-text, var(--theme-primary, var(--color-primary, #2563eb)))); box-shadow: none; --btn-hover-transform: var(--btn-text-hover-transform, var(--btn-outline-hover-transform, none)); --btn-hover-shadow: var(--btn-text-hover-shadow, var(--btn-outline-hover-shadow, none)); --btn-icon-left-hover-transform: var(--btn-text-icon-left-hover-transform, var(--btn-outline-icon-left-hover-transform, none)); --btn-icon-right-hover-transform: var(--btn-text-icon-right-hover-transform, var(--btn-outline-icon-right-hover-transform, none)); --btn-label-hover-transform: var(--btn-text-label-hover-transform, var(--btn-outline-label-hover-transform, none)); }
.btn-text, .btn-outline { padding-left: 0; padding-right: 0; }
.btn-custom { background-color: var(--btn-custom-bg, currentColor); color: var(--btn-custom-text, currentColor); border-width: var(--btn-custom-border-width, 0); border-top-width: var(--btn-custom-border-top-width, var(--btn-custom-border-width, 0)); border-right-width: var(--btn-custom-border-right-width, var(--btn-custom-border-width, 0)); border-bottom-width: var(--btn-custom-border-bottom-width, var(--btn-custom-border-width, 0)); border-left-width: var(--btn-custom-border-left-width, var(--btn-custom-border-width, 0)); border-style: solid; border-color: var(--btn-custom-border-color, transparent); font-weight: var(--btn-custom-font-weight, var(--btn-font-weight, 600)); --btn-hover-transform: var(--btn-custom-hover-transform, none); --btn-hover-shadow: var(--btn-custom-hover-shadow, none); --btn-icon-left-hover-transform: var(--btn-custom-icon-left-hover-transform, none); --btn-icon-right-hover-transform: var(--btn-custom-icon-right-hover-transform, none); --btn-label-hover-transform: var(--btn-custom-label-hover-transform, none); }
.btn-text.btn-custom, .btn-outline.btn-custom { background-color: transparent; padding-left: 0; padding-right: 0; }
.btn-icon, .btn-label { display: inline-flex; align-items: center; transition: transform var(--btn-transition, 200ms) ease-out; }
.btn-icon { width: var(--btn-icon-size, 1em); height: var(--btn-icon-size, 1em); }
.btn-icon > svg { width: 100%; height: 100%; }
.btn-label { white-space: pre-line; }
@media (hover: hover) {
  .btn-primary:hover { background-color: var(--btn-primary-bg-hover, var(--theme-secondary, var(--color-secondary, var(--btn-primary-bg, #6366f1)))); color: var(--btn-primary-text-hover, var(--btn-primary-text, #fff)); border-color: var(--btn-primary-border-color-hover, var(--btn-primary-border-color, transparent)); }
  .btn-secondary:hover { background-color: var(--btn-secondary-bg-hover, var(--theme-primary, var(--color-primary, #2563eb))); color: var(--btn-secondary-text-hover, var(--btn-secondary-text, #fff)); border-color: var(--btn-secondary-border-color-hover, var(--btn-secondary-border-color, transparent)); }
  .btn-text:hover, .btn-outline:hover { background-color: transparent; color: var(--btn-text-text-hover, var(--btn-outline-text-hover, var(--btn-text-text, var(--theme-primary, var(--color-primary, #2563eb))))); border-color: transparent; }
  .btn-custom:hover { background-color: var(--btn-custom-bg-hover, var(--btn-custom-bg, currentColor)); color: var(--btn-custom-text-hover, var(--btn-custom-text, currentColor)); border-color: var(--btn-custom-border-color-hover, var(--btn-custom-border-color, transparent)); }
  .btn-text.btn-custom:hover, .btn-outline.btn-custom:hover { background-color: transparent; }
  .btn:hover { transform: var(--btn-hover-transform, none); box-shadow: var(--btn-hover-shadow, none); }
  .btn:hover .btn-icon:first-child { transform: var(--btn-icon-left-hover-transform, none); }
  .btn:hover .btn-icon:last-child { transform: var(--btn-icon-right-hover-transform, none); }
  .btn:hover .btn-label { transform: var(--btn-label-hover-transform, none); }
}
.btn:active:not(:disabled) { transform: scale(0.98); }
.btn:focus-visible { outline: 2px solid var(--btn-primary-bg, var(--theme-primary, var(--color-primary, #2563eb))); outline-offset: 2px; }
.btn:disabled, .btn[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; pointer-events: none; filter: saturate(0.6); }
.btn-size-small { padding: 8px 16px; font-size: 14px; }
.btn-size-medium { padding: 12px 24px; font-size: 16px; }
.btn-size-large { padding: 16px 32px; font-size: 18px; }
.btn-text.btn-size-small, .btn-text.btn-size-medium, .btn-text.btn-size-large, .btn-outline.btn-size-small, .btn-outline.btn-size-medium, .btn-outline.btn-size-large { padding-left: 0; padding-right: 0; }
.btn-shape-square { border-radius: 0; }
.btn-shape-rounded { border-radius: 10px; }
.btn-shape-pill { border-radius: 24px; }
.btn-full { display: flex; width: 100%; }
@media (prefers-reduced-motion: reduce) {
  .btn { transition: none; }
  .btn:active:not(:disabled) { transform: none; }
  .btn:hover { transform: none; box-shadow: none; }
  .btn-icon, .btn-label { transition: none; }
  .btn:hover .btn-icon:first-child, .btn:hover .btn-icon:last-child, .btn:hover .btn-icon, .btn:hover .btn-label { transform: none; }
}

/* Click to call */
/* NB-08 - the gap comes from the theme token like every other button. A
   hardcoded gap here is MORE specific than .btn, so it silently beat
   --btn-icon-gap (and any per-button override) on published pages only. */
.block-click-to-call a { display: inline-flex; align-items: center; gap: var(--btn-icon-gap, 8px); }
.ctc-sticky { position: fixed; bottom: 0; left: 0; right: 0; z-index: 1000; }
@media (min-width: 768px) { .ctc-sticky { display: none; } }

/* Accordion */
.block-accordion { border: 1px solid var(--accordion-border, var(--color-border, #e5e7eb)); border-radius: var(--accordion-radius, .75rem); overflow: hidden; background: var(--accordion-content-bg, #fff); }
.block-accordion[data-accordion-style="cards"] { display: grid; gap: .5rem; border: 0; border-radius: 0; overflow: visible; background: transparent; }
.block-accordion details { border-bottom: 1px solid var(--accordion-border, var(--color-border, #e5e7eb)); background: var(--accordion-content-bg, #fff); }
.block-accordion details:last-child { border-bottom: 0; }
.block-accordion[data-accordion-style="cards"] details { border: 1px solid var(--accordion-border, var(--color-border, #e5e7eb)); border-radius: var(--accordion-radius, .75rem); overflow: hidden; }
.block-accordion summary { padding: var(--accordion-header-padding, 1rem); font-weight: 600; cursor: pointer; list-style: none; display: flex; gap: 0.75rem; justify-content: space-between; align-items: center; background: var(--accordion-header-bg, transparent); color: var(--accordion-header-text, var(--color-text, #111827)); }
.block-accordion details[open] summary { background: var(--accordion-open-header-bg, var(--accordion-header-bg, transparent)); }
.block-accordion summary::-webkit-details-marker { display: none; }
.block-accordion .accordion-question { min-width: 0; flex: 1 1 auto; white-space: pre-wrap; }
.block-accordion .accordion-toggle { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 1rem; height: 1rem; color: var(--accordion-icon, var(--color-primary, #2563eb)); }
.block-accordion[data-icon-position="left"] summary { justify-content: flex-start; }
.block-accordion[data-icon-position="left"] .accordion-toggle { order: -1; }
.block-accordion[data-toggle-icon="plus-minus"] .accordion-toggle::before { content: "+"; font-size: 1.25rem; line-height: 1; }
.block-accordion[data-toggle-icon="plus-minus"] details[open] .accordion-toggle::before { content: "−"; }
.block-accordion[data-toggle-icon="chevron"] .accordion-toggle::before { content: "›"; display: inline-block; font-size: 1.3rem; line-height: 1; transition: transform 160ms ease; }
.block-accordion[data-toggle-icon="chevron"] details[open] .accordion-toggle::before { transform: rotate(90deg); }
.block-accordion[data-toggle-icon="arrow"] .accordion-toggle::before { content: "→"; display: inline-block; font-size: 1rem; line-height: 1; transition: transform 160ms ease; }
.block-accordion[data-toggle-icon="arrow"] details[open] .accordion-toggle::before { transform: rotate(90deg); }
.block-accordion[data-toggle-icon="none"] .accordion-toggle { display: none; }
.block-accordion .accordion-answer { display: block; max-height: 0; overflow: hidden; opacity: 0; background: var(--accordion-content-bg, #fff); color: var(--accordion-content-text, var(--color-muted, #6b7280)); transition: max-height .26s ease, opacity .18s ease; }
.block-accordion details[open] .accordion-answer { opacity: 1; }
.block-accordion .accordion-answer-inner { padding: var(--accordion-answer-padding, 0 1rem 1rem); white-space: pre-wrap; }
@media (prefers-reduced-motion: reduce) { .block-accordion .accordion-answer { transition: none; } }

/* Tabs */
.block-tabs { --tabs-radius: .75rem; }
.tabs-list { display: flex; flex-wrap: wrap; border-bottom: 2px solid var(--tabs-border, var(--color-border, #e5e7eb)); gap: 0; }
.tabs-list button { padding: 0.75rem 1.25rem; border: none; background: var(--tabs-bg, transparent); cursor: pointer; font-weight: 600; color: var(--tabs-inactive-color, var(--color-muted, #6b7280)); border-bottom: 2px solid transparent; margin-bottom: -2px; }
.tabs-list button.active { color: var(--tabs-active-color, var(--color-primary, #2563eb)); border-bottom-color: var(--tabs-active-color, var(--color-primary, #2563eb)); background: var(--tabs-active-bg, transparent); }
.block-tabs[data-tab-style="pills"] .tabs-list { border-bottom: 0; gap: .5rem; }
.block-tabs[data-tab-style="pills"] .tabs-list button { border: 1px solid var(--tabs-border, var(--color-border, #e5e7eb)); border-radius: var(--tabs-radius); margin-bottom: 0; }
.block-tabs[data-tab-style="pills"] .tabs-list button.active { border-color: var(--tabs-active-color, var(--color-primary, #2563eb)); }
.block-tabs[data-tab-style="boxed"] .tabs-list { border-bottom: 1px solid var(--tabs-border, var(--color-border, #e5e7eb)); gap: .5rem; padding: .25rem .25rem 0; }
.block-tabs[data-tab-style="boxed"] .tabs-list button { border: 1px solid var(--tabs-border, var(--color-border, #e5e7eb)); border-radius: var(--tabs-radius) var(--tabs-radius) 0 0; margin-bottom: -1px; }
.block-tabs[data-tab-style="boxed"] .tabs-list button.active { border-color: var(--tabs-active-color, var(--color-primary, #2563eb)); border-bottom-color: var(--tabs-panel-bg, #fff); }
.tab-panel { display: none; padding: 1.5rem 0; white-space: pre-wrap; background: var(--tabs-panel-bg, transparent); color: var(--tabs-panel-text, var(--color-muted, #6b7280)); }
.block-tabs[data-tab-style="boxed"] .tab-panel { border: 1px solid var(--tabs-border, var(--color-border, #e5e7eb)); border-top: 0; border-radius: 0 0 var(--tabs-radius) var(--tabs-radius); padding: 1.25rem; }
.tab-panel.active { display: block; }

/* Gallery */
.block-gallery { display: grid; }
.block-gallery .gallery-media-frame { width: 100%; overflow: hidden; }
.block-gallery img { display: block; width: 100%; height: 100%; cursor: pointer; }
/* F6 — card tiles: the theme's surface tokens make product grids read as
   designed cards instead of bare images with microtext captions. Opt-in via
   props.tileStyle="card" so existing plain galleries stay visually identical
   (tiles gain an inert .gallery-tile class either way). */
.block-gallery[data-tile-style="card"] .gallery-tile { background: var(--surface-card-bg, #ffffff); border-radius: var(--surface-card-radius, 12px); box-shadow: var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08)); overflow: hidden; }
.block-gallery[data-tile-style="card"] .gallery-tile > p { font-size: var(--text-body-size, 16px); font-weight: 500; color: var(--theme-text, #111827); margin: 0; padding: 0.75rem 0.75rem 0.9rem; }

/* Media Slider presentation is owned by packages/shared and emitted verbatim. */

.block-slideshow { position: relative; width: 100%; min-width: 0; --ss-spv-effective: var(--ss-spv, 1); }
.block-slideshow .slideshow-stage { position: relative; min-width: 0; box-sizing: border-box; }
.block-slideshow .slideshow-viewport { width: 100%; min-width: 0; overflow-x: auto; overflow-y: hidden; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; container-type: inline-size; container-name: isplash-slideshow-viewport; }
.block-slideshow .slideshow-viewport::-webkit-scrollbar { display: none; }
.block-slideshow.is-enhanced .slideshow-viewport { overflow: hidden; scroll-snap-type: none; touch-action: pan-y; }
.block-slideshow .slideshow-viewport:focus-visible { outline: 3px solid var(--focus-ring, var(--theme-primary, #2563eb)); outline-offset: 3px; }
.block-slideshow .slideshow-track { display: flex; gap: var(--ss-gap, 24px); align-items: stretch; reading-flow: flex-visual; }
.block-slideshow.is-enhanced .slideshow-track { transition: transform .4s ease; will-change: transform; }
.block-slideshow.is-jumping .slideshow-track, .block-slideshow.is-reduced-motion .slideshow-track { transition: none !important; }
.block-slideshow .slide, .block-slideshow .slideshow-transition-clone { position: relative; flex: 0 0 calc((100% - var(--ss-gap, 24px) * (var(--ss-spv-effective, 1) - 1)) / var(--ss-spv-effective, 1)); min-width: 0; scroll-snap-align: start; }
.block-slideshow .slideshow-transition-clone { pointer-events: none !important; user-select: none; }
.block-slideshow .slideshow-transition-clone * { pointer-events: none !important; }
.block-slideshow .slideshow-video-paint { display: block; width: 100%; height: 100%; background: #111827; }
.block-slideshow .slide-visual { position: relative; min-width: 0; }
.block-slideshow .slide-frame { position: relative; aspect-ratio: var(--ss-aspect, 16/9); overflow: hidden; border-radius: var(--ss-radius, 0); background: #e5e7eb; }
.block-slideshow[data-aspect="adapt"] .slide-frame { aspect-ratio: var(--ss-adapt-aspect, 16/9); }
.block-slideshow .slide-media { display: block; width: 100%; height: 100%; object-fit: var(--ss-fit, cover); }
.block-slideshow .slide-media-empty { display: flex; align-items: center; justify-content: center; color: #9ca3af; }
.block-slideshow .slide-media-link { display: block; width: 100%; height: 100%; }
.block-slideshow .slide-caption { padding: .5rem .25rem 0; font-size: .85rem; color: #6b7280; text-align: center; }
.block-slideshow .slide-overlay { position: relative; z-index: 1; display: flex; align-items: center; justify-content: center; box-sizing: border-box; width: 100%; min-width: 0; text-align: center; color: #fff; background: rgba(15,23,42,.94); padding: clamp(.5rem,10%,1.5rem); pointer-events: none; }
.block-slideshow .slide-overlay-content { display: flex; flex: 0 1 auto; flex-direction: column; align-items: center; justify-content: flex-start; gap: .5rem; width: 100%; max-width: 100%; min-width: 0; overflow-wrap: anywhere; pointer-events: auto; }
.block-slideshow .slide-overlay-content > * { flex: 0 0 auto; max-width: 100%; }
.block-slideshow .slide-overlay-content .btn { min-width: 44px; min-height: 44px; white-space: normal; flex-wrap: wrap; overflow-wrap: anywhere; }
.block-slideshow .slide-overlay-content .btn-label { min-width: 0; overflow-wrap: anywhere; }
.block-slideshow .slide-overlay-content:focus-visible { outline: 3px solid var(--focus-ring, var(--theme-primary, #2563eb)); outline-offset: 3px; border-radius: .25rem; }
.block-slideshow .slide-overlay a { pointer-events: auto; }
.block-slideshow .slide-overlay-fits .slide-overlay { position: absolute; inset: 0; color: #fff; background: rgba(0,0,0,.32); border-radius: var(--ss-radius, 0); }
.block-slideshow[data-render-breakpoint="mobile"] .slide-overlay-fits .slide-overlay[data-legacy-composition="true"] { position: relative; inset: auto; color: #fff; background: rgba(15,23,42,.94); border-radius: 0; }
@media (max-width: 767.98px) { .block-slideshow:not([data-render-breakpoint]) .slide-overlay-fits .slide-overlay[data-legacy-composition="true"] { position: relative; inset: auto; color: #fff; background: rgba(15,23,42,.94); border-radius: 0; } }
.block-slideshow .slide-heading { margin: 0; font-size: clamp(1.5rem, 3vw, 2.5rem); line-height: 1.1; }
.block-slideshow .slide-subheading { margin: 0; font-size: clamp(1rem, 1.5vw, 1.2rem); }
.block-slideshow .slideshow-empty { min-height: 300px; display: flex; align-items: center; justify-content: center; background: #e5e7eb; color: #6b7280; }
.block-slideshow[data-transition="fade"].is-enhanced .slideshow-track { display: block; position: relative; transition: none; }
.block-slideshow[data-transition="fade"].is-enhanced .slide { position: absolute; inset: 0; width: 100%; opacity: 0; transition: opacity .4s ease; pointer-events: none; }
.block-slideshow[data-transition="fade"].is-enhanced .slide.active { position: relative; opacity: 1; pointer-events: auto; }
.block-slideshow [data-slideshow-control] { display: none !important; }
.block-slideshow.is-enhanced .slideshow-pause, .block-slideshow.is-enhanced .slideshow-counter { display: block !important; }
.block-slideshow.is-enhanced .slideshow-pause[hidden] { display: none !important; }
.block-slideshow.is-enhanced .slideshow-prev, .block-slideshow.is-enhanced .slideshow-next, .block-slideshow.is-enhanced .dot { display: inline-flex !important; }
.block-slideshow.is-enhanced .slideshow-dots { display: flex !important; }
.block-slideshow .slideshow-pause { position: absolute; top: .5rem; left: .5rem; z-index: 6; min-width: 44px; min-height: 44px; padding: .35rem .7rem; border: 0; border-radius: 999px; background: rgba(15,23,42,.72); color: #fff; font-size: .8rem; font-weight: 700; line-height: 1; cursor: pointer; }
.block-slideshow .slideshow-prev, .block-slideshow .slideshow-next { position: absolute; top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; background: rgba(0,0,0,.4); color: #fff; border: 0; padding: .5rem; cursor: pointer; font-size: 1.5rem; line-height: 1; z-index: 5; border-radius: 999px; }
.block-slideshow.ss-arrows-inside .slideshow-prev { left: .5rem; }
.block-slideshow.ss-arrows-inside .slideshow-next { right: .5rem; }
.block-slideshow.ss-arrows-outside.ss-has-arrows .slideshow-stage { padding-left: 3rem; padding-right: 3rem; }
.block-slideshow.ss-arrows-outside .slideshow-prev { left: 0; }
.block-slideshow.ss-arrows-outside .slideshow-next { right: 0; }
.block-slideshow .slideshow-prev:disabled, .block-slideshow .slideshow-next:disabled { opacity: .35; cursor: default; }
.block-slideshow .slideshow-dots { position: relative; min-height: 44px; width: fit-content; max-width: 100%; margin: .5rem auto 0; padding: 0 .25rem; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: .125rem; z-index: 5; border-radius: 999px; background: rgba(15,23,42,.82); }
.block-slideshow .dot { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border: 0; border-radius: 999px; background: transparent; padding: 0; cursor: pointer; }
.block-slideshow .dot::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.5); }
.block-slideshow .dot.active::before { width: 18px; border-radius: 999px; background: #fff; }
.block-slideshow .slideshow-counter { position: absolute; right: 1rem; top: 1rem; z-index: 5; border-radius: 999px; background: rgba(15,23,42,.72); color: #fff; padding: .45rem .65rem; font-size: .875rem; font-weight: 700; line-height: 1; }
.block-slideshow .slideshow-status { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.block-slideshow :is(.slideshow-pause,.slideshow-prev,.slideshow-next,.dot):focus-visible { outline: 2px solid var(--focus-ring, var(--theme-primary, #2563eb)); outline-offset: 2px; }
@media (max-width: 1023.98px) { .block-slideshow { --ss-spv-effective: var(--ss-spv-tablet, 1); } }
@media (max-width: 767.98px) { .block-slideshow { --ss-spv-effective: var(--ss-spv-mobile, 1); } }
@media (prefers-reduced-motion: reduce) { .block-slideshow.is-enhanced .slideshow-track, .block-slideshow[data-transition="fade"].is-enhanced .slide { transition: none !important; } }


/* Counter */
.block-counter { text-align: center; }
.counter-number { color: var(--counter-number, var(--color-text, #111827)); font-size: 3.5rem; font-weight: 700; font-family: var(--font-heading, inherit); }
.counter-label { color: var(--counter-label, var(--color-muted, #6b7280)); margin-top: 0.25rem; }

/* Map */
.block-map iframe { display: block; width: 100%; border: 0; }
.block-map .map-directions-link { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; margin-top: .75rem; color: var(--theme-primary, var(--color-primary, #2563eb)); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
.block-map .map-directions-link:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 3px; border-radius: .25rem; }
.block-map .map-placeholder { min-height: 300px; display: flex; align-items: center; justify-content: center; border-radius: .75rem; background: #f3f4f6; color: #6b7280; }
.block-map-multi { display: grid; gap: 1rem; }
.multi-map-list { list-style: none; margin: 0; padding: 0; display: grid; gap: .75rem; }
.multi-map-list li { display: grid; gap: .25rem; border: 1px solid var(--color-border, #e5e7eb); border-radius: .75rem; padding: .875rem; }
.multi-map-list span { color: var(--color-muted, #6b7280); font-size: .9rem; }

/* Video — the renderer's inner frame owns the default 16:9 ratio. The old
   padding-bottom fallback made the outer block a second ratio box, doubling
   its vertical reservation and breaking authored height/aspect controls. */
.block-video { position: relative; }
.block-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* Table */
.block-table { max-width: 100%; color: var(--table-text, var(--color-text, #111827)); }
.block-table .table-scroll-region { max-width: 100%; overflow-x: auto; }
.block-table .table-scroll-region:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 3px; border-radius: .375rem; }
.block-table table { width: 100%; border-collapse: collapse; font-size: 0.9rem; color: var(--table-text, var(--color-text, #111827)); }
.block-table th { background: var(--table-header-bg, var(--color-background, #f9fafb)); color: var(--table-header-text, var(--color-text, #111827)); text-align: left; padding: var(--table-cell-padding, 0.75rem 1rem); font-weight: 600; border: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); }
.block-table td { padding: var(--table-cell-padding, 0.75rem 1rem); border: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); background: var(--table-row-bg, transparent); }
.block-table tr.striped td { background: var(--table-alt-bg, var(--color-background, #f9fafb)); }
.block-table .table-search { display: flex; align-items: end; gap: .75rem; flex-wrap: wrap; margin-bottom: .75rem; }
.block-table .table-search label { display: grid; gap: .25rem; flex: 1 1 12rem; font-weight: 600; }
.block-table .table-search input { width: 100%; min-height: 44px; border: 1px solid var(--table-border, var(--color-border, #e5e7eb)); border-radius: .375rem; padding: .5rem .75rem; background: var(--table-row-bg, var(--color-background, #fff)); color: inherit; font: inherit; }
.block-table .table-search input:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.block-table .table-search-status { margin: 0; min-width: max-content; font-size: .875rem; }
.block-table .table-empty-state { margin: .75rem 0 0; padding: .75rem; border: 1px solid var(--table-border, var(--color-border, #e5e7eb)); border-radius: .375rem; text-align: center; }
.block-table .table-sort-button { display: flex; align-items: center; justify-content: space-between; gap: .5rem; width: 100%; min-height: 44px; border: 0; border-radius: .25rem; padding: 0; background: transparent; color: inherit; font: inherit; font-weight: inherit; text-align: left; cursor: pointer; }
.block-table .table-sort-button:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.block-table .table-sort-indicator { flex: 0 0 auto; }
.block-table [hidden] { display: none !important; }
@media (min-width: 768px) and (max-width: 1023.98px) {
  .block-table[data-table-responsive-tablet="scroll"] .table-scroll-region table { min-width: var(--table-min-width, 560px); }
  .block-table[data-table-responsive-tablet="hide-columns"] .table-hide-tablet { display: none; }
  .block-table[data-table-responsive-tablet="hide-columns"] .table-scroll-region { overflow-x: hidden; }
  .block-table[data-table-responsive-tablet="stack"] .table-scroll-region { overflow: visible; }
  .block-table[data-table-responsive-tablet="stack"] table,
  .block-table[data-table-responsive-tablet="stack"] tbody,
  .block-table[data-table-responsive-tablet="stack"] tr,
  .block-table[data-table-responsive-tablet="stack"] td { display: block; width: 100%; }
  .block-table[data-table-responsive-tablet="stack"] thead { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
  .block-table[data-table-responsive-tablet="stack"] tbody { display: grid; gap: .75rem; }
  .block-table[data-table-responsive-tablet="stack"] tr { overflow: hidden; border: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); border-radius: .5rem; background: var(--table-row-bg, transparent); }
  .block-table[data-table-responsive-tablet="stack"] td { display: grid; grid-template-columns: minmax(7rem, 40%) 1fr; gap: .75rem; border: 0; border-bottom: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); }
  .block-table[data-table-responsive-tablet="stack"] td:last-child { border-bottom: 0; }
  .block-table[data-table-responsive-tablet="stack"] td::before { content: attr(data-label); color: var(--table-header-text, var(--color-text, #111827)); font-weight: 600; }
}
@media (max-width: 767.98px) {
  .block-table[data-table-responsive-mobile="scroll"] .table-scroll-region table { min-width: var(--table-min-width, 560px); }
  .block-table[data-table-responsive-mobile="hide-columns"] .table-hide-mobile { display: none; }
  .block-table[data-table-responsive-mobile="hide-columns"] .table-scroll-region { overflow-x: hidden; }
  .block-table[data-table-responsive-mobile="stack"] .table-scroll-region { overflow: visible; }
  .block-table[data-table-responsive-mobile="stack"] table,
  .block-table[data-table-responsive-mobile="stack"] tbody,
  .block-table[data-table-responsive-mobile="stack"] tr,
  .block-table[data-table-responsive-mobile="stack"] td { display: block; width: 100%; }
  .block-table[data-table-responsive-mobile="stack"] thead { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
  .block-table[data-table-responsive-mobile="stack"] tbody { display: grid; gap: .75rem; }
  .block-table[data-table-responsive-mobile="stack"] tr { overflow: hidden; border: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); border-radius: .5rem; background: var(--table-row-bg, transparent); }
  .block-table[data-table-responsive-mobile="stack"] td { display: grid; grid-template-columns: minmax(7rem, 40%) 1fr; gap: .75rem; border: 0; border-bottom: var(--table-border-width, 1px) solid var(--table-border, var(--color-border, #e5e7eb)); }
  .block-table[data-table-responsive-mobile="stack"] td:last-child { border-bottom: 0; }
  .block-table[data-table-responsive-mobile="stack"] td::before { content: attr(data-label); color: var(--table-header-text, var(--color-text, #111827)); font-weight: 600; }
}

/* Countdown */
.block-countdown { display: flex; align-items: center; justify-content: center; gap: 0.75rem; flex-wrap: wrap; padding-block: 1rem; }
.countdown-unit { display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: 0.75rem; background: var(--countdown-bg, #f3f4f6); padding: 0.75rem 1rem; min-width: 4rem; }
.countdown-value { color: var(--countdown-value, #111827); font-size: 1.5rem; line-height: 1; font-weight: 700; }
.countdown-label { margin-top: 0.35rem; color: var(--countdown-label, #6b7280); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; }
.countdown-small { gap: 0.5rem; }
.countdown-small .countdown-unit { min-width: 3rem; padding: 0.5rem 0.75rem; }
.countdown-small .countdown-value { font-size: 1.125rem; }
.countdown-large { gap: 1rem; }
.countdown-large .countdown-unit { min-width: 5rem; padding: 1rem 1.25rem; }
.countdown-large .countdown-value { font-size: 1.875rem; }
.countdown-inline .countdown-unit { flex-direction: row; gap: 0.35rem; min-width: 0; background: transparent; padding: 0; }
.countdown-circles .countdown-unit { border: 2px solid var(--countdown-border, var(--theme-primary, var(--color-primary, #2563eb))); border-radius: 999px; aspect-ratio: 1 / 1; }
.countdown-flip .countdown-unit { position: relative; flex: 1 1 5.5rem; min-width: min(5.5rem, 100%); max-width: 10rem; overflow: hidden; border-radius: .625rem; box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--countdown-value, #111827) 18%, transparent); }
.countdown-flip .countdown-unit::after { position: absolute; right: 0; top: 50%; left: 0; height: 1px; background: color-mix(in srgb, var(--countdown-value, #111827) 18%, transparent); content: ""; }
.countdown-flip .countdown-value { position: relative; z-index: 1; transform-origin: center bottom; backface-visibility: hidden; }
.countdown-flip .countdown-value.is-flipping { animation: isplash-countdown-flip 480ms cubic-bezier(.2,.7,.2,1); }
.countdown-flip .countdown-label { position: relative; z-index: 1; max-width: 100%; overflow-wrap: anywhere; text-align: center; }
@keyframes isplash-countdown-flip { 0% { opacity: .35; transform: perspective(16rem) rotateX(-78deg); } 65% { opacity: 1; transform: perspective(16rem) rotateX(8deg); } 100% { opacity: 1; transform: perspective(16rem) rotateX(0); } }
@media (prefers-reduced-motion: reduce) { .countdown-flip .countdown-value.is-flipping { animation: none; } }
.countdown-expired { color: var(--countdown-value, #111827); font-weight: 700; text-align: center; }

/* Visual/media widgets */
.block-shape { display: inline-block; width: 100px; height: 100px; max-width: 100%; }
.block-shape svg, .block-shape .shape-custom, .block-shape .shape-custom > svg { display: block; width: 100%; height: 100%; transform-origin: center; }
/* Before/After widget CSS removed with the widget (MVP 2.4). */
.block-audio audio { width: 100%; }
.block-audio.audio-minimal, .block-audio.audio-full { border: 1px solid #e5e7eb; border-radius: .75rem; background: #fff; padding: .75rem; box-shadow: 0 1px 2px rgba(15,23,42,.08); }
.block-audio.audio-full::before { content: ""; display: block; height: 44px; margin-bottom: .75rem; border-radius: .5rem; background: repeating-linear-gradient(90deg, rgba(59,130,246,.25) 0 4px, transparent 4px 12px); }
/* NB-08 - sized by the theme token; this rule is more specific than
   .btn-icon > svg and appears after it, so it overrode the theme size. */
.block-click-to-email svg { width: var(--btn-icon-size, 1em); height: var(--btn-icon-size, 1em); }
.block-file .file-link { display: inline-flex; min-width: 44px; min-height: 44px; max-width: 100%; flex-wrap: wrap; align-items: center; gap: .375rem; color: var(--file-link, var(--color-primary, #2563eb)); text-decoration: underline; font-weight: 600; }
.block-file .file-card { display: inline-flex; min-width: 44px; min-height: 44px; max-width: 100%; align-items: center; gap: .75rem; padding: 1rem; border: 1px solid var(--file-card-border, var(--color-border, #e5e7eb)); border-radius: var(--file-card-radius, .75rem); background: var(--file-card-bg, var(--color-surface, #f8fafc)); color: var(--file-card-text, var(--color-text, #111827)); text-decoration: none; font-weight: 600; }
.block-file .file-card svg { color: var(--file-card-icon, var(--color-primary, #2563eb)); flex: 0 0 auto; }
.block-file .file-card-copy { display: flex; min-width: 0; flex-direction: column; }
.block-file [data-file-name] { min-width: 0; overflow-wrap: anywhere; }
.block-file .file-size { flex: 0 0 auto; white-space: nowrap; font-size: .75rem; font-weight: 400; }
.block-file .file-size-group { flex: 0 0 auto; margin-inline-start: .25rem; white-space: nowrap; }
.block-file .btn { min-width: 44px; min-height: 44px; max-width: 100%; flex-wrap: wrap; white-space: normal; }
.block-file .btn .btn-label { min-width: 0; flex-wrap: wrap; overflow-wrap: anywhere; white-space: normal; }
.block-list ul, .block-list ol { display: grid; gap: var(--list-gap, .55rem); padding: 0; margin: 0; color: var(--list-text, var(--color-text, #374151)); list-style: none; }
.block-list li { min-width: 0; }
.block-list ul:not(.list-check):not(.list-icon) li, .block-list ol li, .block-list .list-check li, .block-list .list-icon li { display: flex; align-items: flex-start; gap: .5rem; }
.block-list svg, .block-list .list-bullet, .block-list .list-number { flex: 0 0 auto; color: var(--list-marker, var(--color-primary, #2563eb)); }
.block-list .list-number { min-width: 1.5em; }
.block-list .has-dividers li:not(:last-child) { border-bottom: 1px solid var(--list-divider, var(--color-border, #e5e7eb)); padding-bottom: var(--list-gap, .55rem); }
.block-share, .block-social-icons { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.block-social-icons[data-alignment="left"] { justify-content: flex-start; }
.block-social-icons[data-alignment="center"] { justify-content: center; }
.block-social-icons[data-alignment="right"] { justify-content: flex-end; }
.block-copyright p { margin: 0; }
.block-share .share-title { flex: 1 1 100%; margin: 0 0 .25rem; font-weight: 700; font-size: 1rem; color: var(--theme-text, var(--color-text, #111827)); }
.block-share, .block-social-icons { margin: -.375rem; overflow: visible; padding: .375rem; }
.block-share .share-btn, .block-social-icons .social-icon { display: inline-flex; align-items: center; justify-content: center; gap: .375rem; min-width: 44px; min-height: 44px; color: #fff; background: var(--social-color, #6b7280); text-decoration: none; font-weight: 700; line-height: 1; transition: transform .2s ease, opacity .2s ease, box-shadow .2s ease, background-color .2s ease, color .2s ease; will-change: transform; }
/* Hover presets scoped to real hover devices so touch devices don't get a
   tap-then-stuck state (§9 bullet 4; matches the button system at :hover). */
@media (hover: hover) {
.block-share[data-hover-effect="none"] .share-btn:hover, .block-social-icons[data-hover-effect="none"] .social-icon:hover { transform: none; opacity: 1; box-shadow: none; }
.block-share[data-hover-effect="lift"] .share-btn:hover, .block-social-icons[data-hover-effect="lift"] .social-icon:hover { transform: translateY(-2px); opacity: .95; box-shadow: 0 10px 22px rgba(15,23,42,.18); }
.block-share[data-hover-effect="grow"] .share-btn:hover, .block-social-icons[data-hover-effect="grow"] .social-icon:hover { transform: scale(1.08); opacity: .95; box-shadow: 0 8px 18px rgba(15,23,42,.16); }
.block-share[data-hover-effect="glow"] .share-btn:hover, .block-social-icons[data-hover-effect="glow"] .social-icon:hover { transform: translateY(-1px); opacity: 1; box-shadow: 0 0 0 4px color-mix(in srgb, currentColor 22%, transparent), 0 12px 26px rgba(15,23,42,.18); }
}
@media (prefers-reduced-motion: reduce) { .block-share .share-btn, .block-social-icons .social-icon { transition: none; will-change: auto; } }
@media (prefers-reduced-motion: reduce) { .block-share[data-hover-effect] .share-btn:hover, .block-social-icons[data-hover-effect] .social-icon:hover { transform: none; opacity: 1; box-shadow: none; } }
.block-share .share-btn.shape-circle, .block-social-icons .social-icon.shape-circle { border-radius: 999px; }
.block-share .share-btn.shape-rounded, .block-social-icons .social-icon.shape-rounded { border-radius: .5rem; }
.block-share .share-btn.shape-square, .block-social-icons .social-icon.shape-square { border-radius: 0; }
.block-share .share-btn { padding: .625rem .75rem; }
.block-share .share-icon, .block-social-icons .social-icon svg { width: 1.05em; height: 1.05em; display: inline-flex; }
.block-share .share-icon svg { width: 1.05em; height: 1.05em; display: block; }
.block-share[data-appearance="black"] .share-btn, .block-social-icons[data-appearance="black"] .social-icon { --social-color: #111827 !important; }
.block-share[data-appearance="theme"] .share-btn, .block-social-icons[data-appearance="theme"] .social-icon { --social-color: var(--social-color, var(--color-primary, #2563eb)); }
.block-share[data-background="none"] .share-btn, .block-social-icons[data-background="none"] .social-icon { background: transparent; color: var(--social-color, #111827); }
.block-share[data-background="none"] .share-btn { border: 1px solid currentColor; }
/* Outline (ring) — deliberate per-widget style; canvas mirrors this inline
   (block-renderer.tsx social-icons case). transparent centre, 1px ring in the
   icon's own colour. */
.block-social-icons[data-background="outline"] .social-icon { background: transparent; color: var(--social-color, #111827); border: 1px solid currentColor; }
.block-whatsapp .whatsapp-btn, .block-whatsapp .whatsapp-icon { display: inline-flex; align-items: center; justify-content: center; gap: .5rem; min-height: 44px; background: #25d366; color: #fff; text-decoration: none; font-weight: 700; }
.block-whatsapp .whatsapp-btn:not(.btn), .block-whatsapp .whatsapp-icon:not(.btn) { border-radius: 999px; }
.block-whatsapp .whatsapp-btn:not(.btn) { padding: .625rem 1rem; }
.block-whatsapp .whatsapp-icon { min-width: 44px; width: 44px; }
.block-whatsapp .whatsapp-icon:not(.btn) { padding: 0; }
.block-whatsapp svg { width: 1.1em; height: 1.1em; }
.block-whatsapp.whatsapp-floating { position: fixed; z-index: 70; }
.block-whatsapp.whatsapp-bottom-right { right: 1.25rem; bottom: 1.25rem; }
.block-whatsapp.whatsapp-bottom-left { left: 1.25rem; bottom: 1.25rem; }
.block-business-hours .bh-status { display: inline-flex; align-items: center; gap: .375rem; margin-bottom: .5rem; color: var(--bh-status, #16a34a); font-size: .875rem; font-weight: 700; }
.block-business-hours[data-open-now="false"] .bh-status { color: var(--bh-closed, #dc2626); }
.block-business-hours[data-open-now="unknown"] .bh-status { color: var(--bh-time, var(--color-muted, #6b7280)); }
.block-business-hours .bh-dot { width: .5rem; height: .5rem; border-radius: 999px; background: currentColor; }
.block-business-hours .bh-caption { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.block-business-hours .bh-table { width: 100%; border-collapse: collapse; }
.block-business-hours .bh-table td { padding: var(--bh-row-padding, .45rem 0); border-bottom: 1px solid var(--bh-border, #e5e7eb); }
.block-business-hours .bh-table td:first-child { color: var(--bh-day, var(--color-text, #374151)); font-weight: 600; }
.block-business-hours .bh-table td:last-child { text-align: end; color: var(--bh-time, var(--color-muted, #6b7280)); }
.block-business-hours .bh-list { display: grid; gap: .5rem; }
.block-business-hours .bh-card { display: grid; gap: .2rem; border: 1px solid var(--bh-border, #e5e7eb); border-radius: var(--bh-radius, .75rem); padding: var(--bh-card-padding, .65rem .75rem); background: var(--bh-card-bg, #fff); }
.block-business-hours .bh-card strong, .block-business-hours .bh-row strong { color: var(--bh-day, var(--color-text, #374151)); }
.block-business-hours .bh-card span, .block-business-hours .bh-row { color: var(--bh-time, var(--color-muted, #6b7280)); }
.block-business-hours .bh-compact { display: flex; flex-wrap: wrap; gap: .35rem 1rem; font-size: .875rem; }
.block-business-hours .bh-row { display: inline-flex; gap: .35rem; }
.block-business-hours .bh-closed { color: var(--bh-closed, #dc2626); font-weight: 600; }
.block-business-hours .bh-timezone { margin-top: .5rem; color: var(--bh-time, var(--color-muted, #6b7280)); font-size: .75rem; }
.block-rss-feed { color: var(--feed-text, var(--color-text, #374151)); }
.block-rss-feed .rss-items { display: flex; flex-direction: column; gap: 1rem; color: var(--feed-muted, var(--color-muted, #6b7280)); }
.block-rss-feed.rss-grid .rss-items { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1.25rem; }
.block-rss-feed .rss-status { margin: 0 0 .5rem; color: var(--feed-muted, var(--color-muted, #6b7280)); font-size: .85rem; font-weight: 600; }
.rss-item { border: 1px solid var(--feed-border, var(--color-border, #d1d5db)); border-radius: var(--feed-radius, .75rem); overflow: hidden; background: var(--feed-card-bg, transparent); color: var(--feed-text, var(--color-text, #374151)); }
.rss-item-image-link { display: block; line-height: 0; }
.rss-item-image { width: 100%; height: 160px; object-fit: cover; background: var(--feed-image-bg, var(--color-surface, #f3f4f6)); }
.rss-item-body { padding: var(--feed-padding, 1rem); }
.rss-item-title { display: inline-flex; align-items: center; min-height: 24px; padding-block: 2px; color: var(--feed-text, var(--color-text, #374151)); font-size: 1rem; font-weight: 700; line-height: 1.35; text-decoration: none; }
.rss-item-title:hover { text-decoration: underline; }
.rss-item-image-link:focus-visible, .rss-item-title:focus-visible, .block-rss-feed .rss-empty a:focus-visible { outline: 2px solid var(--theme-primary, var(--color-primary, #2563eb)); outline-offset: 3px; border-radius: .25rem; }
.rss-item-author { margin: .4rem 0 0; color: var(--feed-muted, var(--color-muted, #6b7280)); font-size: .82rem; line-height: 1.4; font-weight: 600; }
.rss-item-meta { margin: .4rem 0 0; color: var(--feed-muted, var(--color-muted, #6b7280)); font-size: .8rem; line-height: 1.4; }
.rss-item-meta-separator { padding-inline: .15rem; }
.rss-item-categories { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .5rem; }
.rss-item-category { display: inline-flex; align-items: center; min-height: 1.5rem; border-radius: 999px; background: color-mix(in srgb, var(--feed-muted, var(--color-muted, #6b7280)) 12%, transparent); color: var(--feed-muted, var(--color-muted, #4b5563)); padding: .15rem .55rem; font-size: .75rem; line-height: 1.2; font-weight: 700; }
.rss-item-tags { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .45rem; }
.rss-item-tag { display: inline-flex; align-items: center; min-height: 1.45rem; border-radius: .375rem; border: 1px solid color-mix(in srgb, var(--feed-muted, var(--color-muted, #6b7280)) 24%, transparent); color: var(--feed-muted, var(--color-muted, #4b5563)); padding: .12rem .45rem; font-size: .72rem; line-height: 1.2; font-weight: 650; }
.rss-item-excerpt { margin: .5rem 0 0; color: var(--feed-muted, var(--color-muted, #6b7280)); font-size: .9rem; line-height: 1.5; }
.rss-item-date { margin: .75rem 0 0; color: var(--feed-muted, var(--color-muted, #6b7280)); font-size: .8rem; }
.block-rss-feed .rss-empty { margin: 0; color: var(--feed-muted, var(--color-muted, #6b7280)); }
.block-rss-feed [data-rss-image], .block-rss-feed .rss-image-placeholder { background: var(--feed-image-bg, var(--color-surface, #f3f4f6)); }

/* Pricing table */
.block-pricing { display: flex; flex-wrap: wrap; align-items: stretch; gap: 1.5rem; justify-content: center; width: 100%; min-width: 0; }
.pricing-plan { display: flex; flex-direction: column; border: 1px solid var(--pricing-border, var(--color-border, #e5e7eb)); border-radius: var(--pricing-card-radius, 0.75rem); padding: var(--pricing-card-padding, 2rem); flex: 0 1 280px; width: min(100%, 280px); max-width: 100%; min-width: 0; overflow-wrap: anywhere; word-break: normal; background: var(--pricing-card-bg, #fff); color: var(--pricing-card-text, var(--color-text, #111827)); }
.pricing-plan.highlighted { border-color: var(--pricing-highlight, var(--color-primary, #2563eb)); box-shadow: 0 4px 24px color-mix(in srgb, var(--pricing-highlight, var(--color-primary, #2563eb)) 18%, transparent); }
.pricing-plan h3, .pricing-plan p, .pricing-price { min-width: 0; overflow-wrap: anywhere; word-break: normal; }
.pricing-price { font-size: 2rem; font-weight: 700; margin: 0.5rem 0; }
.pricing-period, .pricing-description { color: var(--pricing-muted-text, var(--color-muted, #6b7280)); }
.pricing-period { font-size: .85rem; }
.pricing-description { font-size: .9rem; }
.pricing-features { list-style: none; padding: 0; margin: 1rem 0; min-width: 0; flex: 1; }
.pricing-features li { display: flex; align-items: flex-start; gap: 0.5rem; min-width: 0; padding: 0.375rem 0; font-size: 0.9rem; overflow-wrap: anywhere; word-break: normal; }
.pricing-features li > span:first-child { color: var(--pricing-feature-icon, #16a34a); flex: 0 0 auto; }
.pricing-feature-text { min-width: 0; flex: 1 1 auto; overflow-wrap: anywhere; word-break: normal; }
.pricing-plan .btn { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }

/* Form */
.block-form { width: 100%; min-width: 0; max-width: 100%; background: var(--form-bg, transparent); color: var(--form-input-text, var(--theme-text, var(--color-text, #111827))); }
.form-body { min-width: 0; max-width: 100%; }
.block-form[data-submit-layout="inline"] .form-body { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 0; }
.form-fields { display: grid; grid-template-columns: minmax(0, 1fr); grid-auto-columns: minmax(0, 1fr); grid-auto-flow: row dense; gap: var(--form-gap, 1rem); align-items: flex-start; justify-items: stretch; width: 100%; min-width: 0; max-width: 100%; }
.form-fields[data-columns="2"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.form-fields[data-columns="3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.form-fields[data-columns="4"] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.form-field-block { grid-column: 1 / -1; justify-self: stretch; align-self: start; width: auto; max-width: 100%; min-width: 0; min-inline-size: 0; box-sizing: border-box; border: 1px solid transparent; border-radius: var(--form-radius, 0.375rem); padding: var(--form-field-padding, 0.25rem); margin: 0; }
.form-fields[data-columns="2"] > .form-field-block[data-width="half"],
.form-fields[data-columns="2"] > .form-field-block[data-width="third"],
.form-fields[data-columns="2"] > .form-field-block[data-width="quarter"] { grid-column: span 1 / span 1; }
.form-fields[data-columns="3"] > .form-field-block[data-width="half"],
.form-fields[data-columns="3"] > .form-field-block[data-width="two-thirds"],
.form-fields[data-columns="3"] > .form-field-block[data-width="three-quarters"] { grid-column: span 2 / span 2; }
.form-fields[data-columns="3"] > .form-field-block[data-width="third"],
.form-fields[data-columns="3"] > .form-field-block[data-width="quarter"] { grid-column: span 1 / span 1; }
.form-fields[data-columns="4"] > .form-field-block[data-width="half"] { grid-column: span 2 / span 2; }
.form-fields[data-columns="4"] > .form-field-block[data-width="third"],
.form-fields[data-columns="4"] > .form-field-block[data-width="quarter"] { grid-column: span 1 / span 1; }
.form-fields[data-columns="4"] > .form-field-block[data-width="two-thirds"],
.form-fields[data-columns="4"] > .form-field-block[data-width="three-quarters"] { grid-column: span 3 / span 3; }
.form-fields[data-columns] > .form-field-block[data-span="1"] { grid-column: span 1 / span 1; }
.form-fields[data-columns] > .form-field-block[data-span="2"] { grid-column: span 2 / span 2; }
.form-fields[data-columns] > .form-field-block[data-span="3"] { grid-column: span 3 / span 3; }
.form-fields[data-columns] > .form-field-block[data-span="4"] { grid-column: span 4 / span 4; }
.form-fields[data-columns] > [data-form-support="true"][data-span="1"] { grid-column: span 1 / span 1; }
.form-fields[data-columns] > [data-form-support="true"][data-span="2"] { grid-column: span 2 / span 2; }
.form-fields[data-columns] > [data-form-support="true"][data-span="3"] { grid-column: span 3 / span 3; }
.form-fields[data-columns] > [data-form-support="true"][data-span="4"] { grid-column: span 4 / span 4; }
.form-field-block label, .form-field-block legend { display: block; font-weight: 500; margin: 0 0 0.25rem; font-size: 0.875rem; line-height: 1.35; color: var(--form-label, var(--theme-text, var(--color-text, #1f2937))); }
.form-field-block label span, .form-field-block legend span { color: #dc2626; }
.form-field-block input, .form-field-block textarea, .form-field-block select { display: block; width: 100%; max-width: 100%; min-width: 0; box-sizing: border-box; min-height: 44px; padding: var(--form-input-padding, 0.5rem 0.75rem); border: 1px solid var(--form-input-border, var(--theme-border, var(--color-border, #d1d5db))); border-radius: var(--form-radius, 0.375rem); font-size: 0.875rem; line-height: 1.4; font-family: inherit; background: var(--form-input-bg, #fff); color: var(--form-input-text, var(--theme-text, var(--color-text, #111827))); box-shadow: 0 1px 2px rgba(15,23,42,0.08); transition: border-color 160ms ease, box-shadow 160ms ease, outline-color 160ms ease, background-color 160ms ease, color 160ms ease; }
@media (prefers-reduced-motion: reduce) { .form-field-block input, .form-field-block textarea, .form-field-block select { transition: none; animation: none; } }
.block-form[data-field-style="filled"] .form-field-block input, .block-form[data-field-style="filled"] .form-field-block textarea, .block-form[data-field-style="filled"] .form-field-block select { border-color: transparent; background: var(--form-input-bg, var(--theme-surface, var(--color-surface, #f8fafc))); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--form-input-border, #d1d5db) 50%, transparent); }
.block-form[data-field-style="underline"] .form-field-block input, .block-form[data-field-style="underline"] .form-field-block textarea, .block-form[data-field-style="underline"] .form-field-block select { border-width: 0 0 1px; border-radius: 0; background: transparent; box-shadow: none; padding-inline: 0; }
.form-field-block textarea { resize: vertical; min-height: 112px; }
.form-field-block input::placeholder, .form-field-block textarea::placeholder { color: var(--form-placeholder, #6b7280); opacity: 1; }
.form-field-block input[type="radio"], .form-field-block input[type="checkbox"] { width: 18px; min-height: 18px; height: 18px; padding: 0; flex: 0 0 auto; }
.form-field-block input[type="file"] { display: flex; align-items: center; padding: 0.375rem 0.75rem; color: var(--theme-muted, var(--color-muted, #4b5563)); cursor: pointer; line-height: 1.4; }
.form-field-block input[type="file"]::file-selector-button,
.form-field-block input[type="file"]::-webkit-file-upload-button { min-height: 32px; margin: 0 0.75rem 0 0; border: 1px solid var(--theme-border, var(--color-border, #d1d5db)); border-radius: 0.375rem; background: #fff; color: var(--theme-text, var(--color-text, #111827)); padding: 0.25rem 0.625rem; font: inherit; font-size: 0.875rem; font-weight: 500; cursor: pointer; }
.form-field-block input[type="file"]::file-selector-button:hover { background: var(--theme-surface, var(--color-surface, #f8fafc)); }
.form-field-block select { appearance: auto; }
.form-field-block input:focus-visible, .form-field-block textarea:focus-visible, .form-field-block select:focus-visible { outline: 2px solid var(--form-focus, var(--theme-primary, var(--color-primary, #2563eb))); outline-offset: 2px; border-color: var(--form-focus, var(--theme-primary, var(--color-primary, #2563eb))); box-shadow: 0 0 0 3px color-mix(in srgb, var(--form-focus, var(--theme-primary, #2563eb)) 16%, transparent); }
.form-helper { margin: 0.375rem 0 0; color: var(--form-helper, var(--color-muted, #6b7280)); font-size: 0.875rem; }
.form-choice-group { display: flex; flex-direction: column; gap: 0.5rem; }
.form-choice-group[data-layout="horizontal"] { flex-direction: row; flex-wrap: wrap; column-gap: 1rem; }
.form-choice { display: inline-flex !important; align-items: center; gap: 0.5rem; min-height: 32px; margin: 0 !important; font-weight: 400 !important; }
.form-composite-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; width: 100%; min-width: 0; max-width: 100%; }
.form-composite-grid > * { min-width: 0; max-width: 100%; }
.form-composite-grid > label { display: none !important; }
.form-composite-grid .wide { grid-column: 1 / -1; }
.form-file-status:empty { display: none; }
.form-file-status.is-error { color: #991b1b; font-weight: 500; }
.form-honeypot { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.form-opt-in { display: flex; align-items: flex-start; gap: 0.5rem; min-height: 44px; margin-top: 1rem; font-size: 0.875rem; color: var(--form-opt-in, var(--form-label, var(--color-text, #374151))); }
.form-opt-in input { width: 18px; min-height: 18px; height: 18px; margin: 0.25rem 0 0; flex: 0 0 auto; }
.form-opt-in p { margin: 0; }
.form-opt-in a { color: var(--form-opt-in-link, var(--form-focus, var(--color-primary, #2563eb))); font-weight: 600; text-decoration: underline; }
.form-opt-in span span { margin-left: 0.25rem; color: #dc2626; }
.form-submit-row { display: flex; margin-top: 1rem; }
.block-form[data-submit-layout="inline"] .form-submit-row { margin-top: 0; }
.form-submit-row[data-align="center"] { justify-content: center; }
.form-submit-row[data-align="right"] { justify-content: flex-end; }
.form-submit-row[data-align="full"] .form-submit { width: 100%; }
.form-submit:not(.btn) { min-height: 44px; background: var(--color-primary, #2563eb); color: #fff; border: none; padding: 0.75rem 2rem; border-radius: 0.375rem; font-size: 1rem; font-weight: 600; cursor: pointer; }
.form-submit:not(.btn):hover { opacity: 0.9; }
.form-submit:focus-visible { outline: 2px solid var(--form-focus, var(--focus-ring)); outline-offset: 2px; }
.form-submit[disabled] { opacity: 0.6; cursor: wait; }
.form-submit[disabled]::after { content: ""; display: inline-block; width: 0.85em; height: 0.85em; margin-left: 0.5rem; border: 2px solid currentColor; border-right-color: transparent; border-radius: 999px; vertical-align: -0.125em; animation: isplash-form-spin 0.8s linear infinite; }
@keyframes isplash-form-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .form-submit[disabled]::after { animation: none; } }
@media (max-width: 640px) {
  .block-form[data-submit-layout="inline"] .form-body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .block-form[data-submit-layout="inline"] .form-submit-row { margin-top: 0; }
}
.form-status-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.form-success, .form-error { padding: 1rem; border-radius: 0.375rem; margin-top: 1rem; }
.form-success[hidden], .form-error[hidden] { display: none; }
.form-success { background: #dcfce7; color: #166534; }
.form-error { background: #fee2e2; color: #991b1b; }
.form-field-block.is-invalid label, .form-field-block.is-invalid legend, .form-opt-in.is-invalid { color: #991b1b; }
.form-field-block [aria-invalid="true"] { border-color: #dc2626; background: #fffafa; box-shadow: 0 0 0 3px rgba(220,38,38,0.16); }
.form-field-block input[type="checkbox"][aria-invalid="true"], .form-field-block input[type="radio"][aria-invalid="true"], .form-opt-in input[aria-invalid="true"] { accent-color: #dc2626; outline: 2px solid #dc2626; outline-offset: 2px; box-shadow: none; }
.form-choice-group.is-invalid { border-color: #dc2626; border-radius: 0.5rem; background: #fffafa; box-shadow: 0 0 0 3px rgba(220,38,38,0.08); }
.form-choice-group.is-invalid .form-choice { color: #991b1b; }
.form-opt-in.is-invalid { border-radius: 0.5rem; background: #fffafa; outline: 1px solid #dc2626; outline-offset: 4px; box-shadow: 0 0 0 3px rgba(220,38,38,0.08); }
.form-field-error { margin: 0.375rem 0 0; color: #991b1b; font-size: 0.875rem; font-weight: 500; }
@media (max-width: 767.98px) {
  .form-fields,
  .form-fields[data-columns] { grid-template-columns: 1fr !important; }
  .form-field-block,
  .form-field-block[data-width],
  .form-fields[data-columns] > .form-field-block[data-span],
  .form-fields[data-columns] > [data-form-support="true"][data-span] { grid-column: 1 / -1 !important; }
  .form-composite-grid { grid-template-columns: 1fr; }
}

/* Blog list */
.blog-listing-page { padding: 3rem 1.5rem clamp(8rem, 20vw, 12rem); }
.blog-listing-eyebrow { margin: 0 0 1rem; color: var(--color-muted, #6b7280); }
.blog-listing-page > h1 { margin: 0 0 1.5rem; }
.block-blog-list .blog-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); gap: 1.5rem; }
.block-blog-list .blog-list { display: flex; flex-direction: column; gap: 1rem; }
.blog-card { display: flex; min-width: 0; height: 100%; flex-direction: column; border: var(--blog-card-border-width, 1px) solid var(--blog-card-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-card-radius, 0.5rem); overflow: hidden; background: var(--blog-card-bg, #fff); box-shadow: var(--blog-card-shadow, none); }
.blog-card-image-link { display: block; line-height: 0; }
.blog-card-image { width: 100%; height: 180px; object-fit: cover; }
.blog-card-image:not(img) { background: var(--blog-image-bg, var(--color-surface, #f3f4f6)); }
.blog-card-body { display: flex; min-width: 0; height: 100%; flex-direction: column; align-items: flex-start; padding: var(--blog-card-body-padding, 1rem); }
.blog-card-title { font-weight: 700; font-size: 1.1rem; text-decoration: none; color: var(--blog-title, inherit); }
.blog-card-image-link:focus-visible, .blog-card-title:focus-visible { outline: 2px solid var(--blog-focus, var(--theme-primary, var(--color-primary, #2563eb))); outline-offset: 3px; border-radius: 0.25rem; box-shadow: inset 0 0 0 3px var(--blog-focus, var(--theme-primary, var(--color-primary, #2563eb))); }
.blog-card-categories { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .55rem; }
.blog-card-category { display: inline-flex; align-items: center; min-height: 1.5rem; border-radius: 999px; background: color-mix(in srgb, var(--blog-meta, var(--color-muted, #6b7280)) 12%, transparent); color: var(--blog-meta, var(--color-muted, #4b5563)); padding: .15rem .55rem; font-size: .75rem; line-height: 1.2; font-weight: 700; }
.blog-card-tags { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .45rem; }
.blog-card-tag { display: inline-flex; align-items: center; min-height: 1.45rem; border-radius: .375rem; border: 1px solid color-mix(in srgb, var(--blog-meta, var(--color-muted, #6b7280)) 24%, transparent); color: var(--blog-meta, var(--color-muted, #4b5563)); padding: .12rem .45rem; font-size: .72rem; line-height: 1.2; font-weight: 650; }
.blog-card-excerpt { color: var(--blog-excerpt, var(--color-muted, #6b7280)); font-size: 0.9rem; margin-top: 0.5rem; }
.blog-card-meta { margin: .4rem 0 0; color: var(--blog-meta, var(--color-muted, #6b7280)); font-size: .8rem; line-height: 1.4; }
.blog-card-author, .blog-card-date { color: inherit; }
.blog-card-meta-separator { padding-inline: .15rem; }
.blog-empty {
  margin: 0;
  padding: 1.25rem 1rem;
  border: 1px dashed var(--blog-card-border, var(--post-border, var(--color-border, #e5e7eb)));
  border-radius: .5rem;
  color: var(--blog-meta, var(--post-muted, var(--color-muted, #6b7280)));
}

/* Breadcrumbs */
.block-breadcrumbs nav { font-size: var(--breadcrumb-size, 0.875rem); color: var(--breadcrumb-current, var(--color-text, #111827)); }
.block-breadcrumbs ol { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 0.25rem; }
.block-breadcrumbs li:not(:last-child)::after { content: attr(data-sep); margin-left: 0.25rem; color: var(--breadcrumb-separator, var(--color-muted, #6b7280)); }
.block-breadcrumbs a { display: inline-flex; align-items: center; min-height: 24px; padding-block: 2px; color: var(--breadcrumb-link, var(--color-primary, #2563eb)); text-decoration: none; }
.block-breadcrumbs a:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; border-radius: .25rem; }
.block-breadcrumbs li:last-child { color: var(--breadcrumb-current, var(--color-text, #111827)); }

/* Cookie consent */
.cookie-banner { position: fixed; right: max(1rem, env(safe-area-inset-right)); bottom: max(1rem, env(safe-area-inset-bottom)); left: max(1rem, env(safe-area-inset-left)); z-index: 9999; display: flex; align-items: center; gap: 1rem; padding: 1rem 1.25rem; border: 1px solid var(--cookie-border, var(--color-border, #e5e7eb)); border-radius: 12px; background: var(--cookie-bg, #fff); color: var(--cookie-text, var(--color-text, #374151)); box-shadow: 0 18px 45px rgba(15,23,42,.18); transition: opacity .2s ease, transform .2s ease; }
.cookie-banner.cookie-corner, .cookie-banner.cookie-corner-popup { left: auto; width: min(420px, calc(100vw - 2rem)); }
.cookie-banner.cookie-modal { top: 50%; right: auto; bottom: auto; left: 50%; width: min(480px, calc(100vw - 2rem)); transform: translate(-50%, -50%); }
.cookie-banner.is-resolved { pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .cookie-banner { transition: none; animation: none; } }
.cookie-banner p { flex: 1; margin: 0; font-size: 0.875rem; }
.cookie-accept, .cookie-reject { padding: 0.5rem 1.25rem; border-radius: 0.375rem; font-size: 0.875rem; font-weight: 500; cursor: pointer; border: none; }
.cookie-accept:not(.btn) { background: var(--color-primary, #2563eb); color: #fff; }
.cookie-reject:not(.btn) { background: transparent; color: var(--color-muted, #6b7280); }
@media (max-width: 640px) {
  .cookie-banner { align-items: stretch; flex-direction: column; }
  .cookie-banner .btn { width: 100%; }
}

/* F14 — published a11y floor.
   HIT AREAS: every discrete control gets at least a 24px box (BUILDER_UI_
   ACCESSIBILITY RULE 5.1.2 targets 44). Icon-only controls grow their hit
   area with a centred ::after overlay, NEVER with min-width/min-height on the
   control itself: min-* clamps the USED value, so it silently overrides the
   author's Size control (that is how the social-icons size prop became a dead
   control) and, because imported icon SVGs are authored width="100%", it
   also rescales the painted glyph against the enlarged box.
   FOCUS: a visible 2px :focus-visible ring on every focusable published
   element, all reading the single --focus-ring token. */
.block-icon { width: fit-content; max-width: 100%; display: flex; align-items: center; min-width: unset; min-height: unset; box-sizing: border-box; flex: 0 0 auto; }
.block-icon .icon-link, .block-icon .icon-glyph { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.block-icon .icon-glyph > svg { width: 100%; height: 100%; }
.block-icon a, a.block-logo { position: relative; }
.block-icon a::after, a.block-logo::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; min-width: 44px; min-height: 44px; }
.block-icon a:focus-visible,
a.block-logo:focus-visible,
.block-social-icons .social-icon:focus-visible,
.block-share .share-btn:focus-visible,
.hamburger-toggle:focus-visible,
.hamburger-close:focus-visible,
.hamburger-link:focus-visible,
.hamburger-submenu-toggle:focus-visible,
.nav-mobile-toggle:focus-visible,
.nav-mobile-close:focus-visible,
.nav-mobile-submenu-toggle:focus-visible,
.tabs-list button:focus-visible,
.slideshow-prev:focus-visible,
.slideshow-next:focus-visible,
.slideshow-pause:focus-visible,
.reviews-prev:focus-visible,
.reviews-next:focus-visible,
.reviews-pause:focus-visible,
.blog-pagination-controls button:focus-visible,
.lang-button:focus-visible,
.lang-dropdown a:focus-visible,
.block-file .file-link:focus-visible,
.block-file .file-card:focus-visible,
.block-video iframe:focus-visible,
.block-video video:focus-visible,
.block-video [data-video-noscript-fallback]:focus-visible,
[data-video-lazy-placeholder]:focus-visible,
.flickr-badge-link:focus-visible,
.form-opt-in input:focus-visible,
.block-accordion summary:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
  border-radius: .25rem;
}
/* Post/search/review widgets */
.blog-posts-heading { margin: 0 0 1rem; color: var(--post-text, var(--color-text, #374151)); font-size: 1.5rem; line-height: 2rem; font-weight: 700; }
.block-recent-posts .recent-posts-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1rem; }
.block-recent-posts .post-card { background: var(--post-card-bg, #fff); border: var(--post-card-border-width, 0px) solid var(--post-border, var(--color-border, #e5e7eb)); border-radius: var(--post-card-radius, .75rem); box-shadow: var(--post-card-shadow, var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08))); overflow: hidden; color: var(--post-text, var(--color-text, #374151)); }
.block-recent-posts .post-card-image-link { display: block; line-height: 0; }
.block-recent-posts .post-card-image { width: 100%; height: 150px; object-fit: cover; background: var(--post-image-bg, var(--color-surface, #f3f4f6)); }
.block-recent-posts .post-card-body { padding: var(--post-card-body-padding, 1rem); }
.block-recent-posts .post-card-title { color: inherit; font-weight: 700; text-decoration: none; }
.block-recent-posts .post-card-image-link:focus-visible, .block-recent-posts .post-card-title:focus-visible { outline: 2px solid var(--post-focus, var(--theme-primary, var(--color-primary, #2563eb))); outline-offset: 3px; border-radius: 0.25rem; box-shadow: inset 0 0 0 3px var(--post-focus, var(--theme-primary, var(--color-primary, #2563eb))); }
.block-recent-posts .post-card-categories { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .55rem; }
.block-recent-posts .post-card-category { display: inline-flex; align-items: center; min-height: 1.5rem; border-radius: 999px; background: color-mix(in srgb, var(--post-muted, var(--color-muted, #6b7280)) 12%, transparent); color: var(--post-muted, var(--color-muted, #4b5563)); padding: .15rem .55rem; font-size: .75rem; line-height: 1.2; font-weight: 700; }
.block-recent-posts .post-card-tags { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .45rem; }
.block-recent-posts .post-card-tag { display: inline-flex; align-items: center; min-height: 1.45rem; border-radius: .375rem; border: 1px solid color-mix(in srgb, var(--post-muted, var(--color-muted, #6b7280)) 24%, transparent); color: var(--post-muted, var(--color-muted, #4b5563)); padding: .12rem .45rem; font-size: .72rem; line-height: 1.2; font-weight: 650; }
.block-recent-posts .post-card-author { color: var(--post-muted, var(--color-muted, #6b7280)); font-size: 0.82rem; margin: 0.35rem 0 0; }
.block-recent-posts .post-card-meta, .block-blog-related-posts .post-card-meta { margin: .4rem 0 0; color: var(--post-muted, var(--color-muted, #6b7280)); font-size: .8rem; line-height: 1.4; }
.post-card-meta-separator { padding-inline: .15rem; }
.block-recent-posts .post-card-date, .block-recent-posts .post-card-excerpt { color: var(--post-muted, var(--color-muted, #6b7280)); }
/* Card Read More buttons inherit the theme button styling; only spacing here. */
.post-card-read-more { margin-top: .85rem; }
.blog-card-read-more { margin-top: auto; }
.block-blog-related-posts .related-posts-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1rem; }
.block-blog-related-posts .post-card { background: var(--post-card-bg, #fff); border: var(--post-card-border-width, 0px) solid var(--post-border, var(--color-border, #e5e7eb)); border-radius: var(--post-card-radius, .75rem); box-shadow: var(--post-card-shadow, var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08))); overflow: hidden; color: var(--post-text, var(--color-text, #374151)); }
.block-blog-related-posts .post-card-image { width: 100%; height: 150px; object-fit: cover; background: var(--post-image-bg, var(--color-surface, #f3f4f6)); }
.block-blog-related-posts .post-card-body { padding: var(--post-card-body-padding, 1rem); }
.block-blog-related-posts .post-card-title { color: inherit; font-weight: 700; text-decoration: none; }
.block-blog-related-posts .post-card-date, .block-blog-related-posts .post-card-excerpt { color: var(--post-muted, var(--color-muted, #6b7280)); }
/* Blog gallery responsive card grids stay readable inside narrow blog columns. */
.block-blog-list .blog-list { display: grid; grid-template-columns: minmax(min(100%, 240px), 1fr); gap: 1rem; }
.block-blog-list .blog-list-heading { margin: 0 0 1rem; color: var(--blog-title, var(--color-text, #111827)); font-size: clamp(1.35rem, 2.4vw, 2rem); line-height: 1.15; font-weight: 700; }
.block-blog-list .post-card-category { display: inline-flex; align-items: center; min-height: 1.5rem; border-radius: 999px; background: color-mix(in srgb, var(--blog-meta, var(--color-muted, #6b7280)) 12%, transparent); color: var(--blog-meta, var(--color-muted, #4b5563)); padding: .15rem .55rem; font-size: .75rem; line-height: 1.2; font-weight: 700; margin-top: .55rem; }
/* Blog list pagination controls. */
.blog-pagination-controls { display: flex; align-items: center; justify-content: center; gap: .75rem; margin-top: 1.25rem; }
.blog-pagination-controls button { min-height: 44px; padding: .5rem 1rem; border: 1px solid var(--blog-card-border, var(--color-border, #e5e7eb)); border-radius: .5rem; background: var(--blog-card-bg, #fff); color: var(--blog-title, var(--color-text, #111827)); font-weight: 600; cursor: pointer; }
.blog-pagination-controls button[disabled] { opacity: .5; cursor: default; }
/* Read More authoring marker keeps an editable label colour on canvas. */
.block-blog-read-more { --read-more-label: var(--theme-muted, var(--color-muted, #6b7280)); }
/* Blog author card mirrors the canvas presentation. */
.block-blog-author { display: flex; align-items: center; gap: .75rem; border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .75rem); box-shadow: var(--blog-widget-shadow, var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08))); padding: var(--blog-widget-padding, 1rem); background: var(--blog-widget-bg, var(--color-background, #fff)); color: var(--blog-widget-text, var(--color-text, #111827)); }
.blog-author-avatar { display: flex; width: 44px; height: 44px; flex: 0 0 44px; align-items: center; justify-content: center; overflow: hidden; border-radius: 999px; background: var(--blog-widget-accent, var(--color-primary, #2563eb)); color: var(--blog-widget-bg, #fff); font-size: .875rem; line-height: 1; font-weight: 800; }
.blog-author-name { margin: 0; color: var(--blog-widget-title, var(--color-text, #111827)); font-weight: 700; }
.blog-author-bio { margin: .25rem 0 0; color: var(--blog-widget-muted, var(--color-muted, #6b7280)); font-size: .875rem; line-height: 1.45; }
/* Blog author avatar image preserves aspect ratio. */
.blog-author-avatar-img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }
/* Categories, archives, and feed links are structured navigation, not prose. */
.block-blog-taxonomy { border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .75rem); padding: var(--blog-widget-padding, 0); background: var(--blog-widget-bg, transparent); color: var(--blog-widget-text, var(--color-text, #111827)); }
.block-blog-taxonomy > p { margin: 0 0 .65rem; color: var(--blog-widget-title, var(--color-text, #111827)); font-weight: 700; }
.block-blog-taxonomy ul { display: grid; gap: .2rem; margin: 0; padding: 0; list-style: none; }
.block-blog-taxonomy a { display: inline-flex; min-height: 32px; align-items: center; color: var(--blog-widget-accent, var(--color-primary, #2563eb)); text-decoration: none; font-weight: 600; line-height: 1.35; }
.block-blog-taxonomy a:hover { opacity: .78; }
.block-blog-taxonomy a:focus-visible, .block-blog-feed:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 3px; border-radius: .25rem; }
.block-blog-feed { display: inline-flex; min-height: 44px; align-items: center; gap: .5rem; border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .65rem); padding: .5rem .75rem; background: var(--blog-widget-bg, transparent); color: var(--blog-widget-text, var(--theme-primary, var(--color-primary, #2563eb))); text-decoration: none; font-weight: 600; }
.block-blog-feed:hover { opacity: .78; }
.blog-feed-icon { width: 18px; height: 18px; flex: 0 0 18px; }
/* Compact blog link widgets use one visible text colour. */
.block-blog-linkedin-button { color: var(--blog-widget-text, var(--theme-primary, var(--color-primary, #2563eb))); display: inline-flex; align-items: center; gap: .5rem; min-height: 44px; padding: .55rem .9rem; border: var(--blog-widget-border-width, 1px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .65rem); background: var(--blog-widget-bg, transparent); text-decoration: none; font-weight: 600; }
.block-blog-linkedin-button .blog-linkedin-icon { display: inline-flex; }
/* Flickr badge grid + strip layouts. */
.block-blog-flickr-badge { border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .85rem); box-shadow: var(--blog-widget-shadow, var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08))); padding: var(--blog-widget-padding, 1rem); background: var(--blog-widget-bg, var(--color-background, #fff)); color: var(--blog-widget-text, var(--color-text, #111827)); }
.block-blog-flickr-badge .flickr-badge-title { margin: 0 0 .75rem; font-weight: 700; color: var(--blog-widget-title, var(--color-text, #111827)); }
.flickr-badge-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .4rem; }
.flickr-badge-grid[data-layout="strip"] { grid-template-columns: repeat(auto-fit, minmax(54px, 1fr)); grid-auto-flow: column; grid-auto-columns: minmax(54px, 1fr); overflow-x: auto; }
.flickr-badge-grid img, .flickr-badge-grid .flickr-placeholder { aspect-ratio: 1 / 1; width: 100%; object-fit: cover; border-radius: .35rem; background: var(--blog-widget-border, var(--color-surface, #f3f4f6)); display: block; }
.block-blog-flickr-badge .flickr-badge-link { display: inline-block; margin-top: .65rem; color: var(--blog-widget-accent, var(--color-primary, #2563eb)); font-weight: 600; text-decoration: none; }
.block-blog-comments { border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .85rem); box-shadow: var(--blog-widget-shadow, var(--surface-card-shadow, 0 1px 3px rgba(15, 23, 42, 0.08))); padding: var(--blog-widget-padding, clamp(1rem, 3vw, 1.5rem)); background: var(--blog-widget-bg, var(--color-background, #fff)); color: var(--blog-widget-text, var(--color-text, #111827)); }
.blog-comments-header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }
.blog-comments-header h2 { margin: 0; color: var(--blog-widget-title, var(--color-text, #111827)); font-size: clamp(1.35rem, 2.4vw, 2rem); line-height: 1.15; }
.blog-comments-header span { border-radius: 999px; padding: .25rem .75rem; background: color-mix(in srgb, var(--blog-widget-accent, var(--color-primary, #2563eb)) 10%, transparent); color: var(--blog-widget-accent, var(--color-primary, #2563eb)); font-size: .8rem; font-weight: 700; }
.blog-comments-empty { margin: 0 0 1rem; color: var(--blog-widget-muted, var(--color-muted, #6b7280)); font-size: .95rem; }
.blog-comment-list-panel,
.blog-comment-form-panel { border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .85rem); padding: clamp(.95rem, 2.4vw, 1.25rem); background: var(--blog-widget-bg, var(--color-background, #fff)); }
.blog-comment-list-panel { margin-bottom: 1.25rem; background: color-mix(in srgb, var(--blog-widget-bg, var(--color-background, #fff)) 96%, var(--blog-widget-accent, var(--color-primary, #2563eb))); }
.blog-comment-list-panel > h3,
.blog-comment-form-panel > h3 { margin: 0 0 .75rem; color: var(--blog-widget-title, var(--color-text, #111827)); font-size: .95rem; line-height: 1.35; font-weight: 700; }
.blog-comment-list { display: grid; gap: .75rem; }
.blog-comment-list .blog-comments-empty { margin: 0; }
.blog-comment-item { border: var(--blog-widget-border-width, 0px) solid var(--blog-widget-border, var(--color-border, #e5e7eb)); border-radius: var(--blog-widget-radius, .75rem); padding: .9rem; background: color-mix(in srgb, var(--blog-widget-bg, var(--color-background, #fff)) 92%, var(--blog-widget-accent, var(--color-primary, #2563eb))); }
.blog-comment-item div { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; margin-bottom: .35rem; }
.blog-comment-item strong { color: var(--blog-widget-title, var(--color-text, #111827)); }
.blog-comment-item time { color: var(--blog-widget-muted, var(--color-muted, #6b7280)); font-size: .8rem; }
.blog-comment-item p { margin: 0; color: var(--blog-widget-text, var(--color-text, #111827)); line-height: 1.55; }
.blog-comment-form { display: grid; gap: .875rem; }
.blog-comment-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .875rem; }
.blog-comment-captcha { max-width: 18rem; }
.blog-comment-form label { display: grid; gap: .35rem; color: var(--blog-widget-text, var(--color-text, #111827)); font-size: .9rem; font-weight: 600; }
.blog-comment-form input,
.blog-comment-form textarea { min-width: 0; min-height: 44px; border: 1px solid color-mix(in srgb, var(--blog-widget-muted, var(--color-muted, #6b7280)) 32%, transparent); border-radius: .5rem; padding: .65rem .75rem; font: inherit; color: var(--blog-widget-text, var(--color-text, #111827)); background: var(--color-background, #fff); }
.blog-comment-form textarea { min-height: 120px; resize: vertical; }
.blog-comment-form input:focus-visible,
.blog-comment-form textarea:focus-visible { outline: 2px solid var(--blog-widget-accent, var(--color-primary, #2563eb)); outline-offset: 2px; }
.blog-comment-status { margin: 0; border-radius: .65rem; padding: .75rem .9rem; background: color-mix(in srgb, var(--blog-widget-accent, var(--color-primary, #2563eb)) 10%, transparent); color: var(--blog-widget-text, var(--color-text, #111827)); font-size: .95rem; }
.blog-comment-status[data-state="error"] { background: #fee2e2; color: #991b1b; }
.blog-comment-status[data-state="success"] { background: #dcfce7; color: #166534; }
.blog-comment-status[hidden] { display: none; }
.blog-comments-link { color: var(--blog-widget-accent, var(--color-primary, #2563eb)); text-decoration: none; }
@media (max-width: 640px) { .blog-comment-fields { grid-template-columns: 1fr; } }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
/* Anchor targets (G9): any block with an author-set Anchor ID clears the sticky
   header when jumped to. --isw-header-h is maintained by effects.js. */
[data-block-id][id] { scroll-margin-top: calc(var(--isw-header-h, 0px) + 16px); }
.block-search-posts .search-form { display: flex; width: 100%; max-width: 100%; }
.block-search-posts .search-input { flex: 1 1 auto; min-width: 0; min-height: 44px; border: 1px solid var(--search-input-border, var(--color-border, #e5e7eb)); border-radius: .75rem 0 0 .75rem; background: var(--search-input-bg, #fff); color: var(--search-input-text, var(--color-text, #374151)); padding: .625rem .875rem; }
.block-search-posts .search-submit { min-width: 44px; border-left-width: 0; border-radius: 0 .75rem .75rem 0; display: inline-flex; align-items: center; justify-content: center; }
.block-search-posts .search-form[data-button-shape="square"] .search-input,
.block-search-posts .search-form[data-button-shape="square"] .search-submit { border-radius: 0; }
.block-search-posts .search-form[data-button-shape="pill"] .search-input { border-radius: 999px 0 0 999px; }
.block-search-posts .search-form[data-button-shape="pill"] .search-submit { border-radius: 0 999px 999px 0; }
.block-search-posts .search-input::placeholder { color: var(--search-placeholder, #6b7280); opacity: 1; }
.block-search-posts .search-input:focus-visible, .block-search-posts .search-submit:focus-visible { outline: 2px solid var(--search-accent, var(--color-primary, #2563eb)); outline-offset: 2px; }
.block-search-posts .search-results-status { margin: .5rem 0 0; color: var(--search-accent, var(--color-primary, #2563eb)); font-size: .875rem; font-weight: 600; }
.block-search-posts .search-results { display: flex; flex-direction: column; gap: .5rem; margin-top: .5rem; }
.block-search-posts .search-result-item { display: flex; gap: .75rem; align-items: center; padding: .55rem .65rem; border: 1px solid var(--search-result-border, var(--color-border, #e5e7eb)); border-radius: .65rem; background: var(--search-result-bg, #fff); color: var(--search-input-text, var(--color-text, #374151)); text-decoration: none; }
.block-search-posts .search-results[hidden],
.block-search-posts .search-result-item[hidden] { display: none; }
.block-search-posts .search-result-item:hover { border-color: var(--search-accent, var(--color-primary, #2563eb)); }
.block-search-posts .search-result-thumb { width: 56px; height: 56px; object-fit: cover; border-radius: .5rem; background: var(--search-result-border, var(--color-surface, #f3f4f6)); flex: 0 0 auto; }
.block-search-posts .search-result-copy { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
.block-search-posts .search-result-copy strong { font-weight: 700; }
.block-search-posts .search-result-copy small { color: var(--search-placeholder, #6b7280); font-size: .75rem; }
.block-reviews-carousel { position: relative; width: 100%; max-width: 100%; overflow: visible; background: var(--review-bg, transparent); color: var(--review-text, var(--color-muted, #4b5563)); text-align: var(--review-align, left); }
.block-reviews-carousel .reviews-header { margin-bottom: 1rem; text-align: var(--review-align, left); }
.block-reviews-carousel .reviews-header h3 { margin: 0; color: var(--review-heading, var(--color-text, #111827)); font-size: clamp(1.5rem, 2.6vw, 2.25rem); line-height: 1.1; font-weight: 700; }
.block-reviews-carousel .reviews-header p { margin: .45rem 0 0; color: var(--review-muted, var(--color-muted, #6b7280)); font-size: .95rem; }
.block-reviews-carousel .reviews-frame { position: relative; overflow: visible; padding-bottom: 3.75rem; margin-bottom: -3.75rem; }
.block-reviews-carousel .reviews-viewport { width: 100%; overflow: hidden; box-sizing: content-box; padding: 1rem 2.25rem 3.75rem; margin: -1rem -2.25rem -3.75rem; }
.block-reviews-carousel .reviews-track { display: flex; gap: 1rem; transition: transform 360ms ease; will-change: transform; }
.block-reviews-carousel .review-slide { flex: 0 0 var(--review-card-width, 100%); width: var(--review-card-width, 100%); }
.block-reviews-carousel .reviews-fade-page { display: grid; grid-template-columns: repeat(var(--reviews-per-view, 1), minmax(0, 1fr)); gap: 1rem; animation: reviewsFadeIn 240ms ease both; }
.reviews-transition-fade .reviews-fade-page .review-slide { display: none; }
.reviews-transition-fade .reviews-fade-page .review-slide.active { display: flex; }
.block-reviews-carousel .reviews-static-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1rem; }
.block-reviews-carousel .reviews-list { display: grid; gap: 1rem; }
.block-reviews-carousel .review-card, .block-reviews-carousel .review-story-card { min-width: 0; background: var(--review-card-bg, #fff); border: var(--review-card-border-width, 1px) solid var(--review-border, var(--color-border, #e5e7eb)); border-radius: var(--review-radius, 12px); box-shadow: var(--review-card-shadow, none); color: var(--review-text, var(--color-muted, #4b5563)); }
.block-reviews-carousel .review-card { display: flex; flex-direction: column; overflow: hidden; }
.block-reviews-carousel .review-card-body { display: flex; min-width: 0; height: 100%; flex-direction: column; gap: .75rem; padding: var(--review-card-padding, 1.5rem); }
.block-reviews-carousel .review-feature-image { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.block-reviews-carousel .review-stars { display: inline-flex; align-self: flex-start; align-items: center; justify-content: inherit; gap: .15rem; color: var(--review-star, #facc15); }
.block-reviews-carousel[style*="--review-align: center"] .review-stars, .reviews-layout-carousel .review-stars, .reviews-layout-rotator .review-stars { align-self: center; justify-content: center; }
.block-reviews-carousel .review-star-filled { fill: currentColor; color: var(--review-star, #facc15); }
.block-reviews-carousel .review-star-empty { fill: none; color: color-mix(in srgb, var(--review-border, #d1d5db), transparent 10%); }
.block-reviews-carousel .review-text { margin: 0; min-width: 0; color: var(--review-text, var(--color-muted, #4b5563)); font-size: .95rem; line-height: 1.65; overflow-wrap: anywhere; }
.block-reviews-carousel .review-author { display: flex; min-width: 0; align-items: center; gap: .75rem; color: var(--review-author, var(--color-text, #111827)); }
.block-reviews-carousel .review-photo { width: 48px; height: 48px; flex: 0 0 auto; border-radius: var(--review-avatar-radius, 9999px); object-fit: cover; }
.block-reviews-carousel .review-author-copy { min-width: 0; }
.block-reviews-carousel .review-author strong { display: block; color: var(--review-author, var(--color-text, #111827)); font-size: .95rem; line-height: 1.25; }
.block-reviews-carousel .review-author small { display: block; margin-top: .15rem; color: var(--review-muted, var(--color-muted, #6b7280)); font-size: .8rem; line-height: 1.35; }
.block-reviews-carousel .review-cta { align-self: flex-start; margin-top: auto; }
.block-reviews-carousel[style*="--review-align: center"] .review-author, .reviews-layout-rotator .review-author { justify-content: center; }
.reviews-layout-rotator .reviews-viewport, .reviews-layout-slider .reviews-viewport { padding: 1rem 2.25rem 3.75rem; margin: -1rem -2.25rem -3.75rem; }
.reviews-layout-rotator .review-card { max-width: 760px; margin-inline: auto; }
.reviews-layout-rotator .review-card-body { align-items: center; padding-block: clamp(2rem, 5vw, 4rem); text-align: center; }
.reviews-layout-rotator .review-text { max-width: 62ch; font-size: clamp(1.05rem, 2vw, 1.45rem); }
.reviews-layout-carousel .review-card { border-radius: max(16px, var(--review-radius, 12px)); }
.reviews-layout-list .review-card { display: grid; grid-template-columns: minmax(180px, 240px) minmax(0, 1fr); }
.reviews-layout-list .review-list-meta, .reviews-layout-list .review-list-copy { min-width: 0; padding: var(--review-card-padding, 1.5rem); }
.reviews-layout-list .review-list-copy { display: flex; flex-direction: column; gap: .75rem; border-left: 1px solid var(--review-border, var(--color-border, #e5e7eb)); }
.reviews-layout-list .review-author { align-items: flex-start; }
.reviews-layout-list .review-text { font-size: 1rem; }
.reviews-layout-grid .reviews-static-grid { grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
.reviews-layout-story .review-story-card { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); overflow: hidden; }
.reviews-layout-story .review-story-card:not(.has-media) { grid-template-columns: minmax(0, 1fr); }
.reviews-layout-story .review-story-content { display: flex; min-width: 0; flex-direction: column; justify-content: center; gap: 1rem; padding: clamp(1.5rem, 4vw, 3rem); }
.reviews-layout-story .review-feature-image { height: 100%; min-height: 300px; aspect-ratio: auto; }
.reviews-layout-story .review-text { font-size: clamp(1.05rem, 2vw, 1.5rem); }
.block-reviews-carousel .reviews-prev, .block-reviews-carousel .reviews-next { position: absolute; top: 50%; z-index: 2; display: inline-flex; width: 36px; height: 36px; align-items: center; justify-content: center; border: 1px solid var(--review-border, var(--color-border, #e5e7eb)); border-radius: 9999px; background: var(--review-card-bg, #fff); color: var(--review-control, var(--color-primary, #2563eb)); box-shadow: 0 8px 20px rgba(15, 23, 42, .12); transform: translateY(-50%); transition: transform 160ms ease, opacity 160ms ease, box-shadow 160ms ease; }
.block-reviews-carousel .reviews-prev { left: -18px; }
.block-reviews-carousel .reviews-next { right: -18px; }
.block-reviews-carousel .reviews-prev:hover, .block-reviews-carousel .reviews-next:hover { transform: translateY(-50%) scale(1.05); box-shadow: 0 12px 26px rgba(15, 23, 42, .16); }
.block-reviews-carousel .reviews-prev:disabled, .block-reviews-carousel .reviews-next:disabled { cursor: not-allowed; opacity: .35; }
.block-reviews-carousel .reviews-dots { display: flex; justify-content: center; gap: .45rem; margin-top: 1rem; }
/* F14 — carousel arrows are 36px; pad out toward the 44px target without
   resizing the painted control. */
.block-reviews-carousel .reviews-prev,
.block-reviews-carousel .reviews-next { position: relative; }
.block-reviews-carousel .reviews-prev::after,
.block-reviews-carousel .reviews-next::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); min-width: 44px; min-height: 44px; width: 100%; height: 100%; }
.block-reviews-carousel .reviews-dots .dot { position: relative; width: 10px; height: 10px; min-width: 10px; min-height: 10px; padding: 0; border: 1px solid var(--review-control, var(--color-primary, #2563eb)); border-radius: 9999px; background: transparent; transition: background 160ms ease, transform 160ms ease; }
.block-reviews-carousel .reviews-dots .dot::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); min-width: 44px; min-height: 44px; width: 100%; height: 100%; }
.block-reviews-carousel .reviews-dots .dot::before { content: none; }
.block-reviews-carousel .reviews-dots .dot.active { background: var(--review-control, var(--color-primary, #2563eb)); transform: scale(1.15); }
/* 1.4 — WCAG 2.2.2 pause/play toggle. 44x44 target, sits in the reserved bottom
   control band (frame padding-bottom) so it never overlaps a testimonial card. */
.block-reviews-carousel .reviews-pause { position: absolute; left: 0; bottom: .25rem; z-index: 3; display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; padding: .35rem .8rem; border: 1px solid var(--review-border, var(--color-border, #e5e7eb)); border-radius: 9999px; background: var(--review-card-bg, #fff); color: var(--review-control, var(--color-primary, #2563eb)); font-size: .8rem; font-weight: 700; line-height: 1; cursor: pointer; box-shadow: 0 8px 20px rgba(15, 23, 42, .12); transition: box-shadow 160ms ease, transform 160ms ease; }
.block-reviews-carousel .reviews-pause:hover { transform: scale(1.03); box-shadow: 0 12px 26px rgba(15, 23, 42, .16); }
@keyframes reviewsFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@media (max-width: 900px) { .block-reviews-carousel { --reviews-per-view: 2 !important; --review-card-width: calc((100% - 1rem) / 2) !important; } }
@media (max-width: 640px) { .block-reviews-carousel { --reviews-per-view: 1 !important; --review-card-width: 100% !important; } .block-reviews-carousel .reviews-fade-page, .block-reviews-carousel .reviews-static-grid, .reviews-layout-story .review-story-card { grid-template-columns: 1fr; } .reviews-layout-list .review-card { grid-template-columns: 1fr; } .reviews-layout-list .review-list-copy { border-left: 0; border-top: 1px solid var(--review-border, var(--color-border, #e5e7eb)); } .block-reviews-carousel .reviews-prev { left: .5rem; } .block-reviews-carousel .reviews-next { right: .5rem; } }
@media (prefers-reduced-motion: reduce) { .block-reviews-carousel .reviews-track, .block-reviews-carousel .reviews-prev, .block-reviews-carousel .reviews-next, .block-reviews-carousel .reviews-dots .dot, .block-reviews-carousel .reviews-fade-page { animation: none; transition: none; will-change: auto; } }
@media (prefers-reduced-motion: reduce) { .block-reviews-carousel .reviews-prev:hover, .block-reviews-carousel .reviews-next:hover { transform: translateY(-50%); box-shadow: 0 8px 20px rgba(15, 23, 42, .12); } }
@media (prefers-reduced-motion: reduce) { .block-reviews-carousel .reviews-dots .dot.active { transform: none; } }

/* Language switcher */
.block-language-switcher { position: relative; display: inline-block; }
.lang-button { background: none; border: 1px solid var(--color-border, #e5e7eb); border-radius: 0.25rem; padding: 0.375rem 0.75rem; cursor: pointer; display: flex; align-items: center; gap: 0.375rem; font-size: 0.875rem; }
.lang-dropdown { position: absolute; top: 100%; right: 0; background: #fff; border: 1px solid var(--color-border, #e5e7eb); border-radius: 0.375rem; box-shadow: 0 4px 12px rgba(0,0,0,0.1); display: none; min-width: 120px; z-index: 100; }
.lang-dropdown.open { display: block; }
.lang-dropdown a { display: block; padding: 0.5rem 1rem; text-decoration: none; color: inherit; font-size: 0.875rem; }
.lang-dropdown a:hover { background: var(--color-background, #f9fafb); }


/* Scroll animations (added by effects.js) */
[data-animate] { opacity: 0; }
[data-animate].in-view { animation: var(--anim, fadeIn) var(--anim-duration, 0.6s) var(--anim-easing, ease-out) both; }
/* Spatial magnitude driven by the per-element --anim-intensity custom property
   (0-1, default 0.5). Kept in lockstep with generateAnimationCss() so both
   stylesheets stay deterministic; at 0.5 they resolve to the historical fixed
   magnitudes. G28. */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes slideUp { from { opacity: 0; transform: translateY(calc(var(--anim-intensity, 0.5) * 60px)); } to { opacity: 1; transform: translateY(0); } }
@keyframes slideDown { from { opacity: 0; transform: translateY(calc(var(--anim-intensity, 0.5) * -60px)); } to { opacity: 1; transform: translateY(0); } }
@keyframes slideLeft { from { opacity: 0; transform: translateX(calc(var(--anim-intensity, 0.5) * 60px)); } to { opacity: 1; transform: translateX(0); } }
@keyframes slideRight { from { opacity: 0; transform: translateX(calc(var(--anim-intensity, 0.5) * -60px)); } to { opacity: 1; transform: translateX(0); } }
@keyframes zoomIn { from { opacity: 0; transform: scale(calc(1 - var(--anim-intensity, 0.5) * 0.4)); } to { opacity: 1; transform: scale(1); } }
@keyframes flipIn { from { opacity: 0; transform: perspective(400px) rotateY(calc(var(--anim-intensity, 0.5) * 180deg)); } to { opacity: 1; transform: perspective(400px) rotateY(0); } }
@keyframes rotateIn { from { opacity: 0; transform: rotate(calc(var(--anim-intensity, 0.5) * -360deg)); } to { opacity: 1; transform: rotate(0); } }
@media (prefers-reduced-motion: reduce) { [data-animate] { opacity: 1 !important; animation: none !important; } }

/* Hover effects — shared by block.effects.hoverEffect and block.styles.hoverAnimation */
:where([data-hover], [data-hover-animation]) { transition: transform 320ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 320ms cubic-bezier(0.22, 1, 0.36, 1), outline-color 220ms ease-out, outline-offset 220ms ease-out, filter 220ms ease-out; transform-origin: center center; backface-visibility: hidden; will-change: transform; }
/* :hover states scoped to real hover devices — touch devices never trigger a
   sticky tap-then-stuck hover (§9 bullet 4; mirrors the button system). The
   base transition above and the reduced-motion resets below stay unscoped. */
@media (hover: hover) {
:where([data-hover="zoom"], [data-hover-animation="zoom"]):hover { transform: scale(1.05) !important; }
:where([data-hover="scale"], [data-hover-animation="scale"]):hover { transform: scale(1.08) !important; }
:where([data-hover="shadow-lift"], [data-hover-animation="shadow-lift"]):hover { box-shadow: 0 10px 25px rgba(0,0,0,0.15) !important; transform: translateY(-3px) !important; }
:where([data-hover="glow"], [data-hover-animation="glow"]):hover { box-shadow: 0 0 20px color-mix(in srgb, var(--theme-primary, var(--color-primary, #2563eb)) 40%, transparent) !important; }
:where([data-hover="border-reveal"], [data-hover-animation="border-reveal"]):hover { outline: 2px solid var(--theme-primary, var(--color-primary, #2563eb)) !important; outline-offset: 2px; }
:where([data-hover="overlay"], [data-hover-animation="overlay"]):hover { filter: brightness(0.94) !important; }
}
@media (prefers-reduced-motion: reduce) { :where([data-hover], [data-hover-animation]) { transition: none !important; will-change: auto; } }
@media (prefers-reduced-motion: reduce) { :where([data-hover], [data-hover-animation]):hover { transform: none !important; box-shadow: none !important; filter: none !important; } }

/* Lightbox (site-level; shared by gallery, media slider, single image) */
.lightbox { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.92); z-index: 10000; align-items: center; justify-content: center; --lb-fg: #fff; --lb-btn: rgba(255,255,255,0.15); }
.lightbox.lightbox-light { background: rgba(245,245,247,0.94); --lb-fg: #111827; --lb-btn: rgba(17,24,39,0.10); }
.lightbox.open { display: flex; }
.lightbox-figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 0.75rem; max-width: 92vw; max-height: 92vh; }
.lightbox img { max-width: 92vw; max-height: 82vh; object-fit: contain; transition: transform 0.15s ease; transform-origin: center; touch-action: none; }
.lightbox.zoomed img { cursor: grab; }
.lightbox-caption { color: var(--lb-fg); font-size: 0.95rem; line-height: 1.4; text-align: center; max-width: 80vw; opacity: 0.92; }
.lightbox-counter { position: absolute; top: 1rem; left: 1rem; color: var(--lb-fg); background: var(--lb-btn); border-radius: 999px; padding: 0.35rem 0.7rem; font-size: 0.85rem; font-weight: 700; line-height: 1; }
.lightbox-close { position: absolute; top: 1rem; right: 1rem; display: inline-flex; min-width: 44px; min-height: 44px; align-items: center; justify-content: center; background: none; border: none; color: var(--lb-fg); font-size: 2rem; line-height: 1; cursor: pointer; border-radius: 0.25rem; }
.lightbox-prev, .lightbox-next { position: absolute; top: 50%; transform: translateY(-50%); display: inline-flex; min-width: 44px; min-height: 44px; align-items: center; justify-content: center; background: var(--lb-btn); border: none; color: var(--lb-fg); font-size: 2rem; line-height: 1; padding: 0.5rem; cursor: pointer; border-radius: 0.25rem; }
.lightbox-close:focus-visible, .lightbox-prev:focus-visible, .lightbox-next:focus-visible { outline: 2px solid var(--lb-fg); outline-offset: 3px; }
.lightbox-prev { left: 1rem; }
.lightbox-next { right: 1rem; }
@media (prefers-reduced-motion: reduce) { .lightbox img { transition: none; } }
