.elementor-kit-4{--e-global-color-primary:#652C90;--e-global-color-secondary:#1375BB;--e-global-color-text:#4A4548;--e-global-color-accent:#4A9BD4;--e-global-color-primdark:#3A1D59;--e-global-color-primlite:#EAD8F8;--e-global-color-secdark:#0F5C93;--e-global-color-accentdark:#0C3F59;--e-global-color-accentlite:#C4E4FB;--e-global-color-ink:#221E1F;--e-global-color-muted:#8A8487;--e-global-color-line:#E6E3E4;--e-global-color-surface:#F8F7F8;--e-global-color-white:#FFFFFF;--e-global-color-formfield:#F8F7F8;--e-global-color-formtext:#221E1F;--e-global-color-formaccent:#1375BB;--e-global-color-formbtn:#1375BB;--e-global-color-formbtnhov:#0F5C93;--e-global-color-6c6dcad:#FFFFFF00;--e-global-color-ab07982:#D4A24A;--e-global-color-636cb57:#6CD6A6;--e-global-typography-primary-font-family:"futura-pt";--e-global-typography-primary-font-weight:700;--e-global-typography-primary-text-transform:none;--e-global-typography-primary-letter-spacing:0px;--e-global-typography-secondary-font-family:"futura-pt";--e-global-typography-secondary-font-weight:700;--e-global-typography-secondary-text-transform:none;--e-global-typography-secondary-letter-spacing:0px;--e-global-typography-text-font-family:"futura-pt";--e-global-typography-text-font-weight:500;--e-global-typography-text-text-transform:none;--e-global-typography-text-letter-spacing:0px;--e-global-typography-accent-font-family:"futura-pt";--e-global-typography-accent-font-weight:700;--e-global-typography-accent-text-transform:none;--e-global-typography-accent-letter-spacing:0px;--e-global-typography-display-font-family:"futura-pt";--e-global-typography-display-font-size:65px;--e-global-typography-display-font-weight:700;--e-global-typography-display-text-transform:none;--e-global-typography-display-line-height:1.1em;--e-global-typography-display-letter-spacing:0px;--e-global-typography-heading-1-font-family:"futura-pt";--e-global-typography-heading-1-font-size:40px;--e-global-typography-heading-1-font-weight:700;--e-global-typography-heading-1-text-transform:none;--e-global-typography-heading-1-line-height:1.15em;--e-global-typography-heading-1-letter-spacing:0px;--e-global-typography-heading-2-font-family:"futura-pt";--e-global-typography-heading-2-font-size:32px;--e-global-typography-heading-2-font-weight:700;--e-global-typography-heading-2-text-transform:none;--e-global-typography-heading-2-line-height:1.2em;--e-global-typography-heading-2-letter-spacing:0px;--e-global-typography-heading-3-font-family:"futura-pt";--e-global-typography-heading-3-font-size:24px;--e-global-typography-heading-3-font-weight:700;--e-global-typography-heading-3-text-transform:none;--e-global-typography-heading-3-line-height:1.3em;--e-global-typography-heading-3-letter-spacing:0px;--e-global-typography-heading-4-font-family:"futura-pt";--e-global-typography-heading-4-font-size:20px;--e-global-typography-heading-4-font-weight:700;--e-global-typography-heading-4-text-transform:none;--e-global-typography-heading-4-line-height:1.35em;--e-global-typography-heading-4-letter-spacing:0px;--e-global-typography-intro-font-family:"futura-pt";--e-global-typography-intro-font-size:21px;--e-global-typography-intro-font-weight:500;--e-global-typography-intro-text-transform:none;--e-global-typography-intro-line-height:1.3em;--e-global-typography-intro-letter-spacing:0px;--e-global-typography-body-font-family:"futura-pt";--e-global-typography-body-font-size:18px;--e-global-typography-body-font-weight:500;--e-global-typography-body-text-transform:none;--e-global-typography-body-line-height:1.65em;--e-global-typography-body-letter-spacing:0px;--e-global-typography-caption-font-family:"futura-pt";--e-global-typography-caption-font-size:14px;--e-global-typography-caption-font-weight:500;--e-global-typography-caption-text-transform:none;--e-global-typography-caption-line-height:1.5em;--e-global-typography-caption-letter-spacing:0px;--e-global-typography-eyebrow-font-family:"futura-pt";--e-global-typography-eyebrow-font-size:14px;--e-global-typography-eyebrow-font-weight:700;--e-global-typography-eyebrow-text-transform:uppercase;--e-global-typography-eyebrow-line-height:1.4em;--e-global-typography-eyebrow-letter-spacing:0.12em;--e-global-typography-menu-font-family:"futura-pt";--e-global-typography-menu-font-size:16px;--e-global-typography-menu-font-weight:700;--e-global-typography-menu-text-transform:uppercase;--e-global-typography-menu-line-height:1.4em;--e-global-typography-menu-letter-spacing:0px;--e-global-typography-form-label-font-family:"futura-pt";--e-global-typography-form-label-font-size:16px;--e-global-typography-form-label-font-weight:700;--e-global-typography-form-label-text-transform:none;--e-global-typography-form-label-line-height:1.4em;--e-global-typography-form-label-letter-spacing:0px;--e-global-typography-form-input-font-family:"futura-pt";--e-global-typography-form-input-font-size:16px;--e-global-typography-form-input-font-weight:500;--e-global-typography-form-input-text-transform:none;--e-global-typography-form-input-line-height:1.5em;--e-global-typography-form-input-letter-spacing:0px;--e-global-typography-form-button-font-family:"futura-pt";--e-global-typography-form-button-font-size:12px;--e-global-typography-form-button-font-weight:700;--e-global-typography-form-button-text-transform:uppercase;--e-global-typography-form-button-line-height:1.2em;--e-global-typography-form-button-letter-spacing:0.12em;--e-global-typography-button-font-family:"futura-pt";--e-global-typography-button-font-size:16px;--e-global-typography-button-font-weight:700;--e-global-typography-button-text-transform:uppercase;--e-global-typography-button-line-height:1.4em;--e-global-typography-button-letter-spacing:0em;color:var( --e-global-color-text );}.elementor-kit-4 button,.elementor-kit-4 input[type="button"],.elementor-kit-4 input[type="submit"],.elementor-kit-4 .elementor-button{background-color:var( --e-global-color-secondary );font-family:var( --e-global-typography-button-font-family ), Sans-serif;font-size:var( --e-global-typography-button-font-size );font-weight:var( --e-global-typography-button-font-weight );text-transform:var( --e-global-typography-button-text-transform );line-height:var( --e-global-typography-button-line-height );letter-spacing:var( --e-global-typography-button-letter-spacing );color:var( --e-global-color-white );border-style:solid;border-width:2px 2px 2px 2px;border-color:var( --e-global-color-secondary );border-radius:999px 999px 999px 999px;padding:14px 32px 14px 32px;}.elementor-kit-4 button:hover,.elementor-kit-4 button:focus,.elementor-kit-4 input[type="button"]:hover,.elementor-kit-4 input[type="button"]:focus,.elementor-kit-4 input[type="submit"]:hover,.elementor-kit-4 input[type="submit"]:focus,.elementor-kit-4 .elementor-button:hover,.elementor-kit-4 .elementor-button:focus{background-color:var( --e-global-color-primary );color:var( --e-global-color-white );}.elementor-kit-4 e-page-transition{background-color:#FFBC7D;}.elementor-kit-4 a{color:var( --e-global-color-primary );}.elementor-kit-4 a:hover{color:var( --e-global-color-primdark );}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1200px;}.e-con{--container-max-width:1200px;}.elementor-widget:not(:last-child){--kit-widget-spacing:20px;}.elementor-element{--widgets-spacing:20px 20px;--widgets-spacing-row:20px;--widgets-spacing-column:20px;}{}h1.entry-title{display:var(--page-title-display);}.site-header .site-branding{flex-direction:column;align-items:stretch;}.site-header{padding-inline-end:0px;padding-inline-start:0px;}.site-footer .site-branding{flex-direction:column;align-items:stretch;}@media(max-width:1024px){.elementor-kit-4 button,.elementor-kit-4 input[type="button"],.elementor-kit-4 input[type="submit"],.elementor-kit-4 .elementor-button{font-size:var( --e-global-typography-button-font-size );line-height:var( --e-global-typography-button-line-height );letter-spacing:var( --e-global-typography-button-letter-spacing );}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-kit-4{--e-global-typography-display-font-size:40px;--e-global-typography-heading-1-font-size:30px;--e-global-typography-heading-2-font-size:26px;}.elementor-kit-4 button,.elementor-kit-4 input[type="button"],.elementor-kit-4 input[type="submit"],.elementor-kit-4 .elementor-button{font-size:var( --e-global-typography-button-font-size );line-height:var( --e-global-typography-button-line-height );letter-spacing:var( --e-global-typography-button-letter-spacing );}.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}
/* Start custom CSS *//* Media frames — lock an image widget to a fixed aspect ratio.
   Every variant is listed because the modifiers are used on their own. */
.media-frame img, .media-frame--wide img, .media-frame--square img, .media-frame--tall img {
  width: 100% !important;
  height: auto !important;
  object-fit: cover !important;
  object-position: center center !important;
  display: block;
}
.media-frame img         { aspect-ratio: 3 / 2 !important; }
.media-frame--wide img   { aspect-ratio: 16 / 9 !important; }
.media-frame--square img { aspect-ratio: 1 / 1 !important; }
.media-frame--tall img   { aspect-ratio: 4 / 5 !important; }
.media-frame--top img    { object-position: center top !important; }
.media-frame--bottom img { object-position: center bottom !important; }
/* Box frames — lock a CONTAINER to a fixed shape: add box-square, box-wide or
   box-tall in Advanced > CSS Classes. Height follows the container's width, so
   the shape holds at every screen size. Leave the container's Min Height empty
   (a min height overrides the ratio). Content that does not fit makes the box
   taller instead of being cut off. New V4 Flexbox / Div Block elements have a
   native Aspect Ratio control under Style > Size and do not need these.

   ⚠️ In a row, Elementor stretches children to the tallest sibling, which
   overrides the ratio (tested: a square beside a text column measured 294x757).
   So the boxes default to top alignment through Elementor's own --align-self
   variable. The container's Advanced > Align Self control still wins, because
   Elementor writes it with a more specific .elementor-kit-4. */
.e-con.box-square, .e-con.box-wide, .e-con.box-tall { --align-self: flex-start; }
.box-square { aspect-ratio: 1 / 1; }
.box-wide   { aspect-ratio: 16 / 9; }
.box-tall   { aspect-ratio: 4 / 5; }
/* ⚠️ The anti-spam honeypot renders as an ordinary visible field ("Leave blank").
   Gravity Forms 2.10 ships no rule to hide it and relies on the theme, so a
   blueprint site shows it to visitors and to spam bots that read CSS. Hide it
   everywhere; a honeypot only works unseen. Found on BBCC contact 2026-09-18. */
.gform_wrapper .gfield--type-honeypot,
.gform_wrapper .gform_validation_container { display: none !important; }

/* ===== GRAVITY FORMS =====
   Nothing here is a literal value. Everything reads a Global Colour or Global
   Font, so forms restyle from Site Settings like the rest of the site:
     Global Colors : Form Field / Form Text / Form Accent / Form Button / Form Button Hover
     Global Fonts  : Form Label / Form Input / Form Button

   GF's Orbital theme is driven by its own --gf-* variables. It declares them on
   .gform-theme--framework and its stylesheet loads AFTER the Elementor kit, so
   a plain .gform_wrapper block loses the cascade — hence the doubled class. */
.gform_wrapper.gform-theme,
.gform_wrapper.gform-theme--framework,
.gform_wrapper.gform-theme--api {
  --gf-ctrl-bg-color:                   var(--e-global-color-formfield);
  --gf-ctrl-border-color:               transparent;
  --gf-ctrl-color:                      var(--e-global-color-formtext);
  --gf-ctrl-label-color-primary:        var(--e-global-color-formtext);
  --gf-ctrl-radius:                     0;
  --gf-color-danger:                    var(--e-global-color-formaccent);
  --gf-ctrl-btn-bg-color-primary:       var(--e-global-color-formbtn);
  --gf-ctrl-btn-bg-color-hover-primary: var(--e-global-color-formbtnhov);
  --gf-ctrl-btn-color-primary:          var(--e-global-color-white);
  --gf-ctrl-btn-radius:                 var(--btn-radius, 999px);
}

/* A Gravity Form sitting on a dark band: the label and the (Required) marker
   are coloured for a light background by default and disappear. Add
   .form-on-dark to the container holding the form. */
.form-on-dark .gform_wrapper .gfield_label,
.form-on-dark .gform_wrapper .gform-field-label {
  color: var(--e-global-color-white) !important;
}
.form-on-dark .gform_wrapper .gfield_required {
  color: var(--e-global-color-primlite) !important;
}
/* Gravity Forms puts 24px between the last field and the submit. Against a
   full-width input that reads as crowded, so the kit sets its own. One value,
   applied to every form on the site — a form on a dark band is no different. */
:root { --form-submit-gap: 36px; }   /* on :root so YOUR SETTINGS can reach it */
.gform_wrapper .gform_footer,
.gform_wrapper .gform-footer {
  margin-top: var(--form-submit-gap, 36px) !important;
  padding-top: 0 !important;
}

/* ⚠️ The submit button's hover colour is Form Button Hover, which is Primary —
   the same colour as the dark band it sits on, so hovering made the button
   disappear. On a dark band it takes the outline treatment instead: this is
   `btn-outline-dark` + `btn-sm`, matched value for value, so the form button
   and a real Elementor button still look like the same system. */
.form-on-dark .gform_wrapper input[type="submit"],
.form-on-dark .gform_wrapper .gform_button,
.form-on-dark .gform_wrapper button.gform_button,
.form-on-dark .gform_wrapper .gform_footer input[type="submit"] {
  background-color: transparent !important;
  color:            var(--e-global-color-white) !important;
  border: 2px solid var(--e-global-color-white) !important;
  padding: var(--btn-pad-sm, 10px 20px) !important;
  transition: background-color .25s ease, border-color .25s ease, color .25s ease;
}
.form-on-dark .gform_wrapper input[type="submit"]:hover,
.form-on-dark .gform_wrapper .gform_button:hover,
.form-on-dark .gform_wrapper input[type="submit"]:focus,
.form-on-dark .gform_wrapper .gform_button:focus {
  background-color: transparent !important;
  border-color:     var(--e-global-color-primlite) !important;
  color:            var(--e-global-color-primlite) !important;
}

/* Explicit rules as well as the variables: they cover the legacy gravity-theme
   (which has no --gf-* variables at all) and anything Orbital styles directly. */
.gform_wrapper .gfield input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]),
.gform_wrapper .gfield textarea,
.gform_wrapper .gfield select {
  font-family:  var(--e-global-typography-form-input-font-family), sans-serif;
  font-size:    var(--e-global-typography-form-input-font-size);
  font-weight:  var(--e-global-typography-form-input-font-weight);
  line-height:  var(--e-global-typography-form-input-line-height);
  color:        var(--e-global-color-formtext);
  background-color: var(--e-global-color-formfield) !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 14px 16px;
}
.gform_wrapper .gfield input:focus,
.gform_wrapper .gfield textarea:focus,
.gform_wrapper .gfield select:focus {
  outline: 2px solid var(--e-global-color-formaccent);
  outline-offset: 0;
}
.gform_wrapper .gfield input::placeholder,
.gform_wrapper .gfield textarea::placeholder {
  color: var(--e-global-color-formtext);
  opacity: .55;
}
.gform_wrapper .gfield_label,
.gform_wrapper .gform-field-label {
  font-family: var(--e-global-typography-form-label-font-family), sans-serif;
  font-size:   var(--e-global-typography-form-label-font-size);
  font-weight: var(--e-global-typography-form-label-font-weight);
  color:       var(--e-global-color-formtext);
  margin-bottom: 8px;
}
.gform_wrapper .gfield_required {
  color: var(--e-global-color-formaccent);
  font-style: italic;
  font-weight: 400;
}
.gform_wrapper input[type="submit"],
.gform_wrapper .gform_button,
.gform_wrapper button.gform_button,
.gform_wrapper .gform_footer input[type="submit"] {
  background-color: var(--e-global-color-formbtn) !important;
  color:            var(--e-global-color-white) !important;
  font-family:      var(--e-global-typography-form-button-font-family), sans-serif !important;
  font-size:        var(--e-global-typography-form-button-font-size) !important;
  font-weight:      var(--e-global-typography-form-button-font-weight) !important;
  text-transform:   var(--e-global-typography-form-button-text-transform) !important;
  letter-spacing:   var(--e-global-typography-form-button-letter-spacing) !important;
  border: none !important;
  border-radius: var(--btn-radius, 999px) !important;
  padding: 16px 34px !important;
  cursor: pointer;
  transition: background-color .25s ease;
}
.gform_wrapper input[type="submit"]:hover,
.gform_wrapper .gform_button:hover,
.gform_wrapper input[type="submit"]:focus,
.gform_wrapper .gform_button:focus {
  background-color: var(--e-global-color-formbtnhov) !important;
  color:            var(--e-global-color-white) !important;
}
/* ===== BUTTONS =====
   Four designs, taken straight from the block library, plus one size class
   that stacks with any of them.

       .btn-solid          fill Secondary, white text        (13 blocks)
       .btn-outline-dark   transparent on photos/dark bands  (16 blocks)
       .btn-light          white on colour                    (2 blocks)
       .btn-outline-light  transparent on white               (1 block)

       .btn-sm             the tighter card size — add it to any of the above

   Type the class into the button widget's Advanced > CSS Classes box. For the
   default size, use no size class and it follows Site Settings > Buttons.

   Every colour reads a Global Colour, so the whole set restyles from
   Site Settings > Global Colors. Nothing here is a literal brand value.

   The class is doubled in each .elementor-kit-4 for the same reason the Gravity Forms
   block does it: it has to out-rank the kit's own Theme Style rule. */

