/* ==========================================================================
   Msindaha — Modern theme layer
   Loads AFTER css/style.css. Additive only: re-establishes the brand palette,
   adds a design-token layer, and skins existing components. No selector here
   is ever a bare element (h1, a, .btn, .card, ...) so it cannot leak into the
   #chatbot widget, which uses its own Tailwind-utility markup.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Design tokens — executive/corporate palette
   -------------------------------------------------------------------------- */
:root {
  /* Re-assert brand identity: index.html, countries.html and blog.html each
     carry a body-level :root override (old --primary/--secondary values)
     that loads after <head> — !important is the only reliable way to win
     regardless of DOM position. Same treatment extended to --text/--muted/
     --border below, which index.html also re-declares locally (unused on
     that page, but harmless to guard against). */
  --primary: #0f3b68 !important;
  --secondary: #184e8a !important;
  --accent: #d4af37 !important;

  /* style.css itself references var(--bg-light)/var(--card) (site-wide
     scrollbar rules) but never defines them in its own :root — only 3 pages
     happened to define them locally. Defining them here fixes all 16. */
  --bg-light: #f8fafc;
  --surface: #ffffff;
  --card: #ffffff;
  --text: #0f172a !important;
  --muted: #64748b !important;
  --border: #e2e8f0 !important;

  /* Derived tints/shades — every one built only from the confirmed brand
     hexes above, kept as a small ramp so components can reach for a lighter
     or darker step without inventing one-off colors. */
  --tm-primary-50: #e9eff4;
  --tm-primary-100: #d6e1eb;
  --tm-primary-700: #0b2c4e;
  --tm-primary-800: #0a2440;
  --tm-primary-900: #071a2c;
  --tm-primary-950: #040d17;
  --tm-secondary-light: #5d8fc7;
  --tm-accent-light: #e4c878;
  --tm-accent-dark: #b8952e;

  --tm-gradient-primary: linear-gradient(
    135deg,
    var(--primary) 0%,
    var(--secondary) 100%
  );
  --tm-gradient-hero: linear-gradient(
    160deg,
    rgba(0, 0, 0, 0.78) 0%,
    rgba(0, 0, 0, 0.6) 55%,
    rgba(0, 0, 0, 0.72) 100%
  );
  --tm-gradient-accent: linear-gradient(
    135deg,
    var(--accent) 0%,
    var(--tm-accent-light) 100%
  );
  --tm-gradient-section: linear-gradient(180deg, #f8fafc 0%, #eef3f9 100%);

  --tm-shadow-sm: 0 2px 8px rgba(15, 59, 104, 0.08);
  --tm-shadow-md: 0 10px 30px -8px rgba(15, 59, 104, 0.18);
  --tm-shadow-lg: 0 20px 45px -12px rgba(15, 59, 104, 0.28);
  --tm-shadow-gold: 0 10px 24px -6px rgba(212, 175, 55, 0.35);

  --tm-radius-sm: 8px;
  --tm-radius-md: 14px;
  --tm-radius-lg: 22px;

  --tm-ease: cubic-bezier(0.4, 0, 0.2, 1);
}

/* --------------------------------------------------------------------------
   1.5. Typography hierarchy
   --------------------------------------------------------------------------
   style.css sets `body { font-family:"Montserrat"; font-size:15px;
   line-height:1.8; color:gray }` (style.css:10561-10568) — Montserrat is
   already a solid, premium-appropriate typeface across 200-800 weights (see
   the Google Fonts import in every page's <head>), so no new font is loaded
   here. Two real problems instead: `color:gray` (#808080) under-contrasts
   against the new #F8FAFC/#FFFFFF surfaces, and heading weight/spacing is
   inconsistent page-to-page. Fixed here without touching font-family.

   These selectors necessarily touch bare elements (h1-h6, p) that the file's
   own convention normally avoids — #chatbot renders a real <h2> and injects
   <p>-like message content via chatbot.js with only partial Tailwind color
   coverage (confirmed: its header <h2> has no margin utility of its own, so
   an unguarded `h2{margin-bottom}` here would visibly shift its flex row).
   Every rule is therefore scoped with `:not(:where(#chatbot) *)` to exclude
   the whole widget subtree; `body` itself is left unscoped since #chatbot
   can never match `body`.

   IMPORTANT: the `:where()` wrapper is load-bearing, not decorative.
   `:not()`'s own specificity is normally the specificity of its argument —
   a plain `:not(#chatbot *)` would inject an ID's worth of specificity into
   *every* heading selector below, so e.g. `h1:not(#chatbot *)` would then
   outrank `.hero-wrap .slider-text h1{color:#fff}` and
   `.footer .footer-heading{color:#fff}` (both plain classes, no
   !important), silently repainting those white headings back to
   var(--text) — near-invisible dark text on a dark background. This
   actually happened and was reported as headings/footer text "not
   showing." `:where()` always contributes zero specificity regardless of
   what's inside it, so wrapping the ID there keeps every rule below at
   ordinary element-level specificity while still excluding #chatbot's
   subtree from matching. */
body {
  color: var(--text);
}
p:not(:where(#chatbot) *) {
  color: var(--text);
  line-height: 1.75;
}
.text-muted,
.subheading {
  color: var(--muted) !important;
}
small:not(:where(#chatbot) *) {
  color: var(--muted);
}
h1:not(:where(#chatbot) *),
h2:not(:where(#chatbot) *),
h3:not(:where(#chatbot) *),
h4:not(:where(#chatbot) *),
h5:not(:where(#chatbot) *),
h6:not(:where(#chatbot) *) {
  color: var(--text);
  letter-spacing: -0.01em;
}
h1:not(:where(#chatbot) *) {
  font-weight: 800;
  line-height: 1.15;
}
h2:not(:where(#chatbot) *) {
  font-weight: 800;
  line-height: 1.25;
  margin-bottom: 0.65em;
}
h3:not(:where(#chatbot) *) {
  font-weight: 700;
  line-height: 1.3;
}
h4:not(:where(#chatbot) *) {
  font-weight: 700;
  line-height: 1.35;
}
.heading-section .subheading {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent) !important;
}

/* --------------------------------------------------------------------------
   2. Navbar — hover + active-state redesign
   --------------------------------------------------------------------------
   HOVER (applies to every nav link):
   - Text color changes to brand blue (var(--primary)) — no underline, no
     bar, no background fill. Clean and modern.
   - 250ms ease-out transition keeps it smooth.
   - style.css's own `:before` underline hover effect is explicitly disabled
     so the underline never appears on hover.

   ACTIVE (current page indicator):
   - Active link text: brand blue + font-weight 800 for emphasis.
   - Desktop: a 3px rounded underline (var(--primary)) sits just below the
     text.
   - Mobile: 3px left-side bar that works with the stacked layout.
   -------------------------------------------------------------------------- */

/* --- Hover: text-color only, no underline --- */
.ftco-navbar-light .navbar-nav > .nav-item > .nav-link {
  transition: color 250ms cubic-bezier(0.4, 0, 0.2, 1);
}
.ftco-navbar-light .navbar-nav > .nav-item > .nav-link:hover {
  color: var(--primary);
}
/* Disable style.css's hover underline — we only want text-color change */
.ftco-navbar-light .navbar-nav > .nav-item > .nav-link:hover:before {
  visibility: hidden;
  transform: scaleX(0);
}

/* --- Active state: blue text + subtle underline --- */
.ftco-navbar-light .navbar-nav > .nav-item.active > a {
  background: transparent;
  color: var(--primary);
  font-weight: 800;
  position: relative;
}
.ftco-navbar-light .navbar-nav > .nav-item.active > a:before {
  content: "";
  position: absolute;
  visibility: visible;
  left: 14px;
  right: 14px;
  width: auto;
  top: auto;
  bottom: 4px;
  height: 3px;
  transform: scaleX(1);
  background-color: var(--accent);
  border-radius: 3px;
  transition:
    transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
    opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
}
/* On mobile: left-side accent bar for stacked layout */
@media (max-width: 991.98px) {
  .ftco-navbar-light .navbar-nav > .nav-item.active > a {
    color: var(--primary);
    font-weight: 800;
  }
  .ftco-navbar-light .navbar-nav > .nav-item.active > a:before {
    display: block;
    visibility: visible;
    left: 0;
    right: auto;
    top: 4px;
    bottom: 4px;
    width: 3px;
    height: auto;
    transform: none;
    background-color: var(--accent);
    border-radius: 3px;
  }
}

/* The dropdown skin below is the selector that actually wins at this
   breakpoint (style.css:8250 outranks style.css:9920's older dark skin via
   specificity), so this is the rule that reaches the screen. */
@media (max-width: 991.98px) {
  /* style.css:10845-10851 forces `display: block !important` on every
     mobile nav dropdown (Services AND the Countries mega-menu, both match
     this same selector) completely unconditionally — not gated on
     Bootstrap's own `.show` class at all. That's why both dumped fully
     open the instant the hamburger menu opened, before either was ever
     tapped. Bootstrap's dropdown JS already toggles `.show` correctly on
     click (confirmed: no other JS touches these dropdowns) — the bug is
     purely this CSS ignoring that class.
     First fix here animated this via `max-height` + `overflow:hidden`
     transitions. That broke page scrolling on real mobile Safari (a
     known class of iOS bug: a `max-height`-transitioning, `overflow:
     hidden` block near the bottom of a page can leave the visual
     viewport's scrollable extent miscalculated until a resize/reflow).
     Plain `display:none/block` is what Bootstrap's dropdown CSS expects
     and is reflowed reliably everywhere, so that's the toggle now; the
     "smooth" open is a plain mount animation on `.show` instead of a
     transition between two toggled states. */
  .ftco-navbar-light .navbar-nav > .nav-item .dropdown-menu {
    display: none !important;
    background: var(--tm-primary-800);
    border-radius: var(--tm-radius-sm);
    margin: 4px 0 8px;
    padding: 6px 0;
  }
  .ftco-navbar-light .navbar-nav > .nav-item .dropdown-menu.show {
    display: block !important;
    animation: tmMobileDropdownIn 0.25s var(--tm-ease, ease) both;
  }
  @keyframes tmMobileDropdownIn {
    from {
      opacity: 0;
      transform: translateY(-6px);
    }
    to {
      opacity: 1;
      transform: translateY(0);
    }
  }
  @media (prefers-reduced-motion: reduce) {
    .ftco-navbar-light .navbar-nav > .nav-item .dropdown-menu.show {
      animation: none;
    }
  }
  .ftco-navbar-light .navbar-nav > .nav-item .dropdown-menu .dropdown-item {
    color: #fff;
  }
  .ftco-navbar-light
    .navbar-nav
    > .nav-item
    .dropdown-menu
    .dropdown-item:hover,
  .ftco-navbar-light
    .navbar-nav
    > .nav-item
    .dropdown-menu
    .dropdown-item:focus {
    background: var(--accent);
    color: var(--text);
  }
  .ftco-navbar-light .navbar-nav > .nav-item > .nav-link {
    min-height: 44px;
    display: flex;
    align-items: center;
  }
}

/* --------------------------------------------------------------------------
   2.0.1 Mobile menu panel — scrolls itself, not the page
   --------------------------------------------------------------------------
   The collapse used to open in normal document flow, pushing the page
   taller — so "scrolling" scrolled the whole page (and, if you scrolled
   past 80px, handed the header to main.js's sticky-header logic mid-open,
   which then clipped whatever was open since that fixed header has no
   overflow of its own). Instead the open menu is now its own fixed-height,
   internally-scrollable panel anchored under the always-visible brand/
   toggler row; the page behind is frozen (`:has()` is already used
   elsewhere in this file for the sticky header, so it's a safe baseline)
   so the only thing that scrolls while the menu is open is the menu. */
@media (max-width: 991.98px) {
  #ftco-navbar .container {
    position: relative;
  }
  #ftco-nav.show {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    max-height: 80vh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    background: #fff;
    box-shadow: 0 16px 32px -10px rgba(0, 0, 0, 0.25);
    z-index: 1050;
    padding: 0 15px 20px;
  }
  body:has(#ftco-nav.show) {
    overflow: hidden;
  }
}

/* --------------------------------------------------------------------------
   2.1 Mobile header — logo + hamburger
   --------------------------------------------------------------------------
   style.css has three separate, conflicting mobile rules for
   `.navbar-brand img` (an unscoped 28px, a 991.98px 24px, and a later
   991.98px `35px !important`) written at different times without removing
   the earlier ones — the last !important one wins today, leaving the logo
   noticeably small. The toggler ("MENU") is untouched dated Bootstrap:
   uppercase, 0.1em letter-spacing, no flex alignment between its icon and
   text, and its own box ends up taller than the logo — so even though the
   row itself is `align-items:center`, the two visually read as offset.
   This block is the single source of truth for both from here on: a
   bigger logo, and a compact pill-style toggler whose icon+label are
   flex-centered and height-matched to the logo so their visual centers
   line up. */
@media (max-width: 991.98px) {
  .navbar-brand {
    display: flex !important;
    align-items: center;
    margin-right: 0;
    /* style.css adds margin-bottom:20px to the brand at <=767.98px
       (meant to give the logo breathing room above the expanded mobile
       menu), but it fires unconditionally — including while the header
       is closed, where it inflates the brand's margin box to the full
       row height and pins it to the top instead of letting it center
       against the toggler. Zeroed here; the expanded menu already gets
       enough separation from .navbar-nav .nav-link's own padding. */
    margin-bottom: 0 !important;
  }
  .navbar-brand img {
    height: 42px !important;
    width: auto;
  }
  .navbar-toggler {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 42px;
    padding: 0 16px !important;
    border-radius: 999px;
    background: var(--tm-primary-50, rgba(15, 59, 104, 0.06));
    text-transform: none !important;
    letter-spacing: normal !important;
    font-size: 13.5px !important;
    font-weight: 700;
    color: var(--primary, #0f3b68) !important;
    transition: background 0.2s var(--tm-ease, ease);
  }
  .navbar-toggler:hover,
  .navbar-toggler:focus {
    background: var(--tm-primary-100, rgba(15, 59, 104, 0.12));
  }
  .navbar-toggler .fa-bars {
    font-size: 15px !important;
    line-height: 1;
  }
}


/* --------------------------------------------------------------------------
   3. Hero banners (about/services/contact/hr/payroll/peo/countries/our-staff/
      schedule-meeting/staff pages all use hero-wrap.hero-wrap-2)
   -------------------------------------------------------------------------- */
.hero-wrap.hero-wrap-2 .overlay {
  background: var(--tm-gradient-hero);
  opacity: 1;
}
.hero-wrap.hero-wrap-2:after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 4px;
  background: var(--tm-gradient-accent);
}
.hero-wrap.hero-wrap-2 .slider-text h1 {
  font-size: clamp(1.75rem, 1.3rem + 2vw, 2.5rem);
}
/* style.css's home-slider h1 jumps straight from 50px to a fixed 40px at
   991.98px with +3px letter-spacing added on top, then never shrinks
   further — on phones (~375-400px) the longer slide titles ("Scale your
   team: fast, simple, legal") overflow the viewport width and get visually
   clipped. A fluid size removes the hard floor. */
.owl-carousel.home-slider .slider-item .slider-text h1 {
  font-size: clamp(1.75rem, 1.2rem + 3vw, 3.125rem) !important;
}
@media (max-width: 991.98px) {
  .owl-carousel.home-slider .slider-item .slider-text h1 {
    letter-spacing: 1px !important;
  }
}

/* --------------------------------------------------------------------------
   3.1 Hero depth — layered gradient wash, hairline grid texture, two
       slow-drifting glow shapes, and a one-time entrance rise on the text.
       Both real hero patterns route through their own `.overlay` child div,
       which style.css already positions `absolute; inset:0` and paints
       above the background photo / below the text container in both cases
       (confirmed via style.css:10946-10965 and :11085-11095) — so every
       layer below composites correctly with zero markup changes. `.overlay`
       is itself `position:absolute`, which already establishes the
       containing block its own ::before/::after position against, and
       `overflow:hidden` on the outer wrapper keeps every shape safely
       cropped to the hero's own bounds.
   -------------------------------------------------------------------------- */
.hero-wrap.hero-wrap-2 {
  overflow: hidden;
}
.hero-wrap.hero-wrap-2 .overlay {
  /* Diagonal hairline texture layer removed (same fix as the home-slider
     overlay above) — it read as visible diagonal lines across the photo.
     Base tint switched from --tm-gradient-hero's navy wash to solid black
     at the token itself (see :root), so this composites as black here too. */
  background:
    radial-gradient(
      circle at 15% 20%,
      rgba(212, 175, 55, 0.12) 0%,
      transparent 45%
    ),
    radial-gradient(
      circle at 85% 78%,
      rgba(255, 255, 255, 0.08) 0%,
      transparent 40%
    ),
    var(--tm-gradient-hero);
  background-size:
    140% 140%,
    140% 140%,
    100% 100%;
  background-position:
    0% 0%,
    100% 100%,
    center;
  /* tmHeroDriftSlider (defined below, alongside the home-slider's own
     overlay) — both overlays are now the same 3-layer shape (the hairline
     layer that the original 4-layer tmHeroDrift was built for is gone
     from both), so they share one keyframe instead of keeping a second,
     now-identical one around. */
  animation: tmHeroDriftSlider 26s var(--tm-ease) infinite alternate;
}
.hero-wrap.hero-wrap-2 .overlay:before,
.hero-wrap.hero-wrap-2 .overlay:after {
  content: "";
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(2px);
}
.hero-wrap.hero-wrap-2 .overlay:before {
  width: 180px;
  height: 180px;
  right: 8%;
  top: -50px;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.2) 0%,
    transparent 70%
  );
  animation: tmFloat1 9s ease-in-out infinite;
}
.hero-wrap.hero-wrap-2 .overlay:after {
  width: 120px;
  height: 120px;
  left: 6%;
  bottom: -30px;
  background: radial-gradient(
    circle,
    rgba(255, 255, 255, 0.14) 0%,
    transparent 70%
  );
  animation: tmFloat2 11s ease-in-out infinite;
}
.hero-wrap.hero-wrap-2 .slider-text .breadcrumbs,
.hero-wrap.hero-wrap-2 .slider-text h1 {
  animation: tmHeroRise 0.8s var(--tm-ease) both;
}
.hero-wrap.hero-wrap-2 .slider-text h1 {
  animation-delay: 0.12s;
}

/* Home slider: same treatment, kept lighter so the slide photos stay the
   focal point — style.css's own overlay here is a flat 20%-opacity black
   (style.css:11085-11095), which this replaces with rgba layers that carry
   their own alpha instead of one blanket element-opacity, so the glows
   keep independent, precise strength. The diagonal hairline texture layer
   that used to sit on top (a repeating 45deg white line pattern) has been
   removed — it read as visible diagonal lines across the photos. */
.owl-carousel.home-slider .slider-item .overlay {
  background:
    radial-gradient(
      circle at 18% 22%,
      rgba(212, 175, 55, 0.12) 0%,
      transparent 45%
    ),
    radial-gradient(
      circle at 88% 82%,
      rgba(24, 78, 138, 0.3) 0%,
      transparent 45%
    ),
    linear-gradient(
      160deg,
      rgba(7, 26, 44, 0.55) 0%,
      rgba(10, 36, 64, 0.22) 55%,
      rgba(7, 26, 44, 0.5) 100%
    );
  background-size:
    150% 150%,
    150% 150%,
    100% 100%;
  background-position:
    0% 0%,
    100% 100%,
    center;
  /* Shared with .hero-wrap.hero-wrap-2 .overlay — both lost their hairline
     layer and are now the same 3-layer shape. */
  animation: tmHeroDriftSlider 30s var(--tm-ease) infinite alternate;
  opacity: 1;
}
.owl-carousel.home-slider .slider-item .overlay:before,
.owl-carousel.home-slider .slider-item .overlay:after {
  content: "";
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(3px);
}
.owl-carousel.home-slider .slider-item .overlay:before {
  width: 260px;
  height: 260px;
  right: 6%;
  top: -80px;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.18) 0%,
    transparent 70%
  );
  animation: tmFloat1 13s ease-in-out infinite;
}
.owl-carousel.home-slider .slider-item .overlay:after {
  width: 180px;
  height: 180px;
  left: 8%;
  bottom: -40px;
  background: radial-gradient(
    circle,
    rgba(255, 255, 255, 0.1) 0%,
    transparent 70%
  );
  animation: tmFloat2 16s ease-in-out infinite;
}
/* style.css sets this eyebrow label to an off-brand green (#58e36b,
   style.css:11128) — jarring against the new navy/gold palette. */
.owl-carousel.home-slider .slider-item .slider-text h2 {
  color: var(--accent) !important;
}
.owl-carousel.home-slider .slider-item .slider-text h2,
.owl-carousel.home-slider .slider-item .slider-text h1 {
  animation: tmHeroRise 0.9s var(--tm-ease) both;
}
.owl-carousel.home-slider .slider-item .slider-text h1 {
  animation-delay: 0.14s;
}
.owl-carousel.home-slider .slider-item .slider-text .btn {
  animation: tmHeroRise 0.9s var(--tm-ease) both;
  animation-delay: 0.26s;
}

/* Shared by both real hero overlays (home-slider and hero-wrap-2) — see
   the comments on their respective `animation` declarations. */
@keyframes tmHeroDriftSlider {
  from {
    background-position:
      0% 0%,
      100% 100%,
      center;
  }
  to {
    background-position:
      8% 6%,
      92% 94%,
      center;
  }
}
@keyframes tmFloat1 {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(18px);
  }
}
@keyframes tmFloat2 {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-14px);
  }
}
@keyframes tmHeroRise {
  from {
    opacity: 0;
    transform: translateY(16px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@media (prefers-reduced-motion: reduce) {
  .hero-wrap.hero-wrap-2 .overlay,
  .owl-carousel.home-slider .slider-item .overlay,
  .hero-wrap.hero-wrap-2 .overlay:before,
  .hero-wrap.hero-wrap-2 .overlay:after,
  .owl-carousel.home-slider .slider-item .overlay:before,
  .owl-carousel.home-slider .slider-item .overlay:after,
  .hero-wrap.hero-wrap-2 .slider-text .breadcrumbs,
  .hero-wrap.hero-wrap-2 .slider-text h1,
  .owl-carousel.home-slider .slider-item .slider-text h2,
  .owl-carousel.home-slider .slider-item .slider-text h1,
  .owl-carousel.home-slider .slider-item .slider-text .btn {
    animation: none;
  }
}

/* --------------------------------------------------------------------------
   3.2 Contact page hero — dedicated banner for the Jerash-columns photo
   --------------------------------------------------------------------------
   Scoped to `.hero-wrap-contact`, an extra class added alongside contact.
   html's existing `hero-wrap hero-wrap-2` (contact.html:223) — every
   selector below stacks all three classes so it always outranks the
   general hero-wrap-2 rules above without touching services.html, which
   shares the same hero-wrap-2 markup pattern and must stay untouched.
   The photo itself (imgs/pexels-francesco-ungaro-15997234.jpg) was already
   wired into that section's inline background-image; nothing here changes
   which image loads, only how the banner around it is presented — a
   calmer single flat overlay instead of §3.1's busier multi-layer texture/
   glow treatment, since a single portrait photo stretched this wide reads
   better with one restrained wash than competing decoration on top of it.
   -------------------------------------------------------------------------- */
.hero-wrap.hero-wrap-2.hero-wrap-contact {
  background-size: cover;
  background-position: center;
  height: 460px; /* desktop: middle of the requested 420-500px */
  animation: tmContactHeroFadeIn 0.9s var(--tm-ease) both;
}
@media (max-width: 991.98px) {
  .hero-wrap.hero-wrap-2.hero-wrap-contact {
    height: 360px; /* tablet */
  }
}
@media (max-width: 767.98px) {
  .hero-wrap.hero-wrap-2.hero-wrap-contact {
    height: 280px; /* mobile */
  }
}
/* general rule hardcodes height:400px; match this variant's own height at
   each breakpoint instead — a plain 100% doesn't resolve here since the
   .container ancestor between this row and .hero-wrap-contact has no
   explicit height of its own for the percentage to resolve against, which
   left the row shrunk to its content's height and sitting flush under the
   navbar instead of being pushed to the bottom by align-items-end. */
.hero-wrap.hero-wrap-2.hero-wrap-contact .slider-text {
  height: 460px;
}
@media (max-width: 991.98px) {
  .hero-wrap.hero-wrap-2.hero-wrap-contact .slider-text {
    height: 360px;
  }
}
@media (max-width: 767.98px) {
  .hero-wrap.hero-wrap-2.hero-wrap-contact .slider-text {
    height: 280px;
  }
}

/* Flat premium navy wash at the exact requested tone, layered with a soft
   fade at the bottom that blends into the next section's --bg-light for a
   seamless seam instead of a hard cut. */
.hero-wrap.hero-wrap-2.hero-wrap-contact .overlay {
  background:
    linear-gradient(
      to bottom,
      transparent 0%,
      transparent 78%,
      rgba(248, 250, 252, 0.96) 100%
    ),
    rgba(15, 59, 104, 0.55);
  animation: none;
}
.hero-wrap.hero-wrap-2.hero-wrap-contact .overlay:before,
.hero-wrap.hero-wrap-2.hero-wrap-contact .overlay:after {
  content: none;
}
/* §3.1's per-element text rise is replaced by one unified fade+rise on the
   whole banner below, so it isn't disabled here — it's simply not layered
   with a second, redundant motion on the text alone. */
.hero-wrap.hero-wrap-2.hero-wrap-contact .slider-text .breadcrumbs,
.hero-wrap.hero-wrap-2.hero-wrap-contact .slider-text h1 {
  animation: none;
}

@keyframes tmContactHeroFadeIn {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@media (prefers-reduced-motion: reduce) {
  .hero-wrap.hero-wrap-2.hero-wrap-contact {
    animation: none;
  }
}

/* --------------------------------------------------------------------------
   3.3 Insights page hero — lighter wash, no diagonal hairline texture
   --------------------------------------------------------------------------
   Scoped to `.hero-wrap-insights` (insights.html:236 only), same pattern as
   §3.2's `.hero-wrap-contact`: drops §3.1's 45deg repeating-linear-gradient
   texture and lightens the dark wash, without touching the general
   hero-wrap-2 rules every other page sharing that markup still uses.
   -------------------------------------------------------------------------- */
.hero-wrap.hero-wrap-2.hero-wrap-insights .overlay {
  background:
    radial-gradient(
      circle at 15% 20%,
      rgba(212, 175, 55, 0.12) 0%,
      transparent 45%
    ),
    radial-gradient(
      circle at 85% 78%,
      rgba(255, 255, 255, 0.08) 0%,
      transparent 40%
    ),
    linear-gradient(
      160deg,
      rgba(15, 59, 104, 0.55) 0%,
      rgba(24, 78, 138, 0.45) 55%,
      rgba(10, 36, 64, 0.35) 100%
    );
  background-size:
    140% 140%,
    140% 140%,
    100% 100%;
  background-position:
    0% 0%,
    100% 100%,
    center;
  animation: none;
}

/* --------------------------------------------------------------------------
   4. Section rhythm — recolor the existing bg-light / bg-secondary bands
   -------------------------------------------------------------------------- */
.ftco-section {
  padding: clamp(3rem, 2.2rem + 3vw, 7em) 0;
}
/* Plain .bg-light (not just .ftco-section.bg-light) so .ftco-counter.bg-light
   — which carries no ftco-section class — gets the same tone instead of the
   vendor's near-identical-but-different flat #f8f9fd. Flat, not a gradient:
   a top-to-bottom gradient repeats independently on every .bg-light section,
   so each one fades dark at its own bottom edge then resets to light again
   at the next section's top — stacked sections (about.html chains 4 back to
   back) showed a repeating light/dark "pinch" at every seam that read as
   overlapping shadows. One flat tone removes that entirely; the hairline
   below still marks the boundary. */
.bg-light {
  background: var(
    --tm-primary-50
  ) !important; /* style.css .bg-light is !important */
}
/* #section-counter (index.html, about.html) is .ftco-no-pt on top of its
   already-zero base — the stat numbers sit flush against the hairline with
   no cushion at all, reading as cramped even though the *previous* section's
   own bottom padding still separates it from that section's content. A
   small top cushion here fixes the counter band itself without reopening a
   full double-gap against the section above. */
#section-counter {
  padding-top: 2.5rem !important;
}
/* index.html: the plain white services-card grid right after the "Meet
   Msindaha HRM" gradient card (.hrm-section) had its own top padding
   zeroed by .ftco-no-pt, so its content (the cards) started flush at the
   section's own top edge — no breathing room before the cards themselves.
   Scoped via the general sibling combinator (~, not + — a <style> block
   sits between .hrm-section and this section in the markup, so they
   aren't *immediate* siblings) so the many other intentionally-flush
   .ftco-no-pt sections elsewhere on the site are untouched; the later
   #section-counter still wins there via ID specificity regardless.
   .ftco-no-pt sets padding-top: 0 !important, so beating it back needs
   !important too. */
.hrm-section ~ section.ftco-no-pt {
  padding-top: 4.5rem !important;
}
/* about.html: its FAQ band (uniquely combines .ftco-no-pt with .ftco-faqs
   — index.html's own .ftco-faqs section has no .ftco-no-pt and already
   gets the full 7em top padding, so this stays scoped to about.html) had
   its own top padding zeroed by .ftco-no-pt, so the FAQ content started
   right at the section's top edge with no cushion above it. */
.ftco-no-pt.ftco-faqs {
  padding-top: 4.5rem !important;
}
/* Adjacent sections need a visible seam even when both are bg-light and sit
   flush (.ftco-no-pt/.ftco-no-pb remove the gap by design) — otherwise
   stacked same-tone sections read as one confusing block. A hairline is
   enough; it doesn't fight the flush spacing, just marks where one section's
   content ends and the next begins. */
.ftco-section,
.ftco-counter,
.team-section,
.countries-section {
  position: relative;
}
.ftco-section + .ftco-section,
.ftco-section + .ftco-counter,
.ftco-counter + .ftco-section,
.ftco-section + .team-section,
.ftco-section + .countries-section {
  box-shadow: inset 0 1px 0 rgba(15, 59, 104, 0.08);
}
/* Background itself (was an unrelated pale teal #8fd0d2 in the vendor CSS)
   is set in §4.1 below, layered with a dot-grid texture — kept here is just
   the text-contrast fix for content sitting on top of that dark band. */
.ftco-section.bg-secondary h1,
.ftco-section.bg-secondary h2,
.ftco-section.bg-secondary h3,
.ftco-section.bg-secondary h4,
.ftco-section.bg-secondary p,
.ftco-section.bg-secondary li {
  color: #fff !important; /* services.html hardcodes style="color:black" inline on its h2 — only !important beats an inline style */
}

.heading-section .subheading {
  position: relative;
  display: inline-block;
}
.heading-section .subheading:after {
  content: "";
  display: block;
  width: 40px;
  height: 3px;
  margin-top: 6px;
  background: var(--tm-gradient-accent);
  border-radius: 2px;
}
/* .subheading is inline-block (shrink-to-fit), so the 40px bar above always
   starts flush at its left edge — correct for left-aligned intro sections,
   but on centered heading-section-white bands (e.g. "Global Hiring Process")
   the text itself is centered while the bar stayed pinned to that box's
   left edge, reading as off-center underneath it. Centering the bar's own
   margins only inside .text-center contexts fixes that without touching
   the left-aligned look used everywhere else. */
.heading-section.text-center .subheading:after {
  margin-left: auto;
  margin-right: auto;
}
.heading-section h2 {
  font-size: clamp(1.5rem, 1.2rem + 1.4vw, 1.875rem);
}

/* --------------------------------------------------------------------------
   4.1 Decorative section backgrounds — so no band of the page ever reads as
       a flat, empty white area. Two soft blur circles per section (corner-
       anchored, low opacity, huge blur, pointer-events:none) via ::before/
       ::after — zero new DOM. Positioned within 0-100% (no negative offsets)
       so nothing needs overflow:hidden added to sections whose content may
       legitimately need to overflow (.countries-section runs a Leaflet map
       and is deliberately left alone here). Tint alternates by section type
       so adjacent bands read as distinct, not a repeated stamp.
   -------------------------------------------------------------------------- */
.testimony-section {
  position: relative;
}
.ftco-section,
.ftco-counter,
.team-section,
.testimony-section {
  overflow: hidden;
}
.ftco-section:before,
.ftco-section:after,
.ftco-counter:before,
.ftco-counter:after,
.team-section:before,
.team-section:after,
.countries-section:before,
.countries-section:after,
.testimony-section:before,
.testimony-section:after {
  content: "";
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  z-index: 0;
  filter: blur(2px);
}
.ftco-section:before,
.team-section:before,
.countries-section:before {
  width: 360px;
  height: 360px;
  top: 4%;
  right: 3%;
  background: radial-gradient(
    circle,
    rgba(15, 59, 104, 0.05) 0%,
    transparent 70%
  );
}
.ftco-section:after,
.team-section:after,
.countries-section:after {
  width: 280px;
  height: 280px;
  bottom: 2%;
  left: 4%;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.06) 0%,
    transparent 70%
  );
}
.ftco-counter:before,
.testimony-section:before {
  width: 320px;
  height: 320px;
  top: -10%;
  right: 8%;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.08) 0%,
    transparent 70%
  );
}
.ftco-counter:after,
.testimony-section:after {
  width: 260px;
  height: 260px;
  bottom: -8%;
  left: 6%;
  background: radial-gradient(
    circle,
    rgba(15, 59, 104, 0.06) 0%,
    transparent 70%
  );
}
/* Ensure real content always paints above the decoration layer */
.ftco-section > .container,
.ftco-counter > .container,
.team-section > .container,
.countries-section > .container,
.testimony-section > .container {
  position: relative;
  z-index: 1;
}
/* Dark bg-secondary bands get a faint dot-grid instead of the blur circles
   above (more contrast-appropriate against the solid gradient fill),
   layered on top of the existing brand gradient in one background shorthand */
.ftco-section.bg-secondary {
  background:
    radial-gradient(rgba(255, 255, 255, 0.08) 1px, transparent 1px) 0 0/22px
      22px,
    var(--tm-gradient-primary) !important;
}
.ftco-section.bg-secondary:before,
.ftco-section.bg-secondary:after {
  content: none;
}

/* --------------------------------------------------------------------------
   5. Cards, team cards, counters, FAQ accordion, testimonials
   -------------------------------------------------------------------------- */
/* index.html and our-staff.html each used to carry their own identical
   copy of this whole component in a page-level <style> block, loaded after
   this file with equal selector specificity — same bug as the footer in
   §9: the page-local copy silently won every tie and undid this design.
   Both duplicates were deleted from the HTML; this is now the only
   definition, covering every property the old copies set (not just the
   hover accent this section used to be limited to). */
#our-team .team-card {
  background: #fff;
  border: 1px solid rgba(15, 59, 104, 0.06);
  border-top: 3px solid transparent;
  border-radius: var(--tm-radius-lg);
  box-shadow: var(--tm-shadow-sm);
  padding: 28px 22px 24px;
  text-align: center;
  display: flex;
  flex-direction: column;
  height: 100%;
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease),
    border-color 0.35s var(--tm-ease);
}
#our-team .team-card:hover {
  transform: translateY(-10px);
  box-shadow: var(--tm-shadow-lg);
  border-top-color: var(--accent);
}
#our-team .team-img {
  width: 100%;
  height: 220px;
  object-fit: cover;
  object-position: top;
  border-radius: var(--tm-radius-md);
  margin-bottom: 18px;
  transition: transform 0.5s var(--tm-ease);
}
#our-team .team-card:hover .team-img {
  transform: scale(1.04);
}
#our-team .team-name {
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--primary);
  margin-bottom: 0.25rem;
}
#our-team .team-role {
  font-size: 0.8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--secondary);
  margin-bottom: 0.85rem;
}
#our-team .team-desc {
  font-size: 0.92rem;
  line-height: 1.6;
  color: var(--muted) !important; /* page-local copy set this !important; matched so nothing gets lighter now that it's gone */
  margin-bottom: 1.1rem;
  flex-grow: 1;
}
#our-team .socials {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: auto;
  margin-bottom: 1.1rem;
}
#our-team .socials a {
  width: 34px;
  height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--tm-primary-50);
  color: var(--primary);
  font-size: 15px;
  transition: all 0.3s var(--tm-ease);
}
#our-team .socials a:hover {
  background: var(--tm-gradient-primary);
  color: #fff;
  transform: translateY(-2px);
  box-shadow: var(--tm-shadow-sm);
}
#our-team .team-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: auto;
  padding: 9px 22px;
  border-radius: 999px;
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--primary);
  border: 2px solid var(--primary);
  text-decoration: none;
  transition: all 0.3s var(--tm-ease);
}
#our-team .team-btn:hover {
  background: var(--tm-gradient-primary);
  border-color: transparent;
  color: #fff;
  box-shadow: var(--tm-shadow-md);
  transform: translateY(-2px);
}

