/* ==========================================================================
   MBG Ridgeline, expanded visual system
   Molded By Grace Business Group LLC

   Loaded after mbg.css. Everything below is one system. The same four ideas
   repeat at every scale: a drawn gold contour, an incomplete arc, a hairline
   grid, and a single accent that is rationed. Nothing here is decorative for
   its own sake.
   ========================================================================== */

:root {
  /* Editorial display scale. Larger top end than the base scale so the
     display-to-body contrast reads as designed rather than as a template. */
  /* Display tops out at 56px. The earlier 80px cap looked impressive in
     isolation but pushed the hero CTAs below the fold and forced the headline
     onto four lines. */
  --mbg-display: clamp(2.25rem, 1.45rem + 2.6vw, 3.5rem);
  --mbg-display-sm: clamp(1.75rem, 1.3rem + 1.9vw, 2.625rem);

  /* One motion language. Every transition on the site uses one of these. */
  --mbg-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
  --mbg-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --mbg-dur-fast: 180ms;
  --mbg-dur: 340ms;
  --mbg-dur-slow: 620ms;

  --mbg-gutter: 24px;
  --mbg-content: 1160px;
}

/* --------------------------------------------------------------------------
   22. Motion system

   One reveal primitive, used everywhere. The hidden state is only applied
   when JavaScript has added .mbg-motion to <html>, so if the script fails
   or is blocked the page renders fully visible with no hidden content.
   Reduced motion is handled twice: the script skips observing entirely, and
   the media query below neutralises the transforms regardless.
   -------------------------------------------------------------------------- */

.mbg-motion .mbg-reveal {
  opacity: 0;
  transform: translate3d(0, 18px, 0);
  will-change: opacity, transform;
}

.mbg-motion .mbg-reveal.is-in {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  transition:
    opacity var(--mbg-dur-slow) var(--mbg-ease-out),
    transform var(--mbg-dur-slow) var(--mbg-ease-out);
  transition-delay: var(--mbg-delay, 0ms);
  will-change: auto;
}

/* Staggered children. The parent carries the group, each child its own step.
   Steps are capped at six so a long list never waits a noticeable time. */
.mbg-motion .mbg-stagger > * { opacity: 0; transform: translate3d(0, 16px, 0); }
.mbg-motion .mbg-stagger.is-in > * {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  transition:
    opacity var(--mbg-dur-slow) var(--mbg-ease-out),
    transform var(--mbg-dur-slow) var(--mbg-ease-out);
}
.mbg-motion .mbg-stagger.is-in > *:nth-child(1) { transition-delay: 0ms; }
.mbg-motion .mbg-stagger.is-in > *:nth-child(2) { transition-delay: 90ms; }
.mbg-motion .mbg-stagger.is-in > *:nth-child(3) { transition-delay: 180ms; }
.mbg-motion .mbg-stagger.is-in > *:nth-child(4) { transition-delay: 270ms; }
.mbg-motion .mbg-stagger.is-in > *:nth-child(5) { transition-delay: 360ms; }
.mbg-motion .mbg-stagger.is-in > *:nth-child(n + 6) { transition-delay: 450ms; }

/* A gold rule that draws itself in when its section arrives. */
.mbg-motion .mbg-rule > .elementor-widget-container::before,
.mbg-motion .mbg-rule::before,
.mbg-motion .mbg-ruled::before { width: 0; }
.mbg-motion .mbg-rule.is-in > .elementor-widget-container::before,
.mbg-motion .mbg-rule.is-in::before,
.mbg-motion .mbg-ruled.is-in::before {
  width: 40px;
  transition: width var(--mbg-dur-slow) var(--mbg-ease-out) 60ms;
}

/* The hero ridgeline draws once on entry. Staggered so the contours settle
   in sequence rather than arriving as one block. */
.mbg-ridge-path {
  stroke-dasharray: var(--len, 2400);
  stroke-dashoffset: var(--len, 2400);
}
.mbg-motion .mbg-ridge.is-in .mbg-ridge-path {
  animation: mbg-draw 2400ms var(--mbg-ease-out) forwards;
  animation-delay: var(--mbg-delay, 0ms);
}
/* Without the script, or with motion reduced, the contours are simply drawn. */
html:not(.mbg-motion) .mbg-ridge-path { stroke-dashoffset: 0; }

@keyframes mbg-draw { to { stroke-dashoffset: 0; } }

/* The incomplete arc behind the ridge. Echoes the arc in the MBG mark without
   reproducing it. */
.mbg-arc-path { stroke-dasharray: var(--len, 1400); stroke-dashoffset: var(--len, 1400); }
.mbg-motion .mbg-ridge.is-in .mbg-arc-path {
  animation: mbg-draw 2800ms var(--mbg-ease-out) 200ms forwards;
}
html:not(.mbg-motion) .mbg-arc-path { stroke-dashoffset: 0; }

/* Slow drift on decorative background layers only. Never on content. */
.mbg-motion .mbg-drift { animation: mbg-drift 34s ease-in-out infinite alternate; }
@keyframes mbg-drift {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-16px, -10px, 0); }
}

/* An arrow that moves on hover. Used on every secondary link on the site so
   the gesture is learned once. */
.mbg-arrow {
  display: inline-block;
  margin-left: 0.45em;
  transition: transform var(--mbg-dur) var(--mbg-ease);
}
a:hover .mbg-arrow,
a:focus-visible .mbg-arrow,
.elementor-button:hover .mbg-arrow { transform: translateX(5px); }

/* Everything animated is switched off together, in one place. */
@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-reveal,
  .mbg-motion .mbg-stagger > * {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .mbg-ridge-path,
  .mbg-arc-path { stroke-dashoffset: 0 !important; animation: none !important; }
  .mbg-motion .mbg-drift { animation: none !important; }
  .mbg-motion .mbg-rule > .elementor-widget-container::before,
  .mbg-motion .mbg-rule::before,
  .mbg-motion .mbg-ruled::before { width: 40px !important; transition: none !important; }
  .mbg-arrow { transition: none !important; }
}

/* --------------------------------------------------------------------------
   23. The ridgeline motif

   A layered contour drawing used in the hero, in section dividers, and as a
   quiet background texture. It is always decorative, always aria-hidden, and
   never carries information.
   -------------------------------------------------------------------------- */

.mbg-ridge {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}
.mbg-ridge svg { display: block; width: 100%; height: 100%; }
.mbg-ridge-path,
.mbg-arc-path { fill: none; vector-effect: non-scaling-stroke; }

/* On light grounds the contours sit just above the background so they read as
   texture rather than as content. */
.mbg-ridge-light .mbg-ridge-path { stroke: var(--mbg-accent); stroke-width: 1.25; }
/* The leading contour carries the drawing; the echoes fall away behind it. */
.mbg-ridge-light .mbg-ridge-path:nth-of-type(1) { opacity: 0.78; stroke-width: 1.6; }
.mbg-ridge-light .mbg-ridge-path:nth-of-type(2) { opacity: 0.34; }
.mbg-ridge-light .mbg-ridge-path:nth-of-type(3) { opacity: 0.22; }
.mbg-ridge-light .mbg-ridge-path:nth-of-type(4) { opacity: 0.14; }
.mbg-ridge-light .mbg-ridge-path:nth-of-type(5) { opacity: 0.09; }
.mbg-ridge-light .mbg-arc-path { stroke: var(--mbg-accent); stroke-width: 1; opacity: 0.42; }

/* On the navy bands the contours sit behind body copy, so they run much
   quieter than in the hero. Anchored to the bottom of the band by
   preserveAspectRatio, they read as a horizon rather than as diagonal noise. */
.mbg-ridge-dark .mbg-ridge-path { stroke: var(--mbg-accent-light); stroke-width: 1.25; }
.mbg-ridge-dark .mbg-ridge-path:nth-of-type(1) { opacity: 0.3; }
.mbg-ridge-dark .mbg-ridge-path:nth-of-type(2) { opacity: 0.2; }
.mbg-ridge-dark .mbg-ridge-path:nth-of-type(3) { opacity: 0.13; }
.mbg-ridge-dark .mbg-ridge-path:nth-of-type(4) { opacity: 0.09; }
.mbg-ridge-dark .mbg-ridge-path:nth-of-type(5) { opacity: 0.06; }
.mbg-ridge-dark .mbg-arc-path { stroke: var(--mbg-accent-light); stroke-width: 1; opacity: 0.16; }

/* A hairline grid, one of the four repeating ideas. Sits under the ridge in
   the hero and under the manifesto panel. */
/* The hairline grid is aligned to the 1160px content column, not to the
   viewport. Spanning the full width put the lines at arbitrary positions that
   cut across the headline instead of reading as structure. */
.mbg-grid-lines {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: min(100%, var(--mbg-content));
  pointer-events: none;
  background-image:
    linear-gradient(to right, rgba(16, 29, 45, 0.045) 1px, transparent 1px);
  background-size: calc(100% / 4) 100%;
}
.mbg-band-dark .mbg-grid-lines {
  background-image:
    linear-gradient(to right, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
}
/* The grid is texture on navy, where it reads as structure. On white it
   competed with the headline, so it is dark-band only. */
.mbg-grid-lines { display: none; }
.mbg-band-dark .mbg-grid-lines { display: block; }
@media (max-width: 767px) { .mbg-band-dark .mbg-grid-lines { display: none; } }

/* Fine grain. One tiny inline SVG, no image request, no library. Only on the
   navy bands, where flat colour would otherwise look plastic. */
.mbg-grain::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.5;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.055'/%3E%3C/svg%3E");
}

/* Section transition. A drawn contour that separates one band from the next
   in place of a plain border. */
.mbg-divider {
  position: relative;
  height: 96px;
  overflow: hidden;
  pointer-events: none;
}
.mbg-divider svg { display: block; width: 100%; height: 100%; }
@media (max-width: 767px) { .mbg-divider { height: 60px; } }

/* --------------------------------------------------------------------------
   24. Editorial typography
   -------------------------------------------------------------------------- */

.mbg-display {
  font-family: var(--mbg-font-heading);
  font-size: var(--mbg-display);
  font-weight: 600;
  line-height: 1.02;
  letter-spacing: -0.018em;
  margin: 0;
}
.mbg-display-sm {
  font-family: var(--mbg-font-heading);
  font-size: var(--mbg-display-sm);
  font-weight: 600;
  line-height: 1.06;
  letter-spacing: -0.014em;
  margin: 0;
}

/* Emphasis inside a headline stays in the same family, as italic. Never a
   second typeface. */
.mbg-em { font-style: italic; }

/* The one place gold is allowed to touch a letterform: a single word in a
   display heading, at display size, where it clears contrast comfortably. */
.mbg-gold { color: var(--mbg-accent-deep); }
.mbg-band-dark .mbg-gold { color: var(--mbg-accent-light); }

.mbg-lede-lg {
  font-size: clamp(1.1875rem, 1.06rem + 0.5vw, 1.375rem);
  line-height: 1.5;
  color: var(--mbg-ink-muted);
  max-width: 40ch;
}
.mbg-band-dark .mbg-lede-lg { color: #C8CFD9; }

/* Editorial page introduction, used at the top of every page except home. */
.mbg-page-head {
  position: relative;
  overflow: clip;
  padding-top: clamp(64px, 4vw + 40px, 116px);
  padding-bottom: clamp(48px, 3vw + 30px, 88px);
  border-bottom: 1px solid var(--mbg-line);
}
.mbg-page-head .mbg-page-head-inner { position: relative; z-index: 1; }
.mbg-page-head h1 { margin: 12px 0 20px; }

/* Pull quote and belief statement. Used at most once per page. */
.mbg-pullquote {
  position: relative;
  margin: 0;
  padding-left: 28px;
  border-left: 2px solid var(--mbg-accent);
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.375rem, 1.1rem + 1.1vw, 1.875rem);
  font-weight: 600;
  line-height: 1.28;
  letter-spacing: -0.01em;
  color: var(--mbg-ink);
}
.mbg-band-dark .mbg-pullquote { border-left-color: var(--mbg-accent-light); color: #FFFFFF; }
.mbg-pullquote cite {
  display: block;
  margin-top: 16px;
  font-family: var(--mbg-font-body);
  font-size: 0.875rem;
  font-style: normal;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--mbg-ink-muted);
}
.mbg-band-dark .mbg-pullquote cite { color: var(--mbg-accent-light); }