:root {
  /* the one size step that exists in the library: 10/20 against the
     Theme Style's 14/32. Change it here and every .btn-sm follows. */
  --btn-pad-sm: 10px 20px;
}

/* =====================================================================
   SITE HEADER
   =====================================================================
   Two hooks, and that's the whole header system:

     .site-header on the header's ROOT container (mobile panel anchoring)
     .site-nav   on the header's Mega Menu widget
     #nav-cta    CSS ID on the one menu item that should look like a button
                 (menu item > Content > CSS ID). Leave it off and there is
                 simply no button — nothing here applies.

   Tune the header here, in one place:                                   */
:root {
  --nav-gutter:      12px;   /* mobile card inset from the screen edge   */
  --nav-row-pad:     17px 20px;
  --nav-card-radius: 14px;
  --nav-cta-gap:     20px;   /* space before the CTA on desktop          */
  --nav-card-max-offset: 120px; /* viewport left above/below the open card */
}

/* ---------------------------------------------------------------------
   ⚠️  The .elementor-kit-4s below are Elementor's OWN markup (.e-n-menu-*).
   They are private to the Mega Menu widget and have been renamed by
   Elementor before. If a plugin update breaks the header, this is the
   only section to check — nothing else in this file depends on them.
   --------------------------------------------------------------------- */

