/* Plus Jakarta Sans — self-hosted (APX-063: was a Google Fonts @import; the
   "Aether Beacon" design system ships the binaries, no CDN dependency). */
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 200; font-display: swap; src: url("../fonts/PlusJakartaSans-200.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 300; font-display: swap; src: url("../fonts/PlusJakartaSans-300.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 400; font-display: swap; src: url("../fonts/PlusJakartaSans-400.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 500; font-display: swap; src: url("../fonts/PlusJakartaSans-500.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 600; font-display: swap; src: url("../fonts/PlusJakartaSans-600.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/PlusJakartaSans-700.ttf") format("truetype"); }
@font-face { font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 800; font-display: swap; src: url("../fonts/PlusJakartaSans-800.ttf") format("truetype"); }

/* ============================================================================
   APX-063 — "Aether Beacon" design-system tokens
   Mapped from the design handoff `_ds` tokens onto the existing brand palette.
   BRAND-CLEAN: the off-brand `--apex-gradient` / `--apex-cyan` #4CBDD4 /
   `--apex-green` #00FF97 / `--apex-amber` #f0a830 are intentionally NOT ported
   (they're unused on every page). Teal/navy/black are the brand.
   ============================================================================ */
:root {
  /* ----- Brand core ----- */
  --apex-teal: #53AEA6;        /* primary accent */
  --apex-teal-bright: #6FC9C0; /* hover */
  --apex-teal-deep: #3F8E87;   /* pressed */
  --apex-navy: #07223F;        /* surfaces & text-on-teal */
  --apex-midnight: #0D1B2A;
  --apex-black: #00020f;       /* page background */
  --apex-white: #ffffff;

  /* ----- Text on dark ----- */
  --apex-text-strong: #ffffff;
  --apex-text: rgba(255, 255, 255, 0.72);
  --apex-text-muted: rgba(255, 255, 255, 0.55);
  --apex-text-faint: rgba(255, 255, 255, 0.40);

  /* ----- Hairlines & fills on dark ----- */
  --apex-border: rgba(255, 255, 255, 0.10);
  --apex-border-strong: rgba(255, 255, 255, 0.18);
  --apex-border-teal: rgba(83, 174, 166, 0.50);
  --apex-fill-subtle: rgba(255, 255, 255, 0.03);
  --apex-fill: rgba(255, 255, 255, 0.06);

  /* ----- Semantic aliases (use these in components) ----- */
  --color-primary: var(--apex-teal);
  --color-primary-hover: var(--apex-teal-bright);
  --color-primary-active: var(--apex-teal-deep);
  --color-secondary: var(--apex-navy);
  /* Page background kept at the template's near-black #00020f (the legacy
     background images have it baked in; see the section padding note). */
  --color-body: var(--apex-black);
  --color-on-primary: var(--apex-navy);   /* navy text on teal fills (a11y) */
  --surface-page: var(--apex-black);
  --surface-card: var(--apex-navy);
  --surface-raised: var(--apex-fill);
  --surface-subtle: var(--apex-fill-subtle);
  --text-strong: var(--apex-text-strong);
  --text-body: var(--apex-text);
  --text-muted: var(--apex-text-muted);
  --text-accent: var(--apex-teal);
  --border-hairline: var(--apex-border);
  --border-card: var(--apex-border);
  --border-hover: var(--apex-border-teal);

  /* ----- Type ----- */
  --font-body: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-heading: var(--font-body);
  --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;
  --weight-bold: 700;
  --text-display: 64px;
  --text-h1: 48px;
  --text-h2: 38px;
  --text-h3: 28px;
  --text-h4: 22px;
  --text-lg: 18px;
  --text-base: 16px;
  --text-sm: 15px;
  --text-xs: 13px;
  --text-eyebrow: 11px;
  --leading-tight: 1.1;
  --leading-snug: 1.25;
  --leading-normal: 1.5;
  --leading-relaxed: 1.6;
  --tracking-display: -0.02em;
  --tracking-normal: 0;
  --tracking-wide: 0.08em;
  --tracking-wider: 0.12em;

  /* ----- Spacing / radius / motion ----- */
  --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
  --space-5: 20px; --space-6: 24px; --space-7: 32px; --space-8: 40px;
  --space-10: 56px; --space-12: 72px; --space-section: 100px;
  --radius-sm: 8px; --radius-md: 14px; --radius-lg: 16px; --radius-pill: 30px; --radius-round: 50%;
  --shadow-card: 0 1px 0 rgba(255, 255, 255, 0.04) inset;
  --shadow-lift: 0 18px 40px -20px rgba(0, 0, 0, 0.7);
  --glow-teal: 0 0 0 1px rgba(83, 174, 166, 0.5), 0 12px 40px -16px rgba(83, 174, 166, 0.45);
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --duration-fast: 0.2s;
  --duration: 0.3s;
  --lift-hover: translateY(-4px);
  --container-aether: 1168px;   /* design content container (header uses 1280) */
}

/* -----------------------------------------------------------------------------
   Heading tracking + weight correction
   The template's heading letter-spacing (-0.06em to -0.08em) and font-weight 400
   were calibrated for the original SportingGrotesque display font. Plus Jakarta
   Sans (the brand typeface) is wider and needs relaxed tracking and a heavier
   display weight, per the brand type scale (Display 700 / Headings 600).
-------------------------------------------------------------------------------- */
h1, h2, h3, h4, h5, h6 {
  font-weight: 600;
  letter-spacing: -0.02em;
}

.hero-content .title,
.sec-title .title,
.sec-title-three .title,
.breadcrumb__title,
.xb-project-content .xb-item--title,
.xb-service-item .xb-item--title {
  font-weight: 700;
  letter-spacing: -0.02em;
}

/* -----------------------------------------------------------------------------
   Sticky header background
   The sticky header pulls from --color-secondary, which is now brand Deep Navy
   (#07223F) for UI elements. Keep the header itself at the template's original
   near-black so it reads as intended over the page.
-------------------------------------------------------------------------------- */
.header-style--one .xb-header-area-sticky {
  background: #00020f !important;
}

/* -----------------------------------------------------------------------------
   Service "Powered by" partner badge
   Small uppercase tag shown above a service description to credit the
   technology partner (Google Cloud, Veeam, Fortinet, etc.). Uses the brand
   teal accent so it reads on the dark service cards.
-------------------------------------------------------------------------------- */
.xb-item--partner {
  display: inline-block;
  margin-bottom: 10px;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-primary);
}
.xb-item--partner::before {
  content: "";
  display: inline-block;
  width: 14px;
  height: 1px;
  margin-right: 8px;
  vertical-align: middle;
  background: var(--color-primary);
}
/* The homepage "Our Main Services" accordion collapses each item to a vertical
   label by design; the partner badge doesn't fit that compact column and was
   leaking into it. Hide the badge there — it remains on the Services page
   cards and the service/partner detail pages. */
.xb-service-wrap .xb-item--partner {
  display: none;
}

/* -----------------------------------------------------------------------------
   "Expertise" mega-menu — two columns: Services + Partners
   Column headings, a divider between the two columns, chevrons on the partner
   list, and a teal "All Partnerships" link. Inherits the template's dark
   mega-menu styling for the link list itself.
-------------------------------------------------------------------------------- */
.megamenu_heading {
  margin: 0 0 16px;
  padding-bottom: 12px;
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #fff;
  border-bottom: 1px solid rgba(255, 255, 255, 0.10);
}
/* Menu item text follows the brand Body scale (Plus Jakarta Sans 15/400),
   overriding the template's bold 16px+ submenu link style that was stretching
   the dropdown. */
.mega_menu_box .icon_list > li > a,
.mega_menu_box .icon_list .icon_list_text {
  font-family: var(--font-body) !important;
  font-size: 15px !important;
  font-weight: 400 !important;
  line-height: 1.5 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
}
/* The template spaces list items with a 29px flex gap, which stretched the
   menu. Tighten it to a compact, readable rhythm. */
.mega_menu_box .megamenu_widget ul {
  gap: 12px 22px !important;
}
@media (min-width: 1200px) {
  .expertise_col_border {
    border-left: 1px solid rgba(255, 255, 255, 0.10);
    padding-left: 40px;
  }
}
.expertise_partner_list li a {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.expertise_partner_list li a::after {
  content: "\203A"; /* › */
  margin-left: 12px;
  font-size: 18px;
  line-height: 1;
  color: var(--color-primary);
  opacity: 0.55;
  transition: transform 0.2s ease, opacity 0.2s ease;
}
.expertise_partner_list li a:hover::after {
  opacity: 1;
  transform: translateX(4px);
}
/* APX-110 — render the Partner list in 2 balanced columns on the desktop megamenu
   (10 partners after APX-107). The template pins this list to display:flex via
   `.mega_menu_wrapper .megamenu_widget ul` (specificity 0,3,0), so a bare
   `.expertise_partner_list` (0,1,0) can't flip it — match the wrapper-scoped selector
   (0,3,1) to win, then override to a 2-col grid (fills row-wise, 5 rows × 2). The
   `gap` likewise beats the existing `!important` on `.mega_menu_box .megamenu_widget ul`.
   Desktop-only; the stacked mobile menu keeps its single column. */
@media (min-width: 1200px) {
  .mega_menu_box .megamenu_widget ul.expertise_partner_list {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px 28px !important;
    align-content: start;
  }
}
.expertise_all_link {
  display: inline-block;
  margin-top: 16px;
  font-weight: 600;
  color: var(--color-primary);
}
.expertise_all_link:hover {
  text-decoration: underline;
}

/* -----------------------------------------------------------------------------
   Hero — 3D Apex mark
   Replaces the old animated GIF with a real-time WebGL render of the Apex mark
   (assets/js/apex-mark-3d.js). The static 3D PNG below the canvas is the
   progressive-enhancement fallback for no-WebGL / reduced-motion visitors; the
   script adds .is-ready to reveal the canvas (and fade the image out) only once
   the model is built. Sizing mirrors the template's old `.hero-icon img`
   footprint (98.9%, 68% on tablet/mobile) so the hero layout is unchanged.
-------------------------------------------------------------------------------- */
.hero-icon .apex-mark-3d {
  position: relative;
  width: 98.9%;
  aspect-ratio: 1 / 1;
}
@media (max-width: 991px) {
  .hero-icon .apex-mark-3d {
    width: 68%;
  }
}
.hero-icon .apex-mark-3d .apex-mark-3d__canvas,
.hero-icon .apex-mark-3d .apex-mark-3d__fallback {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  transition: opacity 0.6s ease;
}
.hero-icon .apex-mark-3d .apex-mark-3d__canvas {
  display: block;
  opacity: 0;
}
.hero-icon .apex-mark-3d .apex-mark-3d__fallback {
  object-fit: contain;
}
.hero-icon .apex-mark-3d.is-ready .apex-mark-3d__canvas {
  opacity: 1;
}
.hero-icon .apex-mark-3d.is-ready .apex-mark-3d__fallback {
  opacity: 0;
}

/* -----------------------------------------------------------------------------
   Homepage "partners" strip (was the template clients marquee)
   The original section showed placeholder client logos ("120 Companies Work
   With Us"). It now carries the real technology-partner logos, which are
   full-colour (several with dark text), so each sits on a light rounded chip
   for consistent legibility on the dark band. Scoped to .brand so the
   inner-page brand strips are unaffected.
-------------------------------------------------------------------------------- */
.brand .xb-brand-inner {
  gap: 32px;
  margin-right: 32px;
}
.brand .xb-brand-item {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 180px;
  height: 84px;
  padding: 14px 24px;
  background: #ffffff;
  border-radius: 14px;
}
.brand .xb-brand-item img {
  max-height: 48px;
  max-width: 100%;
  width: auto;
  object-fit: contain;
}
.brand .xb-brand-item:hover {
  opacity: 1;
  transform: translateY(-3px);
}

/* -----------------------------------------------------------------------------
   About — "How We Work" four-step band
   Replaces the template's decorative image marquee (placeholder shots) in the
   "Who We Are" section with the four steps of the brand promise: build, secure,
   document, hand over. Static (no decorative scroll) per the brand motion
   guidance. Navy contained cards on the near-black page, teal step numbers.
-------------------------------------------------------------------------------- */
.xb-step {
  height: 100%;
  padding: 32px 28px;
  background: var(--color-secondary);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 14px;
  transition: 0.3s;
}
.xb-step:hover {
  border-color: rgba(83, 174, 166, 0.5);
  transform: translateY(-4px);
}
.xb-step--num {
  display: block;
  margin-bottom: 18px;
  font-family: var(--font-heading);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.12em;
  color: var(--color-primary);
}
.xb-step--title {
  margin: 0 0 12px;
  font-size: 22px;
  font-weight: 600;
  color: #fff;
}
.xb-step--text {
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.7);
}

/* -----------------------------------------------------------------------------
   Project references — case-study cards in the scroll-stack gallery
   The template's cards were placeholder images; these now carry the real client
   references (client + partner + scope + outcome). Each leads with the partner
   logo on a light chip (several partner logos are dark, so they need it) and
   ends with a teal-labelled outcome line. The card backdrop is a branded
   gradient (assets/img/bg/case-bg.svg) since there are no project photos.
-------------------------------------------------------------------------------- */
.xb-case-logo {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 64px;
  padding: 10px 18px;
  margin-bottom: 26px;
  background: #fff;
  border-radius: 12px;
}
.xb-case-logo img {
  max-height: 42px;
  max-width: 170px;
  width: auto;
  object-fit: contain;
}
.xb-case-outcome {
  margin: 28px 0 0;
  padding-top: 22px;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  font-size: 16px;
  line-height: 1.6;
  color: #fff;
}
.xb-case-outcome span {
  display: block;
  margin-bottom: 4px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-primary);
}

/* Project references page (project.html) — static case-study card grid */
.xb-case-card {
  height: 100%;
  padding: 32px 28px;
  background: var(--color-secondary);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 14px;
  transition: 0.3s;
}
.xb-case-card:hover {
  border-color: rgba(83, 174, 166, 0.5);
  transform: translateY(-4px);
}
.xb-case-tech {
  display: block;
  margin-bottom: 8px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-primary);
}
.xb-case-client {
  margin: 0 0 14px;
  font-size: 24px;
  font-weight: 700;
  color: #fff;
}
.xb-case-scope {
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.7);
}

