/* ============================================================================
   RSL HEADER — Rafi Securities Limited
   ----------------------------------------------------------------------------
   Deployed as /new/assets/header.css, loaded from Elementor Pro -> Custom Code
   (Location: <head><meta charset="utf-8">), matching how the existing /new/assets/ticker.css loads.

   Namespace: rslh-  /  --rslh-*
   Deliberately NOT rsl- or rslpx- : both are already taken on this site by the
   KSE-100 band and the live ticker widget.

   ON !important
   -------------
   The Elementor template injects its own rules at 0,4,0 through 0,10,0, e.g.

     .elementor-27 .elementor-element.elementor-element-d49c9a8
       .elementor-nav-menu--main .elementor-item   { padding: 2px 7px }
     .elementor-27 .elementor-element.elementor-element-d49c9a8
       .elementor-nav-menu .elementor-item          { font-size: 13px; line-height: 58px }

   An external sheet cannot win against that on specificity without pretending
   to be the template. !important is therefore used deliberately and ONLY where
   the template declares the same property — never as a blanket. Anything
   without !important is a property the template leaves alone.

   ON ANIMATION
   ------------
   Elementor's smartmenus sets a closed desktop submenu to display:none.
   A transition cannot run across a display change, so the desktop dropdown is
   animated with @keyframes instead: an animation starts whenever the element
   becomes displayed. The drawer is different — Elementor drives it with
   max-height and transform, both of which transition normally, so that one
   uses transitions.

   Class hooks the JS adds:
     html.rslh-ready        JS has confirmed the ticker moved below the header
     body.rslh-scrolled     page is scrolled past 24px
   ========================================================================= */


:root {
  /* Brand */
  --rslh-navy:      #00205B;
  --rslh-navy-deep: #001227;
  --rslh-blue:      #0044A5;
  --rslh-indigo:    #1F1F86;
  --rslh-white:     #FFFFFF;

  /* Structural heights — the single source of truth for the pinned unit.

     --rslh-h is the DESIGNED bar height and is used for the rail's min-height
     and for scroll-padding. header.js writes the MEASURED height to a separate
     token, --rslh-actual-h, which is what the ticker's sticky offset reads.

     Those must stay separate. Writing the measured height back into --rslh-h
     is a feedback loop: the header is the rail plus a 1px border, so each
     observer cycle makes the rail 1px taller than the header it just measured,
     and the bar ratchets upward forever. Two tokens, no cycle. */
  --rslh-h: 84px;
  --rslh-actual-h: var(--rslh-h);
  --rslh-tape-h: 52px;
  --rslh-logo-h: 68px;
  --rslh-gutter: clamp(14px, 2.4vw, 36px);
  --rslh-max: 100%;

  /* Motion system. Three durations, two curves, one stagger.
     Nothing is animated that is not listed here. */
  --rslh-t-2: 160ms;
  --rslh-t-3: 240ms;
  --rslh-e-out: cubic-bezier(0.22, 1, 0.36, 1);
  --rslh-e-std: cubic-bezier(0.4, 0, 0.2, 1);
  --rslh-stagger: 40ms;
}

@media (max-width: 1199px) {
  :root { --rslh-h: 90px; --rslh-logo-h: 86px; }
}
@media (max-width: 767px) {
  :root { --rslh-h: 82px; --rslh-tape-h: 36px; --rslh-logo-h: 76px; }
}
@media (max-width: 400px) {
  :root { --rslh-h: 76px; --rslh-logo-h: 70px; }
}

/* ---------------------------------------------------------------------------
   2. STICKY  (requirements R1 + R2)
   ----------------------------------------------------------------------------
   The site applies, with !important:

       html, body { overflow-x: hidden !important }

   from an Elementor HTML widget inside the FOOTER template, which is why it is
   the last style node on every page.

   overflow-x:hidden makes the element a scroll container, because its
   overflow-y then computes to auto. A position:sticky descendant sticks to
   THAT element's scrollport rather than the viewport — and body never scrolls,
   so the sticky never activates. That is why nothing on this site sticks
   today, including the inert position:sticky already sitting on the header's
   inner container.

   overflow-x: clip clips without creating a scroll container, so sticky works
   again. Guarded behind @supports so a browser without clip support keeps the
   original scroll behaviour rather than getting a half-applied layout. In that
   case the header simply does not stick — it is not broken.
   ------------------------------------------------------------------------ */

@supports (overflow-x: clip) {
  /* Specificity, not order — this is load-bearing.
     The hostile block is an Elementor HTML widget inside the FOOTER
     (.elementor-element-96d00c7), so it is the LAST style node on the page.
     Equal specificity plus !important on both sides means the later one wins,
     and a head stylesheet would lose. So these two selectors win on
     specificity instead, which is order-independent:

       :root      (0,1,0)  beats  html       (0,0,1)
       html body  (0,0,2)  beats  body       (0,0,1)

     clip also avoids the scroll-container trap that hidden creates. With
     overflow-y left visible, pairing visible with clip does NOT promote
     visible to auto, so neither element becomes a scroll container and the
     sticky descendants keep the viewport as their scrollport. */
  :root {
    overflow-x: clip !important;
  }

  html body {
    overflow-x: clip !important;
  }

  /* Anchor targets must clear the pinned unit. */
  html {
    scroll-padding-top: calc(var(--rslh-h) + var(--rslh-tape-h) + 8px);
  }

  /* The pinned unit: header at 0, tape directly beneath at the header's own
     height. Both are direct children of <body> after the JS reorder, so both
     have the full document as their containing block and room to travel. */
  body > .elementor-location-header {
    position: sticky;
    top: 0;
    /* Above the tape and above page content, so the drawer it owns can hang
       over the tape and the page. */
    z-index: 1000;
  }

  /* The ticker sheet hardens itself with  position: relative !important  and
     z-index: 10000, which is why its own .rsl-ticker--sticky rule is dead code.
     This selector is (element + attribute + child) — strictly more specific —
     and both declarations carry !important, so it wins outright. */
  body > [data-rsl-ticker] {
    position: sticky !important;
    top: var(--rslh-actual-h, var(--rslh-h)) !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    z-index: 990 !important;
  }
}

/* Before header.js has moved it, the ticker is still <body>'s FIRST child. The
   sticky rules below would then park it at the bar's height while its own flow
   space at the very top of the page sits empty — a visible band of nothing on
   every cold load until the script runs. Hold it in normal flow, exactly where
   it sits today, until rslh-ready confirms the reorder has happened. Fails safe:
   if the script never runs, the ticker stays above the bar as it is now. */
html:not(.rslh-ready) body > [data-rsl-ticker] {
  position: relative !important;
  top: auto !important;
}
/* The inner Elementor container carries an inert position:sticky from an
   earlier attempt. Clearing it prevents a second, competing sticky context. */
.elementor-location-header .elementor-element-ae81e40 {
  position: static !important;
  top: auto !important;
}

/* ---------------------------------------------------------------------------
   3. THE BAR  (R5 full-bleed, R6 base surface)
   ----------------------------------------------------------------------------
   The bleed is structural, not a 100vw hack: the header template's outer
   section is set to Content Width = Full Width in Elementor, so it is already
   edge-to-edge and 100vw (which would break sticky) is never needed.
   ------------------------------------------------------------------------ */