/* --- mobile: the panel opens from the bottom of the HEADER, not the toggle ---
   ⚠️ The dropdown panel is absolutely positioned, and its containing block was
   `.site-nav` — the menu WIDGET, which on mobile is only as tall as the toggle
   icon. So the panel opened 28px too high and sat on top of the logo.

   Stretching the widget does not fix it: `align-self: stretch` stretches it
   inside `.e-con-inner`, so the header's own bottom padding is still left over
   (it got the panel from 53px to 66px against an 81px bar — closer, still wrong).

   The panel has to resolve against the HEADER, so `.site-header` on the root
   container is the positioned ancestor and everything between it and the panel
   is forced back to static. Then `top: 100%` really is the header's bottom. */
@media (max-width: 1024px) {
  .site-header { position: relative; }
  /* ⚠️ Elementor gives EVERY container `position: relative` by default, so the
     row holding the logo and the nav was the real offset parent — the panel
     resolved against a 52px row and still opened 31px inside the bar. Every
     container inside the header has to go static so the root is the only
     positioned ancestor left. The panel is `.e-n-menu-wrapper`, not an `.e-con`,
     so it keeps its own absolute positioning. */
  .site-header .e-con { position: static !important; }
  .site-header .site-nav,
  .site-header .site-nav .e-n-menu { position: static !important; }
  .site-header .e-n-menu-wrapper {
    position: absolute !important;
    top: 100% !important;
    left: 0 !important;
    right: 0 !important;
    width: auto !important;
    max-width: none !important;
  }
}

/* --- mobile: the mega panel becomes a plain stacked list ---
   The dropdown content is built for a full-bleed DESKTOP mega menu: a row of
   columns, a utility strip, and a min-height so the panel has presence. Left
   alone at 390px that leaks straight into the accordion — the panel rendered
   390px wide inside a 366px card (so it overhung by 12px), the columns kept
   their desktop widths, and the 420px min-height opened a large empty gap
   under the links.

   Everything below only undoes desktop layout; nothing here restyles content. */