/* ===== Insights hub ===== */
.xb-insights-intro {
  max-width: 640px;
  margin: 0 auto 50px;
}
.xb-insights-intro p {
  font-size: 18px;
  color: rgba(255, 255, 255, 0.65);
  margin: 0;
}
.xb-insights-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 18px 30px;
  margin-bottom: 55px;
}
.xb-insights-filter {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin-bottom: 0;
}
.xb-filter-btn {
  padding: 10px 26px;
  border-radius: 40px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  background: transparent;
  color: rgba(255, 255, 255, 0.8);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: all 200ms ease;
}
.xb-filter-btn:hover {
  border-color: var(--color-primary, #53aea6);
  color: #fff;
}
.xb-filter-btn.active {
  background: var(--color-primary, #53aea6);
  border-color: var(--color-primary, #53aea6);
  color: #07223f;
}
/* Isotope grid: items are positioned by Isotope (same engine as the careers
   job filter), so columns carry their own width + gutters instead of Bootstrap's. */
.xb-insights-grid {
  margin: 0 -15px;
}
.xb-insight-col {
  width: 33.333%;
  padding: 0 15px;
  margin-bottom: 30px;
}
/* Drives the filter/sort animation. With transitionDuration:0 Isotope repositions
   items instantly via left/top, so we ease those (plus opacity) to make the cards glide
   to their new spots like the careers job filter. Gated behind .is-ready (added after the
   first layout) so items don't animate in from the corner on page load. */
.xb-insights-grid.is-ready .xb-insight-col {
  transition: left 0.45s ease, top 0.45s ease, opacity 0.45s ease !important;
}
@media (max-width: 991px) {
  .xb-insight-col { width: 50%; }
}
@media (max-width: 575px) {
  .xb-insight-col { width: 100%; }
}
.xb-insight-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 16px;
  overflow: hidden;
  transition: transform 250ms ease, border-color 250ms ease;
}
.xb-insight-card:hover {
  transform: translateY(-6px);
  border-color: rgba(83, 174, 166, 0.5);
}
.xb-insight-media {
  position: relative;
  display: block;
  aspect-ratio: 16 / 10;
  overflow: hidden;
}
.xb-insight-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 400ms ease;
}
.xb-insight-card:hover .xb-insight-media img {
  transform: scale(1.05);
}
.xb-insight-media--logo {
  display: flex;
  align-items: center;
  justify-content: center;
  background: #fff;
  padding: 28px;
}
.xb-insight-media--logo img {
  width: auto;
  max-width: 70%;
  max-height: 80px;
  object-fit: contain;
  transform: none !important;
}
.xb-insight-sample {
  position: absolute;
  top: 12px;
  right: 12px;
  background: #53aea6;
  color: #07223f;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 3px 10px;
  border-radius: 4px;
}
.xb-insight-body {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  padding: 26px;
}
.xb-insight-badge {
  align-self: flex-start;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-primary, #53aea6);
  border: 1px solid rgba(83, 174, 166, 0.4);
  border-radius: 4px;
  padding: 4px 10px;
  margin-bottom: 16px;
}
.xb-insight-title {
  font-size: 20px;
  font-weight: 600;
  line-height: 1.35;
  margin: 0 0 12px;
  /* APX-041: clamp to 2 lines + reserve the height so every card in a row is the
     same height regardless of title length (Isotope positions by natural height). */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 54px; /* 2 lines @ 20px/1.35 */
}
.xb-insight-title a {
  color: #fff;
  transition: color 200ms ease;
}
.xb-insight-title a:hover {
  color: var(--color-primary, #53aea6);
}
.xb-insight-excerpt {
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.65);
  margin: 0 0 20px;
  /* APX-041: clamp to 3 lines + reserve the height (see .xb-insight-title). */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 72px; /* 3 lines @ 15px/1.6 */
}
.xb-insight-meta {
  margin-top: auto;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.45);
  /* APX-041: meta can wrap to 2 lines (e.g. Project Reference partners list);
     clamp + reserve so a 1-line meta doesn't make its card shorter. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 42px; /* 2 lines @ 13px/1.6 */
}
.xb-insights-empty {
  text-align: center;
  font-size: 18px;
  color: rgba(255, 255, 255, 0.6);
  margin-top: 30px;
}

/* ----- Insights tools: industry / sort dropdowns (borderless, centered) ----- */
.xb-insights-tools {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 14px 26px;
  margin-bottom: 0;
}
.xb-tool {
  display: inline-flex;
  align-items: baseline;
  gap: 9px;
  margin: 0;
}
.xb-tool-label {
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.4);
}
.xb-tool-divider {
  width: 1px;
  height: 18px;
  background: rgba(255, 255, 255, 0.14);
}
.xb-select {
  appearance: none;
  -webkit-appearance: none;
  background-color: transparent;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2353aea6' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 2px center;
  border: 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 0;
  color: #fff;
  font-size: 15px;
  font-weight: 600;
  padding: 4px 22px 6px 2px;
  cursor: pointer;
  transition: border-color 200ms ease, color 200ms ease;
}
.xb-select:hover,
.xb-select:focus {
  border-bottom-color: var(--color-primary, #53aea6);
  color: var(--color-primary, #53aea6);
  outline: none;
}
.xb-select option {
  background: #07223f;
  color: #fff;
}

/* ----- Event cards ----- */
.xb-insight-media--event {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  padding: 22px;
  background: linear-gradient(135deg, rgba(83, 174, 166, 0.22), rgba(7, 34, 63, 0.55));
  color: var(--color-primary, #53aea6);
}
.xb-event-format {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #fff;
  background: rgba(83, 174, 166, 0.85);
  border-radius: 4px;
  padding: 4px 12px;
}
.xb-event-icon {
  align-self: flex-end;
  color: rgba(255, 255, 255, 0.85);
}
.xb-insight-card--event:hover .xb-insight-media--event {
  background: linear-gradient(135deg, rgba(83, 174, 166, 0.32), rgba(7, 34, 63, 0.55));
}
.xb-insight-badge--event {
  color: #fff;
  border-color: rgba(255, 255, 255, 0.35);
}

/* -----------------------------------------------------------------------------
   Footer — social links
   Centered icon row above the footer bottom bar (replaces the template's
   full-width social "table" rows). Inline SVGs, so the X and LinkedIn marks
   always render without a Font Awesome dependency. href is a placeholder until
   the live profile URLs are provided.
-------------------------------------------------------------------------------- */
.xb-footer-social {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 14px;
  margin: 20px 0 45px;
}
.footer .xb-footer-social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.18);
  color: #fff;
  transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.25s ease;
}
.footer .xb-footer-social-link svg {
  display: block;
  fill: currentColor;
}
.footer .xb-footer-social-link:hover {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #07223F;
  transform: translateY(-3px);
}

/* -----------------------------------------------------------------------------
   Expertise mega-menu - grouped services
   Services are clustered under the four practice-area sub-headings (matching the
   deck / About / homepage taxonomy) so the dropdown scans cleanly instead of a
   flat list of eight long names.
-------------------------------------------------------------------------------- */
.megamenu_subgroup + .megamenu_subgroup {
  margin-top: 18px;
}
.megamenu_subgroup-title {
  display: block;
  margin: 0 0 10px;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-primary);
}
.megamenu_subgroup .icon_list {
  margin: 0;
}

/* -----------------------------------------------------------------------------
   Feature/"why us" cards - equal height in their row (APX-029, was about-only)
   The theme stretches the Bootstrap COLUMNS but leaves the bordered inner card at
   content height, so shorter-text cards end up shorter than their row-mates (Khalid:
   "why does this keep happening?"). Make every feature card + its inner fill the
   column so all cards in a row match the tallest. Broadened from .about-page to ALL
   .xb-feature-item (homepage "why us" + about), EXCEPT the .xb-feature-item2 layout
   (homepage feature section — stacked left/right around the center graphic, not an
   equal-height row). See also APX-016 (success cards) / APX-024 (contact cards).
-------------------------------------------------------------------------------- */
.xb-feature-item:not(.xb-feature-item2),
.xb-feature-item:not(.xb-feature-item2) .xb-item--inner {
  height: 100%;
}

/* -----------------------------------------------------------------------------
   Testimonials - equal-height slides
   The client testimonial cards (Nami / Thimar Al Jazirah / IPS) carry quotes of
   different lengths. Let each slide stretch and the card fill it so all three
   match the tallest card's height in the slider.
-------------------------------------------------------------------------------- */
.testimonial .swiper-slide {
  height: auto;
}
.testimonial .xb-testimonial-item,
.testimonial .xb-testimonial-item .xb-item--inner {
  height: 100%;
}

/* -----------------------------------------------------------------------------
   Expertise mega-menu - tighten grouped service spacing
   Grouped service links inherited a tall ~33px line-height which, on top of the
   row gap, stretched the dropdown. Tighten line-height and the row gap so each
   group reads compactly. Higher specificity (.megamenu_subgroup) so it wins.
-------------------------------------------------------------------------------- */
.mega_menu_box .megamenu_subgroup .icon_list {
  gap: 7px 22px !important;
}
.mega_menu_box .megamenu_subgroup .icon_list > li > a,
.mega_menu_box .megamenu_subgroup .icon_list .icon_list_text {
  font-size: 15px !important;
  line-height: 1.3 !important;
}

/* -----------------------------------------------------------------------------
   Reduced motion (brand principle: always respect prefers-reduced-motion)
   Neutralises CSS animation / transition / smooth-scroll. The JS-driven motion
   (Lenis smooth-scroll, parallax, marquee, gsap scroll reveals) is gated in
   main.js; the magic cursor in magiccursor.js; the WebGL hero mark already
   keeps its static fallback in apex-mark-3d.js.
-------------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  /* WOW.js hides .wow elements until a scroll-reveal animation runs; with motion
     off, force them visible so no content depends on an animation that won't fire. */
  .wow {
    visibility: visible !important;
    opacity: 1 !important;
    animation: none !important;
    transform: none !important;
  }
  /* The custom cursor is not instantiated under reduced motion; make sure its
     element (if any cached markup remains) never shows. */
  .cb-cursor { display: none !important; }
}

/* -----------------------------------------------------------------------------
   Footer polish (APX-013)
   - The contact email is a real address: keep it lowercase (the template's
     .contact-method applies text-transform: capitalize, which renders
     "Info@apexaether.sa"). The location span still capitalizes as before.
   - The fixed back-to-top button (bottom-right) overlapped the bottom-bar email
     at full scroll; add bottom clearance so the last row sits above it.
-------------------------------------------------------------------------------- */
.footer .xb-footer-bottom a.contact-method {
  text-transform: none;
}
.footer .xb-footer-bottom {
  /* Clear the fixed back-to-top button: it sits 40px up + 40px tall = 80px from
     the viewport bottom, so the last row needs more than that of clearance. */
  padding-bottom: 100px;
}

/* -----------------------------------------------------------------------------
   About hero gallery — constrain image/column width (APX-009)
   The gallery columns size to the image's natural width (the template sets no
   width at desktop). The new photos are 2x-resolution (484px wide) for retina,
   which doubled each column and wrapped the 5-across row. Pin the image to its
   column width so source resolution no longer affects layout; the column is
   fixed to the template's intended 242px on desktop so the row stays 5-across.
-------------------------------------------------------------------------------- */
.about-top-image .xb-img a img {
  width: 100%;
  height: auto;
  display: block;
}
@media (min-width: 1200px) {
  .about-top-image .img-hove-effect {
    flex: 0 0 242px;
    width: 242px;
  }
}

/* -----------------------------------------------------------------------------
   Legal pages (Privacy / Terms) — APX-005
   Subhead size (replaces the per-<h3> inline style="font-size:20px") + a small
   centered legal-links row in the footer bottom bar.
-------------------------------------------------------------------------------- */
.legal-subhead {
  font-size: 20px;
}
.footer-legal-links {
  margin-top: 6px;
  font-size: 14px;
}
.footer-legal-links a {
  color: rgba(255, 255, 255, 0.7);
}
.footer-legal-links a:hover {
  color: var(--color-primary);
}

/* -----------------------------------------------------------------------------
   Homepage success-story cards — Partner/Solution list (APX-016)
   The template lays `.xb-item--list` out as a flex row with a 127px gap. When the
   Partner/Solution items fit on one line (Nami) the card looks clean; when the text
   is wider (Thimar, IPS) they wrap and that 127px becomes a huge vertical row-gap,
   leaving a big empty band mid-card. Stack the two lines in a column with consistent
   spacing so all three cards match.
-------------------------------------------------------------------------------- */
.xb-project-content .xb-item--list {
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}

/* -----------------------------------------------------------------------------
   Blog meta (category + date) — sentence/proper case, not ALL CAPS (APX-012)
   The template force-uppercases the meta row, which turned dates into
   "MARCH 24,2025". Brand type scale leans sentence case; source text now carries
   the correct casing ("Cloud", "March 24, 2025"), so drop the transform.
-------------------------------------------------------------------------------- */
.xb-blog-item .xb-item--meta li {
  text-transform: none;
}

/* -----------------------------------------------------------------------------
   Testimonial tag pill (APX-012)
   The lone star icon read as a fake 1-star rating (and used an off-brand colour);
   it's been removed, leaving an honest category tag. Drop the leftover left margin
   the template added to the (former) second item so the single label sits flush.
-------------------------------------------------------------------------------- */
.xb-testimonial-item .xb-item--rating li:last-child {
  margin-left: 0;
}

/* -----------------------------------------------------------------------------
   Homepage "Our Main Services" slider — full-bleed image + navy overlay (APX-018)
   Option A (Khalid). The template panel is 800–920px tall but the service image
   rendered as a ~335×311 box floating in empty navy. Make the image the panel's
   full-bleed background (object-fit:cover) and lay the title / partner / description
   over it behind a navy #07223F gradient (brand §08 navy-duotone hero treatment).
   The panel's images are an identical 4-up stack (the template's hover-reveal); here
   we flatten them to one full-cover layer and drop the circular hover-scale so the
   art reads as integrated, not a thumbnail. (Sitewide hover-zoom removal = APX-020.)
-------------------------------------------------------------------------------- */
.xb-service-item .xb-item--img {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.xb-service-item .xb-item--img a {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border-radius: 0;
  transform: none;
}
.xb-service-item .xb-item--img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* navy gradient so the overlaid white text stays legible over any image */
.xb-service-item .xb-item--img::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(180deg, rgba(7, 34, 63, 0.72) 0%, rgba(7, 34, 63, 0.45) 42%, rgba(7, 34, 63, 0.92) 100%);
}
/* lift the text above the full-bleed image + gradient */
.xb-service-item .xb-item--head-item,
.xb-service-item .xb-item--partner,
.xb-service-item .xb-item--content {
  position: relative;
  z-index: 2;
}

/* -----------------------------------------------------------------------------
   Remove the image hover "zoom-out" (APX-020)
   The template's .img-hove-effect shrinks its stacked image copies on hover
   (scale .9/.7/.5), which reads as the image zooming away / getting harder to see
   (Khalid). Hold them static on hover instead. This is the sitewide gallery effect
   (about, careers, blog, service/partner detail galleries). Subtle zoom-INs
   elsewhere (1.05–1.1 on insight/blog cards) are left — the ticket allows a very
   subtle, non-distracting effect. No new motion, so prefers-reduced-motion (APX-011)
   is unaffected.
-------------------------------------------------------------------------------- */
.img-hove-effect:hover .xb-img a:nth-child(2),
.img-hove-effect:hover .xb-img a:nth-child(3),
.img-hove-effect:hover .xb-img a:nth-child(4) {
  transform: none;
}

/* -----------------------------------------------------------------------------
   Contact cards — equal height, CTA pinned to the bottom (APX-024)
   The three cards are content-driven, so card 1 (whose value wraps to two lines)
   grew ~33px taller and the CTA buttons fell out of alignment. The Bootstrap row
   already stretches the columns to the tallest; make the card fill that height and
   turn the body into a flex column so the button sits at the bottom of every card.
-------------------------------------------------------------------------------- */
/* -----------------------------------------------------------------------------
   Detail-page hero — constrain to a wide banner (APX-026)
   The hero img scaled to full width with auto height, so reused non-wide heroes
   rendered as towers (e.g. about-01-datacenter 484×820 → 1290×2186). Lock every
   detail hero to a 2/1 banner (≈ the original 1290×600 intent; matches the new wide
   1280×640 service heroes natively) and cover-crop any source cleanly.
-------------------------------------------------------------------------------- */
.service-det-img img {
  width: 100%;
  aspect-ratio: 2 / 1;
  object-fit: cover;
  object-position: center;
}