.ftco-counter .text .number,
.ftco-counter .text .plus {
  background: var(--tm-gradient-primary);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

.ftco-faqs .myaccordion .btn {
  border: 1px solid var(--tm-primary-100);
  border-radius: 999px !important; /* style.css sets border-radius !important */
  box-shadow: var(
    --tm-shadow-sm
  ) !important; /* style.css sets box-shadow !important */
}
.ftco-faqs .myaccordion .btn[aria-expanded="true"] {
  background: var(--tm-gradient-primary);
  color: #fff !important;
  border-color: transparent;
}
/* The question text is a <p class="mb-0"> inside the button, not the
   button's own text node — §1.5's global `p{color:var(--text)}` rule
   directly matches it, and a direct rule on a child always wins over an
   inherited value from the parent regardless of the parent's !important
   (inheritance only fills in when nothing else matches), so the button's
   white text above never reached the question itself. Explicit override
   needed here too. */
.ftco-faqs .myaccordion .btn[aria-expanded="true"] p {
  color: #fff !important;
}
/* style.css gives every toggle the same chevron-down glyph regardless of
   state (style.css:12169-12173, no [aria-expanded] variant at all) — expand/
   collapse currently has zero icon feedback. Rotating it on the existing
   aria-expanded state is a pure CSS addition; the icon's own explicit color
   rule (style.css:12144-12147) otherwise wins over the button's white text
   by specificity, so it needs an explicit white here too or it goes
   near-invisible against the dark expanded background. */
.ftco-faqs .myaccordion .fa {
  transition: transform 0.3s var(--tm-ease);
}
.ftco-faqs .myaccordion .btn[aria-expanded="true"] .fa {
  color: #fff;
  transform: rotate(180deg);
}

.testimony-section .overlay {
  /* Flat, not a gradient — same reasoning as .bg-light above: a top-to-bottom
     gradient here would fade to its darkest at the section's own bottom edge,
     then reset to light again where the next .bg-light section starts,
     producing the same repeating "pinch" artifact. Flat --tm-primary-100
     instead gives this section one deliberate, slightly deeper step from the
     plain --tm-primary-50 used elsewhere — a clean single boundary, not a
     sawtooth. */
  background: var(--tm-primary-100);
  /* style.css caps this at a fixed height:400px with no `bottom`, so on any
     testimony-section taller than 400px (index.html's "Global Hiring
     Process" carousel is ~900px) the overlay cut off mid-section and the
     section's own .bg-light background showed through below that point —
     an arbitrary, content-unrelated seam partway down the section. Stretching
     the overlay to the full section height removes that internal seam
     entirely. */
  height: auto;
  bottom: 0;
}

/* --------------------------------------------------------------------------
   5.1 Service teaser cards — index.html's 3-up HR/Payroll/PEO teasers and
       services.html's matching set (exact markup confirmed at
       index.html:409-424: `.services.d-flex > .d-block > .icon > span.flaticon-*`
       + `.media-body > h3.heading + p`). style.css's own rule for the inner
       wrapper targets `.services .dblock` (no hyphen) — a typo that never
       matches the real `.d-block` markup — so `.d-block` reaches the page
       with no vendor box styling at all beyond Bootstrap's `display:block`
       utility; free to make it the card shell outright. The old look was an
       oversized 80px pale-grey "ghost" icon (style.css:11429-11432) floating
       behind the heading with no card surface — replaced with a bordered,
       shadowed card and a small solid gradient icon badge matching the
       language already used by `.services-2 .icon` and `#our-team .socials`.
   -------------------------------------------------------------------------- */
.services {
  transition: none; /* let the card itself (.d-block) own all motion */
}
.services .d-block {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--tm-radius-lg);
  box-shadow: var(--tm-shadow-sm);
  padding: 34px 26px 28px;
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease),
    border-color 0.35s var(--tm-ease);
}
.services .d-block:hover {
  transform: translateY(-8px);
  box-shadow: var(--tm-shadow-lg);
  border-color: var(--tm-primary-100);
}
.services .icon {
  position: static;
  z-index: 0;
  width: 64px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--tm-gradient-primary);
  box-shadow: var(--tm-shadow-sm);
  margin-bottom: 20px;
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease);
}
.services .icon span {
  font-size: 28px;
  color: #fff;
}
.services .d-block:hover .icon {
  transform: scale(1.08) rotate(-4deg);
  box-shadow: var(--tm-shadow-gold);
}
.services .media-body h3.heading {
  color: var(--text);
  font-weight: 700;
  margin-bottom: 0.6rem;
}
.services .media-body h3.heading:after {
  content: "\2192"; /* → */
  display: inline-block;
  margin-left: 8px;
  opacity: 0;
  color: var(--accent);
  transform: translateX(-4px);
  transition: all 0.3s var(--tm-ease);
}
.services .d-block:hover .media-body h3.heading:after {
  opacity: 1;
  transform: translateX(0);
}
.services .media-body p {
  color: var(--muted);
  margin-bottom: 0;
}