@media (max-width: 1024px) {
  /* the panel is sized for a full-bleed desktop mega menu — bring it back to
     the width of the card it now lives in */
  .site-header .e-n-menu-content {
    width: 100% !important;
    max-width: 100% !important;
    inset-inline: auto !important;
    margin-inline: 0 !important;
  }
  /* columns stack, and lose the desktop min-height that leaves a dead gap */
  .site-header .e-n-menu-content .e-con {
    width: 100% !important;
    max-width: 100% !important;
    flex-basis: auto !important;
    flex-direction: column !important;
    align-items: stretch !important;
    min-height: 0 !important;
    row-gap: 14px !important;
    column-gap: 0 !important;
    /* ⚠️⚠️ nowrap is not optional. These containers carry `flex-wrap: wrap`
       from the desktop design, and in a COLUMN flex container wrapping does not
       push overflow onto a new ROW — it pushes it into a new COLUMN to the
       RIGHT. So the promo card landed at x=338 in a 366px card and ran 246px
       off the side, while every other column stacked correctly.

       Setting the direction to column is therefore only half the job. Whenever
       a row is flipped to a column, its wrap has to be turned off with it. */
    flex-wrap: nowrap !important;
    /* ⚠️ And nowrap needs shrink turned off with it. Once the items can no
       longer wrap away, flex-shrink (1 by default) squeezes them to fit the
       height instead — a 185px group compressed into 116px, so each section
       heading printed on top of the previous list's last link. Overlapping
       text, from a rule that was only meant to stop a column appearing.

       Natural height + the card's own max-height and overflow-y is what makes
       a long menu scroll rather than collapse. */
    flex-shrink: 0 !important;
  }
  .site-header .e-n-menu-content .e-con .e-con { padding: 0 !important; }
  .site-header .e-n-menu-content > .e-con      { padding: 0 !important; }
  .site-header .e-n-menu-content > .e-con > .e-con { padding: 10px 20px 18px !important; }

  /* A mega menu has more in it than a phone screen is tall. Let the CARD
     scroll rather than run off the bottom of the window with no way back. */
  .site-header .e-n-menu-heading {
    max-height: calc(100vh - var(--nav-card-max-offset, 120px)) !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
  }
}

/* --- desktop: the dropdown hugs the bar ------------------------------------
   Two things put a visible strip of page between the header and its dropdown,
   and it is worst once the header is stuck, where the whole bar is only 61px:

     1. Elementor gives `.e-n-menu-content` a 26px transparent TOP PADDING as a
        hover bridge, so the pointer can cross from the item to the panel.
     2. The panel hangs off the NAV, not the header — and the nav sits inside
        the container's own padding, so it ends ~9px short of the bar.

   ⚠️ Zeroing the padding alone is NOT enough. It makes the panel start inside
   the bar, and the panel's z-index is 2147483620 against the header's 99 — so
   it paints OVER the header's bottom border and shadow.

   So the panel is anchored to the HEADER instead. Every ancestor between the
   two has to go static or the panel resolves against the nav and lands short —
   the same lesson as the mobile panel. No hover bridge is needed once the two
   are flush. */
@media (min-width: 1025px) {
  .site-header { position: relative; }
  .site-header .e-con,
  .site-header .site-nav,
  .site-header .e-n-menu,
  .site-header .e-n-menu-wrapper { position: static !important; }
  .site-header .e-n-menu-content {
    position: absolute !important;
    top: 100% !important;
    left: 0 !important;
    right: 0 !important;
    padding-top: 0 !important;
  }
}

/* --- desktop: one line, full height so the panel hangs off the bottom edge --- */
@media (min-width: 1025px) {
  .site-nav {
    flex-shrink: 0;
    align-self: stretch;            /* panel hangs from the header's edge, not the nav's middle */
  }
  .site-nav .e-n-menu,
  .site-nav .e-n-menu-wrapper,
  .site-nav .e-n-menu-heading {
    height: 100%;
  }
  .site-nav .e-n-menu-heading {
    align-items: center;
    /* Elementor wraps the row, which drops an item to a second line */
    flex-wrap: nowrap !important;
    min-width: max-content;
  }
  .site-nav .e-n-menu-title {
    white-space: nowrap;
  }
}

/* --- mobile: the stacked card --- */
@media (max-width: 1024px) {
  /* Elementor pins the wrapper to a fixed height via top/bottom insets, which
     clips the list to one row; and spans it edge to edge with negative
     left/right insets, so a margin can't inset it. Use it as the scroll area
     and gutter only, and put the card on the list inside it. */
  .site-nav .e-n-menu-wrapper {
    height: auto !important;
    bottom: auto !important;
    max-height: calc(100vh - 140px);
    overflow-y: auto;
    overflow-x: hidden;
    padding-inline: var(--nav-gutter);
    background-color: transparent !important;
  }
  .site-nav .e-n-menu {
    justify-content: center;        /* toggle on the logo's centre line */
  }

  .site-nav .e-n-menu-heading {
    flex-direction: column !important;
    align-items: stretch !important;
    flex-wrap: nowrap !important;
    width: 100% !important;
    gap: 0 !important;
    padding-block: 6px;
    background-color: var(--e-global-color-white);
    border-radius: var(--nav-card-radius);
    box-shadow: 0 18px 40px -8px rgba(0, 0, 0, .18);
  }
  .site-nav .e-n-menu-item {
    width: 100% !important;
  }

  /* each row: label left, chevron right, hairline between */
  .site-nav .e-n-menu-title {
    justify-content: space-between !important;
    width: 100% !important;
    height: auto !important;
    padding: var(--nav-row-pad) !important;
    background-color: transparent !important;
    border-bottom: 1px solid var(--e-global-color-line) !important;
  }
  .site-nav .e-n-menu-item:last-child .e-n-menu-title {
    border-bottom: 0 !important;
  }

  .site-nav .e-n-menu-title-text {
    font-family: var(--e-global-typography-menu-font-family), sans-serif;
    font-size: var(--e-global-typography-menu-font-size);
    font-weight: var(--e-global-typography-menu-font-weight);
    letter-spacing: var(--e-global-typography-menu-letter-spacing);
    text-transform: var(--e-global-typography-menu-text-transform);
  }

  /* an expanded submenu sits indented under its row, no card of its own */
  .site-nav .e-n-menu-content {
    box-shadow: none !important;
    border-radius: 0 !important;
  }
  .site-nav .e-n-menu-content > .e-con {
    padding-inline: 20px !important;
  }
}

/* --- the CTA item ----------------------------------------------------
   Keyed to the id, never to position, so reordering, renaming or adding
   items can't move the button onto the wrong one.

   Not one literal brand value: colour and type come from the globals;
   radius and padding come from --btn-radius / --btn-padding, which the
   solmos-button-radius mu-plugin publishes straight off Site Settings >
   Buttons. This CTA and a real .btn-solid stay in step by construction.

   Everything sits on #nav-cta itself — no parent .elementor-kit-4 needed, so there
   is no :has() dependency. The divider above it on mobile is just the
   previous row's own hairline.                                          */
#nav-cta,
#nav-cta-sticky {
  background-color: var(--e-global-color-secondary);
  border: 2px solid var(--e-global-color-secondary);
  border-radius: var(--btn-radius, 999px);
  padding: var(--btn-padding, 14px 32px) !important;
  transition: background-color .2s ease, border-color .2s ease;
}
#nav-cta:hover,
#nav-cta-sticky:hover {
  background-color: var(--e-global-color-primary);
  border-color: var(--e-global-color-primary);
}
#nav-cta .e-n-menu-title-text,
#nav-cta-sticky .e-n-menu-title-text {
  color: var(--e-global-color-white) !important;
  font-family: var(--e-global-typography-button-font-family), sans-serif;
  font-size: var(--e-global-typography-button-font-size);
  font-weight: var(--e-global-typography-button-font-weight);
  letter-spacing: var(--e-global-typography-button-letter-spacing);
  text-transform: var(--e-global-typography-button-text-transform);
}
/* a CTA never needs the dropdown chevron */
#nav-cta .e-n-menu-dropdown-icon,
#nav-cta-sticky .e-n-menu-dropdown-icon {
  display: none;
}