.elementor-location-header {
  width: 100%;
  background-color: var(--rslh-navy) !important;
  color: var(--rslh-white);
  /* A flat navy surface with one soft top-light. No backdrop-filter: it costs
     a composited layer on every scroll frame, and mid-range Android is the
     dominant device for retail brokerage traffic here. */
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  transition: box-shadow var(--rslh-t-3) var(--rslh-e-std);
}

/* Scrolled state — the one place depth is introduced. */
body.rslh-scrolled .elementor-location-header {
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06) inset,
              0 10px 30px -12px rgba(0, 18, 39, 0.55);
  border-bottom-color: rgba(255, 255, 255, 0.16);
}

/* Compact on scroll. The rail's min-height is what drives the bar's height,
   and the logo shrinks with it. header.js re-measures on the resulting
   resize and pushes the new value into --rslh-drawer-top, so the ticker and
   the drawer follow with no extra wiring. The ticker's own top is
   transitioned to the same duration and curve, so the two move as one piece
   instead of the ticker stepping down while the bar animates. */
.elementor-location-header .elementor-element-ae81e40 {
  transition: min-height var(--rslh-t-3) var(--rslh-e-out);
}

.elementor-location-header .elementor-element-e5d1427 img {
  transition: height var(--rslh-t-3) var(--rslh-e-out);
}

body > [data-rsl-ticker] {
  transition: top var(--rslh-t-3) var(--rslh-e-out);
}

@media (min-width: 1200px) {
  body.rslh-scrolled .elementor-location-header .elementor-element-ae81e40 {
    min-height: 62px;
  }
  body.rslh-scrolled .elementor-location-header .elementor-element-e5d1427 img {
    height: 52px !important;
  }
}

/* The rail. Elementor owns the container; this tightens it and orders the
   three slots: logo left, then nav and CTAs pushed to the right edge. */
.elementor-location-header .elementor-element-ae81e40 {
  /* !important on the box metrics only. Once the template's outer container was
     set to Content Width = Full Width, Elementor regenerated its own CSS for
     this element at higher specificity than a two-class selector can reach, and
     its max-width:100% / padding:10px then won — which stretched the CTA slot to
     1405px and pushed the buttons off screen. */
  max-width: var(--rslh-max) !important;
  margin-inline: auto !important;
  padding-inline: var(--rslh-gutter) !important;
  min-height: var(--rslh-h);
  display: flex;
  align-items: center;
  justify-content: flex-start;
  flex-wrap: nowrap;
  gap: clamp(10px, 1.5vw, 26px);
  box-sizing: border-box;
}

/* ---------------------------------------------------------------------------
   4. LOGO
   ----------------------------------------------------------------------------
   The source is a 500x500 PNG that was rendering 120x120 on mobile and
   660x140 at 768px inside an 80px bar. Height now comes from the token scale
   and width is capped, so the lockup cannot overflow the bar again.
   ------------------------------------------------------------------------ */

.elementor-location-header .elementor-element-e5d1427 {
  order: 1;
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
}

.elementor-location-header .elementor-element-e5d1427 a {
  display: inline-flex;
  align-items: center;
  line-height: 0;
}

.elementor-location-header .elementor-element-e5d1427 img {
  height: var(--rslh-logo-h) !important;
  width: auto !important;
  max-width: min(220px, 42vw) !important;
  object-fit: contain;
  display: block;
  /* The logo is deliberately never animated. */
}

/* ---------------------------------------------------------------------------
   5. NAV WIDGET PLACEMENT
   ----------------------------------------------------------------------------
   The widget carries an Elementor tablet Width override that collapses its
   container to about 10px, which is the root cause of the broken tablet bar:
   the eight links wrap into a vertical ribbon down the page edge. Resetting
   the width here fixes it in CSS as well as via the widget setting, so the
   layout is correct even if the setting is missed.
   ------------------------------------------------------------------------ */

.elementor-location-header .elementor-element-d49c9a8 {
  order: 2;
  margin-left: 0;      /* logo left, everything else right */
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
  min-width: 0;
  /* Static, not relative. Elementor sets position:relative here, which makes
     this widget the containing block for the absolutely positioned drawer and
     leaves the drawer offset from the widget's own box — 11px inside the bar,
     with a visible seam. Static hands the containing block back to the header
     (which is itself positioned by its own sticky), so the drawer can be
     pinned with top:100% exactly at the bar's lower edge. */
  position: static !important;
}

.elementor-location-header .elementor-element-ab3c0c8 {
  order: 3;
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
}

/* Elementor's reset normally removes link underlines and list markers. Both
   are restated so the design does not depend on that stylesheet's contents or
   load order. Deliberately only these two properties — anything more
   (margin/padding) would collide with the rules that size the drawer. */
.elementor-location-header .elementor-nav-menu,
.elementor-location-header .elementor-nav-menu ul {
  list-style: none;
}

.elementor-location-header .elementor-nav-menu a {
  text-decoration: none;
}

/* ---------------------------------------------------------------------------
   6. DESKTOP NAV  (R6 — smooth hover)
   ----------------------------------------------------------------------------
   Typography and padding carry !important because the template declares both
   at 0,5,0 (Roboto 13px/400, padding 2px 7px, line-height 58px).
   ------------------------------------------------------------------------ */

.elementor-location-header .elementor-nav-menu--main ul.elementor-nav-menu {
  display: flex;
  align-items: center;
  gap: clamp(0px, 0.35vw, 6px);
  flex-wrap: nowrap;
}

.elementor-location-header .elementor-nav-menu--main .elementor-item {
  position: relative;
  display: inline-flex;
  align-items: center;
  padding: 10px 9px !important;
  font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
  line-height: 1.2 !important;
  letter-spacing: 0.01em !important;
  text-transform: none !important;
  color: rgba(255, 255, 255, 0.82) !important;
  text-decoration: none;
  white-space: nowrap;
  border-radius: 6px;
  transition:
    color var(--rslh-t-2) var(--rslh-e-std),
    background-color var(--rslh-t-2) var(--rslh-e-std);
}

/* The underline draws itself. Transform only — no layout, no repaint of
   siblings, so a hover never costs more than one composite.
   Elementor's own ::after base rule is compatible with this; the widget is
   set to e--pointer-none so its pointer variants are inert. */
.elementor-location-header .elementor-nav-menu--main .elementor-item::after {
  content: "";
  position: absolute;
  left: 9px;
  right: 9px;
  bottom: 4px;
  height: 2px;
  background: var(--rslh-blue);
  border-radius: 1px;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform var(--rslh-t-3) var(--rslh-e-out);
}

/* Hover and keyboard focus get the identical affordance. */
.elementor-location-header .elementor-nav-menu--main .elementor-item:hover,
.elementor-location-header .elementor-nav-menu--main .elementor-item:focus-visible {
  color: var(--rslh-white) !important;
  background-color: rgba(255, 255, 255, 0.07);
}

.elementor-location-header .elementor-nav-menu--main .elementor-item:hover::after,
.elementor-location-header .elementor-nav-menu--main .elementor-item:focus-visible::after {
  transform: scaleX(1);
}

/* Current page keeps the rule, so the active item reads without a hover. */
.elementor-location-header .elementor-nav-menu--main .current-menu-item > .elementor-item,
.elementor-location-header .elementor-nav-menu--main .elementor-item-active {
  color: var(--rslh-white) !important;
}