/* --------------------------------------------------------------------------
   5.2 About/intro section — the "welcome" image + logo strip repeated
       identically on about.html:139, index.html:286 and services.html:198
       (all three via `.img.img-video`, confirmed via sitewide grep — safe to
       style globally) and the Msindaha/HLB Jordan logo row directly beneath
       the intro paragraph on about.html/index.html (`.heading-section .d-flex
       img`, present nowhere else on the site).
   -------------------------------------------------------------------------- */
.img.img-video {
  box-shadow: var(--tm-shadow-lg) !important;
  position: relative;
}
/* Offset accent frame sitting behind the photo — purely decorative, doesn't
   affect layout since the image column already reserves this space via its
   own margin/padding. Positioned relative to the column itself, so the
   column needs to be the positioning context for its own ::before. */
.col-md-6:has(> .img.img-video) {
  position: relative;
}
.col-md-6:has(> .img.img-video):before {
  content: "";
  position: absolute;
  inset: 16px -16px -16px 16px;
  border: 2px solid var(--accent);
  border-radius: var(--tm-radius-lg);
  opacity: 0.4;
  z-index: -1;
  pointer-events: none;
}
.heading-section .d-flex img {
  max-height: 56px !important; /* about.html sets 65-70px inline per-image; index.html sets none at all — !important unifies both */
  width: auto;
  object-fit: contain;
  filter: grayscale(15%);
  opacity: 0.92;
  transition:
    filter 0.3s var(--tm-ease),
    opacity 0.3s var(--tm-ease),
    transform 0.3s var(--tm-ease);
}
.heading-section .d-flex img:hover {
  filter: grayscale(0%);
  opacity: 1;
  transform: translateY(-2px);
}