@media (min-width: 1025px) {
  #nav-cta,
  #nav-cta-sticky {
    margin-inline-start: var(--nav-cta-gap);
  }
}
@media (max-width: 1024px) {
  #nav-cta,
  #nav-cta-sticky {
    justify-content: center !important;
    /* .site-nav forces every row to width:100%, which would eat these margins */
    width: auto !important;
    margin: 12px 20px 16px;
    /* .site-nav clears every row's background; the CTA keeps its fill */
    background-color: var(--e-global-color-secondary) !important;
    border-bottom: 2px solid var(--e-global-color-secondary) !important;
  }
  #nav-cta:hover,
  #nav-cta-sticky:hover {
    background-color: var(--e-global-color-primary) !important;
    border-bottom-color: var(--e-global-color-primary) !important;
  }
}

/* --- overlay variant ---------------------------------------------------
   .header-overlay on the header's root container: no fill, and pulled up by
   its own height so the block below starts at the top of the page and the
   header floats over it.

   ⚠️ The pull-up has to equal the header's height, and CSS can't read that.
   It's one number per breakpoint, here:                                    */
:root {
  --header-overlay-h:        150px;   /* desktop bar height */
  --header-overlay-h-mobile:  80px;
}

.header-overlay {
  position: relative;
  z-index: 20;
  background-color: transparent !important;
  border-bottom: 0 !important;
  margin-bottom: calc(-1 * var(--header-overlay-h));
}
@media (max-width: 1024px) {
  .header-overlay {
    margin-bottom: calc(-1 * var(--header-overlay-h-mobile));
  }
}

/* Over a photo the nav has to be light. Desktop only — on mobile the items
   live inside the white card, where they must stay dark. */
@media (min-width: 1025px) {
  .header-overlay .e-n-menu-title-text {
    color: var(--e-global-color-white) !important;
  }
  .header-overlay .e-n-menu-title:hover .e-n-menu-title-text {
    color: var(--e-global-color-primlite) !important;
  }
  .header-overlay .e-n-menu-dropdown-icon svg {
    fill: var(--e-global-color-white);
  }
  /* the open panel is still a solid white sheet, so its own text stays dark */
  .header-overlay .e-n-menu-content .e-n-menu-title-text {
    color: var(--e-global-color-ink) !important;
  }
}

/* the toggle always sits on the hero, at every size */
.header-overlay .e-n-menu-toggle svg,
.header-overlay .e-n-menu-toggle i {
  fill: var(--e-global-color-white);
  color: var(--e-global-color-white);
}
.header-overlay .e-n-menu-toggle:hover svg,
.header-overlay .e-n-menu-toggle:hover i,
.header-overlay .e-n-menu-toggle[aria-expanded="true"] svg,
.header-overlay .e-n-menu-toggle[aria-expanded="true"] i {
  fill: var(--e-global-color-primlite);
  color: var(--e-global-color-primlite);
}

/* the overlay's CTA carries its own id, since ids are unique per page */
#nav-cta-overlay {
  background-color: var(--e-global-color-secondary);
  border: 2px solid var(--e-global-color-secondary);
  border-radius: var(--btn-radius, 999px);
  padding: var(--btn-padding, 14px 32px) !important;
  transition: background-color .2s ease, border-color .2s ease;
}
#nav-cta-overlay:hover {
  background-color: var(--e-global-color-primary);
  border-color: var(--e-global-color-primary);
}
#nav-cta-overlay .e-n-menu-title-text {
  color: var(--e-global-color-white) !important;
  font-family: var(--e-global-typography-button-font-family), sans-serif;
  font-size: var(--e-global-typography-button-font-size);
  font-weight: var(--e-global-typography-button-font-weight);
  letter-spacing: var(--e-global-typography-button-letter-spacing);
  text-transform: var(--e-global-typography-button-text-transform);
}
#nav-cta-overlay .e-n-menu-dropdown-icon { display: none; }
@media (min-width: 1025px) {
  #nav-cta-overlay { margin-inline-start: var(--nav-cta-gap); }
}
@media (max-width: 1024px) {
  #nav-cta-overlay {
    justify-content: center !important;
    width: auto !important;
    margin: 12px 20px 16px;
    background-color: var(--e-global-color-secondary) !important;
    border-bottom: 2px solid var(--e-global-color-secondary) !important;
  }
}

/* --- dropdown panel: line its contents up with a boxed header ----------
   Add .nav-panel to a panel wrapper (the container holding the columns row
   and the utility strip). The panel is full-bleed while the header bar is
   boxed, so without this the columns start at the panel's own padding while
   the logo starts at the boxed container's edge.

   Pads each row in by however far the box is inset. Backgrounds still run
   full width — only the contents move — which keeps the utility strip's
   tint bleeding edge to edge. The gutter floors at 40px to match the bar. */
.nav-panel.nav-panel > .e-con {
  padding-inline: max(40px, calc((100% - var(--container-max-width, 1200px)) / 2));
}

/* Keep every dropdown the same depth so the panel doesn't jump between items.
   A floor, not a fixed height — a panel with more content still grows. The
   columns are capped by the boxed container, so the tallest panel measures the
   same at every width; this isn't a value that drifts with the viewport. */
.nav-panel.nav-panel > .e-con:first-child {
  min-height: var(--nav-panel-min-height, 420px);
}

/* --- the toggle (hamburger) -------------------------------------------
   Elementor renders it as a real <button>, so the Theme Style button rule
   (which targets `.elementor-kit-N button`) was styling it: pill radius, a
   Primary fill when open, white icon. That's the ringed-badge look, and it
   had nothing to do with the menu widget's settings. Reset it to a bare icon,
   then colour it from the globals: Primary, Secondary on hover and open.

   No class needed — this is correct for every mega menu on the site.       */
.e-n-menu-toggle,
.e-n-menu-toggle:hover,
.e-n-menu-toggle:focus,
.e-n-menu-toggle[aria-expanded="true"] {
  background: none !important;
  background-color: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
}
/* the icon is an inline SVG (fill) or an icon font (color) — cover both */
.e-n-menu-toggle svg,
.e-n-menu-toggle i {
  fill: var(--e-global-color-primary);
  color: var(--e-global-color-primary);
  transition: fill .2s ease, color .2s ease;
}
.e-n-menu-toggle:hover svg,
.e-n-menu-toggle:hover i,
.e-n-menu-toggle:focus svg,
.e-n-menu-toggle:focus i,
.e-n-menu-toggle[aria-expanded="true"] svg,
.e-n-menu-toggle[aria-expanded="true"] i {
  fill: var(--e-global-color-secondary);
  color: var(--e-global-color-secondary);
}

/* --- Type: every button follows the Button global font ------------------
   Site Settings > Global Fonts > Button is the one control for button type.
   Change its size or family there and every button on the site follows,
   without touching Eyebrow (which 17 headings and the blog widget share).

   Read as variables rather than set on the Theme Style, because a Theme Style
   typography control cannot be bound to a Global Font — Elementor ignores a
   __globals__ binding on a typography group. This gets the same result and
   survives a client editing the Button style. */