/* --------------------------------------------------------------------------
   25. Layout primitives
   -------------------------------------------------------------------------- */

.mbg-wrap {
  width: 100%;
  max-width: var(--mbg-content);
  margin-inline: auto;
  padding-inline: var(--mbg-gutter);
}

.mbg-section {
  position: relative;
  padding-top: var(--mbg-space-xl);
  padding-bottom: var(--mbg-space-xl);
}
.mbg-section-tight {
  padding-top: var(--mbg-space-lg);
  padding-bottom: var(--mbg-space-lg);
}

/* The editorial split: a sticky label column beside a reading column. This is
   the layout that makes the long pages feel composed rather than stacked. */
.mbg-split {
  display: grid;
  grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
  gap: clamp(32px, 4vw, 80px);
  align-items: start;
}
/* Sticky needs a containing block taller than itself. A grid item sized to its
   own content is its own constraint rect, so the label pinned for a single
   frame and then released. The column now stretches and its child does the
   sticking, which gives it the whole section to travel through. */
.mbg-split-label { position: static; align-self: stretch; }
.mbg-split-label > * { position: sticky; top: 112px; display: block; }
.mbg-split-body > * + * { margin-top: 22px; }
.mbg-split-body p { max-width: 62ch; }

@media (max-width: 900px) {
  .mbg-split { grid-template-columns: 1fr; gap: 20px; }
  /* Sticky must disengage before the label and the body can collide. */
  .mbg-split-label > * { position: static; top: auto; }
}

/* Plain column layouts for shorter passages. */
.mbg-cols-2 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(24px, 3vw, 56px);
}
.mbg-cols-3 {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(20px, 2.4vw, 32px);
}
.mbg-cols-4 {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(20px, 2.4vw, 32px);
}
@media (max-width: 1024px) {
  .mbg-cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  .mbg-cols-2, .mbg-cols-3, .mbg-cols-4 { grid-template-columns: 1fr; }
}

/* Section heading block, used at the top of most sections. */
.mbg-section-head { max-width: 52ch; margin-bottom: clamp(36px, 4vw, 64px); }
.mbg-section-head .mbg-eyebrow { display: block; margin-bottom: 14px; }
.mbg-section-head h2 { margin: 0 0 18px; }
.mbg-section-head p { color: var(--mbg-ink-muted); max-width: 60ch; margin-bottom: 0; }
.mbg-band-dark .mbg-section-head p { color: #C8CFD9; }

/* A gold rule available on any element rather than only on Elementor widgets. */
.mbg-ruled::before {
  content: "";
  display: block;
  width: 40px;
  height: 2px;
  background: var(--mbg-accent);
  margin-bottom: 20px;
}
.mbg-band-dark .mbg-ruled::before { background: var(--mbg-accent-light); }

/* --------------------------------------------------------------------------
   26. Homepage hero

   Text-led. The mark is present only as a watermark behind the contours, at
   an opacity where it registers as texture and never competes with the H1.
   -------------------------------------------------------------------------- */

.mbg-hero-v2 {
  position: relative;
  overflow: clip;
  background: var(--mbg-bg);
  border-bottom: 1px solid var(--mbg-line);
  padding-top: clamp(56px, 5vw + 24px, 104px);
  padding-bottom: clamp(64px, 5vw + 28px, 112px);
}

.mbg-hero-v2 .mbg-hero-inner {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.72fr);
  gap: clamp(32px, 4vw, 72px);
  align-items: center;
}

/* Width is set in rem, not ch. A ch here is measured against the body font, so
   a ch-based cap produced a 290px column holding a 56px headline. */
.mbg-hero-copy-v2 { max-width: 37rem; }
.mbg-hero-copy-v2 .mbg-eyebrow { display: block; margin-bottom: 20px; }
.mbg-hero-copy-v2 h1 {
  font-size: var(--mbg-display);
  line-height: 1.02;
  letter-spacing: -0.02em;
  margin: 0 0 26px;
}
.mbg-hero-copy-v2 .mbg-hero-lede {
  font-size: clamp(1.0625rem, 1rem + 0.35vw, 1.25rem);
  line-height: 1.6;
  color: var(--mbg-ink-muted);
  max-width: 46ch;
  margin: 0 0 32px;
}

/* The visual half. A layered composition: watermark, contours, arc, grid. */
.mbg-hero-visual {
  position: relative;
  aspect-ratio: 5 / 4;
  min-height: 300px;
}
@media (max-width: 1024px) { .mbg-hero-visual { aspect-ratio: 16 / 9; min-height: 220px; } }

/* The emblem is a small signature in the corner, not a centred watermark.
   Centred, it sat directly behind the drawn ridgeline and the two mountain
   drawings turned into mud. */
.mbg-hero-watermark {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 58px;
  opacity: 0.42;
  z-index: 3;
}
.mbg-hero-watermark img { display: block; width: 100%; height: auto; }
@media (max-width: 767px) {
  .mbg-hero-watermark { width: 56px; }
}

/* Scroll cue. A drawn line rather than a bouncing chevron. */
.mbg-scrollcue {
  position: relative;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  margin-top: clamp(36px, 4vw, 60px);
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mbg-ink-muted);
  text-decoration: none;
  min-height: 44px;
}
.mbg-scrollcue::after {
  content: "";
  width: 56px;
  height: 1px;
  background: var(--mbg-accent);
  transform-origin: left center;
}
.mbg-motion .mbg-scrollcue::after { animation: mbg-cue 3.2s var(--mbg-ease) 1.4s infinite; }
@keyframes mbg-cue {
  0%, 62%, 100% { transform: scaleX(1); opacity: 0.85; }
  30%           { transform: scaleX(1.5); opacity: 1; }
}
.mbg-scrollcue:hover { color: var(--mbg-ink); }
.mbg-scrollcue:hover::after { background: var(--mbg-ink); }
@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-scrollcue::after { animation: none !important; }
}

@media (max-width: 1024px) {
  .mbg-hero-v2 .mbg-hero-inner { grid-template-columns: 1fr; gap: 32px; }
  .mbg-hero-copy-v2 { max-width: 44ch; }
}
@media (max-width: 767px) {
  /* aspect-ratio combined with min-height sets a minimum WIDTH too, which on a
     320px phone forced the whole hero grid to 360px and pushed the copy off
     screen. Give the visual an explicit height instead and let it shrink. */
  .mbg-hero-visual {
    order: 2;
    aspect-ratio: auto;
    min-height: 0;
    height: 190px;
    width: 100%;
  }
  .mbg-hero-copy-v2 { order: 1; }
}

/* A grid item will not shrink below its content unless told to. */
.mbg-hero-visual, .mbg-hero-copy-v2 { min-width: 0; }

/* Two side-by-side buttons do not fit a small phone. Stack them rather than
   letting the second one hang off the edge. */
@media (max-width: 420px) {
  .mbg-cta-row { flex-direction: column; align-items: stretch; }
  .mbg-cta-row .mbg-btn,
  .mbg-cta-row .elementor-button { width: 100%; }
}

/* --------------------------------------------------------------------------
   27. Content bands
   -------------------------------------------------------------------------- */

.mbg-band { position: relative; overflow: clip; }
.mbg-band > .mbg-wrap { position: relative; z-index: 1; }
.mbg-band-dark.mbg-band { isolation: isolate; }

/* Copy sits left and the motif sits right, on every band, exactly as in the
   hero. Masking the drawing out of the reading column stops a contour running
   through the letterforms, which no opacity value fixes properly. The hero's
   own ridge is scoped to its visual column and is not affected. */
.mbg-band .mbg-ridge,
.mbg-page-head .mbg-ridge,
.mbg-manifesto .mbg-ridge,
.mbg-cta-band .mbg-ridge {
  -webkit-mask-image: linear-gradient(to right, transparent 54%, #000 84%);
  mask-image: linear-gradient(to right, transparent 54%, #000 84%);
}
@media (max-width: 900px) {
  .mbg-band .mbg-ridge,
  .mbg-page-head .mbg-ridge,
  .mbg-manifesto .mbg-ridge,
  .mbg-cta-band .mbg-ridge {
    -webkit-mask-image: linear-gradient(to bottom, transparent 58%, #000 100%);
    mask-image: linear-gradient(to bottom, transparent 58%, #000 100%);
  }
}

/* In the hero the drawing is the feature. Everywhere else it is background and
   runs much quieter. */
.mbg-page-head .mbg-ridge-light .mbg-ridge-path,
.mbg-band .mbg-ridge-light .mbg-ridge-path { opacity: 0.2; }
.mbg-page-head .mbg-ridge-light .mbg-ridge-path:nth-of-type(1),
.mbg-band .mbg-ridge-light .mbg-ridge-path:nth-of-type(1) { opacity: 0.34; stroke-width: 1.25; }
.mbg-page-head .mbg-ridge-light .mbg-arc-path,
.mbg-band .mbg-ridge-light .mbg-arc-path { opacity: 0.2; }

/* --------------------------------------------------------------------------
   28. Manifesto panel

   The one place on the site where type is allowed to run large over a navy
   ground with nothing else competing.
   -------------------------------------------------------------------------- */

.mbg-manifesto {
  position: relative;
  overflow: clip;
  padding-top: clamp(72px, 6vw, 128px);
  padding-bottom: clamp(72px, 6vw, 128px);
}
/* Width in rem, not ch: a ch is measured against the body font, so 24ch gave a
   200px column holding 44px display type, three words to a line. */
.mbg-manifesto-inner { position: relative; z-index: 2; max-width: 46rem; }
.mbg-manifesto p {
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.5rem, 1.05rem + 1.9vw, 2.75rem);
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.012em;
  color: #FFFFFF;
  margin: 0;
}
.mbg-manifesto .mbg-manifesto-foot {
  font-family: var(--mbg-font-body);
  font-size: 1.0625rem;
  font-weight: 400;
  line-height: 1.6;
  letter-spacing: 0;
  color: #C8CFD9;
  margin-top: 28px;
  max-width: 52ch;
}

/* --------------------------------------------------------------------------
   29. Brand cards, refined

   Layered hover: the border warms, the card lifts one pixel, the gold top
   rule brightens, and the arrow travels. Four small changes, one gesture.
   -------------------------------------------------------------------------- */

.mbg-brandcard {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-top: 3px solid var(--mbg-accent);
  border-radius: var(--mbg-radius);
  overflow: hidden;
  transition:
    border-color var(--mbg-dur) var(--mbg-ease),
    transform var(--mbg-dur) var(--mbg-ease);
}
.mbg-brandcard:hover,
.mbg-brandcard:focus-within {
  border-color: #C4C9D1;
  border-top-color: var(--mbg-accent-light);
  transform: translateY(-2px);
}
@media (prefers-reduced-motion: reduce) {
  .mbg-brandcard:hover, .mbg-brandcard:focus-within { transform: none; }
}

.mbg-brandcard .mbg-logo-slot { position: relative; overflow: hidden; }
/* A contour wash inside the logo slot ties the card to the hero motif. */
.mbg-brandcard .mbg-logo-slot::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(120% 90% at 50% 130%, rgba(166, 123, 56, 0.13) 0%, rgba(166, 123, 56, 0) 62%);
  pointer-events: none;
}
.mbg-brandcard .mbg-card-body {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  padding: var(--mbg-space-md);
}
.mbg-brandcard .mbg-card-body > .mbg-card-foot { margin-top: auto; padding-top: 20px; }

/* Category label. All caps, letterspaced, rationed to card headers. */
.mbg-cat {
  display: block;
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: var(--mbg-accent-deep);
  margin: 0 0 10px;
}
.mbg-band-dark .mbg-cat { color: var(--mbg-accent-light); }

/* Status, stated in words. Never colour alone. */
.mbg-status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--mbg-ink-muted);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius-sm);
  padding: 6px 12px;
  background: var(--mbg-surface);
}
.mbg-status::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--mbg-accent);
  flex: 0 0 auto;
}
.mbg-band-dark .mbg-status {
  color: #C8CFD9;
  border-color: rgba(255, 255, 255, 0.22);
  background: rgba(255, 255, 255, 0.05);
}
.mbg-band-dark .mbg-status::before { background: var(--mbg-accent-light); }