/* --------------------------------------------------------------------------
   5.3 Statistics — premium stat cards. Structure confirmed identical on
       index.html:466-526 and about.html:180-230:
       `.counter-wrap.ftco-animate > .block-18.text-center > .text >
       strong.number[data-number] + span.plus`, second `.text > span` for the
       label. `.number`/`data-number` are read directly by main.js's counter
       animation (js/main.js:183-204) — left untouched.
   -------------------------------------------------------------------------- */
.ftco-counter .block-18 {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--tm-radius-lg);
  box-shadow: var(--tm-shadow-sm);
  padding: 30px 20px 26px;
  position: relative;
  overflow: hidden;
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease);
}
.ftco-counter .block-18:hover {
  transform: translateY(-6px);
  box-shadow: var(--tm-shadow-md);
}
/* Large decorative corner glyph, clipped by the card's own overflow:hidden */
.ftco-counter .block-18:before {
  content: "";
  position: absolute;
  top: -30px;
  right: -30px;
  width: 90px;
  height: 90px;
  border-radius: 50%;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.14) 0%,
    transparent 70%
  );
  pointer-events: none;
}
.ftco-counter .text .number,
.ftco-counter .text .plus {
  font-size: clamp(2.25rem, 1.8rem + 1.4vw, 3rem);
}
.ftco-counter .text span:not(.plus) {
  color: var(--muted);
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.08em;
}

/* --------------------------------------------------------------------------
   6. .profile-container pattern (hr/payroll/peo + 5 staff bio pages)
   -------------------------------------------------------------------------- */
.profile-container .divider {
  background: var(
    --tm-gradient-accent
  ) !important; /* page-level <style> sets a flat grey/blue, loads after <head> */
  height: 4px !important;
}
.image-container img {
  border-radius: var(--tm-radius-lg) !important;
}
.content h1 {
  font-size: clamp(1.6rem, 1.2rem + 1.6vw, 2.5rem);
}

/* hr.html / payroll.html / peo.html define .profile-container with no
   flex-wrap and no responsive rule at all, so it stays cramped side-by-side
   on phones. The 5 staff bio pages already handle this at 992px; this rule
   is additive there (a narrower, harmless subset) and load-bearing on the
   other 3. */
@media (max-width: 767.98px) {
  .profile-container {
    flex-direction: column;
    flex-wrap: wrap;
    padding: 32px 20px;
    text-align: center;
  }
  .image-container {
    order: -1;
    max-width: 100%;
  }
  .image-container img {
    max-width: 280px;
  }
}

/* --------------------------------------------------------------------------
   7. schedule-meeting.html — reconcile bespoke decor to brand tokens
      (its <style> block is inline in <body>, after <head>, so plain cascade
      ties go to it — !important needed throughout this section)
   -------------------------------------------------------------------------- */
.ms-sched-section {
  background: linear-gradient(160deg, var(--tm-primary-50), #fff) !important;
}
.ms-sched-bg-decor .ms-sched-circle1 {
  background-color: var(--primary) !important;
}
.ms-sched-bg-decor .ms-sched-circle2 {
  background-color: var(--tm-primary-700) !important;
}
.ms-sched-bg-decor .ms-sched-triangle {
  border-bottom-color: var(--primary) !important;
}
.ms-sched-title {
  color: var(--primary) !important;
}
.ms-sched-tab-btn {
  background: var(--tm-primary-700) !important;
  color: #fff !important;
}
.ms-sched-tab-btn:hover {
  background: var(--primary) !important;
}
.ms-sched-tab-btn.active {
  background: var(--tm-gradient-primary) !important;
  box-shadow: var(--tm-shadow-gold) !important;
}

/* --------------------------------------------------------------------------
   8. Sticky header
   --------------------------------------------------------------------------
   - .navbar-sticky is added by main.js when scroll > 80px.
   - The header becomes position:fixed, shrinks padding, and gains a subtle
     shadow + backdrop blur for a premium glassmorphism effect.
   - A 250ms transition prevents jarring jumps.
   - The .wrap (top bar) is hidden when sticky to reduce visual noise.
   - z-index is bumped to stay above all page content.
   -------------------------------------------------------------------------- */
#ftco-navbar {
  transition:
    padding 250ms var(--tm-ease),
    box-shadow 250ms var(--tm-ease),
    background-color 250ms var(--tm-ease);
}
#ftco-navbar.navbar-sticky {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1040;
  padding-top: 8px;
  padding-bottom: 8px;
  background-color: rgba(255, 255, 255, 0.97) !important;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