/* -----------------------------------------------------------------------------
   Contact cards — equal height, CTA pinned to the bottom (APX-024)
   The three cards are content-driven, so card 1 (whose value wraps to two lines)
   grew ~33px taller and the CTA buttons fell out of alignment. The Bootstrap row
   already stretches the columns to the tallest; make the card fill that height and
   turn the body into a flex column so the button sits at the bottom of every card.
-------------------------------------------------------------------------------- */
.contact .xb-contact-items,
.contact .xb-contact-items .xb-item--inner {
  height: 100%;
}
.contact .xb-contact-items .xb-item--inner {
  display: flex;
  flex-direction: column;
}
.contact .xb-contact-items .xb-item--holder {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  flex: 1 1 auto;
}
.contact .xb-contact-items .xb-item--holder .form-btn {
  margin-top: auto;
}

/* -----------------------------------------------------------------------------
   Expertise megamenu — cap to viewport + scroll (APX-027)
   The desktop Expertise mega panel lists 20 items and opened ~918px tall on an
   827px viewport, so the bottom CTAs/All-Partnerships were clipped and unreachable.
   Cap the visible panel to the viewport (below the ~88px header) and let it scroll.
   Scoped to .main-menu so the mobile/collapsed nav is unaffected.
-------------------------------------------------------------------------------- */
.main-menu .mega_menu_wrapper_inner {
  max-height: calc(100vh - 96px);
  overflow-y: auto;
  overflow-x: hidden;
  /* APX-075: brand navy panel (overrides main.css's template-default #222746 indigo).
     Stays fully opaque, so no APX-069 bleed-through regression. */
  background: var(--apex-navy);
  /* APX-076: the panel top met the Get Started button's bottom edge (both at y95) with no
     gap, so they read as overlapping. Drop the panel down to open clear space below the header. */
  margin-top: 16px;
}

/* -----------------------------------------------------------------------------
   Expertise megamenu v4 — original design kept, services split into 2 columns
   (APX-027 v4). Khalid: v3's 2×2/partners-removed restructure broke the dropdown.
   Restored the original design (services + partners + promo + CTA banner), still
   data-driven (services/partners loop the JSON). The height fix is laying the 4
   service category groups across TWO columns (2+2) inside the Services column so
   the panel is short enough to show fully without scrolling on a normal laptop.
   (The ?v=27 cap+scroll above stays as a very-short-window fallback.)
-------------------------------------------------------------------------------- */
.expertise_services_2col > [class*="col-"] + [class*="col-"] .megamenu_subgroup:first-child {
  /* keep the top of both inner columns aligned */
  margin-top: 0;
}

/* -----------------------------------------------------------------------------
   Expertise megamenu v5 — CSS-only spacing trim so the panel fully fits (APX-027 v5)
   v4 kept the original design (828→719px) but still overflowed ~800px viewports.
   No markup/content/structure change — just remove the excess vertical whitespace:
   the biggest waste was .social_area's 70px/35px padding (≈105px); also tighten the
   section-heading and category-group gaps. Target panel ≤ ~660px so it shows fully,
   no scroll, no stretch, on a ~800px-tall laptop. (?v=27 cap+scroll stays as backstop.)
-------------------------------------------------------------------------------- */
.mega_menu_wrapper .social_area {
  padding: 24px 0 18px;
}
.mega_menu_box .megamenu_heading {
  margin-bottom: 10px;
  padding-bottom: 8px;
}
.mega_menu_box .megamenu_subgroup + .megamenu_subgroup {
  margin-top: 12px;
}

/* -----------------------------------------------------------------------------
   Footer email icon — match the location icon's size (APX-030)
   email-icon.svg had a 52×46 intrinsic size (vs location-icon's 25×25) and a
   near-black fill; the SVG fill is now brand teal (#53AEA6), and this caps it to
   the same ~25px slot so the two footer-bottom icons match. Aspect preserved.
-------------------------------------------------------------------------------- */
.xb-footer-bottom .contact-item img {
  width: 25px;
  height: auto;
}

/* -----------------------------------------------------------------------------
   Homepage "latest" section — Articles/Blogs type toggle (APX-037)
   Restored the original 1-big-2-small layout; this is the new left-panel toggle
   that switches the right column between the Articles set and the Blogs set
   (auto-rotation in index.njk's inline script). Inactive set uses [hidden].
-------------------------------------------------------------------------------- */
.xb-blog-toggle {
  display: inline-flex;
  gap: 4px;
  padding: 4px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.06);
}
.xb-blog-tab {
  padding: 8px 20px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: #b2b3b7;
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease;
}
.xb-blog-tab:hover {
  color: #fff;
}
.xb-blog-tab.active {
  background: var(--color-primary);
  /* APX-041 follow-up: navy (not white) on teal — white-on-teal is 2.63:1 (fails
     WCAG AA); navy #07223f is 6.09:1 and matches .xb-filter-btn.active. */
  color: #07223f;
}
.xb-blog-tab:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* -----------------------------------------------------------------------------
   Homepage "latest" — compact cards + switch transition (APX-038)
   APX-037 left the big image uncapped (~615px) so the 1-big-2-small set spanned
   ~1246px and the two small cards fell below the fold. Cap the image heights and
   tighten the holder so the whole set fits (~600px) within a ~770px viewport.
   Also fade/slide the active type-set in on toggle + auto-rotate (reduced-motion off).
-------------------------------------------------------------------------------- */
.blog .xb-blog-item .xb-img img {
  width: 100%;
  height: 205px;
  object-fit: cover;
  display: block;
}
.blog .xb-blog-item.xb-small-blog-item .xb-img img {
  height: 140px;
}
.blog .xb-blog-item .xb-item--holder {
  padding: 14px 22px 16px 22px;
}
.blog .xb-blog-item .xb-item--title {
  font-size: 18px;
  margin-top: 6px;
  line-height: 1.3;
}
.blog .xb-blog-item.xb-small-blog-item .xb-item--title {
  font-size: 16px;
}
/* -----------------------------------------------------------------------------
   Per-card switch fade + equal card size + no load flash (APX-039 → APX-040)
   - Inactive set is CSS-hidden by default (no first-paint flash of both sets); JS
     just toggles .is-active. The per-card entrance is a keyframe (re-runs each time
     a set becomes .is-active / display:block), staggered 0/70/140ms.
   - Titles clamped to 2 lines + reserved min-height on BOTH the big and small cards
     so Article and Blog cards are identical at every width (no toggle jump). (APX-040
     adds the big card; APX-039 did the smalls.)
-------------------------------------------------------------------------------- */
.blog .xb-blog-set:not(.is-active) {
  display: none;
}
.blog .xb-blog-set.is-active .xb-blog-item {
  animation: xbBlogFadeUp 0.4s ease both;
}
.blog .xb-blog-set.is-active .row > div:nth-child(2) .xb-blog-item {
  animation-delay: 0.07s;
}
.blog .xb-blog-set.is-active .row > div:nth-child(3) .xb-blog-item {
  animation-delay: 0.14s;
}
@keyframes xbBlogFadeUp {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: none; }
}

/* equal size across types: clamp titles to 2 lines + reserve the height */
.blog .xb-blog-item .xb-item--title a {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.blog .xb-blog-item:not(.xb-small-blog-item) .xb-item--title {
  min-height: 47px;
}
.blog .xb-blog-item.xb-small-blog-item .xb-item--title {
  min-height: 42px;
}

@media (prefers-reduced-motion: reduce) {
  .blog .xb-blog-set.is-active .xb-blog-item {
    animation: none;
  }
}

/* -----------------------------------------------------------------------------
   Screen-reader-only utility (APX-043)
   Visually hidden but exposed to assistive tech — used for section <h2>s that
   keep the heading outline contiguous (h1 → h2 → h3) on the listing pages
   without changing the visible design.
-------------------------------------------------------------------------------- */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* -----------------------------------------------------------------------------
   CTA funnel form additions (APX-034) — honeypot, consent, error, thank-you.
   Reuses the template's existing contact-form styling for the inputs; only the
   new elements are styled here.
-------------------------------------------------------------------------------- */
/* Honeypot: removed from layout + a11y tree; off-screen so bots still fill it. */
.xb-hp {
  position: absolute !important;
  left: -5000px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.xb-field-note {
  margin: 8px 2px 0;
  font-size: 13px;
  color: rgba(255, 255, 255, 0.6);
}
.xb-consent {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 14px;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.8);
  cursor: pointer;
}
.xb-consent input[type="checkbox"] {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  margin-top: 2px;
  accent-color: var(--color-primary, #53aea6);
}
.xb-consent a {
  color: var(--color-primary, #53aea6);
  text-decoration: underline;
}
.xb-funnel-error {
  margin: 18px 0 0;
  padding: 12px 16px;
  background: rgba(220, 53, 69, 0.12);
  border: 1px solid rgba(220, 53, 69, 0.5);
  border-radius: 8px;
  color: #ffb3ba;
  font-size: 14px;
}
.xb-funnel-thankyou {
  text-align: center;
  padding: 24px 20px;
}
.xb-funnel-thankyou .title {
  margin-bottom: 12px;
}
.xb-funnel-ref strong {
  display: inline-block;
  margin: 6px 0 14px;
  font-size: 22px;
  font-weight: 700;
  letter-spacing: 0.5px;
  color: var(--color-primary, #53aea6);
}

/* Events empty-state (APX-034 / events hidden until real ones exist) */
.xb-events-none {
  max-width: 620px;
  margin: 40px auto 0;
  padding: 48px 28px;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 16px;
}
.xb-events-none h3 {
  font-size: 22px;
  font-weight: 600;
  margin: 0 0 12px;
  color: #fff;
}
.xb-events-none p {
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.65);
  margin: 0;
}
.xb-events-none a {
  color: var(--color-primary, #53aea6);
  text-decoration: underline;
}

/* -----------------------------------------------------------------------------
   "Who We Are" section redesign (APX-045)
   Editorial two-column header + horizontal Build·Secure·Document·Hand Over flow.
   Brand-conformed: teal #53aea6 throughout (no off-brand green); --color-* vars; bg is
   the documented #00020f --color-body. Motion reuses .wow fadeInUp (reduced-
   motion already guarded, APX-011).
-------------------------------------------------------------------------------- */
.xb-whoweare {
  position: relative;
  overflow: hidden;
}
.xb-whoweare .container {
  position: relative;
  z-index: 1;
}
.xb-wwa-glow {
  position: absolute;
  top: -180px;
  right: -120px;
  width: 560px;
  height: 560px;
  background: radial-gradient(circle, rgba(83, 174, 166, 0.14), rgba(83, 174, 166, 0) 70%);
  pointer-events: none;
  z-index: 0;
}
/* Header */
.xb-wwa-header {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.6fr);
  gap: 80px;
  align-items: start;
  padding-bottom: 90px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.xb-wwa-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary, #53aea6);
}
.xb-wwa-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--color-primary, #53aea6);
  box-shadow: 0 0 14px rgba(83, 174, 166, 0.8);
}
.xb-wwa-lead {
  margin: 22px 0 0;
  max-width: 300px;
  font-size: 16px;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.55);
}
.xb-wwa-pill {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin-top: 36px;
  padding: 10px 18px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 30px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.72);
}
.xb-wwa-pill-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-primary, #53aea6);
  box-shadow: 0 0 10px rgba(83, 174, 166, 0.8);
}
.xb-wwa-headline {
  margin: 0;
  font-size: 62px;
  line-height: 1.08;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #fff;
}
.xb-wwa-accent {
  color: var(--color-primary, #53aea6);
}
/* Process flow */
.xb-wwa-flow {
  margin-top: 80px;
}
.xb-wwa-flow-head {
  display: flex;
  align-items: center;
  gap: 20px;
  margin-bottom: 44px;
}
.xb-wwa-flow-label {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.4);
  white-space: nowrap;
}
.xb-wwa-flow-rule {
  flex: 1 1 auto;
  height: 1px;
  background: linear-gradient(90deg, rgba(83, 174, 166, 0.5), transparent);
}
.xb-wwa-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 30px;
  position: relative;
}
/* Connector line behind the step nodes */
.xb-wwa-steps::before {
  content: "";
  position: absolute;
  top: 13px;
  left: 0;
  right: 0;
  height: 1px;
  background: rgba(255, 255, 255, 0.1);
}
.xb-wwa-step {
  position: relative;
}
.xb-wwa-node {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 27px;
  height: 27px;
  border-radius: 50%;
  background: #00020f;
  border: 1px solid rgba(83, 174, 166, 0.5);
  position: relative;
  z-index: 1;
}
.xb-wwa-node-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--color-primary, #53aea6);
  box-shadow: 0 0 12px rgba(83, 174, 166, 0.7);
}
.xb-wwa-step-num {
  display: block;
  margin: 22px 0 14px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.18em;
  color: var(--color-primary, #53aea6);
}
.xb-wwa-step-title {
  margin: 0 0 12px;
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #fff;
}
.xb-wwa-step-text {
  margin: 0;
  font-size: 15px;
  line-height: 1.65;
  color: rgba(255, 255, 255, 0.55);
}
@media (max-width: 1023px) {
  .xb-wwa-header {
    grid-template-columns: 1fr;
    gap: 40px;
    padding-bottom: 60px;
  }
  .xb-wwa-headline {
    font-size: 44px;
  }
}
@media (max-width: 767px) {
  .xb-wwa-headline {
    font-size: 34px;
  }
  .xb-wwa-flow {
    margin-top: 56px;
  }
  .xb-wwa-steps {
    grid-template-columns: repeat(2, 1fr);
    gap: 40px 24px;
  }
  .xb-wwa-steps::before {
    display: none;
  }
}
@media (max-width: 479px) {
  .xb-wwa-steps {
    grid-template-columns: 1fr;
  }
}

/* -----------------------------------------------------------------------------
   Testimonials section redesign (APX-046)
   3 real consented testimonials (Nami / Thimar / IPS) as equal-height cards
   with a teal gradient accent. Brand-conformed: no off-brand cyan/green, teal
   family only. Replaces the old Swiper slider.
-------------------------------------------------------------------------------- */
.xb-tnew-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 30px;
}
.xb-tnew-card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 16px;
  padding: 36px 32px 30px;
  overflow: hidden;
  text-align: left;
  transition: transform 250ms ease, border-color 250ms ease;
}
/* teal gradient accent bar (was the off-brand cyan→green gradient) */
.xb-tnew-card::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(120deg, #53aea6 0%, #6fc9c0 60%, #53aea6 100%);
}
.xb-tnew-card:hover {
  transform: translateY(-6px);
  border-color: rgba(83, 174, 166, 0.5);
}
.xb-tnew-quote {
  font-family: Georgia, "Times New Roman", serif;
  font-size: 52px;
  line-height: 0.8;
  color: var(--color-primary, #53aea6);
  opacity: 0.45;
  margin-bottom: 10px;
}
.xb-tnew-tag {
  align-self: flex-start;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-primary, #53aea6);
  border: 1px solid rgba(83, 174, 166, 0.4);
  border-radius: 4px;
  padding: 4px 10px;
  margin-bottom: 18px;
}
.xb-tnew-text {
  margin: 0 0 26px;
  font-size: 16px;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.8);
  font-style: normal;
}
.xb-tnew-author {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: auto;
}
.xb-tnew-logo {
  flex: 0 0 auto;
  width: 54px;
  height: 54px;
  border-radius: 10px;
  background: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
}
.xb-tnew-logo img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
.xb-tnew-name {
  display: block;
  font-size: 17px;
  font-weight: 600;
  color: #fff;
}
.xb-tnew-desig {
  display: block;
  font-size: 13px;
  color: rgba(255, 255, 255, 0.5);
  margin-top: 2px;
}
@media (max-width: 991px) {
  .xb-tnew-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 600px) {
  .xb-tnew-grid {
    grid-template-columns: 1fr;
  }
}