.elementor-kit-4 button,
.elementor-kit-4 input[type="button"],
.elementor-kit-4 input[type="submit"],
.elementor-kit-4 .elementor-button {
  font-family:     var(--e-global-typography-button-font-family), sans-serif;
  font-size:       var(--e-global-typography-button-font-size);
  font-weight:     var(--e-global-typography-button-font-weight);
  line-height:     var(--e-global-typography-button-line-height);
  letter-spacing:  var(--e-global-typography-button-letter-spacing);
  text-transform:  var(--e-global-typography-button-text-transform);
}

/* Shared frame. The Theme Style sets radius and typography; the border is
   what every one of these designs has in common. */
.btn-solid .elementor-button,
.btn-outline-dark .elementor-button,
.btn-light .elementor-button,
.btn-outline-light .elementor-button {
  border-style: solid;
  border-width: 2px;
  transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}

/* --- Solid --------------------------------------------------------------- */
.btn-solid.btn-solid .elementor-button {
  background-color: var(--e-global-color-secondary);
  border-color: var(--e-global-color-secondary);
  color: var(--e-global-color-white);
}
.btn-solid.btn-solid .elementor-button:hover,
.btn-solid.btn-solid .elementor-button:focus {
  background-color: var(--e-global-color-primary);
  border-color: var(--e-global-color-primary);
  color: var(--e-global-color-white);
}

/* --- Outline on dark ----------------------------------------------------- */
.btn-outline-dark.btn-outline-dark .elementor-button {
  background-color: transparent;
  border-color: var(--e-global-color-white);
  color: var(--e-global-color-white);
}
.btn-outline-dark.btn-outline-dark .elementor-button:hover,
.btn-outline-dark.btn-outline-dark .elementor-button:focus {
  background-color: transparent;
  border-color: var(--e-global-color-primlite);
  color: var(--e-global-color-primlite);
}

/* --- Light / reverse ----------------------------------------------------- */
.btn-light.btn-light .elementor-button {
  background-color: var(--e-global-color-white);
  border-color: var(--e-global-color-white);
  color: var(--e-global-color-primary);
}
.btn-light.btn-light .elementor-button:hover,
.btn-light.btn-light .elementor-button:focus {
  background-color: var(--e-global-color-secondary);
  border-color: var(--e-global-color-secondary);
  color: var(--e-global-color-white);
}

/* --- Outline on light ---------------------------------------------------- */
.btn-outline-light.btn-outline-light .elementor-button {
  background-color: transparent;
  border-color: var(--e-global-color-secondary);
  color: var(--e-global-color-secondary);
}
.btn-outline-light.btn-outline-light .elementor-button:hover,
.btn-outline-light.btn-outline-light .elementor-button:focus {
  background-color: transparent;
  border-color: var(--e-global-color-primary);
  color: var(--e-global-color-primary);
}

/* --- Size, stacks with any of the four ----------------------------------- */
/* --- Icons follow the button's own colour ---------------------------------
   A look class sets `color` on the button, but Elementor renders a button icon
   as an inline SVG with its OWN `fill` (or an icon font with its own `color`),
   so the icon kept its resting colour while the label changed on hover.
   currentColor makes both track the button, in every state, so a look class
   still only has to declare `color` once and nothing needs a hover rule. */
.elementor-button .elementor-button-icon,
.elementor-button .elementor-button-icon i,
.elementor-button .elementor-button-icon svg,
.elementor-button .elementor-button-icon svg * {
  fill: currentColor !important;
  color: currentColor !important;
  transition: fill .2s ease, color .2s ease;
}

.btn-sm.btn-sm .elementor-button {
  padding: var(--btn-pad-sm);
}

/* --- Paired buttons, stacks with any look and any size -------------------
   For the two-button rows: Hero Full Bleed, Hero Homepage, Hero Two Button,
   CTA Banner, Mission + Counters.

   The container already decides how wide that row is, and already handles
   the responsive step (row + wrap, and CTA Banner goes column on mobile).
   So the button's only job is to split the row evenly with its partner.

   This replaces the fixed 45% those buttons carry today. That 45% was being
   applied on top of container widths of 100%, 55% and 46%, which is why the
   same button came out a different size in each hero.

       desktop / tablet   the pair splits the row evenly, gap respected
       mobile  <=767      each goes full width and stacks

   Default (no class) = the button hugs its label, which is every other
   button in the library. */
.btn-pair.btn-pair {
  flex: 1 1 0;
  width: auto;
  max-width: none;
  --container-widget-width: auto;
  --container-widget-flex-grow: 1;
}
.btn-pair.btn-pair .elementor-button {
  width: 100%;
}

@media (max-width: 767px) {
  .btn-pair.btn-pair {
    /* ⚠️⚠️ Do NOT use a flex basis here. CTA Banner flips its container to
       COLUMN on mobile, and in a column flex container the basis is the MAIN
       axis — i.e. HEIGHT. `flex: 1 1 100%` therefore stretched the widget to
       144px around a 49px button, leaving 95px of dead space under each one.

       `width: 100%` does the widening in both cases: in a wrapping row it
       forces each button onto its own line, and in a column it fills the
       width. `align-self: stretch` covers a column whose align-items is
       centre. Height stays whatever the button needs. */
    flex: 0 0 auto;
    width: 100%;
    align-self: stretch;
  }
}
/* =====================================================================
   .header-sticky — the header pins to the top on scroll
   =====================================================================
   Elementor Pro's own sticky effect does the pinning (Advanced > Motion
   Effects > Sticky: Top). It adds .elementor-sticky--effects to the element
   once the page has scrolled past "Effects Offset", so the "solid background
   appears on scroll" behaviour is plain CSS off a native hook — no JavaScript,
   and nothing here runs until the user actually scrolls.

   At rest the header is whatever it already was. Once stuck it gains a fill,
   a shadow and a slightly tighter bar, so it reads as a layer above the page.

   ⚠️ SET "EFFECTS OFFSET" TO THE HEADER'S OWN HEIGHT (+ a little), per device.
   Below that point the header scrolls away like a normal header; past it, the
   compact bar slides down from the top. With a small offset (it was 40) the bar
   shrank while still on screen, left its original height behind as a white gap
   and snapped the logo width: that is the "jumpy" version. BBCC 2026-09-15:
   183px desktop / 113px tablet + mobile → offsets 200 / 130 / 130. */
/* ⚠️ These live on :root, NOT on .header-sticky. A variable declared on the
   element itself cannot be overridden from :root — an element-level value beats
   an inherited one — so the YOUR SETTINGS block at the end of this file would
   silently do nothing. Every tunable belongs on :root for that reason. */
:root {
  --sticky-pad-block:     8px;        /* top/bottom padding once pinned     */
  --sticky-logo-h:        44px;       /* logo height once pinned (desktop)  */
  --sticky-logo-h-mobile: 34px;
  --sticky-cta-pad:       9px 22px;   /* CTA padding once pinned            */
  --sticky-slide:         .35s;       /* how long the bar takes to slide in  */
}
/* Before Effects Offset, Elementor has already pinned the header (position:
   fixed, inline) and left a same-height spacer in its place. Putting it back at
   its spot in the page makes it scroll away naturally over that spacer. */
.header-sticky.elementor-sticky--active:not(.elementor-sticky--effects) {
  position: absolute !important;
  top: auto !important;
}
/* Past the offset the full header is already out of view, so the compact bar
   comes in from above instead of changing size in front of the visitor. */