/* When sticky, shrink the logo slightly */
#ftco-navbar.navbar-sticky .navbar-brand img {
  height: 45px;
  transition: height 250ms var(--tm-ease);
}
/* Hide the top bar when header is sticky */
#ftco-navbar.navbar-sticky ~ .wrap,
body:has(#ftco-navbar.navbar-sticky) .wrap {
  display: none !important;
}
/* Prevent layout shift: add a placeholder of the same height */
#ftco-navbar.navbar-sticky + * {
  margin-top: 0;
}
/* On mobile, sticky header keeps smaller padding */
@media (max-width: 991.98px) {
  #ftco-navbar.navbar-sticky {
    padding-top: 6px;
    padding-bottom: 6px;
  }
  #ftco-navbar.navbar-sticky .navbar-brand img {
    height: 34px;
  }
}

/* --------------------------------------------------------------------------
   9. Footer — premium redesign
   --------------------------------------------------------------------------
   Design principles:
   - 8px spacing system for consistent rhythm.
   - Clean typography hierarchy with proper font weights.
   - Equal-width column grid for balanced visual weight.
   - Social icons with smooth hover lift + brand color transition.
   - Buttons with subtle hover elevation.
   - Copyright section clearly separated with a hairline.
   - Fully responsive: columns stack gracefully on mobile.
   -------------------------------------------------------------------------- */
.footer {
  /* Deep brand-navy rather than a neutral charcoal — ties the footer back
     to the primary palette instead of reading as an unrelated dark grey,
     closer to the dark navy footers used by the Big 4 reference sites. */
  background: linear-gradient(
    180deg,
    var(--tm-primary-900) 0%,
    var(--tm-primary-950) 100%
  );
  border-top: 3px solid var(--accent);
  padding-top: 0;
  padding-bottom: 0;
}
/* Main footer content area */
.footer .container-fluid > .row > .col-md-12 {
  padding-top: 48px;
  padding-bottom: 0;
}
/* Footer heading */
.footer .footer-heading {
  font-size: 15px;
  font-weight: 700;
  color: #ffffff;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-bottom: 20px;
  padding-bottom: 12px;
  position: relative;
}
.footer .footer-heading:after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 28px;
  height: 2px;
  background: var(--accent);
  border-radius: 1px;
}
/* Footer paragraph text */
.footer p {
  font-size: 14px;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.65);
  margin-bottom: 16px;
}
/* Footer links */
.footer a {
  color: rgba(255, 255, 255, 0.7);
  font-size: 14px;
  transition: color 250ms var(--tm-ease);
}
.footer a:hover {
  color: #ffffff;
}
/* Footer link list items */
.footer ul.list-unstyled li a {
  padding-top: 6px;
  padding-bottom: 6px;
  display: block;
  font-size: 14px;
  font-weight: 400;
  color: rgba(255, 255, 255, 0.65);
  transition:
    color 250ms var(--tm-ease),
    padding-left 250ms var(--tm-ease);
}
.footer ul.list-unstyled li a:hover {
  color: #ffffff;
  padding-left: 4px;
}
/* Social icons — modern circular design with hover lift */
.ftco-footer-social {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  gap: 12px;
}
.ftco-footer-social li {
  display: inline-block;
}
.ftco-footer-social a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  background-color: rgba(255, 255, 255, 0.08);
  color: rgba(255, 255, 255, 0.7);
  border-radius: 50%;
  font-size: 16px;
  text-decoration: none;
  transition:
    background-color 250ms var(--tm-ease),
    color 250ms var(--tm-ease),
    transform 250ms var(--tm-ease),
    box-shadow 250ms var(--tm-ease);
}
.ftco-footer-social a:hover {
  background: var(--tm-gradient-accent) !important;
  color: var(--text) !important;
  transform: translateY(-3px);
  box-shadow: 0 6px 16px rgba(212, 175, 55, 0.3);
}
/* Footer buttons */
.footer-btn {
  display: inline-block;
  padding: 10px 20px;
  font-size: 13px;
  font-weight: 600;
  color: #fff !important;
  background: var(--tm-gradient-primary);
  border: none;
  border-radius: 6px;
  text-align: center;
  text-decoration: none !important;
  cursor: pointer;
  transition:
    box-shadow 250ms var(--tm-ease),
    transform 250ms var(--tm-ease);
}
.footer-btn:hover,
.footer-btn:focus {
  box-shadow: 0 8px 24px rgba(15, 59, 104, 0.3);
  transform: translateY(-2px) scale(1.02);
  color: #fff !important;
}
.footer-btn.btn-sm {
  padding: 8px 16px;
  font-size: 12px;
}
/* Footer columns — equal height with flex column */
.footer .row.justify-content-center > .col-md-3 {
  display: flex;
  flex-direction: column;
}
/* Copyright section */
.footer .copyright {
  font-size: 13px;
  color: rgba(255, 255, 255, 0.45);
  text-align: center;
  padding-top: 24px;
  padding-bottom: 24px;
  border-top: 1px solid rgba(255, 255, 255, 0.08);
  margin-top: 32px;
}
/* Mobile footer adjustments */
@media (max-width: 767.98px) {
  .footer .footer-heading {
    margin-bottom: 16px;
  }
  .footer .container-fluid > .row > .col-md-12 {
    padding-top: 32px;
  }
  .footer .row.justify-content-center > .col-md-3 {
    margin-bottom: 24px;
  }
  .ftco-footer-social {
    justify-content: center;
  }
  .footer .copyright {
    padding-top: 16px;
    padding-bottom: 16px;
    margin-top: 24px;
  }
}

/* --------------------------------------------------------------------------
   10. Forms
   -------------------------------------------------------------------------- */
.form-control {
  border: 1px solid var(--border) !important;
  transition:
    border-color 0.25s var(--tm-ease),
    box-shadow 0.25s var(--tm-ease);
}
.form-control:focus {
  border-color: var(--primary) !important;
  box-shadow: 0 0 0 3px rgba(15, 59, 104, 0.12) !important;
}
/* Contact page form: style.css's own .contactForm .form-control (an older
   "underline" field style) sets padding:0 and border-radius isn't set
   anywhere for it, so text sat flush against the field's edge with only
   Bootstrap's default 4px corners — cramped and out of step with the
   rest of the site's rounded, spacious "theme-modern" look. This loads
   after style.css so it wins without needing !important. */
.contactForm .form-control {
  padding: 12px 16px;
  border-radius: var(--tm-radius-sm);
  background: #fff;
}
.contactForm textarea.form-control {
  padding: 14px 16px;
  min-height: 140px;
}
.contactForm .label {
  margin-bottom: 8px;
  letter-spacing: 0.4px;
}

/* Contact form submit button: an inline spinner that fades/scales in next
   to the label on submit, instead of the old plain-text "Sending…" that
   used to render in a bare, unstyled div next to the button. The label
   text itself is swapped ("Send Message" ⇄ "Sending…") by contact.html's
   submit handler; this only handles the spinner and the button's own
   loading affordance. */
.contact-submit-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.contact-submit-btn .btn-spinner {
  width: 0;
  height: 16px;
  border-radius: 50%;
  border: 2px solid rgba(255, 255, 255, 0.45);
  border-top-color: #fff;
  opacity: 0;
  transform: scale(0.6);
  transition:
    width 0.25s var(--tm-ease),
    opacity 0.25s var(--tm-ease),
    transform 0.25s var(--tm-ease);
  flex-shrink: 0;
}
.contact-submit-btn.is-loading {
  cursor: progress;
  opacity: 0.92;
}
.contact-submit-btn.is-loading .btn-spinner {
  width: 16px;
  opacity: 1;
  transform: scale(1);
  animation: tmBtnSpin 0.7s linear infinite;
}
@keyframes tmBtnSpin {
  to {
    transform: rotate(360deg) scale(1);
  }
}
@media (prefers-reduced-motion: reduce) {
  .contact-submit-btn.is-loading .btn-spinner {
    animation: none;
  }
}

/* Success confirmation card — replaces the old plain, unstyled text line
   with a small card (check-icon badge + message) that pops in with a
   short scale/fade entrance, matching the site's rounded, shadowed
   "theme-modern" cards elsewhere. contact.html toggles this element's
   `display` and re-triggers .form-success-pop on every successful send. */
.form-message-success {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 20px;
  border-radius: var(--tm-radius-md);
  background: rgba(34, 139, 87, 0.08);
  border: 1px solid rgba(34, 139, 87, 0.25);
  color: #1e7e4d;
  font-weight: 600;
}
.form-success-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #1e7e4d;
  color: #fff;
  font-size: 14px;
  flex-shrink: 0;
}
.form-success-pop {
  animation: tmSuccessPop 0.45s var(--tm-ease) both;
}
@keyframes tmSuccessPop {
  from {
    opacity: 0;
    transform: translateY(-6px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}
@media (prefers-reduced-motion: reduce) {
  .form-success-pop {
    animation: none;
  }
}

.btn.btn-primary {
  background: var(--tm-gradient-primary);
  border: none;
  transition:
    transform 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease);
}
.btn.btn-primary:hover {
  box-shadow: var(
    --tm-shadow-md
  ) !important; /* style.css forces box-shadow:none !important on .btn */
  transform: translateY(-2px) scale(1.02);
}

/* --------------------------------------------------------------------------
   10.1 Button hover physics — one consistent lift+scale formula shared by
        every primary-style CTA site-wide, so hovering any button anywhere
        (footer, blog filters) feels like the same interaction rather than
        several unrelated ones. .btn-cta-primary/.btn-cta-accent (§22) and
        .footer-btn (§9) already declare their own hover transform further
        down/up the file — updated in place there instead of duplicated
        here, since a later same-specificity rule would just win anyway.
   -------------------------------------------------------------------------- */
.category-btn {
  transform: translateY(0) scale(1);
  transition:
    background 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease),
    transform 0.3s var(--tm-ease);
}
.category-btn:hover:not(.active) {
  transform: translateY(-3px) scale(1.02);
}

/* --------------------------------------------------------------------------
    11. Countries section — full redesign into one coherent "explorer" tool:
        a labeled heading, a bordered panel of premium pill chips for
        country selection, and a map+details panel below. index.html wraps
        both panels in an extra `.countries-layout` div that countries.html
        doesn't have (confirmed by reading both pages' markup) — so instead
        of relying on that inconsistent wrapper, `.buttons-grid` and
        `.map-details-wrapper` are each styled as their own self-contained
        panel that works identically on both pages with no markup changes.

        Two live data formats coexist in the `countryDetails` content HTML
        (confirmed by comparing index.html's newer entries against
        countries.html's Jordan entry): a structured
        `.detail-section > .detail-row > .detail-label + .detail-value`
        format, and an older flat `<p><strong>Label:</strong> value</p>`
        format. Both are styled below so neither page looks unfinished.
    -------------------------------------------------------------------------- */

/* --- Section heading --- */
.countries-section h2,
.subscribe-form h2 {
  font-size: clamp(1.75rem, 1.4rem + 1.6vw, 2.25rem);
}
.countries-section > .container > h2 {
  text-align: center;
  font-weight: 800;
  max-width: 640px;
  margin: 0 auto 0.5rem;
}
.countries-section > .container > h2::before {
  content: "Global Reach";
  display: block;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: 12px;
}
.countries-section > .container > h2::after {
  content: "";
  display: block;
  width: 48px;
  height: 3px;
  background: var(--tm-gradient-accent);
  border-radius: 2px;
  margin: 16px auto 40px;
}