/* --------------------------------------------------------------------------
   30. Brand profiles, Our Brands page

   Long editorial sections rather than three separate routes. Alternating
   sides give the page its rhythm.
   -------------------------------------------------------------------------- */

.mbg-profile {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 0.82fr) minmax(0, 1fr);
  gap: clamp(32px, 4.5vw, 80px);
  align-items: start;
}
.mbg-profile-alt .mbg-profile-visual { order: 2; }
/* Same reason as the split label: the column stretches, the inner block
   sticks. */
.mbg-profile-visual { position: static; align-self: stretch; }
.mbg-profile-sticky { position: sticky; top: 112px; }

.mbg-profile-mark {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 220px;
  padding: 32px;
  background: var(--mbg-surface);
  border: 1px solid var(--mbg-line);
  border-top: 3px solid var(--mbg-accent);
  border-radius: var(--mbg-radius);
  overflow: hidden;
  text-align: center;
}
.mbg-profile-mark img { max-height: 110px; width: auto; }
.mbg-profile-mark .mbg-logo-slot-name {
  position: relative;
  z-index: 1;
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.375rem, 1.1rem + 1vw, 1.875rem);
  font-weight: 600;
  line-height: 1.2;
  color: var(--mbg-ink);
  margin: 0;
}

.mbg-profile-body > * + * { margin-top: 20px; }
.mbg-profile-body p { max-width: 62ch; color: var(--mbg-ink-muted); }
.mbg-profile-body h2 { margin: 0; }
.mbg-profile-body h3 {
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--mbg-ink);
  margin: 0;
}

@media (max-width: 900px) {
  .mbg-profile { grid-template-columns: 1fr; gap: 26px; }
  .mbg-profile-alt .mbg-profile-visual { order: 0; }
  .mbg-profile-sticky { position: static; top: auto; }
  .mbg-profile-mark { min-height: 150px; padding: 24px; }
}

/* --------------------------------------------------------------------------
   31. Project cards, Our Work

   Deliberately a different object from a brand card. No gold top rule, a
   written ownership line, and a service tag row. Conflating the two is the
   most damaging error this site could make, so they must not look alike.
   -------------------------------------------------------------------------- */

.mbg-projectcard {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  overflow: hidden;
  transition: border-color var(--mbg-dur) var(--mbg-ease);
}
.mbg-projectcard:hover, .mbg-projectcard:focus-within { border-color: #B9BFC8; }
.mbg-projectcard .mbg-card-body { padding: var(--mbg-space-md); flex: 1 1 auto; }

.mbg-projectcard .mbg-ownership {
  display: block;
  padding-bottom: 12px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--mbg-line);
}

.mbg-tags { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0 0; padding: 0; list-style: none; }
.mbg-tags li {
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--mbg-ink-muted);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius-sm);
  padding: 5px 10px;
  background: var(--mbg-surface);
}
.mbg-band-dark .mbg-tags li {
  color: #C8CFD9;
  border-color: rgba(255, 255, 255, 0.22);
  background: rgba(255, 255, 255, 0.05);
}

/* An empty slot that is honest about being empty rather than being filled
   with an invented project. */
.mbg-slot-open {
  display: flex;
  flex-direction: column;
  justify-content: center;
  height: 100%;
  min-height: 180px;
  padding: var(--mbg-space-md);
  border: 1px dashed var(--mbg-line);
  border-radius: var(--mbg-radius);
  background: transparent;
}
.mbg-slot-open p { color: var(--mbg-ink-muted); margin: 0; max-width: 34ch; }

/* --------------------------------------------------------------------------
   32. Numbered structure list

   Used where the reference sites would put a statistics band. It carries the
   same visual rhythm without asserting a single number MBG cannot support.
   -------------------------------------------------------------------------- */

.mbg-numbered { list-style: none; margin: 0; padding: 0; counter-reset: mbg-n; }
.mbg-numbered > li {
  position: relative;
  padding: 26px 0 26px 62px;
  border-top: 1px solid var(--mbg-line);
}
.mbg-numbered > li:last-child { border-bottom: 1px solid var(--mbg-line); }
.mbg-numbered > li::before {
  content: counter(mbg-n, decimal-leading-zero);
  counter-increment: mbg-n;
  position: absolute;
  left: 0;
  top: 26px;
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  color: var(--mbg-accent-deep);
}
.mbg-numbered h3 { margin: 0 0 8px; font-size: 1.1875rem; }
.mbg-numbered p { margin: 0; color: var(--mbg-ink-muted); max-width: 62ch; }
.mbg-band-dark .mbg-numbered > li { border-top-color: rgba(255, 255, 255, 0.16); }
.mbg-band-dark .mbg-numbered > li:last-child { border-bottom-color: rgba(255, 255, 255, 0.16); }
.mbg-band-dark .mbg-numbered > li::before { color: var(--mbg-accent-light); }
.mbg-band-dark .mbg-numbered p { color: #C8CFD9; }

@media (max-width: 480px) {
  .mbg-numbered > li { padding-left: 0; padding-top: 44px; }
  .mbg-numbered > li::before { top: 20px; }
}

/* --------------------------------------------------------------------------
   33. Header refinement on scroll

   The header never changes height, so nothing below it moves. Only the
   background, the hairline and the mark's scale respond to scroll. That
   keeps cumulative layout shift at zero.
   -------------------------------------------------------------------------- */

.mbg-header {
  transition:
    background-color var(--mbg-dur) var(--mbg-ease),
    border-color var(--mbg-dur) var(--mbg-ease),
    box-shadow var(--mbg-dur) var(--mbg-ease);
  -webkit-backdrop-filter: saturate(1.4) blur(8px);
  backdrop-filter: saturate(1.4) blur(8px);
  background: rgba(255, 255, 255, 0.86);
}
.mbg-header.is-scrolled {
  background: rgba(255, 255, 255, 0.97);
  border-bottom-color: #CDD3DB;
  box-shadow: 0 1px 14px rgba(16, 29, 45, 0.07);
}
.mbg-header .mbg-logo-mark img {
  transition: transform var(--mbg-dur) var(--mbg-ease);
  transform-origin: left center;
}
.mbg-header.is-scrolled .mbg-logo-mark img { transform: scale(0.9); }

/* A gold read-progress hairline along the bottom edge of the header.
   Decorative, never the only indication of anything. */
.mbg-header::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -1px;
  height: 2px;
  width: var(--mbg-progress, 0%);
  background: var(--mbg-accent);
  transition: width 120ms linear;
  pointer-events: none;
}

/* Navigation microinteraction: the underline grows from the left.
   The item also carries a 44px target height, which the default 30px did not
   meet. The header is taller than this already, so nothing moves. */
.mbg-header .elementor-nav-menu--main .elementor-item {
  position: relative;
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}
.mbg-header .elementor-nav-menu--main .elementor-item::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 8px;
  height: 2px;
  background: var(--mbg-accent);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform var(--mbg-dur) var(--mbg-ease);
}
.mbg-header .elementor-nav-menu--main .elementor-item:hover::after,
.mbg-header .elementor-nav-menu--main .elementor-item.elementor-item-active::after {
  transform: scaleX(1);
}
/* The old inset shadow underline is replaced by the animated rule above. */
.mbg-header .elementor-nav-menu--main .elementor-item.elementor-item-active { box-shadow: none; }
/* The dropdown panel has its own ground, so the rule must not bleed into it. */
.mbg-header .elementor-nav-menu--dropdown .elementor-item::after { display: none; }

@media (prefers-reduced-motion: reduce) {
  .mbg-header,
  .mbg-header .mbg-logo-mark img,
  .mbg-header .elementor-nav-menu--main .elementor-item::after,
  .mbg-header::after { transition: none !important; }
}

/* --------------------------------------------------------------------------
   34. Footer composition
   -------------------------------------------------------------------------- */

.mbg-footer { position: relative; overflow: clip; }
.mbg-footer > * { position: relative; z-index: 1; }

/* The footer's own top padding is set on the theme-builder template so the
   contour gets a clear band above the columns. */

/* Standalone navigation and brand links carry a comfortable target height.
   Inline links inside a sentence are deliberately left alone, since resizing
   them would break the line box they sit in. */
.mbg-footer .elementor-nav-menu--main .elementor-item {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}
.mbg-header .mbg-logo-lockup,
.mbg-footer-lockup { min-height: 44px; }