.elementor-location-header .elementor-nav-menu--main .current-menu-item > .elementor-item::after {
  transform: scaleX(1);
}

.elementor-location-header .elementor-nav-menu--main .sub-arrow {
  margin-left: 3px;
  transition: transform var(--rslh-t-3) var(--rslh-e-out);
}

.elementor-location-header .elementor-nav-menu--main .has-submenu[aria-expanded="true"] .sub-arrow {
  transform: rotate(180deg);
}

/* ---------------------------------------------------------------------------
   7. DESKTOP DROPDOWNS  (R6)
   ----------------------------------------------------------------------------
   Animated with @keyframes, not transitions: smartmenus gives a closed submenu
   display:none, and a transition cannot run across a display change.
   ------------------------------------------------------------------------ */

@keyframes rslh-drop {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes rslh-drop-item {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

.elementor-location-header .elementor-nav-menu--main .sub-menu {
  background-color: var(--rslh-indigo) !important;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-top: 2px solid var(--rslh-blue);
  border-radius: 0 0 10px 10px;
  padding: 8px !important;
  min-width: 236px;
  box-shadow: 0 24px 48px -16px rgba(0, 18, 39, 0.6) !important;
}

/* Panels hang flush from the bar's base rule — no gap, no pointer triangle. */
.elementor-location-header .elementor-nav-menu--main li:hover > .sub-menu,
.elementor-location-header .elementor-nav-menu--main .sub-menu.show {
  animation: rslh-drop var(--rslh-t-3) var(--rslh-e-out) both;
}

/* Items stagger in on the shared 40ms grid. */
.elementor-location-header .elementor-nav-menu--main .sub-menu > li {
  animation: rslh-drop-item var(--rslh-t-2) var(--rslh-e-out) both;
}

.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(1) { animation-delay: calc(var(--rslh-stagger) * 1); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(2) { animation-delay: calc(var(--rslh-stagger) * 2); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(3) { animation-delay: calc(var(--rslh-stagger) * 3); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(4) { animation-delay: calc(var(--rslh-stagger) * 4); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(5) { animation-delay: calc(var(--rslh-stagger) * 5); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(6) { animation-delay: calc(var(--rslh-stagger) * 6); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(7) { animation-delay: calc(var(--rslh-stagger) * 7); }
.elementor-location-header .elementor-nav-menu--main .sub-menu > li:nth-child(n+8) { animation-delay: calc(var(--rslh-stagger) * 8); }

.elementor-location-header .elementor-nav-menu--main .sub-menu .elementor-sub-item {
  display: block;
  padding: 9px 12px 9px 14px !important;
  margin: 0;
  font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif !important;
  font-size: 0.8125rem !important;
  font-weight: 500 !important;
  color: rgba(255, 255, 255, 0.78) !important;
  border-radius: 6px;
  border-left: 2px solid transparent;
  transition:
    color var(--rslh-t-2) var(--rslh-e-std),
    background-color var(--rslh-t-2) var(--rslh-e-std),
    border-color var(--rslh-t-2) var(--rslh-e-std);
}

.elementor-location-header .elementor-nav-menu--main .sub-menu .elementor-sub-item:hover,
.elementor-location-header .elementor-nav-menu--main .sub-menu .elementor-sub-item:focus-visible {
  color: var(--rslh-white) !important;
  background-color: rgba(255, 255, 255, 0.09);
  border-left-color: var(--rslh-blue);
}

/* ---------------------------------------------------------------------------
   8. CTA BUTTONS  (R4 — desktop placement)
   ----------------------------------------------------------------------------
   Two classes deep so these beat the widget's own inline <style>, which sits
   later in the document.
   ------------------------------------------------------------------------ */

.elementor-location-header .rsl-desktop-header-wrapper {
  display: flex;
  align-items: center;
  gap: 12px;
}

.elementor-location-header .rsl-btn-glass,
.elementor-location-header .rsl-btn-solid {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 13px 24px;
  border-radius: 8px;
  font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif !important;
  font-size: 0.875rem;
  font-weight: 700;
  letter-spacing: 0.045em;
  white-space: nowrap;
  text-decoration: none !important;
  cursor: pointer;
  /* 1px of travel, not 2. Restraint reads as more expensive here. */
  transition:
    transform var(--rslh-t-2) var(--rslh-e-out),
    background-color var(--rslh-t-2) var(--rslh-e-std),
    border-color var(--rslh-t-2) var(--rslh-e-std),
    box-shadow var(--rslh-t-2) var(--rslh-e-std);
}

.elementor-location-header .rsl-btn-glass {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.28) !important;
  color: var(--rslh-white) !important;
  box-shadow: none;
}

.elementor-location-header .rsl-btn-solid {
  background-color: var(--rslh-blue) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  color: var(--rslh-white) !important;
  box-shadow: 0 6px 18px -8px rgba(0, 68, 165, 0.9);
}

.elementor-location-header .rsl-btn-glass:hover,
.elementor-location-header .rsl-btn-glass:focus-visible,
.elementor-location-header .rsl-btn-solid:hover,
.elementor-location-header .rsl-btn-solid:focus-visible {
  transform: translateY(-1px);
  color: var(--rslh-white) !important;
}

.elementor-location-header .rsl-btn-glass:hover,
.elementor-location-header .rsl-btn-glass:focus-visible {
  background: rgba(255, 255, 255, 0.16) !important;
  border-color: rgba(255, 255, 255, 0.5) !important;
}

.elementor-location-header .rsl-btn-solid:hover,
.elementor-location-header .rsl-btn-solid:focus-visible {
  background-color: #003493 !important;
  box-shadow: 0 10px 24px -8px rgba(0, 68, 165, 1);
}

/* ---------------------------------------------------------------------------
   9. HAMBURGER  (R3)
   ----------------------------------------------------------------------------
   Elementor renders the toggle only when the Nav Menu widget's own Breakpoint
   is set to Tablet — that is a widget setting, not CSS. This styles whichever
   toggle Elementor renders so both breakpoints behave identically.

   Elementor swaps the two icons with display:none, which would skip any
   transition, so both are forced to render and cross-fade on a shared grid
   cell instead.
   ------------------------------------------------------------------------ */

.elementor-location-header .elementor-menu-toggle {
  /* No `display` here on purpose. An unconditional value puts a hamburger in
     the desktop bar; display is set per breakpoint in section 11 instead. */
  place-items: center;
  width: 44px;
  height: 44px;
  min-width: 44px;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background-color: transparent !important;
  color: var(--rslh-white);
  cursor: pointer;
  transition: background-color var(--rslh-t-2) var(--rslh-e-std);
}

.elementor-location-header .elementor-menu-toggle:hover,
.elementor-location-header .elementor-menu-toggle:focus-visible {
  background-color: rgba(255, 255, 255, 0.1) !important;
}

.elementor-location-header .elementor-menu-toggle svg {
  grid-area: 1 / 1;
  width: 24px;
  height: 24px;
  fill: currentColor !important;
  transition:
    transform var(--rslh-t-3) var(--rslh-e-out),
    opacity var(--rslh-t-2) var(--rslh-e-std);
}

/* Beat Elementor's display:none icon swap so both can be cross-faded. */
.elementor-location-header .elementor-menu-toggle .elementor-menu-toggle__icon--open,
.elementor-location-header .elementor-menu-toggle .elementor-menu-toggle__icon--close {
  display: block !important;
}

.elementor-location-header .elementor-menu-toggle.elementor-active .elementor-menu-toggle__icon--open,
.elementor-location-header .elementor-menu-toggle[aria-expanded="true"] .elementor-menu-toggle__icon--open {
  transform: rotate(90deg) scale(0.7);
  opacity: 0;
}

.elementor-location-header .elementor-menu-toggle:not(.elementor-active) .elementor-menu-toggle__icon--close,
.elementor-location-header .elementor-menu-toggle[aria-expanded="false"] .elementor-menu-toggle__icon--close {
  transform: rotate(-90deg) scale(0.7);
  opacity: 0;
}

/* ---------------------------------------------------------------------------
   10. DRAWER  (R3 + R4)
   ----------------------------------------------------------------------------
   Elementor drives the open/close with max-height and transform, both of which
   transition normally, so this one uses transitions rather than keyframes.
   Its default transform is scaleY(0), which reads as a cheap accordion; it is
   replaced with a short downward slide.
   ------------------------------------------------------------------------ */

.elementor-location-header .elementor-menu-toggle:not(.elementor-active) + .elementor-nav-menu__container {
  transform: translateY(-8px) !important;
}

.elementor-location-header .elementor-menu-toggle.elementor-active + .elementor-nav-menu__container {
  transform: translateY(0) !important;
  animation: none !important;
  transition:
    transform var(--rslh-t-3) var(--rslh-e-out),
    opacity var(--rslh-t-2) var(--rslh-e-std),
    max-height var(--rslh-t-3) var(--rslh-e-out);
}

.elementor-location-header .elementor-nav-menu--dropdown {
  background-color: var(--rslh-navy) !important;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  box-shadow: 0 28px 56px -20px rgba(0, 0, 0, 0.7) !important;
  margin-top: 0 !important;
}

.elementor-location-header .elementor-nav-menu--dropdown a.elementor-item,
.elementor-location-header .elementor-nav-menu--dropdown a.elementor-sub-item {
  font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif !important;
  font-size: 0.9375rem !important;
  font-weight: 500 !important;
  color: rgba(255, 255, 255, 0.86) !important;
  padding: 14px var(--rslh-gutter) !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
  transition:
    color var(--rslh-t-2) var(--rslh-e-std),
    background-color var(--rslh-t-2) var(--rslh-e-std),
    padding-left var(--rslh-t-3) var(--rslh-e-out);
}

.elementor-location-header .elementor-nav-menu--dropdown a.elementor-item:hover,
.elementor-location-header .elementor-nav-menu--dropdown a.elementor-item:focus-visible,
.elementor-location-header .elementor-nav-menu--dropdown a.elementor-sub-item:hover,
.elementor-location-header .elementor-nav-menu--dropdown a.elementor-sub-item:focus-visible {
  color: var(--rslh-white) !important;
  background-color: rgba(255, 255, 255, 0.06) !important;
  padding-left: calc(var(--rslh-gutter) + 8px) !important;
}

.elementor-location-header .elementor-nav-menu--dropdown .elementor-sub-item {
  padding-left: calc(var(--rslh-gutter) + 14px) !important;
  font-size: 0.875rem !important;
  color: rgba(255, 255, 255, 0.72) !important;
  /* No rule under sub-items. Stacked and indented the separators stop reading
     as structure and start reading as clutter; the indent alone carries the
     hierarchy. */
  border-bottom: 0;
}

/* Kill the negative top margin Elementor puts on the open drawer.
   Measured at -19px, which is exactly the amount the drawer then sat too
   high, tucking its first menu item behind the bar. It is part of
   Elementor's own offset maths and it double-compensates now that the top
   is pinned to the header's measured bottom edge.

   The repeated class is deliberate: this has to out-specify a rule the
   template emits, and a plain two-class selector loses. No !important can
   fix a specificity loss between two !important declarations. */
.elementor-location-header .elementor-nav-menu--dropdown.elementor-nav-menu--dropdown.elementor-nav-menu--dropdown {
  margin-top: 0 !important;
}
/* Elementor paints the active/highlighted item as a grey block
   (`background-color: rgb(63,68,75)`). On a navy drawer that reads as a stray
   grey panel rather than a selection, so the active state is carried by
   weight and a left rule instead. Covers the whole family of class names
   Elementor may use, since which one appears depends on context. */
.elementor-location-header .elementor-nav-menu--dropdown a.elementor-item-active,
.elementor-location-header .elementor-nav-menu--dropdown a.highlighted,
.elementor-location-header .elementor-nav-menu--dropdown a.current {
  background-color: rgba(255, 255, 255, 0.07) !important;
  color: var(--rslh-white) !important;
  box-shadow: inset 3px 0 0 var(--rslh-blue);
}

/* The drawer CTA panel, built by header.js as a sibling of the drawer's <ul>.

   Pinned to the bottom of the drawer. The drawer is the scroll container, so
   a sticky last child pins to the bottom of the visible area — which is the
   only thing that keeps these two buttons reachable. Laid out normally they
   land at y=1115 on a 1024px-tall tablet: below the fold, behind eight menu
   items, which defeats the point of putting them there. */
.rslh-drawer-cta {
  position: sticky;
  bottom: 0;
  /* Above the drawer's <ul>. Elementor gives that ul position:relative and
     z-index:2, so with z-index:1 here the menu items painted over these
     buttons and taps landed on a menu link instead of the button. */
  z-index: 3;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px var(--rslh-gutter) 22px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  /* Opaque, or the menu items scroll through it. */
  background-color: var(--rslh-navy);
}

/* No reserved padding here, deliberately.

   The panel is position:sticky, so it is already pinned to the bottom of the
   drawer and sits in flow after the list. Reserving space for it as well
   double-counted, and left ~151px of dead gap between Stock Calculator and
   the CONTACT US button at the bottom of the scroll. With this at zero the
   list runs straight into the panel; while scrolling, items pass behind it,
   which is the normal sticky-footer behaviour. */
.elementor-location-header nav.elementor-nav-menu--dropdown:has(.rslh-drawer-cta) > ul.elementor-nav-menu {
  padding-bottom: 0;
}

.rslh-drawer-cta > a {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 12px 20px;
  border-radius: 8px;
  font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif;
  font-size: 0.875rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-align: center;
  text-decoration: none !important;
  transition:
    transform var(--rslh-t-2) var(--rslh-e-out),
    background-color var(--rslh-t-2) var(--rslh-e-std),
    border-color var(--rslh-t-2) var(--rslh-e-std);
}

.rslh-drawer-cta > a:active {
  transform: scale(0.985);
}

.rslh-drawer-cta > a.rsl-btn-glass {
  background: rgba(255, 255, 255, 0.08) !important;
  border: 1px solid rgba(255, 255, 255, 0.28) !important;
  color: var(--rslh-white) !important;
}

.rslh-drawer-cta > a.rsl-btn-solid {
  background-color: var(--rslh-blue) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  color: var(--rslh-white) !important;
}


@media (max-width: 1199px) {
  /* Guarantee the collapse in CSS as well as through the widget's own
     Breakpoint setting. If that setting is ever left on "Mobile", the
     horizontal nav still renders at 768px — and with eight items wrapping
     inside the rail, that is exactly the torn tablet bar this redesign is
     fixing. This holds the line regardless of the setting. */
  .elementor-location-header .elementor-nav-menu--main {
    display: none !important;
  }

  .elementor-location-header .elementor-menu-toggle {
    display: inline-grid !important;
  }
  /* The rail's min-height is declared in the desktop block only, so below
     1200px the bar was sized purely by its content — 66px — and the centred
     logo, being absolutely positioned, no longer contributed to it. An 86px
     logo then hung 20px out of a 66px bar. Restate the floor here so the bar
     grows with --rslh-logo-h at every small breakpoint. */
  .elementor-location-header .elementor-element-ae81e40 {
    min-height: var(--rslh-h) !important;
  }

  /* Pin the drawer to the bar's lower edge, edge to edge. Its containing block
     is now the header itself (see the nav widget's position:static), so 100%
     is the bar's height. Elementor's stretch layout only sets position and
     z-index, never an offset, so without this the drawer lands wherever the
     widget's static position happens to fall. */
  .elementor-location-header .elementor-menu-toggle + .elementor-nav-menu__container {
    /* Fixed, and positioned from a JS-measured value. Absolute + a CSS-derived
       offset resolved against a containing block I could not pin down (the nav
       widget, then the rail, then the header), and rendered the drawer ~27px
       too high so the first menu item sat behind the bar. Measuring the
       header's real bottom edge and pinning to the viewport removes the
       guesswork entirely. */
    position: fixed !important;
    top: var(--rslh-drawer-top, var(--rslh-actual-h, var(--rslh-h))) !important;
    left: 0 !important;
    right: 0 !important;
    width: auto !important;
    /* The floating stock-calculator launcher sits at z-index 99998 and was
       painting straight through the open drawer, which is only 9997. */
    z-index: 100000 !important;
  }

  /* Logo centred on the BAR and the hamburger moved to the left. The logo is
     absolutely positioned so it centres on the full bar width — with a flex
     auto-margin it would centre in the space left over after the hamburger,
     sitting ~20px right of true centre. The header is its containing block,
     same as the drawer, so no extra wrapper is needed. */
  .elementor-location-header .elementor-element-e5d1427 {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    margin: 0 !important;
    z-index: 1;
  }

  .elementor-location-header .elementor-element-d49c9a8 {
    margin-left: 0 !important;
    margin-right: auto !important;
  }

  /* The floating stock-calculator launcher is a desktop affordance: on a phone
     it sits over the drawer and over the page, and there is no room for it.
     It is a separate widget from the calculator page itself, so hiding it here
     does not affect /stock-calculator/. */
  .rsl-calc-widget__intro {
    display: none !important;
  }

  /* Keep the CTA widget in the DOM — it is the clone source — but out of the
     bar. Hiding the wrapper leaves Elementor's responsive classes alone. */
  .elementor-location-header .elementor-element-ab3c0c8 {
    display: none !important;
  }

  /* Only the OPEN drawer is height-capped. Setting max-height on the closed
     state would defeat Elementor's own collapse. */
  .elementor-location-header .elementor-menu-toggle.elementor-active + .elementor-nav-menu__container {
    /* Deliberately NOT full height: leave about a fifth of the viewport showing
       below, so tapping Contact Us visibly scrolls the page to the form and the
       user can see it happened. A drawer that covers everything makes the jump
       invisible. */
    max-height: calc(100vh - var(--rslh-drawer-top, var(--rslh-actual-h, var(--rslh-h))) - 22vh) !important;
    max-height: calc(100dvh - var(--rslh-drawer-top, var(--rslh-actual-h, var(--rslh-h))) - 22dvh) !important;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
  }

  .elementor-location-header .elementor-nav-menu--dropdown a.elementor-item {
    min-height: 48px;
    display: flex;
    align-items: center;
  }
}

/* --- Logged-in WordPress admin bar ----------------------------------------
   wp-admin-bar is position:fixed at the top of the viewport with a huge
   z-index, so without this it covers the top of the sticky header for any
   logged-in user. Offsets here must match the drawer too, but the drawer is
   positioned inside the header, so it rides along automatically. */
body.admin-bar .elementor-location-header { top: 32px; }
body.admin-bar > [data-rsl-ticker] {
  top: calc(var(--rslh-actual-h, var(--rslh-h)) + 32px) !important;
}
@media (max-width: 782px) {
  body.admin-bar .elementor-location-header { top: 46px; }
  body.admin-bar > [data-rsl-ticker] {
    top: calc(var(--rslh-actual-h, var(--rslh-h)) + 46px) !important;
  }
}
@media (min-width: 1200px) {
  .elementor-location-header .elementor-menu-toggle {
    display: none !important;
  }
}

@media (max-width: 400px) {
  .elementor-location-header .elementor-menu-toggle {
    width: 40px;
    height: 40px;
    min-width: 40px;
  }

  .rslh-drawer-cta > a {
    font-size: 0.8125rem;
  }
}

/* Applies across the WHOLE desktop range, not just 1200-1399. Once the
   template's outer container was switched to Full Width, the nav widget
   stopped being width-constrained and took its natural width — 1045px for
   eight items, which with the logo and the two CTAs needs ~1488px inside a
   1425px rail. Tightening type and padding everywhere above 1200 takes it to
   ~1332 and leaves real headroom. */
@media (min-width: 1200px) {
  /* Tighter side gutters through the compact range: at 1200px the bar has to
     hold the logo, eight nav items and two CTAs, and the default gutter leaves
     it fitting by only 10px. */
  :root {
    --rslh-h: 86px;
    --rslh-logo-h: 76px;
    --rslh-gutter: clamp(12px, 1.1vw, 30px);
  }

  .elementor-location-header .elementor-nav-menu--main ul.elementor-nav-menu {
    gap: 0;
  }

  .elementor-location-header .elementor-nav-menu--main .elementor-item {
    padding: 4px 2px !important;
    font-size: clamp(0.64rem, 0.19rem + 0.6vw, 0.79rem) !important;
    letter-spacing: 0 !important;
  }

  .elementor-location-header .rsl-btn-glass,
  .elementor-location-header .rsl-btn-solid {
    padding: 11px clamp(10px, 1vw, 18px);
    font-size: clamp(0.70rem, 0.4rem + 0.4vw, 0.8rem);
    letter-spacing: 0.03em;
  }

  .rslh-search-btn { width: 40px; }

  .elementor-location-header .elementor-element-ab3c0c8 { gap: 10px; }
}

@media (min-width: 1920px) {
  :root {
    --rslh-max: 100%;
    --rslh-logo-h: 80px;
  }
}

/* ---------------------------------------------------------------------------
   12. REDUCED MOTION  (constraint C4)
   ----------------------------------------------------------------------------
   Every transform-based animation is dropped outright. Colour, opacity and
   box-shadow are kept: they are state changes, not motion, and removing them
   would remove the hover affordance entirely.
   ------------------------------------------------------------------------ */

/* Elementor's global accent (#cc3366) was painting this button at rest: the
   SVG strokes with currentColor, so it rendered as a pink magnifier inside a
   pink 1px border. It arrives from a rule we do not out-specify with a single
   class, hence the repeated ancestor plus !important. No background in ANY
   state, by design; keyboard focus gets a white ring, not the pink one. */
.elementor-location-header .rslh-search-btn,
.elementor-location-header .rslh-search-btn:hover,
.elementor-location-header .rslh-search-btn:active,
.elementor-location-header .rslh-search-btn:focus,
.elementor-location-header .rslh-search-btn:focus-visible{
  order:3;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  flex:0 0 auto;
  width:44px;
  height:44px;
  padding:0;
  border:0 !important;
  border-radius:8px;
  background:none !important;
  background-color:transparent !important;
  color:#fff !important;
  box-shadow:none !important;
  cursor:pointer;
}
.elementor-location-header .rslh-search-btn:focus-visible{
  outline:2px solid #fff !important;
  outline-offset:2px;
}
.elementor-location-header .rslh-search-btn svg{
  width:22px;height:22px;fill:none;stroke:currentColor;
  stroke-width:2.2;stroke-linecap:round;
}
/* The theme's global ::selection (transparent background, #333 text) leaves
   selected text invisible against this navy panel. */
.rslh-search ::selection,.rslh-search__input::selection{
  background-color:rgba(255,255,255,.28) !important;
  color:#fff !important;
}
.rslh-search__input::-webkit-search-cancel-button,.rslh-search__input::-webkit-search-decoration{display:none;-webkit-appearance:none}
.rslh-search-btn svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}
.rslh-search{position:fixed;top:var(--rslh-drawer-top,0px);left:0;right:0;z-index:100001;background-color:var(--rslh-navy);border-top:1px solid rgba(255,255,255,.1);box-shadow:0 28px 56px -20px rgba(0,0,0,.7);max-height:calc(100dvh - var(--rslh-drawer-top,0px) - 10dvh);overflow-y:auto;overscroll-behavior:contain}
.rslh-search[hidden]{display:none}
.rslh-search__inner{max-width:var(--rslh-max);margin:0 auto;padding:16px var(--rslh-gutter) 22px}
.rslh-search__input{width:100%;padding:14px 16px;font:inherit;font-size:1rem;color:#fff;background-color:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.25);border-radius:10px}
.rslh-search__input::placeholder{color:rgba(255,255,255,.55)}
.rslh-search__input:focus{outline:none;border-color:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.15)}
.rslh-search__count{margin:12px 0 8px;font-size:.8rem;font-weight:600;color:rgba(255,255,255,.65)}
.rslh-search__list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.rslh-search__list a{display:block;padding:11px 14px;border-radius:9px;text-decoration:none;color:rgba(255,255,255,.9) !important;transition:background-color var(--rslh-t-2) var(--rslh-e-std)}
.rslh-search__list a:hover,.rslh-search__list a:focus-visible{background-color:rgba(255,255,255,.09);color:#fff !important}
.rslh-search__list b{display:block;font-size:.9rem;font-weight:600}
.rslh-search__list span{font-size:.73rem;color:rgba(255,255,255,.6)}
.rslh-search__empty{padding:16px 0;font-size:.88rem;color:rgba(255,255,255,.65)}
@media (prefers-reduced-motion: reduce) {
  .elementor-location-header *,
  .elementor-location-header *::before,
  .elementor-location-header *::after,
  .rslh-drawer-cta * {
    transition-duration: 1ms !important;
    animation-duration: 1ms !important;
    animation-delay: 0ms !important;
  }

  .elementor-location-header .elementor-nav-menu--main .sub-menu,
  .elementor-location-header .elementor-nav-menu--main .sub-menu > li {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }

  .elementor-location-header .rsl-btn-glass:hover,
  .elementor-location-header .rsl-btn-solid:hover,
  .rslh-drawer-cta > a:active {
    transform: none !important;
  }

  .elementor-location-header .elementor-menu-toggle svg {
    transform: none !important;
  }

  .elementor-location-header .elementor-menu-toggle:not(.elementor-active) + .elementor-nav-menu__container,
  .elementor-location-header .elementor-menu-toggle.elementor-active + .elementor-nav-menu__container {
    transform: none !important;
  }
}


/* Focus ring that survives on navy. */
.elementor-location-header a:focus-visible,
.elementor-location-header button:focus-visible,
.elementor-location-header [role="button"]:focus-visible,
.rslh-drawer-cta a:focus-visible {
  outline: 2px solid #7FB2FF;
  outline-offset: 2px;
}

/* ---------------------------------------------------------------------------
   PINK KILL
   ---------------------------------------------------------------------------
   #cc3366 is Elementor's global accent. It leaks onto every element that
   inherits the global link colour: the logo anchors, the wp skip link, the
   reveal-slider dots, and the footer's regulator links. The source rule
   outranks a single class selector, so this is scoped plus !important
   rather than clever. Nothing here is a design colour.
   ------------------------------------------------------------------------ */
a.skip-link,
.elementor-location-header .elementor-element-e5d1427 a,
.elementor-location-header .elementor-element-e5d1427 img {
  color: inherit !important;
}
.site-footer .footer-logo,
.site-footer .footer-logo img,
.site-footer .regulators-row a,
.site-footer .regulators-row img,
.site-footer .footer-banners a,
.site-footer .footer-banners img {
  color: inherit !important;
}
/* The carousel indicators ship a pink border. The fills are fine; only the
   ring goes. */
.rsl-dot {
  border-color: transparent !important;
}

/* ---------------------------------------------------------------------------
   WIDE SCREENS: centre the nav
   ---------------------------------------------------------------------------
   With margin-left:auto on the nav, every pixel of free space collects to
   its left, so above ~1600px the nav is jammed against the CTAs and the
   gap all sits after the logo. Instead the logo slot and the CTA slot each
   take an equal share of the free space, which lands the nav on the rail
   centre line. (Off by half the search button, ~22px — not worth a grid
   restructuring to recover.)
   ------------------------------------------------------------------------ */
@media (min-width: 1440px) {
  .elementor-location-header .elementor-element-e5d1427 {
    flex: 1 1 0 !important;
  }
  .elementor-location-header .elementor-element-ab3c0c8 {
    flex: 1 1 0 !important;
    justify-content: flex-end !important;
  }
}

/* The carousel dots. Elementor's accent lands on color/border/outline; the
   border is already handled above, and these two make the rest inert so a
   focus ring can never flash pink either. */
.rsl-dot {
  color: inherit !important;
  outline-color: transparent !important;
}

/* The footer carries its own max-width token. The header now runs edge to
   edge, and a 1400px island under a full-width bar reads as a mistake, so
   the footer follows. Kept here as well as in footer.html so it applies
   without re-pasting the widget. */
.site-footer { --f-max: 100% !important; }

/* ---------------------------------------------------------------------------
   FOOTER: unbox it
   ---------------------------------------------------------------------------
   Elementor gives the footer template a 1140px content box and caps the
   container around it at 1600px, so a full-width bar lands on a narrow
   island. These are the two containers in the footer's own ancestor chain,
   named by ID so nothing else can pick them up.
   ------------------------------------------------------------------------ */
.elementor-location-footer .elementor-element-d49e095,
.elementor-location-footer .elementor-element-96d00c7,
.elementor-location-footer .e-con-inner,
.site-footer {
  max-width: 100% !important;
  width: 100% !important;
}

/* ---------------------------------------------------------------------------
   COMPACT ON SCROLL carries the whole pinned unit, not just the logo
   ---------------------------------------------------------------------------
   The bar already shrinks to 62px, but the tape held its full height, so
   the pair read as two elements on different clocks.

   The height here is a LITERAL, deliberately not var(--rslh-tape-h):
   header.js writes the ticker's MEASURED height into that token, so
   driving the ticker from it would be the same ratchet that once ran the
   bar to 2300px. A literal cannot feed back.
   ------------------------------------------------------------------------ */
@media (min-width: 1200px) {
  body.rslh-scrolled > [data-rsl-ticker] {
    height: 38px !important;
  }
  body.rslh-scrolled > [data-rsl-ticker] > * {
    height: 100% !important;
  }
}

/* Re-declared whole: a later transition replaces the earlier one rather
   than merging, so omitting top here would kill the ticker's follow. */
body > [data-rsl-ticker] {
  transition:
    top var(--rslh-t-3) var(--rslh-e-out),
    height var(--rslh-t-3) var(--rslh-e-out);
}

/* ---------------------------------------------------------------------------
   COMPRESS: header + footer
   ---------------------------------------------------------------------------
   SCROLLED BAR. min-height already drops to 62px, but min-height is a floor,
   not a ceiling: the bar kept rendering at 80px because the CTA container
   carried 63px of its own padding and that was the tallest thing in the
   row. Trimming the two paddings lets the floor actually bind.

   FOOTER. Nine collapsed categories stacked in one column is 430px of the
   932px total. Two columns above 1280px halves it, and the paddings come
   down with it. Kept numerically identical to footer.html so a re-paste of
   the widget does not fight this.
   ------------------------------------------------------------------------ */
@media (min-width: 1200px) {
  body.rslh-scrolled .elementor-location-header .elementor-element-ae81e40 {
    padding-block: 5px !important;
  }
  body.rslh-scrolled .elementor-location-header .elementor-element-ab3c0c8 {
    padding-block: 0 !important;
  }
}

.site-footer .footer-main {
  padding-block: clamp(30px, 3.4vw, 48px) !important;
}
.site-footer .footer-legal {
  padding-block: clamp(20px, 2.4vw, 28px) !important;
}
.site-footer .footer-link--top,
.site-footer .category-title {
  padding-block: 9px !important;
}

@media (min-width: 1280px) {
  .site-footer .footer-links {
    display: grid !important;
    grid-template-columns: 1fr 1fr;
    column-gap: 28px;
    align-items: start;
  }
}

/* ---------------------------------------------------------------------------
   FOOTER: edge to edge, and a flat hover guard
   ---------------------------------------------------------------------------
   The 10px left/right gap was padding on Elementor's own footer container
   (d49e095), not a width cap — opening the max-widths did not touch it, so
   the footer still sat 10px in from each edge.

   The pink: the footer computes zero pink at REST, so it only appears on
   hover, and it arrives from rules the browser does not expose to script —
   chasing them selector by selector does not converge. Stated once here
   instead, for every anchor and button in every state. The trailing group
   re-pins the three that are meant to be pure white at rest.
   ------------------------------------------------------------------------ */
.elementor-location-footer .elementor-element-d49e095 {
  padding-inline: 0 !important;
}

.site-footer a,
.site-footer a:visited,
.site-footer button {
  color: rgba(255, 255, 255, 0.78) !important;
}
.site-footer a:hover,
.site-footer a:focus,
.site-footer a:focus-visible,
.site-footer a:active,
.site-footer button:hover,
.site-footer button:focus,
.site-footer button:focus-visible,
.site-footer button:active {
  color: #ffffff !important;
  outline-color: rgba(255, 255, 255, 0.9) !important;
}
.site-footer .footer-link--top,
.site-footer .category-title,
.site-footer .social-icons a,
.site-footer .footer-top,
.site-footer .contact-info a {
  color: #ffffff !important;
}

/* ---------------------------------------------------------------------------
   BOTTOM BAR: clear the floating calculator
   ---------------------------------------------------------------------------
   The calculator launcher is position:fixed at the viewport's bottom-right,
   so it lands on top of the Back to top button the moment the page is
   scrolled to the end — measured overlap at 390px: button 28-362, launcher
   320-374. Reserving the launcher's width plus its offset in the bar's own
   padding keeps the two apart at every width without moving either.
   ------------------------------------------------------------------------ */
.site-footer .footer-bottom-bar {
  padding-right: calc(var(--f-gutter) + 78px) !important;
}

/* ---------------------------------------------------------------------------
   BRAND COLUMN: fill the height
   ---------------------------------------------------------------------------
   The two-column QUICK LINKS list is taller than the logo-and-tagline block,
   so the brand column finished early and left ~150px of bare navy under the
   social row. The column now stretches to the grid row and the socials take
   the slack, so the block reads as deliberately spanning the row rather than
   running out. Only above 1280px, where the two-column list creates the gap.
   ------------------------------------------------------------------------ */
@media (min-width: 1280px) {
  .site-footer .footer-brand {
    display: flex;
    flex-direction: column;
    align-self: stretch;
  }
  .site-footer .footer-brand__top {
    margin-bottom: 0;
  }
  .site-footer .social-icons {
    margin-top: auto;
    padding-top: 22px;
  }
}

/* ---------------------------------------------------------------------------
   LOGO: crop the transparent padding
   ---------------------------------------------------------------------------
   The logo PNG is 500x500 but the artwork inside it is only 316x218, centred,
   with ~140px of empty transparency above and below (measured off a canvas).
   A 70px box therefore painted a 44x30px mark - which is why raising
   --rslh-logo-h barely changed anything. Sizing by WIDTH and cover-cropping
   to the artwork aspect puts the mark at roughly 1.4x what it was, without
   making the bar any taller.
   ------------------------------------------------------------------------ */
.elementor-location-header .elementor-element-e5d1427 img {
  height: auto !important;
  width: calc(var(--rslh-logo-h) * 1.42) !important;
  aspect-ratio: 316 / 218 !important;
  object-fit: cover !important;
  object-position: 50% 50% !important;
}

/* Scrolled: the compact state drives the logo too. */
body.rslh-scrolled .elementor-location-header .elementor-element-e5d1427 img {
  width: 74px !important;
}

/* ---------------------------------------------------------------------------
   BOTTOM BAR: centre the back-to-top
   Column and centred. The clearance reserved for the calculator launcher is
   no longer needed - a centred button never reaches the right edge.
   ------------------------------------------------------------------------ */
.site-footer .footer-bottom-bar {
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center;
  padding-inline: var(--f-gutter) !important;
}
.site-footer .footer-top { width: auto !important; }

/* ---------------------------------------------------------------------------
   FOOTER hover: stated at maximum specificity
   Nothing on the live page computes pink any more, but the footer markup
   carries its own inline <style> that sits LATER in the document than this
   file, so at equal specificity it would win. This outranks it on weight.
   ------------------------------------------------------------------------ */
html body .site-footer a:hover,
html body .site-footer a:focus,
html body .site-footer a:focus-visible,
html body .site-footer a:active,
html body .site-footer button:hover,
html body .site-footer button:focus,
html body .site-footer button:focus-visible,
html body .site-footer button:active {
  color: #ffffff !important;
  outline-color: rgba(255,255,255,.9) !important;
}

/* ---------------------------------------------------------------------------
   NAV: the last 45px to true centre
   ---------------------------------------------------------------------------
   Giving the logo slot and the CTA slot equal flex-grow got the nav close, but
   not exact: measured at 2400px the gap either side of the nav is 26px, yet
   the right side ALSO carries the 44px search button and its gap, so the two
   sides differ by ~90px and the nav sits 45px left of the rail centre.
   Because both slots grow by the same amount that 45px is constant at every
   width where the rule applies, so a fixed offset cancels it exactly.

   position:relative + left, NOT transform: a transform would make this a
   containing block for fixed-position descendants, which the drawer relies
   on not being. Safe here because the drawer only exists below 1200px.
   ------------------------------------------------------------------------ */


/* ---------------------------------------------------------------------------
   HEADER/TICKER SEAM
   ---------------------------------------------------------------------------
   The bar carries a 1px bottom border to separate it from page content, but
   the ticker sits flush beneath it, so the border renders as a hairline of
   lighter navy exactly where the two meet - reads as a gap. The measured
   gap is 0px at every scroll position and every width; the border is the
   whole of the artefact. The ticker already provides the break below the
   bar, so the border is redundant whenever the ticker is present.
   ------------------------------------------------------------------------ */
body:has([data-rsl-ticker]) .elementor-location-header {
  border-bottom: 0 !important;
}
/* Fallback for engines without :has() - also harmless when the ticker is
   absent, since the ticker is on every page that has this header. */
.elementor-location-header {
  border-bottom-color: transparent !important;
}

/* ---------------------------------------------------------------------------
   NAV: centred by BALANCE, not by displacement
   ---------------------------------------------------------------------------
   First attempt shifted the nav with position:relative + left:45px. That got
   the centre line exact but moved only the PAINT, not the box - measured at
   1707px the search button then started 19px BEFORE the nav ended, i.e. the
   two overlapped.

   Fixed by changing the balance instead of the position. The logo slot and
   the CTA slot both grow; giving the logo slot 90px of extra margin makes the
   left side 90px wider than the right, which pushes the nav exactly 45px
   right - onto the centre - while flexbox still guarantees no collision.
   ------------------------------------------------------------------------ */
@media (min-width: 1440px) {
  .elementor-location-header .elementor-element-e5d1427 {
    flex: 1 1 0 !important;
  }
  .elementor-location-header .elementor-element-d49c9a8 {
    position: static !important;
    left: auto !important;
  }
  /* flex-basis auto + min-width max-content: the slot grows but can never be
     squeezed narrower than the two buttons inside it, which is what produced
     the overflow when both slots were flex-basis 0. */
  .elementor-location-header .elementor-element-ab3c0c8 {
    flex: 1 1 0 !important;
    justify-content: flex-end !important;
  }
}

/* ---------------------------------------------------------------------------
   FOOTER CATEGORY ROWS: never a filled pill
   ---------------------------------------------------------------------------
   The reported pink was a ROUNDED pill on an open category row. The live
   footer has no border-radius on those rows at all, and computes zero pink
   in any state, so that pill is not coming from this build. This guard makes
   it impossible regardless of what any other stylesheet tries: no fill, no
   radius, no shadow, in every state including :hover and the open class.
   ------------------------------------------------------------------------ */
html body .site-footer .category-title,
html body .site-footer .category-title:hover,
html body .site-footer .category-title:focus,
html body .site-footer .category-title:focus-visible,
html body .site-footer .category-title:active,
html body .site-footer .has-submenu.is-open > .category-title,
html body .site-footer .footer-link--top,
html body .site-footer .footer-link--top:hover,
html body .site-footer .footer-link--top:focus-visible {
  background: none !important;
  background-color: transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* ---------------------------------------------------------------------------
   NAV: EXACT centring once the width actually allows it
   ---------------------------------------------------------------------------
   Solved rather than tuned. With the slots laid out
       logo | gap | nav | gap | search | gap | CTAs
   the nav is centred when  logo == gap + search + CTAs.  Writing W for the
   rail content box and N/S/C/G for nav, search, CTA and gap, that reduces to
       logo - CTA = search + gap  (a CONSTANT, independent of viewport)
   and  CTA = (W - N - S - 3G) / 2 - S + S  ... in practice CTA must still
   be >= the two buttons, ~300px. That last condition is why 1440-1740px
   cannot be perfectly centred: CTA would have to shrink below its own
   content and the buttons would spill. Above ~1740px there is room.

   So: a flex-basis difference of 64.5px (= measured search 44 + gap 20.5)
   gives exact centring wherever the CTA slot can still fit its buttons.
   Below that the 45px near-centre is kept rather than risking overlap.
   ------------------------------------------------------------------------ */
@media (min-width: 1740px) {
  .elementor-location-header .elementor-element-e5d1427 {
    flex: 1 1 90.5px !important;
  }
  .elementor-location-header .elementor-element-ab3c0c8 {
    flex: 1 1 0 !important;
    justify-content: flex-end !important;
  }
}

/* ---------------------------------------------------------------------------
   NAV: the bar fits, at every desktop width  (1200 - 1739)
   ---------------------------------------------------------------------------
   Two separate defects in this band, both fixed here.

   1. 1200-1439 - the row is wider than the rail. Nine labels plus the logo,
      the search button and two CTAs need ~1352px of a 1325px rail at 1370px,
      so the row overflows and RESEARCH PORTAL runs past the gutter and is
      clipped. Reclaimed from the rail gap, the label padding and the logo,
      which was oversized at this range anyway: --rslh-logo-h is 76px inside an
      86px bar. The clamp walks it back to 60px at 1200 and reaches 76px at
      1440, so there is no step where this block ends.

   2. 1440-1739 - the >=1440 block gives the logo and CTA slots flex-basis 0
      so both grow equally and the nav lands near centre. Above ~1740 there is
      room for that; below it there is not. The CTA slot was being sized at
      ~218px while the two buttons inside it need ~280px, and the buttons do
      not wrap, so RESEARCH PORTAL was running 41px off the right edge of a
      1440px viewport. flex: 0 0 auto stops the shrink, so the slot is always
      its content width and the buttons can never spill off screen.

   The cost, stated plainly: through 1440-1739 the nav now sits ~109px left of
   the rail centre rather than the ~43px the old block achieved, because that
   43px was bought by squeezing the CTA until its last button left the screen.
   Exact centring resumes at 1740, where there is genuine room for it.
   ------------------------------------------------------------------------ */

@media (min-width: 1200px) and (max-width: 1739px) {
  :root {
    --rslh-logo-h: clamp(60px, 5.28vw, 76px);
  }

  .elementor-location-header .elementor-element-ae81e40 {
    gap: clamp(6px, 0.6vw, 16px);
  }

  .elementor-location-header .elementor-nav-menu--main .elementor-item {
    padding: 4px 1px !important;
  }

  /* Auto inline margins split the slack evenly around the nav, so the bar
     reads balanced even where the geometry does not allow exact centring. */
  .elementor-location-header .elementor-element-d49c9a8 {
    margin-inline: auto;
  }

  /* Neither outer slot grows or shrinks: both stay content-width, so nothing
     can be squeezed below what the logo and the buttons actually need. */
  .elementor-location-header .elementor-element-e5d1427,
  .elementor-location-header .elementor-element-ab3c0c8 {
    flex: 0 0 auto !important;
  }

  .elementor-location-header .elementor-element-ab3c0c8 {
    justify-content: flex-end !important;
    gap: 8px;
  }

  .elementor-location-header .rsl-btn-glass,
  .elementor-location-header .rsl-btn-solid {
    padding: 10px 8px;
  }
}