/* --- Country selector panel --- */
.countries-section .buttons-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 12px;
  max-width: 1100px;
  margin: 0 auto 32px;
  padding: 26px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--tm-radius-lg);
  box-shadow: var(--tm-shadow-sm);
}

.countries-section .country-button {
  background: var(--bg-light);
  color: var(--text);
  padding: 13px 16px;
  border-radius: 999px;
  font-weight: 600;
  font-size: 13px;
  text-align: center;
  cursor: pointer;
  border: 1.5px solid var(--border);
  transform: translateY(24px);
  opacity: 0;
  transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  letter-spacing: 0.1px;
}

.countries-section .country-button:hover {
  transform: translateY(-3px);
  box-shadow: var(--tm-shadow-md);
  border-color: var(--secondary);
  background: #fff;
  color: var(--primary);
}

.countries-section .country-button:active {
  transform: translateY(-1px) scale(0.97);
}

.countries-section .country-button.active {
  background: var(--tm-gradient-primary);
  color: #ffffff;
  border-color: transparent;
  box-shadow: var(--tm-shadow-gold);
  transform: translateY(-2px);
  font-weight: 700;
}
/* Explicit checkmark, not just a color swap, so the selected country reads
   as unambiguous at a glance rather than relying on remembering "which one
   was blue." */
.countries-section .country-button.active::before {
  content: "\2713";
  font-size: 11px;
  color: var(--accent);
}

.countries-section .country-button .country-flag {
  font-size: 16px;
  line-height: 1;
}

/* --- Map + details panel --- */
.countries-section .map-details-wrapper {
  display: flex;
  gap: 24px;
  max-width: 1100px;
  margin: 0 auto;
  align-items: stretch;
  flex-wrap: wrap;
  justify-content: center;
}

.countries-section #map-wrapper {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  border-radius: var(--tm-radius-lg);
  background: var(--surface);
  padding: 8px;
  box-shadow: var(--tm-shadow-sm);
  border: 1px solid var(--border);
}

/* Map's own pixel size is left untouched on purpose — Leaflet calculates
   its tile grid from the container's size at init time (js/main.js-adjacent
   inline script does `L.map("map").setView(...)` once), so resizing #map
   itself via CSS without a matching map.invalidateSize() call risks
   misaligned/cut-off tiles. Only the frame around it is restyled. */
.countries-section #map {
  width: 480px;
  height: 680px;
  border-radius: var(--tm-radius-md);
  flex-shrink: 0;
  z-index: 1;
}

.countries-section .map-footer {
  width: calc(100% - 3px);
  background: var(--tm-primary-800);
  color: #fff;
  font-size: 11px;
  text-align: center;
  padding: 8px 14px;
  border-radius: 0 0 10px 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 3px;
  letter-spacing: 0.2px;
  opacity: 0.85;
}

.countries-section .map-footer img {
  width: 26px;
  height: 26px;
  object-fit: contain;
  border-radius: 50%;
  background-color: #fff;
  padding: 2px;
}

.countries-section .map-footer span {
  font-weight: 400;
  opacity: 0.8;
}

/* --- Details card ---
   Single markup shape for every country, both pages: a .detail-header
   (title) followed by up to three .detail-section blocks ("General
   Information" / "Employment Information" / "Legal / Financial"), each
   holding a .detail-grid of label/value rows. All text is literal
   #ffffff — never rgba()/opacity — differentiated only by weight, size
   and case, per the "white text only" requirement. */
.countries-section .details-box {
  flex: 1;
  min-width: 300px;
  max-width: 480px;
  background-color: #1a1a1a; /* fallback only, shown if a country has no photo yet */
  background-image: var(--country-bg-image, none);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  color: #ffffff !important;
  /* This element is the direct parent of every label/value/title in the
     card — forced to 1 so nothing (a stray rule, a future JS tweak) can
     dim the white text by fading its container. The mount/switch animation
     (see showCountry() in the page script) only ever touches `transform`,
     never `opacity`, for the same reason. */
  opacity: 1 !important;
  /* Very light legibility aid over busy photo detail — this shades the
     glyph edges, it does not change the text's actual color, and it's
     independent of (and doesn't touch) the 30% overlay below. Inherited
     by every descendant since none of them re-set text-shadow. */
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55);
  padding: 30px 32px;
  border-radius: var(--tm-radius-lg);
  font-size: 13.5px;
  line-height: 1.6;
  box-shadow: var(--tm-shadow-md);
  /* Auto height, no internal scroll — the card grows to fit whatever
     content a given country has (four fields or fourteen). A fixed
     max-height + overflow-y:auto here used to clip long countries behind
     a scrollbar and left the photo/overlay only covering the clipped
     height instead of the full card. Since background-image/the ::before
     overlay both size themselves to their element's own box, an auto-height
     card automatically makes Content Height = Card Height = Image Height =
     Overlay Height with no extra rules needed. */
  height: auto;
  min-height: 0;
  max-height: none;
  overflow: visible;
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
  position: relative;
  border: 1px solid rgba(255, 255, 255, 0.05);
}

/* Flat 72% black readability overlay above the country photo (60% + a
   further 20% relative bump) — no gradient, no extra color. index.html
   sets the photo via inline style="background-image:…" (which wins over
   background-image above), countries.html sets it via the
   --country-bg-image custom property consumed above; either way this
   overlay sits above the photo and below the text (z-index rule right
   below), and nothing here touches text opacity — only the photo layer is
   dimmed. */
.countries-section .details-box::before {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.72);
  border-radius: var(--tm-radius-lg);
  z-index: 1;
}

.countries-section .details-box > * {
  position: relative;
  z-index: 2;
}

.countries-section .detail-header {
  display: flex;
  align-items: center;
  margin-bottom: 22px;
  padding-bottom: 16px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.25);
}

.countries-section .details-box h3,
.countries-section .detail-header h3 {
  margin: 0;
  font-size: 24px;
  color: #ffffff !important;
  opacity: 1 !important;
  font-weight: 700;
  line-height: 1.15;
}

/* Divider sits between sections (not under each title, not per-row) — the
   header's own border-bottom already separates the country name from the
   first section, so only sections after the first get a top divider. */
.countries-section .detail-section + .detail-section {
  border-top: 1px solid rgba(255, 255, 255, 0.28);
  padding-top: 18px;
  margin-top: 18px;
}

.countries-section .detail-title {
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: #ffffff !important;
  opacity: 1 !important;
  margin-bottom: 14px;
}

/* Real 3-column grid — label / arrow / value — identical across every
   section on every country's card. The arrow sits in its own fixed 28px
   track (not a pseudo-element on the value) so it lands in the same x
   position on every row regardless of label length, and the label column
   is a fixed 145px so short labels ("Capital") and long ones ("Dismissal
   for Cause") both leave the arrow aligned. column-gap:0 is intentional —
   the fixed column widths themselves provide the breathing room the
   reference design shows, not an added gutter. minmax(0, 1fr) on the value
   track (rather than a bare 1fr) keeps it from being stretched wider than
   the card by a long unbreakable value. */
.countries-section .detail-grid {
  display: grid;
  grid-template-columns: 145px 28px minmax(0, 1fr);
  column-gap: 0;
  row-gap: 9px;
  align-items: start;
}

/* display:contents lets the label/arrow/value spans join the parent
   .detail-grid as direct grid items (so they land in the fixed 3-column
   layout) while keeping the wrapper in the markup for readability. */
.countries-section .detail-row {
  display: contents;
}

.countries-section .detail-label {
  grid-column: 1;
  color: #ffffff !important;
  opacity: 1 !important;
  font-weight: 700;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  line-height: 1.35;
  /* Not nowrap: some labels in the data are multi-word phrases (e.g.
     "Early Termination During Probation") longer than the 145px column —
     they wrap to a second line in place rather than overflowing it or
     pushing the arrow/value columns. */
  overflow-wrap: break-word;
}

/* A real grid item, not CSS-generated content, so it always lands in the
   same fixed column and every arrow on the card lines up vertically. */
.countries-section .detail-arrow {
  grid-column: 2;
  color: #ffffff !important;
  opacity: 1 !important;
  font-size: 15px;
  font-weight: 700;
  text-align: center;
  line-height: 1.4;
}

/* grid-column 3 has a fixed track (1fr of the remaining width), so a long
   value wraps only inside this column — it can never push into or shift
   the label/arrow columns. min-width:0 overrides the grid item's implicit
   min-width:auto (= its longest unbreakable word), which is what actually
   lets overflow-wrap do its job instead of the column silently growing
   past 1fr for a long single-word/URL-like value. */
.countries-section .detail-value {
  grid-column: 3;
  color: #ffffff !important;
  opacity: 1 !important;
  font-weight: 400;
  font-size: 12px;
  line-height: 1.45;
  text-align: left;
  min-width: 0;
  overflow-wrap: break-word;
}

/* --- Mobile Responsive --- */
@media (max-width: 768px) {
  .countries-section .map-details-wrapper {
    flex-direction: column;
  }
  .countries-section #map {
    width: 100%;
    height: 360px;
  }
  .countries-section .details-box {
    height: auto;
    max-height: none;
    overflow: visible;
    min-width: unset;
    padding: 22px 18px;
  }
  .countries-section .buttons-grid {
    grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
    gap: 8px;
    padding: 16px;
  }
  .countries-section .country-button {
    padding: 9px 10px;
    font-size: 11px;
  }
  /* Same label-then-arrow-then-value reading order as desktop, just
     stacked into a single column instead of three side-by-side ones. The
     grid-column overrides are required — without them the label/arrow/
     value keep their desktop column numbers (1/2/3), and since only one
     column is now defined, the grid would spawn implicit auto-sized
     columns and lay them out side by side again instead of stacking. */
  .countries-section .detail-grid {
    grid-template-columns: 1fr;
    row-gap: 4px;
  }
  .countries-section .detail-label,
  .countries-section .detail-arrow,
  .countries-section .detail-value {
    grid-column: 1;
  }
  .countries-section .detail-arrow {
    text-align: left;
  }
  .countries-section .detail-value {
    margin-bottom: 12px;
  }
  .countries-section .detail-section {
    margin-bottom: 16px;
  }
}

/* --------------------------------------------------------------------------
   12. Mobile grid/gap normalization
   -------------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  #our-team .team-card {
    margin-bottom: 20px;
  }
  .countries-section .buttons-grid {
    gap: 16px;
  }
}

/* --------------------------------------------------------------------------
   13. Hero CTA polish (home-slider "Connect with us" etc. use .btn-white,
       not .btn-primary — was untouched by §10 and had zero hover motion)
   -------------------------------------------------------------------------- */
.btn.btn-white {
  transition:
    transform 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease);
}
.btn.btn-white:hover {
  box-shadow: var(--tm-shadow-md);
  transform: translateY(-2px);
}

/* --------------------------------------------------------------------------
   14. Off-brand accent cleanup — a few page-local <style> blocks hardcode
       generic Bootstrap blue (#007bff) instead of the brand palette. Fixed
       here wherever a class exists to hook onto (about.html's
       .contact-faq-form and .decorative-icon). Elements with no class at
       all (raw inline style="" on payroll.html/hr.html one-off buttons)
       were fixed directly in the HTML instead — no bare-element selector
       can target them here without risking the #chatbot widget's own
       <h2>/<button> elements.
   -------------------------------------------------------------------------- */
.decorative-icon::before,
.decorative-icon::after {
  background: var(--accent) !important;
}
.contact-faq-form .form-control:focus {
  border-color: var(--primary) !important;
  box-shadow: 0 0 0 3px rgba(15, 59, 104, 0.12) !important;
}
.contact-faq-form button {
  background: var(--tm-gradient-primary) !important;
}
.contact-faq-form button:hover {
  background: var(--tm-primary-700) !important;
}