.mbg-footer-lockup { display: flex; align-items: center; gap: 14px; text-decoration: none; }
.mbg-footer-lockup img { width: 54px; height: auto; display: block; flex: 0 0 auto; }
.mbg-footer-lockup .mbg-wordmark-name { color: #FFFFFF; font-size: 1.375rem; }
.mbg-footer-lockup .mbg-wordmark-sub { color: var(--mbg-accent-light); }
.mbg-footer-lockup:hover .mbg-wordmark-name { color: var(--mbg-accent-light); }

/* A drawn contour along the top edge of the footer, so the footer belongs to
   the same drawing as the hero. */
/* A contour along the footer's top edge, faded out before it reaches the
   columns so it never runs behind the links. */
.mbg-footer-ridge {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 92px;
  pointer-events: none;
  z-index: 0;
  -webkit-mask-image: linear-gradient(to bottom, #000 0%, transparent 60%);
  mask-image: linear-gradient(to bottom, #000 0%, transparent 60%);
}
.mbg-footer-ridge svg { display: block; width: 100%; height: 100%; }

/* --------------------------------------------------------------------------
   35. Contact band and closing CTA
   -------------------------------------------------------------------------- */

.mbg-cta-band {
  position: relative;
  overflow: clip;
  padding-top: clamp(64px, 5vw, 104px);
  padding-bottom: clamp(64px, 5vw, 104px);
}
.mbg-cta-band .mbg-cta-inner { position: relative; z-index: 2; max-width: 46ch; }
.mbg-cta-band h2 { margin: 0 0 18px; }
.mbg-cta-band p { color: #C8CFD9; margin: 0 0 30px; max-width: 52ch; }

/* --------------------------------------------------------------------------
   36. Utilities and safety
   -------------------------------------------------------------------------- */

/* Elementor ships `.elementor hr { margin: 0 }`, which outranks a bare class.
   Matching element plus class ties on specificity, and this sheet loads last. */
hr.mbg-hr {
  border: 0;
  border-top: 1px solid var(--mbg-line);
  margin: clamp(40px, 5vw, 72px) 0;
}
.mbg-band-dark .mbg-hr { border-top-color: rgba(255, 255, 255, 0.16); }

.mbg-stack-sm > * + * { margin-top: 14px; }
.mbg-stack > * + * { margin-top: 22px; }
.mbg-stack-lg > * + * { margin-top: 36px; }

/* Decorative layers are hidden from assistive technology in markup with
   aria-hidden, and from print here. */
@media print {
  .mbg-ridge, .mbg-grid-lines, .mbg-divider,
  .mbg-hero-watermark, .mbg-footer-ridge, .mbg-scrollcue { display: none !important; }
}

/* Nothing on this site scrolls sideways. Belt and braces for the absolutely
   positioned decorative layers above. */
.mbg-hero-v2, .mbg-band, .mbg-page-head, .mbg-manifesto, .mbg-cta-band { max-width: 100vw; }

/* Anchor targets clear the sticky header. */
[id] { scroll-margin-top: 104px; }

@media (max-width: 767px) {
  :root { --mbg-gutter: 20px; }
  .mbg-split-body p, .mbg-profile-body p { max-width: none; }
}
@media (max-width: 360px) {
  :root { --mbg-gutter: 16px; }
}

/* ==========================================================================
   MBG Ridgeline, batch 3: corporate refocus
   Added 2026-08-05 (information architecture, interaction and logo batch).

   Sections 37 to 45 below are additive. Nothing above this line was removed,
   so a rollback is a truncation at this comment plus the paired changes in
   mbg.js and functions.php.
   ========================================================================== */

/* --------------------------------------------------------------------------
   37. Progressive-enhancement contract for interactive components

   The rule that keeps this safe is the same one the motion system uses.
   A panel is only collapsed when <html> carries .mbg-js, which is set inline
   before first paint and removed again by a 2,500 ms failsafe if the script
   never reports in. With no JavaScript, blocked JavaScript, or a script
   error, every panel renders open and every word on the page is readable.

   Markup ships in its open state:
     <button aria-expanded="true" aria-controls="ID">
     <div class="mbg-disc-panel" id="ID">
   and mbg.js flips aria-expanded to false during init.
   -------------------------------------------------------------------------- */

.mbg-js .mbg-disc-panel { display: none; }
.mbg-js .mbg-disc.is-open > .mbg-disc-panel,
.mbg-js .mbg-disc.is-open .mbg-disc-panel { display: block; }

/* Without the script the control is inert, so it must not look pressable. */
html:not(.mbg-js) .mbg-disc-btn { display: none; }

/* --------------------------------------------------------------------------
   38. The disclosure control

   One control, used by every interactive component on the site so the
   gesture is learned once. Always a real button, always with a visible
   label that says what will happen, never hover-only.
   -------------------------------------------------------------------------- */

.mbg-disc-btn {
  -webkit-appearance: none;
  appearance: none;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  margin: 0;
  padding: 10px 0;
  border: 0;
  background: transparent;
  color: var(--mbg-accent-deep);
  font-family: var(--mbg-font-body);
  font-size: 0.9375rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  text-align: left;
  cursor: pointer;
  position: relative;
}

.mbg-disc-btn-text {
  position: relative;
  padding-bottom: 2px;
  background-image: linear-gradient(var(--mbg-accent), var(--mbg-accent));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 0 1.5px;
  transition: background-size var(--mbg-dur) var(--mbg-ease);
}
.mbg-disc-btn:hover .mbg-disc-btn-text,
.mbg-disc-btn:focus-visible .mbg-disc-btn-text { background-size: 100% 1.5px; }

/* The control icon is a plus that becomes a minus. Rotation is the only
   motion; the shape change is a scale on one bar, so nothing can be left
   mid-way if a transition is interrupted. */
.mbg-disc-icon {
  position: relative;
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  border: 1px solid currentColor;
  border-radius: 50%;
  transition: transform var(--mbg-dur) var(--mbg-ease), background-color var(--mbg-dur) var(--mbg-ease);
}
.mbg-disc-icon::before,
.mbg-disc-icon::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 10px;
  height: 1.5px;
  background: currentColor;
  transform: translate(-50%, -50%);
  transition: transform var(--mbg-dur) var(--mbg-ease), opacity var(--mbg-dur) var(--mbg-ease);
}
.mbg-disc-icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.mbg-disc-btn[aria-expanded="true"] .mbg-disc-icon { transform: rotate(180deg); }
.mbg-disc-btn[aria-expanded="true"] .mbg-disc-icon::after { transform: translate(-50%, -50%) rotate(90deg) scaleX(0); opacity: 0; }

.mbg-disc-btn:focus-visible {
  outline: 3px solid var(--mbg-accent-deep);
  outline-offset: 3px;
  border-radius: 2px;
}

/* On the navy bands the control inverts with the rest of the type. */
.mbg-band-dark .mbg-disc-btn { color: var(--mbg-accent-light); }
.mbg-band-dark .mbg-disc-btn-text { background-image: linear-gradient(var(--mbg-accent-light), var(--mbg-accent-light)); }
.mbg-band-dark .mbg-disc-btn:focus-visible { outline-color: var(--mbg-accent-light); }

@media (prefers-reduced-motion: reduce) {
  .mbg-disc-icon,
  .mbg-disc-icon::before,
  .mbg-disc-icon::after,
  .mbg-disc-btn-text { transition: none !important; }
}

/* The revealed panel. It opens with a short height and opacity move so the
   page does not appear to jump, and it never animates the surrounding
   layout, only its own box. */
.mbg-disc-panel { position: relative; }
.mbg-motion .mbg-disc.is-open > .mbg-disc-panel,
.mbg-motion .mbg-disc.is-open .mbg-disc-panel { animation: mbg-open var(--mbg-dur-slow) var(--mbg-ease-out) both; }

@keyframes mbg-open {
  from { opacity: 0; transform: translate3d(0, -8px, 0); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-disc.is-open .mbg-disc-panel { animation: none !important; }
}

/* --------------------------------------------------------------------------
   39. Mission and vision panels

   Two large panels. The statement itself is never hidden: it is the first
   thing in the panel and it is always visible, on every device, with or
   without JavaScript. Only the supporting explanation is behind the control.
   -------------------------------------------------------------------------- */

.mbg-mv-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 26rem), 1fr));
  gap: clamp(20px, 2.4vw, 32px);
  /* Panels in a row match height so their controls sit on one line. */
  align-items: stretch;
}

.mbg-mv {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: clamp(28px, 3vw, 44px);
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  overflow: clip;
  transition: border-color var(--mbg-dur) var(--mbg-ease), box-shadow var(--mbg-dur) var(--mbg-ease), transform var(--mbg-dur) var(--mbg-ease);
}
.mbg-band-surface .mbg-mv { background: var(--mbg-bg); }

/* A gold edge that grows down the left side on hover, focus-within and while
   the panel is open. It is decoration only; state is carried by the button. */
.mbg-mv::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 3px;
  height: 0;
  background: var(--mbg-accent);
  transition: height var(--mbg-dur-slow) var(--mbg-ease-out);
}
.mbg-mv:hover::before,
.mbg-mv:focus-within::before,
.mbg-mv.is-open::before { height: 100%; }
.mbg-mv:hover,
.mbg-mv.is-open { border-color: #C9CFD8; box-shadow: 0 10px 30px rgba(16, 29, 45, 0.07); transform: translateY(-2px); }

.mbg-mv-label {
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--mbg-accent-deep);
  margin: 0 0 18px;
}
.mbg-mv-statement {
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.25rem, 1.02rem + 0.85vw, 1.625rem);
  line-height: 1.34;
  color: var(--mbg-ink);
  margin: 0;
}
.mbg-mv-statement { flex: 0 0 auto; }
/* The control is pushed to the foot of the panel so a shorter statement does
   not leave its button floating halfway up the card. */
.mbg-mv .mbg-disc-btn { margin-top: auto; padding-top: 24px; }
.mbg-mv-panel { padding-top: 6px; }
.mbg-mv-panel p { color: var(--mbg-ink-muted); }
.mbg-mv-panel p:first-child { margin-top: 0; }
.mbg-mv-panel hr.mbg-hr { margin: 22px 0; }

@media (prefers-reduced-motion: reduce) {
  .mbg-mv, .mbg-mv::before { transition: none !important; }
  .mbg-mv:hover, .mbg-mv.is-open { transform: none !important; }
}

/* --------------------------------------------------------------------------
   40. Principle cards

   A front-to-back rotation on pointer-capable widths and a plain expansion
   below that. Both faces live in the same grid cell, so the card is as tall
   as its taller face and no height is ever hard-coded. With no JavaScript
   the two faces fall back to normal block flow and read one after the other.
   -------------------------------------------------------------------------- */

.mbg-principles {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
  gap: clamp(16px, 1.8vw, 24px);
  /* Every card in the set is the same height, so the row of controls reads as
     one line rather than as a ragged edge. */
  grid-auto-rows: 1fr;
}

.mbg-flip { position: relative; display: flex; flex-direction: column; }
.mbg-flip-inner { position: relative; flex: 1 1 auto; }

.mbg-flip-face {
  display: flex;
  flex-direction: column;
  padding: clamp(24px, 2.4vw, 32px);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  background: var(--mbg-bg);
}
.mbg-flip-face h3 {
  font-size: 1.25rem;
  margin: 0 0 14px;
}
.mbg-flip-face p { color: var(--mbg-ink-muted); margin: 0; }
.mbg-flip-front h3 { color: var(--mbg-ink); }
/* The card is as tall as its longer face, which is the back. Centring the
   front vertically distributes that difference instead of leaving a block of
   empty space under the text. */
.mbg-js .mbg-flip-front { justify-content: center; }
.mbg-flip-back {
  border-color: #C9CFD8;
  background: var(--mbg-surface);
}
.mbg-flip-eyebrow {
  font-family: var(--mbg-font-body);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--mbg-accent-deep);
  margin: 0 0 12px;
}

/* The card itself rotates; the control sits below it and never rotates, so
   the button is reachable in both states and is never seen mirrored. */
.mbg-flip .mbg-disc-btn { margin-top: 14px; }