/* -----------------------------------------------------------------------------
   About Us redesign (APX-049)
   Bespoke editorial About page (base.njk layout, no breadcrumb). Dark surface,
   brand teal accents only (0 off-brand cyan/green), white headings, layered text
   tints for AA contrast. Border-ruled / numbered blocks instead of card grids.
-------------------------------------------------------------------------------- */
.xb-ab {
  position: relative;
  padding: 70px 0 30px;
  overflow: hidden;
}
.xb-ab .container {
  position: relative;
  z-index: 1;
}
.xb-ab section {
  position: relative;
}
/* Shared section heads */
.xb-ab-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary, #53aea6);
}
.xb-ab-eyebrow-center {
  justify-content: center;
}
.xb-ab-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--color-primary, #53aea6);
  box-shadow: 0 0 14px rgba(83, 174, 166, 0.8);
}
.xb-ab-h2 {
  margin: 18px 0 0;
  font-size: clamp(28px, 4vw, 42px);
  line-height: 1.12;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #fff;
  text-wrap: balance;
}

/* HERO */
.xb-ab-hero {
  padding: 16px 0 64px;
}
.xb-ab-glow {
  position: absolute;
  top: -200px;
  right: -140px;
  width: 560px;
  height: 560px;
  background: radial-gradient(circle, rgba(83, 174, 166, 0.14), rgba(83, 174, 166, 0) 70%);
  pointer-events: none;
  z-index: 0;
}
/* Decorative apex-mark watermark (from the design source) */
.xb-ab-watermark {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  width: 380px;
  height: auto;
}
.xb-ab-watermark-hero {
  top: -50px;
  right: -70px;
  opacity: 0.06;
}
.xb-ab-watermark-cta {
  left: 50%;
  top: 50%;
  width: 320px;
  transform: translate(-50%, -50%);
  opacity: 0.05;
}
.xb-ab-cta > *:not(.xb-ab-watermark) {
  position: relative;
  z-index: 1;
}
.xb-ab-hero-top {
  position: relative;
  z-index: 1;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.xb-ab-meta {
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}
.xb-ab-h1 {
  margin: 44px 0 0;
  font-size: clamp(44px, 8.2vw, 92px);
  line-height: 0.98;
  font-weight: 700;
  letter-spacing: -0.03em;
  color: #fff;
  text-wrap: balance;
}
.xb-ab-accent {
  color: var(--color-primary, #53aea6);
}
.xb-ab-hero-lede {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  margin-top: 54px;
  max-width: 880px;
}
.xb-ab-hero-lede p {
  margin: 0;
  font-size: 17px;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.72);
}

/* IMAGE COLLAGE */
.xb-ab-collage {
  position: relative;
  height: 380px;
  margin-bottom: 80px;
}
.xb-ab-collage-main,
.xb-ab-collage-inset {
  position: absolute;
  border-radius: 16px;
  overflow: hidden;
}
.xb-ab-collage-main {
  left: 0;
  top: 0;
  width: 62%;
  height: 330px;
  border: 1px solid rgba(255, 255, 255, 0.1);
}
.xb-ab-collage-inset {
  right: 0;
  bottom: 0;
  width: 46%;
  height: 250px;
  border: 1px solid rgba(83, 174, 166, 0.5);
  box-shadow: 0 24px 60px -28px rgba(0, 0, 0, 0.8);
}
.xb-ab-collage img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.xb-ab-collage-veil {
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, rgba(7, 34, 63, 0.4), rgba(0, 2, 15, 0.45));
}
.xb-ab-collage-tag {
  position: absolute;
  left: 22px;
  bottom: 18px;
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.85);
}