/* --------------------------------------------------------------------------
   15. Keyboard focus visibility (style.css only clears outline on
       [tabindex="-1"], so normal tab focus already shows the browser
       default outline — this replaces it with an on-brand ring)
   -------------------------------------------------------------------------- */
.ftco-navbar-light .navbar-nav .nav-link:focus-visible,
.btn:focus-visible,
.footer-btn:focus-visible,
#our-team .team-btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   16. Heading accent — subtle radial glow behind every section's subheading
   --------------------------------------------------------------------------
   Purely decorative and additive: a soft brand-tinted glow sitting behind
   the "subheading" eyebrow label, the same 2026 SaaS-marketing motif used
   sitewide. ::before keeps it out of the DOM/accessibility tree and never
   intercepts clicks (pointer-events: none), so it can't affect layout,
   text selection, or existing ftco-animate transforms on the parent.
   -------------------------------------------------------------------------- */
.heading-section {
  position: relative;
}
.heading-section .subheading {
  z-index: 1;
}
.heading-section:before {
  content: "";
  position: absolute;
  top: -30px;
  left: 50%;
  transform: translateX(-50%);
  width: 220px;
  height: 160px;
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.16) 0%,
    rgba(15, 59, 104, 0.08) 55%,
    transparent 75%
  );
  filter: blur(2px);
  pointer-events: none;
  z-index: 0;
}
/* Left-aligned variants (most of the site: two-column intro sections) read
   better with the glow anchored over the eyebrow label instead of centered
   on the full column width */
.heading-section:not(.text-center):before {
  left: 0;
  transform: none;
}
.heading-section-white:before {
  background: radial-gradient(
    circle,
    rgba(212, 175, 55, 0.22) 0%,
    rgba(255, 255, 255, 0.06) 55%,
    transparent 75%
  );
}

/* --------------------------------------------------------------------------
   17. Testimonial / quote cards (about.html's static bg-white cards —
       index.html's carousel uses the dark-overlay skin from §5 instead)
   -------------------------------------------------------------------------- */
.testimony-section .testimony-wrap.bg-white {
  border-radius: var(
    --tm-radius-md
  ) !important; /* style.css sets border-radius:5px */
  box-shadow: var(
    --tm-shadow-sm
  ) !important; /* style.css sets a near-flat shadow */
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease);
}
.testimony-section .testimony-wrap.bg-white:hover {
  transform: translateY(-8px);
  box-shadow: var(--tm-shadow-md) !important;
}
.testimony-section .testimony-wrap .icon {
  background: var(--tm-gradient-primary);
  box-shadow: var(--tm-shadow-gold);
}

/* --------------------------------------------------------------------------
   18. Contact page — form/info card shell, dbox icons, map frame
   -------------------------------------------------------------------------- */
.contact-wrap,
.info-wrap {
  border-radius: var(--tm-radius-lg);
}
.contact-wrap {
  box-shadow: var(--tm-shadow-md);
}
.info-wrap.bg-primary {
  background: var(
    --tm-gradient-primary
  ) !important; /* style.css sets a flat #003366 !important */
}
/* style.css sets color only on the .info-wrap/.dbox *containers*
   (rgba(255,255,255,.8), style.css:12367-12376) and lets the intro
   paragraph + every dbox's address/phone/mobile <p> inherit it — §1.5's
   global `p{color:var(--text)}` directly matches those <p> tags, and a
   direct rule always beats an inherited value, so they went dark navy on
   this dark navy panel. h3 was already safe (style.css sets `.info-wrap
   h3{color:#fff}` directly on the element itself, not just the container). */
.info-wrap p {
  color: rgba(255, 255, 255, 0.8);
}
.info-wrap .dbox {
  transition: transform 0.3s var(--tm-ease);
}
.info-wrap .dbox:hover {
  transform: translateX(4px);
}
.info-wrap .dbox .icon {
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.3);
  transition:
    background-color 0.3s var(--tm-ease),
    border-color 0.3s var(--tm-ease);
}
.info-wrap .dbox:hover .icon {
  background: var(--accent);
  border-color: transparent !important;
}
/* contact.html's own <style> (loads after <head>, same specificity as the
   flat border it sets) needs !important to be overridden here */
.map-section .map-wrapper {
  border: none !important;
  border-radius: var(--tm-radius-lg) !important;
  box-shadow: var(--tm-shadow-lg) !important;
}
.map-section {
  border-radius: var(--tm-radius-lg) !important;
}

/* --------------------------------------------------------------------------
   19. Services page — icon rows + newsletter/subscribe bar
   -------------------------------------------------------------------------- */
.services-2 .icon {
  background: var(
    --tm-gradient-primary
  ) !important; /* style.css sets a flat #003366 */
  transition:
    transform 0.35s var(--tm-ease),
    box-shadow 0.35s var(--tm-ease);
}
.services-2:hover .icon {
  transform: scale(1.08) rotate(-4deg);
  box-shadow: var(--tm-shadow-gold);
}
.subscribe-form .form-group .submit {
  background: var(
    --tm-gradient-accent
  ) !important; /* style.css sets a flat #003366 */
  color: var(--text) !important;
  font-weight: 700;
  transition:
    transform 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease);
}
.subscribe-form .form-group .submit:hover {
  transform: translateY(-2px);
  box-shadow: var(--tm-shadow-gold);
}

/* --------------------------------------------------------------------------
   20. profile-container icon lists (hr.html already ships fa-icon bullets;
       peo.html/payroll.html were upgraded from plain "•" text to match) —
       tint every list icon with the brand accent and align them so the
       three services pages read as one consistent pattern.
   -------------------------------------------------------------------------- */
.content ul li > i.fas,
.content ul li > i.far {
  color: var(--accent);
  width: 18px;
  text-align: center;
  display: inline-block;
}

/* --------------------------------------------------------------------------
   21. blog.html — sidebar, category filters, search, post cards, detail view
   --------------------------------------------------------------------------
   blog.html's inline <style> defines --primary/--secondary itself, already
   forced back to the brand hexes by the !important tokens in §1, so every
   var(--primary)/var(--secondary) reference below already resolves on-brand.
   These rules only add the glass/gradient/motion layer on top.
   -------------------------------------------------------------------------- */
.sidebar {
  border-radius: var(--tm-radius-md) !important;
  box-shadow: var(--tm-shadow-sm) !important;
}
.category-btn.active,
.category-btn:hover:not(.active) {
  background: var(--tm-gradient-primary) !important; /* was a flat #070738 */
  box-shadow: var(--tm-shadow-md) !important;
}
.search-wrapper input:focus {
  outline: none;
  border-color: var(--primary) !important; /* matches .form-control:focus elsewhere in the file */
  box-shadow: 0 0 0 3px rgba(15, 59, 104, 0.12);
}
.post {
  border-radius: var(--tm-radius-md) !important;
}
.post:hover {
  box-shadow: var(--tm-shadow-lg) !important;
}
#postDetail {
  border-radius: var(--tm-radius-lg) !important;
  box-shadow: var(--tm-shadow-lg) !important;
}
.pagination button.active,
.pagination button:hover {
  background: var(
    --tm-gradient-primary
  ) !important; /* was a flat var(--secondary) */
}

/* --------------------------------------------------------------------------
   22. One-off inline-styled CTA buttons (hr.html "Register Now",
       payroll.html "Calculate Your Payroll for Free") — each button carries
       its own inline style="" attribute, which beats any external
       stylesheet regardless of specificity, so :hover/:active states (which
       can't be expressed inline) and !important are the only way to add
       motion here without touching the base inline-styled look.
   -------------------------------------------------------------------------- */
.btn-cta-primary,
.btn-cta-accent {
  transition:
    transform 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease),
    background-color 0.3s var(--tm-ease);
  box-shadow: var(--tm-shadow-sm);
}
.btn-cta-primary:hover {
  transform: translateY(-3px) scale(1.02);
  box-shadow: var(--tm-shadow-md);
  background-color: var(--tm-primary-700) !important;
}
.btn-cta-accent:hover {
  transform: translateY(-3px) scale(1.02);
  box-shadow: var(--tm-shadow-gold);
  background-color: var(--tm-accent-dark) !important;
}

/* --------------------------------------------------------------------------
   Header HRM app badge — reads as a companion app linked to the site
   (logo + name + a single tidy CTA pill) inside a modern card, rather
   than plain nav-link buttons. Anchor is a direct child of
   .nav-item-hrm-app, not .navbar-nav > .nav-item, so it skips the plain
   text-link underline/hover rules.
   NOTE: the navbar itself is rendered on a WHITE background (see
   .ftco-navbar-light in style.css). Navy is the dominant color of the
   badge itself (solid navy pill, reads clearly against the white
   navbar); gold is kept to a light decorative touch only — a hairline
   border, the subtitle color, and the hover glow — not a fill color.
   -------------------------------------------------------------------------- */
.nav-item-hrm-app {
  display: flex;
  align-items: center;
  margin-left: 14px;
}
.hrm-app-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 4px 5px;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--tm-primary-900) 0%, var(--primary) 100%);
  border: 1px solid var(--tm-accent-light);
  box-shadow: var(--tm-shadow-sm);
  text-decoration: none;
  transition:
    transform 0.3s var(--tm-ease),
    box-shadow 0.3s var(--tm-ease),
    border-color 0.3s var(--tm-ease);
}
.hrm-app-badge:hover,
.hrm-app-badge:focus-visible {
  text-decoration: none;
  border-color: var(--accent);
  transform: translateY(-2px);
  box-shadow: var(--tm-shadow-gold);
}
.hrm-app-badge-logo {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  object-fit: contain;
  background: #fff;
  padding: 2px;
  flex-shrink: 0;
}
.hrm-app-badge-text {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  padding-right: 2px;
}
.hrm-app-badge-title {
  font-size: 10.5px;
  font-weight: 700;
  color: #fff;
}
.hrm-app-badge-sub {
  font-size: 7.5px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tm-accent-light);
}
.hrm-app-badge-cta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5.5px 13px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.14);
  border: 1px solid rgba(255, 255, 255, 0.3);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  white-space: nowrap;
  transition: background 0.3s var(--tm-ease), border-color 0.3s var(--tm-ease);
}
.hrm-app-badge:hover .hrm-app-badge-cta {
  background: var(--tm-accent-light);
  border-color: var(--tm-accent-light);
  color: var(--tm-primary-900);
}
@media (max-width: 991.98px) {
  .nav-item-hrm-app {
    margin-left: 0;
    margin-top: 12px;
  }
  .hrm-app-badge {
    width: 100%;
    justify-content: space-between;
  }
}

/* ==========================================================================
   Navbar dropdowns — open on hover on desktop (Bootstrap's JS only opens
   on click by default). Click still works too (Bootstrap's own JS keeps
   toggling .show), so this is purely additive. Scoped to pointer devices
   with real hover support so touchscreens keep the tap-to-open behavior
   they need — hover has no reliable "leave" state on touch.
   ========================================================================== */
@media (min-width: 992px) and (hover: hover) and (pointer: fine) {
  .ftco-navbar-light .navbar-nav > .nav-item.dropdown:hover > .dropdown-menu {
    display: block;
    margin-top: 0;
    animation: navDropdownIn 0.2s var(--tm-ease, ease) both;
  }
}
@keyframes navDropdownIn {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* --------------------------------------------------------------------------
   Countries mega-menu — a wide grid instead of a plain vertical list, so
   all 16 countries are scannable at a glance instead of needing a long
   scroll through a narrow single column.
   -------------------------------------------------------------------------- */
.countries-mega-menu {
  min-width: 540px;
  padding: 20px 22px;
  border: none;
  border-radius: var(--tm-radius-lg, 20px);
  box-shadow: 0 24px 50px -14px rgba(15, 59, 104, 0.28);
}
.countries-mega-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--tm-primary-100);
}
.countries-mega-title {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--tm-primary-700);
}
.countries-mega-count {
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, var(--accent, #d4af37) 0%, var(--tm-accent-light) 100%);
  padding: 3px 10px;
  border-radius: 999px;
}
.countries-mega-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 4px 10px;
}
.countries-mega-grid .dropdown-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 10px;
  border-radius: 10px;
  font-weight: 600;
  font-size: 13px;
  color: var(--tm-primary-800);
  white-space: nowrap;
  transition: background-color 0.2s var(--tm-ease, ease), color 0.2s var(--tm-ease, ease), transform 0.2s var(--tm-ease, ease);
}
/* Small solid navy dot instead of the location-pin glyph. Some pages load
   Font Awesome's SVG/JS kit (font-awesome/6.4.0/js/all.min.js), which
   replaces every <i class="fa..."> with an inline <svg> at runtime — so
   restyling the <i>'s own ::before (which only works for the CSS-only build)
   doesn't reach the icon on those pages. Instead: hide whatever the icon
   ends up as (i or svg, either build) and paint the dot as the link's own
   ::before. .dropdown-item's `display:flex` + `gap: 8px` (both unchanged)
   place that generated box exactly where the icon sat and keep the same
   gap before the country name. */