.header-sticky.elementor-sticky--effects {
  animation: header-slide-in var(--sticky-slide) ease-out both;
}
@keyframes header-slide-in {
  from { transform: translateY(-100%); }
  to   { transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .header-sticky.elementor-sticky--effects { animation: none; }
}
.header-sticky.elementor-sticky--effects {
  background-color: var(--e-global-color-white) !important;
  box-shadow: 0 4px 16px -8px rgba(0, 0, 0, .22);
}
/* ⚠️⚠️ A BOXED container carries its padding on `.e-con-inner`, NOT on the
   element itself. Setting padding on `.header-sticky` alone therefore ADDS to
   the 25px already sitting inside instead of replacing it — the bar measured
   111px when the arithmetic said 60, and then 77 when both were set and the
   two stacked. So: the padding goes on whichever element actually owns it, and
   the other is zeroed. `.e-con-boxed` is the class Elementor puts on a boxed
   container, so no :has() is needed. Block axis only — the horizontal gutter
   stays whatever the block set. */
.header-sticky.elementor-sticky--effects:not(.e-con-boxed) {
  padding-block: var(--sticky-pad-block) !important;
}
.header-sticky.elementor-sticky--effects.e-con-boxed {
  padding-block: 0 !important;
}
.header-sticky.elementor-sticky--effects > .e-con-inner {
  padding-block: var(--sticky-pad-block) !important;
}
/* ⚠️ Tightening the bar's PADDING alone does almost nothing — the logo is the
   tallest thing in the row, so it sets the height. Stuck at 10px padding the
   bar still measured 171px because the logo stayed at its full 100px. The logo
   has to come down too, and by height with width auto so any aspect survives. */
.header-sticky.elementor-sticky--effects .elementor-widget-image img {
  height: var(--sticky-logo-h) !important;
  width: auto !important;
}
.header-sticky.elementor-sticky--effects #nav-cta-sticky {
  padding: var(--sticky-cta-pad) !important;
}
@media (max-width: 1024px) {
  .header-sticky.elementor-sticky--effects .elementor-widget-image img {
    height: var(--sticky-logo-h-mobile) !important;
  }
}
/* an overlay header that is ALSO sticky starts transparent and only takes its
   fill once pinned — the two classes compose rather than fight */
.header-overlay.header-sticky.elementor-sticky--effects {
  background-color: var(--e-global-color-white) !important;
  margin-bottom: 0;
}

/* =====================================================================
   CONTENT TYPOGRAPHY — the fallback layer
   =====================================================================
   Everything Elementor renders is styled by a Global Font bound on the widget.
   Everything else is NOT: a blog post's body, a plugin's output, anything typed
   into the WordPress editor. Those fall through to the theme's defaults and end
   up looking like a different site.

   ⚠️ Elementor CANNOT bind a Theme Style typography control to a Global Font —
   `__globals__` is ignored on a typography group (the same trap as
   `h1_typography` and the Button style). Filling in Site Settings > Typography >
   h1..h6 therefore means LITERAL values, re-typed on every reskin.

   So this reads the Global Font CSS VARIABLES instead. Change Heading 2 in Site
   Settings and every content h2 moves with it. One place to edit, same as the
   buttons.

   ⚠️ A variable only exists for a property actually SET on the style. Every
   ladder step sets family, size, weight and line-height; only Eyebrow, Button
   and Form Button set letter-spacing and text-transform. Anything beyond those
   four therefore needs a fallback in the var(), or the rule silently does
   nothing.

   Proven inert against the library: setting these changed 0 of 241 heading
   elements on the review page, because a widget binding always out-ranks it. */
/* The page's base text. This used to be a LITERAL in Site Settings > Theme
   Style > Body (Poppins / 1.125rem / 400 / 1.65em), which duplicated the Body
   global at a different size and had to be re-typed on every reskin. Driven
   from the variable instead, so Body is the single source. */
.elementor-kit-4 {
  font-family: var(--e-global-typography-body-font-family), sans-serif;
  font-size:   var(--e-global-typography-body-font-size);
  font-weight: var(--e-global-typography-body-font-weight);
  line-height: var(--e-global-typography-body-line-height);
  color:       var(--e-global-color-text);
}

:root {
  /* which ladder step drives which tag — change these, not the rules below */
  --content-h1: heading-1;
  --content-h2: heading-2;
  --content-h3: heading-3;
  --content-h4: heading-4;
  --content-h5: intro;
  --content-h6: caption;
}

/* --- headings ------------------------------------------------------------- */
.elementor-kit-4 h1 {
  font-family:    var(--e-global-typography-heading-1-font-family), sans-serif;
  font-size:      var(--e-global-typography-heading-1-font-size);
  font-weight:    var(--e-global-typography-heading-1-font-weight);
  line-height:    var(--e-global-typography-heading-1-line-height);
  letter-spacing: var(--e-global-typography-heading-1-letter-spacing, normal);
  text-transform: var(--e-global-typography-heading-1-text-transform, none);
  color:          var(--e-global-color-ink);
}
.elementor-kit-4 h2 {
  font-family:    var(--e-global-typography-heading-2-font-family), sans-serif;
  font-size:      var(--e-global-typography-heading-2-font-size);
  font-weight:    var(--e-global-typography-heading-2-font-weight);
  line-height:    var(--e-global-typography-heading-2-line-height);
  letter-spacing: var(--e-global-typography-heading-2-letter-spacing, normal);
  text-transform: var(--e-global-typography-heading-2-text-transform, none);
  color:          var(--e-global-color-ink);
}
.elementor-kit-4 h3 {
  font-family:    var(--e-global-typography-heading-3-font-family), sans-serif;
  font-size:      var(--e-global-typography-heading-3-font-size);
  font-weight:    var(--e-global-typography-heading-3-font-weight);
  line-height:    var(--e-global-typography-heading-3-line-height);
  letter-spacing: var(--e-global-typography-heading-3-letter-spacing, normal);
  text-transform: var(--e-global-typography-heading-3-text-transform, none);
  color:          var(--e-global-color-ink);
}
.elementor-kit-4 h4 {
  font-family:    var(--e-global-typography-heading-4-font-family), sans-serif;
  font-size:      var(--e-global-typography-heading-4-font-size);
  font-weight:    var(--e-global-typography-heading-4-font-weight);
  line-height:    var(--e-global-typography-heading-4-line-height);
  letter-spacing: var(--e-global-typography-heading-4-letter-spacing, normal);
  text-transform: var(--e-global-typography-heading-4-text-transform, none);
  color:          var(--e-global-color-ink);
}
.elementor-kit-4 h5 {
  font-family:    var(--e-global-typography-intro-font-family), sans-serif;
  font-size:      var(--e-global-typography-intro-font-size);
  font-weight:    var(--e-global-typography-intro-font-weight);
  line-height:    var(--e-global-typography-intro-line-height);
  letter-spacing: var(--e-global-typography-intro-letter-spacing, normal);
  text-transform: var(--e-global-typography-intro-text-transform, none);
  color:          var(--e-global-color-ink);
}
.elementor-kit-4 h6 {
  font-family:    var(--e-global-typography-caption-font-family), sans-serif;
  font-size:      var(--e-global-typography-caption-font-size);
  font-weight:    var(--e-global-typography-caption-font-weight);
  line-height:    var(--e-global-typography-caption-line-height);
  letter-spacing: var(--e-global-typography-caption-letter-spacing, normal);
  text-transform: var(--e-global-typography-caption-text-transform, none);
  color:          var(--e-global-color-ink);
}