/* THREE PRINCIPLES */
.xb-ab-principles {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 40px;
  padding-bottom: 80px;
}
.xb-ab-principle .xb-ab-rule {
  display: block;
  width: 40px;
  height: 2px;
  background: var(--color-primary, #53aea6);
  margin-bottom: 20px;
}
.xb-ab-principle h2 {
  margin: 0 0 10px;
  font-size: 20px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: #fff;
}
.xb-ab-principle p {
  margin: 0;
  font-size: 15px;
  line-height: 1.65;
  color: rgba(255, 255, 255, 0.72);
}

/* MISSION / VISION */
.xb-ab-mv {
  display: grid;
  grid-template-columns: 1fr 1px 1fr;
  gap: 52px;
  padding: 52px 0 80px;
  border-top: 1px solid rgba(255, 255, 255, 0.18);
}
.xb-ab-mv-divider {
  background: rgba(255, 255, 255, 0.1);
}
.xb-ab-label {
  display: block;
  margin-bottom: 22px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-primary, #53aea6);
}
.xb-ab-statement {
  margin: 0;
  font-size: clamp(20px, 2.2vw, 25px);
  line-height: 1.45;
  font-weight: 500;
  letter-spacing: -0.015em;
  color: #fff;
}
.xb-ab-statement-note {
  margin: 18px 0 0;
  font-size: 15px;
  line-height: 1.6;
  color: var(--color-primary, #53aea6);
}

/* WHY APEX */
.xb-ab-why {
  padding-bottom: 80px;
}
.xb-ab-why-list {
  margin-top: 40px;
}
.xb-ab-why-row {
  display: grid;
  grid-template-columns: 60px minmax(220px, 360px) 1fr;
  gap: 32px;
  align-items: baseline;
  padding: 28px 0;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.xb-ab-why-row:last-child {
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.xb-ab-why-num {
  font-size: 18px;
  font-weight: 700;
  color: var(--color-primary, #53aea6);
}
.xb-ab-why-head {
  margin: 0;
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: #fff;
}
.xb-ab-why-text {
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.72);
}

/* VALUES */
.xb-ab-values {
  padding-bottom: 80px;
}
.xb-ab-values-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 36px;
  margin-top: 30px;
}
.xb-ab-value h3 {
  margin: 0 0 8px;
  font-size: 17px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--color-primary, #53aea6);
}
.xb-ab-value p {
  margin: 0;
  font-size: 14px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.6);
}

/* APPROACH */
.xb-ab-approach {
  padding: 52px 0 88px;
  border-top: 1px solid rgba(255, 255, 255, 0.18);
}
.xb-ab-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
  margin: 44px 0 0;
  padding: 0;
  list-style: none;
  counter-reset: none;
}
.xb-ab-step {
  padding: 0 28px;
}
.xb-ab-step:first-child {
  padding-left: 0;
}
.xb-ab-step:last-child {
  padding-right: 0;
}
.xb-ab-step-num {
  display: block;
  font-size: 13px;
  letter-spacing: 0.12em;
  color: var(--color-primary, #53aea6);
  margin-bottom: 16px;
}
.xb-ab-step-rule {
  display: block;
  height: 1px;
  background: linear-gradient(90deg, var(--color-primary, #53aea6), rgba(255, 255, 255, 0.1));
  margin-bottom: 20px;
}
.xb-ab-step h3 {
  margin: 0 0 10px;
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: #fff;
}
.xb-ab-step p {
  margin: 0;
  font-size: 14px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.6);
}

/* CTA */
.xb-ab-cta {
  text-align: center;
  padding: 90px 0 70px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.xb-ab-cta-title {
  margin: 18px auto;
  max-width: 780px;
}
.xb-ab-cta-text {
  margin: 0 auto 34px;
  max-width: 560px;
  font-size: 17px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.72);
}
.xb-ab-cta-btn {
  display: flex;
  justify-content: center;
}

/* Responsive */
@media (max-width: 991px) {
  .xb-ab-hero-lede {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .xb-ab-principles {
    grid-template-columns: 1fr;
    gap: 32px;
  }
  .xb-ab-mv {
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .xb-ab-mv-divider {
    display: none;
  }
  .xb-ab-why-row {
    grid-template-columns: 40px 1fr;
    gap: 8px 20px;
  }
  .xb-ab-why-text {
    grid-column: 2;
  }
  .xb-ab-values-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 30px;
  }
  .xb-ab-steps {
    grid-template-columns: repeat(2, 1fr);
    gap: 36px 28px;
  }
  .xb-ab-step,
  .xb-ab-step:first-child,
  .xb-ab-step:last-child {
    padding: 0;
  }
}
@media (max-width: 600px) {
  .xb-ab-collage {
    height: auto;
    margin-bottom: 56px;
  }
  .xb-ab-collage-main,
  .xb-ab-collage-inset {
    position: relative;
    width: 100%;
    height: 220px;
  }
  .xb-ab-collage-inset {
    margin-top: 16px;
  }
  .xb-ab-values-grid {
    grid-template-columns: 1fr;
  }
  .xb-ab-steps {
    grid-template-columns: 1fr;
    gap: 32px;
  }
  .xb-ab-why-row {
    grid-template-columns: 1fr;
    gap: 6px;
  }
  .xb-ab-why-text {
    grid-column: 1;
  }
}

/* -----------------------------------------------------------------------------
   Partner page redesign (APX-055)
   Shared by all 8 partner pages (partner-detail.njk, base.njk). Immersive hero +
   capabilities grid + 3-step model + CTA band. Brand teal only; data-driven.
-------------------------------------------------------------------------------- */
.xb-pt {
  position: relative;
}
.xb-pt-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary, #53aea6);
}
.xb-pt-eyebrow-center {
  justify-content: center;
}
.xb-pt-rule {
  width: 14px;
  height: 1px;
  background: var(--color-primary, #53aea6);
}
.xb-pt-h2 {
  margin: 16px 0 0;
  font-size: clamp(26px, 3.4vw, 38px);
  line-height: 1.14;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #fff;
  text-wrap: balance;
}
.xb-pt-body {
  max-width: 720px;
  margin: 22px auto 0;
  font-size: 17px;
  line-height: 1.66;
  color: rgba(255, 255, 255, 0.72);
}

/* HERO */
.xb-pt-hero {
  position: relative;
  min-height: 600px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 96px 24px 84px;
  overflow: hidden;
  text-align: center;
}
.xb-pt-hero-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.xb-pt-hero-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0, 2, 15, 0.62) 0%, rgba(7, 34, 63, 0.55) 45%, rgba(0, 2, 15, 0.94) 100%);
}
.xb-pt-hero-glow {
  position: absolute;
  top: -15%;
  left: 50%;
  width: 760px;
  height: 520px;
  max-width: 100%;
  transform: translateX(-50%);
  background: radial-gradient(circle, rgba(83, 174, 166, 0.22), transparent 60%);
  pointer-events: none;
}
.xb-pt-hero-inner {
  position: relative;
  z-index: 1;
  max-width: 720px;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.xb-pt-crumb {
  margin-bottom: 30px;
  font-size: 13px;
  color: rgba(255, 255, 255, 0.55);
}
.xb-pt-crumb a {
  color: rgba(255, 255, 255, 0.78);
}
.xb-pt-crumb a:hover {
  color: var(--color-primary, #53aea6);
}
.xb-pt-lockup {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: 28px;
  flex-wrap: wrap;
  justify-content: center;
}
.xb-pt-chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 118px;
  height: 58px;
  padding: 10px 22px;
  background: #fff;
  border-radius: 14px;
}
.xb-pt-chip img {
  max-height: 40px;
  max-width: 150px;
  width: auto;
  object-fit: contain;
}
.xb-pt-h1 {
  margin: 0;
  font-size: clamp(34px, 5.4vw, 58px);
  line-height: 1.04;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #fff;
  text-wrap: balance;
}
.xb-pt-sub {
  margin: 24px 0 0;
  max-width: 600px;
  font-size: 18px;
  line-height: 1.62;
  color: rgba(255, 255, 255, 0.78);
}
.xb-pt-actions {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 24px;
  margin-top: 40px;
}
/* Play-to-watch link */
.xb-pt-play {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  text-decoration: none;
}
.xb-pt-play-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  flex: 0 0 auto;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.18);
}
.xb-pt-play-btn svg {
  margin-left: 3px;
}
.xb-pt-play-ring {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 2px solid var(--color-primary, #53aea6);
  animation: apexPulse 2.4s ease-out infinite;
}
.xb-pt-play-label {
  display: flex;
  flex-direction: column;
  text-align: left;
  line-height: 1.2;
}
.xb-pt-play-kicker {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary, #53aea6);
}
.xb-pt-play-text {
  font-size: 15px;
  color: #fff;
}
@keyframes apexPulse {
  0% { transform: scale(1); opacity: 0.55; }
  100% { transform: scale(1.85); opacity: 0; }
}

/* Centered section heads */
.xb-pt-intro,
.xb-pt-caps-sec,
.xb-pt-model,
.xb-pt-cta-sec {
  text-align: center;
}
.xb-pt-intro {
  padding: 92px 0 4px;
}
.xb-pt-caps-sec {
  padding: 72px 0 0;
}
.xb-pt-model {
  padding: 72px 0 0;
}

/* CAPABILITIES grid */
.xb-pt-caps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
  margin-top: 48px;
  text-align: left;
}
.xb-pt-cap {
  display: flex;
  flex-direction: column;
  gap: 16px;
  height: 100%;
  box-sizing: border-box;
  padding: 28px 26px;
  background: var(--color-secondary, #07223f);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
.xb-pt-cap:hover {
  transform: translateY(-4px);
  border-color: rgba(83, 174, 166, 0.5);
}
.xb-pt-cap-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.06);
  color: var(--color-primary, #53aea6);
}
.xb-pt-cap-icon svg {
  width: 26px;
  height: 26px;
}
.xb-pt-cap-title {
  margin: 0;
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.35;
  color: #fff;
}

/* PARTNERSHIP MODEL */
.xb-pt-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
  margin-top: 48px;
  text-align: left;
}
.xb-pt-step {
  height: 100%;
  box-sizing: border-box;
  padding: 32px 28px;
  background: var(--color-secondary, #07223f);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
.xb-pt-step:hover {
  transform: translateY(-4px);
  border-color: rgba(83, 174, 166, 0.5);
}
.xb-pt-step-num {
  display: block;
  margin-bottom: 16px;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.12em;
  color: var(--color-primary, #53aea6);
}
.xb-pt-step h3 {
  margin: 0 0 12px;
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: #fff;
}
.xb-pt-step p {
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.72);
}

/* CTA BAND */
.xb-pt-cta-sec {
  padding: 80px 0 110px;
}
.xb-pt-cta {
  position: relative;
  overflow: hidden;
  padding: 64px 56px;
  background: var(--color-secondary, #07223f);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 18px;
}
.xb-pt-cta-glow {
  position: absolute;
  top: -40%;
  left: 50%;
  width: 560px;
  height: 480px;
  max-width: 100%;
  transform: translateX(-50%);
  background: radial-gradient(circle, rgba(83, 174, 166, 0.2), transparent 60%);
  pointer-events: none;
}
.xb-pt-cta-title {
  position: relative;
  margin: 0 auto;
  max-width: 640px;
  font-size: clamp(24px, 3vw, 32px);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: #fff;
  text-wrap: balance;
}
.xb-pt-cta-text {
  position: relative;
  margin: 16px auto 30px;
  max-width: 560px;
  font-size: 16px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.72);
}
.xb-pt-cta .thm-btn {
  position: relative;
}

/* Responsive */
@media (max-width: 1024px) {
  .xb-pt-caps {
    grid-template-columns: repeat(2, 1fr);
  }
  .xb-pt-steps {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 600px) {
  .xb-pt-hero {
    min-height: 520px;
    padding: 80px 18px 64px;
  }
  .xb-pt-caps {
    grid-template-columns: 1fr;
  }
  .xb-pt-cta {
    padding: 48px 26px;
  }
}

/* Reduced motion — neutralize hover lifts, the play-ring pulse, and glows */
@media (prefers-reduced-motion: reduce) {
  .xb-pt-cap,
  .xb-pt-step {
    transition: none;
  }
  .xb-pt-cap:hover,
  .xb-pt-step:hover {
    transform: none;
  }
  .xb-pt-play-ring {
    animation: none;
  }
}

/* -----------------------------------------------------------------------------
   APX-059 — Arabic / RTL layer
   Applies only on <html dir="rtl"> (Arabic pages); English is untouched. Cairo
   for Arabic; relax the Latin negative tracking; mirror the bits the template
   hard-codes LTR (text-align, the rotating CTA arrow chips, eyebrow rules).
-------------------------------------------------------------------------------- */
html[dir="rtl"] body,
html[dir="rtl"] .sub-title,
html[dir="rtl"] p,
html[dir="rtl"] a,
html[dir="rtl"] li,
html[dir="rtl"] span,
html[dir="rtl"] input,
html[dir="rtl"] textarea,
html[dir="rtl"] button {
  font-family: "Cairo", "Plus Jakarta Sans", sans-serif;
}
html[dir="rtl"] h1,
html[dir="rtl"] h2,
html[dir="rtl"] h3,
html[dir="rtl"] h4,
html[dir="rtl"] h5,
html[dir="rtl"] h6 {
  font-family: "Cairo", "Plus Jakarta Sans", sans-serif;
  letter-spacing: 0;          /* Latin negative tracking crushes Arabic */
  line-height: 1.4;
}
/* Default text flow flips with dir=rtl; force-align blocks the template pins LTR */
html[dir="rtl"] .xb-ab-hero-top,
html[dir="rtl"] .xb-ab-why-row,
html[dir="rtl"] .xb-pt-actions {
  text-align: right;
}
/* The rotating arrow chip in .thm-btn points right (LTR); flip it for RTL */
html[dir="rtl"] .thm-btn .arrow,
html[dir="rtl"] .xb-pt-play-btn svg,
html[dir="rtl"] .xb-ab-step-rule,
html[dir="rtl"] .xb-pt-rule,
html[dir="rtl"] .xb-wwa-flow-rule {
  transform: scaleX(-1);
}
/* Eyebrow/lockup rows: keep icon-then-text order mirrored */
html[dir="rtl"] .xb-ab-eyebrow,
html[dir="rtl"] .xb-pt-eyebrow,
html[dir="rtl"] .xb-wwa-eyebrow {
  flex-direction: row-reverse;
}
/* nice-select (custom <select> widget) — mirror for RTL (APX-059 P3 QA):
   base lib floats left + arrow on the right + left-aligned options. */
html[dir="rtl"] .nice-select {
  float: right;
  text-align: right !important;
  padding-left: 30px;
  padding-right: 18px;
}
html[dir="rtl"] .nice-select::after {
  right: auto;
  left: 12px;
}
html[dir="rtl"] .nice-select .list {
  left: auto;
  right: 0;
}
html[dir="rtl"] .nice-select .option {
  text-align: right;
  padding-left: 29px;
  padding-right: 18px;
}
/* Language switcher */
.xb-lang {
  display: inline-flex;
  align-items: center;
  margin-inline-start: 18px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: #fff;
  white-space: nowrap;
}
.xb-lang:hover {
  color: var(--color-primary, #53aea6);
}
.xb-lang-globe {
  width: 16px;
  height: 16px;
  margin-inline-end: 7px;
  stroke: currentColor;
  fill: none;
}
.xb-lang-footer {
  margin: 0;
  color: rgba(255, 255, 255, 0.72);
}

/* ===== APX-060 — "Industries we serve" Compact Band =====================
   Brand-conformed port of Khalid's design handoff. Brand tokens only — the
   prototype's leftover accent/gradient tokens are intentionally NOT ported.
   Navy tiles, teal accents, page bg, white text. */
.industries-band {
  font-family: var(--font-body);
  background: var(--color-body);
  background-image: radial-gradient(90% 120% at 0% 0%, rgba(83, 174, 166, 0.12), transparent 52%);
  padding: 96px 64px;
}
.industries-band .ind-wrap { max-width: 1280px; margin: 0 auto; }
.industries-band .ind-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 40px;
  margin-bottom: 44px;
}
.industries-band .ind-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  color: var(--color-primary);
  font-weight: 600;
  font-size: 12px;
  line-height: 1;
  letter-spacing: 0.2em;
  text-transform: uppercase;
}
.industries-band .ind-eyebrow .dot { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.industries-band .ind-title { font-weight: 700; font-size: 42px; line-height: 1.05; letter-spacing: -0.02em; color: #fff; margin: 14px 0 0; }
.industries-band .ind-intro { font-weight: 400; font-size: 16px; line-height: 1.6; color: rgba(255, 255, 255, 0.55); max-width: 360px; text-align: right; margin: 0; }
.industries-band .ind-divider { height: 1px; background: linear-gradient(90deg, rgba(83, 174, 166, 0.5), rgba(255, 255, 255, 0.06)); margin-bottom: 28px; }
.industries-band .ind-row { display: flex; gap: 14px; }
.industries-band .ind-tile {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  padding: 30px 10px;
  background: var(--color-secondary);
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 14px;
  transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
.industries-band .ind-tile:hover {
  transform: translateY(-4px);
  border-color: rgba(83, 174, 166, 0.5);
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
}
.industries-band .ind-ico {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(83, 174, 166, 0.10);
  border: 1px solid rgba(83, 174, 166, 0.22);
  color: var(--color-primary);
  transition: background 0.25s ease;
}
.industries-band .ind-tile:hover .ind-ico { background: rgba(83, 174, 166, 0.18); }
.industries-band .ind-label { font-weight: 600; font-size: 15px; line-height: 1.25; color: #fff; text-align: center; }

/* RTL: the right-aligned intro flips to the left edge under the RTL layer. */
html[dir="rtl"] .industries-band .ind-intro { text-align: left; }

/* Wrap: one equal row at wide, ~4-per-row ≤1080, 2-per-row on small screens. */
@media (max-width: 1080px) {
  .industries-band { padding: 72px 32px; }
  .industries-band .ind-head { flex-direction: column; align-items: flex-start; gap: 20px; }
  .industries-band .ind-intro { text-align: left; max-width: none; }
  .industries-band .ind-row { flex-wrap: wrap; }
  .industries-band .ind-tile { flex: 1 1 calc(25% - 14px); }
}
@media (max-width: 600px) {
  .industries-band { padding: 56px 20px; }
  .industries-band .ind-title { font-size: 32px; }
  .industries-band .ind-tile { flex: 1 1 calc(50% - 14px); }
}
@media (prefers-reduced-motion: reduce) {
  .industries-band .ind-tile,
  .industries-band .ind-ico { transition: none; }
  .industries-band .ind-tile:hover { transform: none; }
}

/* ============================================================================
   APX-063 — "Aether Beacon" design-system components (.ab-*)
   Class-based implementations of the handoff's DS components (Button, Card,
   SectionTitle, FeatureCard, StepCard, ServiceCard, PartnerChip) + layout
   helpers. Markup is emitted by partials/ds.njk. Brand tokens only.
   ============================================================================ */

/* ----- Layout helpers ----- */
.ab-container { max-width: var(--container-aether); margin: 0 auto; padding: 0 56px; }
.ab-grid { display: grid; gap: 24px; }
.ab-grid--3 { grid-template-columns: repeat(3, 1fr); }
.ab-grid--4 { grid-template-columns: repeat(4, 1fr); gap: 20px; }

/* ----- Button — uppercase pill, teal fill + navy text + navy arrow chip ----- */
.ab-btn { display: inline-flex; align-items: center; gap: 12px; font-family: var(--font-body); font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; line-height: 1; white-space: nowrap; text-decoration: none; cursor: pointer; border: 1px solid transparent; border-radius: var(--radius-pill); transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out); }
.ab-btn--sm { font-size: 12px; padding: 11px 20px; }
.ab-btn--lg { font-size: 13px; padding: 15px 26px; }
.ab-btn--primary { background: var(--apex-teal); color: var(--apex-navy); }
.ab-btn--primary:hover { background: var(--apex-teal-bright); color: var(--apex-navy); }
.ab-btn--secondary { background: var(--apex-navy); color: #fff; border-color: var(--apex-border-strong); }
.ab-btn--secondary:hover { border-color: var(--apex-border-teal); }
.ab-btn--ghost { background: transparent; color: #fff; border-color: var(--apex-border-strong); }
.ab-btn--ghost:hover { border-color: var(--apex-border-teal); color: var(--apex-teal-bright); }
.ab-btn__chip { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--apex-navy); color: var(--apex-teal); }
.ab-btn--secondary .ab-btn__chip, .ab-btn--ghost .ab-btn__chip { background: rgba(255, 255, 255, 0.08); color: #fff; }
.ab-btn__chip svg { width: 12px; height: 12px; transition: transform var(--duration-fast) var(--ease-out); }
/* APX-084: branded hover motion (the color-only hover felt static vs the card lifts).
   Subtle lift + the arrow nudges along its diagonal; primary gets a soft teal glow. */
.ab-btn:hover { transform: translateY(-2px); }
.ab-btn:hover .ab-btn__chip svg { transform: translate(2px, -2px); }
.ab-btn--primary:hover { box-shadow: 0 10px 22px -8px rgba(83, 174, 166, 0.55); }
@media (prefers-reduced-motion: reduce) {
  .ab-btn:hover, .ab-btn:hover .ab-btn__chip svg { transform: none; }
  .ab-btn--primary:hover { box-shadow: none; }
}
/* APX-078: kill the template's header-button hover-fill pseudo (main.css
   `.header-style--one .header-btn a::before` — position:absolute, width:100%, white).
   Our .ab-btn isn't a positioning/overflow context, so that white ::before spilled to
   full page width on hover. .ab-btn supplies its own hover, so just remove the pseudo. */
.header-style--one .header-btn a.ab-btn::before,
.header-style--one .header-btn a.ab-btn::after { content: none; }

/* ----- Eyebrow + SectionTitle ----- */
.ab-eyebrow { display: inline-flex; align-items: center; font-size: var(--text-eyebrow); font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--apex-teal); }
.ab-eyebrow::before { content: ""; width: 14px; height: 1px; margin-right: 8px; background: var(--apex-teal); }
.ab-sectitle--center { text-align: center; }
.ab-sectitle__title { margin: 14px 0 0; font-size: var(--text-h2); font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; color: #fff; }
.ab-sectitle--center .ab-sectitle__title { margin-left: auto; margin-right: auto; }

/* ----- Card (generic) + hover lift ----- */
.ab-card { display: flex; flex-direction: column; background: rgba(7, 34, 63, 0.40); border: 1px solid var(--apex-border); border-radius: var(--radius-md); padding: 28px; }
.ab-card--hover { transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-card--hover:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }

/* ----- FeatureCard ----- */
.ab-feature { gap: 18px; }
.ab-feature__icon { display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: var(--radius-sm); background: rgba(83, 174, 166, 0.10); border: 1px solid var(--apex-border-teal); }
.ab-feature__title { margin: 0; font-size: 19px; font-weight: 600; letter-spacing: -0.01em; color: #fff; }
.ab-feature__body { margin: 0; font-size: 15px; line-height: 1.6; color: var(--apex-text-muted); }

/* ----- StepCard ----- */
.ab-step { gap: 14px; }
.ab-step__num { font-size: 13px; font-weight: 700; letter-spacing: 0.12em; color: var(--apex-teal); }
.ab-step__title { margin: 0; font-size: 18px; font-weight: 600; color: #fff; }
.ab-step__body { margin: 0; font-size: 14px; line-height: 1.6; color: var(--apex-text-muted); }

/* ----- ServiceCard — full-bleed image + navy scrim ----- */
.ab-service { position: relative; display: block; height: 380px; overflow: hidden; text-decoration: none; border: 1px solid var(--apex-border); border-radius: var(--radius-lg); transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-service:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-service__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ab-service__scrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(7, 34, 63, 0.15) 0%, rgba(0, 2, 15, 0.55) 45%, rgba(0, 2, 15, 0.94) 100%); }
.ab-service__body { position: absolute; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; gap: 8px; padding: 26px; }
.ab-service__partner { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); }
.ab-service__title { font-size: 21px; font-weight: 600; letter-spacing: -0.01em; color: #fff; }
.ab-service__summary { font-size: 14px; line-height: 1.55; color: rgba(255, 255, 255, 0.70); }

/* ----- PartnerChip — white logo chip ----- */
.ab-chip { display: inline-flex; align-items: center; justify-content: center; height: 72px; min-width: 150px; padding: 0 26px; background: #fff; border-radius: var(--radius-md); }
.ab-chip img { width: auto; max-width: 120px; max-height: 36px; object-fit: contain; }

/* ----- Responsive ----- */
@media (max-width: 1024px) {
  .ab-grid--3, .ab-grid--4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 767px) {
  .ab-container { padding: 0 24px; }
  .ab-grid--3, .ab-grid--4 { grid-template-columns: 1fr; }
  .ab-sectitle__title { font-size: 30px; }
}

/* ----- RTL (hidden /ar/ today, but keep it correct) ----- */
html[dir="rtl"] .ab-eyebrow::before { margin-right: 0; margin-left: 8px; }

/* ----- Reduced motion ----- */
@media (prefers-reduced-motion: reduce) {
  .ab-card--hover:hover, .ab-service:hover { transform: none; }
}

/* ----- Shared footer (Aether Beacon 4-col) ----- */
.ab-footer { border-top: 1px solid var(--apex-border); background: var(--surface-page); padding: 60px 0 36px; font-family: var(--font-body); }
.ab-footer__grid { max-width: var(--container-aether); margin: 0 auto; padding: 0 56px; display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.2fr; gap: 40px; }
.ab-footer__logo img { height: 28px; width: auto; }
.ab-footer__blurb { margin: 20px 0 0; font-size: 14px; line-height: 1.7; color: var(--apex-text-muted); max-width: 280px; }
.ab-footer__h { margin: 0 0 12px; font-size: 12px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: #fff; }
.ab-footer__col a, .ab-footer__muted { display: block; font-size: 14px; line-height: 2.1; color: var(--apex-text-muted); text-decoration: none; }
.ab-footer__col a { transition: color var(--duration-fast) var(--ease-out); }
.ab-footer__col a:hover { color: var(--apex-teal-bright); }
.ab-footer__social { display: flex; gap: 10px; margin-top: 16px; }
.ab-footer__social a { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 50%; border: 1px solid var(--apex-border); color: var(--apex-text-muted); transition: border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }
.ab-footer__social a:hover { border-color: var(--apex-border-teal); color: var(--apex-teal-bright); }
.ab-footer__social svg { width: 15px; height: 15px; }
.ab-footer__bottom { max-width: var(--container-aether); margin: 36px auto 0; padding: 24px 56px 0; border-top: 1px solid var(--apex-border); display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; }
.ab-footer__bottom > span { font-size: 13px; color: var(--apex-text-faint); }
.ab-footer__legal a { color: var(--apex-text-faint); text-decoration: none; transition: color var(--duration-fast) var(--ease-out); }
.ab-footer__legal a:hover { color: var(--apex-teal-bright); }
@media (max-width: 1024px) { .ab-footer__grid { grid-template-columns: 1fr 1fr; gap: 32px; } }
@media (max-width: 767px) {
  .ab-footer__grid { grid-template-columns: 1fr; padding: 0 24px; }
  .ab-footer__bottom { padding: 24px 24px 0; flex-direction: column; }
}

/* ----- Shared header (Aether Beacon reskin, in place over the template) -----
   Restyles the bar typography + CTA over the existing (JS-wired) header so the
   megamenu / mobile menu / sticky behaviour stay intact. */
.header-style--one .header__wrap { min-height: 82px; }
.header-style--one .header-btn { display: flex; align-items: center; gap: 16px; }
/* primary nav links → 15/600, white .78, hover #fff */
.header-style--one .main-menu > ul > li > a { font-family: var(--font-body); font-size: 15px; font-weight: 600; color: rgba(255, 255, 255, 0.78); transition: color var(--duration-fast) var(--ease-out); }
.header-style--one .main-menu > ul > li > a span { color: inherit; }
.header-style--one .main-menu > ul > li > a:hover,
.header-style--one .main-menu > ul > li:hover > a,
.header-style--one .main-menu > ul > li.active > a { color: #fff; }
.header-style--one .main-menu > ul > li.active > a span,
.header-style--one .main-menu > ul > li:hover > a span { color: #fff; }
/* mobile: drop the bar CTA so it's just logo + hamburger (Contact lives in the menu) */
@media (max-width: 991.98px) { .header-style--one .header-btn { display: none; } }
/* APX-069: the Expertise megamenu is a contained panel; over the redesigned hero
   its teal glows + the sections below bled around it ("overlap"). Dim the page
   behind the open megamenu (desktop only) so it reads as a clean floating panel. */
@media (min-width: 992px) {
  .header-style--one .main-menu li.megamenu > .submenu::before {
    content: ""; position: fixed; inset: 0; z-index: -1;
    background: rgba(0, 2, 15, 0.82); pointer-events: none;
  }
}

/* ============================================================================
   APX-063 — "Aether Beacon" homepage
   ============================================================================ */
.ab-mt-28 { margin-top: 28px; } .ab-mt-32 { margin-top: 32px; }
.ab-mt-40 { margin-top: 40px; } .ab-mt-48 { margin-top: 48px; }
.ab-sec { padding: 0 0 100px; }
.ab-sec--tight { padding: 30px 0 96px; }
.ab-sec__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; }

/* hero — centered beacon */
.ab-hero { position: relative; background: var(--surface-page) url("../img/aether/bg/brand-hero-center.webp") center top / cover no-repeat; }
.ab-hero::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 220px; background: linear-gradient(180deg, rgba(0,2,15,0) 0%, var(--surface-page) 92%); pointer-events: none; }
.ab-hero__inner { position: relative; z-index: 1; max-width: 880px; margin: 0 auto; padding: 96px 56px 60px; text-align: center; }
.ab-hero__mark { display: block; width: 104px; height: auto; margin: 0 auto 26px; }
.ab-hero__pill { display: inline-flex; align-items: center; font-size: 11px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--apex-teal); padding: 7px 16px; border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); }
.ab-hero__title { font-size: 64px; font-weight: 700; line-height: 1.0; letter-spacing: -0.03em; color: #fff; margin: 24px 0 0; }
.ab-hero__sub { font-size: 19px; line-height: 1.6; color: rgba(255,255,255,0.74); max-width: 600px; margin: 24px auto 36px; }
.ab-hero__btns { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }
/* stats bar */
.ab-stats { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--apex-border); border-radius: var(--radius-md); background: rgba(7, 34, 63, 0.72); overflow: hidden; margin-bottom: 8px; }
.ab-stat { padding: 26px 30px; border-left: 1px solid var(--apex-border); }
.ab-stat:first-child { border-left: 0; }
.ab-stat__v { font-size: 30px; font-weight: 700; letter-spacing: -0.02em; color: #fff; }
.ab-stat__k { margin-top: 6px; font-size: 13px; color: var(--apex-text-muted); }

/* chips row (customers + partners) */
.ab-chips { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; }

/* testimonial quote card */
.ab-quote { gap: 16px; }
.ab-quote__mark { font-size: 46px; line-height: 0.5; font-weight: 800; color: var(--apex-teal); }
.ab-quote__text { margin: 0; font-size: 16px; line-height: 1.65; color: #fff; }
.ab-quote__by { margin-top: auto; padding-top: 18px; border-top: 1px solid var(--apex-border); }
.ab-quote__name { font-size: 14px; font-weight: 600; color: #fff; }
.ab-quote__role { font-size: 13px; color: var(--apex-text-muted); }

/* partner strip */
.ab-pstrip { padding: 54px 0; border-top: 1px solid var(--apex-border); border-bottom: 1px solid var(--apex-border); background: var(--apex-fill-subtle); }
.ab-pstrip .ab-container { display: flex; flex-direction: column; align-items: center; }

/* CTA over beacon */
.ab-cta { position: relative; padding: 104px 0; background: var(--surface-page) url("../img/aether/bg/brand-hero-center.webp") center / cover no-repeat; }
.ab-cta::before { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,2,15,0.5) 0%, var(--surface-page) 100%); pointer-events: none; }
.ab-cta__inner { position: relative; z-index: 1; max-width: 720px; margin: 0 auto; padding: 0 56px; text-align: center; }
.ab-cta__title { font-size: 44px; font-weight: 700; letter-spacing: -0.02em; color: #fff; margin: 0 0 16px; }
.ab-cta__sub { font-size: 18px; color: rgba(255,255,255,0.7); margin: 0 auto 32px; max-width: 540px; }
.ab-cta__inner .ab-btn { display: inline-flex; }

/* insight post card */
.ab-post { gap: 18px; padding: 0; overflow: hidden; }
.ab-post__cover { display: block; }
.ab-post__cover img { display: block; width: 100%; height: 172px; object-fit: cover; }
.ab-post > :not(.ab-post__cover) { margin-left: 28px; margin-right: 28px; }
.ab-post__foot { margin-bottom: 26px; }
.ab-post__cat { display: inline-flex; align-self: flex-start; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 5px 12px; }
.ab-post__title { margin: 0; font-size: 20px; font-weight: 600; line-height: 1.3; }
.ab-post__title a { color: #fff; }
.ab-post__title a:hover { color: var(--apex-teal-bright); }
.ab-post__foot { display: flex; align-items: center; justify-content: space-between; padding-top: 18px; border-top: 1px solid var(--apex-border); }
.ab-post__date { font-size: 13px; color: var(--apex-text-muted); }
.ab-post__read { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 600; color: var(--apex-teal); }

/* hero responsive */
@media (max-width: 1024px) { .ab-stats { grid-template-columns: repeat(2, 1fr); } .ab-stat:nth-child(-n+2) { border-bottom: 1px solid var(--apex-border); } .ab-stat:nth-child(3) { border-left: 0; } }
@media (max-width: 767px) {
  .ab-hero__inner { padding: 80px 24px 48px; }
  .ab-hero__title { font-size: 38px; }
  .ab-hero__sub { font-size: 16px; }
  .ab-stats { grid-template-columns: 1fr; }
  .ab-stat { border-left: 0; border-top: 1px solid var(--apex-border); }
  .ab-stat:first-child { border-top: 0; }
  .ab-sec__head { flex-direction: column; align-items: flex-start; }
  .ab-cta__title { font-size: 30px; }
}

/* ============================================================================
   APX-067 — inner pages (Aether Beacon). Shared inner-hero + About.
   ============================================================================ */
.ab-ihero { position: relative; background: var(--surface-page) url("../img/aether/bg/brand-hero-center.webp") center 38% / cover no-repeat; }
.ab-ihero::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,2,15,0.12) 0%, var(--surface-page) 100%); pointer-events: none; }
/* APX-068: clear the absolute/transparent sticky header (y≈24–106) so the
   breadcrumb + hero content don't render under the nav. Higher specificity than
   the mobile `.ab-container` padding reset, so it holds at 768/375 too. */
.ab-ihero .ab-container { position: relative; z-index: 1; padding-top: 120px; padding-bottom: 80px; }
.ab-crumb { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--apex-text-muted); margin-bottom: 40px; }
.ab-crumb a { color: var(--apex-text-muted); }
.ab-crumb a:hover { color: var(--apex-teal-bright); }
.ab-crumb span[aria-hidden] { opacity: 0.5; }
.ab-crumb__here { color: #fff; }
.ab-ihero__grid { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 56px; align-items: center; }
.ab-ihero__title { font-size: 54px; font-weight: 700; line-height: 1.03; letter-spacing: -0.03em; color: #fff; margin: 22px 0 0; }
.ab-ihero__lede { font-size: 17px; line-height: 1.65; color: rgba(255,255,255,0.74); margin: 22px 0 0; }
.ab-ihero__lede--muted { font-size: 16px; color: var(--apex-text-muted); margin-top: 16px; }

/* About — image collage */
.ab-collage { position: relative; }
.ab-collage__main { border: 1px solid var(--apex-border); border-radius: 16px; overflow: hidden; background: var(--apex-navy); }
.ab-collage__main img { display: block; width: 100%; height: 380px; object-fit: cover; }
.ab-collage__inset { position: absolute; left: -26px; bottom: -26px; width: 200px; border: 1px solid var(--apex-border-teal); border-radius: 14px; overflow: hidden; background: var(--apex-navy); }
.ab-collage__inset img { display: block; width: 100%; height: 120px; object-fit: cover; }
.ab-collage__tag { display: block; padding: 10px 14px; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); }
html[dir="rtl"] .ab-collage__inset { left: auto; right: -26px; }

/* About — mission / vision */
.ab-mv { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.ab-mv__card { padding: 40px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 16px; }
.ab-mv__card--vision { background: linear-gradient(160deg, rgba(83,174,166,0.14), var(--apex-navy) 70%); border-color: var(--apex-border-teal); }
.ab-mv__statement { margin: 18px 0 0; font-size: 21px; line-height: 1.55; font-weight: 500; color: #fff; }
.ab-mv__note { margin: 20px 0 0; font-size: 15px; font-weight: 600; letter-spacing: 0.02em; color: var(--apex-teal-bright); }

/* About — value cards (teal tick) */
.ab-vcard { padding: 28px 26px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 14px; transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-vcard:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-vcard__tick { display: block; width: 40px; height: 3px; background: var(--apex-teal); border-radius: 3px; margin-bottom: 18px; }
.ab-vcard__title { margin: 0 0 10px; font-size: 18px; font-weight: 600; color: #fff; }
.ab-vcard__body { margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--apex-text-muted); }

@media (max-width: 900px) {
  .ab-ihero__grid { grid-template-columns: 1fr; gap: 40px; }
  .ab-ihero__title { font-size: 38px; }
  .ab-mv { grid-template-columns: 1fr; }
  .ab-collage { margin-bottom: 30px; }
}
@media (prefers-reduced-motion: reduce) { .ab-vcard:hover { transform: none; } }

/* PageHero (shared inner-page hero) */
.ab-pagehero .ab-container { padding-bottom: 56px; }
.ab-pagehero__title { font-size: 54px; font-weight: 700; line-height: 1.04; letter-spacing: -0.03em; color: #fff; margin: 22px 0 0; max-width: 840px; }
.ab-pagehero__intro { font-size: 18px; line-height: 1.62; color: rgba(255,255,255,0.72); max-width: 660px; margin: 20px 0 0; }

/* Filter bar (Project Reference / Insights — restyles the .xb-filter-btn hooks) */
.ab-filterbar { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 18px; padding-bottom: 30px; border-bottom: 1px solid var(--apex-border); margin-bottom: 38px; }
.ab-filter { display: flex; gap: 8px; flex-wrap: wrap; }
.ab-fbtn { font-family: inherit; cursor: pointer; font-size: 13px; font-weight: 600; padding: 9px 18px; border-radius: var(--radius-pill); background: transparent; color: var(--apex-text-muted); border: 1px solid var(--apex-border); transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-fbtn:hover { border-color: var(--apex-border-teal); color: #fff; }
.ab-fbtn.active { background: var(--apex-teal); color: var(--apex-navy); border-color: var(--apex-teal); }
.ab-filterbar__count { font-size: 13px; color: var(--apex-text-muted); }

/* Project Reference grid + case-study card */
.ab-prgrid .xb-insight-col { width: calc((100% - 48px) / 3); margin-bottom: 24px; }
.ab-prcard { display: flex; flex-direction: column; gap: 18px; height: 100%; padding: 26px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: var(--radius-md); transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-prcard:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-prcard__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.ab-chip--sm { height: 54px; min-width: 0; padding: 0 16px; border-radius: 10px; }
.ab-chip--sm img { max-height: 30px; }
.ab-prcard__cat { flex: none; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 5px 12px; }
.ab-prcard__name { margin: 0; font-size: 24px; font-weight: 600; color: #fff; }
.ab-prcard__desc { margin: 0; font-size: 15px; line-height: 1.65; color: var(--apex-text); flex: 1; }
.ab-prcard__tags { padding-top: 16px; border-top: 1px solid var(--apex-border); font-size: 12px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--apex-text-muted); }
@media (max-width: 1024px) { .ab-prgrid .xb-insight-col { width: calc((100% - 24px) / 2); } .ab-pagehero__title { font-size: 40px; } }
@media (max-width: 700px) { .ab-prgrid .xb-insight-col { width: 100%; } .ab-pagehero__title { font-size: 32px; } }
@media (prefers-reduced-motion: reduce) { .ab-prcard:hover { transform: none; } }

/* Service detail template */
a.ab-hero__pill--link { text-decoration: none; transition: border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }
a.ab-hero__pill--link:hover { border-color: var(--apex-teal); color: var(--apex-teal-bright); }
.ab-svchero__grid { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 54px; align-items: center; }
.ab-svchero__title { font-size: 50px; font-weight: 700; line-height: 1.05; letter-spacing: -0.03em; color: #fff; margin: 22px 0 0; }
.ab-svchero__btn { margin-top: 34px; }
.ab-svchero__media { border: 1px solid var(--apex-border); border-radius: 16px; overflow: hidden; background: var(--apex-navy); }
.ab-svchero__media img { display: block; width: 100%; height: 420px; object-fit: cover; }
.ab-deliver { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 56px; align-items: start; }
.ab-deliver__lede { margin: 18px 0 0; font-size: 16px; line-height: 1.7; color: var(--apex-text-muted); }
.ab-deliver__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ab-deliver__item { display: flex; align-items: center; gap: 12px; padding: 16px 18px; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 12px; transition: border-color var(--duration-fast) var(--ease-out); }
.ab-deliver__item:hover { border-color: var(--apex-border-teal); }
.ab-deliver__item svg { flex: none; color: var(--apex-teal); }
.ab-deliver__item span { font-size: 14.5px; font-weight: 500; color: #fff; }
.ab-gallery__item { border: 1px solid var(--apex-border); border-radius: 16px; overflow: hidden; background: var(--apex-navy); }
.ab-gallery__item img { display: block; width: 100%; height: 240px; object-fit: cover; }
@media (max-width: 900px) {
  .ab-svchero__grid { grid-template-columns: 1fr; gap: 36px; }
  .ab-svchero__title { font-size: 36px; }
  .ab-deliver { grid-template-columns: 1fr; gap: 32px; }
}
@media (max-width: 600px) { .ab-deliver__grid { grid-template-columns: 1fr; } }

/* Partner detail template */
.ab-mt-44 { margin-top: 44px; }
/* APX-071: partner detail hero now uses the standard .ab-ihero.ab-pagehero shell (same as
   service-detail/project-reference) — only the logo-chip + eyebrow lockup and the CTA row
   are partner-specific. The old full-bleed bg/scrim/onimg-crumb hero was removed. */
.ab-pthero__lockup { display: flex; align-items: center; gap: 14px; margin: 26px 0 0; flex-wrap: wrap; }
.ab-pthero__chip { display: inline-flex; align-items: center; height: 50px; padding: 0 16px; background: #fff; border-radius: 10px; }
.ab-pthero__chip img { width: auto; height: auto; max-height: 28px; max-width: 130px; object-fit: contain; display: block; }
.ab-pthero__btns { display: flex; gap: 14px; margin-top: 34px; flex-wrap: wrap; }

/* APX-072: All Partners listing card. No Isotope on this page, so the CSS-grid row
   stretches all cards to the tallest (height:100%); the blurb is line-clamped and the
   link is pinned to the bottom so every card lines up. */
.ab-pcard { display: flex; flex-direction: column; height: 100%; gap: 16px; padding: 28px; text-decoration: none; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: var(--radius-md); transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-pcard:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-pcard__logo { align-self: flex-start; display: inline-flex; align-items: center; height: 48px; padding: 0 16px; background: #fff; border-radius: 10px; }
.ab-pcard__logo img { width: auto; height: auto; max-height: 26px; max-width: 120px; object-fit: contain; display: block; }
.ab-pcard__name { font-size: 22px; font-weight: 600; color: #fff; }
.ab-pcard__desc { font-size: 14.5px; line-height: 1.6; color: var(--apex-text-muted); display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.ab-pcard__link { margin-top: auto; display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 600; color: var(--apex-teal); }
@media (prefers-reduced-motion: reduce) { .ab-pcard:hover { transform: none; } }

.ab-pstmt-sec { border-top: 1px solid var(--apex-border); }
.ab-pstmt { max-width: 900px; margin: 0 auto; padding: 0 56px; text-align: center; }
.ab-eyebrow--center { justify-content: center; }
.ab-eyebrow--center::after { content: ""; width: 14px; height: 1px; margin-left: 8px; background: var(--apex-teal); }
.ab-pstmt__title { font-size: 38px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.15; color: #fff; margin: 18px 0; }
.ab-pstmt__body { font-size: 18px; line-height: 1.7; color: var(--apex-text-muted); margin: 0; }

.ab-cap { display: flex; align-items: center; gap: 14px; padding: 22px 24px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 14px; transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-cap:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-cap__ico { display: flex; align-items: center; justify-content: center; flex: none; width: 40px; height: 40px; border-radius: 10px; background: var(--apex-fill); color: var(--apex-teal); }
.ab-cap__label { font-size: 16px; font-weight: 600; color: #fff; }
@media (max-width: 900px) { .ab-pstmt__title { font-size: 28px; } }
@media (prefers-reduced-motion: reduce) { .ab-cap:hover { transform: none; } }

/* Insights article card */
.ab-icard { display: flex; flex-direction: column; height: 100%; text-decoration: none; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: var(--radius-md); overflow: hidden; transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-icard:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-icard__cover { position: relative; display: block; height: 184px; overflow: hidden; background: var(--apex-fill); }
.ab-icard__cover img { display: block; width: 100%; height: 100%; object-fit: cover; }
.ab-icard__sample { position: absolute; top: 12px; left: 12px; font-size: 10px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--apex-navy); background: var(--apex-teal); padding: 3px 8px; border-radius: 4px; }
.ab-icard__body { display: flex; flex-direction: column; gap: 14px; flex: 1; padding: 20px 24px 24px; }
.ab-icard__cat { align-self: flex-start; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 5px 12px; }
.ab-icard__title { font-size: 20px; font-weight: 600; line-height: 1.32; color: #fff; }
.ab-icard__excerpt { font-size: 14.5px; line-height: 1.6; color: var(--apex-text-muted); flex: 1; }
.ab-icard__foot { display: flex; align-items: center; justify-content: space-between; padding-top: 16px; border-top: 1px solid var(--apex-border); }
.ab-icard__meta { font-size: 13px; color: var(--apex-text-faint); }
.ab-icard__read { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 600; color: var(--apex-teal); }
html[dir="rtl"] .ab-icard__sample { left: auto; right: 12px; }
@media (prefers-reduced-motion: reduce) { .ab-icard:hover { transform: none; } }

/* APX-069 — equal-height cards in the Isotope grid (Project Reference + Insights).
   Isotope's fitRows layout absolute-positions each .xb-insight-col to its OWN content
   height, so the parent grid can't stretch the cards (no align-items effect). Instead we
   reserve + line-clamp the variable rows so every card resolves to the same height — the
   APX-041 equal-height standard, applied to the new .ab-prcard / .ab-icard. Each clamp
   reserves its full line count via min-height, so short cards pad up to the tallest and
   the meta/tags row baselines align across the whole grid. The clamp counts are sized to
   the measured worst case at the design widths (no truncation 1280–1600 or at 768/mobile);
   only the longest single card loses ~1 line in the awkward narrow-3-col band (~1025px).
   Released at 1-col (<=575px) where each card owns its row, so mobile shows full text. */
@media (min-width: 576px) {
  .ab-prcard__name {
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
    overflow: hidden; min-height: calc(1.3em * 2);
  }
  .ab-prcard__desc {
    display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical;
    overflow: hidden; min-height: calc(1.65em * 6);
  }
  .ab-icard__title {
    display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical;
    overflow: hidden; min-height: calc(1.32em * 4);
  }
  .ab-icard__excerpt {
    display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical;
    overflow: hidden; min-height: calc(1.6em * 5);
  }
}
/* Pin the tags to the bottom AND reserve 2 lines: the tag row is variable (1–2 lines), so
   without a reserve it left ragged bottoms — visible in Arabic where one card's tags fit on
   one line while the others took two (English happened to wrap all three to two lines). */
.ab-prcard__tags {
  margin-top: auto;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; line-height: 1.7; min-height: calc(16px + 1.7em * 2);
}
/* Pin the foot to the card bottom. The inline "date · industry | read" row couldn't fit
   the real meta (e.g. "March 2026 · Cross-industry") + the read link on one line even in a
   3-col desktop card, so the longest card was ellipsizing the industry. Stack the foot
   (meta over read) so the full meta always shows and every card's foot is the same height
   → equal cards at every width. */
.ab-icard__foot { margin-top: auto; flex-direction: column; align-items: flex-start; gap: 10px; }
.ab-icard__read { flex: none; }

/* Events empty-state */
.ab-empty { max-width: 840px; margin: 0 auto; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 64px 48px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 18px; }
.ab-empty__ico { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 16px; background: var(--apex-fill); color: var(--apex-teal); margin-bottom: 24px; }
.ab-empty__title { margin: 0 0 12px; font-size: 28px; font-weight: 700; letter-spacing: -0.02em; color: #fff; }
.ab-empty__body { margin: 0 0 30px; font-size: 16px; line-height: 1.65; color: var(--apex-text-muted); max-width: 480px; }
.ab-empty__body a { color: var(--apex-teal); }
.ab-empty__body a:hover { color: var(--apex-teal-bright); }
.ab-empty__btns { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.ab-topics { max-width: 840px; margin: 36px auto 0; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; }
.ab-topics__lead { font-size: 13px; color: var(--apex-text-faint); }
.ab-topic { font-size: 12px; font-weight: 600; letter-spacing: 0.04em; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 6px 14px; }

/* Careers */
.ab-chero { max-width: 760px; }
.ab-chero__lede { max-width: 620px; margin-bottom: 32px; }
.ab-cstrip { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; margin-top: 54px; }
.ab-cstrip__item { aspect-ratio: 3 / 4; border: 1px solid var(--apex-border); border-radius: 14px; overflow: hidden; background: var(--apex-navy); }
.ab-cstrip__item img { display: block; width: 100%; height: 100%; object-fit: cover; }
.ab-grid--5 { grid-template-columns: repeat(5, 1fr); gap: 16px; }
.ab-jobs { display: flex; flex-direction: column; gap: 16px; }
.ab-jobrow { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 20px; text-decoration: none; padding: 28px 32px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 14px; transition: border-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); }
.ab-jobrow:hover { border-color: var(--apex-border-teal); transform: translateY(-2px); }
.ab-jobrow__main { display: flex; flex-direction: column; gap: 12px; }
.ab-jobrow__dept { align-self: flex-start; font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 5px 12px; }
.ab-jobrow__title { font-size: 24px; font-weight: 600; color: #fff; }
.ab-jobrow__meta { display: flex; gap: 18px; flex-wrap: wrap; }
.ab-jobrow__m { display: inline-flex; align-items: center; gap: 7px; font-size: 14px; color: var(--apex-text-muted); }
.ab-jobrow__m svg { color: var(--apex-teal); }
.ab-jobrow__view { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--apex-teal); white-space: nowrap; }
.ab-norole { margin-top: 40px; padding: 36px 40px; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 20px; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 16px; }
.ab-norole__title { margin: 0 0 6px; font-size: 20px; font-weight: 600; color: #fff; }
.ab-norole__body { margin: 0; font-size: 15px; color: var(--apex-text-muted); }
@media (max-width: 1024px) { .ab-grid--5, .ab-cstrip { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 640px) { .ab-grid--5 { grid-template-columns: 1fr; } .ab-cstrip { grid-template-columns: 1fr 1fr; } .ab-jobs__head { flex-direction: column; align-items: flex-start; } }
@media (prefers-reduced-motion: reduce) { .ab-jobrow:hover { transform: none; } }

/* Job detail (career-details) */
.ab-jd { max-width: 860px; }
.ab-jd__facts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 24px; padding: 24px; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 14px; }
.ab-jd__fact { display: flex; gap: 8px; font-size: 14.5px; }
.ab-jd__k { color: var(--apex-text-muted); }
.ab-jd__k::after { content: ":"; }
.ab-jd__v { color: #fff; font-weight: 500; }
.ab-jd__intro { margin: 24px 0 0; font-size: 16px; line-height: 1.7; color: var(--apex-text); }
.ab-jd__sec { margin-top: 40px; }
.ab-jd__h { font-size: 22px; font-weight: 600; color: #fff; margin: 0 0 16px; }
.ab-jd__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.ab-jd__list li { position: relative; padding-left: 26px; font-size: 15px; line-height: 1.6; color: var(--apex-text); }
.ab-jd__list li::before { content: ""; position: absolute; left: 0; top: 9px; width: 8px; height: 8px; border-radius: 2px; background: var(--apex-teal); }
.ab-jd__list li span { color: #fff; font-weight: 600; }
html[dir="rtl"] .ab-jd__list li { padding-left: 0; padding-right: 26px; }
html[dir="rtl"] .ab-jd__list li::before { left: auto; right: 0; }

/* Aether form fields (career-details + contact) */
.ab-formcard { background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 16px; padding: 40px; }
.ab-formcard .form-heading .title { color: #fff; }
.ab-formcard .form-heading .sub-title { color: var(--apex-text-muted); }
.aether-page .details-contact-input-form label { display: block; color: var(--apex-text-muted); font-size: 14px; }
.aether-page .details-contact-input-form .xb-input-field { margin-top: 8px; }
.aether-page .details-contact-input-form .xb-input-field input, .aether-page .details-contact-input-form .xb-input-field textarea { width: 100%; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 8px; color: #fff; padding: 12px 14px; font-family: var(--font-body); font-size: 15px; transition: border-color var(--duration-fast) var(--ease-out); }
.aether-page .details-contact-input-form .xb-input-field input:focus, .aether-page .details-contact-input-form .xb-input-field textarea:focus { border-color: var(--apex-border-teal); outline: none; }
.aether-page .details-contact-input-form .xb-massage-field textarea { min-height: 120px; resize: vertical; }
.aether-page .xb-consent { display: flex; gap: 10px; align-items: flex-start; color: var(--apex-text-muted); font-size: 14px; }
.aether-page .xb-consent a { color: var(--apex-teal); }
.aether-page .xb-upload_file > label { color: #fff; font-weight: 600; }
.aether-page .xb-upload_file .xb-content { color: var(--apex-text-faint); font-size: 13px; margin-top: 6px; }
.aether-page .xb-upload_file .xb-content span { color: var(--apex-text-muted); font-weight: 600; }
.aether-page .xb-funnel-error { color: #f0999a; font-size: 14px; }
.aether-page .xb-funnel-thankyou .title { color: #fff; }
.aether-page .xb-funnel-thankyou p { color: var(--apex-text-muted); }
.aether-page .xb-funnel-thankyou .xb-funnel-ref strong { color: var(--apex-teal); }
@media (max-width: 600px) { .ab-jd__facts { grid-template-columns: 1fr; } .ab-formcard { padding: 28px 20px; } }

/* Contact cards */
.ab-ccards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.ab-ccard { display: flex; flex-direction: column; gap: 8px; padding: 28px; text-decoration: none; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 14px; transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-ccard:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-ccard__ico { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: var(--radius-sm); background: rgba(83, 174, 166, 0.1); border: 1px solid var(--apex-border-teal); color: var(--apex-teal); margin-bottom: 8px; }
.ab-ccard__label { font-size: 14px; color: var(--apex-text-muted); }
.ab-ccard__value { font-size: 17px; font-weight: 600; color: #fff; word-break: break-word; }
.ab-ccard__cta { display: inline-flex; align-items: center; gap: 7px; margin-top: 8px; font-size: 13px; font-weight: 600; color: var(--apex-teal); }
/* APX-074: social card (X + LinkedIn) — both icon links, matching the footer order. */
.ab-ccard__social { display: flex; gap: 10px; margin-top: 10px; }
.ab-ccard__social a { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: var(--radius-sm); background: var(--apex-fill); border: 1px solid var(--apex-border); color: rgba(255,255,255,0.82); transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-ccard__social a:hover { color: var(--apex-teal); border-color: var(--apex-border-teal); }
.ab-ccard__social svg { width: 17px; height: 17px; }

/* Contact form + map */
/* APX-070: don't stretch the map to the (long) form's full height — that made it a tall
   narrow strip. Give it a sensible fixed height and let it stick beside the scrolling form. */
.ab-contactwrap { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 32px; align-items: start; }
.ab-map { align-self: start; position: sticky; top: 100px; height: 560px; border: 1px solid var(--apex-border); border-radius: 16px; overflow: hidden; }
.ab-map iframe { display: block; width: 100%; height: 100%; border: 0; filter: invert(0.9) hue-rotate(180deg) brightness(0.95); }
.ab-contactform .xb-input-field { position: relative; }
.ab-contactform .xb-input-field > img { display: none; }
.ab-contactform .xb-input-field input, .ab-contactform .xb-input-field textarea { width: 100%; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 8px; color: #fff; padding: 16px; font-family: var(--font-body); font-size: 15px; transition: border-color var(--duration-fast) var(--ease-out); }
.ab-contactform .xb-input-field input:focus, .ab-contactform .xb-input-field textarea:focus { border-color: var(--apex-border-teal); outline: none; }
.ab-contactform .xb-input-field label { color: var(--apex-text-muted); }
.ab-contactform .xb-massage-field textarea { min-height: 120px; resize: vertical; }
.ab-contactform .nice-select { background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); color: #fff; border-radius: 8px; }
.ab-contactform .nice-select .list { background: var(--apex-navy); border: 1px solid var(--apex-border); }
.ab-contactform .nice-select .option { color: var(--apex-text); }
.ab-contactform .nice-select .option:hover, .ab-contactform .nice-select .option.selected { background: var(--apex-fill); color: #fff; }
.ab-contactform .xb-select-field > img { display: none; }
.ab-contactform .xb-select-file { display: flex; align-items: center; gap: 10px; background: var(--apex-fill-subtle); border: 1px dashed var(--apex-border); border-radius: 8px; padding: 14px 16px; color: var(--apex-text-muted); }
.ab-contactform .xb-select-file > img { display: none; }
.ab-contactform .xb-field-note { margin-top: 6px; font-size: 13px; color: var(--apex-text-faint); }
@media (max-width: 900px) { .ab-ccards { grid-template-columns: 1fr; } .ab-contactwrap { grid-template-columns: 1fr; } .ab-map { position: static; height: 420px; } }

/* ============================================================================
   APX-083 — insight/blog DETAIL pages (Aether Beacon). One template (blog-details.njk)
   for both types; cover image used as a faint hero bg + a featured card; 720px reading
   column (.ax-body) + author byline + tags/back + shared .ab-cta band.
   ============================================================================ */
/* APX-083 fix: use the standard Aether Beacon backdrop (like .ab-ihero) instead of the
   per-post cover image — the small (720px) covers looked blurry/squeezed as a full-width
   hero bg and duplicated the featured card below. The cover now shows only in the card. */
.ab-ahero { position: relative; background: var(--surface-page) url("../img/aether/bg/brand-hero-center.webp") center 38% / cover no-repeat; }
.ab-ahero::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,2,15,0.3) 0%, var(--surface-page) 96%); pointer-events: none; }
.ab-ahero__inner { position: relative; z-index: 1; max-width: 880px; margin: 0 auto; padding: 120px 56px 8px; }
.ab-ahero .ab-crumb { margin-bottom: 30px; }
.ab-ahero__meta { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 0 0 20px; }
.ab-ahero__pill { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--apex-teal); border: 1px solid var(--apex-border-teal); border-radius: var(--radius-pill); padding: 5px 13px; }
.ab-ahero__date { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--apex-text-muted); }
.ab-ahero__date svg { color: var(--apex-teal); flex: none; }
.ab-ahero__title { font-size: 46px; font-weight: 700; line-height: 1.1; letter-spacing: -0.025em; color: #fff; margin: 0; }

.ab-apost { padding: 36px 0 100px; }
.ab-apost__inner { max-width: 880px; margin: 0 auto; padding: 0 56px; }
.ab-apost__cover { border: 1px solid var(--apex-border); border-radius: 16px; overflow: hidden; background: var(--apex-navy); margin-bottom: 44px; }
.ab-apost__cover img { display: block; width: 100%; height: auto; }
.ax-body { max-width: 720px; }
.ax-body p { margin: 0 0 22px; font-size: 17.5px; line-height: 1.78; color: rgba(255, 255, 255, 0.78); }
.ax-body p:last-child { margin-bottom: 0; }
.ax-body strong { color: #fff; font-weight: 600; }
.ax-body em { color: var(--apex-teal-bright); font-style: italic; }
.ax-body .lead { font-size: 20px; line-height: 1.65; color: #fff; font-weight: 500; margin-bottom: 28px; }

.ab-abyline { display: flex; align-items: center; gap: 18px; margin-top: 48px; padding: 24px; background: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 16px; max-width: 720px; }
.ab-abyline__avatar { display: flex; align-items: center; justify-content: center; width: 54px; height: 54px; flex: none; border-radius: 50%; background: var(--apex-navy); border: 1px solid var(--apex-border-teal); overflow: hidden; }
.ab-abyline__avatar img { width: 26px; height: 26px; }
.ab-abyline__name { font-size: 16px; font-weight: 600; color: #fff; }
.ab-abyline__tag { margin-top: 3px; font-size: 13.5px; line-height: 1.5; color: var(--apex-text-muted); }

.ab-atags { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; margin-top: 34px; padding-top: 28px; border-top: 1px solid var(--apex-border); max-width: 720px; }
.ab-atags__list { display: flex; gap: 8px; flex-wrap: wrap; }
.ab-atag { font-size: 12px; font-weight: 600; letter-spacing: 0.04em; color: var(--apex-text-muted); text-decoration: none; border: 1px solid var(--apex-border); border-radius: var(--radius-pill); padding: 6px 14px; transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-atag:hover { color: var(--apex-teal-bright); border-color: var(--apex-border-teal); }
.ab-aback { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--apex-teal); text-decoration: none; }
.ab-aback:hover { color: var(--apex-teal-bright); }

@media (max-width: 768px) {
  .ab-ahero__title { font-size: 32px; }
  .ab-ahero__inner, .ab-apost__inner { padding-left: 24px; padding-right: 24px; }
}

/* ============================================================================
   APX-082 — bespoke Contact page (channels + form + map/office/hours).
   Supersedes the APX-067/070/074 contact layout (old .ab-ccards/.ab-contactwrap
   styles above are now unused on Contact). Live funnel form preserved; visual only.
   ============================================================================ */
.ab-cgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.ab-cchan { display: flex; flex-direction: column; gap: 16px; text-decoration: none; padding: 28px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 16px; transition: transform var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.ab-cchan:hover { transform: var(--lift-hover); border-color: var(--apex-border-teal); }
.ab-cchan__ico { display: flex; align-items: center; justify-content: center; width: 46px; height: 46px; border-radius: 12px; background: var(--apex-fill); color: var(--apex-teal); }
.ab-cchan__label { font-size: 11px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--apex-teal); }
.ab-cchan__value { font-size: 19px; font-weight: 600; color: #fff; line-height: 1.35; }
.ab-cchan__cta { margin-top: auto; padding-top: 8px; display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: var(--apex-teal); }

.ab-cwrap { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 28px; align-items: start; }

.ab-cform { padding: 40px; background: var(--apex-navy); border: 1px solid var(--apex-border); border-radius: 18px; }
.ab-cform__title { margin: 0 0 8px; font-size: 26px; font-weight: 700; letter-spacing: -0.02em; color: #fff; }
.ab-cform__sub { margin: 0 0 28px; font-size: 15px; line-height: 1.6; color: var(--apex-text-muted); }
.ab-cform__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.ab-cform__field { display: flex; flex-direction: column; gap: 8px; }
.ab-cform__field--full { margin-top: 16px; }
.ab-cform__label { font-size: 12px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--apex-text-muted); }
/* Scoped to .ab-cform (0,2,0) to beat main.css's input[type=…]/form select/textarea
   (0,1,1). background-COLOR (not shorthand) so the select arrow image isn't wiped. */
.ab-cform .ab-cform__input { width: 100%; box-sizing: border-box; font-family: inherit; font-size: 15px; color: #fff; background-color: var(--apex-fill-subtle); border: 1px solid var(--apex-border); border-radius: 10px; padding: 14px 16px; transition: border-color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out); outline: none; }
.ab-cform .ab-cform__input::placeholder { color: var(--apex-text-faint); }
.ab-cform .ab-cform__input:focus { border-color: var(--apex-border-teal); background-color: rgba(255, 255, 255, 0.05); }
.ab-cform__textarea { resize: vertical; min-height: 130px; }
.ab-cform__select { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 42px; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2353AEA6' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>"); background-repeat: no-repeat; background-position: right 16px center; }
.ab-cform__select option { background: var(--apex-navy); color: #fff; }
.ab-cform__file { position: relative; display: flex; align-items: center; gap: 12px; margin-top: 18px; padding: 16px 18px; border: 1px dashed var(--apex-border); border-radius: 12px; cursor: pointer; color: var(--apex-teal); transition: border-color var(--duration-fast) var(--ease-out); }
.ab-cform__file:hover { border-color: var(--apex-border-teal); }
.ab-cform__file-text { font-size: 14px; color: var(--apex-text-muted); }
.ab-cform__file-input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.ab-cform__consent { display: flex; align-items: flex-start; gap: 12px; margin-top: 20px; cursor: pointer; }
.ab-cform__consent input { margin-top: 3px; width: 17px; height: 17px; accent-color: var(--apex-teal); flex-shrink: 0; }
.ab-cform__consent span { font-size: 13.5px; line-height: 1.55; color: var(--apex-text-muted); }
.ab-cform__consent a { color: var(--apex-teal); text-decoration: none; }
.ab-cform__consent a:hover { text-decoration: underline; }
.ab-cform__turnstile { margin-top: 20px; }
.ab-cform__submit { margin-top: 26px; }
.ab-cform .xb-funnel-error { margin: 16px 0 0; color: #ff8a8a; font-size: 14px; }
.ab-cform .xb-funnel-thankyou .title { font-size: 22px; color: #fff; margin: 0 0 10px; }
.ab-cform .xb-funnel-thankyou p { color: var(--apex-text-muted); font-size: 15px; line-height: 1.6; margin: 0 0 10px; }
.ab-cform .xb-funnel-ref strong { color: var(--apex-teal-bright); font-size: 18px; }

.ab-cside { display: flex; flex-direction: column; gap: 24px; }
.ab-cmapcard { border: 1px solid var(--apex-border); border-radius: 18px; overflow: hidden; background: var(--apex-navy); }
.ab-cmap iframe { display: block; width: 100%; height: 300px; border: 0; filter: grayscale(0.4) invert(0.92) hue-rotate(180deg) brightness(0.95) contrast(0.9); }
.ab-coffice { padding: 22px 24px; }
.ab-coffice__label { font-size: 11px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--apex-teal); }
.ab-coffice__name { margin: 10px 0 0; font-size: 16px; font-weight: 600; color: #fff; }
.ab-coffice__city { margin: 4px 0 0; font-size: 14px; color: var(--apex-text-muted); }
.ab-chours { padding: 24px; border: 1px solid var(--apex-border); border-radius: 18px; background: var(--apex-fill-subtle); }
.ab-chours__label { font-size: 11px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--apex-teal); }
.ab-chours__rows { margin-top: 16px; display: flex; flex-direction: column; gap: 12px; }
.ab-chours__row { display: flex; align-items: center; justify-content: space-between; font-size: 14.5px; }
.ab-chours__day { color: var(--apex-text); }
.ab-chours__time { color: #fff; font-weight: 500; }

/* RTL: flip the native select arrow to the start side */
html[dir="rtl"] .ab-cform__select { padding-right: 16px; padding-left: 42px; background-position: left 16px center; }

@media (max-width: 1024px) { .ab-cgrid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 900px) { .ab-cwrap { grid-template-columns: 1fr; } }
@media (max-width: 560px) { .ab-cgrid { grid-template-columns: 1fr; } .ab-cform { padding: 28px; } .ab-cform__grid { grid-template-columns: 1fr; } }

/* Legal (privacy / terms) prose */
.ab-legal { max-width: 820px; }
.ab-legal__intro { font-size: 17px; line-height: 1.75; color: var(--apex-text); margin: 0 0 8px; }
.ab-legal p { font-size: 15.5px; line-height: 1.75; color: var(--apex-text-muted); margin: 0 0 18px; }
.ab-legal__h { font-size: 22px; font-weight: 600; letter-spacing: -0.01em; color: #fff; margin: 40px 0 16px; }
.ab-legal a { color: var(--apex-teal); }
.ab-legal a:hover { color: var(--apex-teal-bright); }
.ab-legal ul, .ab-legal ol { color: var(--apex-text-muted); padding-left: 22px; margin: 0 0 18px; }
.ab-legal li { margin-bottom: 8px; line-height: 1.7; }
html[dir="rtl"] .ab-legal ul, html[dir="rtl"] .ab-legal ol { padding-left: 0; padding-right: 22px; }

/* APX-086: FAQ accordion (Contact + service-detail) — native <details>, no JS. */
.ab-faq { padding: 84px 0; background: var(--surface-page); }
.ab-faq__inner { max-width: 820px; }
.ab-faq__title { font-size: 28px; font-weight: 700; color: #fff; text-align: center; margin: 0 0 30px; }
.ab-faq__item { border: 1px solid var(--apex-border); border-radius: var(--radius-md); margin-bottom: 12px; padding: 0 22px; background: rgba(255,255,255,0.02); transition: border-color var(--duration-fast) var(--ease-out); }
.ab-faq__item[open], .ab-faq__item:hover { border-color: var(--apex-border-teal); }
.ab-faq__q { cursor: pointer; list-style: none; position: relative; padding: 19px 34px 19px 0; font-size: 17px; font-weight: 600; color: #fff; }
.ab-faq__q::-webkit-details-marker { display: none; }
.ab-faq__q::after { content: "+"; position: absolute; right: 2px; top: 50%; transform: translateY(-50%); font-size: 22px; font-weight: 400; line-height: 1; color: var(--apex-teal); }
.ab-faq__item[open] .ab-faq__q::after { content: "\2212"; }
.ab-faq__a { padding: 0 0 20px; color: var(--apex-text-muted); font-size: 15.5px; line-height: 1.72; }
html[dir="rtl"] .ab-faq__q { padding: 19px 0 19px 34px; }
html[dir="rtl"] .ab-faq__q::after { right: auto; left: 2px; }
@media (max-width: 575px) { .ab-faq { padding: 56px 0; } .ab-faq__q { font-size: 16px; } }

/* APX-106: "What we deliver" cluster cards (service pages). Auto-fit any cluster count. */
.ab-clusters { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 18px; align-items: start; margin-top: 44px; }
.ab-cluster { display: flex; flex-direction: column; gap: 18px; background: var(--apex-navy); border: 1px solid rgba(255,255,255,0.10); border-radius: 14px; padding: 26px 24px; transition: transform .25s ease, border-color .25s ease; }
.ab-cluster:hover { transform: translateY(-4px); border-color: rgba(83,174,166,0.5); }
.ab-cluster__head { display: flex; justify-content: space-between; align-items: center; }
.ab-cluster__chip { width: 42px; height: 42px; border-radius: 11px; background: rgba(83,174,166,0.12); border: 1px solid rgba(83,174,166,0.5); display: grid; place-items: center; color: var(--apex-teal); }
.ab-cluster__count { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; font-weight: 600; color: rgba(83,174,166,0.7); }
.ab-cluster__title { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; color: #fff; margin: 0 0 4px; }
.ab-cluster__sub { font-size: 12.5px; line-height: 1.4; color: rgba(255,255,255,0.4); margin: 0; }
.ab-cluster__divider { height: 1px; background: rgba(255,255,255,0.10); }
.ab-cluster__items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.ab-cluster__item { display: flex; gap: 10px; align-items: flex-start; }
.ab-cluster__item svg { color: var(--apex-teal); flex-shrink: 0; margin-top: 2px; }
.ab-cluster__item span { font-size: 14px; line-height: 1.45; color: rgba(255,255,255,0.72); }
@media (prefers-reduced-motion: reduce) { .ab-cluster { transition: none; } .ab-cluster:hover { transform: none; } }


/* -----------------------------------------------------------------------------
   APX-121 — mobile menu button touch target
   The template renders the hamburger at 35x35, below the 44x44 minimum touch
   target. Widen it on mobile only; the icon stays centred.
-------------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
  .header-bar-mobile.side-menu { width: auto; height: auto; }
  .header-bar-mobile .xb-nav-mobile { width: 44px; height: 44px; }
}


/* -----------------------------------------------------------------------------
   APX-122 — mobile touch targets
   Interactive elements below the 44x44 guidance are enlarged on mobile without
   changing the visual design. Logo anchors are inline, so their box collapsed
   to ~21px around a taller image — inline-block makes them wrap it. Block/flex
   links gain vertical padding.
   Deliberately NOT touched: inline links inside a sentence (the footer legal
   line). WCAG 2.5.8 exempts inline targets, and padding them breaks text flow.
-------------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
  .xb-header-logo .logo1 { display: inline-block; }
  /* footer mark is shorter than the header logo — inline-block alone lands at 30px */
  .ab-footer__brand .ab-footer__logo { display: inline-block; padding-block: 8px; }

  .ab-post__read { padding-block: 8px; }
  .ab-footer__col a { padding-block: 8px; }
  .ab-crumb a { padding-block: 6px; }
  .ab-footer__social a { width: 44px; height: 44px; }
}