/* Enhanced behaviour only. */
.mbg-js .mbg-flip-inner {
  display: grid;
  grid-template-areas: "face";
  transform-style: preserve-3d;
  transition: transform 620ms var(--mbg-ease-out);
}
.mbg-js .mbg-flip { perspective: 1600px; }
.mbg-js .mbg-flip-face {
  grid-area: face;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
.mbg-js .mbg-flip-back { transform: rotateY(180deg); }
.mbg-js .mbg-flip.is-open .mbg-flip-inner { transform: rotateY(180deg); }

/* The face that is currently facing away must not be reachable by tab or
   readable by assistive technology, and must not be seen mirrored. */
.mbg-js .mbg-flip .mbg-flip-back { visibility: hidden; }
.mbg-js .mbg-flip.is-open .mbg-flip-back { visibility: visible; }
.mbg-js .mbg-flip.is-open .mbg-flip-front { visibility: hidden; }
/* Visibility is delayed to the mid-point of the rotation so neither face
   disappears while it is still the one being looked at. */
.mbg-js .mbg-flip .mbg-flip-face { transition: visibility 0s linear 310ms; }

.mbg-flip-face:focus-within { outline: none; }
.mbg-js .mbg-flip:hover .mbg-flip-face,
.mbg-js .mbg-flip:focus-within .mbg-flip-face { border-color: #C9CFD8; }

/* Rotation is a decoration. With motion reduced the faces simply swap. */
@media (prefers-reduced-motion: reduce) {
  .mbg-js .mbg-flip-inner { transform: none !important; transition: none !important; transform-style: flat; }
  .mbg-js .mbg-flip-back { transform: none !important; }
  .mbg-js .mbg-flip .mbg-flip-face { transition: none !important; }
}

/* Below the tablet breakpoint the rotation is replaced by a plain expansion,
   which is easier to read on a narrow screen and cheaper to paint. */
@media (max-width: 767px) {
  .mbg-js .mbg-flip-inner { display: block; transform: none !important; transform-style: flat; transition: none; }
  .mbg-js .mbg-flip-back { transform: none !important; visibility: visible; display: none; margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; }
  .mbg-js .mbg-flip.is-open .mbg-flip-back { display: block; }
  .mbg-js .mbg-flip.is-open .mbg-flip-front { visibility: visible; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
  .mbg-js .mbg-flip .mbg-flip-face { transition: none; }
}

/* --------------------------------------------------------------------------
   41. Business panels

   The component that has to survive growth. It is an auto-fit grid, so a
   fourth, fifth or ninth business is added by adding one more article. There
   is no three-column assumption anywhere in this rule set, and no rule keys
   off :nth-child or a fixed count.
   -------------------------------------------------------------------------- */

.mbg-biz-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: clamp(20px, 2.2vw, 28px);
  /* Cards in a row match height, so the controls line up and the section does
     not read as three unrelated blocks. */
  align-items: stretch;
}

.mbg-biz {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  overflow: clip;
  transition: border-color var(--mbg-dur) var(--mbg-ease), box-shadow var(--mbg-dur) var(--mbg-ease), transform var(--mbg-dur) var(--mbg-ease);
}
.mbg-biz::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: var(--mbg-accent);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform var(--mbg-dur-slow) var(--mbg-ease-out);
}
.mbg-biz:hover::after,
.mbg-biz:focus-within::after,
.mbg-biz.is-open::after { transform: scaleX(1); }
.mbg-biz:hover,
.mbg-biz.is-open { border-color: #C9CFD8; box-shadow: 0 12px 32px rgba(16, 29, 45, 0.08); transform: translateY(-3px); }

.mbg-biz-mark {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 132px;
  padding: 26px 24px;
  background: var(--mbg-surface);
  border-bottom: 1px solid var(--mbg-line);
}
.mbg-biz-mark img { display: block; max-height: 88px; width: auto; }
.mbg-biz-mark .mbg-logo-slot-name {
  margin: 0;
  text-align: center;
  font-family: var(--mbg-font-heading);
  font-size: 1.375rem;
  font-weight: 600;
  line-height: 1.15;
  color: var(--mbg-ink);
  letter-spacing: 0.01em;
}
.mbg-biz-body { padding: clamp(22px, 2.2vw, 30px); display: flex; flex-direction: column; flex: 1 1 auto; }
.mbg-biz-body h3 { margin: 10px 0 12px; font-size: 1.375rem; }
.mbg-biz-body > p { color: var(--mbg-ink-muted); margin: 0; }
.mbg-biz-foot { margin-top: auto; padding-top: 18px; display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }
.mbg-biz-panel { margin-top: 4px; }
.mbg-biz-panel h4 {
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--mbg-accent-deep);
  margin: 22px 0 8px;
}
.mbg-biz-panel p { color: var(--mbg-ink-muted); margin: 0; }
.mbg-biz-panel hr.mbg-hr { margin: 20px 0; }

@media (prefers-reduced-motion: reduce) {
  .mbg-biz, .mbg-biz::after { transition: none !important; }
  .mbg-biz:hover, .mbg-biz.is-open { transform: none !important; }
}

/* The long-form version of the same component, used on Our Businesses.
   Same contract, more room. Alternating alignment gives the page a rhythm
   without needing a fixed number of entries. */
.mbg-bizrow {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(28px, 4vw, 64px);
  align-items: start;
}
.mbg-bizrow-alt { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.mbg-bizrow-alt .mbg-bizrow-aside { order: 2; }
.mbg-bizrow-alt .mbg-bizrow-body { order: 1; }
@media (max-width: 900px) {
  .mbg-bizrow,
  .mbg-bizrow-alt { grid-template-columns: 1fr; }
  .mbg-bizrow-alt .mbg-bizrow-aside { order: 0; }
  .mbg-bizrow-alt .mbg-bizrow-body { order: 0; }
}

.mbg-bizrow-card {
  padding: clamp(26px, 2.8vw, 38px);
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  border-top: 3px solid var(--mbg-accent);
}
.mbg-bizrow-card .mbg-logo-slot-name {
  margin: 0 0 20px;
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
  font-weight: 600;
  line-height: 1.1;
  color: var(--mbg-ink);
}
.mbg-bizrow-card img { display: block; max-width: 100%; height: auto; margin-bottom: 20px; }

/* --------------------------------------------------------------------------
   42. How we build: a drawn process line

   The line is an ordered list with a rule running through it. The rule is
   drawn from the top as the section arrives, so the sequence reads as a
   sequence. The list is a real <ol>, so it is a sequence to a screen reader
   whether or not the line ever draws.
   -------------------------------------------------------------------------- */

.mbg-process { position: relative; margin: 0; padding: 0; list-style: none; }
.mbg-process::before {
  content: "";
  position: absolute;
  top: 6px;
  bottom: 6px;
  left: 13px;
  width: 1px;
  background: var(--mbg-line);
}
.mbg-process::after {
  content: "";
  position: absolute;
  top: 6px;
  left: 13px;
  width: 1px;
  height: 100%;
  max-height: calc(100% - 12px);
  background: var(--mbg-accent);
  transform-origin: top center;
  transform: scaleY(0);
}
.mbg-motion .mbg-process.is-in::after {
  transform: scaleY(1);
  transition: transform 1600ms var(--mbg-ease-out) 120ms;
}
html:not(.mbg-motion) .mbg-process::after { transform: scaleY(1); }

.mbg-process > li {
  position: relative;
  padding: 0 0 clamp(26px, 2.6vw, 38px) 46px;
}
.mbg-process > li:last-child { padding-bottom: 0; }
.mbg-process > li::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 8px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--mbg-bg);
  border: 2px solid var(--mbg-accent);
}
.mbg-band-surface .mbg-process > li::before { background: var(--mbg-surface); }
.mbg-process > li h3 { font-size: 1.1875rem; margin: 0 0 8px; }
.mbg-process > li p { color: var(--mbg-ink-muted); margin: 0; max-width: 56ch; }

@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-process::after { transform: scaleY(1) !important; transition: none !important; }
}

/* --------------------------------------------------------------------------
   43. Additional scroll appearances

   Variety, but from one vocabulary. Each of these obeys the same contract as
   .mbg-reveal: hidden only under .mbg-motion, revealed once by .is-in, and
   neutralised entirely when reduced motion is requested.
   -------------------------------------------------------------------------- */

/* Controlled side reveal. Distance is small on purpose; a large slide reads
   as a slideshow rather than as a page. */
.mbg-motion .mbg-reveal-x { opacity: 0; transform: translate3d(-22px, 0, 0); }
.mbg-motion .mbg-reveal-xr { opacity: 0; transform: translate3d(22px, 0, 0); }
.mbg-motion .mbg-reveal-x.is-in,
.mbg-motion .mbg-reveal-xr.is-in {
  opacity: 1;
  transform: none;
  transition: opacity var(--mbg-dur-slow) var(--mbg-ease-out), transform var(--mbg-dur-slow) var(--mbg-ease-out);
  transition-delay: var(--mbg-delay, 0ms);
}

/* On a narrow screen a side reveal would push a full-width heading past the
   viewport edge while it settles, so below the tablet breakpoint the side
   variants fall back to the vertical rise. */
@media (max-width: 767px) {
  .mbg-motion .mbg-reveal-x,
  .mbg-motion .mbg-reveal-xr { transform: translate3d(0, 18px, 0); }
}

/* Clip-mask heading reveal. The text is never moved, only uncovered, so a
   long headline cannot reflow while it appears. */
.mbg-motion .mbg-reveal-clip {
  clip-path: inset(0 0 108% 0);
  opacity: 0.001;
}
.mbg-motion .mbg-reveal-clip.is-in {
  clip-path: inset(0 0 -12% 0);
  opacity: 1;
  transition: clip-path 900ms var(--mbg-ease-out), opacity 420ms linear;
  transition-delay: var(--mbg-delay, 0ms);
}

/* Gentle scale. Used once or twice per page, on a panel rather than on text. */
.mbg-motion .mbg-reveal-scale { opacity: 0; transform: scale(0.972); }
.mbg-motion .mbg-reveal-scale.is-in {
  opacity: 1;
  transform: none;
  transition: opacity var(--mbg-dur-slow) var(--mbg-ease-out), transform 760ms var(--mbg-ease-out);
  transition-delay: var(--mbg-delay, 0ms);
}

/* Section label. A short letterspacing settle, which suits all-caps type and
   nothing else. */
.mbg-motion .mbg-reveal-label { opacity: 0; letter-spacing: 0.42em; }
.mbg-motion .mbg-reveal-label.is-in {
  opacity: 1;
  letter-spacing: 0.18em;
  transition: opacity 520ms linear, letter-spacing 820ms var(--mbg-ease-out);
  transition-delay: var(--mbg-delay, 0ms);
}

/* A standalone gold rule that draws across. */
.mbg-drawrule {
  display: block;
  height: 2px;
  width: clamp(72px, 12vw, 148px);
  background: var(--mbg-accent);
  border: 0;
  margin: 0 0 26px;
  transform-origin: left center;
}
.mbg-motion .mbg-drawrule { transform: scaleX(0); }
.mbg-motion .mbg-drawrule.is-in {
  transform: scaleX(1);
  transition: transform 760ms var(--mbg-ease-out) var(--mbg-delay, 0ms);
}
.mbg-band-dark .mbg-drawrule { background: var(--mbg-accent-light); }

@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-reveal-x,
  .mbg-motion .mbg-reveal-xr,
  .mbg-motion .mbg-reveal-scale,
  .mbg-motion .mbg-reveal-label,
  .mbg-motion .mbg-reveal-clip {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
    letter-spacing: inherit !important;
    transition: none !important;
  }
  .mbg-motion .mbg-reveal-label { letter-spacing: 0.18em !important; }
  .mbg-motion .mbg-drawrule { transform: none !important; transition: none !important; }
}

/* --------------------------------------------------------------------------
   44. Header and footer logo scale

   Batch 3 doubles the visible brand treatment in both positions. The whole
   lockup grows, not the container: the emblem, the company name and the
   descriptor line all scale together, and the ratio between them is
   unchanged so the artwork is never redrawn or restretched.

   Measured before this change, at 1440px:
     header emblem     46 x 25.1     header lockup  210.6 x 36 (44 with the
     header wordmark   152.6 x 36    target minimum)
     footer emblem     54 x 29.4     footer lockup  235.8 x 38
   The recorded after-values are in the build-state document.
   -------------------------------------------------------------------------- */

/* One dial drives the header lockup. Sized so the full-width lockup and the
   four-item navigation both fit at 1025px, which is the narrowest width at
   which the horizontal menu is shown. */
:root {
  --mbg-mark-w: 92px;
  --mbg-name-size: 2.375rem;
  --mbg-sub-size: 0.9375rem;
}

/* The emblem width is set on the Elementor widget, so it is overridden here
   at the same specificity the generated rule uses. */
.mbg-header .mbg-logo-mark img,
.elementor .mbg-logo-mark img {
  width: var(--mbg-mark-w) !important;
  height: auto;
  max-width: none;
}

.mbg-header .mbg-wordmark-name { font-size: var(--mbg-name-size); }
.mbg-header .mbg-wordmark-sub { font-size: var(--mbg-sub-size); margin-top: 9px; letter-spacing: 0.17em; }
.mbg-header .mbg-logo-lockup { gap: 16px; }

/* The header keeps a single height at every scroll position, so scrolling can
   never move the page. Only the scale of the lockup responds, and a transform
   does not participate in layout. */
.mbg-header .mbg-logo-lockup {
  transform-origin: left center;
  transition: transform var(--mbg-dur) var(--mbg-ease);
}
.mbg-header.is-scrolled .mbg-logo-lockup { transform: scale(0.88); }
/* The old per-image scale is replaced by the lockup-wide one above. */
.mbg-header.is-scrolled .mbg-logo-mark img { transform: none; }