/* --- body copy, lists and quotes ------------------------------------------
   These are TYPE ONLY, and safe to apply everywhere: a widget's own Global Font
   binding always out-ranks them (0 of 241 headings moved when this went in). */
.elementor-kit-4 p,
.elementor-kit-4 li,
.elementor-kit-4 dd,
.elementor-kit-4 dt {
  font-family: var(--e-global-typography-body-font-family), sans-serif;
  font-size: var(--e-global-typography-body-font-size);
  font-weight: var(--e-global-typography-body-font-weight);
  line-height: var(--e-global-typography-body-line-height);
  color: var(--e-global-color-text);
}

/* =====================================================================
   ⚠️⚠️ EVERYTHING BELOW IS SCOPED TO REAL CONTENT, AND MUST STAY THAT WAY
   =====================================================================
   Type can be global because a binding out-ranks it. SPACING AND DECORATION
   CANNOT — nothing out-ranks them, so a global rule reaches straight into every
   widget. The first version of this file did exactly that and:

     · underlined 183 of 233 links in the library, because Elementor's icon-list
       is a real <ul><li><a> and `li a` matched every nav and footer link
     · added 7px between every icon-list item, on top of the widget's own
       spacing control
     · put a content margin on 141 heading widgets, because a heading widget
       renders as a real <h2>

   None of it showed up in a font-property fingerprint. Scope, don't exclude.

   ⚠️ `.page-content` / `.entry-content` are NOT content-only. Hello Elementor's
   default template wraps every Elementor-built page in `.page-content`, so
   without a guard those two scopes reach every widget on the page (found on
   BBCC 2026-09-15: 91px above the hero h1, underlined hero buttons). Their
   .elementor-kit-4s carry `:not(.elementor *)`, so they only style content that is
   NOT inside an Elementor document. Widgets that really hold prose are
   reached by the text-editor / post-content .elementor-kit-4s instead.

   ⚠️ Written FLAT, not with native CSS nesting. Nesting works in current Chrome
   and Safari but not in older browsers a client's visitors may be on, and a
   whole content stylesheet is not the place to find that out. */
.page-content h1:not(.elementor *),
.entry-content h1:not(.elementor *),
.elementor-widget-text-editor h1,
.elementor-widget-theme-post-content h1,
.page-content h2:not(.elementor *),
.entry-content h2:not(.elementor *),
.elementor-widget-text-editor h2,
.elementor-widget-theme-post-content h2,
.page-content h3:not(.elementor *),
.entry-content h3:not(.elementor *),
.elementor-widget-text-editor h3,
.elementor-widget-theme-post-content h3,
.page-content h4:not(.elementor *),
.entry-content h4:not(.elementor *),
.elementor-widget-text-editor h4,
.elementor-widget-theme-post-content h4,
.page-content h5:not(.elementor *),
.entry-content h5:not(.elementor *),
.elementor-widget-text-editor h5,
.elementor-widget-theme-post-content h5,
.page-content h6:not(.elementor *),
.entry-content h6:not(.elementor *),
.elementor-widget-text-editor h6,
.elementor-widget-theme-post-content h6 {
  margin-block: 1.4em .5em;
}
.page-content > *:first-child,
.entry-content > *:first-child,
.elementor-widget-text-editor > *:first-child,
.elementor-widget-theme-post-content > *:first-child { margin-top: 0; }

.page-content ul:not(.elementor *),
.entry-content ul:not(.elementor *),
.elementor-widget-text-editor ul,
.elementor-widget-theme-post-content ul,
.page-content ol:not(.elementor *),
.entry-content ol:not(.elementor *),
.elementor-widget-text-editor ol,
.elementor-widget-theme-post-content ol {
  padding-inline-start: 1.35em;
  margin-block: 1em;
}
.page-content li + li:not(.elementor *),
.entry-content li + li:not(.elementor *),
.elementor-widget-text-editor li + li,
.elementor-widget-theme-post-content li + li { margin-top: .4em; }

.page-content blockquote:not(.elementor *),
.entry-content blockquote:not(.elementor *),
.elementor-widget-text-editor blockquote,
.elementor-widget-theme-post-content blockquote {
  font-family: var(--e-global-typography-intro-font-family), sans-serif;
  font-size: var(--e-global-typography-intro-font-size);
  font-weight: var(--e-global-typography-intro-font-weight);
  line-height: var(--e-global-typography-intro-line-height);
  color: var(--e-global-color-ink);
  border-inline-start: 3px solid var(--e-global-color-primlite);
  padding-inline-start: 1.1em;
  margin-block: 1.4em;
}
.page-content blockquote p:not(.elementor *),
.entry-content blockquote p:not(.elementor *),
.elementor-widget-text-editor blockquote p,
.elementor-widget-theme-post-content blockquote p { font: inherit; color: inherit; }

/* prose links. Nav and footer lists are widgets, outside this scope, so they
   keep their own styling. */
.page-content a:not(.elementor *),
.entry-content a:not(.elementor *),
.elementor-widget-text-editor a,
.elementor-widget-theme-post-content a {
  color: var(--e-global-color-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color .2s ease;
}
.page-content a:hover:not(.elementor *),
.entry-content a:hover:not(.elementor *),
.elementor-widget-text-editor a:hover,
.elementor-widget-theme-post-content a:hover { color: var(--e-global-color-secondary); }

/* ==== YOUR SETTINGS — safe to edit. Kept when the CSS above is regenerated ====

   Uncomment a line to change it. Everything is optional; delete nothing.
   These sit last on purpose, so they override the generated rules above.        */
:root {

  /* --- mobile menu card ------------------------------------------------- */
  /* --nav-gutter:           12px;      inset from the screen edge           */
  /* --nav-card-radius:      14px;      corner radius                        */
  /* --nav-row-pad:          17px 20px; padding inside each menu row         */
  /* --nav-cta-gap:          20px;      space before the CTA on desktop      */
  /* --nav-card-max-offset: 120px;      screen left above/below an open menu */

  /* --- header once pinned ------------------------------------------------ */
  /* --sticky-logo-h:         44px;     logo height when stuck (desktop)     */
  /* --sticky-logo-h-mobile:  34px;                                          */
  /* --sticky-pad-block:       8px;     bar padding when stuck               */
  /* --sticky-cta-pad:      9px 22px;   CTA padding when stuck               */
  /* --sticky-slide:          .35s;     how long the stuck bar takes to slide in */

  /* --- overlay header ---------------------------------------------------- */
  /* --header-overlay-h:       150px;   MUST equal the bar's height          */
  /* --header-overlay-h-mobile: 80px;                                        */

  /* --- forms and buttons ------------------------------------------------- */
  /* --form-submit-gap:       36px;     last field -> submit button          */
  /* --btn-pad-sm:        10px 20px;    padding for btn-sm                   */

  /* --- which ladder step drives each content heading --------------------- */
  /* --content-h1: heading-1;  --content-h2: heading-2;  --content-h3: heading-3; */
  /* --content-h4: heading-4;  --content-h5: intro;      --content-h6: caption;   */
}
/* ==== END YOUR SETTINGS ==== *//* End custom CSS */