.countries-mega-grid .dropdown-item i,
.countries-mega-grid .dropdown-item svg {
  display: none !important;
}
.countries-mega-grid .dropdown-item::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--primary, #0f3b68);
  flex-shrink: 0;
}
.countries-mega-grid .dropdown-item:hover,
.countries-mega-grid .dropdown-item:focus {
  background: var(--tm-primary-50);
  color: var(--primary, #0f3b68);
  transform: translateX(3px);
}
.countries-mega-foot {
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--tm-primary-100);
  text-align: center;
}
.countries-mega-foot a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--primary, #0f3b68);
}
.countries-mega-foot a:hover {
  color: var(--tm-accent-dark, #b8952e);
}
/* --------------------------------------------------------------------------
   14. Corporate branding row (index.html + about.html hero) — three logos
       of differing native proportions, aligned to one shared baseline via
       flexbox rather than forced to a common width. Shared here (instead
       of duplicated per page) so both hero sections stay identical.
       Each .brand-logo is also given the site's existing .ftco-animate
       scroll-reveal class in the markup — main.js's jQuery Waypoints
       handler (contentWayPoint()) already staggers every currently
       queued .ftco-animate element by 50ms via setTimeout, so three
       adjacent .brand-logo items crossing the waypoint together produce a
       cascading reveal for free, with zero extra JS.
       -------------------------------------------------------------------------- */
.brand-logos {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 22px; /* not 30px — at these logo sizes, 30px gaps pushed the row a
    few px past the column's edge, clipping the HLB wordmark */
  margin-top: 26px;
}

.brand-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 55px;
  flex-shrink: 0;
}

.brand-logo img {
  width: auto;
  max-height: 55px;
  max-width: 202px;
  object-fit: contain;
}

/* Each logo's native proportions differ, so heights are balanced
   individually rather than forced to match — this is what keeps the row
   looking like one coordinated brand set instead of three unrelated
   images of accidentally-different visual weight. */
.brand-logo.msindaha img {
  max-height: 55px;
}

.brand-logo.hrm img {
  max-height: 47px;
}

.brand-logo.hlb img {
  max-height: 49px;
}

.brand-divider {
  width: 1px;
  height: 36px;
  background: rgba(20, 55, 90, 0.2);
  flex-shrink: 0;
}

@media (max-width: 768px) {
  .brand-logos {
    gap: 16px;
    flex-wrap: wrap;
  }

  .brand-logo {
    height: 47px;
  }

  .brand-logo img {
    max-height: 44px;
    max-width: 170px;
  }
}

@media (max-width: 991.98px) {
  .countries-mega-menu {
    min-width: 0;
  }
  .countries-mega-grid {
    grid-template-columns: repeat(2, 1fr);
  }
  /* .countries-mega-menu is a .dropdown-menu too, so section 2's mobile
     rule (right above) paints it with the same dark navy background as
     the plain Services list — but .countries-mega-title/-count/-foot are
     not .dropdown-item elements, so they never picked up that rule's
     white text override and stayed at their desktop-only dark-on-white
     colors (dark navy title text on a dark navy background = unreadable).
     Country names themselves were already fine, since .dropdown-item IS
     covered above. */
  .countries-mega-title {
    color: #fff;
  }
  .countries-mega-head {
    border-bottom-color: rgba(255, 255, 255, 0.2);
  }
  .countries-mega-foot {
    border-top-color: rgba(255, 255, 255, 0.15);
  }
  .countries-mega-foot a {
    color: #fff;
  }
  .countries-mega-foot a:hover {
    color: var(--tm-accent-light, #e4c878);
  }
}

/* --------------------------------------------------------------------------
   15. #our-team mobile carousel (js/main.js's teamCarousel()) — the site's
       existing generic .owl-carousel .owl-nav arrows default to opacity:0
       until :hover, which never fires reliably on touch devices, so on the
       mobile carousel they'd have been invisible. This makes them solid,
       always-visible circular buttons instead, sized as a real touch
       target, positioned over the card's own left/right edges.
   -------------------------------------------------------------------------- */
.team-carousel {
  position: relative;
  padding-bottom: 46px; /* room for the dots row below the card */
}
.team-carousel .owl-stage-outer {
  overflow: hidden;
}
/* The generic .owl-carousel .owl-nav (container, not the buttons) sets its
   own `top: 50%`, and the buttons' `top` below was resolving against
   *that* zero-height, already-centered container — so changing the
   buttons' `top` alone did nothing. Overriding the container's own top is
   what actually moves them (to sit over the photo, not the text below). */
.team-carousel .owl-nav {
  top: 22% !important;
  display: block !important;
  visibility: visible !important;
  z-index: 6;
}
.team-carousel .owl-nav .owl-prev,
.team-carousel .owl-nav .owl-next {
  position: absolute !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  margin-top: 0 !important;
  opacity: 1 !important;
  visibility: visible !important;
  display: flex !important;
  z-index: 6;
  width: 42px;
  height: 42px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--primary, #0f3b68) !important;
  color: #fff !important;
  box-shadow: var(--tm-shadow-md, 0 8px 20px rgba(0, 0, 0, 0.2));
  transition:
    transform 0.2s var(--tm-ease, ease),
    background 0.2s var(--tm-ease, ease);
}
/* Covers both Font Awesome builds: the plain CSS kit (renders the glyph as
   an `i` with a font ::before) and the SVG/JS kit some pages load, which
   replaces that same `<i>` with an inline `<svg>` at runtime (confirmed:
   this is exactly what happens here) — sized as a plain box either way so
   it centers consistently inside the 42px circle regardless of which kit
   is active on a given page. */
.team-carousel .owl-nav .owl-prev i,
.team-carousel .owl-nav .owl-next i,
.team-carousel .owl-nav .owl-prev svg,
.team-carousel .owl-nav .owl-next svg {
  font-size: 15px !important;
  color: #fff !important;
  line-height: 1 !important;
  width: 15px;
  height: 15px;
}
.team-carousel .owl-nav .owl-prev {
  left: 6px;
}
.team-carousel .owl-nav .owl-next {
  right: 6px;
}
.team-carousel .owl-nav .owl-prev:hover,
.team-carousel .owl-nav .owl-next:hover {
  background: var(--secondary, #184e8a) !important;
  transform: translateY(-50%) scale(1.06);
}
.team-carousel .owl-nav .disabled {
  opacity: 0.35 !important;
  cursor: default;
}
.team-carousel .owl-dots {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 6px;
  text-align: center;
}
.team-carousel .owl-dots .owl-dot span {
  width: 8px;
  height: 8px;
  margin: 4px;
  background: var(--border, #ddd);
  border-radius: 50%;
  display: block;
  transition: background 0.2s var(--tm-ease, ease);
}
.team-carousel .owl-dots .owl-dot.active span {
  background: var(--primary, #0f3b68);
}
@media (min-width: 768px) {
  .team-carousel {
    padding-bottom: 0;
  }
}

/* --------------------------------------------------------------------------
   16. Home slider — small decorative divider + lead paragraph under each
       slide's h1, centered under .slider-text .text-center.
   -------------------------------------------------------------------------- */
.home-slider .slider-text .hero-divider {
  width: 70px;
  height: 4px;
  margin: 0 auto 20px;
  background: var(--tm-gradient-accent);
  border-radius: 2px;
  animation: tmHeroRise 0.8s var(--tm-ease) both;
  animation-delay: 0.1s;
}
.home-slider .slider-text .hero-lead {
  color: rgba(255, 255, 255, 0.92);
  font-size: 17px;
  line-height: 1.75;
  max-width: 560px;
  margin: 0 auto 26px;
  animation: tmHeroRise 0.8s var(--tm-ease) both;
  animation-delay: 0.2s;
}
@media (max-width: 767.98px) {
  .home-slider .slider-text .hero-lead {
    font-size: 15px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .home-slider .slider-text .hero-divider,
  .home-slider .slider-text .hero-lead {
    animation: none;
  }
}

/* ==========================================================================
   Carousel nav-arrow icons — home-slider & testimonials
   --------------------------------------------------------------------------
   js/main.js's carousel() now passes Font Awesome navText ("<i class='fas
   fa-chevron-left'>...") instead of the site's old "<span
   class='ion-ios-arrow-back'>" markup, because Ionicons is never actually
   linked anywhere in this project (no @font-face/.ion-ios-* rule exists in
   css/style.css) — those arrows have always rendered blank. style.css's
   existing color/size rules only ever targeted "span:before" though, which
   doesn't match the new <i>, so the icon needs its own sizing/color rules
   here (theme-modern.css loads last and overrides freely).
   ========================================================================== */
.owl-carousel.home-slider .owl-nav .owl-prev i,
.owl-carousel.home-slider .owl-nav .owl-next i,
.owl-carousel.home-slider .owl-nav .owl-prev svg,
.owl-carousel.home-slider .owl-nav .owl-next svg {
  font-size: 30px;
  width: 30px;
  height: 30px;
  color: rgba(255, 255, 255, 0.7);
  transition: color 0.3s ease;
}
.owl-carousel.home-slider .owl-nav .owl-prev:hover i,
.owl-carousel.home-slider .owl-nav .owl-prev:focus i,
.owl-carousel.home-slider .owl-nav .owl-next:hover i,
.owl-carousel.home-slider .owl-nav .owl-next:focus i,
.owl-carousel.home-slider .owl-nav .owl-prev:hover svg,
.owl-carousel.home-slider .owl-nav .owl-prev:focus svg,
.owl-carousel.home-slider .owl-nav .owl-next:hover svg,
.owl-carousel.home-slider .owl-nav .owl-next:focus svg {
  color: #fff;
}

.testimony-section .owl-nav .owl-prev i,
.testimony-section .owl-nav .owl-next i,
.testimony-section .owl-nav .owl-prev svg,
.testimony-section .owl-nav .owl-next svg {
  font-size: 30px;
  width: 30px;
  height: 30px;
  color: rgba(0, 0, 0, 0.5);
  transition: color 0.3s ease;
}
.testimony-section .owl-nav .owl-prev:hover i,
.testimony-section .owl-nav .owl-prev:focus i,
.testimony-section .owl-nav .owl-next:hover i,
.testimony-section .owl-nav .owl-next:focus i,
.testimony-section .owl-nav .owl-prev:hover svg,
.testimony-section .owl-nav .owl-prev:focus svg,
.testimony-section .owl-nav .owl-next:hover svg,
.testimony-section .owl-nav .owl-next:focus svg {
  color: #fff;
}

/* index.html's "Step-by-Step Guide" carousel reuses the same
   .carousel-testimony/.testimony-section markup as about.html's actual
   client-testimonials carousel (both initialized together by the single
   $(".carousel-testimony") call in js/main.js), so the arrows can only be
   removed for this one instance via its own extra class, added just on
   index.html's copy — about.html's testimonials keep their nav arrows
   untouched. Dots and swipe/drag navigation still work here; only the
   prev/next arrow buttons are hidden. */
.steps-carousel .owl-nav {
  display: none;
}