@media (prefers-reduced-motion: reduce) {
  .mbg-header .mbg-logo-lockup { transition: none !important; }
}

/* The rule that used to live here withdrew the Contact button below 1280px,
   because above that width Contact appeared both as a navigation item and as
   the button. That duplication was removed in the final-development batch:
   Contact is no longer a Primary Navigation item at all, and the single
   Contact Us control is now shown at every width. See section 53. */

/* Phone: substantially larger than before, but sized so the menu control
   keeps its full 44px target and the row never wraps. */
/* Phone. Sized in three steps so the lockup is as large as the row can carry
   at each width while the menu control keeps its full 44px target and the row
   never wraps. The horizontal padding is tightened here for the same reason. */
@media (max-width: 767px) {
  :root { --mbg-mark-w: 76px; --mbg-name-size: 1.75rem; --mbg-sub-size: 0.875rem; }
  .mbg-header .mbg-wordmark-sub { margin-top: 7px; letter-spacing: 0.15em; }
  .mbg-header .mbg-logo-lockup { gap: 12px; }
  .mbg-header > .e-con-inner { gap: 12px; }
}
@media (max-width: 430px) {
  :root { --mbg-mark-w: 66px; --mbg-name-size: 1.5rem; --mbg-sub-size: 0.75rem; }
  .mbg-header .mbg-logo-lockup { gap: 10px; }
}
@media (max-width: 374px) {
  :root { --mbg-mark-w: 60px; --mbg-name-size: 1.375rem; --mbg-sub-size: 0.6875rem; }
}
/* Below 360px the typographic wordmark is already withdrawn by section 14 of
   mbg.css, because keeping it would either wrap the header row or push the
   menu control off the screen. With the row to itself the emblem is given
   back the size the wordmark was using, so the identity is still strong at
   320px. An unreachable menu is the worse outcome, and this avoids it. */
@media (max-width: 359px) {
  :root { --mbg-mark-w: 66px; }
}

/* --------------------------------------------------------------------------
   45. Footer

   A larger, stacked composition. The footer uses the company's own reversed
   lockup file rather than the emblem plus typographic wordmark, because at
   this size the real artwork is legible and it is the approved treatment.
   No recolour, no crop, no stretch: one image at its natural ratio.
   -------------------------------------------------------------------------- */

.mbg-footer-lockup {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0;
  text-decoration: none;
  min-height: 44px;
  transition: opacity var(--mbg-dur) var(--mbg-ease);
}
.mbg-footer-lockup img {
  width: clamp(168px, 17vw, 212px);
  height: auto;
  display: block;
  flex: 0 0 auto;
}
.mbg-footer-lockup:hover { opacity: 0.86; }
.mbg-footer-lockup:focus-visible { outline: 3px solid var(--mbg-accent-light); outline-offset: 6px; }

@media (max-width: 767px) {
  .mbg-footer-lockup img { width: clamp(150px, 44vw, 190px); }
}
@media (prefers-reduced-motion: reduce) {
  .mbg-footer-lockup { transition: none !important; }
}

.mbg-footer-mission {
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.0625rem, 0.96rem + 0.4vw, 1.1875rem);
  line-height: 1.45;
  color: #E4E8EE;
  max-width: 34ch;
  margin: 22px 0 18px;
}
.mbg-footer-contact { margin: 0; }
.mbg-footer-contact a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.mbg-footer-credit {
  margin: 0;
  font-size: 0.875rem;
  color: #9AA6B4;
}
.mbg-footer-credit a {
  color: #C8CFD9;
  text-decoration: underline;
  text-underline-offset: 0.2em;
}
.mbg-footer-credit a:hover { color: var(--mbg-accent-light); }

.mbg-footer-legal { border-top: 1px solid rgba(255, 255, 255, 0.12); }

/* --------------------------------------------------------------------------
   46. Small pieces used by the rebuilt pages
   -------------------------------------------------------------------------- */

/* A stated principle set apart from the prose around it. Used for the
   confidentiality commitment, which has to be easy to find. */
.mbg-principle-note {
  position: relative;
  padding: clamp(24px, 2.6vw, 34px) clamp(24px, 2.8vw, 38px);
  background: var(--mbg-surface);
  border-left: 3px solid var(--mbg-accent);
  border-radius: 0 var(--mbg-radius) var(--mbg-radius) 0;
}
.mbg-band-dark .mbg-principle-note { background: rgba(255, 255, 255, 0.05); border-left-color: var(--mbg-accent-light); }
.mbg-principle-note p { margin: 0; }
.mbg-principle-note p + p { margin-top: 0.9em; }
.mbg-principle-note .mbg-principle-quote {
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.125rem, 1rem + 0.5vw, 1.375rem);
  line-height: 1.4;
  color: var(--mbg-ink);
}
.mbg-band-dark .mbg-principle-note .mbg-principle-quote { color: #FFFFFF; }

/* A forward-looking panel: quieter than a card, more deliberate than a
   paragraph. */
.mbg-forward {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
  gap: clamp(20px, 2.4vw, 34px);
}
.mbg-forward > div h3 { font-size: 1.1875rem; margin: 0 0 10px; }
.mbg-forward > div p { color: var(--mbg-ink-muted); margin: 0; }
.mbg-band-dark .mbg-forward > div h3 { color: #FFFFFF; }
.mbg-band-dark .mbg-forward > div p { color: #C8CFD9; }

/* The status chip already exists; this adds the neutral variant used where a
   business has no public site yet. */
.mbg-status-soft {
  background: transparent;
  border: 1px solid var(--mbg-line);
  color: var(--mbg-ink-muted);
}

/* Scroll cue on the hero. Existing rule, restated here only so the arrow is
   part of the new motion vocabulary. */
.mbg-scrollcue { transition: color var(--mbg-dur) var(--mbg-ease); }

/* Sequenced children where a grid is not appropriate. */
.mbg-motion .mbg-seq > * { opacity: 0; transform: translate3d(0, 14px, 0); }
.mbg-motion .mbg-seq.is-in > * {
  opacity: 1;
  transform: none;
  transition: opacity var(--mbg-dur-slow) var(--mbg-ease-out), transform var(--mbg-dur-slow) var(--mbg-ease-out);
}
.mbg-motion .mbg-seq.is-in > *:nth-child(1) { transition-delay: 0ms; }
.mbg-motion .mbg-seq.is-in > *:nth-child(2) { transition-delay: 110ms; }
.mbg-motion .mbg-seq.is-in > *:nth-child(3) { transition-delay: 220ms; }
.mbg-motion .mbg-seq.is-in > *:nth-child(4) { transition-delay: 330ms; }
.mbg-motion .mbg-seq.is-in > *:nth-child(n + 5) { transition-delay: 420ms; }
@media (prefers-reduced-motion: reduce) {
  .mbg-motion .mbg-seq > * { opacity: 1 !important; transform: none !important; transition: none !important; }
}

/* ==========================================================================
   MBG legal-readiness batch — sections 47 to 50
   Added 2026-08-05. Rollback is a truncation of this file at this banner.
   ========================================================================== */

/* --------------------------------------------------------------------------
   47. Contact form: guard, hints, notices and consent
   -------------------------------------------------------------------------- */

/* The honeypot. The whole wrapper is taken off screen, not only the input:
   before this batch the wrapper's label was still painted on the page. It is
   also aria-hidden and out of the tab order, so no visitor of any kind meets
   it, while an automated filler that reads the DOM still finds it. */
.mbg-formguard {
  position: absolute !important;
  left: -9999px !important;
  top: auto !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
}

/* The guard row carries only the honeypot and the signed token, so it must
   not occupy a grid row of its own. */
.mbg-form .elementor-field-group-guard {
  padding: 0 !important;
  margin: 0 !important;
}

/* A field hint sits under its input and is read out with it. */
.mbg-field-hint {
  font-size: 0.9375rem;
  color: var(--mbg-ink-muted);
  margin: -6px 0 0;
}
.mbg-form .elementor-field-group-websitehint { padding-top: 0 !important; }

/* The sensitive-information notice. Deliberately not styled as an error:
   it is an instruction given before typing, not a rejection afterwards. */
.mbg-form-notice {
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--mbg-ink);
  background: #F4F1EB;
  border-left: 3px solid var(--mbg-accent-deep);
  border-radius: 0 var(--mbg-radius) var(--mbg-radius) 0;
  padding: 12px 16px;
  margin: 0;
}

/* Consent rows. The checkbox and its sentence sit on one baseline, the whole
   row is a 44px target, and the label wraps to a readable measure. */
.mbg-form .elementor-field-type-acceptance .elementor-field-subgroup { margin: 0; }
.mbg-form .elementor-field-type-acceptance .elementor-field-option {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  min-height: 44px;
  padding: 6px 0;
}
.mbg-form input[type="checkbox"].mbg-consent {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  margin: 2px 0 0;
  accent-color: var(--mbg-accent-deep);
}
.mbg-form input[type="checkbox"].mbg-consent:focus-visible {
  outline: 3px solid var(--mbg-accent-deep);
  outline-offset: 2px;
}
.mbg-form .elementor-field-type-acceptance label {
  font-size: 0.9375rem;
  line-height: 1.55;
  max-width: 62ch;
  cursor: pointer;
}
.mbg-form .elementor-field-type-acceptance label a {
  color: var(--mbg-ink);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.mbg-form .elementor-field-type-acceptance label a:hover { color: var(--mbg-accent-deep); }

/* "(required)" in words. The asterisk alone carries the same meaning only to
   someone who already knows the convention. */
.mbg-req {
  font-weight: 600;
  color: var(--mbg-ink-muted);
  white-space: nowrap;
}

/* The error summary. Present in the DOM at all times, revealed and focused
   when a submission comes back with errors, so a keyboard or screen-reader
   user is told what went wrong instead of being left at the submit button. */
.mbg-form-errors {
  border: 2px solid #9B2C17;
  border-radius: var(--mbg-radius);
  background: #FBEEEB;
  padding: 16px 18px;
  margin: 0 0 var(--mbg-space-sm);
}
.mbg-form-errors[hidden] { display: none; }
.mbg-form-errors:focus-visible { outline: 3px solid var(--mbg-accent-deep); outline-offset: 2px; }
.mbg-form-errors h2, .mbg-form-errors p.mbg-form-errors-title {
  font-family: var(--mbg-font-body);
  font-size: 1rem;
  font-weight: 700;
  color: var(--mbg-ink);
  margin: 0 0 8px;
}
.mbg-form-errors ul { margin: 0; padding-left: 20px; }
.mbg-form-errors li { font-size: 0.9375rem; margin-bottom: 4px; }
.mbg-form-errors a { color: #7E230F; text-underline-offset: 2px; }

/* A field Elementor has marked invalid. Never colour alone: the border
   thickens, the message is in words, and the control carries aria-invalid. */
.mbg-form .elementor-field-group [aria-invalid="true"] {
  border-width: 2px;
  border-color: #9B2C17;
}
.mbg-form .elementor-field-group .elementor-message-danger,
.mbg-form .elementor-field-group .elementor-error {
  display: block;
  font-size: 0.9375rem;
  color: #7E230F;
  margin-top: 6px;
}

/* The submit button while a submission is in flight. aria-disabled rather
   than disabled, so focus is never thrown back to the document body. */
.mbg-form .elementor-button[aria-disabled="true"] {
  opacity: 0.6;
  cursor: progress;
}

/* The no-JavaScript notice. Elementor forms submit over AJAX, so with
   scripting off this form cannot send. Saying so, with the address to write
   to instead, is the only honest handling. */
.mbg-noscript {
  border-left: 3px solid var(--mbg-accent-deep);
  background: #F4F1EB;
  padding: 14px 18px;
  border-radius: 0 var(--mbg-radius) var(--mbg-radius) 0;
  font-size: 1rem;
  margin: 0 0 var(--mbg-space-sm);
}

/* --------------------------------------------------------------------------
   48. Business website previews

   One component, one <article> per business. The grid is auto-fit, so a
   fourth business is one more article and not a redesign, and nothing in
   here counts the businesses or assumes three of them.
   -------------------------------------------------------------------------- */

.mbg-previews {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 28px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mbg-preview {
  display: flex;
  flex-direction: column;
  background: var(--mbg-bg);
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  overflow: clip;
  transition: transform 220ms ease, box-shadow 220ms ease;
}
@media (prefers-reduced-motion: reduce) {
  .mbg-preview { transition: none; }
}
.mbg-preview:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(16, 29, 45, 0.09); }

/* The screenshot slot. A fixed 16:10 box so every card is the same shape and
   nothing shifts when real artwork replaces a placeholder. */
.mbg-preview-shot {
  position: relative;
  aspect-ratio: 16 / 10;
  background: linear-gradient(155deg, #16263A 0%, #101D2D 62%, #0C1725 100%);
  display: grid;
  place-items: center;
  padding: 24px;
  border-bottom: 1px solid var(--mbg-line);
}
.mbg-preview-shot img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}
.mbg-preview-ph {
  position: relative;
  text-align: center;
  color: #E7EBF1;
  max-width: 30ch;
}
.mbg-preview-ph .mbg-preview-mark {
  display: block;
  font-family: var(--mbg-font-heading);
  font-size: clamp(1.25rem, 1rem + 1.1vw, 1.625rem);
  line-height: 1.2;
  color: #FFFFFF;
  margin: 0 0 8px;
}
.mbg-preview-ph .mbg-preview-phnote {
  display: block;
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--mbg-accent-light);
  margin: 0;
}

.mbg-preview-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 24px;
  flex: 1 1 auto;
}
.mbg-preview-cat {
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--mbg-ink-muted);
  margin: 0;
}
.mbg-preview-name { margin: 0; font-size: 1.375rem; line-height: 1.25; }
.mbg-preview-desc { margin: 0; font-size: 1rem; color: var(--mbg-ink-muted); }

/* Development status. The dot is decoration; the words carry the meaning. */
.mbg-status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  align-self: flex-start;
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--mbg-ink);
  background: #F1EDE5;
  border: 1px solid #D9CFBC;
  border-radius: 999px;
  padding: 5px 12px;
}
.mbg-status::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mbg-accent-deep);
  flex: 0 0 auto;
}
.mbg-status-live { background: #EDF4EE; border-color: #A8C6AF; }
.mbg-status-live::before { background: #2C6B3B; }

.mbg-preview-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px;
  margin-top: auto;
  padding-top: 6px;
}
.mbg-preview-visit {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  font-weight: 600;
  color: var(--mbg-ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.mbg-preview-visit:hover { color: var(--mbg-accent-deep); }
.mbg-preview-visit .mbg-ext { font-size: 0.85em; }

/* The expandable supporting detail reuses the site's one disclosure
   primitive, so it inherits its keyboard, focus and no-script behaviour. */
.mbg-preview .mbg-disc-btn { margin-top: 4px; }
.mbg-preview-detail ul { margin: 10px 0 0; padding-left: 20px; }
.mbg-preview-detail li { font-size: 0.9375rem; color: var(--mbg-ink-muted); margin-bottom: 6px; }

/* --------------------------------------------------------------------------
   49. Legal pages
   -------------------------------------------------------------------------- */

.mbg-legal h2 {
  font-size: clamp(1.375rem, 1.15rem + 0.8vw, 1.75rem);
  margin-top: 2.25em;
  margin-bottom: 0.5em;
  scroll-margin-top: 110px;
}
.mbg-legal h3 {
  font-size: 1.125rem;
  margin-top: 1.6em;
  margin-bottom: 0.4em;
}
.mbg-legal p, .mbg-legal li { font-size: 1.0625rem; line-height: 1.7; }
.mbg-legal ul, .mbg-legal ol { padding-left: 22px; }
.mbg-legal li { margin-bottom: 8px; }
.mbg-legal > *:first-child { margin-top: 0; }

/* The attorney-review notice. It has to read as a status on the document,
   not as decoration, so it is a bordered block with its own label. */
.mbg-review-notice {
  border: 1px solid #D9CFBC;
  border-left: 4px solid var(--mbg-accent-deep);
  background: #F7F4EE;
  border-radius: 0 var(--mbg-radius) var(--mbg-radius) 0;
  padding: 16px 20px;
  font-size: 1rem;
  line-height: 1.6;
}
.mbg-review-notice strong { display: block; margin-bottom: 4px; }

/* Effective and last-updated dates. */
.mbg-legal-dates {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 28px;
  margin: 0;
  padding: 14px 0 0;
  border-top: 1px solid var(--mbg-line);
  font-size: 0.9375rem;
  color: var(--mbg-ink-muted);
}
.mbg-legal-dates div { display: flex; gap: 6px; }
.mbg-legal-dates dt { font-weight: 600; margin: 0; }
.mbg-legal-dates dd { margin: 0; }

/* A short in-page contents list at the top of a long legal document. */
.mbg-legal-toc {
  border: 1px solid var(--mbg-line);
  border-radius: var(--mbg-radius);
  padding: 20px 24px;
  margin: 0 0 var(--mbg-space-md);
  background: #FBFAF8;
}
.mbg-legal-toc h2 { margin: 0 0 10px; font-size: 1rem; letter-spacing: 0.02em; }
.mbg-legal-toc ol {
  margin: 0;
  padding: 0 0 0 20px;
  columns: 2;
  column-gap: 32px;
}
@media (max-width: 640px) { .mbg-legal-toc ol { columns: 1; } }
.mbg-legal-toc li { font-size: 0.9375rem; margin-bottom: 5px; break-inside: avoid; }
.mbg-legal-toc a { color: var(--mbg-ink); text-underline-offset: 2px; }
.mbg-legal-toc a:hover { color: var(--mbg-accent-deep); }

/* --------------------------------------------------------------------------
   50. Footer build credit
   -------------------------------------------------------------------------- */

.mbg-footer-credit {
  font-size: 0.9375rem;
  color: #AEB7C4;
  margin: 0;
}
.mbg-footer-credit a {
  color: #DCE2EA;
  text-decoration: underline;
  text-underline-offset: 3px;
  display: inline-flex;
  align-items: center;
  min-height: 32px;
}
.mbg-footer-credit a:hover { color: var(--mbg-accent-light); }

/* --------------------------------------------------------------------------
   51. WCAG 2.2 AA audit corrections

   Every rule here closes something the audit actually found.
   -------------------------------------------------------------------------- */

/* 2.4.7 Focus visible.

   The site's focus indicator was written with :focus-visible alone. That reads
   as modern and it has a real hole: a browser without :focus-visible support
   falls back to whatever ring the user agent draws, which on a transparent
   button against a light ground is close to invisible.

   These three rules are the standard progressive-enhancement pattern. A browser
   that cannot parse the middle selector drops that rule and keeps the always-on
   ring from the first. A browser that can applies all three and shows the ring
   for keyboard focus only. */
:where(a, button, input, select, textarea, summary, [tabindex], [role="button"]):focus {
  outline: 3px solid var(--mbg-accent-deep);
  outline-offset: 2px;
}
:where(a, button, input, select, textarea, summary, [tabindex], [role="button"]):focus:not(:focus-visible) {
  outline: none;
}
:where(a, button, input, select, textarea, summary, [tabindex], [role="button"]):focus-visible {
  outline: 3px solid var(--mbg-accent-deep);
  outline-offset: 2px;
}

/* The navigation links had no indicator of their own: Elementor's menu
   stylesheet neutralises the outline and nothing replaced it. */
.mbg-header .elementor-nav-menu .elementor-item:focus,
.mbg-header .elementor-nav-menu .elementor-item:focus-visible,
.mbg-header .elementor-menu-toggle:focus,
.mbg-header .elementor-menu-toggle:focus-visible {
  outline: 3px solid var(--mbg-accent-deep) !important;
  outline-offset: 2px !important;
  border-radius: 2px;
}
.mbg-footer .elementor-nav-menu .elementor-item:focus,
.mbg-footer .elementor-nav-menu .elementor-item:focus-visible,
.mbg-footer a:focus,
.mbg-footer a:focus-visible {
  outline: 3px solid var(--mbg-accent-light) !important;
  outline-offset: 2px !important;
}

/* The disclosure control's own ring, restated without relying on
   :focus-visible being understood. */
.mbg-disc-btn:focus,
.mbg-disc-btn:focus-visible {
  outline: 3px solid var(--mbg-accent-deep);
  outline-offset: 3px;
  border-radius: 2px;
}
.mbg-disc-btn:focus:not(:focus-visible) { outline: none; }
.mbg-band-dark .mbg-disc-btn:focus,
.mbg-band-dark .mbg-disc-btn:focus-visible { outline-color: var(--mbg-accent-light); }
.mbg-band-dark .mbg-disc-btn:focus:not(:focus-visible) { outline: none; }

/* 1.4.10 Reflow, and 1.4.4 Resize text.

   admin@mbgbusinessgroup.com is 26 characters with no break opportunity in it.
   At 320 CSS pixels, and again at 320 pixels with text enlarged, it pushed the
   document wider than the viewport and forced two-dimensional scrolling. Long
   addresses now break rather than the page. */
.mbg-legal p,
.mbg-legal li,
.mbg-legal dd,
.mbg-lede,
.mbg-lede-lg,
.mbg-page-head-inner p,
.mbg-card-body p,
.mbg-preview-desc,
.mbg-footer p,
.mbg-footer li {
  overflow-wrap: anywhere;
}
.mbg-legal a,
.mbg-textlink,
.mbg-preview-visit,
.mbg-footer a {
  overflow-wrap: anywhere;
}

/* 1.4.1 Use of colour.

   Links sitting inside a paragraph of legal prose were distinguished from the
   surrounding text by colour alone. In a document somebody may have to rely
   on, that is the wrong place to be subtle. */
.mbg-legal p a,
.mbg-legal li a,
.mbg-legal dd a,
.mbg-review-notice a {
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}
.mbg-legal p a:hover,
.mbg-legal li a:hover { text-decoration-thickness: 2px; }

/* 2.5.8 Target size (minimum).

   The consent checkboxes were 22 by 22, two pixels under the 24 by 24 floor.
   The row around them was already 44 tall, but the checkbox is the control,
   so the checkbox is what has to measure up. */
.mbg-form input[type="checkbox"].mbg-consent {
  width: 24px;
  height: 24px;
  min-width: 24px;
  min-height: 24px;
}

/* 1.4.11 Non-text contrast: the placeholder caption on a preview sits on the
   dark plate, where the light gold reads at about 6.6:1. Stated here so the
   pairing is not accidentally broken later by a token change. */
.mbg-preview-shot { background-color: #101D2D; }


/* ==========================================================================
   MBG final-development batch - sections 52 to 54
   Added 2026-08-05. Roll this batch's CSS back by truncating the file at the
   banner immediately above this line.
   ========================================================================== */

/* --------------------------------------------------------------------------
   52. Homepage hero, rebalanced without the mark

   Every logo-derived element is gone from the hero: no full logo, no emblem,
   no crop, no faded mark, no watermark, no logo-shaped background, no logo
   animation. What is left is the abstract ridgeline, its incomplete arc and
   the hairline grid. All three are drawn by the theme, all three carry
   aria-hidden, and the SVG carries focusable="false", so none of them is a
   keyboard stop or reaches assistive technology.

   The guard below is deliberate rather than tidy. Nothing in the hero can
   become an image again without somebody removing this rule on purpose.
   -------------------------------------------------------------------------- */

.mbg-hero-v2 .mbg-hero-watermark,
.mbg-hero-v2 .mbg-logo-mark,
.mbg-hero-v2 .mbg-wordmark,
.mbg-hero-v2 img { display: none !important; }

/* Taking the mark out removed the weight from the bottom-right corner, so the
   composition is rebuilt around the type: a wider measure, a taller drawing,
   and more air above and below the first viewport. */
.mbg-hero-final {
  padding-top: clamp(64px, 5.5vw + 26px, 118px);
  padding-bottom: clamp(72px, 5.5vw + 30px, 126px);
}
.mbg-hero-final .mbg-hero-inner {
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.78fr);
  gap: clamp(36px, 4.5vw, 80px);
}

/* rem, never ch. A ch is measured against the element's own font and the
   headline is set in the display face, so a ch cap here would lie badly. */
.mbg-hero-final .mbg-hero-copy-v2 { max-width: 40rem; }
.mbg-hero-final .mbg-hero-copy-v2 h1 { margin-bottom: 28px; }
.mbg-hero-final .mbg-hero-lede { max-width: 34rem; margin-bottom: 36px; }

/* No min-height at this breakpoint, on purpose. aspect-ratio combined with
   min-height sets a minimum WIDTH as well, and at 1025px the visual column is
   narrower than that minimum would demand, which pushes the copy off screen. */
@media (min-width: 1025px) {
  .mbg-hero-final .mbg-hero-visual { aspect-ratio: 4 / 3; min-height: 0; }
}
@media (max-width: 1024px) {
  .mbg-hero-final .mbg-hero-inner { grid-template-columns: 1fr; }
  .mbg-hero-final .mbg-hero-copy-v2 { max-width: 38rem; }
  .mbg-hero-final .mbg-hero-visual { aspect-ratio: 21 / 9; min-height: 0; }
}
@media (max-width: 767px) {
  .mbg-hero-final .mbg-hero-visual { aspect-ratio: auto; min-height: 0; height: 172px; }
  .mbg-hero-final .mbg-hero-lede { margin-bottom: 30px; }
}

/* --------------------------------------------------------------------------
   53. One Contact route in the header, at every width

   Before this batch the header carried Contact twice above 1280px: once as a
   navigation item and once as the button. Below 1280 the button was withdrawn
   and only the menu item remained. Both arrangements are replaced by a single
   arrangement that holds at every width.

   Contact is no longer a Primary Navigation item at all. That matters more
   than it looks: Elementor's menu widget renders the horizontal list AND the
   drop-down list into the DOM on every page, so hiding one of them with CSS
   would have left a second keyboard stop and a second link for a screen
   reader at the widths where the button is also present.

   Desktop and tablet:  Home - About - Our Businesses - [Contact Us]
   Phone:               [menu] Home - About - Our Businesses, and the same
                        [Contact Us] control, adapted rather than duplicated.
   -------------------------------------------------------------------------- */

/* Three navigation items and the button now share the row that four items and
   a hidden button used to. The lockup keeps its approved size above 1280 and
   steps down only in the band where the horizontal menu and the button are
   both present and the row would otherwise wrap. */
@media (min-width: 1025px) and (max-width: 1279px) {
  :root { --mbg-mark-w: 78px; --mbg-name-size: 2rem; --mbg-sub-size: 0.875rem; }
  .mbg-header .elementor-nav-menu--main .elementor-item { padding-left: 10px; padding-right: 10px; }
  .mbg-header .elementor-nav-menu--main .elementor-item::after { left: 10px; right: 10px; }
}

/* The control keeps its full 44px target at every width, and the label never
   abbreviates: the accessible name is "Contact Us" at 320px and at 1920px. */
.mbg-header-cta .elementor-button {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
}
/* Elementor's menu widget is a block-level widget in a flex row, so its
   flex-basis resolves to the leftover width of the row and the toggle is then
   pushed to the right edge of that width by an auto margin. Measured at 320px
   the widget was 131px wide to hold a 44px control, which was enough to push
   the whole navigation group onto a second row. At the widths where the
   horizontal menu is not shown, the widget is sized to what it actually
   displays. */
/* !important is used deliberately in the three places below. Elementor writes
   per-element CSS from the builder settings into post-49.css, and the widget's
   own toggle alignment resolves to an automatic left margin that carries the
   control to the right edge of whatever width the widget was given. A theme
   rule cannot outrank generated per-element CSS on specificity alone, and the
   alternative is editing builder settings that the next person to open
   Elementor would not connect to this behaviour. Measured before: the widget
   was 131px wide to hold a 44px control. */
@media (max-width: 1024px) {
  .mbg-header .mbg-header-nav { flex-wrap: nowrap !important; }
  .mbg-header .mbg-main-nav { flex: 0 0 auto !important; width: 44px !important; }
  .mbg-header .mbg-main-nav .elementor-menu-toggle {
    width: 44px !important;
    min-width: 44px !important;
    height: 44px;
    margin: 0 !important;
    padding: 0 !important;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .mbg-header-cta .elementor-button { padding: 10px 16px; font-size: 0.9375rem; }
}

/* The header row is one row at every width, stated rather than hoped for. The
   children are allowed to shrink so a future addition squeezes visibly during
   testing instead of silently folding onto a second line in production. */
.mbg-header > .e-con-inner { flex-wrap: nowrap !important; }
.mbg-header > .e-con-inner > * { min-width: 0; }

@media (max-width: 767px) {
  .mbg-header-cta .elementor-button { padding: 10px 14px; font-size: 0.875rem; }
  .mbg-header .mbg-header-nav { gap: 10px; }
}

/* Below 480px the typographic wordmark is withdrawn and the emblem is given
   the room it releases, so it ends up LARGER on a phone than it was, not
   smaller. Section 44 already made this trade at 360px, for the menu control.
   It now has to be made at 480px, because the row also carries the single
   Contact Us control and the full lockup plus that control does not fit a
   390px phone. Measured: emblem 72 + gaps 18 + menu 44 + Contact 81 + padding
   48 = 263px, inside a 320px viewport with room to spare.

   The company mark itself is never reduced to make room for a duplicate: the
   duplicate is gone. What is withdrawn here is the typographic wordmark beside
   the mark, and a header with no reachable Contact would be the worse trade. */
@media (max-width: 480px) {
  :root { --mbg-mark-w: 72px; --mbg-name-size: 1.3125rem; --mbg-sub-size: 0.6875rem; }
  /* Hidden from the layout, NOT from assistive technology.

     The header logo is an anchor whose only other child is the emblem image,
     and that image is decorative with an empty alt. Removing the wordmark with
     display:none therefore left the link with no accessible name at all: axe
     reported link-name, serious, on every page at 375px. A screen-reader user
     would have heard "link" and nothing else where the site identity should be.

     The same fault existed below 360px before this batch, from the rule in
     mbg.css section 14, and was missed because the automated pass ran at 375
     and 1440. Taking the text out of the flow rather than out of the document
     fixes both. position:absolute keeps the row width unaffected. */
  .mbg-header .mbg-wordmark-wrap {
    display: block;
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
  .mbg-header .mbg-logo-lockup { gap: 0; }
  .mbg-header .mbg-header-nav { gap: 8px; }
  .mbg-header > .e-con-inner { gap: 10px; }
  .mbg-header-cta .elementor-button { padding: 10px 12px; font-size: 0.8125rem; }
}

@media (max-width: 374px) {
  .mbg-header-cta .elementor-button { padding: 10px 10px; font-size: 0.78125rem; }
}

/* --------------------------------------------------------------------------
   54. Concise principle list

   The homepage now states the six commitments in one line each and links to
   About for the consequence behind each one. The flip cards moved to About,
   where the detail belongs. A plain list here is the point: six controls on a
   page whose job is orientation would be six decisions nobody asked for.
   -------------------------------------------------------------------------- */

.mbg-tenets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(24px, 3vw, 44px) clamp(24px, 3vw, 40px);
}
@media (max-width: 900px) { .mbg-tenets { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .mbg-tenets { grid-template-columns: 1fr; } }

.mbg-tenets > li {
  border-top: 2px solid var(--mbg-line);
  padding-top: 18px;
  min-width: 0;
}
.mbg-tenets > li h3 { margin: 0 0 8px; font-size: 1.1875rem; }
.mbg-tenets > li p {
  margin: 0;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--mbg-ink-muted);
  overflow-wrap: anywhere;
}
.mbg-band-dark .mbg-tenets > li { border-top-color: rgba(255, 255, 255, 0.18); }
.mbg-band-dark .mbg-tenets > li p { color: #C8CFD9; }

/* --------------------------------------------------------------------------
   55. Retention table on the Privacy Policy

   A real table, because the retention schedule is genuinely tabular: a record
   type and the period that applies to it. Row headers are th scope="row", so
   a screen reader announces the record name with the period rather than
   reading a wall of disconnected cells.

   The scroll wrapper is a labelled region with tabindex="0" so that if the
   table ever does exceed the viewport it can be reached and scrolled from the
   keyboard. At the widths this site is tested at it does not overflow, and
   1.4.10 exempts tables from the reflow requirement in any case.
   -------------------------------------------------------------------------- */

.mbg-table-scroll {
  max-width: 100%;
  overflow-x: auto;
  margin: 28px 0 24px;
}
.mbg-table-scroll:focus-visible {
  outline: 3px solid var(--mbg-accent);
  outline-offset: 3px;
}

.mbg-legal-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 1rem;
  line-height: 1.55;
}
.mbg-legal-table caption {
  text-align: left;
  font-family: var(--mbg-font-body);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--mbg-ink-muted);
  padding-bottom: 12px;
}
.mbg-legal-table th,
.mbg-legal-table td {
  text-align: left;
  vertical-align: top;
  padding: 12px 16px 12px 0;
  border-bottom: 1px solid var(--mbg-line);
  overflow-wrap: anywhere;
}
.mbg-legal-table thead th {
  border-bottom-width: 2px;
  border-bottom-color: var(--mbg-ink);
  font-family: var(--mbg-font-body);
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
}
.mbg-legal-table tbody th {
  font-weight: 600;
  color: var(--mbg-ink);
  padding-right: 24px;
  width: 46%;
}
.mbg-legal-table tbody td { color: var(--mbg-ink-muted); }
.mbg-legal-table tbody tr:last-child th,
.mbg-legal-table tbody tr:last-child td { border-bottom: none; }

/* At phone widths the two columns are given equal room rather than a fixed
   ratio, and the row header wraps instead of forcing the period column
   narrower than its longest word. */
@media (max-width: 560px) {
  .mbg-legal-table { font-size: 0.9375rem; }
  .mbg-legal-table th,
  .mbg-legal-table td { padding: 10px 10px 10px 0; }
  .mbg-legal-table tbody th { width: 44%; padding-right: 12px; }
}

/* The dates block now appears twice on each legal page: once at the top, so
   the effective date is visible without scrolling, and once at the foot. */
.mbg-legal-toc { margin-top: 4px; }

/* --------------------------------------------------------------------------
   56. Headings at 200% text

   1.4.4 Resize text and 1.4.10 Reflow, found by measurement rather than by
   reading: at a 320px viewport with the root font doubled to 32px, the single
   word "Accessibility" in the page-head H1 rendered 392px wide against a 320px
   viewport and produced horizontal scrolling. One unbreakable word is enough.

   Letting the heading break and hyphenate is the right remedy. Capping the
   heading in viewport units would have stopped the text scaling at all, which
   is precisely what the criterion exists to protect. The document carries
   lang="en-US", so hyphens:auto has a dictionary to work from.
   -------------------------------------------------------------------------- */

h1, h2, h3, h4, h5, h6,
.mbg-display,
.mbg-display-sm,
.elementor-heading-title {
  overflow-wrap: break-word;
  hyphens: auto;
}
