/* =====================================================
   GoGoX component overrides — targets Elementor's
   per-element ID classes (.elementor-element-{id}) to
   force structural layout and interactive states.
   ===================================================== */

/* Full-bleed 100vw bands (legal hero, promo bands) are 100vw = viewport
   INCLUDING the scrollbar, so they sit a few px past the content width and
   create a sliver of horizontal overflow (a stray strip on the right edge of
   footers/bars). Clip it at the root. `clip` (not `hidden`) does NOT create a
   scroll container, so sticky sidebars keep working; carousels scroll inside
   their own overflow containers and are unaffected. NOTE: the clip must sit on
   `body` — on the root `html` element it does not propagate/clip here. */
html, body { overflow-x: clip; }

/* =====================================================
   Atomic Components — class-based styling for the
   elementor_component posts (drag-from-panel Components).
   Each atomic element opts in via its `classes` prop.
   ===================================================== */

/* Zero Elementor's DEFAULT 10px container padding fallback. Containers with
   explicit padding set in their JSON (like /delivery/'s classic containers
   with padding: 72px) keep their values — this only affects the fallback.
   Prevents the 10px outer margin on components dropped into blank pages. */
:root {
  --container-default-padding-top: 0px;
  --container-default-padding-right: 0px;
  --container-default-padding-bottom: 0px;
  --container-default-padding-left: 0px;
}

/* ----- BUTTON HOVER: darker bg on hover for classic Elementor button widgets ----- */
.elementor-widget-button .elementor-button,
.elementor-widget-button .elementor-button-link {
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease !important;
}
.elementor-widget-button .elementor-button:hover,
.elementor-widget-button .elementor-button:focus,
.elementor-widget-button a.elementor-button-link:hover {
  background-color: #006E9B !important;
  border-color: #006E9B !important;
  color: #FFFFFF !important;
}

/* ----- HERO ----- */
/* Default hero min-height (overridden by height variants below) */
/* Mobile-banner modifier: collapses hero to natural-height image on mobile.
   Apply via Elementor CSS Classes field: gogox-hero--mobile-banner */
@media (max-width: 1176px) {
  .gogox-hero--mobile-banner .gogox-hero-section {
    min-height: 0 !important;
    height: auto !important;
    display: block !important;
    padding: 0 !important;
    margin: 0 !important;
    background-color: transparent !important;
  }
  .gogox-hero--mobile-banner .gogox-hero-section::after {
    display: none !important;
  }
  .gogox-hero--mobile-banner .gogox-hero-section .gogox-hero-bg--mobile {
    position: static !important;
    inset: unset !important;
    width: 100% !important;
    height: auto !important;
    object-fit: unset !important;
    opacity: 1 !important;
    display: block !important;
    margin: 0 !important;
    pointer-events: auto !important;
  }
  .gogox-hero--mobile-banner .gogox-hero-section .gogox-hero-bg:not(.gogox-hero-bg--mobile) {
    display: none !important;
  }
  .gogox-hero--mobile-banner .gogox-hero-box,
  .gogox-hero--mobile-banner .gogox-hero-overlay {
    display: none !important;
  }
}

.gogox-hero-section,
.elementor .gogox-hero-section.e-con,
.elementor .gogox-hero-section.e-flexbox-base {
  min-height: 700px;
}
/* Height variants — set per-instance via the widget's "Hero Height" control */
/* Dark heading tone (text_tone = dark). Required whenever the left overlay is a
   light tint — the hero title and subtitle are white by default, so a white
   overlay would otherwise erase them. Navy matches the card titles. */
.gogox-hero-section--text-dark .gogox-hero-title,
.gogox-hero-section--text-dark .gogox-hero-text { color: #0B1F33 !important; }

.gogox-hero-section--compact  { min-height: 480px !important; }
.gogox-hero-section--standard { min-height: 700px !important; }
.gogox-hero-section--tall     { min-height: 860px !important; }
/* Auto: section height driven by the image's natural aspect ratio */
.gogox-hero-section--auto {
  min-height: unset !important;
  height: auto !important;
  display: block !important;
  padding: 0 !important;
}
/* Desktop: show the desktop image at full natural width */
.gogox-hero-section--auto .gogox-hero-bg:not(.gogox-hero-bg--mobile) {
  position: static !important;
  inset: unset !important;
  width: 100% !important;
  height: auto !important;
  object-fit: unset !important;
  display: block !important;
  opacity: 1 !important;
}
/* Keep mobile image hidden on desktop */
.gogox-hero-section--auto .gogox-hero-bg--mobile {
  position: absolute !important;
  opacity: 0 !important;
  width: 0 !important;
  height: 0 !important;
}
.gogox-hero-section--auto .gogox-hero-box {
  position: absolute !important;
  inset: 0 !important;
  max-width: unset !important;
  padding-left: max(32px, calc((100% - 1264px) / 2 + 32px)) !important;
  padding-right: 40px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  justify-content: center !important;
  gap: 20px !important;
}
/* Mobile: switch to mobile image at natural size */
@media (max-width: 1176px) {
  .gogox-hero-section--auto .gogox-hero-bg:not(.gogox-hero-bg--mobile) {
    opacity: 0 !important;
    width: 0 !important;
    height: 0 !important;
  }
  .gogox-hero-section--auto .gogox-hero-bg--mobile {
    position: static !important;
    inset: unset !important;
    width: 100% !important;
    height: auto !important;
    object-fit: unset !important;
    display: block !important;
    opacity: 1 !important;
  }
}
.gogox-hero-section {
  position: relative;
  min-height: 804px;
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  padding-top: 96px !important;
  padding-bottom: 40px !important;
  padding-left: max(32px, calc((100% - 1264px) / 2 + 32px)) !important;
  background-color: #0088BF;
  overflow: hidden;
}
/* Hero bg image is an overridable atomic e-image (id=atherobg). The atomic
   e-image renders as a bare <img> with the class directly on it, so styling
   the img element itself rather than a wrapper. */
.gogox-hero-bg {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  object-fit: cover !important;
  object-position: center !important;
  z-index: 0 !important;
  pointer-events: none;
  display: block !important;
}
/* Two bg images stack absolutely at inset:0; only one is visible per
   breakpoint. Use opacity (not display:none) so both remain mounted in the
   Elementor editor's atomic-widget container tree — `display:none` causes
   the editor's per-override inspector to fail to find the inner element
   ("Component inner element not found for override control"). */
.gogox-hero-bg--mobile {
  opacity: 0 !important;
  pointer-events: none !important;
}
.gogox-hero-box {
  position: relative !important;
  z-index: 5 !important; /* sits above .gogox-hero-section::after gradient (z-index: 1) and .gogox-hero-overlay (z-index: 2) */
  max-width: 540px;
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  gap: 20px;
}

/* ── Band variant (hero_height = "band") ────────────────────────────────
   Short, flat-colour banner: a heading on the left + an optional illustration
   on the right. Used by legal pages (/terms/, /privacy/). Overrides the tall
   photo-hero base above — uses a double-class selector (higher specificity)
   plus !important so it wins regardless of the heavy base rules' source order.
   Full-bleed colour band mirrors the prior raw-HTML banner's technique
   (width:100vw + translateX) so it spans edge-to-edge inside the page container. */
.gogox-hero-section.gogox-hero-section--band {
  min-height: 0 !important;
  height: auto !important;
  display: block !important;
  padding: 0 !important;
  overflow: visible !important;
  width: 100vw !important;
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  box-sizing: border-box;
}
.gogox-hero-section--band .gogox-hero-band-inner {
  max-width: 860px;
  margin: 0 auto;
  padding: 56px 24px;
  display: flex;
  align-items: center;
  gap: 40px;
  box-sizing: border-box;
  /* Fixed band height (padding + illustration height) so a title-only band is
     exactly as tall as one with the side illustration. The image is capped to
     the same height below, keeping the band height stable across pages. */
  min-height: 297px;
}
.gogox-hero-section--band .gogox-hero-band-text {
  flex: 1 1 auto;
  min-width: 0;
}
.gogox-hero-section--band .gogox-hero-title {
  color: #fff;
  font-family: proxima-nova, sans-serif;
  /* H3 scale (theme: H1 hero 56 / H2 section 32 / H3 28). !important to beat
     the theme's mobile `.gogox-hero-title { font-size:40px !important }`. */
  font-size: 28px !important;
  font-weight: 400;
  line-height: 1.4;
  margin: 0;
}
/* Band is a flat colour banner — suppress the photo-hero's mobile dark
   bottom-gradient (.gogox-hero-section::after) which would muddy the colour. */
.gogox-hero-section--band::after { content: none !important; display: none !important; }
/* --band-title-h1 modifier: render the band title at hero H1 scale (56px)
   instead of the default 28px. Used for masthead bands where the title is
   the page's main heading (e.g. /bad-weather/). */
.gogox-hero-section--band-title-h1 .gogox-hero-title {
  font-size: 56px !important;
  line-height: 1.1 !important;
}
@media (max-width: 768px) {
  /* Stack both modifier classes on the same element to win over the later
     `.gogox-hero-section--band .gogox-hero-title { font-size: 20px }` mobile
     rule (which has equal-specificity 2-class selectors but would otherwise
     win on source order). 40px matches the theme's mobile hero H1 baseline. */
  .gogox-hero-section--band.gogox-hero-section--band-title-h1 .gogox-hero-title {
    font-size: 40px !important;
  }
}
/* --band-align-center modifier: centre the title within the band's
   max-width container. Default (no modifier) stays left-aligned, matching
   the legal-page bands. */
.gogox-hero-section--band-align-center .gogox-hero-band-inner {
  justify-content: center;
}
.gogox-hero-section--band-align-center .gogox-hero-band-text {
  text-align: center;
}
.gogox-hero-section--band .gogox-hero-band-media {
  flex: 0 0 45%;
}
.gogox-hero-section--band .gogox-hero-band-img {
  max-width: 100%;
  max-height: 185px;
  height: auto;
  display: block;
  margin-left: auto;
}
@media (max-width: 768px) {
  .gogox-hero-section--band .gogox-hero-band-inner {
    /* 56px top so the title + side image clear the transparent site header
       (which overlays the band on mobile). min-height bumped to match
       (56 top + 94 image + 28 bottom) so a title-only band stays equal height. */
    padding: 56px 20px 28px;
    gap: 24px;
    min-height: 178px;
  }
  .gogox-hero-section--band .gogox-hero-title { font-size: 20px !important; }
  .gogox-hero-section--band .gogox-hero-band-media { flex-basis: 35%; }
  .gogox-hero-section--band .gogox-hero-band-img { max-height: 94px; }
}

/* Configurable left tint — sits between the bg image (z-index: 0) and the
   content box (z-index: 5). Both the color and the width-of-tint come from
   inline custom properties on the element (--gogox-hero-overlay-color,
   --gogox-hero-overlay-width). Hidden at <=890px since mobile has its own
   bottom-gradient overlay applied via .gogox-hero-section::after. */
/* Background-video pause / play control (Tesla-style): translucent rounded square
   in the hero's bottom-right. Rendered by gogox_hero whenever bg_video is set, so
   every video hero gets it. `.is-paused` on the button swaps the icon; the JS in
   footer.php drives it and also starts paused for prefers-reduced-motion users. */
.gogox-hero-video-toggle {
  position: absolute;
  right: 32px;
  bottom: 32px;
  z-index: 4;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 8px;
  background: rgba(0, 0, 0, 0.28);
  color: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}
.gogox-hero-video-toggle:hover { background: rgba(0, 0, 0, 0.5); border-color: #FFFFFF; }
.gogox-hero-video-toggle:active { transform: scale(0.94); }
.gogox-hero-video-toggle:focus-visible { outline: 2px solid #FFFFFF; outline-offset: 2px; }
.gogox-hero-video-toggle svg { width: 20px; height: 20px; display: block; }
/* Default state = playing, so the button offers "pause". */
.gogox-hero-video-toggle .gogox-hero-video-toggle__play { display: none; }
.gogox-hero-video-toggle.is-paused .gogox-hero-video-toggle__pause { display: none; }
.gogox-hero-video-toggle.is-paused .gogox-hero-video-toggle__play { display: block; }
@media (max-width: 890px) {
  .gogox-hero-video-toggle { right: 16px; bottom: 16px; width: 36px; height: 36px; }
  .gogox-hero-video-toggle svg { width: 18px; height: 18px; }
}

.gogox-hero-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(90deg,
    var(--gogox-hero-overlay-color, rgba(0, 0, 0, 0.5)) 0%,
    var(--gogox-hero-overlay-color, rgba(0, 0, 0, 0.5)) 0%,
    transparent var(--gogox-hero-overlay-width, 40%));
}
@media (max-width: 1176px) {
  .gogox-hero-overlay { display: none; }
}

/* ----- HERO MOBILE VARIANT (≤890px) ----- */
/* Trunk: global mobile hero (≤1176px) — applies to non-home pages.
   Swap to portrait bg image, pin content to the bottom of the section, and
   add a dark gradient overlay so white text/CTA stay legible over photos. */
@media (max-width: 1176px) {
  .gogox-hero-section,
  .elementor .gogox-hero-section.e-con,
  .elementor .gogox-hero-section.e-flexbox-base {
    min-height: 600px !important;
  }
  .gogox-hero-section--compact  { min-height: 420px !important; }
  .gogox-hero-section--standard { min-height: 600px !important; }
  .gogox-hero-section--tall     { min-height: 720px !important; }
  /* Mobile-only height override — set via the `Hero Height (Mobile)` control
     on gogox_hero. Comes AFTER the per-desktop mobile fallbacks above so it
     wins on tied specificity (both single-class selectors, source order). */
  .gogox-hero-section--mobile-compact  { min-height: 420px !important; }
  .gogox-hero-section--mobile-standard { min-height: 600px !important; }
  .gogox-hero-section--mobile-tall     { min-height: 720px !important; }
  .gogox-hero-section {
    align-items: flex-end !important;
    padding-top: 96px !important;
    padding-bottom: 56px !important;
    padding-left: 24px !important;
    padding-right: 24px !important;
  }
  .gogox-hero-bg:not(.gogox-hero-bg--mobile):not(.gogox-hero-bg-video) {
    opacity: 0 !important;
    pointer-events: none !important;
  }
  /* Hero background video stays visible on mobile too (it's a .gogox-hero-bg
     but must not be hidden by the mobile image-swap rule above). */
  .gogox-hero-bg-video { opacity: 1 !important; }
  .gogox-hero-section:has(.gogox-hero-bg-video) .gogox-hero-bg--mobile {
    opacity: 0 !important;
  }
  .gogox-hero-section:not(:has(.gogox-hero-bg-video)) .gogox-hero-bg--mobile {
    opacity: 1 !important;
    pointer-events: auto !important;
  }
  .gogox-hero-section::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 35%, rgba(0, 0, 0, 0.65) 100%);
    z-index: 1;
    pointer-events: none;
  }
  .gogox-hero-box {
    max-width: 100%;
  }
  .gogox-hero-title {
    font-size: 40px !important;
  }
}

/* Image-only hero on mobile — HOMEPAGE ONLY. Hide the title / subtitle /
   "Learn more" button so the bg photo is the entire experience. Heights
   are -40% vs the previous text-bearing mobile hero so the funnel cards
   reach higher up the viewport.
   Per PR #3 review (Amon, IMPORTANT 2): all rules below are scoped with
   `.home` so HK/SG service pages keep their hero text + CTA on mobile.
   To restore text on the homepage mobile, remove the
   `.home .gogox-hero-box { display: none }` rule below. */
@media (max-width: 890px) {
  .home .gogox-hero-section,
  .home .elementor .gogox-hero-section.e-con,
  .home .elementor .gogox-hero-section.e-flexbox-base {
    min-height: 144px !important;
  }
  .home .gogox-hero-section--compact  { min-height: 108px !important; }
  .home .gogox-hero-section--standard { min-height: 144px !important; }
  .home .gogox-hero-section--tall     { min-height: 192px !important; }
  .home .gogox-hero-section {
    align-items: flex-end !important;
    padding-top: 24px !important;
    padding-bottom: 12px !important;
    padding-left: 24px !important;
    padding-right: 24px !important;
  }
  /* Hide all text/button content on mobile — image-only hero (homepage only). */
  .home .gogox-hero-box { display: none !important; }
  /* Swap visibility — opacity-based instead of display:none so both atomic
     e-image elements stay in the editor's container tree. */
  .home .gogox-hero-bg:not(.gogox-hero-bg--mobile) {
    opacity: 0 !important;
    pointer-events: none !important;
  }
  .home .gogox-hero-bg--mobile {
    opacity: 1 !important;
    pointer-events: auto !important;
  }
  /* Dark gradient overlay — transparent at top, ~65% black at bottom */
  .home .gogox-hero-section::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 35%, rgba(0, 0, 0, 0.65) 100%);
    z-index: 1;
    pointer-events: none;
  }
  .home .gogox-hero-box {
    max-width: 100%;
  }
  .home .gogox-hero-title {
    font-size: 40px !important;
  }
}
.gogox-hero-title {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 56px !important;
  font-weight: 700 !important;
  line-height: 1.1 !important;
  text-shadow: 0 0 8px rgba(0, 80, 128, 0.35);
  margin: 0 !important;
}
.gogox-hero-text {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 17px !important;
  line-height: 1.5 !important;
  margin: 0 0 8px !important;
}
/* About hero (#237 EN / #138 TC): match the VAS/PV heroes — white text with NO
   text-shadow; the left gradient overlay carries the readability instead.
   On mobile the description is dropped — only the 關於我們 / About Us title shows. */
/* About pages: 237 HK-EN, 138 HK-TC, 15 SG, 22 IN, 253 KR. */
body.elementor-page-237 .gogox-hero-title, body.elementor-page-237 .gogox-hero-text,
body.elementor-page-138 .gogox-hero-title, body.elementor-page-138 .gogox-hero-text,
body.elementor-page-15 .gogox-hero-title,  body.elementor-page-15 .gogox-hero-text,
body.elementor-page-22 .gogox-hero-title,  body.elementor-page-22 .gogox-hero-text,
body.elementor-page-253.gogox-region-kr .gogox-hero-title,
body.elementor-page-253.gogox-region-kr .gogox-hero-text {
  text-shadow: none !important;
}
@media (max-width: 768px) {
  body.elementor-page-237 .gogox-hero-text, body.elementor-page-138 .gogox-hero-text,
  body.elementor-page-15 .gogox-hero-text,  body.elementor-page-22 .gogox-hero-text,
  body.elementor-page-253.gogox-region-kr .gogox-hero-text { display: none !important; }
  /* Shorter mobile banner (was 420px) — closer to the compact banner it used to
     be, now that only the title sits over it. */
  body.elementor-page-237 .gogox-hero-section--compact, body.elementor-page-138 .gogox-hero-section--compact,
  body.elementor-page-15 .gogox-hero-section--compact,  body.elementor-page-22 .gogox-hero-section--compact,
  body.elementor-page-253.gogox-region-kr .gogox-hero-section--compact { min-height: 300px !important; }
}
/* XL size variant — enlarged title/subtitle for homepage heroes.
   Activated by setting "Size Variant: Extra Large" on the gogox_hero
   widget; renders <section class="gogox-hero-section--xl">.
   Hero CTAs use the standard .gogox-btn-primary preset size (16px /
   16x40) — per-hero CTA size overrides were removed when buttons were
   standardised (Austin), so the --xl variant only scales title +
   subtitle. */
.gogox-hero-section--xl .gogox-hero-title { font-size: 81px !important; }
.gogox-hero-section--xl .gogox-hero-text  { font-size: 30px !important; }
/* VAS heroes (pet / travel / premium-van): homepage XL layout but title +
   description 10% smaller. Scoped by the gogox-hero-vas wrapper class. */
.gogox-hero-vas .gogox-hero-section--xl .gogox-hero-title { font-size: 73px !important; }
.gogox-hero-vas .gogox-hero-section--xl .gogox-hero-text  { font-size: 27px !important; }
/* Pet hero desktop — English (HK-EN) copy is longer, so scale it down 10%. TC keeps 73/27. */
@media (min-width: 701px) {
  .gogox-region-hken .gogox-hero-vas .gogox-hero-section--xl .gogox-hero-title { font-size: 66px !important; }
  .gogox-region-hken .gogox-hero-vas .gogox-hero-section--xl .gogox-hero-text  { font-size: 24px !important; }
}
/* Single post "GoGoVan 司機的一天" (TC #207) — hide the featured-image hero
   banner in the article (the content opens with the same video). The card
   thumbnail on the blog listing is unaffected. */
body.gogox-region-hktc.postid-207 .elementor-element-blgsbg {
  display: none !important;
}
/* VAS hero title colour — brand yellow. */
.gogox-hero-vas .gogox-hero-title { color: #FFDD00 !important; }
/* VAS hero leading — tighten the gap between copy lines (Russ: "leading =
   gaps between the copy lines"), both title (2-line) and subtitle (3-line),
   desktop + mobile. */
.gogox-hero-vas .gogox-hero-title { line-height: 1.0 !important; }
.gogox-hero-vas .gogox-hero-text  { line-height: 1.3 !important; }
/* VAS hero on phones: smaller heading + subtitle so more of the banner
   photo (the dog) shows, and nudge the mobile crop rightwards. */
@media (max-width: 700px) {
  /* Pet hero mobile — enlarged text (both languages). */
  .gogox-hero-vas .gogox-hero-section--xl .gogox-hero-title { font-size: 44px !important; }
  .gogox-hero-vas .gogox-hero-section--xl .gogox-hero-text  { font-size: 18px !important; }
  .gogox-hero-vas .gogox-hero-bg,
  .gogox-hero-vas .gogox-hero-bg--mobile { object-position: 72% center !important; }
}
/* Moving-page hero (wrapper class `gogox-hero-moving`): keeps the homepage
   XL layout (70% overlay, fade-in) but with the standard service-page font
   sizes — desktop 56px/17px, mobile 40px/17px. */
.gogox-hero-moving .gogox-hero-section--xl .gogox-hero-title { font-size: 56px !important; }
.gogox-hero-moving .gogox-hero-section--xl .gogox-hero-text  { font-size: 18px !important; max-width: 400px !important; }
@media (max-width: 890px) {
  .gogox-hero-moving .gogox-hero-section--xl .gogox-hero-title { font-size: 40px !important; }
  .gogox-hero-moving .gogox-hero-section--xl .gogox-hero-text  { font-size: 17px !important; }
}

/* Hero headline IMAGE (replaces the text title when set in the widget).
   Height-locked to match the previous text title (~81px); width auto so
   the graphic keeps its aspect ratio. !important to beat Elementor's
   default image sizing. */
.gogox-hero-headline-img {
    display: block;
    height: 90px !important;
    width: auto !important;
    max-width: 100% !important;
    margin: 0 0 18px;
}
@media (max-width: 900px) {
    .gogox-hero-headline-img { height: 56px !important; margin-bottom: 14px; }
}

/* ----- HERO CAROUSEL (promo slides) ----- */
/* Active only when the hero has >=2 slides (main banner + promo slides). Each
   slide is a full-width gogox-hero-section; JS slides the track + autoplays. */
.gogox-hero-carousel { position: relative; overflow: hidden; }
.gogox-hero-track { display: flex; transition: transform 0.6s ease; }
.gogox-hero-track > .gogox-hero-slide { flex: 0 0 100%; min-width: 100%; }
.gogox-hero-dots {
  position: absolute; left: 0; right: 0; bottom: 20px;
  display: flex; justify-content: center; gap: 10px; z-index: 6;
}
.gogox-hero-dot {
  width: 10px; height: 10px; padding: 0; border: 0; border-radius: 50%;
  background: rgba(255, 255, 255, 0.55); cursor: pointer;
  transition: background-color 0.2s ease, transform 0.2s ease;
}
.gogox-hero-dot:hover { background: rgba(255, 255, 255, 0.8); }
.gogox-hero-dot.is-active { background: #ffffff; transform: scale(1.25); }
@media (max-width: 900px) { .gogox-hero-dots { bottom: 12px; } }

/* ----- PRIMARY BUTTON (hero + CTA) ----- */
.gogox-btn-primary {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: #0088BF !important;
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 700 !important;
  font-size: 16px !important;
  padding: 16px 40px !important;
  border: 2px solid #0088BF !important;
  border-radius: 40px !important;
  text-decoration: none !important;
  transition: all 0.2s ease;
  cursor: pointer;
}
.gogox-btn-primary:hover {
  background: #006E9B !important;
  border-color: #006E9B !important;
}

/* CTA Band button-color variants — picker on the widget. White inverts to
   filled-blue on hover; yellow stays yellow-with-blue-text, swaps to white
   bg on hover (matches the .gogox-kr-flex-cta-btn pattern). */
.gogox-btn-primary--white {
  background: #FFFFFF !important;
  color: #0088BF !important;
  border-color: #FFFFFF !important;
}
.gogox-btn-primary--white:hover {
  background: #0088BF !important;
  color: #FFFFFF !important;
  border-color: #0088BF !important;
}
.gogox-btn-primary--yellow {
  background: #FFDD00 !important;
  color: #0088BF !important;
  border-color: #FFDD00 !important;
}
.gogox-btn-primary--yellow:hover {
  background: #FFFFFF !important;
  color: #0088BF !important;
  border-color: #FFFFFF !important;
}

/* KR /앱-스마트폰-애플리케이션/ hero — center-align text/image/CTA below 807px.
   Above 807px keeps the 2-column flex layout (text-left / image-right). */
@media (max-width: 807px) {
  .gogox-kr-dl-hero-text { text-align: center !important; }
  .gogox-kr-dl-hero-text img { margin-left: auto !important; margin-right: auto !important; }
  .gogox-kr-dl-hero-text a { display: inline-block !important; }
}

/* Outline variant — same shape as primary, transparent fill + brand-blue
   text/border, inverts to filled on hover. Used for secondary CTAs where
   the primary action is somewhere else on the page (e.g. modal triggers,
   the "Get Quote" button below the pricing cards on /gogovan/). */
.gogox-btn-outline {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: transparent !important;
  color: #0088BF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 700 !important;
  font-size: 16px !important;
  padding: 16px 40px !important;
  border: 2px solid #0088BF !important;
  border-radius: 40px !important;
  text-decoration: none !important;
  transition: all 0.2s ease;
  cursor: pointer;
}
.gogox-btn-outline:hover {
  background: #0088BF !important;
  color: #FFFFFF !important;
}

/* Yellow button variant — used on Hero (and elsewhere) when a brighter
   on-photo CTA is wanted. Yellow bg + dark text + same shape as primary. */
.gogox-btn-yellow {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: #FFD23F !important;
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 700 !important;
  font-size: 16px !important;
  padding: 16px 40px !important;
  border: 2px solid #FFD23F !important;
  border-radius: 40px !important;
  text-decoration: none !important;
  transition: all 0.2s ease;
  cursor: pointer;
}
.gogox-btn-yellow:hover {
  background: #F5C400 !important;
  border-color: #F5C400 !important;
  color: #00121A !important;
}

/* ----- CTA BAND ----- */
.gogox-cta-band {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  padding: 72px 24px !important;
  text-align: center;
  gap: 12px;
}
.gogox-cta-title {
  color: var(--cta-text, #00121A) !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 32px !important;
  font-weight: 400 !important;
  line-height: 1.25 !important;
  margin: 0 !important;
}
.gogox-cta-text {
  color: var(--cta-text, #7a7a7a) !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 16px !important;
  margin: 0 0 12px !important;
}
.gogox-cta-badges {
    display: flex;
    gap: 16px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 8px;
}
.gogox-cta-badge-img {
    height: 44px;
    width: auto;
    display: block;
}

/* ----- PROMO BANNER ----- */
.gogox-promo-banner {
  display: flex !important;
  flex-direction: row !important;
  align-items: stretch !important;
  min-height: 84px;
  max-height: 84px;
  overflow: hidden;
  background: #0088BF !important;
}
.gogox-promo-rail {
  flex: 0 0 10%;
  background: #0088BF;
}
.gogox-promo-image {
  flex: 0 0 80%;
  display: flex !important;
  align-items: center;
  overflow: hidden;
}
.gogox-promo-image img,
.gogox-promo-img {
  width: 100% !important;
  height: 84px !important;
  object-fit: cover !important;
}
/* Blog category archive: make the "A member of GoGoX Holdings Limited" member
   bar full-bleed (edge-to-edge) like the homepage. The archive template section
   is boxed to 1140px, so break the promo banner widget out to the full viewport. */
[data-elementor-type="archive"] .elementor-element-arcsec2 > .elementor-container {
  max-width: none !important;
}
[data-elementor-type="archive"] .elementor-element-arcsec2 .elementor-widget-wrap {
  padding: 0 !important;
}

/* ----- HEADING BAND ----- */
.gogox-heading-band {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  padding: 72px 24px !important;
  text-align: center;
  gap: 8px;
}
.gogox-heading-band-title {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 32px !important;
  font-weight: 400 !important;
  line-height: 1.25 !important;
  margin: 0 !important;
}
.gogox-heading-band-text {
  color: #7a7a7a !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 16px !important;
  margin: 0 !important;
  max-width: 720px;
}

/* ----- CATEGORY GRID ----- */
.gogox-category-grid {
  display: grid !important;
  grid-template-columns: repeat(6, 1fr) !important;
  gap: 24px !important;
  padding: 0 max(24px, calc((100% - 1200px) / 2)) 72px !important;
  background: #F3F7F8 !important;
}
.gogox-category {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  text-align: center;
  gap: 16px;
}
.gogox-category-icon {
  width: 96px !important;
  max-width: 96px !important;
  height: auto !important;
  margin: 0 auto !important;
}
.gogox-category-label {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 14px !important;
  margin: 0 !important;
}

@media (max-width: 900px) {
  .gogox-category-grid {
    grid-template-columns: repeat(3, 1fr) !important;
  }
}

/* ----- VALUE PROPS SPLIT — matches /delivery/ s02vps exactly ----- */
.gogox-value-props-split {
  display: flex !important;
  flex-direction: row !important;
  align-items: stretch !important;
  gap: 0 !important;
  min-height: 560px !important;
  padding: 0 !important;
  background: #fff !important;
}
.gogox-vps-image {
  flex: 0 0 50% !important;
  width: 50% !important;
  padding: 0 !important;
  overflow: hidden !important;
  display: flex !important;
  align-items: stretch !important;
  justify-content: center !important;
}
.gogox-vps-illustration,
.gogox-vps-illustration img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: center center !important;
  max-width: none !important;
  display: block !important;
}
.gogox-vps-content {
  flex: 0 0 50% !important;
  width: 50% !important;
  padding: 140px 148px 140px 80px !important;
  display: flex !important;
  flex-direction: column !important;
  justify-content: center !important;
  align-items: flex-start !important;
  gap: 0 !important;
}
.gogox-vps-heading,
.gogox-vps-heading * {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 32px !important;
  font-weight: 400 !important;
  line-height: 40px !important;
  margin: 0 0 32px !important;
}
.gogox-vps-feature-title,
.gogox-vps-feature-title * {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 18px !important;
  font-weight: 700 !important;
  line-height: 1.3 !important;
  margin: 0 0 4px !important;
}
.gogox-vps-feature-desc,
.gogox-vps-feature-desc * {
  color: #7a7a7a !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 15px !important;
  line-height: 1.5 !important;
  margin: 0 0 20px !important;
}
.gogox-vps-content > :last-child { margin-bottom: 0 !important; }

@media (max-width: 900px) {
  .gogox-value-props-split {
    flex-direction: column !important;
    min-height: 0 !important;
  }
  .gogox-vps-image {
    flex: 0 0 auto !important;
    width: 100% !important;
    height: 320px !important;
  }
  .gogox-vps-content {
    flex: 0 0 auto !important;
    width: 100% !important;
    padding: 48px 24px !important;
  }
}

/* "Your reliable logistics partner" — 2×2 stats grid on dark navy bg.
   Typography aligns with the rest of the homepage (Our vehicles / funnel /
   ITG sections): proxima-nova weight-400 section heading at 32px (mobile 28px),
   yellow weight-900 card metric at 24px (matching funnel card titles),
   white weight-400 description at 18px (matching vehicle spec rows).
   Scoped to .home .elementor-element-hmrlp1 only, so /driver/ "Join GoGoX"
   value_props_stack keeps its default rendering. */
.home .elementor-element-hmrlp1 .gogox-vstack {
  background: linear-gradient(180deg, #0B2A4A 0%, #163553 100%) !important;
}
.home .elementor-element-hmrlp1 .gogox-vstack--text-only {
  padding: 72px 24px !important;
}
.home .elementor-element-hmrlp1 .gogox-vstack-inner {
  padding: 0 !important;
}
.home .elementor-element-hmrlp1 .gogox-vstack-content {
  align-items: center;
}
.home .elementor-element-hmrlp1 .gogox-vstack-heading {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 32px !important;
  line-height: 40px !important;
  font-weight: 400 !important;
  text-align: center !important;
  margin: 0 0 48px !important;
  max-width: 480px;
}
.home .elementor-element-hmrlp1 .gogox-vstack-items {
  display: grid !important;
  grid-template-columns: 1fr 1fr !important;
  gap: 48px 24px !important;
  max-width: 720px;
  width: 100%;
  position: relative;
}
/* Thin divider line between row 1 and row 2. */
.home .elementor-element-hmrlp1 .gogox-vstack-items::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 1px;
  background: rgba(255, 255, 255, 0.12);
  transform: translateY(-50%);
  pointer-events: none;
}
.home .elementor-element-hmrlp1 .gogox-vstack-item {
  text-align: center;
  padding: 12px 8px;
}
.home .elementor-element-hmrlp1 .gogox-vstack-item-title {
  color: #FFDD00 !important; /* yellow */
  font-family: "Silkscreen", "proxima-nova", monospace !important; /* pixel/retro accent */
  font-size: 24px !important;  /* matches funnel/vehicles card titles */
  line-height: 32px !important;
  font-weight: 400 !important;
  letter-spacing: 0.5px;
  margin: 0 0 12px !important;
}
.home .elementor-element-hmrlp1 .gogox-vstack-item-desc {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 18px !important;
  line-height: 28px !important;
  font-weight: 400 !important;
  margin: 0 !important;
  max-width: 260px;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* Inline yellow accent inside description (e.g. "40,000 register driver-partner"
   in the EFFICIENT card). Applies to both viewports. */
.home .elementor-element-hmrlp1 .gogox-vstack-item-desc .gogox-hl {
  color: #FFDD00;
}
.gogox-vstack-item-desc:empty { display: none; }

/* Desktop only — "Your reliable logistics partner" full-width hero
   variant: cityscape background image (Homepage_Optimisation_Strength_BG)
   with a row of 4 stat columns ("INSTANT | HUMAN-FIRST | EFFICIENT |
   ALL-IN-ONE") separated by thin vertical dividers. Mobile keeps the
   existing centered 2×2 grid (no overrides applied below 901px).
   Implemented as desktop-only overrides on hmrlp1 — illustration column
   is hidden and the vstack-content stretches full-width. */
@media (min-width: 901px) {
  .home .elementor-element-hmrlp1 .gogox-vstack {
    /* v0.4.40 — content pinned to TOP, BG image positioned so the
       vehicles + foreground floor sit BELOW the content (matches
       reference image). background-position: center bottom anchors the
       cityscape/vehicles to the section bottom; min-height ensures
       there's room for them to be visible underneath the stat row.
       The sky/top portion of the BG image is naturally cropped out by
       `cover` once the section aspect ratio is wider than the image. */
    background: linear-gradient(rgba(2, 18, 42, 0.55), rgba(2, 18, 42, 0.55)),
                url("/wp-content/themes/gogox/assets/homepage/Homepage_Optimisation_Strength_BG.png") center bottom / cover no-repeat,
                linear-gradient(180deg, #0B2A4A 0%, #163553 100%) !important;
    padding: 32px 24px 0 !important;       /* top pad for heading; no bottom — BG fills */
    min-height: 429px !important;          /* v0.4.44: +10% from 390 */
  }
  /* Hide the illustration column entirely — the background image
     replaces the small left-illustration treatment used previously. */
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-image {
    display: none !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-inner {
    flex-direction: column !important;
    gap: 0 !important;
    padding: 0 !important;
    max-width: 1224px;
    margin: 0 auto;
    align-items: center !important;
    /* Base widget min-height is 560px which was driving section
       height. v0.4.44: 462 (+10% from v0.4.43's 420). */
    min-height: 462px !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-content {
    flex: 1 1 auto !important;
    width: 100%;
    align-items: center !important;
    padding: 0 !important;
    /* Base widget rule centers content vertically inside the 560px-tall
       inner — override so heading + stat row stick to the TOP. */
    justify-content: flex-start !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-heading {
    text-align: center !important;
    margin: 0 0 28px !important; /* gap to the 4 stat columns */
    max-width: none;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item-title {
    margin: 0 0 3px !important; /* v0.4.39 −50% from 5 (rounded) */
  }
  /* 4 stat columns in a single horizontal row with thin vertical
     dividers between them. */
  .home .elementor-element-hmrlp1 .gogox-vstack-items::before { display: none !important; }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-items {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr) !important;
    gap: 0 !important;
    width: 100%;
    max-width: 1100px;
    margin: 0 auto;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item {
    text-align: center !important;
    padding: 0 24px !important;
    width: 100%;
    border-left: 1px solid rgba(255, 255, 255, 0.25);
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item:first-child {
    border-left: none;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item-title {
    margin: 0 0 12px !important;
    text-align: center !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item-desc {
    max-width: none !important;
    margin-left: auto !important;
    margin-right: auto !important;
    text-align: center !important;
    max-width: 220px !important;
  }
}

/* Legacy desktop-only block — kept commented for reference. Was the
   "Lalamove-style image + feature list" layout (illustration left, 4
   stats stacked vertical right) before the v0.4.35 redesign. */
@media (min-width: 99999px) { /* effectively disabled */
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-inner {
    align-items: stretch !important;
    gap: 129px !important; /* +40% from 92px → content further right */
    padding: 72px 40px !important;
    max-width: 1224px;
    margin: 0 auto;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-image {
    flex: 0 0 460px !important;
    width: 460px !important;
    align-self: center;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-illustration {
    width: 100% !important;
    aspect-ratio: 1 / 1 !important;
    height: auto !important;
    object-fit: cover !important;
    border-radius: 8px;
    display: block;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-content {
    flex: 1 1 0 !important;
    align-items: flex-start !important;
    padding: 0 !important;
    justify-content: center;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-heading {
    text-align: left !important;
    margin: 0 0 32px !important;
    max-width: none;
  }
  /* Vertical stack of 4 stats (no grid, no center-divider). */
  .home .elementor-element-hmrlp1 .gogox-vstack-items::before { display: none !important; }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-items {
    display: flex !important;
    flex-direction: column !important;
    grid-template-columns: none !important;
    gap: 28px !important;
    width: 100%;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item {
    text-align: left !important;
    padding: 0 !important;
    width: 100%;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item-title {
    margin: 0 0 6px !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-item-desc {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
}

/* Mobile — hide the illustration column entirely so the section keeps its
   current text-only / 2×2 stat-grid look. Override the widget's default
   --with-illustration mobile behavior (which stacks image on top at 320px). */
@media (max-width: 900px) {
  .home .elementor-element-hmrlp1 .gogox-vstack-image { display: none !important; }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-inner {
    flex-direction: column !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration .gogox-vstack-content {
    flex: 1 1 auto !important;
    width: 100% !important;
    align-items: center !important;
  }
}

/* Mobile size + spacing overrides (Silkscreen font-family and yellow .gogox-hl
   color now live in the default rules above and apply to both viewports). */
@media (max-width: 600px) {
  .home .elementor-element-hmrlp1 .gogox-vstack,
  .home .elementor-element-hmrlp1 .gogox-vstack--text-only,
  .home .elementor-element-hmrlp1 .gogox-vstack--with-illustration {
    padding: 0px 20px !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack-heading {
    font-size: 28px !important;
    line-height: 36px !important;
    margin-bottom: 32px !important;
    text-align: center !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack-items {
    gap: 32px 16px !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack-item {
    padding: 8px 4px;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack-item-title {
    font-size: 22px !important;
    line-height: 28px !important;
    margin-bottom: 8px !important;
  }
  .home .elementor-element-hmrlp1 .gogox-vstack-item-desc {
    font-size: 14px !important;
    line-height: 20px !important;
  }
}

/* ----- SERVICE TIERS — matches /delivery/ s07tir exactly ----- */
.gogox-service-tiers {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: stretch !important;
  justify-content: center !important;
  gap: 40px !important;
  padding: 0 24px 72px !important;
  max-width: 1200px !important;
  margin: 0 auto !important;
  background: transparent !important;
}
.gogox-tier-card {
  flex: 0 1 calc(33.33% - 28px) !important;
  min-width: 260px !important;
  min-height: 370px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: flex-start !important;
  text-align: center;
  gap: 0 !important;
  padding: 40px !important;
  background: transparent !important;
  border: 2px solid #E3E7EC !important;
  border-radius: 4px !important;
}
.gogox-tier-icon-wrap {
  width: 72px !important;
  height: 72px !important;
  border-radius: 50% !important;
  background: #EBEBEB !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin: 0 auto 24px !important;
  flex: 0 0 auto !important;
}
.gogox-tier-icon,
.gogox-tier-icon img {
  width: 45px !important;
  height: 45px !important;
  object-fit: contain !important;
  display: block !important;
}
.gogox-tier-name,
.gogox-tier-name * {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 24px !important;
  font-weight: 700 !important;
  line-height: 1.25 !important;
  margin: 0 0 16px !important;
  text-align: center !important;
}
.gogox-tier-desc,
.gogox-tier-desc * {
  color: #7a7a7a !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 15px !important;
  line-height: 1.5 !important;
  margin: 0 !important;
  text-align: center !important;
}

@media (max-width: 900px) {
  .gogox-service-tiers {
    flex-direction: column !important;
    gap: 24px !important;
    padding: 0 24px 48px !important;
  }
  .gogox-tier-card {
    flex: 0 0 auto !important;
    width: 100% !important;
    min-height: 0 !important;
  }
}

/* ----- VALUE PROPS STACK (custom gogox_value_props_stack widget) -------- */
/* Uses `gogox-vstack-*` prefix — distinct from `gogox-vps-*` which belongs
   to the atomic Value Props Split component, so the two never collide.    */
.elementor-widget-gogox_value_props_stack {
  width: 100%;
}
/* Text-only mode: centered single-column stack with outer vertical padding;
   bg color (if set) fills full width; inner div centers content */
.gogox-vstack--text-only {
  width: 100%;
  padding: 72px 0;
  text-align: center;
}
.gogox-vstack--text-only .gogox-vstack-inner {
  max-width: 720px;
  margin: 0 auto;
  padding: 0 24px;
}
.gogox-vstack--text-only .gogox-vstack-content {
  display: flex;
  flex-direction: column;
}

/* With-illustration mode: 50/50 split, image fills column edge-to-edge.
   The flex layout lives on the inner div so the outer can carry a bg color
   that fills the full viewport width. */
.gogox-vstack--with-illustration {
  width: 100%;
  padding: 0;
}
.gogox-vstack--with-illustration .gogox-vstack-inner {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0;
  min-height: 560px;
}
.gogox-vstack--with-illustration.gogox-vstack--image-right .gogox-vstack-inner {
  flex-direction: row-reverse;
}
/* image-right: content is on the left — give it more left breathing room to
   match the production page layout where the text column has ~148px left margin. */
.gogox-vstack--with-illustration.gogox-vstack--image-right .gogox-vstack-content {
  padding-left: 120px;
  padding-right: 64px;
}
.gogox-vstack--with-illustration .gogox-vstack-image {
  flex: 0 0 50%;
  width: 50%;
  padding: 0;
  overflow: hidden;
  display: flex;
  align-items: stretch;
}
.gogox-vstack--with-illustration .gogox-vstack-illustration {
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
  object-position: center;
  display: block;
}
.gogox-vstack-cta {
  margin: 24px 0 0;
}
.gogox-vstack-cta a {
  color: #0088BF;
  font-weight: 700;
  text-decoration: underline;
}
/* SG value-props illustrations are phone/app mockups (not edge-to-edge photos).
   Prod shows them contained on a light panel; the default 50%-column `cover`
   zooms/crops them huge. Contain them + light panel to match prod sizing.
   Scoped per SG instance so photo-based stacks keep the cover treatment. */
.elementor-element-sgsvcwhy1 .gogox-vstack-image {
  background: #F3F7F8;
  align-items: center;
  justify-content: center;
  padding: 32px;
}
.elementor-element-sgsvcwhy1 .gogox-vstack-illustration {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
/* SG /service/ "How it works?" phone screenshots — contain (not cover-zoom) so
   the whole device shows on its grey panel, matching prod. */
.elementor-element-sgsvchow1 .gogox-process-steps-img {
  background-size: contain !important;
}
/* SG /api/ workflow infographic — contain the circular diagram on its blue panel
   (default cover cropped the "Deliver order"/"Web System" edges). */
.elementor-element-sgapiwf1 .gogox-vstack-image {
  align-items: center;
  justify-content: center;
  padding: 40px;
}
.elementor-element-sgapiwf1 .gogox-vstack-illustration {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
/* Premium Van hero — white title + subtitle, no text-shadow (the default vas
   hero is yellow title + glow shadow; on the pale studio banner white reads
   cleaner). Scoped to the PV pages (page-id 221 EN / 25 TC) since pet/pv/travel
   all share the vashero1 widget id.

   The :not() matters. `body.page-id-221 .gogox-hero-title` is (0,2,1), which
   outranks the widget's own text_tone rule at (0,2,0), so this silently pinned
   the heading white and a white left overlay made it vanish entirely. Excluding
   the dark tone lets the control win when it is set, and leaves this rule in
   charge otherwise. */
body.page-id-221 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-221 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text,
body.page-id-25 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-25 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text,
/* Travel transport joins them: its hero photo is a bright airport terminal, and
   the default VAS yellow title (.gogox-hero-vas .gogox-hero-title) had almost no
   contrast against it. 322 EN / 27 TC. */
body.page-id-322 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-322 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text,
body.page-id-27 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-27 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text,
/* Pet transport too — same story as the other two: a bright photo behind the
   default VAS yellow title. 220 EN / 28 TC. */
body.page-id-220 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-220 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text,
body.page-id-28 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-title,
body.page-id-28 .gogox-hero-section:not(.gogox-hero-section--text-dark) .gogox-hero-text {
  color: #FFFFFF !important;
  text-shadow: none !important;
}
/* And raise the dark tone above any remaining page-scoped colour rule. */
body .gogox-hero-section--text-dark .gogox-hero-title,
body .gogox-hero-section--text-dark .gogox-hero-text {
  color: #0B1F33 !important;
  text-shadow: none !important;
}
.gogox-vstack-cta a:hover {
  text-decoration: none;
}
.gogox-vstack--with-illustration .gogox-vstack-content {
  flex: 0 0 50%;
  width: 50%;
  padding: 80px 64px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: left;
}

.gogox-vstack-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 12px;
}
.gogox-vstack-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 32px;
}
.gogox-vstack-items {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.gogox-vstack-item-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
  margin: 0 0 8px;
}
.gogox-vstack-item-desc {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.6;
  margin: 0;
}

/* Dark-background variant — set via _css_classes: 'gogox-vstack-dark' */
.gogox-vstack-dark .gogox-vstack-heading    { color: #fff; }
.gogox-vstack-dark .gogox-vstack-item-title { color: #fff; }
.gogox-vstack-dark .gogox-vstack-item-desc  { color: rgba(255,255,255,0.8); }

@media (max-width: 900px) {
  .gogox-vstack--text-only { padding: 48px 0; }
  .gogox-vstack--text-only .gogox-vstack-inner { padding: 0 24px; }
  .gogox-vstack--with-illustration .gogox-vstack-inner {
    flex-direction: column;
    min-height: 0;
  }
  /* On mobile, image-right still stacks image first then content
     (override row-reverse so users always see the image at the top) */
  .gogox-vstack--with-illustration.gogox-vstack--image-right .gogox-vstack-inner { flex-direction: column; }
  .gogox-vstack--with-illustration .gogox-vstack-image {
    flex: 0 0 auto;
    width: 100%;
    height: 320px;
  }
  .gogox-vstack--with-illustration .gogox-vstack-content {
    flex: 0 0 auto;
    width: 100%;
    padding: 48px 40px;
  }
}

/* ----- PRICING TIERS (custom gogox_pricing_tiers widget) --------------- */
.elementor-widget-gogox_pricing_tiers {
  width: 100%;
}
.gogox-pricing {
  width: 100%;
  padding: 72px 0;
}
.gogox-pricing-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.gogox-pricing-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 12px;
  text-align: center;
}
.gogox-pricing-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 40px;
  text-align: center;
}
.gogox-pricing-grid {
  display: grid;
  gap: 20px;
}
.gogox-pricing--cols-5 .gogox-pricing-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.gogox-pricing--cols-4 .gogox-pricing-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gogox-pricing--cols-3 .gogox-pricing-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gogox-pricing--cols-2 .gogox-pricing-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.gogox-pricing-card {
  background: #fff;
  border: 1.5px solid #E3E7EC;
  border-radius: 8px;
  padding: 28px 24px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.gogox-pricing-card:hover {
  border-color: #0088BF;
  box-shadow: 0 8px 24px rgba(0, 18, 26, 0.06);
}
.gogox-pricing-card-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
  margin: 0;
}
.gogox-pricing-card-desc,
.gogox-pricing-card-extra {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  line-height: 1.55;
  margin: 0;
}
.gogox-pricing-card-extra {
  color: #7a7a7a;
}
.gogox-pricing-card-foot {
  margin-top: auto;
  padding-top: 8px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.gogox-pricing-card-price {
  color: #0088BF;
  font-family: "proxima-nova", sans-serif;
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
}
.gogox-pricing-card-cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  align-self: flex-start;
  background: #0088BF;
  color: #fff !important;
  font-family: "proxima-nova", sans-serif;
  font-weight: 700;
  font-size: 14px;
  padding: 10px 20px;
  border-radius: 24px;
  text-decoration: none;
  transition: background 0.2s ease;
}
.gogox-pricing-card-cta:hover {
  background: #006E9B;
}
@media (max-width: 1100px) {
  .gogox-pricing--cols-5 .gogox-pricing-grid,
  .gogox-pricing--cols-4 .gogox-pricing-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .gogox-pricing--cols-3 .gogox-pricing-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .gogox-pricing { padding: 48px 0; }
  .gogox-pricing-inner { padding: 0 24px; }
  .gogox-pricing--cols-5 .gogox-pricing-grid,
  .gogox-pricing--cols-4 .gogox-pricing-grid,
  .gogox-pricing--cols-3 .gogox-pricing-grid,
  .gogox-pricing--cols-2 .gogox-pricing-grid {
    grid-template-columns: 1fr;
  }
}

/* ----- FAQ (custom gogox_faq widget) ----------------------------------- */
.elementor-widget-gogox_faq {
  width: 100%;
}
.gogox-faq {
  width: 100%;
  padding: 72px 0;
}
.gogox-faq-inner {
  max-width: 880px;
  margin: 0 auto;
  padding: 0 24px;
}
.gogox-faq-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 12px;
  text-align: center;
}
.gogox-faq-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 40px;
  text-align: center;
}
.gogox-faq-list {
  display: flex;
  flex-direction: column;
  gap: 20px;
}
/* Live design: light blue bg, no border, 30px padding, caret-right → caret-up icon */
.gogox-faq-item {
  background: #D6F3FF;
  border: 0;
  border-radius: 4px;
  overflow: hidden;
}
.gogox-faq-question {
  list-style: none;
  cursor: pointer;
  padding: 30px 30px 30px 30px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  color: #000;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.4;
}
.gogox-faq-question::-webkit-details-marker { display: none; }
.gogox-faq-question-text { flex: 1 1 auto; }
/* Caret icon — right when closed, rotates to point up when open */
.gogox-faq-icon {
  flex: 0 0 auto;
  width: 0;
  height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-left: 8px solid #000;
  transition: transform 0.2s ease;
  transform: rotate(0deg);
}
.gogox-faq-item[open] .gogox-faq-icon {
  /* Caret-up: rotate the right-pointing triangle 270deg (counter-clockwise to point up) */
  transform: rotate(-90deg);
}
.gogox-faq-answer {
  padding: 10px 30px 30px 30px;
  color: #000;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.6;
}

@media (max-width: 700px) {
  .gogox-faq { padding: 48px 0; }
  .gogox-faq-inner { padding: 0 24px; }
  .gogox-faq-list { gap: 12px; }
  .gogox-faq-question { padding: 20px 22px; font-size: 15px; }
  .gogox-faq-answer { padding: 8px 22px 20px; font-size: 14px; }
}

/* ----- TESTIMONIALS (custom gogox_testimonials widget) ----------------- */
.elementor-widget-gogox_testimonials {
  width: 100%;
}
.gogox-testimonials {
  width: 100%;
  padding: 72px 0;
}
.gogox-testimonials-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  text-align: center;
}
.gogox-testimonials-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 12px;
}
.gogox-testimonials-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 48px;
}
.gogox-testimonials-grid {
  display: grid;
  gap: 24px;
  align-items: start; /* each card sits its own content height, no stretch */
}
.gogox-testimonials--cols-4 .gogox-testimonials-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gogox-testimonials--cols-3 .gogox-testimonials-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gogox-testimonials--cols-2 .gogox-testimonials-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* Carousel mode — used when items > columns */
.gogox-testimonials-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}
.gogox-testimonials-viewport {
  flex: 1 1 auto;
  overflow: hidden;
}
.gogox-testimonials-track {
  display: flex;
  align-items: flex-start; /* cards keep their own height in carousel mode too */
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
.gogox-testimonials--cols-4 .gogox-testimonials-track .gogox-testimonial-card {
  flex: 0 0 calc((100% - 72px) / 4); /* 4 cards × 24px gap × 3 = 72px */
}
.gogox-testimonials--cols-3 .gogox-testimonials-track .gogox-testimonial-card {
  flex: 0 0 calc((100% - 48px) / 3);
}
.gogox-testimonials--cols-2 .gogox-testimonials-track .gogox-testimonial-card {
  flex: 0 0 calc((100% - 24px) / 2);
}
.gogox-testimonials-arrow {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #E3E7EC;
  background: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  line-height: 1;
  color: #0088BF;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  padding: 0;
}
.gogox-testimonials-arrow:hover {
  background: #0088BF;
  border-color: #0088BF;
  color: #fff;
}
.gogox-testimonials-arrow:disabled {
  opacity: 0.35;
  cursor: default;
  background: #fff;
  border-color: #E3E7EC;
  color: #0088BF;
}
.gogox-testimonials-dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 24px;
}
.gogox-testimonials-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  background: #D8DEE2;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.15s ease;
}
.gogox-testimonials-dot:hover { background: #0088BF; }
.gogox-testimonials-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}

@media (max-width: 1100px) {
  .gogox-testimonials--cols-4 .gogox-testimonials-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* Carousel collapses 4→2 on tablet */
  .gogox-testimonials--cols-4.gogox-testimonials--carousel .gogox-testimonials-track .gogox-testimonial-card {
    flex: 0 0 calc((100% - 24px) / 2);
  }
}
@media (max-width: 700px) {
  .gogox-testimonials { padding: 48px 0; }
  .gogox-testimonials-inner { padding: 0 24px; }
  .gogox-testimonials--cols-4 .gogox-testimonials-grid,
  .gogox-testimonials--cols-3 .gogox-testimonials-grid,
  .gogox-testimonials--cols-2 .gogox-testimonials-grid {
    grid-template-columns: 1fr;
  }
  .gogox-testimonials--carousel .gogox-testimonials-track .gogox-testimonial-card {
    flex: 0 0 100% !important;
  }
  .gogox-testimonials-arrow {
    width: 36px;
    height: 36px;
    font-size: 22px;
  }
}
/* Testimonial card — bubble above, then yellow avatar circle + stars + name below */
.gogox-testimonial-card {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  text-align: left;
  background: transparent;
  border: 0;
  padding: 0;
  gap: 16px;
}
/* Bubble is light-blue (matches FAQ); height = content; no flex grow */
.gogox-testimonial-bubble {
  position: relative;
  background: #D6F3FF;
  border: 0;
  border-radius: 12px;
  padding: 22px 22px;
  margin: 0 0 14px;
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.55;
  flex: 0 0 auto;
}
/* Speech-bubble tail pointing down-left toward the avatar */
.gogox-testimonial-bubble::after {
  content: "";
  position: absolute;
  bottom: -8px;
  left: 24px;
  width: 16px;
  height: 16px;
  background: #D6F3FF;
  transform: rotate(45deg);
}
.gogox-testimonial-meta {
  display: flex;
  align-items: center;
  gap: 14px;
}
.gogox-testimonial-avatar {
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: #FFD23F; /* GoGoX brand yellow */
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.gogox-testimonial-avatar-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.gogox-testimonial-avatar-initial {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 700;
  line-height: 1;
}
.gogox-testimonial-meta-text {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.gogox-testimonial-rating {
  color: #FFC107;
  font-size: 14px;
  letter-spacing: 2px;
  line-height: 1;
}
.gogox-testimonial-author-name {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  font-weight: 700;
  font-style: normal;
  line-height: 1.3;
}
@media (max-width: 1100px) {
  .gogox-testimonials--cols-4 .gogox-testimonials-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .gogox-testimonials { padding: 48px 0; }
  .gogox-testimonials-inner { padding: 0 24px; }
  .gogox-testimonials--cols-4 .gogox-testimonials-grid,
  .gogox-testimonials--cols-3 .gogox-testimonials-grid,
  .gogox-testimonials--cols-2 .gogox-testimonials-grid {
    grid-template-columns: 1fr;
  }
}

/* ----- ICON + TEXT GRID (custom gogox_icon_text_grid widget) ----------- */
.elementor-widget-gogox_icon_text_grid {
  width: 100%;
}
/* Outer wrapper takes full width + bg color via inline style;
   Inner wrapper centers content + caps width */
.gogox-itg {
  width: 100%;
  padding: 72px 0;
}
/* KR image-text grids sit tighter to the section above them */
.gogox-kr-itg .gogox-itg { padding-top: 32px; }
/* KR promotion grid is the first element (no hero) — clear the fixed header */
.gogox-kr-promo-top .gogox-itg { padding-top: 120px; }
.gogox-itg-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  text-align: center;
}
.gogox-itg-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 40px; /* default: heading sits 40px above the grid (no intro) */
}
/* When an intro paragraph follows, tighten the heading→intro pairing. */
.gogox-itg-heading:has(+ .gogox-itg-intro) {
  margin-bottom: 12px;
}
.gogox-itg-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 48px;
}
.gogox-itg-grid {
  display: grid;
  gap: 40px 32px;
}
.gogox-itg--cols-6 .gogox-itg-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.gogox-itg--cols-5 .gogox-itg-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.gogox-itg--cols-4 .gogox-itg-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gogox-itg--cols-3 .gogox-itg-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gogox-itg--cols-2 .gogox-itg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* .gogox-itg-item-content wraps title/desc/cta. Used by alternating mode to
   group text into a single block that vertically centers alongside the image;
   for grid/carousel modes it inherits the .gogox-itg-item flex layout so
   title/desc/cta still stack with the existing gap. */
.gogox-itg-item-content {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: inherit;
  text-align: inherit;
}

/* Alternating mode — full-width editorial rows. Image on one side, the
   text content block (.gogox-itg-item-content) on the other; odd rows are
   image-left, even rows are image-right. Used for /sg/about-us/ core-values
   section to match prod's zigzag layout. */
.gogox-itg-alternating {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-width: 1100px;
  margin: 0 auto;
  padding: 24px;
}
.gogox-itg.gogox-itg--alternating .gogox-itg-item {
  display: flex;
  flex-direction: row;
  align-items: center;
  text-align: left;
  gap: 60px;
  border-top: 1px solid #E3E7EC;
  padding: 56px 0;
}
.gogox-itg--alternating .gogox-itg-item:first-child {
  border-top: 0;
  padding-top: 0;
}
.gogox-itg--alternating .gogox-itg-item:last-child {
  padding-bottom: 0;
}
.gogox-itg--alternating .gogox-itg-icon-wrap {
  flex: 1 1 0;
  width: auto;
  margin: 0;
  background: transparent;
  height: auto;
  border-radius: 8px;
  overflow: hidden;
}
.gogox-itg--alternating .gogox-itg-icon-wrap::before { display: none; }
.gogox-itg--alternating .gogox-itg-icon {
  width: 100%;
  height: auto;
  max-height: none;
  object-fit: cover;
  border-radius: 8px;
  aspect-ratio: 3 / 2;
  display: block;
}
.gogox-itg.gogox-itg--alternating .gogox-itg-item-content {
  flex: 1 1 0;
  align-items: flex-start;
  text-align: left;
  gap: 16px;
}
.gogox-itg--alternating .gogox-itg-item-title {
  color: #0088BF;
  font-size: 28px;
  font-weight: 700;
  line-height: 1.2;
  margin: 0;
}
.gogox-itg--alternating .gogox-itg-item-desc {
  color: #2D3D4D;
  font-size: 16px;
  line-height: 1.6;
  margin: 0;
}
/* Even rows: image on the right via flex-direction reverse */
.gogox-itg--alternating .gogox-itg-item:nth-child(even) {
  flex-direction: row-reverse;
}
@media (max-width: 768px) {
  .gogox-itg.gogox-itg--alternating .gogox-itg-item,
  .gogox-itg.gogox-itg--alternating .gogox-itg-item:nth-child(even) {
    flex-direction: column;
    gap: 16px;
    padding: 32px 0;
  }
  .gogox-itg--alternating .gogox-itg-icon-wrap {
    flex: none;
    width: 100%;
  }
  .gogox-itg.gogox-itg--alternating .gogox-itg-item-content {
    flex: none;
    width: 100%;
  }
}
.gogox-itg-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 12px;
}
.gogox-itg-icon-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 0 8px;
}
.gogox-itg-icon {
  width: 96px;
  height: 96px;
  object-fit: contain;
  display: block;
}
/* Square layout — image fills card width as a 1:1 square */
.gogox-itg--imgs-square .gogox-itg-icon-wrap {
  width: 100%;
  margin: 0 0 16px;
}
.gogox-itg--imgs-square .gogox-itg-icon {
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: 8px;
}
/* Landscape layout — image fills card width as a ~16:9 landscape */
.gogox-itg--imgs-landscape .gogox-itg-icon-wrap {
  width: 100%;
  margin: 0 0 16px;
  border-radius: 8px;
  overflow: hidden;
  /* No fixed aspect-ratio — the container conforms to the image's natural
     ratio so the image fills edge-to-edge without crop OR letterbox. Cards
     in the same row may end up with different heights if their images have
     different aspect ratios; tune source images to consistent ratio if
     uniform card heights are needed. */
}
.gogox-itg--imgs-landscape .gogox-itg-icon {
  width: 100%;
  height: auto;
  object-fit: cover;
  border-radius: 0;
  display: block;
}
/* Moving page "Additional services" grid — larger rounded corners on the
   landscape service photos, matching the supplied brand images.
   vasuc1 = the VAS pages' equivalent alternating landscape-photo grid
   (Pet #220/#28, Premium Van #221/#25, Travel #322/#27) — same treatment. */
.elementor-element-mvsvc2 .gogox-itg-icon-wrap,
.elementor-element-hkmv_svc2 .gogox-itg-icon-wrap,
.elementor-element-vasuc1 .gogox-itg-icon-wrap {
  border-radius: 20px !important;
  overflow: hidden;
  aspect-ratio: auto !important;   /* size to the image — no fixed ratio */
}
/* Heading→first-image gap matches the pros grid above it. The alternating layout
   adds 24px container padding plus 32px on its first row, which pushed the gap
   to 96px where the pros section sits at 40px. Later rows keep their padding so
   the row rhythm is untouched. Applies to all six VAS pages (shared element id). */
.elementor-element-vasuc1 .gogox-itg-alternating,
.elementor-element-mvsvc2 .gogox-itg-alternating,
.elementor-element-hkmv_svc2 .gogox-itg-alternating { padding-top: 0 !important; }
.elementor-element-vasuc1 .gogox-itg-alternating > .gogox-itg-item:first-child,
.elementor-element-mvsvc2 .gogox-itg-alternating > .gogox-itg-item:first-child,
.elementor-element-hkmv_svc2 .gogox-itg-alternating > .gogox-itg-item:first-child { padding-top: 0 !important; }
/* Show the whole photo (no crop) + prominent rounded corners so the cards
   read as friendly cards, not blocky banners. */
.elementor-element-mvsvc2 .gogox-itg-icon,
.elementor-element-hkmv_svc2 .gogox-itg-icon,
.elementor-element-vasuc1 .gogox-itg-icon {
  border-radius: 20px !important;
  aspect-ratio: auto !important;
  height: auto !important;
  object-fit: contain !important;
}
/* Mobile swipe card — inset the image inside the bordered card (padding around
   image + text) so it reads exactly like the design: framed card, rounded photo
   with a margin, title/desc/ticks below. */
@media (max-width: 700px) {
  /* Specificity 0,5,0 — must beat the shared
     `.gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item`
     rule (0,4,0) that zeroes the top border and padding. */
  .elementor-element-mvsvc2 .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item,
  .elementor-element-hkmv_svc2 .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item {
    padding: 14px !important;
    overflow: visible !important;
    border-top: 1px solid #E3E7EC !important;
  }
  .elementor-element-mvsvc2 .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item-content,
  .elementor-element-hkmv_svc2 .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item-content {
    flex: 1 1 auto !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;   /* centre title+desc+ticks between image and lower border */
    padding: 14px 0 !important;
  }
}
/* Balance the cards: with equal-height cards (grid rows / mobile swipe), centre
   the text block vertically in the space below the image so all four read even. */
.elementor-element-mvsvc2 .gogox-itg-item-content,
.elementor-element-hkmv_svc2 .gogox-itg-item-content {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
/* SG home "Looking for other services?" (sghother1): source images have
   different natural ratios, so lock the image box to the HK card ratio
   (782x388 ≈ 2:1, cover-cropped) and pin the CTA to the card bottom —
   both cards render identical heights with aligned buttons. The 32px
   radius clips square-cornered images (Moving) to match the big rounded
   corners baked into the Energy artwork. */
.home .elementor-element-sghother1 .gogox-itg-icon-wrap {
  aspect-ratio: 782 / 388;
  border-radius: 32px;
  overflow: hidden;
}
.home .elementor-element-sghother1 .gogox-itg-icon {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.home .elementor-element-sghother1 .gogox-itg-item {
  height: 100%;
}
.home .elementor-element-sghother1 .gogox-itg-item-cta {
  margin-top: auto;
}
/* Square + landscape cards: align text left for a content-card feel */
.gogox-itg--imgs-square .gogox-itg-item,
.gogox-itg--imgs-landscape .gogox-itg-item {
  align-items: stretch;
  text-align: left;
}

/* Editor-chosen text alignment — wins over image_layout defaults. Selectors
   are compound (.gogox-itg.gogox-itg--text-X) so specificity (0,2,0) beats
   the .gogox-itg--imgs-* .gogox-itg-item (0,2,0) ordering: both same
   specificity, these rules come later in the cascade so they win. */
.gogox-itg.gogox-itg--text-left .gogox-itg-item,
.gogox-itg.gogox-itg--text-left .gogox-itg-item-title,
.gogox-itg.gogox-itg--text-left .gogox-itg-item-desc,
.gogox-itg.gogox-itg--text-left .gogox-itg-item-content {
  text-align: left;
  align-items: flex-start;
}
.gogox-itg.gogox-itg--text-left .gogox-itg-item-cta {
  align-self: flex-start;
}
.gogox-itg.gogox-itg--text-center .gogox-itg-item,
.gogox-itg.gogox-itg--text-center .gogox-itg-item-title,
.gogox-itg.gogox-itg--text-center .gogox-itg-item-desc,
.gogox-itg.gogox-itg--text-center .gogox-itg-item-content {
  text-align: center;
  align-items: center;
}
.gogox-itg.gogox-itg--text-center .gogox-itg-item-cta {
  align-self: center;
}
.gogox-itg--imgs-square .gogox-itg-item-title,
.gogox-itg--imgs-landscape .gogox-itg-item-title {
  text-align: left;
}
.gogox-itg--imgs-square .gogox-itg-item-desc,
.gogox-itg--imgs-landscape .gogox-itg-item-desc {
  text-align: left;
}
.gogox-itg--imgs-square .gogox-itg-item-cta,
.gogox-itg--imgs-landscape .gogox-itg-item-cta {
  align-self: flex-start;
}
.gogox-itg-item-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
  margin: 0;
}
.gogox-itg-item-desc {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.6;
  margin: 0;
}
/* Default-button look (matches .gogox-btn-primary) at a shorter height.
 * Centered under the icon+text by default; square/landscape variants
 * override back to flex-start because their cards are left-aligned. */
.gogox-itg-item-cta {
  align-self: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 8px;
  padding: 16px 40px;   /* standard preset size */
  background: #0088BF;
  color: #FFFFFF;
  border: 2px solid #0088BF;
  border-radius: 999px;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;      /* standard preset size */
  font-weight: 700;
  line-height: 1.5;
  text-decoration: none;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.gogox-itg-item-cta:hover {
  background: #006E9B;
  border-color: #006E9B;
  color: #FFFFFF;
}
@media (max-width: 900px) {
  .gogox-itg { padding: 48px 0; }
  .gogox-kr-itg .gogox-itg { padding-top: 24px; }
  .gogox-kr-promo-top .gogox-itg { padding-top: 96px; }
  .gogox-itg-inner { padding: 0 24px; }
  .gogox-itg--cols-6 .gogox-itg-grid,
  .gogox-itg--cols-5 .gogox-itg-grid,
  .gogox-itg--cols-4 .gogox-itg-grid,
  .gogox-itg--cols-3 .gogox-itg-grid,
  .gogox-itg--cols-2 .gogox-itg-grid {
    grid-template-columns: 1fr;
  }
  .gogox-itg--cols-6 .gogox-itg-grid,
  .gogox-itg--cols-5 .gogox-itg-grid {
    /* 3 across on tablet for high-density rows */
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  @media (max-width: 540px) {
    .gogox-itg--cols-6 .gogox-itg-grid,
    .gogox-itg--cols-5 .gogox-itg-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }
}

/* ----- NEWS POSTS (custom gogox_news_posts widget) ---------------------- */
.elementor-widget-gogox_news_posts {
  width: 100%;
}
.gogox-news {
  width: 100%;
  padding: 72px 0;
}
/* On archive pages (/blog/, /category/<slug>/) the news widget is the very
 * first content under the now-solid Theme Builder header — bump the top
 * padding so "What's New" doesn't crowd the header. Other contexts (e.g.
 * the homepage news section) keep the default 72px. */
body.archive .gogox-news,
body.blog    .gogox-news {
  padding-top: 64px;
}
/* Phones: the mobile bar is position:fixed and ~52px tall, so this padding IS the
   clearance — anything much smaller slides the page title under the bar. 60px
   leaves a small gap without the old empty band. Specificity note: this needs the
   body-class selector because `@media { .gogox-news }` alone loses to the rule
   above (media queries add no specificity). */
@media (max-width: 1176px) {
  body.archive .gogox-news,
  body.blog    .gogox-news {
    padding-top: 60px;
  }
}
.gogox-news-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.gogox-news-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 48px;
  text-align: center;
}
.gogox-news-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 40px;
  text-align: center;
}
.gogox-news-grid {
  display: grid;
  gap: 24px;
}
.gogox-news--cols-4 .gogox-news-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gogox-news--cols-3 .gogox-news-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gogox-news--cols-2 .gogox-news-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

.gogox-news-card {
  background: #fff;
  border: 1px solid #E3E7EC;
  border-radius: 8px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  text-decoration: none !important;
  color: inherit !important;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
a.gogox-news-card { cursor: pointer; }
a.gogox-news-card:hover {
  border-color: #0088BF;
  box-shadow: 0 8px 24px rgba(0, 18, 26, 0.08);
  transform: translateY(-2px);
}
.gogox-news-card-img {
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: #F3F7F8;
}
/* !important on width/height/object-fit — Elementor's frontend.min.css
   ships `.elementor img { height:auto; max-width:100% }` which loads AFTER
   components.css and has tied specificity, so without !important the image
   keeps its natural aspect and the 16/9 container shows grey letterboxing. */
.gogox-news-card-img img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  display: block;
}
.gogox-news-card-body {
  padding: 20px 22px 24px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1 1 auto;
}
.gogox-news-card-meta {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 13px;
  line-height: 1.4;
}
.gogox-news-card-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.35;
  margin: 0;
}
.gogox-news-card-excerpt {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  line-height: 1.55;
  margin: 0;
  flex: 1 1 auto;
  /* Truncate to 3 lines with "…" — keeps card heights consistent across
     posts with variable excerpt lengths. Critical for /hk/ where TC text
     wraps tighter and tends to overrun; benign on English cards (most
     are already ≤3 lines). */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  line-clamp: 3;
  overflow: hidden;
}
/* Tighter selector re-asserts the clamp so it survives utility-class or
   breakpoint overrides that target the simpler single-class form. */
.gogox-news-card .gogox-news-card-excerpt {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  line-clamp: 3;
  overflow: hidden;
}
.gogox-news-card-category {
  display: inline-block;
  font-family: "proxima-nova", sans-serif;
  font-size: 12px;
  font-weight: 700;
  color: #0088BF;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* Featured / hero card — first post in archive mode */
.gogox-news-card--featured {
  display: flex;
  flex-direction: row;
  background: #fff;
  border: 1px solid #E3E7EC;
  border-radius: 8px;
  overflow: hidden;
  text-decoration: none !important;
  color: inherit !important;
  margin-bottom: 32px;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
a.gogox-news-card--featured:hover {
  border-color: #0088BF;
  box-shadow: 0 8px 24px rgba(0, 18, 26, 0.08);
}
.gogox-news-card--featured-img {
  flex: 0 0 55%;
  overflow: hidden;
  min-height: 320px;
}
.gogox-news-card--featured-img img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  display: block;
}
.gogox-news-card--featured-body {
  flex: 1;
  padding: 40px 48px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  justify-content: center;
}
.gogox-news-card--featured-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 24px;
  font-weight: 700;
  line-height: 1.35;
  margin: 0;
}

/* News card "Read more" CTA — base rules (apply at every breakpoint).
 * Mobile keeps an inline-link treatment in brand blue; desktop layers
 * the outlined pill on top (next @media block). The chevron is an
 * inline SVG sized in em so it scales with parent font-size, and uses
 * fill=currentColor so it follows the CTA text color through hover. */
.gogox-news-card-cta {
  color: #0088BF;
  font-weight: 600;
}
.gogox-news-card-cta-chev {
  display: inline-flex;
  align-items: center;
  margin-left: 4px;
  vertical-align: middle;
}
.gogox-news-card-cta-chev svg {
  width: 0.85em;
  height: 0.85em;
  display: block;
}

/* Desktop: render the "Read more" CTA as a transparent pill button with
 * a #0088BF outline + blue label (matches the staging visual). */
@media (min-width: 901px) {
  .gogox-news-card-cta {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    align-self: flex-start;
    margin-top: 12px;
    padding: 10px 22px;
    border: 2px solid #0088BF;
    border-radius: 999px;
    background: transparent;
    font-size: 15px;
    font-weight: 700;
    line-height: 1;
    transition: background-color 0.2s ease, color 0.2s ease;
  }
  a.gogox-news-card:hover .gogox-news-card-cta {
    background: #0088BF;
    color: #FFFFFF;
    text-decoration: none;
  }
}

/* Category tab strip — only rendered by the widget when source =
 * current_archive AND archive_show_tabs is on. Active state is decided
 * server-side based on the current URL. */
.gogox-news-tabs {
  margin-bottom: 32px;
  border-bottom: 1px solid rgba(0, 18, 26, 0.12);
}
/* Format duplicated from the pricing page's step tab bar (.gogox-price-tabs /
   .gpt-tab): equal-width items, a 16px stroke icon 5px before the label, 13.5px
   600 in #667085, and the selected item in GoGoX blue with a 2px underline
   sitting on the strip's hairline. Copied rather than sharing the .gpt-tab class
   because that class is also the hook for the pricing page's scroll-spy script —
   reusing it here would enrol these tabs in behaviour meant for that page. Any
   change to one bar should be mirrored in the other. */
.gogox-news-tabs ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: nowrap;
  gap: 2px;
  align-items: stretch;
  overflow-x: auto;
  /* overflow-y must be stated: with overflow-x set and overflow-y left at
     `visible`, CSS computes overflow-y to `auto`, so the tab strip could be
     dragged up and down a few pixels. */
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.gogox-news-tabs ul::-webkit-scrollbar { display: none; }
.gogox-news-tabs li { margin: 0; flex: 1 1 0; min-width: 0; }
.gogox-news-tab {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  width: 100%;
  padding: 12px 4px;
  margin-bottom: -1px; /* overlap the bottom border so the active underline sits on it */
  border-bottom: 2px solid transparent;
  color: #667085;
  font-family: "proxima-nova", sans-serif;
  font-size: 13.5px;
  font-weight: 600;
  text-decoration: none;
  transition: color 0.15s ease, border-color 0.15s ease;
  white-space: nowrap;
}
.gogox-news-tab svg { flex: 0 0 16px; width: 16px; height: 16px; display: block; }
.gogox-news-tab:hover {
  color: #0088BF;
}
.gogox-news-tab.is-active {
  color: #0088BF;
  border-bottom-color: #0088BF;
}
/* Equal-width tabs work on the pricing bar because it only has four. This strip
   has six, and on a phone an equal sixth is narrower than the labels — with
   nowrap they overflowed their boxes and collided with the neighbour. Let each
   tab take its own width here and rely on the strip's horizontal scroll. */
@media (max-width: 700px) {
  .gogox-news-tabs li { flex: 0 0 auto; }
  .gogox-news-tab { width: auto; padding: 12px 10px; }
  .gogox-news-tabs ul { gap: 0; }
}

/* Pagination — only rendered by the widget when source = current_archive
 * inside a Theme Builder Archive template. Numbered + prev/next links. */
.gogox-news-pagination {
  margin-top: 48px;
  display: flex;
  justify-content: center;
}
.gogox-news-pagination ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: 8px;
  align-items: center;
}
.gogox-news-pagination li { margin: 0; }
/* Numbered "chip" pagination (1 2 3 4 … N) — filled tiles, current tile pale. */
.gogox-news-pagination .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  height: 40px;
  padding: 0 12px;
  border: none;
  border-radius: 8px;
  color: #fff;
  background: #0088BF;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  font-weight: 700;
  text-decoration: none;
  transition: background 0.15s ease, color 0.15s ease;
}
.gogox-news-pagination a.page-numbers:hover {
  background: #0072A3;
  color: #fff;
}
.gogox-news-pagination .page-numbers.current {
  background: #E6F3F8;
  color: #0088BF;
}
.gogox-news-pagination .page-numbers.dots {
  background: transparent;
  color: #9AA3AD;
  min-width: auto;
  padding: 0 4px;
  font-weight: 700;
}
/* Prev / next chevrons: SVG icon, perfectly centered in the tile. */
.gogox-news-pagination .page-numbers.prev,
.gogox-news-pagination .page-numbers.next {
  padding: 0;
}
.gogox-news-pagination .page-numbers svg {
  display: block;
}

/* Simple "Older / Newer" pagination variant */
.gogox-news-pagination--simple {
  justify-content: space-between;
}
.gogox-news-pagination--simple a {
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: #0088BF;
  text-decoration: none;
}
.gogox-news-pagination--simple a:hover { text-decoration: underline; }

/* Featured card — mobile: stack vertically */
@media (max-width: 700px) {
  .gogox-news-card--featured { flex-direction: column; }
  .gogox-news-card--featured-img { min-height: 220px; flex: none; width: 100%; }
  .gogox-news-card--featured-body { padding: 24px; }
  .gogox-news-card--featured-title { font-size: 18px; }
}

@media (max-width: 1100px) {
  .gogox-news--cols-4 .gogox-news-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .gogox-news { padding: 48px 0; }
  .gogox-news-inner { padding: 0 24px; }
  .gogox-news--cols-4 .gogox-news-grid,
  .gogox-news--cols-3 .gogox-news-grid,
  .gogox-news--cols-2 .gogox-news-grid {
    grid-template-columns: 1fr;
  }

  /* Homepage only — swap "What's New" from vertical stack to horizontal
     swipe carousel (matches gogox_vehicles pattern). Blog archive /
     category pages keep the vertical stack (better for scanning a long
     list of posts). Scope is `.home` body class, added automatically by
     WP on the front page. */
  .home .gogox-news-inner { padding: 0; }
  .home .gogox-news-heading { padding: 0 24px; }
  .home .gogox-news--cols-4 .gogox-news-grid,
  .home .gogox-news--cols-3 .gogox-news-grid,
  .home .gogox-news--cols-2 .gogox-news-grid,
  .home .gogox-news-grid,
  .gogox-news--mobile-swipe .gogox-news-grid {
    display: flex;
    grid-template-columns: none;
    gap: 16px;
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    scroll-padding: 0 24px;
    padding: 4px 24px 12px;
    scrollbar-width: none;
  }
  .home .gogox-news-grid::-webkit-scrollbar,
  .gogox-news--mobile-swipe .gogox-news-grid::-webkit-scrollbar { display: none; }
  .home .gogox-news-grid > .gogox-news-card,
  .gogox-news--mobile-swipe .gogox-news-grid > .gogox-news-card {
    flex: 0 0 auto;
    width: min(82vw, 320px);
    scroll-snap-align: center;
  }
}

/* ----- VEHICLES — drag-to-scroll carousel ----- */
/* Auto-triggers when item count > cols (e.g. SG's 6 vehicles in a 4-col layout).
 * Uses native overflow-x scrolling with snap points — touch users get
 * momentum scroll for free; desktop users can grab + drag (JS in footer.php).
 * Cards align flex-start so a short card doesn't get stretched to match the
 * tallest one's height (the "empty blue area" bug). */
.gogox-vehicles--carousel .gogox-vehicles-viewport {
  width: 100%;
  align-self: stretch;
  overflow-x: auto;
  overflow-y: visible;
  -webkit-overflow-scrolling: touch;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  cursor: grab;
  scrollbar-width: none;
  padding: 60px 0 8px; /* top padding so the image overhang (-60px) doesn't clip */
}
.gogox-vehicles--carousel .gogox-vehicles-viewport::-webkit-scrollbar { display: none; }
.gogox-vehicles--carousel .gogox-vehicles-viewport.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.gogox-vehicles--carousel .gogox-vehicles-viewport.is-dragging * { user-select: none; }
.gogox-vehicles--carousel .gogox-vehicles-track {
  display: flex;
  align-items: stretch; /* equal-height cards: every card matches the tallest in the track */
  gap: 24px;
  padding: 0 24px;
}
/* Fixed card width across all breakpoints — matches the desktop grid's
 * computed card width so tablet/mobile cards don't shrink. The next card
 * peeks in from the right to signal scrollability. */
.gogox-vehicles--carousel .gogox-vehicles-track .gogox-vehicle-card {
  flex: 0 0 min(78vw, 280px);
  scroll-snap-align: start;
}
@media (max-width: 700px) {
  .gogox-vehicles--carousel .gogox-vehicles-track {
    padding-left: 20px;
  }
  .gogox-vehicles--carousel .gogox-vehicles-viewport {
    scroll-padding-left: 20px;
  }
}
/* Side scroll-chevrons (shown only in carousel mode, > cols cards). Mirrors the
   news-banner side-arrow affordance, but on a white pill so the chevron stays
   legible over the dark-blue vehicle cards. JS (wireVehicleCarousel) wires the
   clicks to scroll the viewport one card and toggles `.is-hidden` at the ends. */
.gogox-vehicles-carousel {
  position: relative;
  width: 100%;
  align-self: stretch; /* fill the inner's width (inner is align-items:center) so
                          the viewport overflows + scrolls, instead of the wrapper
                          growing to the full track width */
  padding: 0 56px; /* side lanes so the arrows sit beside the track, not over the
                      cards (box-sizing:border-box is global, so the viewport
                      shrinks to fit between the lanes) */
}
.gogox-vehicles-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  border: none;
  background: none;
  padding: 0;
  cursor: pointer;
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.15s ease;
}
.gogox-vehicles-arrow span { display: none; } /* glyph replaced by the CSS chevron */
.gogox-vehicles-arrow::before {
  /* Slim brand-blue chevron — same treatment as the news-banner arrows. */
  content: '';
  width: 16px;
  height: 16px;
  border-right: 3px solid #0088BF;
  border-bottom: 3px solid #0088BF;
  border-radius: 2px;
}
.gogox-vehicles-arrow--prev { left: 4px; }
.gogox-vehicles-arrow--prev::before { transform: rotate(135deg); margin-left: 6px; }
.gogox-vehicles-arrow--next { right: 4px; }
.gogox-vehicles-arrow--next::before { transform: rotate(-45deg); margin-right: 6px; }
.gogox-vehicles-arrow:hover { opacity: 0.65; }
.gogox-vehicles-arrow.is-hidden { opacity: 0; pointer-events: none; }
@media (max-width: 700px) {
  /* Mobile already signals scrollability via the peeking next card + swipe.
     Drop the desktop arrow "lanes" so the rail keeps its original near
     full-bleed mobile padding. */
  .gogox-vehicles-arrow { display: none; }
  .gogox-vehicles-carousel { padding: 0; }
  /* Trailing space after the last card: a horizontal scroll container drops
     the track's padding-right from its scrollWidth, so the last card would butt
     against the viewport edge. Use a flex spacer (counts toward scrollWidth);
     the negative margin cancels the track's 24px flex gap so the trailing space
     equals the 20px left padding. */
  .gogox-vehicles--carousel .gogox-vehicles-track { padding-right: 0; }
  .gogox-vehicles--carousel .gogox-vehicles-track::after {
    content: '';
    flex: 0 0 20px;
    margin-left: -24px;
  }
}

/* ----- ICON+TEXT GRID — carousel mode ----- */
/* Mirrors gogox_testimonials carousel pattern: track + chevrons + dots */
.gogox-itg--carousel .gogox-itg-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}
.gogox-itg--carousel .gogox-itg-viewport {
  flex: 1 1 auto;
  overflow: hidden;
}
.gogox-itg--carousel .gogox-itg-track {
  display: flex;
  align-items: flex-start;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
.gogox-itg--carousel.gogox-itg--cols-4 .gogox-itg-track .gogox-itg-item {
  flex: 0 0 calc((100% - 72px) / 4);
}
.gogox-itg--carousel.gogox-itg--cols-3 .gogox-itg-track .gogox-itg-item {
  flex: 0 0 calc((100% - 48px) / 3);
}
.gogox-itg--carousel.gogox-itg--cols-2 .gogox-itg-track .gogox-itg-item {
  flex: 0 0 calc((100% - 24px) / 2);
}
.gogox-itg--carousel .gogox-itg-arrow {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #E3E7EC;
  background: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  line-height: 1;
  color: #0088BF;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  padding: 0;
}
.gogox-itg--carousel .gogox-itg-arrow:hover {
  background: #0088BF;
  border-color: #0088BF;
  color: #fff;
}
.gogox-itg--carousel .gogox-itg-arrow:disabled {
  opacity: 0.35;
  cursor: default;
  background: #fff;
  border-color: #E3E7EC;
  color: #0088BF;
}
.gogox-itg--carousel .gogox-itg-dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 24px;
}
.gogox-itg--carousel .gogox-itg-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  background: #D8DEE2;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.15s ease;
}
.gogox-itg--carousel .gogox-itg-dot:hover { background: #0088BF; }
.gogox-itg--carousel .gogox-itg-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}
@media (max-width: 1100px) {
  .gogox-itg--carousel.gogox-itg--cols-4 .gogox-itg-track .gogox-itg-item,
  .gogox-itg--carousel.gogox-itg--cols-3 .gogox-itg-track .gogox-itg-item {
    flex: 0 0 calc((100% - 24px) / 2);
  }
}
@media (max-width: 700px) {
  .gogox-itg--carousel .gogox-itg-track .gogox-itg-item {
    flex: 0 0 100% !important;
  }
  .gogox-itg--carousel .gogox-itg-arrow { width: 36px; height: 36px; font-size: 22px; }
}
@media (min-width: 901px) and (max-width: 1100px) {
  /* 4-col grid is too tight on narrow desktop; fall back to 2 */
  .gogox-itg--cols-4 .gogox-itg-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* ----- PROCESS STEPS (custom gogox_process_steps widget) --------------- */
/* Matches live gogox.com /delivery/ gogovan-accordion-block:
   left pane stacks images absolutely and crossfades via opacity;
   each step is a bordered white card that turns solid blue when active. */
.gogox-process-accordion-wrap,
.elementor-widget-gogox_process_steps {
  padding: 0 !important;
  margin: 0 !important;
  width: 100%;
}
.gogox-process-steps {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  width: 100%;
  background: #fff;
}
/* Image-on-right variant — flips the row so .gogox-process-steps-image
 * renders on the right and .gogox-process-steps-content on the left. */
.gogox-process-steps--img-right {
  flex-direction: row-reverse;
}
.gogox-process-steps-image {
  flex: 0 0 50%;
  width: 50%;
  min-height: 600px;
  background: #F3F7F8;
  position: relative;
  overflow: hidden;
}
.gogox-process-steps-stage {
  position: absolute;
  inset: 0;
}
/* Per-step image group — replaces the flat .gogox-process-steps-img as the
   opacity-switch target. Each group holds 1-N images for one step. */
.gogox-step-img-group {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.6s ease;
}
.gogox-step-img-group.is-active {
  opacity: 1;
  pointer-events: auto;
}
.gogox-process-steps-img {
  position: absolute;
  inset: 0;
  background-repeat: no-repeat;
  background-size: contain;
  background-position: center;
  opacity: 0;
  transition: opacity 0.4s ease;
}
.gogox-process-steps--img-cover .gogox-process-steps-img {
  background-size: cover;
}
.gogox-process-steps-img.is-active {
  opacity: 1;
}
/* Mini carousel controls inside a multi-image group */
.gogox-step-img-prev,
.gogox-step-img-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0, 0, 0, 0.45);
  color: #fff;
  border: none;
  border-radius: 50%;
  width: 36px;
  height: 36px;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.2s;
}
.gogox-step-img-prev:hover,
.gogox-step-img-next:hover { background: rgba(0, 0, 0, 0.7); }
.gogox-step-img-prev { left: 10px; }
.gogox-step-img-next { right: 10px; }
.gogox-step-img-dots {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 6px;
}
.gogox-step-img-dots span {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.45);
  transition: background 0.2s;
}
.gogox-step-img-dots span.is-active { background: #fff; }
.gogox-process-steps-content {
  flex: 0 0 50%;
  width: 50%;
  padding: 80px 80px 50px 80px;
  background: #F3F7F8;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  box-sizing: border-box;
}
.gogox-process-steps-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 16px;
}
.gogox-process-steps-cta {
  margin-top: 32px;
}
.gogox-process-steps--flow .gogox-process-steps-cta {
  text-align: center;
}
.gogox-process-steps-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.gogox-process-step {
  background: #fff;
  margin-bottom: 20px;
  padding: 25px 40px;
  border-radius: 4px;
  border: 1.5px solid #E3E7EC;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}
.gogox-process-step:last-child { margin-bottom: 0; }
.gogox-process-step-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  width: 100%;
  padding: 0;
  background: transparent;
  border: 0;
  cursor: pointer;
  text-align: left;
  font-family: "proxima-nova", sans-serif;
  color: #000;
  transition: color 0.2s ease;
}
.gogox-process-step-title {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 20px;
  line-height: 32px;
  width: 100%;
  color: inherit;
}
/* Plus/minus indicator built with box + :before pseudo (matches live site) */
.gogox-process-step-icon {
  flex: 0 0 auto;
  position: relative;
  width: 12px;
  height: 2px;
  margin-top: 17px;
  margin-left: 16px;
  background: #0088BF;
  transition: background-color 0.2s ease, transform 0.2s ease;
}
.gogox-process-step-icon::after {
  content: "";
  position: absolute;
  width: 2px;
  height: 12px;
  left: 5px;
  top: -5px;
  background: #0088BF;
  transform: rotate(0deg);
  transition: transform 0.2s ease, background-color 0.2s ease;
}
.gogox-process-step-body {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.25s ease-out;
}
.gogox-process-step.is-active .gogox-process-step-body {
  max-height: 600px;
}
.gogox-process-step-body p {
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 16px;
  line-height: 24px;
  margin: 12px 0 0;
  color: inherit;
}
/* Active (expanded) card — solid blue with white text, no border */
.gogox-process-step.is-active {
  background-color: #006E9B;
  border-color: transparent;
}
.gogox-process-step.is-active .gogox-process-step-header { color: #FFF; }
.gogox-process-step.is-active .gogox-process-step-icon,
.gogox-process-step.is-active .gogox-process-step-icon::after { background: #FFF; }
.gogox-process-step.is-active .gogox-process-step-icon::after { transform: rotate(90deg); }
.gogox-process-step.is-active .gogox-process-step-body { color: #FFF; }

@media (max-width: 900px) {
  .gogox-process-steps {
    flex-direction: column;
  }
  .gogox-process-steps-image {
    flex: 0 0 auto;
    width: 100%;
    min-height: 400px;
  }
  .gogox-process-steps-content {
    flex: 0 0 auto;
    width: 100%;
    padding: 48px 24px;
  }
  .gogox-process-step {
    padding: 24px;
  }
}

/* ----- PROCESS STEPS — flow mode -------------------------------------- */
/* Each step: number circle at the LEFT of its column, title + body
   left-aligned below. A 3px blue connecting line runs from the first
   circle's centre to the container's right edge — visible to the right
   of every circle including the last. */
.gogox-process-steps--flow {
  display: block;
  background: #fff;
  padding: 72px max(24px, calc((100% - 1200px) / 2));
  box-sizing: border-box;
}
.gogox-process-steps--flow .gogox-process-steps-image { display: none; }
/* Optional section image (e.g. a QR) below the steps — left-aligned, modest
   size. Lives in .gogox-process-steps-content so it shows in flow + accordion. */
.gogox-process-steps-figure {
  margin: 28px auto 0 0;
  max-width: 180px;
  width: 100%;
}
.gogox-process-steps-figure img { width: 100%; height: auto; display: block; }
.gogox-process-steps--flow .gogox-process-steps-content {
  width: 100%;
  flex: none;
  padding: 0;
  background: transparent;
}
.gogox-process-steps--flow .gogox-process-steps-heading {
  text-align: center;
  margin: 0 0 16px;
}
.gogox-process-steps--flow .gogox-process-steps-intro {
  text-align: center;
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 56px;
}
.gogox-process-steps--accordion .gogox-process-steps-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 32px;
}
.gogox-process-steps--flow .gogox-process-steps-list {
  position: relative;
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 24px;
  counter-reset: gogox-step;
}
/* Horizontal connecting line — from first circle centre to right edge of
   the container. Last step also has line on its right (extends past it). */
.gogox-process-steps--flow .gogox-process-steps-list::before {
  content: "";
  position: absolute;
  top: 25px;
  left: 25px;
  right: 0;
  height: 3px;
  background: #0088BF;
  z-index: 1;
}
.gogox-process-steps--flow .gogox-process-step {
  flex: 1 1 0;
  min-width: 0;
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
  position: relative;
  counter-increment: gogox-step;
}
/* Numbered circle — left-aligned within the step's column. White bg
   breaks the connecting line at the circle's centre. */
.gogox-process-steps--flow .gogox-process-step::before {
  content: counter(gogox-step);
  width: 50px;
  height: 50px;
  border-radius: 50%;
  border: 3px solid #0088BF;
  background: #fff;
  color: #0088BF;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: "proxima-nova", sans-serif;
  font-size: 20px;
  font-weight: 700;
  line-height: 1;
  position: relative;
  z-index: 2;
  margin-bottom: 24px;
  margin-left: 0;
}
.gogox-process-steps--flow .gogox-process-step-header {
  cursor: default;
  pointer-events: none;
  padding: 0;
  display: block;
  text-align: left;
  width: 100%;
}
.gogox-process-steps--flow .gogox-process-step-icon { display: none; }
.gogox-process-steps--flow .gogox-process-step-title {
  color: #00121A;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.3;
  margin: 0 0 8px;
  text-align: left;
}
/* Step body always visible in flow mode; kill the accordion height-transition
   so max-height:none takes effect instantly on paint (no collapsed flash) */
.gogox-process-steps--flow .gogox-process-step-body {
  max-height: none !important;
  overflow: visible;
  padding: 0;
  width: 100%;
  transition: none !important;
}
.gogox-process-steps--flow .gogox-process-step.is-active {
  background: transparent;
  border-color: transparent;
  color: inherit;
}
.gogox-process-steps--flow .gogox-process-step.is-active .gogox-process-step-header {
  color: inherit;
}
.gogox-process-steps--flow .gogox-process-step-body p,
.gogox-process-steps--flow .gogox-process-step-body div {
  color: #7a7a7a;
  font-size: 14px;
  line-height: 22px;
  margin: 0;
  text-align: left;
  padding-right: 24px;
}

@media (max-width: 900px) {
  .gogox-process-steps--flow {
    padding: 48px 24px;
  }
  .gogox-process-steps--flow .gogox-process-steps-list {
    flex-direction: column;
    gap: 48px;
  }
  /* Mobile: line is vertical, anchored to the LEFT (through the circle
     centres at left:25px). Steps still left-aligned; line extends past
     the last circle to the bottom of the container. */
  .gogox-process-steps--flow .gogox-process-steps-list::before {
    top: 25px;
    left: 25px;
    right: auto;
    bottom: 0;
    height: auto;
    width: 3px;
  }
  .gogox-process-steps--flow .gogox-process-step {
    flex: 0 0 auto; /* reset desktop flex:1 1 0 — size each step to its content in column mode */
    padding-left: 80px;
    align-items: flex-start;
    min-height: 50px;
  }
  .gogox-process-steps--flow .gogox-process-step::before {
    position: absolute;
    top: 0;
    left: 0;
    margin-bottom: 0;
  }
  .gogox-process-steps--flow .gogox-process-step-body p,
  .gogox-process-steps--flow .gogox-process-step-body div {
    padding-right: 0;
  }
  /* Explicit block + width prevents flex-shrink quirks in column mode */
  .gogox-process-steps--flow .gogox-process-step-body {
    display: block;
    width: 100%;
  }
}

/* ----- SITE HEADER: Elementor Theme Builder template; fixed, transparent→white on scroll ----- */
.elementor-location-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  width: 100%;
  background: linear-gradient(180deg, rgba(0,0,0,0.4) 0%, rgba(0,0,0,0) 100%);
  background-color: transparent;
  transition: background 0.2s ease, box-shadow 0.2s ease;
}
/* Force horizontal layout on header, overriding Elementor's CSS-variable scheme.
   Elementor emits `--flex-direction: row` as custom props + reads via .e-con rule.
   We force absolute values with !important and high specificity. */
body .elementor-location-header .elementor-element.elementor-element-hdrroot,
body.elementor-page .elementor-location-header .elementor-element-hdrroot {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px !important;
  max-width: 1264px !important;
  margin: 0 auto !important;
  width: 100% !important;
  padding: 20px 32px !important;
  box-sizing: border-box !important;
  --flex-direction: row !important;
  --align-items: center !important;
  --justify-content: space-between !important;
  --flex-wrap: nowrap !important;
}
body .elementor-location-header .elementor-element-hdrroot > .elementor-element {
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
}
body .elementor-location-header .elementor-element.elementor-element-hdrnav {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  flex: 1 1 auto !important;
  justify-content: flex-start !important; /* menu starts right after the logo */
  gap: 28px !important;
  padding: 0 !important;
  width: auto !important;
  --flex-direction: row !important;
  --justify-content: flex-start !important;
  --align-items: center !important;
  --flex-wrap: nowrap !important;
  --gap: 28px 28px !important;
}
body .elementor-location-header .elementor-element.elementor-element-hdract {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  flex: 0 0 auto !important;
  gap: 28px !important;
  padding: 0 !important;
  width: auto !important;
  --flex-direction: row !important;
  --align-items: center !important;
  --flex-wrap: nowrap !important;
  --gap: 20px 20px !important;
}
/* Each nav / action child sized by its content, no grow */
body .elementor-location-header .elementor-element-hdrnav > .elementor-element,
body .elementor-location-header .elementor-element-hdract > .elementor-element {
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
}
/* Desktop header logo — two-state swap via BACKGROUND image (robust;
   `content:` was flaky on the scrolled state). The real <img> is made
   invisible but keeps its 135×24 box so the <a> wrapper has size; the
   logo is painted as a background on the <a>, swapped on .is-scrolled.
     hero / transparent nav : white GOGO + yellow X (light variant)
     scrolled / white nav    : blue  GOGO + yellow X (default variant) */
.elementor-location-header .elementor-element-hdrlog img {
  height: 24px !important;
  width: 135px !important;
  aspect-ratio: 135 / 24;
  visibility: hidden; /* hide the real pixels, keep the layout box */
}
.elementor-location-header .elementor-element-hdrlog a {
  display: inline-block;
  background-image: url('/wp-content/themes/gogox/assets/logo/gogox-wordmark-light.svg?v=0.5.44');
  background-repeat: no-repeat;
  background-position: left center;
  background-size: contain;
  transition: background-image 0.2s ease;
}
.elementor-location-header .elementor-element-hdrnav {
  flex: 1 !important;
  justify-content: flex-start !important;
  gap: 28px !important;
}
.elementor-location-header .elementor-element-hdrnav p,
.elementor-location-header .elementor-element-hdract p {
  margin: 0 !important;
}
.elementor-location-header .elementor-element-hdrnav a {
  color: #fff !important;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 24px;
  text-decoration: none;
  white-space: nowrap;
  transition: color 0.2s ease;
}
.elementor-location-header .elementor-element-hdrnav a:hover { color: #FFDD00 !important; }
.elementor-location-header .elementor-element-hdract {
  gap: 28px !important;
  flex: 0 0 auto !important;
}
.elementor-location-header .elementor-element-hdract,
.elementor-location-header .elementor-element-hdract a,
.elementor-location-header .elementor-element-hdract .lang-switch {
  color: #fff !important;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 24px;
  text-decoration: none;
  white-space: nowrap;
}
.elementor-location-header .lang-switch { cursor: pointer; }

/* Hover-dropdown sub-menu under a top-level nav item. Class-based so it
   scales to any top-level nav widget once the HTML structure is in place. */
.elementor-location-header .gogox-nav-item {
  position: relative;
  display: inline-block;
}
/* Normalize the gap between the logo and the first top-level nav item so
   HK and SG (and future regions) align identically regardless of the
   first menu's text length. Applied to the widget that contains hnv1. */
.elementor-location-header .elementor-element-hnv1 {
  margin-left: 24px;
}
.elementor-location-header .gogox-nav-item > a {
  color: inherit;
  text-decoration: none;
}
.elementor-location-header .gogox-nav-item > .gogox-submenu {
  position: absolute;
  top: 100%;
  left: -16px;
  min-width: 240px;
  padding: 12px 0;
  margin: 0;
  list-style: none;
  background: #fff;
  border-radius: 4px;
  box-shadow: 0 10px 30px rgba(0, 18, 26, 0.08);
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
  z-index: 110;
}
.elementor-location-header .gogox-nav-item:hover > .gogox-submenu,
.elementor-location-header .gogox-nav-item:focus-within > .gogox-submenu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
/* Dismiss-on-click: header-nav.js adds `.is-dismissed` to the nav-item
   when a sub-link is clicked, so the dropdown closes even though the
   mouse is still hovering. Cleared on mouseleave. Same hook for
   .gogox-nav-popover (e.g. IN Contact Us → tel:). */
.elementor-location-header .gogox-nav-item.is-dismissed > .gogox-submenu,
.elementor-location-header .gogox-nav-item--has-popover.is-dismissed .gogox-nav-popover {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}
/* Right-aligned submenu — used when the nav-item sits in the action area
   (.elementor-element-hdract, e.g. HK Registration), so the dropdown
   doesn't push off the right edge of the viewport. Set on the nav-item
   itself via the .gogox-nav-item--right modifier or automatically for
   any .gogox-nav-item inside hdract. */
.elementor-location-header .elementor-element-hdract .gogox-nav-item > .gogox-submenu,
.elementor-location-header .gogox-nav-item--right > .gogox-submenu {
  left: auto;
  right: -16px;
}
.elementor-location-header .gogox-submenu li {
  margin: 0;
  list-style: none;
}
.elementor-location-header .gogox-submenu li a {
  display: block;
  padding: 6px 24px;
  color: #00121A !important;
  font-size: 14px;
  line-height: 22px;
  white-space: nowrap;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.elementor-location-header .gogox-submenu li.indent a { padding-left: 48px; }
.elementor-location-header .gogox-submenu li a:hover {
  background: #F3F7F8;
  color: #0088BF !important;
}

/* Sticky state */
.elementor-location-header.is-scrolled {
  background: #fff;
  background-color: #fff;
  box-shadow: 0 30px 30px rgba(0, 18, 26, 0.03);
}
.elementor-location-header.is-scrolled .elementor-element-hdrlog a {
  /* Scrolled (white nav) — swap to the dark variant: blue GOGO + yellow X */
  background-image: url('/wp-content/themes/gogox/assets/logo/gogox-wordmark.svg?v=0.5.44');
}
.elementor-location-header.is-scrolled .elementor-element-hdrnav a,
.elementor-location-header.is-scrolled .elementor-element-hdract,
.elementor-location-header.is-scrolled .elementor-element-hdract a,
.elementor-location-header.is-scrolled .elementor-element-hdract .lang-switch {
  color: #000 !important;
}
.elementor-location-header.is-scrolled .elementor-element-hdrnav a:hover { color: #0088BF !important; }

/* Pages that don't start with a gogox_hero need top padding so the
   fixed site header doesn't cover their content. Listed by WP page-id
   on both local + staging (IDs differ per env). Add new IDs as
   marketing composes more hero-less pages. /info/, /about/ excluded
   per designer's call — they start with banner images and stay as-is. */
body.page-id-497 #site-main,   /* local  /contact/        */
body.page-id-498 #site-main,   /* local  /pricing/        */
body.page-id-227 #site-main,   /* stage  /contact/        */
body.page-id-311 #site-main,   /* stage  /feedback/       */
body.page-id-210 #site-main,   /* stage  /pricing/        */
body.page-id-728 #site-main,   /* stage  /hk/contact/     */
body.page-id-738 #site-main,   /* stage  /hk/feedback/    */
body.page-id-146 #site-main,   /* stage  /hk/pricing/     */
body.page-id-226 #site-main,   /* stage  /quoting/        */
body.page-id-127 #site-main,   /* stage  /hk/quoting/     */
body.page-id-366 #site-main,   /* stage  /sg/quoting/     */
body.page-id-206 #site-main,   /* local  /kr/blue-bird-event/ — no-hero page, starts with spacer + image */
body.page-id-299 #site-main {  /* stage  /kr/blue-bird-event/ */
  padding-top: 48px;
}
@media (max-width: 1176px) {
  body.page-id-497 #site-main,
  body.page-id-498 #site-main,
  body.page-id-227 #site-main,
  body.page-id-311 #site-main,
  body.page-id-210 #site-main,
  body.page-id-728 #site-main,
  body.page-id-738 #site-main,
  body.page-id-146 #site-main,
  body.page-id-226 #site-main,
  body.page-id-127 #site-main,
  body.page-id-366 #site-main,
  body.page-id-206 #site-main,
  body.page-id-299 #site-main {
    padding-top: 32px;
  }
}

/* ----- SITE FOOTER: Elementor Theme Builder template; 5-column grid + bottom row ----- */
.elementor-location-footer {
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  color: #7a7a7a;
}
.elementor-location-footer .elementor-element-ftrroot {
  max-width: none !important;
}
/* Footer grid: 3 equal left columns + 1 wider right column. Right column's
   right edge naturally touches the 1200px content-box boundary. */
.elementor-location-footer .elementor-element-ftrgrd > .e-con-inner {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) 1.4fr !important;
  gap: 40px !important;
  max-width: 1200px !important;
  margin: 0 auto !important;
  width: 100% !important;
}
.elementor-location-footer .elementor-element-ftrgrd {
  display: block !important;
}
/* Right column: content right-aligned within its grid cell. */
.elementor-location-footer .elementor-element-fcolR {
  text-align: right !important;
  align-items: flex-end !important;
}
.elementor-location-footer h4 {
  color: #00121A !important;
  font-size: 14px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  margin: 0 0 16px !important;
  font-family: "proxima-nova", sans-serif !important;
  line-height: 1.4 !important;
}
.elementor-location-footer ul {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
.elementor-location-footer li { margin-bottom: 8px !important; }
.elementor-location-footer a {
  color: #7a7a7a !important;
  text-decoration: none !important;
}
.elementor-location-footer a:hover { color: #0088BF !important; }
.elementor-location-footer .elementor-element-ftrbot > .e-con-inner {
  max-width: 1200px !important;
  width: 100% !important;
  margin: 0 auto !important;
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
}
.elementor-location-footer .elementor-element-ftrbot {
  display: block !important;
}

@media (max-width: 900px) {
  .elementor-location-header .elementor-element-hdrnav { display: none !important; }
  .elementor-location-footer .elementor-element-ftrgrd > .e-con-inner {
    grid-template-columns: repeat(2, 1fr) !important;
  }
  /* Right column (logo + contact + app store buttons) should left-align on
     mobile so it lines up with the Company / Service / Support columns.
     Elementor sets --align-items: flex-end as a CSS custom property AND
     the designer typed text-align:right + justify-content:flex-end as
     INLINE styles on every <p> inside the text-editor widgets. !important
     on a regular CSS rule beats non-important inline styles, so we override
     the <p>-level inline styles directly. */
  .elementor-location-footer .elementor-element-fcolR,
  .elementor-location-footer .elementor-element-fcolR > .e-con-inner {
    --align-items: flex-start !important;
    text-align: left !important;
    align-items: flex-start !important;
  }
  .elementor-location-footer .elementor-element-fcolR p {
    text-align: left !important;
    justify-content: flex-start !important;
  }
}

/* =============================================================
   MOBILE HEADER — live site uses a single 890px breakpoint.
   Desktop Elementor header hides; theme-rendered bar + drawer show.
   ============================================================= */
.gogox-mobile-bar,
.gogox-mobile-drawer,
.gogox-mobile-backdrop { display: none; }

@media (max-width: 1176px) {
  /* Hide desktop Elementor header outright */
  .elementor-location-header { display: none !important; }

  /* ---- Fixed top bar ---- */
  .gogox-mobile-bar {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 100;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 15px;
    background: linear-gradient(180deg, rgba(0,0,0,0.4) 0%, rgba(0,0,0,0) 100%);
    background-color: transparent;
    transition: background 0.2s ease, box-shadow 0.2s ease;
  }
  .gogox-mobile-bar.is-scrolled {
    background: #fff;
    background-color: #fff;
    box-shadow: 0 30px 30px rgba(0, 18, 26, 0.03);
  }
  .gogox-mobile-bar__logo { display: inline-flex; flex: 0 0 auto; }
  .gogox-mobile-bar__logo img {
    height: 22px;
    width: auto;
  }
  /* Two-variant logo: light (white GOGO + yellow X) for transparent nav over
     hero; dark (blue GOGO + yellow X) for scrolled white nav. Toggled via the
     .is-scrolled state class added by footer.php's scroll listener. */
  .gogox-mobile-bar__logo-img--dark  { display: none; }
  .gogox-mobile-bar.is-scrolled .gogox-mobile-bar__logo-img--light { display: none; }
  .gogox-mobile-bar.is-scrolled .gogox-mobile-bar__logo-img--dark  { display: inline-block; }
  /* Action CTAs in the mobile top bar — sit between logo and burger, to the
     left of the burger icon. Use the available space; truncate gracefully. */
  .gogox-mobile-bar__actions {
    display: flex;
    flex: 1 1 auto;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    margin: 0 12px;
    min-width: 0;
  }
  .gogox-mobile-bar__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 8px 14px;
    border-radius: 99px;
    background: #0088BF;
    color: #fff !important;
    font-family: "proxima-nova", sans-serif;
    font-size: 13px;
    font-weight: 700;
    line-height: 1;
    text-decoration: none;
    border: 2px solid #0088BF;
    white-space: nowrap;
  }
  .gogox-mobile-bar__cta--outline {
    background: transparent;
    color: #fff !important;
    border: 2px solid #fff;
  }
  .gogox-mobile-bar.is-scrolled .gogox-mobile-bar__cta--outline {
    color: #0088BF !important;
    border-color: #0088BF;
  }
  @media (max-width: 480px) {
    /* On very small screens the outline CTA is the first thing to drop */
    .gogox-mobile-bar__cta--outline { display: none; }
  }
  .gogox-mobile-bar__toggle {
    background: none;
    border: none;
    padding: 0;
    line-height: 0;
    color: #fff;
    cursor: pointer;
    transition: color 0.2s ease;
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .gogox-mobile-bar.is-scrolled .gogox-mobile-bar__toggle { color: #00121A; }
  .gogox-mobile-bar__toggle-icon { width: 24px; height: 24px; }

  /* ---- Slide-in drawer + backdrop ---- */
  .gogox-mobile-backdrop {
    display: block;
    position: fixed;
    inset: 0;
    background: rgba(0, 18, 26, 0.35);
    z-index: 190;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.2s ease, visibility 0.2s;
  }
  .gogox-mobile-backdrop.is-open {
    opacity: 1;
    visibility: visible;
  }
  .gogox-mobile-drawer {
    display: block;
    position: fixed;
    top: 0; right: 0; bottom: 0; left: 0;
    width: 100%;
    max-width: none;
    background: #fff;
    z-index: 200;
    transform: translateX(100%);
    transition: transform 0.3s ease;
    overflow-y: auto;
    padding: 72px 24px 32px;
    font-family: "proxima-nova", sans-serif;
    color: #00121A;
  }
  .gogox-mobile-drawer.is-open { transform: translateX(0); }
  .gogox-mobile-drawer__topbar {
    position: fixed;
    top: 0; left: 0; right: 0;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 15px 24px;
    background: #fff;
    z-index: 210;
  }
  .gogox-mobile-drawer__logo { display: inline-flex; }
  .gogox-mobile-drawer__logo img {
    height: 24px;
    width: auto;
  }
  .gogox-mobile-drawer__close {
    background: none;
    border: none;
    padding: 0;
    font-size: 28px;
    line-height: 1;
    color: #00121A;
    cursor: pointer;
  }
  /* Two-panel system: menu panel (default) + lang panel (slides in on tap).
     Only one is visible at a time, toggled by .is-showing-lang on the drawer. */
  .gogox-mobile-drawer__panel { display: block; }
  .gogox-mobile-drawer__panel[hidden] { display: none; }
  .gogox-mobile-drawer__back {
    background: none;
    border: none;
    padding: 0;
    font-family: inherit;
    font-size: 16px;
    font-weight: 700;
    color: #00121A;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
  }
  .gogox-mobile-drawer__back-icon {
    width: 16px;
    height: 16px;
    flex: 0 0 auto;
  }
  /* Title-only variant (no `<` back arrow, not tappable) — used on the
     Registration panel which is reached directly from the mobile bar, so
     "back to menu" wouldn't make sense. Drop the pointer + gap; the × close
     button on the right remains the only exit. */
  .gogox-mobile-drawer__back--titleonly {
    cursor: default;
    gap: 0;
  }
  .gogox-mobile-drawer__nav ul {
    list-style: none !important;
    padding: 0;
    margin: 0;
  }

  /* Top-level group row: click-to-expand with chevron indicator */
  .gogox-mobile-groups > li {
    border-top: 1px solid #E3E7EC;
  }
  .gogox-mobile-groups > li:first-child { border-top: none; }
  .gogox-mobile-groups .g-heading {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-weight: 700;
    font-size: 16px;
    color: #00121A;
    margin: 0;
    padding: 16px 0;
    cursor: pointer;
    user-select: none;
  }
  .gogox-mobile-groups .g-heading a {
    color: inherit;
    text-decoration: none;
  }
  .gogox-mobile-groups .g-heading::after {
    content: "";
    display: inline-block;
    width: 16px;
    height: 16px;
    margin-left: 12px;
    background-color: #0088BF;
    /* chevron-right.svg masked with the active color so it can tint */
    -webkit-mask-image: url("assets/icons/chevron-right.svg");
            mask-image: url("assets/icons/chevron-right.svg");
    -webkit-mask-repeat: no-repeat;
            mask-repeat: no-repeat;
    -webkit-mask-position: center;
            mask-position: center;
    -webkit-mask-size: contain;
            mask-size: contain;
    transition: transform 0.2s ease;
    transform: rotate(0deg);
  }
  /* Items without a nested <ul> (e.g. Investor Relations) get no chevron
     and no cursor:pointer — the heading itself is the link. */
  .gogox-mobile-groups > li:not(:has(> ul)) .g-heading {
    cursor: default;
  }
  .gogox-mobile-groups > li:not(:has(> ul)) .g-heading::after {
    display: none;
  }
  /* Expanded state: rotate chevron 90° and show sub-list */
  .gogox-mobile-groups > li.is-expanded > .g-heading::after {
    transform: rotate(90deg);
  }

  /* Sub-list collapsed by default. Transparent bg, generous touch targets. */
  .gogox-mobile-groups > li > ul {
    display: none;
    padding: 4px 0 12px;
    background: transparent;
    margin: 0;
  }
  .gogox-mobile-groups > li.is-expanded > ul {
    display: block;
  }
  .gogox-mobile-groups > li > ul > li {
    list-style: none !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 0 !important;
  }
  .gogox-mobile-groups > li > ul > li > a {
    display: block !important;
    padding: 14px 4px !important; /* 14 + 14 + 20 line-height ≈ 48px target */
    color: #00121A;
    font-size: 15px;
    line-height: 20px;
    text-decoration: none;
  }
  /* Tertiary items (.indent — e.g. Pricing / Premium Van / Pet Transport /
     Airport, nested under GoGoVan): no en-dash; indented instead so the
     hierarchy reads like the Lalamove mobile nav. */
  .gogox-mobile-groups > li > ul > li.indent > a {
    padding-left: 24px !important;
  }
  .gogox-mobile-groups > li > ul > li > a:hover,
  .gogox-mobile-groups > li > ul > li > a:active {
    color: #0088BF;
  }

  .gogox-mobile-drawer__actions {
    margin-top: 24px;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  .gogox-mobile-cta {
    display: block;
    padding: 12px 16px;
    border: 1.5px solid #0088BF;
    border-radius: 40px;
    background: #0088BF;
    color: #fff !important;
    text-align: center;
    text-decoration: none;
    font-weight: 700;
    font-size: 14px;
  }
  .gogox-mobile-cta--outline {
    background: transparent;
    color: #0088BF !important;
  }
  /* Language button at the bottom of the menu panel — full-width outline
     button. Tapping shows the lang panel (handled by JS). */
  .gogox-mobile-lang-btn {
    display: block;
    width: 100%;
    margin: 16px 0 0;
    padding: 14px 16px;
    background: transparent;
    color: #7a7a7a;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    text-align: center;
    border: 2px solid #D7DDE0;
    border-radius: 99px;
    cursor: pointer;
  }
  .gogox-mobile-lang-btn:hover { color: #0088BF; border-color: #0088BF; }

  /* Lang-panel options list (the "page" shown after tapping the lang button) */
  .gogox-mobile-lang-list {
    list-style: none !important;
    margin: 0;
    padding: 0;
  }
  .gogox-mobile-lang-list li {
    border-bottom: 1px solid #E3E7EC;
  }
  .gogox-mobile-lang-list li a,
  .gogox-mobile-lang-list li > span {
    display: block;
    padding: 18px 4px;
    color: #00121A;
    font-size: 15px;
    text-decoration: none;
  }
  .gogox-mobile-lang-list li a:hover { color: #0088BF; }
  .gogox-mobile-lang-list li.is-active > span {
    font-weight: 700;
    color: #0088BF;
  }
  .gogox-mobile-lang-list li.is-disabled > span { color: #A0A8B0; }
  .gogox-mobile-lang-list li.is-disabled small { color: #B0B6BB; font-size: 12px; margin-left: 4px; }

  body.gogox-drawer-open { overflow: hidden; }
}

/* ----- CATEGORY GRID: 6 horizontal cells, full-width grey bg, content centered ----- */
.elementor-element-s04cat {
  display: grid !important;
  grid-template-columns: repeat(6, 1fr) !important;
  gap: 24px !important;
  padding-left: max(24px, calc((100% - 1200px) / 2)) !important;
  padding-right: max(24px, calc((100% - 1200px) / 2)) !important;
  padding-top: 0 !important;
  padding-bottom: 72px !important;
  max-width: none !important;
  width: auto !important;
  margin: 0 !important;
}
.elementor-element-c04c01,
.elementor-element-c04c02,
.elementor-element-c04c03,
.elementor-element-c04c04,
.elementor-element-c04c05,
.elementor-element-c04c06 {
  width: auto !important;
  min-width: 0 !important;
  text-align: center;
}

/* ----- HERO: content starts at boxed-container left edge, not viewport edge ----- */
.elementor-element-s01hero {
  padding-left: max(32px, calc((100% - 1264px) / 2 + 32px)) !important;
}
.elementor-element-c01hbox {
  max-width: 540px !important;
  width: 540px !important;
  flex: 0 0 540px !important;
}

/* ----- SERVICE TIERS: 3 horizontal cards (s07tir is e-con-boxed so grid goes on .e-con-inner) ----- */
.elementor-element-s07tir > .e-con-inner {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) !important;
  gap: 40px !important;
  max-width: 1080px !important;
  width: 100% !important;
  margin: 0 auto !important;
  padding: 0 24px 72px !important;
}
.elementor-element-s07tir {
  display: block !important;
  padding: 0 !important;
}
.elementor-element-c07t01,
.elementor-element-c07t02,
.elementor-element-c07t03 {
  width: auto !important;
  min-width: 0 !important;
  min-height: 370px !important;
  padding: 40px !important;
  background: #FFFFFF !important;
  border: 1.5px solid #E3E7EC !important;
  border-radius: 4px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  transition: box-shadow 0.3s ease;
}
.elementor-element-c07t01:hover,
.elementor-element-c07t02:hover,
.elementor-element-c07t03:hover {
  box-shadow: 0 30px 30px rgba(0, 18, 26, 0.03) !important;
}

/* ----- TIER ICON: fixed 72×72 grey circle, no stretch ----- */
.elementor-element-c07ic1,
.elementor-element-c07ic2,
.elementor-element-c07ic3 {
  width: 72px !important;
  min-width: 72px !important;
  max-width: 72px !important;
  height: 72px !important;
  min-height: 72px !important;
  max-height: 72px !important;
  flex: 0 0 72px !important;
  border-radius: 50% !important;
  background: #EBEBEB !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin: 0 auto 24px !important;
  padding: 0 !important;
  aspect-ratio: 1 / 1 !important;
}
.elementor-element-c07ic1 > .e-con-inner,
.elementor-element-c07ic2 > .e-con-inner,
.elementor-element-c07ic3 > .e-con-inner {
  padding: 0 !important;
  width: auto !important;
}
.elementor-element-c07ic1 img,
.elementor-element-c07ic2 img,
.elementor-element-c07ic3 img {
  height: 45px !important;
  width: auto !important;
  max-width: 45px !important;
}

/* ----- TIGHT HEADING → TEXT SPACING (info sections) ----- */
.elementor-element-s03wsg,
.elementor-element-s06cot,
.elementor-element-s09cta {
  gap: 8px !important;
}
.elementor-element-s03wsg .elementor-widget-heading,
.elementor-element-s06cot .elementor-widget-heading,
.elementor-element-s09cta .elementor-widget-heading,
.elementor-element-c02vpc .elementor-widget-heading {
  margin-bottom: 0 !important;
}
.elementor-element-s09cta .elementor-widget-text-editor {
  margin-bottom: 16px !important;
}

/* ----- ACCORDION: boxed items, custom +/− indicator, #006E9B active ----- */
.gogox-accordion .elementor-accordion {
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.gogox-accordion .elementor-accordion-item {
  background: #FFFFFF;
  border: 1.5px solid #E3E7EC !important;
  border-radius: 4px;
  overflow: hidden;
  transition: all 0.2s ease;
}
.gogox-accordion .elementor-tab-title {
  background: transparent !important;
  color: #000000 !important;
  padding: 25px 40px !important;
  border: none !important;
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 20px !important;
  font-weight: 400 !important;
  line-height: 32px !important;
}
.gogox-accordion .elementor-tab-title .elementor-accordion-title,
.gogox-accordion .elementor-tab-title a {
  order: 1;
  color: inherit !important;
}

/* Hide Elementor's default +/− SVG icons */
.gogox-accordion .elementor-accordion-icon .e-font-icon-svg,
.gogox-accordion .elementor-accordion-icon svg {
  display: none !important;
}
.gogox-accordion .elementor-accordion-icon-closed,
.gogox-accordion .elementor-accordion-icon-opened {
  display: none !important;
}

/* Custom indicator: blue + made of two 12×2 bars, vertical bar rotates to form − */
.gogox-accordion .elementor-accordion-icon {
  order: 2;
  width: 12px !important;
  height: 12px !important;
  position: relative;
  display: inline-block !important;
  margin: 10px 0 0 auto !important;
  flex-shrink: 0;
  color: transparent !important;
}
.gogox-accordion .elementor-accordion-icon::before {
  content: "";
  position: absolute;
  width: 12px;
  height: 2px;
  background: #0088BF;
  top: 5px;
  left: 0;
  transition: all 0.2s ease;
}
.gogox-accordion .elementor-accordion-icon::after {
  content: "";
  position: absolute;
  width: 2px;
  height: 12px;
  background: #0088BF;
  top: 0;
  left: 5px;
  transform: rotate(0deg);
  transition: all 0.2s ease;
}

/* Active state */
.gogox-accordion .elementor-tab-title.elementor-active {
  background: #006E9B !important;
  color: #FFFFFF !important;
  border-color: transparent !important;
}
.gogox-accordion .elementor-tab-title.elementor-active .elementor-accordion-title,
.gogox-accordion .elementor-tab-title.elementor-active a {
  color: #FFFFFF !important;
}
.gogox-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon::before,
.gogox-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon::after {
  background: #FFFFFF;
}
.gogox-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon::after {
  transform: rotate(90deg); /* makes + into − (two horizontal bars overlap) */
}
.gogox-accordion .elementor-accordion-item:has(.elementor-tab-title.elementor-active) {
  background: #006E9B !important;
  border-color: #006E9B !important;
}
.gogox-accordion .elementor-tab-content {
  padding: 0 40px 25px !important;
  border: none !important;
  color: #7a7a7a !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 15px !important;
  line-height: 1.6 !important;
}
.gogox-accordion .elementor-accordion-item:has(.elementor-tab-title.elementor-active) .elementor-tab-content {
  background: #006E9B !important;
  color: #FFFFFF !important;
}

/* ----- PROMO BANNER: fixed 84px height, image cropped to cover ----- */
.elementor-element-s10prm {
  min-height: 84px !important;
  max-height: 84px !important;
  overflow: hidden !important;
}
.elementor-element-c10l,
.elementor-element-c10m,
.elementor-element-c10r {
  min-height: 84px !important;
  max-height: 84px !important;
  padding: 0 !important;
}
.elementor-element-c10m .elementor-widget-image,
.elementor-element-c10m .elementor-widget-image .elementor-widget-container,
.elementor-element-c10m .elementor-widget-image a,
.elementor-element-c10m .elementor-image {
  height: 84px !important;
  display: block !important;
}
.elementor-element-c10m img {
  height: 84px !important;
  width: 100% !important;
  object-fit: cover !important;
  object-position: center !important;
}

/* ----- Responsive fallbacks ----- */
@media (max-width: 900px) {
  .elementor-element-s04cat {
    grid-template-columns: repeat(3, 1fr) !important;
    padding-left: 24px !important;
    padding-right: 24px !important;
  }
  .elementor-element-s07tir > .e-con-inner {
    grid-template-columns: 1fr !important;
  }
  .elementor-element-c01hbox {
    max-width: 100% !important;
    width: auto !important;
    flex: 1 1 auto !important;
  }
  .elementor-element-s01hero {
    padding-left: 32px !important;
  }
}

/* ====================================================================
   gogox_vehicles — "Our vehicles" section.
   Cards in dark blue (#034E8A) with vehicle image overflowing the top,
   yellow vehicle name, 3-row spec table, feature bullets w/ yellow checks.
   ==================================================================== */
.gogox-vehicles {
  width: 100%;
  padding: 60px 28px;
}
.gogox-vehicles-inner {
  max-width: 1224px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 64px;
  align-items: center;
}
/* Carousel mode tightens the intro -> cards gap: the viewport already reserves
   60px top padding for the image overhang, so the full 64px inner gap reads as
   too much air below the intro. Grid mode keeps 64px (its overhang cushions
   into this gap). */
.gogox-vehicles--carousel .gogox-vehicles-inner { gap: 24px; }
/* Tight heading-band-style pair: heading + intro packed at 8px. */
.gogox-vehicles-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  max-width: 1024px;
  width: 100%;
}
.gogox-vehicles-heading {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 32px;
  line-height: 40px;
  color: #00121A;
  text-align: center;
}
.gogox-vehicles-intro {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 16px;
  line-height: 1.6;
  color: #7a7a7a;
  text-align: center;
}
.gogox-vehicles-intro-highlight {
  color: #0088BF;
  font-weight: 700;
}
.gogox-vehicles-grid {
  width: 100%;
  display: grid;
  gap: 88px 24px; /* extra row gap to leave room for the overflowing top image */
}
.gogox-vehicles--cols-4 .gogox-vehicles-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gogox-vehicles--cols-3 .gogox-vehicles-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gogox-vehicles--cols-2 .gogox-vehicles-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

.gogox-vehicle-card {
  position: relative;
  background: #034E8A;
  border-radius: 8px;
  padding: 96px 24px 48px;
  display: flex;
  flex-direction: column;
  gap: 36px;
  align-items: center;
  color: #FFFFFF;
}
.gogox-vehicle-card-img {
  position: absolute;
  top: -60px;
  left: 0;
  width: 100%;
  height: 126px;
  pointer-events: none;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.gogox-vehicle-card-img img {
  max-width: 80%;
  max-height: 100%;
  width: auto;
  height: auto;
  display: block;
  object-fit: contain;
}
.gogox-vehicle-card-body {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.gogox-vehicle-card-name {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 900;
  font-size: 24px;
  line-height: 32px;
  color: #FFDD00;
}
.gogox-vehicle-card-specs {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.gogox-vehicle-card-spec-row {
  display: flex;
  align-items: flex-start;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 18px;
  line-height: 28px;
}
.gogox-vehicle-card-spec-row dt {
  flex: 0 0 84px;
  color: rgba(255, 255, 255, 0.6);
  font-weight: 400;
  margin: 0;
  padding: 0;
}
.gogox-vehicle-card-spec-row dd {
  flex: 1 1 0;
  min-width: 0;
  color: #FFFFFF;
  margin: 0;
  padding: 0;
}
.gogox-vehicle-card-features {
  list-style: none;
  margin: 16px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.gogox-vehicle-card-features li {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 14px;
  line-height: 24px;
  color: #FFFFFF;
}

/* ---- Platform-fee announcement banner (platform_support pages) -------------
   These pages use plain image widgets as their banner rather than gogox_hero,
   so they rendered taller than every other HK hero (534px vs the VAS hero's
   480px at 1425px wide). Clamp them to the VAS compact height — but ONLY once
   the viewport is wide enough that the clamp is a *vertical* crop. The artwork
   has its headline baked in, so below ~1280px (where 480px would force a
   horizontal crop) the image scales naturally instead and nothing is cut. TC
   has no separate phone artwork the way EN does, which is why this has to be
   crop-safe rather than a plain object-fit: cover at every width. */
.elementor-element-platsup_banner_d img,
.elementor-element-platsup_banner_m img,
.elementor-element-hkzhplatsup_banner img {
  width: 100%;
  height: auto;
  display: block;
}
/* !important because Elementor's frontend.min.css ships `.elementor img
   { height: auto }` at the same specificity but loads later. */
@media (min-width: 1280px) {
  .elementor-element-platsup_banner_d img,
  .elementor-element-hkzhplatsup_banner img {
    height: 480px !important;   /* = .gogox-hero-section--compact */
    object-fit: cover;
    object-position: center;
  }
}

/* ---- Mobile comparison table (mobile_table switch) -------------------------
   The same items repeater rendered as a compact 4-column table for phones,
   where the stacked cards get very tall. Desktop never shows it; phones show
   it INSTEAD of the cards, and the vehicle images are dropped entirely. */
.gogox-vehicles-mtable-wrap { display: none; }
@media (max-width: 768px) {
  .gogox-vehicles-mtable-wrap { display: block; }
  /* container class (set by the widget) hides the cards — no :has() needed */
  .gogox-vehicles--has-mtable .gogox-vehicles-grid,
  .gogox-vehicles--has-mtable .gogox-vehicles-carousel { display: none !important; }
  .gogox-vehicles-mtable-wrap {
    border: 1px solid #E6E9ED;
    border-radius: 16px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
    background: #FFFFFF;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .gogox-vehicles-mtable {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: "proxima-nova", sans-serif;
    font-size: 13px;
    line-height: 19px;
  }
  /* The capacity label carries a <br> so the desktop card shows 車廂/尺寸 on two
     lines; in this table the column is wide enough, so keep it on one line. */
  .gogox-vehicles-mtable thead th br { display: none; }
  /* Brand-blue header, same tone as the fee / compensation / bad-weather tables. */
  .gogox-vehicles-mtable thead th {
    background: #0088BF;
    color: #FFFFFF;
    font-weight: 600;
    text-align: left;
    padding: 9px 8px;
    font-size: 14px;              /* same header size as the fee tables */
    line-height: 19px;
    border-bottom: 1px solid #0088BF;
    white-space: nowrap;
  }
  .gogox-vehicles-mtable tbody th,
  .gogox-vehicles-mtable tbody td {
    padding: 10px 10px;
    border-bottom: 1px solid #F0F2F5;
    color: #00121A;
    vertical-align: top;
    text-align: left;
  }
  .gogox-vehicles-mtable tbody tr:last-child th,
  .gogox-vehicles-mtable tbody tr:last-child td { border-bottom: 0; }
  .gogox-vehicles-mtable tbody th { font-weight: 700; white-space: nowrap; }
  .gogox-vehicles-mtable tbody tr:nth-of-type(even) th,
  .gogox-vehicles-mtable tbody tr:nth-of-type(even) td { background: #F2F5F7; }
}
.gogox-vehicle-card-check {
  flex: 0 0 20px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.gogox-vehicle-card-check svg {
  display: block;
}
.gogox-vehicle-card-feature-text {
  flex: 1 1 0;
  min-width: 0;
}
.gogox-vehicles-cta {
    text-align: center;
    margin-top: 40px;
}
.gogox-vehicles-cta-btn {
    display: inline-block;
    background: #0088bf;
    color: #fff;
    font-size: 1rem;
    font-weight: 700;
    padding: 14px 48px;
    border-radius: 40px;
    text-decoration: none;
    transition: background 0.2s;
}
.gogox-vehicles-cta-btn:hover { background: #005f85; }

/* Outline variant of the vehicles CTA — toggled via the cta_style control
   on gogox_vehicles. Outline reads lighter, so the top margin is tightened
   so the button sits closer to the pricing cards above. */
.gogox-vehicles-cta--outline {
  margin-top: 16px;
}
.gogox-vehicles-cta--outline .gogox-vehicles-cta-btn {
  background: transparent;
  color: #0088BF;
  border: 2px solid #0088BF;
  border-radius: 40px;
  padding: 16px 40px;
}
.gogox-vehicles-cta--outline .gogox-vehicles-cta-btn:hover {
  background: #0088BF;
  color: #FFFFFF;
}

/* Tablet — collapse to 2 columns */
@media (max-width: 1024px) {
  .gogox-vehicles--cols-4 .gogox-vehicles-grid,
  .gogox-vehicles--cols-3 .gogox-vehicles-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
/* Mobile — horizontal scroll-snap carousel (swipeable). */
@media (max-width: 600px) {
  .gogox-vehicles { padding: 48px 0; } /* zero side padding so the rail bleeds edge-to-edge */
  .gogox-vehicles-inner { gap: 40px; }
  .gogox-vehicles-head { padding: 0 20px; }
  .gogox-vehicles-heading { font-size: 28px; line-height: 36px; }
  .gogox-vehicles-intro { font-size: 15px; line-height: 1.6; }

  .gogox-vehicles-grid {
    display: flex;
    grid-template-columns: none; /* override desktop grid */
    gap: 16px;
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    scroll-padding: 0 20px;
    padding: 88px 20px 8px; /* top padding leaves room for the overflowing vehicle image */
    margin: -88px 0 0; /* cancel the top padding visually so card spacing matches desktop */
    scrollbar-width: none;
  }
  .gogox-vehicles-grid::-webkit-scrollbar { display: none; }

  .gogox-vehicles-grid > .gogox-vehicle-card {
    flex: 0 0 auto;
    width: min(78vw, 300px);
    scroll-snap-align: center;
  }
}

/* ====================================================================
   gogox_funnel — "What can we help you with?" horizontal-card section.
   Black bg, 3 cards in a row, each with a left image (101 × 210, rounded
   left corners), yellow title and white body. Mobile collapses to a
   horizontal scroll-snap carousel (matches gogox_vehicles pattern).
   ==================================================================== */
.gogox-funnel {
  width: 100%;
  padding: 60px 28px;
}
/* Classic = the dark theme: black section by default (per Figma 2573:2814).
   An inline bg_color setting still wins; the service-cards variant + the
   page-scoped app-download funnel override this with their own light bg. */
.gogox-funnel:not(.gogox-funnel--service-cards) {
  background-color: #000;
}
.gogox-funnel-inner {
  max-width: 1224px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 64px;
  align-items: center;
}
.gogox-funnel-heading {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 32px;
  line-height: 40px;
  color: #FFFFFF;
  text-align: center;
  width: 100%;
}
.gogox-funnel-grid {
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  justify-content: center;
}
/* Classic (dark) cards — image-top, centered (per Figma 2573:2814).
   cols-N → N cards per row on desktop; cards grow with a hard min-width.
   Responsive: 4→2 at ≤1024px, →vertical list at ≤767px (see media queries). */
.gogox-funnel--cols-4 .gogox-funnel-card { flex: 1 1 calc(25% - 18px); }
.gogox-funnel--cols-3 .gogox-funnel-card { flex: 1 1 calc(33.333% - 16px); }
.gogox-funnel--cols-2 .gogox-funnel-card { flex: 1 1 calc(50% - 12px); }

.gogox-funnel-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 8px;
  padding: 24px 16px;
  background: rgba(3, 78, 138, 0.35);
  border-radius: 8px;
  text-decoration: none;
  color: inherit;
  min-width: 240px;
  transition: transform 0.15s ease, background-color 0.15s ease;
}
/* Hover (desktop/tablet card view): background fades to a richer blue and the
   "Learn more" CTA reveals from the bottom, expanding in-flow so it pushes the
   title + description up inside the card. (Mobile list hides the CTA — it uses
   the chevron instead; touch has no hover.) */
a.gogox-funnel-card:hover {
  background-color: rgba(3, 78, 138, 0.6) !important; /* Figma hover — beats the inline card bg */
}
.gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-cta {
  display: block;
  overflow: hidden;
  max-height: 0;
  margin-top: 0;
  opacity: 0;
  transform: translateY(8px);
  color: #FFFFFF;
  font-family: "proxima-nova", sans-serif;
  font-weight: 700;
  font-size: 16px;
  line-height: 1.4;
  text-align: center;
  transition: max-height 0.28s ease, margin-top 0.28s ease, opacity 0.2s ease, transform 0.28s ease;
}
/* "Learn More" arrow — the new bold chevron SVG (same icon as the mobile list),
   masked white so it inherits the CTA color. Replaces the old literal → glyph. */
.gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-cta::after {
  content: "";
  display: inline-block;
  width: 11px;
  height: 14px;
  margin-left: 8px;
  vertical-align: -2px;
  background-color: #FFFFFF;
  -webkit-mask-image: url("assets/icons/chevron-right-bold.svg");
          mask-image: url("assets/icons/chevron-right-bold.svg");
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
}
.gogox-funnel:not(.gogox-funnel--service-cards) a.gogox-funnel-card:hover .gogox-funnel-card-cta {
  max-height: 2.4em;
  margin-top: 12px;
  opacity: 1;
  transform: translateY(0);
}
/* Cards stretch to equal height in the row; centring the content vertically
   means the CTA reveal recentres it — the title/description shift up. */
.gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card { justify-content: center; }
/* Floor the card height so the row stays put when the hovered card's icon
   collapses. Without this the tallest card (which sets the flex-stretch row
   height) shrinks below the others on hover and the whole row jumps. The
   app-download funnel keeps its own min-height:160px via !important. */
.gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card { min-height: 320px; }
/* Constant card height on hover: collapse the icon (it frees more space than the
   CTA needs), so revealing "Learn more" never grows the card. The collapsing
   icon also slides the title/description up. App-download funnels keep their
   icon via their own !important sizing. */
.gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-img {
  flex: 0 0 128px;
  width: 128px;
  height: 128px;
  transition: flex-basis 0.28s ease, height 0.28s ease, opacity 0.2s ease, margin 0.28s ease;
}
.gogox-funnel:not(.gogox-funnel--service-cards) a.gogox-funnel-card:hover .gogox-funnel-card-img {
  flex-basis: 0;
  height: 0;
  margin: 0;
  opacity: 0;
}
/* Whole card is the link; no inline CTA text on the centered design. A chevron
   appears only in the mobile list layout (see ≤767px media query). */
.gogox-funnel-card-cta { display: none; }
.gogox-funnel-card-img {
  flex: 0 0 80px;
  width: 80px;
  height: 80px;
  margin: 0 auto;
  overflow: hidden;
}
.gogox-funnel-card-img img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}
.gogox-funnel-card-body {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 0;
}
.gogox-funnel-card-title {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 900;
  font-size: 24px;
  line-height: 32px;
  color: #FFDD00;
  text-align: center;
}
.gogox-funnel-card-desc {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 18px;
  line-height: 28px;
  color: #FFFFFF;
  text-align: center;
}
/* Keep the app-download funnels (hmappdl1 / hmappdl1d, "Deliver made easy with
   the app") on their bespoke horizontal layout — they predate this redesign and
   define their look via their own scoped overrides below. Neutralize the new
   classic card defaults (column / centered text) and the mobile-list
   chevron + divider so they don't leak in. */
.home .elementor-element-hmappdl1 .gogox-funnel-card,
.home .elementor-element-hmappdl1d .gogox-funnel-card {
  flex-direction: row !important;
  text-align: left !important;
  border-bottom: none !important;
}
.home .elementor-element-hmappdl1 .gogox-funnel-card-body,
.home .elementor-element-hmappdl1d .gogox-funnel-card-body {
  align-items: flex-start !important;
  text-align: left !important;
}
.home .elementor-element-hmappdl1 a.gogox-funnel-card::after,
.home .elementor-element-hmappdl1d a.gogox-funnel-card::after {
  content: none !important;
}
/* ── Classic responsive: 4 → 2 (≤1024px) → list (≤767px). Scoped away from the
   service-cards variant, which has its own responsive rules. ── */
@media (max-width: 1024px) {
  .gogox-funnel:not(.gogox-funnel--service-cards).gogox-funnel--cols-4 .gogox-funnel-card,
  .gogox-funnel:not(.gogox-funnel--service-cards).gogox-funnel--cols-3 .gogox-funnel-card {
    flex: 1 1 calc(50% - 12px);
  }
}
@media (max-width: 767px) {
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-grid {
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 0;
  }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card {
    flex: 1 1 100% !important;
    width: 100% !important;
    min-width: 0 !important;
    flex-direction: row !important;
    align-items: center !important;
    text-align: left;
    gap: 16px !important;
    padding: 16px 4px !important;
    background: transparent !important;   /* mobile list: no card fill */
    border-radius: 0 !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);  /* divider between rows */
    /* Fixed row height so every list item is the same regardless of how the
       text wraps at different phone widths (80px image + padding; tall enough
       to clear a 3-line description). */
    min-height: 128px !important;
  }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card:last-child { border-bottom: none; }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-title { font-size: 20px; line-height: 26px; }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-desc { font-size: 16px; line-height: 22px; }
  /* Mobile list uses the chevron, not the reveal CTA. */
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-cta { display: none !important; }
  /* No hover effect on mobile — touch has no hover, and a tap shouldn't fade
     the bg or collapse the icon. Neutralise every desktop hover rule (each
     uses !important / equal specificity, so these need !important too). */
  .gogox-funnel:not(.gogox-funnel--service-cards) a.gogox-funnel-card:hover {
    transform: none !important;
    background-color: transparent !important;
  }
  .gogox-funnel:not(.gogox-funnel--service-cards) a.gogox-funnel-card:hover .gogox-funnel-card-img {
    flex-basis: 80px !important;
    height: 80px !important;
    margin: 0 !important;
    opacity: 1 !important;
  }
  /* Compact image for the list layout — the desktop 128px is too wide for a
     phone row (it overflows and pushes the chevron off-screen). */
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-img {
    flex: 0 0 80px !important;
    width: 80px !important;
    height: 80px !important;
    margin: 0;
  }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-body {
    flex: 1 1 0;
    min-width: 0;
    align-items: flex-start;
    text-align: left;
    gap: 4px;
  }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-title { text-align: left; }
  .gogox-funnel:not(.gogox-funnel--service-cards) .gogox-funnel-card-desc { text-align: left; }
  /* Right-side chevron indicator for the list rows (the whole row is the link). */
  .gogox-funnel:not(.gogox-funnel--service-cards) a.gogox-funnel-card::after {
    content: "";
    flex: 0 0 auto;
    width: 10px;
    height: 16px;
    margin-left: 8px;
    background-color: #FFFFFF;
    -webkit-mask-image: url("assets/icons/chevron-right-bold.svg");
            mask-image: url("assets/icons/chevron-right-bold.svg");
    -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
    -webkit-mask-position: center; mask-position: center;
    -webkit-mask-size: contain; mask-size: contain;
  }
}

/* Homepage "How can we help" / "A New Way to Deliver" — viewport-split widgets.
   Two parallel funnel widgets share the same slot in _elementor_data:
     hmsvc1  → mobile only ("How can we help you with?" + new branded
               illustrations: Personal Delivery / Business Solutions /
               Moving Services / Delivery-Partner Signup)
     hmsvc1d → desktop only (identical to staging.gogox.com: "A New Way
               to Deliver" + GoGoVan / GoGoX Business / Enterprise
               Solutions / GoGoX Moving with flunnel-ggv/-ggb.png)
   This avoids forcing the same image-aspect content on both viewports. */
/* Consolidated to one responsive funnel: the new classic style handles all
   widths, so hmsvc1d is always shown and the legacy mobile-only twin hmsvc1 is
   hidden (kept in the DB for now; can be removed from the page later). */
.home .elementor-element-hmsvc1 { display: none !important; }
@media (min-width: 601px) {

  /* Section background: light gray to match "Deliver made easy with the app"
     section (hmappdl1d). Heading color flipped to dark navy for legibility
     on the light bg. Cards stay dark navy → strong contrast pop. */
  .gogox-funnel.gogox-funnel--service-cards {
    background: #F4F4F4 !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-heading {
    color: #00121A !important;
  }

  /* Desktop hmsvc1d cards — service entry points rendered as outlined
     button-style cards: transparent bg, brand-blue rounded border, blue
     title, dark navy description, chevron ›  on the far right. Whole
     card is the link <a>. Hover fills with brand blue.
     Padding + flex gap tuned to match Austin's desktop margin reference. */
  .gogox-funnel--service-cards .gogox-funnel-card {
    background-color: #FFFFFF !important;
    border: 2px solid #0088BF !important;
    border-radius: 14px !important;
    /* T/R/B/L — chevron slot on the right. Symmetric L-padding (40)
       and gap (40) so the icon sits centered between the card frame
       and the text. */
    padding: 22px 56px 22px 40px !important;
    gap: 40px !important;
    min-height: 130px !important;
    position: relative;
    align-items: center !important;
    transition: background-color 0.2s ease, color 0.2s ease, transform 0.2s ease;
  }
  .gogox-funnel--service-cards .gogox-funnel-card:hover {
    background-color: #F7FBFE !important;
    transform: translateY(-1px);
  }
  .gogox-funnel--service-cards .gogox-funnel-card-img {
    flex: 0 0 106px !important;   /* +5% again (96→101→106px) per Austin */
    width: 106px !important;
    height: 106px !important;
    border-radius: 8px !important;
    /* Center the illustration within its box — vertical middle of the
       card, and horizontally centered between frame and text via the
       symmetric padding/gap on the card above. */
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    align-self: center !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-img img {
    object-fit: contain !important;
    max-width: 100% !important;
    max-height: 100% !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-body {
    padding: 0 !important;
    gap: 4px !important;
    justify-content: center;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-title {
    color: #0088BF !important;
    font-family: "proxima-nova", sans-serif !important;
    font-weight: 700 !important;
    font-size: 20px !important;
    line-height: 26px !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-desc {
    color: #00121A !important;
    font-family: "proxima-nova", sans-serif !important;
    font-weight: 400 !important;
    font-size: 15px !important;
    line-height: 22px !important;
  }
  /* Right-side chevron indicator — repurposes the hover CTA element with
     pure CSS so it's always visible. Hides the "Learn More →" label
     text via font-size:0, then injects "›" via ::after. */
  .gogox-funnel--service-cards .gogox-funnel-card-cta {
    opacity: 1 !important;
    transform: none !important;
    position: absolute !important;
    right: 22px !important;
    top: 50% !important;
    bottom: auto !important;
    left: auto !important;
    transform: translateY(-50%) !important;
    color: #0088BF !important;
    font-size: 0 !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-cta::after {
    content: "›";
    font-size: 28px;
    font-weight: 700;
    line-height: 1;
    color: #0088BF;
  }
}

/* "Deliver made easy with the app" — viewport-split (same pattern as
   hmsvc1 / hmsvc1d above):
     hmappdl1  → mobile only (dark navy yellow rectangular cards)
     hmappdl1d → desktop only (Uber-style white cards with QR codes) */
@media (max-width: 600px) {
  .home .elementor-element-hmappdl1d { display: none !important; }
}
@media (min-width: 601px) {
  .home .elementor-element-hmappdl1 { display: none !important; }

  /* Section bg → very light gray (instead of black) for the Uber look. */
  .home .elementor-element-hmappdl1d .gogox-funnel {
    background: #F4F4F4 !important;
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-heading {
    /* Inherits .gogox-funnel-heading base (proxima-nova 32px / weight 400 / line 40 /
       center). Only override is text color — bg is light here so we need
       dark navy text instead of the default white. */
    color: #00121A !important;
  }
  /* White card with [icon | QR] on the left, [title + scan-text] center,
     and a down-arrow ↓ on the far right. Icon is injected via ::before
     because the funnel widget only supports one image per item (the QR).
     The icon URLs are taken from the mobile hmappdl1 cards (already in
     WP Media library). */
  .home .elementor-element-hmappdl1d .gogox-funnel-card {
    background: #FFFFFF !important;
    padding: 20px 24px !important;
    gap: 0 !important; /* flush icon+QR; explicit margin on body below for text spacing */
    min-height: 160px !important;
    border-radius: 4px !important;
    position: relative;
    align-items: center !important;
  }
  /* App icon injected before the QR. Per-card via nth-child. */
  .home .elementor-element-hmappdl1d .gogox-funnel-grid .gogox-funnel-card::before {
    content: "";
    flex: 0 0 110px;   /* +5% again per Austin (100→105→110px) */
    width: 110px;
    height: 110px;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
    border-radius: 20px;
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-grid .gogox-funnel-card:nth-child(1)::before {
    background-image: url("/wp-content/themes/gogox/assets/homepage/Homepage_Optimisation-34.png");
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-grid .gogox-funnel-card:nth-child(2)::before {
    background-image: url("/wp-content/themes/gogox/assets/homepage/Homepage_Optimisation-33.png");
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-img {
    flex: 0 0 90px !important;
    width: 90px !important;
    height: 90px !important;
    border-radius: 0 !important;
    /* New QR PNGs (v0.4.25/26) have zero whitespace padding, so we can
       pull the QR tight against the icon. Negative margin overlaps the
       icon's rounded corner space without touching its dark pattern. */
    margin-left: -12px !important;
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-img img {
    object-fit: contain !important;
    width: 100% !important;
    height: 100% !important;
  }
  /* No hover animation on the app-download cards (送貨定接單？立即下載！):
     the global funnel hover fades the bg blue + collapses the image to 0,
     which made the QR code disappear on hover. Pin the card white and the
     QR at its normal 90px so nothing moves on hover. Per Austin. */
  .home .elementor-element-hmappdl1d a.gogox-funnel-card:hover {
    background-color: #FFFFFF !important;
  }
  .home .elementor-element-hmappdl1d a.gogox-funnel-card:hover .gogox-funnel-card-img {
    flex-basis: 90px !important;
    width: 90px !important;
    height: 90px !important;
    margin-left: -12px !important;
    opacity: 1 !important;
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-body {
    padding: 0 72px 0 0 !important; /* reserve right space for arrow (more breathing room) */
    margin-left: 24px !important;  /* gap between QR and text (was flex gap) */
    gap: 4px !important;
    justify-content: center;
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-title {
    color: #00121A !important;
    font-family: "proxima-nova", sans-serif !important;
    font-weight: 700 !important;
    font-size: 20px !important;       /* was 22px — −10% per design */
    line-height: 26px !important;     /* was 28px — proportional */
    text-align: left !important;      /* keep "Download GoGoX Partner App" left-aligned when it wraps */
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-desc {
    color: #6B7280 !important;
    font-family: "proxima-nova", sans-serif !important;
    font-weight: 400 !important;
    font-size: 15px !important;
    line-height: 22px !important;
  }
  /* Right-side arrow indicator. Repurposes the hover CTA element with
     pure CSS — always visible, positioned at card right edge. */
  .home .elementor-element-hmappdl1d .gogox-funnel-card-cta {
    opacity: 1 !important;
    transform: none !important;
    position: absolute !important;
    right: 32px !important;
    top: 50% !important;
    bottom: auto !important;
    left: auto !important;
    transform: translateY(-50%) !important;
    color: #00121A !important;
    font-size: 0 !important; /* hide "Learn More →" text */
  }
  .home .elementor-element-hmappdl1d .gogox-funnel-card-cta::after {
    content: "↓";
    font-size: 28px;
    font-weight: 400;
    color: #0088BF;
  }
}

/* Mobile — full-width rectangular cards (1 col), horizontal internal layout
   (image left 80×80, body right). Larger title/desc fonts because the wider
   card frees up horizontal space. The 4 cards stack vertically and the user
   scrolls past the hero to see them all — Grab-style funnel list pattern.
   `!important` outweighs the `:nth-child(1):nth-last-child(N)` quantity-query
   rules above. */
@media (max-width: 600px) {
  .gogox-funnel { padding: 28px 16px; }
  .gogox-funnel-inner { gap: 20px; }
  .gogox-funnel-heading { font-size: 28px; line-height: 36px; }
  .gogox-funnel-grid {
    gap: 12px;
    flex-direction: column;
    flex-wrap: nowrap;
  }
  .gogox-funnel--cols-4 .gogox-funnel-card,
  .gogox-funnel--cols-3 .gogox-funnel-card,
  .gogox-funnel--cols-2 .gogox-funnel-card,
  .gogox-funnel-card {
    flex: 1 1 100% !important;
    width: 100% !important;
    min-width: 0 !important;
    min-height: 0 !important;
    flex-direction: row !important;
    align-items: center !important;
    gap: 16px !important;
    padding: 12px 16px 12px 12px !important;
  }
  .gogox-funnel-card-img {
    flex: 0 0 80px;
    width: 80px;
    height: 80px;
    border-radius: 8px;
    overflow: hidden;
  }
  .gogox-funnel-card-body {
    flex: 1 1 0;
    min-width: 0;
    padding: 0;
    gap: 4px;
  }
  .gogox-funnel-card-title {
    font-size: 18px;
    line-height: 24px;
  }
  .gogox-funnel-card-desc {
    font-size: 14px;
    line-height: 20px;
  }
  /* Hover-revealed CTA doesn't fire on touch — hide on mobile to keep cards clean. */
  .gogox-funnel-card-cta { display: none; }

  /* Mobile "How can we help you with?" (hmsvc1) — match desktop hmsvc1d
     outlined button-style cards: light-gray section bg + transparent
     cards with #0088BF border, blue title, dark navy desc, right-side
     chevron ›. Whole card is the link <a> to the service page. */
  .gogox-funnel.gogox-funnel--service-cards {
    background: #F4F4F4 !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-heading {
    color: #00121A !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card {
    background-color: #FFFFFF !important;
    border: 2px solid #0088BF !important;
    border-radius: 14px !important;
    /* Padding matches Austin's mobile margin reference — more breathing
       room around the icon (24px left) and chevron (48px right). */
    padding: 16px 48px 16px 24px !important;
    position: relative;
  }
  /* Bump card-to-card gap to match the mobile reference. Base
     `.gogox-funnel-grid { gap: 12px }` (line ~3438) is too tight. */
  .gogox-funnel--service-cards .gogox-funnel-grid {
    gap: 20px !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-title {
    color: #0088BF !important;
    font-weight: 700 !important;
  }
  .gogox-funnel--service-cards .gogox-funnel-card-desc {
    color: #00121A !important;
  }
  /* Mobile hmsvc1 / service-cards — NO chevron arrow per Austin's
     design call (0.5.31). The mobile-wide rule above (line ~4257)
     `.gogox-funnel-card-cta { display: none }` already hides the
     hover CTA on touch, so we just don't override it here. Desktop
     hmsvc1d still has its chevron via the @media (min-width: 601px)
     block elsewhere. */

  /* "Deliver made easy with the app" (hmappdl1) only — match desktop
     Uber-style look on mobile too: light-gray section bg + WHITE cards
     with dark navy heading + dark navy title (legible on white). */
  .home .elementor-element-hmappdl1 .gogox-funnel {
    background: #F4F4F4 !important;
  }
  .home .elementor-element-hmappdl1 .gogox-funnel-heading {
    color: #00121A !important;
  }
  /* Two DISTINCT app cards on mobile (not one shared white box): the
     generic mobile-list rule strips the radius and adds a bottom divider,
     making the two rows read as a single container. Re-round each card,
     drop the divider, add a gap + soft shadow so they sit as separate
     cards on the grey section. */
  .home .elementor-element-hmappdl1 .gogox-funnel-grid {
    gap: 12px !important;
  }
  .home .elementor-element-hmappdl1 .gogox-funnel-card {
    background-color: #FFFFFF !important;
    padding: 14px 18px 14px 14px !important;
    gap: 18px !important;
    border-radius: 12px !important;
    border-bottom: none !important;
    box-shadow: 0 1px 6px rgba(0, 18, 26, 0.10);
  }
  .home .elementor-element-hmappdl1 .gogox-funnel-card-img {
    flex: 0 0 110px !important;
    width: 110px !important;
    height: 110px !important;
  }
  /* No hover animation on the app cards (TC + EN mobile). The generic
     mobile-list hover turns the card bg transparent and shrinks the image
     110→80px, so the card looked like it shrank on mouse-over. Pin the
     hover state to the resting state: white card + full-size 110px image. */
  .home .elementor-element-hmappdl1 a.gogox-funnel-card:hover {
    background-color: #FFFFFF !important;
    transform: none !important;
  }
  .home .elementor-element-hmappdl1 a.gogox-funnel-card:hover .gogox-funnel-card-img {
    flex: 0 0 110px !important;
    width: 110px !important;
    height: 110px !important;
    margin: 0 !important;
    opacity: 1 !important;
  }
  .home .elementor-element-hmappdl1 .gogox-funnel-card-title {
    color: #00121A !important; /* dark navy for legibility on white card */
    font-size: 22px !important;
    line-height: 28px !important;
    font-weight: 400 !important;
  }
  /* Bump heading to 32px to match "Looking for other services?" size.
     Constrain max-width so "Deliver made easy" sits on line 1 and
     "with the app" naturally wraps to line 2. */
  .home .elementor-element-hmappdl1 .gogox-funnel-heading {
    font-size: 32px !important;
    line-height: 40px !important;
    max-width: 320px;
    margin-left: auto;
    margin-right: auto;
  }
  /* HK-TC (/hk/ front page = post 11) ONLY: match the apps heading
     "送貨定接單？立即下載！" to the other mobile section titles (探索更多服務 /
     你最可靠的物流伙伴 = 28px / 36px). EN (other page id) keeps 32px. */
  .page-id-11 .elementor-element-hmappdl1 .gogox-funnel-heading {
    font-size: 28px !important;
    line-height: 36px !important;
    max-width: none;
  }
}

/* ====================================================================
   /corporate/ split hero — title + form left, image right.
   Used by compose-corporate.php — built from raw Elementor containers
   (heading + text-editor + gogox_contact_form on the left, image widget
   on the right) so it doesn't need a new dedicated widget.
   ==================================================================== */
.gogox-corporate-hero {
  position: relative !important;
  width: 100% !important;
  min-height: 640px !important;
  padding: 80px max(24px, calc((100% - 1200px) / 2)) !important;
  gap: 48px !important;
  align-items: center !important;
  justify-content: space-between !important; /* pushes form flush to right edge */
  overflow: hidden;
}
/* Left dark gradient overlay so the white text on the left remains legible
   against any bg image. Fades out before reaching the form on the right. */
.gogox-corporate-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(0, 0, 0, 0.55) 0%, transparent 55%);
  z-index: 1;
  pointer-events: none;
}
.gogox-corporate-hero-left,
.gogox-corporate-hero-right {
  position: relative;
  z-index: 2;
}
.gogox-corporate-hero-left {
  flex: 1 1 55% !important;
  max-width: 560px !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 20px !important;
}
.gogox-corporate-hero-right {
  flex: 1 1 45% !important;
  max-width: 480px !important;
}
/* Hero typography — match the standard .gogox-hero-title / .gogox-hero-text */
.gogox-corporate-hero .gogox-corporate-hero-title .elementor-heading-title {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 56px !important;
  font-weight: 700 !important;
  line-height: 1.1 !important;
  margin: 0 !important;
  text-shadow: 0 0 8px rgba(0, 80, 128, 0.35);
}
.gogox-corporate-hero .gogox-corporate-hero-subtitle p {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 17px !important;
  line-height: 1.5 !important;
  margin: 0 !important;
}
/* Reset Elementor's default <p> + widget-container margin/padding inside
   the left column so the container's gap (20px) is the only inter-widget
   spacer — matching the native gogox_hero widget's tight spacing. */
.gogox-corporate-hero-left .elementor-widget-container { padding: 0 !important; }
.gogox-corporate-hero-left .gogox-corporate-hero-subtitle p,
.gogox-corporate-hero-left .gogox-corporate-hero-cta p {
  margin: 0 !important;
}
/* When the contact form sits inside the hero, kill its outer chrome and
   keep just the white form card */
.gogox-corporate-hero .gogox-contact-form {
  padding: 0 !important;
  background: transparent !important;
}
.gogox-corporate-hero .gogox-contact-form-inner {
  gap: 0 !important;
  max-width: 100% !important;
}
.gogox-corporate-hero .gogox-contact-form-body {
  background: #FFFFFF;
  padding: 28px;
  border-radius: 12px;
  box-shadow: 0 12px 40px rgba(0, 18, 26, 0.25);
}

/* Tablet/mobile — stack vertically */
@media (max-width: 900px) {
  /* All corporate heroes share ONE mobile treatment (the SG pattern): show the
     page's dedicated portrait banner full-width with the headline band on top and
     drop the form below it. Each page supplies ONLY its own image via the
     -sg/-hk/-hktc hook below; everything else is shared. Hardcoding the image
     (rather than reusing Elementor's responsive bg, which only swaps the mobile
     image in at <=767) is what makes this work across the whole <=900 range. */
  .gogox-corporate-hero {
    flex-direction: column !important;
    min-height: 0 !important;
    gap: 0 !important;
    background-size: 100% auto !important;
    background-position: top center !important;
    background-repeat: no-repeat !important;
    background-color: #005085 !important; /* fill below the band / behind the form */
    padding: 50vw 24px 40px !important;   /* drops the form below the headline band */
  }
  .gogox-corporate-hero::before {
    background: none !important; /* baked headline is self-composed; no scrim on mobile */
  }
  .gogox-corporate-hero-sg {
    background-image: url("https://s3-ap-northeast-1.amazonaws.com/wp-gogovan.com/wp-content/uploads/sites/3/2025/12/24110719/GoGoX-SG-Enterprise_Platform-Landing-Page_16Dec__HeroBannerMobile-e1767582859800.png") !important;
  }
  .gogox-corporate-hero-hk {
    background-image: url("https://gogox-wordpress-staging-uploads.storage.googleapis.com/2026/06/cd1b52f0-368f-44ea-9e7c-a6ae59fd46ce.png") !important;
    padding: 68vw 24px 40px !important; /* EN image has a taller text band (3-line headline + 5-line subtitle) */
  }
  .gogox-corporate-hero-hktc {
    background-image: url("https://gogox-wordpress-staging-uploads.storage.googleapis.com/sites/3/2026/06/c6793cab-2a98-434e-ad2c-f9da07fc4b27.png") !important;
    padding: 58vw 24px 40px !important; /* clears the TC portrait's 2-line subtitle */
  }
  .gogox-corporate-hero-left,
  .gogox-corporate-hero-right {
    max-width: 100% !important;
    width: 100% !important;
    flex: 0 0 auto !important;
  }
  .gogox-corporate-hero .gogox-corporate-hero-title .elementor-heading-title {
    font-size: 40px !important;
  }
}

/* ====================================================================
   gogox_promo_carousel — card-based carousel with editable text per slide.
   Renders N cards visible per row on desktop (default 3) with a teaser of
   the previous slide before the first card and the next slide after the
   last visible card (peek pattern). Tablet falls back to 2 cards, mobile
   to 1. Uses the shared CAROUSEL_CONFIGS JS pipeline in footer.php.
   ==================================================================== */
.gogox-promo-carousel {
  width: 100%;
  padding: 64px 0;
}
.gogox-promo-carousel-inner {
  max-width: 1200px;
  margin: 0 auto;
}
.gogox-promo-carousel-heading {
  margin: 0 24px 12px;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 1.25;
  color: #00121A;
  text-align: center;
}
.gogox-promo-carousel-intro {
  margin: 0 24px 32px;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.55;
  color: #7a7a7a;
  text-align: center;
}
.gogox-promo-carousel-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}
.gogox-promo-carousel-arrow {
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  border: 1px solid #D7DDE0;
  background: #FFFFFF;
  border-radius: 999px;
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
  z-index: 2;
  color: #00121A;
}
.gogox-promo-carousel-arrow:hover { background: #F3F7F8; transform: scale(1.05); }
.gogox-promo-carousel-arrow:disabled { opacity: 0.35; cursor: default; }
.gogox-promo-carousel-viewport {
  flex: 1 1 0;
  min-width: 0;
  overflow: hidden;
  /* Inset padding gives the peek effect: cards extend partially into the
     padded area on each side, hinting at neighbouring slides. */
  padding: 0 32px;
}
.gogox-promo-carousel-track {
  display: flex;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
.gogox-promo-carousel-card {
  flex: 0 0 auto;
  background: #FFFFFF;
  border-radius: 20px;
  padding: 32px 28px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  text-decoration: none;
  color: inherit;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
a.gogox-promo-carousel-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(0, 18, 26, 0.08);
}
/* Card width = (viewport - gaps) / cols, then shrink slightly so the
   neighbours peek through the viewport's overflow edges. */
.gogox-promo-carousel--cols-3 .gogox-promo-carousel-card {
  width: calc((100% - 48px) / 3);
}
.gogox-promo-carousel--cols-4 .gogox-promo-carousel-card {
  width: calc((100% - 72px) / 4);
}
.gogox-promo-carousel--cols-2 .gogox-promo-carousel-card {
  width: calc((100% - 24px) / 2);
}
.gogox-promo-carousel-card-title {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-size: 24px;
  font-weight: 900;
  line-height: 1.25;
  color: #005085;
}
.gogox-promo-carousel-card-img {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  /* No fixed aspect-ratio — illustration keeps its natural shape, fills width. */
}
.gogox-promo-carousel-card-img img {
  width: 100%;
  height: auto;
  object-fit: contain;
  display: block;
}
.gogox-promo-carousel-card-body {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.gogox-promo-carousel-card-body-text {
  margin: 0;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.55;
  color: #2D3D4D;
}
.gogox-promo-carousel-card-bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.gogox-promo-carousel-card-bullets li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  line-height: 1.5;
  color: #2D3D4D;
}
.gogox-promo-carousel-card-check {
  flex: 0 0 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px; /* optical alignment with first text line */
}
.gogox-promo-carousel-card-check svg { display: block; }
.gogox-promo-carousel-card-bullet-text {
  flex: 1 1 0;
  min-width: 0;
}
.gogox-promo-carousel-dots {
  display: flex;
  justify-content: center;
  gap: 8px;
  margin-top: 24px;
}
.gogox-promo-carousel-dot {
  width: 10px;
  height: 10px;
  border: 0;
  background: #C8D2D7;
  border-radius: 50%;
  cursor: pointer;
  padding: 0;
  transition: background-color 0.15s ease, transform 0.15s ease;
}
.gogox-promo-carousel-dot:hover { background: #A0AAB0; }
.gogox-promo-carousel-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}

/* Tablet — 2 visible cards */
@media (max-width: 1100px) {
  .gogox-promo-carousel--cols-3 .gogox-promo-carousel-card,
  .gogox-promo-carousel--cols-4 .gogox-promo-carousel-card {
    width: calc((100% - 24px) / 2);
  }
  .gogox-promo-carousel-viewport { padding: 0 20px; }
}

/* Mobile — 1 visible card centred in the viewport with both neighbours
   peeking (centering math handled by the carousel JS in footer.php).
   Drop viewport's lateral padding so the math has symmetric room. Card
   narrowed to 75% to leave room for peeks. */
@media (max-width: 700px) {
  .gogox-promo-carousel { padding: 48px 0; }
  .gogox-promo-carousel--cols-3 .gogox-promo-carousel-card,
  .gogox-promo-carousel--cols-4 .gogox-promo-carousel-card,
  .gogox-promo-carousel--cols-2 .gogox-promo-carousel-card {
    width: 75%;
  }
  .gogox-promo-carousel-viewport { padding: 0; }
  .gogox-promo-carousel-arrow { display: none; } /* dots only on mobile */
  .gogox-promo-carousel-heading { font-size: 26px; }
}

/* Static grid mode — disables carousel chrome, renders cards as a fixed row.
   Used when item count matches column count and no slide behaviour is wanted.
   Track stays display:flex but never gets a transform applied (JS is
   skipped because data-per-view/data-total are omitted in grid mode). */
.gogox-promo-carousel--grid .gogox-promo-carousel-stage {
  gap: 0;
}
.gogox-promo-carousel--grid .gogox-promo-carousel-viewport {
  padding: 0;
  overflow: visible;
}
.gogox-promo-carousel--grid .gogox-promo-carousel-track {
  transform: none !important;
  transition: none;
}
@media (max-width: 700px) {
  .gogox-promo-carousel--grid .gogox-promo-carousel-track {
    flex-direction: column;
  }
  .gogox-promo-carousel--grid .gogox-promo-carousel-card {
    width: 100% !important;
  }
}

/* ====================================================================
   gogox_news_carousel — image-first news/promo carousel.
   Centred heading + intro, one large full-image banner card with a peek
   of the next, paged by dots. No card chrome — each card is the image.
   ==================================================================== */
.gogox-newsbanner {
  padding: 0;
  background: #FFFFFF;
}
.gogox-newsbanner-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  text-align: center;
}
/* Heading + intro match the site-standard section style (cf. .gogox-news-*).
   Heading sits 40px above the cards (same as .gogox-itg-heading "Looking for
   other services?"); when an intro is present it provides its own gap below. */
.gogox-newsbanner-heading {
  margin: 0 0 40px;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  color: #00121A;
  text-align: center;
}
.gogox-newsbanner-intro {
  margin: 0 0 40px;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  color: #7a7a7a;
  text-align: center;
}
.gogox-newsbanner-stage { position: relative; }
.gogox-newsbanner-viewport {
  overflow: hidden;
  /* Side gutters via MARGIN (not padding) so cards are clipped at the
     gutter boundary — the arrows live in the gutters and must never be
     overlapped by banner images. */
  margin: 0 72px;
}
.gogox-newsbanner-track {
  display: flex;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
/* One large CENTERED banner (~90%, 7:3) + peeks of both neighbours. */
.gogox-newsbanner-card {
  flex: 0 0 auto;
  width: 90%;
  border-radius: 24px;
  overflow: hidden;
  background: #E3E3E3;          /* placeholder tint until an image is set */
  text-decoration: none;
  color: inherit;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
a.gogox-newsbanner-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(0, 18, 26, 0.10);
}
.gogox-newsbanner-card-img {
  width: 100%;
  aspect-ratio: 7 / 3;          /* fixed wide-banner box — all cards equal */
}
.gogox-newsbanner-card-img img {
  width: 100%;
  height: 100% !important;      /* !important: beat Elementor's img{height:auto} resets */
  object-fit: cover;            /* crop to fill — uniform regardless of source */
  display: block;
}
/* Older browsers without aspect-ratio: same 7:3 box via padding hack. */
@supports not (aspect-ratio: 7 / 3) {
  .gogox-newsbanner-card-img { position: relative; padding-top: 42.857%; }
  .gogox-newsbanner-card-img img { position: absolute; top: 0; left: 0; }
}
.gogox-newsbanner-dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 28px;
}
.gogox-newsbanner-dot {
  width: 10px;
  height: 10px;
  border: 0;
  padding: 0;
  border-radius: 50%;
  background: #C8D2D7;
  cursor: pointer;
  transition: background-color 0.15s ease, transform 0.15s ease;
}
.gogox-newsbanner-dot:hover { background: #A0AAB0; }
.gogox-newsbanner-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}
/* Prev/next arrows — slim brand-blue chevrons in the side gutters,
   outside the banner (per mock), shown on all viewports. */
.gogox-newsbanner-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  border: none;
  background: none;
  padding: 0;
  cursor: pointer;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.15s ease;
}
.gogox-newsbanner-arrow span { display: none; }  /* glyph replaced by CSS chevron */
.gogox-newsbanner-arrow::before {
  content: '';
  width: 16px;
  height: 16px;
  border-right: 3px solid #0088BF;
  border-bottom: 3px solid #0088BF;
  border-radius: 2px;
}
.gogox-newsbanner-arrow--prev::before { transform: rotate(135deg); margin-left: 6px; }
.gogox-newsbanner-arrow--next::before { transform: rotate(-45deg); margin-right: 6px; }
.gogox-newsbanner-arrow:hover { opacity: 0.65; }
.gogox-newsbanner-arrow--prev { left: 6px; }
.gogox-newsbanner-arrow--next { right: 6px; }
@media (max-width: 700px) {
  /* No arrows on mobile (swipe + dots + autoplay) — gutters reclaimed so
     the banner runs nearly full-bleed. */
  .gogox-newsbanner-arrow { display: none; }
  .gogox-newsbanner-viewport { margin: 0; }
  .gogox-newsbanner-card { width: 92%; }
  .gogox-newsbanner-track { gap: 12px; }
}

/* ====================================================================
   /corporate/ — image carousel (Elementor's built-in image-carousel widget,
   wrapped in .gogox-corporate-carousel for brand styling).
   ==================================================================== */
.gogox-corporate-carousel {
  max-width: 1200px;
  margin: 64px auto !important;
  padding: 0 24px;
}
.gogox-corporate-carousel .elementor-image-carousel-wrapper {
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 8px 24px rgba(0, 18, 26, 0.08);
}
.gogox-corporate-carousel .swiper-slide img {
  display: block;
  width: 100%;
  height: auto;
}
/* Brand-tinted dot navigation */
.gogox-corporate-carousel .swiper-pagination {
  bottom: 16px !important;
}
.gogox-corporate-carousel .swiper-pagination-bullet {
  background: rgba(255, 255, 255, 0.6);
  opacity: 1;
  width: 10px;
  height: 10px;
  margin: 0 4px;
}
.gogox-corporate-carousel .swiper-pagination-bullet-active {
  background: #FFDD00;
}
/* Brand-tinted arrow buttons */
.gogox-corporate-carousel .elementor-swiper-button {
  color: #FFFFFF;
  text-shadow: 0 0 8px rgba(0, 18, 26, 0.4);
  transition: transform 0.15s ease;
}
.gogox-corporate-carousel .elementor-swiper-button:hover {
  transform: scale(1.15);
}
@media (max-width: 600px) {
  .gogox-corporate-carousel { margin: 40px auto !important; padding: 0 16px; }
}

/* ====================================================================
   /corporate/ — bottom CTA section (lead-capture repeat near the page end).
   Full-width brand-blue background with overlay; centered single-column
   form card on top.
   ==================================================================== */
.gogox-corporate-bottom-cta {
  position: relative !important;
  width: 100% !important;
  padding: 80px 24px !important;
  overflow: hidden;
}
.gogox-corporate-bottom-cta::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.45) 0%, rgba(0, 0, 0, 0.55) 100%);
  z-index: 1;
  pointer-events: none;
}
.gogox-corporate-bottom-cta > * {
  position: relative;
  z-index: 2;
}
.gogox-corporate-bottom-cta .gogox-contact-form {
  width: 100%;
  max-width: 540px;
  padding: 0 !important;
  background: transparent !important;
}
.gogox-corporate-bottom-cta .gogox-contact-form-inner {
  gap: 0 !important;
  max-width: 100% !important;
}
.gogox-corporate-bottom-cta .gogox-contact-form-body {
  background: #FFFFFF;
  padding: 32px;
  border-radius: 12px;
  box-shadow: 0 12px 40px rgba(0, 18, 26, 0.25);
}
.gogox-corporate-bottom-cta .gogox-contact-form-heading {
  font-size: 26px !important;
  text-align: center;
  margin: 0 0 8px !important;
}
.gogox-corporate-bottom-cta .gogox-contact-form-intro {
  text-align: center;
  margin: 0 0 24px !important;
}
@media (max-width: 600px) {
  .gogox-corporate-bottom-cta { padding: 56px 16px !important; }
  .gogox-corporate-bottom-cta .gogox-contact-form-body { padding: 24px; }
}

/* ====================================================================
   gogox_contact_form — Contact Form 7 wrapper widget
   Used on /corporate/ and other lead-capture pages. Replaces the live
   ConvertFlow embed with a free, plugin-light path: CF7 + branded styles.
   ==================================================================== */
.gogox-contact-form {
  width: 100%;
  padding: 72px 24px;
}
.gogox-contact-form-inner {
  max-width: 720px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 32px;
  align-items: stretch;
}
.gogox-contact-form-body {
  background: #FFFFFF;
  border-radius: 12px;
  padding: 32px 32px 40px;
  box-shadow: 0 4px 24px rgba(0, 18, 26, 0.06);
}
/* Heading + intro live INSIDE the form card so they sit above the inputs
   as part of the same visual unit. */
.gogox-contact-form-body .gogox-contact-form-heading {
  margin: 0 0 12px;
  font-family: "proxima-nova", sans-serif;
  font-weight: 600;
  font-size: 1.25rem;
  line-height: 1.3;
  color: #00121A;
}
.gogox-contact-form-body .gogox-contact-form-intro {
  margin: 0 0 24px;
  font-family: "proxima-nova", sans-serif;
  font-weight: 400;
  font-size: 15px;
  line-height: 1.55;
  color: #7a7a7a;
}

/* CF7 markup styling — scope all rules under .gogox-contact-form-body so
   we don't bleed into any other CF7 form on the site. */
.gogox-contact-form-body .gogox-cf7-row {
  display: block;
  margin: 0 0 10px;
}
/* CF7 inserts an automatic <p> wrapper around every shortcode row in the
   rendered output (wpautop). Reset its default browser margin so it doesn't
   misalign rows + the submit button (the <p>'s 1em top/bottom margin was
   visibly shifting submit-row positioning). */
.gogox-contact-form-body .gogox-cf7-row > p {
  margin: 0;
  padding: 0;
}
/* --split modifier: two side-by-side fields (e.g. First Name + Last Name)
   sharing a row. CF7's wpautop wraps the row content in a <p>, so we make
   that <p> the grid container — same trick as --phone below. The two child
   <label>s become equal columns with a 12px gap. */
.gogox-contact-form-body .gogox-cf7-row--split > p {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  align-items: start;
  width: 100%;
}
.gogox-contact-form-body .gogox-cf7-row--split > p > label {
  margin: 0;
}
@media (max-width: 480px) {
  .gogox-contact-form-body .gogox-cf7-row--split > p {
    grid-template-columns: 1fr;
    row-gap: 10px;
  }
}

/* --phone modifier: country-code select (120px) + phone tel input (rest) on
   one line. The two .wpcf7-form-control-wrap spans live inside CF7's
   auto-injected <p>, which becomes the grid container. */
.gogox-contact-form-body .gogox-cf7-row--phone > p {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 8px;
  align-items: center;
  width: 100%;
}
.gogox-contact-form-body .gogox-cf7-row--phone .wpcf7-form-control-wrap {
  display: block;
  width: 100%;
  min-width: 0;
}
.gogox-contact-form-body .gogox-cf7-row--phone .wpcf7-form-control {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
}

/* Custom country-code dropdown — JS in footer.php builds this widget next
   to the hidden native <select name$="-region">. Trigger shows flag + code
   (compact). Menu shows flag + full country name + code (full info). */
.gogox-region-select {
  position: relative;
  width: 100%;
}
.gogox-region-select-trigger {
  display: flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  padding: 12px 10px 12px 12px;
  background: #FFFFFF;
  border: 1px solid #D7DDE0;
  border-radius: 8px;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  color: #00121A;
  cursor: pointer;
  box-sizing: border-box;
  text-align: left;
}
.gogox-region-select-trigger:hover { border-color: #B7C0C5; }
.gogox-region-select-flag {
  font-size: 18px;
  line-height: 1;
  flex: 0 0 auto;
}
.gogox-region-select-code { flex: 1 1 auto; }
.gogox-region-select-caret { flex: 0 0 auto; font-size: 12px; color: #00121A; }
.gogox-region-select-menu {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  right: auto;
  min-width: 220px;
  max-height: 280px;
  overflow-y: auto;
  margin: 0;
  padding: 4px 0;
  list-style: none;
  background: #FFFFFF;
  border: 1px solid #D7DDE0;
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0, 18, 26, 0.12);
  z-index: 50;
}
.gogox-region-select.is-open .gogox-region-select-menu { display: block; }
.gogox-region-select-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  cursor: pointer;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  color: #00121A;
}
.gogox-region-select-item:hover,
.gogox-region-select-item[aria-selected="true"] {
  background: #F3F7F8;
}
.gogox-region-select-name { flex: 1 1 auto; }
.gogox-region-select-code-muted { flex: 0 0 auto; color: #7a7a7a; font-size: 14px; }
.gogox-contact-form-body .gogox-cf7-row label {
  display: block;
  font-family: "proxima-nova", sans-serif;
  font-weight: 700;
  font-size: 14px;
  line-height: 1.4;
  color: #00121A;
  margin: 0 0 8px;
}
.gogox-contact-form-body .gogox-cf7-row label .req {
  color: #D9534F;
  font-weight: 700;
  margin-left: 2px;
}
.gogox-contact-form-body .wpcf7-form-control {
  display: block;
  width: 100%;
  padding: 12px 14px;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.4;
  color: #00121A;
  background: #FFFFFF;
  border: 1px solid #D7DDE0;
  border-radius: 8px;
  box-sizing: border-box;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
/* Select fields — replace the native chevron with a custom SVG and leave
   right padding for it so the chevron doesn't sit flush against the
   input's outline. */
.gogox-contact-form-body select.wpcf7-form-control {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  padding-right: 44px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path fill='none' stroke='%2300121A' stroke-width='1.6' d='M1 1.5 L6 6.5 L11 1.5'/></svg>");
  background-repeat: no-repeat;
  background-position: right 16px center;
  background-size: 12px 8px;
}
.gogox-contact-form-body .wpcf7-form-control::placeholder {
  color: #A0A8B0;
}
.gogox-contact-form-body .wpcf7-form-control:focus {
  outline: none;
  border-color: #0088BF;
  box-shadow: 0 0 0 3px rgba(0, 136, 191, 0.15);
}
.gogox-contact-form-body textarea.wpcf7-form-control {
  min-height: 80px;
  resize: vertical;
  font-family: "proxima-nova", sans-serif;
}

/* Submit button — matches .gogox-btn-primary visually. Block-level + full
   width so its outer bounds align with the input fields above (the input
   fields are width:100% on the same row container). */
.gogox-contact-form-body .gogox-cf7-submit {
  margin: 20px 0 0;
  position: relative;
}
/* Submit spinner: footer.php's CF7 hook adds .is-loading on the submit row
   when the button is clicked, then removes it on any CF7 lifecycle event
   (mailsent/mailfailed/invalid/spam/submit). Pseudo-element on the wrapping
   div draws a white spinning ring on the right side of the button. */
.gogox-contact-form-body .gogox-cf7-submit.is-loading::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 20px;
  width: 20px;
  height: 20px;
  margin-top: -10px;
  border: 2px solid rgba(255, 255, 255, 0.45);
  border-top-color: #FFFFFF;
  border-radius: 50%;
  animation: gogox-cf7-spin 0.8s linear infinite;
  pointer-events: none;
}
@keyframes gogox-cf7-spin {
  to { transform: rotate(360deg); }
}
/* Hide CF7's own spinner element if it shows up so we don't double up. */
.gogox-contact-form-body .wpcf7-spinner {
  display: none !important;
}
.gogox-contact-form-body .wpcf7-submit {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: center;
  background: #0088BF;
  color: #FFFFFF;
  font-family: "proxima-nova", sans-serif;
  font-weight: 700;
  font-size: 16px;
  padding: 16px 40px;   /* standard preset size */
  border: 2px solid #0088BF;
  border-radius: 999px;
  cursor: pointer;
  width: auto;
  transition: background-color 0.15s ease, border-color 0.15s ease;
}
.gogox-contact-form-body .wpcf7-submit:hover {
  background: #006E9B;
  border-color: #006E9B;
}
.gogox-contact-form-body .wpcf7-submit:disabled {
  background: #99CFE5;
  border-color: #99CFE5;
  cursor: not-allowed;
}

/* CF7 validation/response messages */
.gogox-contact-form-body .wpcf7-not-valid-tip {
  display: block;
  margin-top: 4px;
  color: #D9534F;
  font-family: "proxima-nova", sans-serif;
  font-size: 13px;
}
.gogox-contact-form-body .wpcf7-response-output {
  margin: 24px 0 0;
  padding: 12px 16px;
  border-radius: 8px;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  line-height: 1.5;
}
.gogox-contact-form-body .wpcf7 form.sent .wpcf7-response-output {
  border: 1px solid #2ECC71;
  background: #E9FBF1;
  color: #1F8B4F;
}
.gogox-contact-form-body .wpcf7 form.invalid .wpcf7-response-output,
.gogox-contact-form-body .wpcf7 form.failed .wpcf7-response-output {
  border: 1px solid #D9534F;
  background: #FBE9EA;
  color: #8B1F1F;
}

/* Empty-state hint shown only inside the editor */
.gogox-contact-form-empty {
  padding: 40px;
  background: #F3F7F8;
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  text-align: center;
  border: 2px dashed #D7DDE0;
  border-radius: 8px;
}

@media (max-width: 600px) {
  .gogox-contact-form { padding: 48px 16px; }
  .gogox-contact-form-body { padding: 20px; }
  .gogox-contact-form-heading { font-size: 1.125rem; line-height: 1.3; }
}

/* ====================================================================
   Blog Single Post template
   Used by the Theme Builder Single Post template (elementor_library post
   "Blog Single Template", _elementor_template_type=single). Selectors are
   scoped to .gogox-blog-single-* container classes set in the template's
   _elementor_data JSON, plus the .elementor-widget-theme-post-content
   widget that holds the_content() output.
   ==================================================================== */

/* Hero — full-width, ~480px tall, featured-image background, dark left
   gradient overlay so white title/meta stays readable. */
.gogox-blog-single-hero {
  position: relative !important;
  min-height: 480px !important;
  padding: 96px 32px 56px !important;
  background-color: #0088BF !important;
  overflow: hidden;
  display: flex !important;
  flex-direction: column !important;
  justify-content: center !important;
  align-items: flex-start !important;
}
/* The Theme Builder featured-image widget is absolute-positioned to fill the
   hero — turning the inner <img> into the hero background. */
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image {
  position: absolute !important;
  inset: 0 !important;
  margin: 0 !important;
  width: 100% !important;
  height: 100% !important;
  z-index: 0 !important;
  pointer-events: none;
}
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image > div {
  width: 100%;
  height: 100%;
}
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  display: block !important;
  margin: 0 !important;
}
.gogox-blog-single-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(0, 0, 0, 0.55) 0%, transparent 60%);
  z-index: 1;
  pointer-events: none;
}
.gogox-blog-single-hero > .elementor-widget-theme-post-title,
.gogox-blog-single-hero > .elementor-widget-post-info {
  position: relative;
  z-index: 2;
}
.gogox-blog-single-hero .elementor-widget-theme-post-title h1 {
  color: #FFFFFF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 48px !important;
  font-weight: 300 !important;
  line-height: 1.15 !important;
  margin: 0 !important;
  max-width: 880px !important;
  text-shadow: 0 0 8px rgba(0, 60, 96, 0.35);
}
.gogox-blog-single-hero .elementor-widget-theme-post-info {
  margin-top: 16px !important;
}
.gogox-blog-single-hero .elementor-icon-list-items,
.gogox-blog-single-hero .elementor-post-info {
  color: rgba(255, 255, 255, 0.8) !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 14px !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
}
.gogox-blog-single-hero .elementor-icon-list-text { color: rgba(255, 255, 255, 0.85) !important; }

/* Body — boxed 720px, brand typography for the_content(). */
.gogox-blog-single-body {
  padding: 64px 24px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
}
.gogox-blog-single-body .elementor-widget-theme-post-content {
  width: 100% !important;
  max-width: 720px !important;
}
.gogox-blog-single-body .elementor-widget-theme-post-content,
.gogox-blog-single-body .elementor-widget-theme-post-content p,
.gogox-blog-single-body .elementor-widget-theme-post-content li {
  color: #1F2D3D;
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  line-height: 1.7;
}
.gogox-blog-single-body .elementor-widget-theme-post-content p { margin: 0 0 20px; }
.gogox-blog-single-body .elementor-widget-theme-post-content h2 {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 1.25;
  margin: 40px 0 16px;
}
.gogox-blog-single-body .elementor-widget-theme-post-content h3 {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 22px;
  font-weight: 700;
  line-height: 1.3;
  margin: 32px 0 12px;
}
.gogox-blog-single-body .elementor-widget-theme-post-content h4 {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.4;
  margin: 24px 0 8px;
}
.gogox-blog-single-body .elementor-widget-theme-post-content a {
  color: #0088BF;
  text-decoration: none;
  border-bottom: 1px solid rgba(0, 136, 191, 0.3);
  transition: color 0.15s ease, border-color 0.15s ease;
}
.gogox-blog-single-body .elementor-widget-theme-post-content a:hover {
  color: #006E9B;
  border-color: #006E9B;
}
.gogox-blog-single-body .elementor-widget-theme-post-content ul,
.gogox-blog-single-body .elementor-widget-theme-post-content ol {
  margin: 0 0 20px 24px;
  padding: 0;
}
.gogox-blog-single-body .elementor-widget-theme-post-content li { margin: 8px 0; }
/* Blog content tables — proper bordered table with header band + zebra rows.
   Overrides the fixed width/height authored inline so it fits the column and
   stays readable; scrolls horizontally on mobile instead of breaking layout. */
.gogox-blog-single-body .elementor-widget-theme-post-content .gogox-table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  margin: 24px 0;
}
.gogox-blog-single-body .elementor-widget-theme-post-content table {
  width: 100% !important;
  height: auto !important;
  border-collapse: collapse;
  margin: 24px 0;
  font-size: 15px;
  line-height: 1.55;
  background: #fff;
}
.gogox-blog-single-body .elementor-widget-theme-post-content .gogox-table-scroll table { margin: 0; min-width: 640px; }
.gogox-blog-single-body .elementor-widget-theme-post-content th,
.gogox-blog-single-body .elementor-widget-theme-post-content td {
  border: 1px solid #E3E7EC;
  padding: 12px 14px;
  text-align: left;
  vertical-align: top;
}
.gogox-blog-single-body .elementor-widget-theme-post-content thead th {
  background: #0088BF;
  color: #fff;
  font-weight: 700;
  border-color: #0088BF;
}
.gogox-blog-single-body .elementor-widget-theme-post-content tbody tr:nth-child(even) { background: #F3F7F8; }
.gogox-blog-single-body .elementor-widget-theme-post-content tbody td:first-child { white-space: nowrap; font-weight: 600; color: #00121A; }
.gogox-blog-single-body .elementor-widget-theme-post-content blockquote {
  border-left: 4px solid #0088BF;
  padding: 8px 0 8px 20px;
  margin: 24px 0;
  font-style: italic;
  color: #4A5A6A;
}
.gogox-blog-single-body .elementor-widget-theme-post-content img {
  max-width: 100%;
  height: auto;
  margin: 24px 0;
  border-radius: 4px;
}

/* Mobile */
@media (max-width: 600px) {
  .gogox-blog-single-hero {
    min-height: 360px !important;
    padding: 72px 20px 40px !important;
  }
  .gogox-blog-single-hero .elementor-widget-theme-post-title h1 {
    font-size: 32px !important;
  }
  .gogox-blog-single-body { padding: 40px 20px !important; }
  .gogox-blog-single-body .elementor-widget-theme-post-content,
  .gogox-blog-single-body .elementor-widget-theme-post-content p,
  .gogox-blog-single-body .elementor-widget-theme-post-content li {
    font-size: 16px;
  }
  .gogox-blog-single-body .elementor-widget-theme-post-content h2 { font-size: 26px; }
  .gogox-blog-single-body .elementor-widget-theme-post-content h3 { font-size: 20px; }
}

/* ====================================================================
   Unified carousel chevron buttons — applies across testimonials,
   icon-text-grid carousel, and promo-carousel widgets. White circle,
   no border, soft drop shadow. Chevron icon is grey by default and
   shifts to brand blue on hover. SVG is hard-coded with fill="white"
   so we use mask-image and tint via background-color on a ::after
   pseudo-element. */
/* Chevron buttons follow the gogox_newsbanner look — transparent button,
   CSS-border chevron (no shadow, no white circle). Affects testimonials,
   itg-carousel, and promo-carousel widgets uniformly. */
.gogox-testimonials-arrow,
.gogox-itg--carousel .gogox-itg-arrow,
.gogox-promo-carousel-arrow {
  position: relative;
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  width: 44px;
  height: 44px;
  border-radius: 0;
  padding: 0;
  cursor: pointer;
  background-image: none !important;
  transition: opacity 0.15s ease;
}
.gogox-testimonials-arrow:hover,
.gogox-itg--carousel .gogox-itg-arrow:hover,
.gogox-promo-carousel-arrow:hover {
  opacity: 0.65;
  transform: none;
  box-shadow: none !important;
}
.gogox-testimonials-arrow:disabled,
.gogox-itg--carousel .gogox-itg-arrow:disabled,
.gogox-promo-carousel-arrow:disabled {
  opacity: 0.4;
  cursor: default;
  transform: none;
  box-shadow: none !important;
}
/* Hide the per-widget chevron glyph inside each button — the ::after CSS-
   border chevron replaces it. testimonials + itg render an inline <svg>;
   promo-carousel renders a <span> with a text-character. */
.gogox-testimonials-arrow > span,
.gogox-testimonials-arrow > svg,
.gogox-itg--carousel .gogox-itg-arrow > span,
.gogox-itg--carousel .gogox-itg-arrow > svg,
.gogox-promo-carousel-arrow > span,
.gogox-promo-carousel-arrow > svg {
  display: none !important;
}
/* CSS-border chevron — same pattern as gogox_newsbanner. Brand blue at rest;
   hover fade handled by opacity on the parent button. */
.gogox-testimonials-arrow::after,
.gogox-itg--carousel .gogox-itg-arrow::after,
.gogox-promo-carousel-arrow::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 16px;
  height: 16px;
  border-right: 3px solid #0088BF;
  border-bottom: 3px solid #0088BF;
  border-radius: 2px;
  background: none !important;
  background-color: transparent !important;
  -webkit-mask-image: none;
  mask-image: none;
  transition: none;
}
.gogox-testimonials-arrow--prev::after,
.gogox-itg-arrow--prev::after,
.gogox-promo-carousel-arrow--prev::after {
  transform: translate(-50%, -50%) rotate(135deg);
  margin-left: 4px;
}
.gogox-testimonials-arrow--next::after,
.gogox-itg-arrow--next::after,
.gogox-promo-carousel-arrow--next::after {
  transform: translate(-50%, -50%) rotate(-45deg);
  margin-right: 4px;
}

/* Scroll-driven entrance fade + hero parallax.
 *
 * OPT-IN VIA CSS CLASS. Marketing/admin types `gogox-fadein-target` into
 * Elementor's "Advanced > CSS Classes" field on any container/widget; the
 * rules below find the inner content hooks via descendant selectors and
 * fade them up when JS adds `.is-visible` (on landing or scroll-into-view).
 * Selecting inner hooks rather than direct children means it doesn't matter
 * whether the class lands on the Elementor wrapper or the gogox widget root.
 *
 * Section bg color stays painted from first render; only the content on top
 * fades. `.gogox-hero-bg` is owned by the parallax handler in footer.php and
 * is intentionally not in the fade target list.
 */
.gogox-fadein-target .gogox-hero-box,
.gogox-fadein-target .gogox-funnel-inner,
.gogox-fadein-target .gogox-vehicles-inner,
.gogox-fadein-target .gogox-itg-inner,
.gogox-fadein-target .gogox-news-inner,
.gogox-fadein-target .gogox-promo-rail,
.gogox-fadein-target .gogox-promo-image,
.gogox-fadein-target .gogox-cta-band > *,
.gogox-fadein-target .gogox-testimonials-inner,
.gogox-fadein-target .gogox-faq-inner,
.gogox-fadein-target .gogox-pricing-inner,
.gogox-fadein-target .gogox-process-steps-image,
.gogox-fadein-target .gogox-process-steps-content,
.gogox-fadein-target .gogox-vstack-inner,
.gogox-fadein-target .gogox-contact-form-inner,
.gogox-fadein-target .gogox-promo-carousel-inner,
.gogox-fadein-target .gogox-newsbanner-inner,
.gogox-fadein-target .gogox-journey-inner,
.gogox-fadein-target .gogox-heading-band-inner,
.gogox-fadein-target .gogox-logo-strip-inner {
    opacity: 0;
    transform: translateY(50px);
    transition: opacity 1.2s ease, transform 1.2s ease;
    /* No permanent will-change: with fade-in now on every About section, a
       standing will-change on each promoted too many compositing layers and
       made scrolling feel janky/weird. The transition alone animates fine. */
}

/* Hero gradient overlay: opacity-only fade — translateY would visibly shift
 * the gradient edge during the animation, since the overlay is full-bleed
 * absolutely-positioned. */
.gogox-fadein-target .gogox-hero-overlay {
    opacity: 0;
    transition: opacity 1.2s ease;
}

.gogox-fadein-target.is-visible .gogox-hero-box,
.gogox-fadein-target.is-visible .gogox-funnel-inner,
.gogox-fadein-target.is-visible .gogox-vehicles-inner,
.gogox-fadein-target.is-visible .gogox-itg-inner,
.gogox-fadein-target.is-visible .gogox-news-inner,
.gogox-fadein-target.is-visible .gogox-promo-rail,
.gogox-fadein-target.is-visible .gogox-promo-image,
.gogox-fadein-target.is-visible .gogox-cta-band > *,
.gogox-fadein-target.is-visible .gogox-testimonials-inner,
.gogox-fadein-target.is-visible .gogox-faq-inner,
.gogox-fadein-target.is-visible .gogox-pricing-inner,
.gogox-fadein-target.is-visible .gogox-process-steps-image,
.gogox-fadein-target.is-visible .gogox-process-steps-content,
.gogox-fadein-target.is-visible .gogox-vstack-inner,
.gogox-fadein-target.is-visible .gogox-contact-form-inner,
.gogox-fadein-target.is-visible .gogox-promo-carousel-inner,
.gogox-fadein-target.is-visible .gogox-newsbanner-inner,
.gogox-fadein-target.is-visible .gogox-journey-inner,
.gogox-fadein-target.is-visible .gogox-heading-band-inner,
.gogox-fadein-target.is-visible .gogox-logo-strip-inner,
.gogox-fadein-target.is-visible .gogox-hero-overlay {
    opacity: 1;
    transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
    .gogox-fadein-target .gogox-hero-box,
    .gogox-fadein-target .gogox-hero-overlay,
    .gogox-fadein-target .gogox-funnel-inner,
    .gogox-fadein-target .gogox-vehicles-inner,
    .gogox-fadein-target .gogox-itg-inner,
    .gogox-fadein-target .gogox-news-inner,
    .gogox-fadein-target .gogox-promo-rail,
    .gogox-fadein-target .gogox-promo-image,
    .gogox-fadein-target .gogox-cta-band > *,
    .gogox-fadein-target .gogox-testimonials-inner,
    .gogox-fadein-target .gogox-faq-inner,
    .gogox-fadein-target .gogox-pricing-inner,
    .gogox-fadein-target .gogox-process-steps-image,
    .gogox-fadein-target .gogox-process-steps-content,
    .gogox-fadein-target .gogox-vstack-inner,
    .gogox-fadein-target .gogox-contact-form-inner,
    .gogox-fadein-target .gogox-promo-carousel-inner,
    .gogox-fadein-target .gogox-newsbanner-inner,
    .gogox-fadein-target .gogox-journey-inner,
    .gogox-fadein-target .gogox-heading-band-inner,
    .gogox-fadein-target .gogox-logo-strip-inner {
        opacity: 1;
        transform: none;
        transition: none;
    }
    .gogox-hero-bg {
        transform: none !important;
    }
}

/* ── /pricing/ page ────────────────────────────────────────────────────── */
.gogox-pricing-page-heading {
    padding: 48px 24px 24px;
    text-align: center;
}
.gogox-pricing-page-heading h1 {
    font-size: 2rem;
    color: #103650;
    margin: 0;
}


/* ====================================================================
   gogox_heading_band — centered (or left-aligned) section heading with
   optional intro paragraph. Used between content blocks to introduce
   the next section.
   ==================================================================== */
.gogox-heading-band {
  width: 100%;
  padding: 48px 24px 16px;
}
.gogox-heading-band-inner {
  max-width: 960px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.gogox-heading-band--center .gogox-heading-band-inner {
  align-items: center;
  text-align: center;
}
.gogox-heading-band--left .gogox-heading-band-inner {
  align-items: flex-start;
  text-align: left;
}
.gogox-heading-band-title {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 1.3;
  margin: 0;
}
.gogox-heading-band-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0;
  max-width: 720px;
}
@media (max-width: 700px) {
  .gogox-heading-band { padding: 32px 20px 8px; }
  .gogox-heading-band-title { font-size: 26px; line-height: 34px; }
  .gogox-heading-band-intro { font-size: 15px; }
}

/* Banner variant — applied via _css_classes "gogox-heading-band--banner" on
   a gogox_heading_band widget. Renders the heading on a dark-navy full-width
   strip with large white text. Mirrors prod's /sg/about-us/ "Our core values"
   masthead band. The user-added class lands on the outer .elementor-element
   wrapper, so styles cascade onto the inner heading band. */
.gogox-heading-band--banner {
  background: #0F2A47;
}
.gogox-heading-band--banner .gogox-heading-band {
  padding: 80px 24px;
}
/* /bad-weather/ (page 375 root, 819 /hk/): the blue masthead is the FIRST
   section, sitting under the transparent site header. Equal 120px top/bottom
   padding keeps the title dead-centre in the band while still clearing the
   header bar overlaying the top. */
body.page-id-375 .gogox-heading-band--banner .gogox-heading-band,
body.page-id-819 .gogox-heading-band--banner .gogox-heading-band {
  padding: 120px 24px !important;
}
/* !important required throughout: the base .gogox-heading-band-title/-intro
   rules are !important themselves, so the variant must out-rank them or the
   white text silently loses to the base dark colours. */
.gogox-heading-band--banner .gogox-heading-band-title {
  color: #FFFFFF !important;
  font-size: 56px !important;
  font-weight: 400 !important;
  line-height: 1.1 !important;
}
.gogox-heading-band--banner .gogox-heading-band-intro {
  color: rgba(255,255,255,0.85) !important;
  font-size: 18px !important;
  max-width: 820px;
}
@media (max-width: 700px) {
  .gogox-heading-band--banner .gogox-heading-band { padding: 56px 20px; }
  .gogox-heading-band--banner .gogox-heading-band-title { font-size: 38px !important; }
}

/* /sg/business-delivery/ case-study tile (above the "Trusted by" heading)
 * Width fixed at 1141px on desktop; fluid below that. !important is needed
 * because Elementor's `.elementor-widget-image img` rule beats ours on
 * cascade order otherwise. */
.gogox-biz-case-study img,
.gogox-biz-case-study .elementor-image img,
.gogox-biz-case-study a img {
  max-width: 1141px !important;
  width: 100% !important;
  height: auto !important;
  margin: 0 auto !important;
  display: block !important;
}

/* ====================================================================
   gogox_logo_strip — horizontal row of brand logos. Up to 6 logos in
   a single row on desktop; wraps to 3-per-row at <=900px and 2-per-row
   at <=540px.
   ==================================================================== */
.gogox-logo-strip {
  width: 100%;
  padding: 40px 24px 60px;
}
.gogox-logo-strip-inner {
  max-width: 1141px;
  margin: 0 auto;
}
.gogox-logo-strip-row {
  display: flex;
  align-items: center;
  /* `safe center` keeps the row centered when everything fits, and falls
     back to a start-aligned swipeable band when it overflows — logos keep
     their size instead of shrinking to squeeze in. */
  justify-content: safe center;
  gap: 48px;
  margin: 0;
  padding: 0;
  list-style: none;
  flex-wrap: nowrap;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.gogox-logo-strip-row::-webkit-scrollbar { display: none; }
.gogox-logo-strip-item {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  scroll-snap-align: center;
  /* a slot never collapses — even a failed image keeps its place in the
     visual order instead of shrinking to an alt-text sliver */
  min-width: 96px;
  min-height: 64px;
}
.gogox-logo-strip-img {
  max-width: 100%;
  max-height: 120px; /* big partner logos, Lalamove-style */
  width: auto;
  height: auto;
  object-fit: contain;
}
/* Heading matches the other section titles (same spec as
   .gogox-socar-heading / 毛孩家長真實好評 etc.). */
.gogox-logo-strip-heading {
  margin: 0 0 40px;
  text-align: center;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  color: #00121A;
}
@media (max-width: 700px) {
  .gogox-logo-strip-heading { font-size: 26px; line-height: 34px; margin-bottom: 24px; }
  /* When the big logos can't fit in one row, the strip becomes a swipeable
     snap carousel instead of shrinking the artwork. */
  .gogox-logo-strip-row {
    justify-content: flex-start;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    gap: 32px;
    padding-bottom: 8px;
  }
  .gogox-logo-strip-row::-webkit-scrollbar { display: none; }
  .gogox-logo-strip-item { flex: 0 0 auto; scroll-snap-align: center; }
  .gogox-logo-strip-img { max-height: 72px; max-width: 160px; } /* one-row roll: comfortably bigger than the old 50px */
  /* marquee rows: no scrollbar padding, and the loop seam must equal the
     32px mobile gap (desktop uses 48px). */
  .gogox-logo-strip-marquee .gogox-logo-strip-row { padding-right: 32px; padding-bottom: 0; }
}
/* Auto-roll marquee (5+ logos): the row is rendered twice inside
   .gogox-logo-strip-marquee; translating the pair by exactly -50% loops
   seamlessly because each row carries the 48px gap as padding-right.
   Pauses on hover; static for prefers-reduced-motion. */
.gogox-logo-strip-viewport {
  overflow: hidden;
  cursor: grab;           /* the strip is draggable */
  touch-action: pan-y;    /* horizontal swipes drag the strip, vertical still scrolls the page */
  user-select: none;
}
.gogox-logo-strip-viewport:active { cursor: grabbing; }
.gogox-logo-strip--rolling .gogox-logo-strip-img { -webkit-user-drag: none; user-select: none; }
/* When the JS engine takes over (is-js), the CSS keyframe animation is off —
   position is driven per-frame so auto-roll and dragging share one offset. */
.gogox-logo-strip--rolling.is-js .gogox-logo-strip-marquee { animation: none; }
.gogox-logo-strip-marquee {
  display: flex;
  width: max-content;
  /* Starts PAUSED at translateX(0) — i.e. exactly the order set in
     Elementor, first item leftmost — and only begins rolling once the
     strip scrolls into view (is-inview added by the widget JS). Otherwise
     the strip has already rotated by the time the visitor reaches it and
     the order reads as wrong. */
  animation: gogoxLogoMarquee 60s linear infinite;
  animation-play-state: paused;
}
.gogox-logo-strip--rolling.is-inview .gogox-logo-strip-marquee {
  animation-play-state: running;
}
.gogox-logo-strip-marquee .gogox-logo-strip-row {
  justify-content: flex-start;
  overflow: visible;
  scroll-snap-type: none;
  padding-right: 48px; /* keeps the loop seam the same width as the item gap */
}
.gogox-logo-strip--rolling .gogox-logo-strip-viewport:hover .gogox-logo-strip-marquee { animation-play-state: paused; }
@keyframes gogoxLogoMarquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .gogox-logo-strip-marquee { animation: none; }
  .gogox-logo-strip-viewport { overflow-x: auto; }
}

/* Setup-state placeholder box (shown until real logos are uploaded). */
.gogox-logo-strip-ph {
  display: block;
  width: 100%;
  max-width: 140px;
  height: 60px;
  border-radius: 8px;
  background: #E3E7EC;
}
/* Pull the strip up into the funnel's 60px bottom padding so it reads as one
   tight black band with the cards above (was a large empty gap). */
.home .elementor-element-sghlogo1 {
  margin-top: -48px;
}
@media (max-width: 1177px) {
  /* Tablet band (768-1177), STATIC strips only: fit all logos into TWO rows
     by capping at 4 per row. Rolling marquee strips stay on one endless
     row at every width. */
  .gogox-logo-strip:not(.gogox-logo-strip--rolling) .gogox-logo-strip-row { flex-wrap: wrap; gap: 32px; justify-content: center; }
  .gogox-logo-strip:not(.gogox-logo-strip--rolling) .gogox-logo-strip-item { flex: 0 0 calc((100% - 96px) / 4); }
}
@media (max-width: 767px) {
  /* Mobile, STATIC strips only: keep 4-per-row, scale logos down to fit. */
  .gogox-logo-strip:not(.gogox-logo-strip--rolling) .gogox-logo-strip-img { max-height: 50px; }
}

/* ====================================================================
   gogox_region_switcher — flag-icon dropdown for switching between
   regional sub-sites. CSS-only hover/focus reveal; no JS dependency.
   ==================================================================== */
.gogox-region-switcher {
  position: relative;
  display: inline-block;
}
.gogox-region-switcher-trigger {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.4);
  border-radius: 999px;
  padding: 6px 14px;
  color: inherit;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease;
}
.gogox-region-switcher-trigger:hover,
.gogox-region-switcher:focus-within .gogox-region-switcher-trigger {
  background: rgba(255, 255, 255, 0.1);
  border-color: rgba(255, 255, 255, 0.6);
}
/* When the header has flipped to its solid is-scrolled state, restyle the
 * trigger so it stays readable on the white background. */
.elementor-location-header.is-scrolled .gogox-region-switcher-trigger {
  border-color: #E3E7EC;
  color: #00121A;
}
.elementor-location-header.is-scrolled .gogox-region-switcher-trigger:hover {
  background: #F3F7F8;
  border-color: #0088BF;
  color: #0088BF;
}
.gogox-region-switcher-caret {
  font-size: 12px;
  line-height: 1;
}
.gogox-region-switcher-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  min-width: 180px;
  padding: 8px 0;
  margin: 0;
  list-style: none;
  background: #FFFFFF;
  border-radius: 8px;
  box-shadow: 0 10px 30px rgba(0, 18, 26, 0.12);
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
  z-index: 120;
}
.gogox-region-switcher:hover .gogox-region-switcher-menu,
.gogox-region-switcher:focus-within .gogox-region-switcher-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.gogox-region-switcher-item {
  margin: 0;
}
/* High-specificity selectors: the header's `.elementor-element-hdract a`
   rule (line ~2030) forces #fff on every link in the CTA strip. We need to
   beat its specificity (.elementor-location-header .elementor-element-hdract a
   = 0,2,1) on the dropdown items. */
.elementor-location-header .gogox-region-switcher-menu .gogox-region-switcher-item > a,
.elementor-location-header .gogox-region-switcher-menu .gogox-region-switcher-item > span {
  display: block;
  padding: 8px 18px;
  color: #00121A !important;
  font-size: 14px;
  line-height: 22px;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
}
.elementor-location-header .gogox-region-switcher-menu .gogox-region-switcher-item > a:hover {
  background: #F3F7F8;
  color: #0088BF !important;
}
.elementor-location-header .gogox-region-switcher-menu .gogox-region-switcher-item.is-active > span {
  background: #F3F7F8;
  color: #0088BF !important;
  font-weight: 700;
  cursor: default;
}
.elementor-location-header .gogox-region-switcher-menu .gogox-region-switcher-item.is-disabled > span {
  color: #9AA4AE !important;
  cursor: not-allowed;
}
.gogox-region-switcher-item.is-disabled small {
  font-size: 11px;
  color: #C0C7D0;
  margin-left: 4px;
}


/* gogox_service_tiers wrap + head — reuses the existing .gogox-tier-* card
 * styles (defined ~lines 415–492) for the cards themselves. */
.gogox-service-tiers-wrap {
  width: 100%;
  padding: 72px 24px 24px;
}
.gogox-service-tiers-head {
  max-width: 960px;
  margin: 0 auto 32px;
  text-align: center;
}
.gogox-service-tiers-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 1.3;
  margin: 0 0 12px;
}
.gogox-service-tiers-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0;
}

/* gogox_service_tiers — CAROUSEL mode. Mirrors the gogox_testimonials
 * carousel layout: stage is an inline flex row of [prev arrow | viewport |
 * next arrow]. JS in footer.php (CAROUSEL_CONFIGS) handles paging.
 * Per-view widths use !important to beat the base .gogox-tier-card flex
 * rule (which is !important itself for the grid layout). */
.gogox-service-tiers--carousel .gogox-service-tiers-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.gogox-service-tiers--carousel .gogox-service-tiers-viewport {
  flex: 1 1 auto;
  overflow: hidden;
}
.gogox-service-tiers--carousel .gogox-service-tiers-track {
  display: flex;
  align-items: stretch;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
/* Per-view card widths (!important beats the grid .gogox-tier-card rule) */
.gogox-service-tiers--carousel[data-per-view="3"] .gogox-tier-card { flex: 0 0 calc((100% - 48px) / 3) !important; }
.gogox-service-tiers--carousel[data-per-view="2"] .gogox-tier-card { flex: 0 0 calc((100% - 24px) / 2) !important; }
.gogox-service-tiers--carousel[data-per-view="4"] .gogox-tier-card { flex: 0 0 calc((100% - 72px) / 4) !important; }
.gogox-service-tiers--carousel .gogox-tier-card {
  /* Override the base 260px min-width that prevents shrinking */
  min-width: 0 !important;
}

/* Chevron buttons — reuse the testimonials carousel chevron styling exactly:
 * 44 × 44 round, light grey border, white bg, brand-blue chevron, hover
 * inverts to blue bg + white chevron, disabled fades to 35 %. */
.gogox-service-tiers-arrow {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #E3E7EC;
  background: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  line-height: 1;
  color: #0088BF;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  padding: 0;
}
.gogox-service-tiers-arrow:hover {
  background: #0088BF;
  border-color: #0088BF;
  color: #fff;
}
.gogox-service-tiers-arrow:disabled {
  opacity: 0.35;
  cursor: default;
  background: #fff;
  border-color: #E3E7EC;
  color: #0088BF;
}

@media (max-width: 1100px) {
  .gogox-service-tiers--carousel[data-per-view="4"] .gogox-tier-card,
  .gogox-service-tiers--carousel[data-per-view="3"] .gogox-tier-card {
    flex: 0 0 calc((100% - 24px) / 2) !important;
  }
}
@media (max-width: 700px) {
  .gogox-service-tiers--carousel .gogox-service-tiers-stage { padding: 0 16px; gap: 8px; }
  /* Selectors below repeat the [data-per-view="N"] attr selector so the
     specificity matches the @media (max-width: 1100px) rule above (0,3,0).
     Without that match, the 1100px rule's 50%-width declaration wins on
     phone-width viewports (<400px) and you see two half-cards instead of
     one full card. */
  .gogox-service-tiers--carousel[data-per-view="2"] .gogox-tier-card,
  .gogox-service-tiers--carousel[data-per-view="3"] .gogox-tier-card,
  .gogox-service-tiers--carousel[data-per-view="4"] .gogox-tier-card {
    flex: 0 0 100% !important;
  }
  .gogox-service-tiers-arrow { width: 36px; height: 36px; font-size: 22px; }
}

/* Outline pill variant of gogox-btn-primary — used for secondary CTAs like
 * "Other services" inside the use-case section. White bg, blue border + text,
 * hover fills blue. Same pill shape as the primary. */
.gogox-btn-outline {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: transparent !important;
  color: #0088BF !important;
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 700 !important;
  font-size: 16px !important;
  padding: 16px 40px !important;   /* standard preset size */
  border: 2px solid #0088BF !important;
  border-radius: 40px !important;
  text-decoration: none !important;
  transition: all 0.2s ease;
  cursor: pointer;
}
.gogox-btn-outline:hover {
  background: #0088BF !important;
  color: #FFFFFF !important;
}

/* Section-level CTAs inside icon-text-grid (e.g. "Other services" below the
 * 6-icon grid) — centered, tight spacing above the cards so the button
 * visually belongs to the same band. */
.gogox-itg-section-cta {
  display: flex;
  justify-content: center;
  margin-top: 32px;
}

/* Bottom CTA inside gogox_service_tiers (e.g. "Get Quote" below the vehicle
 * cards) — centered, with smaller top spacing so the button reads as part of
 * the cards' section rather than a separate band. */
.gogox-service-tiers-cta {
  display: flex;
  justify-content: center;
  margin-top: 32px;
  padding: 0 24px 24px;
}

/* Restore the underline on inline anchor links inside the service-tiers
 * intro (e.g. the "here" link in "Click here to view additional fees."). */
.gogox-service-tiers-intro a {
  color: inherit;
  text-decoration: underline;
}
.gogox-service-tiers-intro a:hover {
  color: #0088BF;
}

/* Stat-card variant of gogox_icon_text_grid — used on /sg/info/ for the
 * 3 big-number stats (6 / 340+ / 5.2M+). Beefs up the title size so the
 * number reads as the primary content; dims the description to a label. */
.gogox-info-stats .gogox-itg-item-title {
  font-size: 56px !important;
  font-weight: 900 !important;
  color: #0088BF !important;
  line-height: 1 !important;
  margin: 0 0 8px !important;
}
.gogox-info-stats .gogox-itg-item-desc {
  font-size: 15px;
  color: #7a7a7a;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
@media (max-width: 700px) {
  .gogox-info-stats .gogox-itg-item-title { font-size: 42px !important; }
}

/* ====================================================================
   gogox_stat_band — full-width band of big animated number stats.
   Background is either flat color or image+overlay. Numbers count up
   from 0 to target when the section scrolls into view (JS in footer.php).
   ==================================================================== */
.gogox-stat-band {
  position: relative;
  width: 100%;
  padding: 72px 24px;
}
.gogox-stat-band--has-bg {
  background-attachment: scroll;
}
.gogox-stat-band-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.gogox-stat-band-inner {
  position: relative;
  z-index: 1;
  max-width: 1200px;
  margin: 0 auto;
}
.gogox-stat-band-grid {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-around;
  gap: 48px;
  text-align: center;
}
.gogox-stat-band-item {
  flex: 1 1 0;
  min-width: 160px;
}
.gogox-stat-band-figure {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: "proxima-nova", sans-serif;
  font-weight: 900;
  font-size: 64px;
  line-height: 1;
  color: inherit;
}
.gogox-stat-band-prefix,
.gogox-stat-band-suffix {
  font-size: 40px;
  font-weight: 700;
}
.gogox-stat-band-label {
  margin-top: 12px;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: inherit;
  opacity: 0.95;
}
@media (max-width: 700px) {
  .gogox-stat-band { padding: 56px 20px; }
  .gogox-stat-band-inner { gap: 32px; }
  .gogox-stat-band-figure { font-size: 48px; }
  .gogox-stat-band-prefix,
  .gogox-stat-band-suffix { font-size: 30px; }
  .gogox-stat-band-label { font-size: 12px; }
}

/* gogox_value_props_stack — Brand Blue theme variant. Flips background to
 * #0088BF and all text (heading + intro + item titles + item descriptions)
 * to white. Marketing picks this via the widget's Theme select. */
.gogox-vstack.gogox-vstack--theme-brand-blue {
  background-color: #0088BF;
}
.gogox-vstack.gogox-vstack--theme-brand-blue .gogox-vstack-heading,
.gogox-vstack.gogox-vstack--theme-brand-blue .gogox-vstack-intro,
.gogox-vstack.gogox-vstack--theme-brand-blue .gogox-vstack-item-title,
.gogox-vstack.gogox-vstack--theme-brand-blue .gogox-vstack-item-desc {
  color: #FFFFFF;
}

/* /sg/contact/ — split layout (text-editor + CF7 form on a white band).
 * The left column needs visible h1 styling + a bit of breathing room on
 * the left edge so it doesn't sit flush to the viewport. */
/* Hero band: mirrors the HK /corporate/ hero pattern (line ~3054). The
 * `max(24px, calc((100% - 1200px) / 2))` padding gives the columns 1200px
 * centered content on wide viewports + 24px minimum gutter on narrow ones,
 * keeping the left column aligned under the site header's GoGoX logo. */
.elementor-element.gogox-contact-hero {
  position: relative !important;
  width: 100% !important;
  padding: 120px max(20px, calc((100% - 1200px) / 2)) 64px !important;
  gap: 48px !important;
  align-items: flex-start !important;
  justify-content: space-between !important;
}
.elementor-element.gogox-contact-left,
.elementor-element.gogox-contact-right {
  position: relative;
}
.elementor-element.gogox-contact-left {
  flex: 1 1 0 !important;
  max-width: none !important;
  color: #00121A;
}
.elementor-element.gogox-contact-right {
  flex: 1 1 0 !important;
  max-width: none !important;
}
/* Strip the form widget's outer chrome so it sits flush in the right
 * column — same approach as /corporate/. */
.gogox-contact-hero .gogox-contact-form {
  padding: 0 !important;
  background: transparent !important;
}
.gogox-contact-hero .gogox-contact-form-inner {
  gap: 0 !important;
  max-width: 100% !important;
}
.gogox-contact-hero .gogox-contact-form-body {
  background: #FFFFFF;
  padding: 28px;
  border-radius: 12px;
  box-shadow: 0 12px 40px rgba(0, 18, 26, 0.12);
}
/* Heading widget set to 28px total height: 28px text on 28px line so the
   widget container exactly matches. Inter-widget gap handled by margin on
   the widget container, not the heading element itself. */
.elementor-element.elementor-element-sgcthd1 {
  margin-bottom: 16px !important;
}
.gogox-contact-left .elementor-widget-heading .elementor-heading-title.gogox-contact-h1,
.gogox-contact-left .gogox-contact-h1 .elementor-heading-title {
  color: #0088bf;
  font-family: "proxima-nova", sans-serif;
  font-size: 1.75rem;
  font-weight: 600;
  line-height: 28px;
  margin: 0;
}
/* Generic fallback if Elementor wraps the heading differently */
.gogox-contact-left h1 {
  color: #0088bf;
  font-family: "proxima-nova", sans-serif;
  font-size: 1.75rem;
  font-weight: 600;
  line-height: 28px;
  margin: 0;
}
.gogox-contact-text,
.gogox-contact-text * {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 15px;
  line-height: 1.7;
}
.gogox-contact-text strong {
  font-weight: 700;
  font-size: 16px;
}
.gogox-contact-text a { color: #0088BF; text-decoration: none; }
.gogox-contact-text a:hover { text-decoration: underline; }

/* Tablet — stack vertically so the form has full width to render. */
@media (max-width: 1024px) {
  .elementor-element.gogox-contact-hero {
    flex-direction: column !important;
    padding: 120px max(20px, calc((100% - 1200px) / 2)) 64px !important;
    gap: 40px !important;
  }
  .elementor-element.gogox-contact-left,
  .elementor-element.gogox-contact-right {
    flex: 1 1 100% !important;
    max-width: 100% !important;
    width: 100% !important;
  }
}
/* Phone — tighter padding, smaller h1 */
@media (max-width: 700px) {
  .elementor-element.gogox-contact-hero {
    padding: 96px 20px 40px !important;
    gap: 32px !important;
  }
  .gogox-contact-left .gogox-contact-h1 .elementor-heading-title,
  .gogox-contact-left h1 { font-size: 1.5rem; }
}

/* gogox_icon_text_grid — themed bg variants. Both flip text to white. */
.gogox-itg.gogox-itg--theme-brand-blue {
  background-color: #0088BF !important;
}
.gogox-itg.gogox-itg--theme-dark-blue {
  background-color: #195084 !important;
}
.gogox-itg.gogox-itg--theme-brand-blue .gogox-itg-heading,
.gogox-itg.gogox-itg--theme-brand-blue .gogox-itg-intro,
.gogox-itg.gogox-itg--theme-brand-blue .gogox-itg-item-title,
.gogox-itg.gogox-itg--theme-brand-blue .gogox-itg-item-desc,
.gogox-itg.gogox-itg--theme-brand-blue .gogox-itg-item small,
.gogox-itg.gogox-itg--theme-dark-blue .gogox-itg-heading,
.gogox-itg.gogox-itg--theme-dark-blue .gogox-itg-intro,
.gogox-itg.gogox-itg--theme-dark-blue .gogox-itg-item-title,
.gogox-itg.gogox-itg--theme-dark-blue .gogox-itg-item-desc,
.gogox-itg.gogox-itg--theme-dark-blue .gogox-itg-item small {
  color: #FFFFFF !important;
}

/* gogox_cta_band — background-image variant. Section wraps content with a
 * position: relative + optional dark overlay so text stays readable over
 * any photo. The inner `.gogox-cta-band-inner` lifts heading + button
 * above the overlay layer. */
.gogox-cta-band.gogox-cta-band--has-bg {
  position: relative;
  overflow: hidden;
}
.gogox-cta-band-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
}
.gogox-cta-band > .gogox-cta-band-inner {
  position: relative;
  z-index: 1;
}

/* gogox_cta_band — TALL height variant. Bumps vertical padding +40% so the
 * band reads as a more hero-like section. Horizontal padding unchanged. */
.gogox-cta-band.gogox-cta-band--tall {
  padding-top: 100px !important;
  padding-bottom: 100px !important;
}
@media (max-width: 700px) {
  .gogox-cta-band.gogox-cta-band--tall {
    padding-top: 64px !important;
    padding-bottom: 64px !important;
  }
}

/* gogox_cta_band — COMPACT variant. Matches gogox_heading_band's 48px/16px
 * vertical padding + 960px max-width on the inner block. Used on
 * /sg/about-us/ so the "We reimagine a world..." mission box reads at the
 * same visual depth as the "We started with bold ambitions..." heading
 * sitting beneath it. */
.gogox-cta-band.gogox-cta-band--compact {
  padding-top: 48px !important;
  padding-bottom: 16px !important;
  align-items: flex-start !important;
}
.gogox-cta-band.gogox-cta-band--compact .gogox-cta-band-inner {
  max-width: 960px;
  margin-inline: auto;
}
.gogox-cta-band.gogox-cta-band--compact .gogox-cta-title,
.gogox-cta-band.gogox-cta-band--compact .gogox-cta-text {
  text-align: left;
}
@media (max-width: 700px) {
  .gogox-cta-band.gogox-cta-band--compact {
    padding-top: 32px !important;
    padding-bottom: 8px !important;
  }
}

/* Inline highlight spans usable inside any heading that allows <span class>:
   marketing applies via inline HTML, e.g.
   <span class="gogox-hl-yellow">reimagine a world</span>. */
.gogox-hl-yellow { color: #FFDD00; }
.gogox-hl-blue   { color: #0088BF; }

/* gogox_faq — DARK variant. White text on inherited dark bg_color. Pairs
   with a black-bg cta_band above it to form a unified "mission" section
   on /sg/about-us/. */
.gogox-faq.gogox-faq--dark { color: #FFFFFF; }
.gogox-faq.gogox-faq--dark .gogox-faq-heading,
.gogox-faq.gogox-faq--dark .gogox-faq-intro,
.gogox-faq.gogox-faq--dark .gogox-faq-question-text,
.gogox-faq.gogox-faq--dark .gogox-faq-answer {
  color: #FFFFFF;
}
.gogox-faq.gogox-faq--dark .gogox-faq-item {
  border-color: rgba(255,255,255,0.18);
}
.gogox-faq.gogox-faq--dark .gogox-faq-icon::before,
.gogox-faq.gogox-faq--dark .gogox-faq-icon::after {
  background: #FFFFFF;
}

/* /sg/api/ + /api/ — API plan cards. Mirrors the design Yuki built on the
 * staging HK /api/ page. Used by both regions for visual consistency. */
.gogox-api-plans-section,
.gogox-api-cta-section {
    max-width: 860px;
    margin: 0 auto;
    padding: 48px 24px;
}
.gogox-api-plans {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}
.gogox-api-plan {
    position: relative;
    border: 2px solid #d0dde6;
    border-radius: 8px;
    padding: 32px 24px 24px;
    display: flex;
    flex-direction: column;
}
.gogox-api-plan-ribbon {
    position: absolute;
    top: 16px;
    right: -2px;
    background: #ffdd00;
    color: #0088bf;
    font-size: 0.75rem;
    font-weight: 700;
    padding: 3px 10px;
    border-radius: 3px 0 0 3px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.gogox-api-plan-title {
    font-size: 1.25rem;
    color: #103650;
    margin: 0 0 10px;
}
.gogox-api-plan-desc {
    font-size: 0.875rem;
    color: #555;
    margin: 0 0 16px;
    line-height: 1.6;
}
.gogox-api-plan-features {
    list-style: none;
    padding: 0;
    margin: 0 0 24px;
    flex: 1;
}
.gogox-api-plan-features li {
    padding: 6px 0 6px 22px;
    position: relative;
    font-size: 0.875rem;
    color: #333;
    border-bottom: 1px solid #f0f0f0;
    line-height: 1.5;
}
.gogox-api-plan-features li::before {
    content: '✓';
    position: absolute;
    left: 0;
    color: #0088bf;
    font-weight: 700;
}
.gogox-api-plan-cta {
    display: inline-block;
    background: #0088bf;
    color: #fff;
    text-decoration: none;
    padding: 10px 20px;
    border-radius: 4px;
    font-weight: 600;
    font-size: 0.875rem;
    text-align: center;
    transition: background 0.2s;
}
.gogox-api-plan-cta:hover { background: #006fa0; }
.gogox-api-bottom-cta {
    text-align: center;
    font-size: 1rem;
    color: #333;
}
.gogox-api-bottom-cta a { color: #0088bf; font-weight: 600; }
@media (max-width: 700px) {
  .gogox-api-plans { grid-template-columns: 1fr; }
}

/* ── /business/ page ─────────────────────────────────────────────────────── */
.gogox-biz-solutions  { max-width: 1200px; margin: 0 auto; padding: 48px 24px; }
.gogox-biz-industries { max-width: 960px; margin: 0 auto; padding: 48px 24px; }
.gogox-biz-compare-section {
    max-width: 960px;
    margin: 0 auto;
    padding: 48px 24px;
}
/* /sg/pricing/ — detailed pricing comparison table. Vehicles as columns,
 * pricing attributes as rows. Horizontal scroll on narrow viewports. */
.gogox-pricing-table-section {
  max-width: 1200px;
  margin: 0 auto;
  padding: 24px 24px 48px;
  overflow-x: auto;
}
.gogox-pricing-table {
  width: 100%;
  border-collapse: collapse;
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  min-width: 560px;
}
/* 3-column comparison grid: feature label | Custom | Standard */
.gogox-biz-compare { margin-bottom: 20px; }
.gogox-biz-hrow,
.gogox-biz-frow {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    align-items: stretch;
}
.gogox-biz-hrow { margin-bottom: 2px; }
/* header cells */
.gogox-biz-hcell--label { background: #fff; }
.gogox-biz-hcell--custom {
    background: #0088BF;
    padding: 20px 16px 16px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}
.gogox-biz-hcell--custom strong { display: block; color: #fff; font-size: 0.95rem; line-height: 1.3; }
.gogox-biz-hcell--standard {
    background: #E2F0F7;
    padding: 20px 16px 16px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}
.gogox-biz-hcell--standard strong { display: block; color: #003d5b; font-size: 0.95rem; line-height: 1.3; }
.gogox-biz-col-icon { width: 48px; height: 48px; object-fit: contain; display: block; }
/* feature row cells */
.gogox-biz-fcell {
    min-height: 60px;
    display: flex;
    align-items: center;
}
.gogox-biz-fcell--label {
    padding: 14px 16px;
    font-size: 0.875rem;
    color: #333;
    line-height: 1.4;
    border-bottom: 1px solid #eef0f2;
}
.gogox-biz-fcell--custom {
    background: #0088BF;
    border-bottom: 1px solid rgba(255,255,255,0.15);
    justify-content: center;
    padding: 14px 8px;
}
.gogox-biz-fcell--standard {
    background: #E2F0F7;
    border-bottom: 1px solid rgba(0,61,91,0.08);
    justify-content: center;
    padding: 14px 8px;
}
.gogox-biz-fcell--empty {
    background: #E2F0F7;
    border-bottom: 1px solid rgba(0,61,91,0.08);
    justify-content: center;
    padding: 14px 8px;
}
/* tick and dash indicators inside cells */
.gogox-biz-tick { font-size: 1.2rem; font-weight: 700; line-height: 1; }
.gogox-biz-tick--light { color: #fff; }
.gogox-biz-tick--dark  { color: #0088BF; }
.gogox-biz-dash { color: #bbb; font-size: 1.2rem; line-height: 1; }
/* CTA footer row */
.gogox-biz-frow--cta .gogox-biz-fcell--custom,
.gogox-biz-frow--cta .gogox-biz-fcell--standard {
    background: #fff;
    justify-content: center;
    padding: 20px 16px;
    border-bottom: none;
}
.gogox-biz-compare-cta {
    display: inline-block;
    background: #0088bf;
    color: #fff;
    border: 2px solid #0088bf;
    text-decoration: none;
    padding: 8px 18px;
    border-radius: 4px;
    font-weight: 600;
    font-size: 0.82rem;
    transition: background 0.2s;
    white-space: nowrap;
}
.gogox-biz-compare-cta:hover { background: #006fa0; border-color: #006fa0; }
.gogox-biz-compare-cta--std {
    background: transparent;
    border-color: #0088bf;
    color: #0088bf;
}
.gogox-biz-compare-cta--std:hover { background: #f0f8fc; }
.gogox-biz-footnote { font-size: 0.78rem; color: #888; line-height: 1.6; margin-top: 12px; }
.gogox-biz-footnote a { color: #0088bf; }
.gogox-biz-sol-tnc {
  max-width: 1200px;
  margin: -32px auto 0;
  padding: 0 24px 16px;
  box-sizing: border-box;
}
.gogox-biz-sol-tnc ul { margin: 0; padding-left: 16px; }
.gogox-biz-sol-tnc li { font-size: 12px; color: #888; line-height: 1.6; }
.gogox-biz-sol-tnc a { color: #0088bf; }
@media (max-width: 640px) {
    /* Horizontal scroll — label column sticks, data columns scroll right */
    .gogox-biz-compare {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        margin: 0 -16px 20px;
        padding: 0 16px;
    }
    .gogox-biz-hrow,
    .gogox-biz-frow {
        grid-template-columns: 150px 110px 110px;
        min-width: 370px;
    }
    /* Sticky label column */
    .gogox-biz-hcell--label {
        position: sticky;
        left: 0;
        background: #fff;
        z-index: 2;
    }
    .gogox-biz-fcell--label {
        position: sticky;
        left: 0;
        background: #fff;
        z-index: 1;
        box-shadow: 3px 0 6px -2px rgba(0,0,0,0.08);
        font-size: 0.82rem;
    }
    /* Tighter header cells */
    .gogox-biz-hcell--custom,
    .gogox-biz-hcell--standard {
        padding: 14px 10px 10px;
        gap: 8px;
    }
    .gogox-biz-hcell--custom strong,
    .gogox-biz-hcell--standard strong { font-size: 0.8rem; }
    .gogox-biz-col-icon { width: 30px; height: 30px; }
    .gogox-biz-compare-ctas { flex-direction: column; align-items: center; }
    /* CTA row sits outside the scroll container. Reserve 150px for the sticky
       label column (kept invisible) so the two buttons land under Custom/Standard. */
    .gogox-biz-frow--cta {
        grid-template-columns: 150px 1fr 1fr;
        min-width: 0;
        padding: 16px 0;
    }
    .gogox-biz-frow--cta .gogox-biz-fcell--label { visibility: hidden; }
    .gogox-biz-frow--cta .gogox-biz-fcell--custom,
    .gogox-biz-frow--cta .gogox-biz-fcell--standard {
        padding: 8px 16px;
        background: #fff;
        border-bottom: none;
        min-height: 0;
    }
}

/* ── /download/ page ────────────────────────────────────────────────────── */
.gogox-dl-hero {
    background: linear-gradient(135deg, #003d5b 0%, #0088bf 100%);
    width: 100vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    box-sizing: border-box;
}
.gogox-dl-hero-inner {
    max-width: 1100px;
    margin: 0 auto;
    padding: 64px 40px;
    display: flex;
    align-items: center;
    gap: 48px;
}
.gogox-dl-hero-content { flex: 1; min-width: 0; }
.gogox-dl-hero-content h1 {
    color: #fff;
    font-size: 2rem;
    font-weight: 700;
    line-height: 1.3;
    margin: 0 0 16px;
}
.gogox-dl-hero-content > p {
    color: rgba(255,255,255,0.9);
    font-size: 1rem;
    line-height: 1.6;
    margin: 0 0 28px;
}
.gogox-dl-install-btn {
    display: inline-block;
    background: #ffc200;
    color: #003d5b;
    font-size: 1rem;
    font-weight: 700;
    padding: 16px 40px;
    border-radius: 50px;
    text-decoration: none;
    transition: background 0.2s;
}
.gogox-dl-install-btn:hover { background: #e5ae00; }
.gogox-dl-badge-link { display: inline-block; }
.gogox-dl-badge-img { max-width: 200px; height: auto; display: block; }
.gogox-dl-avail {
    font-size: 0.85rem;
    color: #555;
    margin: 12px 0 0 !important;
}
.gogox-dl-badges {
    padding: 32px 24px;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}
.gogox-dl-badge-img { display: block; }
.gogox-dl-mobile-only { display: none !important; }
.gogox-dl-hero-phone { flex: 0 0 42%; }
.gogox-dl-hero-phone img { max-width: 100%; height: auto; display: block; }
@media (max-width: 768px) {
    .gogox-dl-desktop-only { display: none !important; }
    .gogox-dl-mobile-only  { display: inline-block !important; }
    .gogox-dl-hero-inner   { flex-direction: column; padding: 40px 24px; }
    .gogox-dl-hero-phone   { display: none; }
    .gogox-dl-hero-content h1 { font-size: 1.6rem; }
}

/* ── /gogox-reserve/ page ───────────────────────────────────────────────── */
.gogox-reserve-intro,
.gogox-reserve-tiers-section,
.gogox-reserve-benefits-section {
    max-width: 1100px;
    margin: 0 auto;
    padding: 40px 24px;
}
.gogox-reserve-tiers-img {
    width: 100%;
    height: auto;
    display: block;
    margin-bottom: 32px;
}
.gogox-reserve-tier-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
}
.gogox-reserve-tier-card {
    text-align: center;
    padding: 16px 8px;
    border: 1px solid #d0dde6;
    border-radius: 8px;
}
.gogox-reserve-tier-title-img {
    width: 80%;
    height: auto;
    margin-bottom: 12px;
}
.gogox-reserve-tier-vehicle {
    width: 100%;
    height: auto;
    margin-bottom: 10px;
}
.gogox-reserve-tier-qual {
    font-size: 0.8rem;
    color: #555;
    margin: 0;
}
.gogox-reserve-benefits-desktop { width: 100%; height: auto; display: block; }
.gogox-reserve-benefits-mobile  { display: none; width: 100%; height: auto; }
.gogox-reserve-tnc { margin-top: 24px; }
.gogox-reserve-tnc p {
    font-size: 0.7rem;
    color: #777;
    line-height: 1.6;
    margin-bottom: 6px;
}
.gogox-reserve-tnc a { color: #0088bf; text-decoration: underline; }
@media (max-width: 767px) {
    .gogox-reserve-tier-grid       { grid-template-columns: repeat(2, 1fr); }
    .gogox-reserve-benefits-desktop { display: none; }
    .gogox-reserve-benefits-mobile  { display: block; }
}

/* ── /info/ page ─────────────────────────────────────────────────────────── */
.gogox-info-split {
    width: 100vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    box-sizing: border-box;
}
@media (max-width: 768px) {
    .gogox-info-split { flex-direction: column; }
    .gogox-info-split > div { width: 100% !important; }
    .gogox-info-split > div[style*="min-height"] { min-height: 280px !important; }
    .gogox-info-split > div[style*="padding:80px"] { padding: 40px 24px !important; }
    .gogox-info-split > div[style*="padding:64px"] { padding: 40px 24px !important; }
    .gogox-info-split > div[style*="padding:60px"] { padding: 40px 24px !important; }
}

/* ==========================================================
   /pet-transport-service/ page
   ========================================================== */
.gogox-pet-intro { max-width: 1000px; margin: 0 auto; padding: 48px 24px; text-align: center; }
.gogox-pet-features { max-width: 1000px; margin: 0 auto; padding: 32px 24px 0; }
.gogox-pet-features .gogox-itg { padding-bottom: 16px; }
.gogox-pet-tnc-section { max-width: 1000px; margin: 0 auto; padding: 0 24px 0; }
.gogox-pet-tnc-section p { font-size: 0.75rem; color: #888; line-height: 1.6; margin-bottom: 4px; }
.gogox-pet-intro h2 { color: #0088bf; margin-bottom: 16px; }
.gogox-pet-coupon {
    display: inline-block;
    background: #fff3b0;
    border: 2px dashed #ffdd00;
    border-radius: 6px;
    padding: 8px 20px;
    font-size: 1.1rem;
    margin: 8px 0;
}
.gogox-pet-tnc { font-size: 0.8rem; color: #888; margin-top: 16px; }

.gogox-pet-stories {
  padding: 48px 10%;
  text-align: center;
  background: #fff;
}
.gogox-pet-stories-heading {
  color: #0088bf;
  margin-bottom: 32px;
  font-size: 1.4rem;
  line-height: 1.4;
}
.gogox-pet-stories-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.gogox-pet-stories-grid a { display: block; overflow: hidden; border-radius: 8px; }
.gogox-pet-stories-grid img { width: 100%; height: auto; display: block; transition: transform 0.3s ease; }
.gogox-pet-stories-grid a:hover img { transform: scale(1.04); }
@media (max-width: 768px) {
  .gogox-pet-stories { padding: 40px 5%; }
  .gogox-pet-stories-grid { grid-template-columns: 1fr; }
}

/* ==========================================================
   /gogox-premium-van/ page
   ========================================================== */
.gogox-pv-intro { max-width: 1000px; margin: 0 auto; padding: 48px 24px; }
.gogox-pv-features { max-width: 1000px; margin: 0 auto; padding: 32px 24px 48px; }
.gogox-pv-intro h2 { color: #0088bf; margin-bottom: 16px; }
.gogox-pv-code {
    background: #f0f7fb;
    border: 1px solid #0088bf;
    border-radius: 4px;
    padding: 2px 10px;
    font-family: monospace;
    color: #0088bf;
}

/* ==========================================================
   /gogox-100-guarantee-tnc/ page
   ========================================================== */
.gogox-tnc-content { max-width: 800px; margin: 0 auto; padding: 48px 24px; }
.gogox-tnc-content h2 { color: #0088bf; margin-bottom: 24px; }
.gogox-tnc-content h3 { color: #00121a; margin: 24px 0 8px; font-size: 1rem; text-transform: uppercase; letter-spacing: 0.05em; }
.gogox-tnc-content ul { padding-left: 20px; }
.gogox-tnc-content li { margin-bottom: 6px; }

/* ==========================================================
   /compensation/ page
   ========================================================== */
/* No top padding: the compwrap container already spaces the content below the
   band hero, and the intro paragraph's own margin gives the same tight gap the
   bad-weather page has (content starts right under the hero). */
/* Intro paragraph matches the bad-weather page's intro exactly: same 860px
   measure, same 1.7 line-height, left-aligned. (It was rendering at a 791px
   measure with a 1.5 line-height, so it sat inset and read tighter.) */
.gogox-comp-intro {
    max-width: 860px !important;
    margin: 0 auto;
    /* no bottom padding: the paragraph's own 15.2px margin is the whole gap to
       the table, exactly as on the bad-weather page (was 24px + 15.2px = 39px) */
    padding: 0 24px 0;
    line-height: 1.7;
    text-align: left;
}
.gogox-comp-intro p { line-height: 1.7; text-align: left; }
.gogox-comp-intro h2 { color: #0088bf; }

/* Styled to match the pricing page's fee tables: rounded white card, light-grey
   header, hairline row dividers, subtle zebra — instead of the old solid-blue
   header with a full grid of borders. */
.gogox-comp-table-section { max-width: 960px; margin: 0 auto; padding: 0 24px 48px; }
.gogox-comp-table-wrap {
    border: 1px solid #E6E9ED;
    border-radius: 16px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
    background: #FFFFFF;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}
.gogox-comp-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: 15px;
    min-width: 640px;
}
/* Brand-blue header (carried over from the bad-weather table, which now shares
   this class) on white rows. */
/* Brand-blue header kept; rows go back to the light hairline dividers (the full
   black grid read too heavy). */
.gogox-comp-table th {
    background: #0088BF;
    color: #FFFFFF;
    font-weight: 600;
    border-bottom: 1px solid #0088BF;
    padding: 12px 18px;
    text-align: left;
    white-space: nowrap;
}
.gogox-comp-table td {
    padding: 10px 18px;
    border: 0;
    border-bottom: 1px solid #F0F2F5;
    color: #00121A;
    vertical-align: middle;
}
.gogox-comp-table tbody tr:last-child td { border-bottom: 0; }
.gogox-comp-table tbody tr:nth-of-type(even) td { background: #F2F5F7; }
.gogox-comp-table .gogox-comp-user { font-weight: 600; background: #F6F8FA !important; }
/* Phones show the whole table in one view — no horizontal swipe. The 640px
   min-width goes, headers are allowed to wrap (they were nowrap, which was what
   actually forced the overflow), and the type/padding tighten to fit. */
@media (max-width: 768px) {
  /* The Elementor container already pads 24px each side, so the section's own
     24px was doubling up and squeezing the table to 277px where the pricing
     tables get the full 327px. */
  .gogox-comp-table-section { padding-left: 0 !important; padding-right: 0 !important; }
  .gogox-comp-table {
    min-width: 0 !important;
    width: 100% !important;
    table-layout: fixed;
  }
  .gogox-comp-table th {
    white-space: normal !important;
    padding: 8px 5px !important;
    font-size: 12.5px !important;
    line-height: 17px !important;
  }
  .gogox-comp-table td {
    padding: 7px 5px !important;
    font-size: 11.5px !important;
    line-height: 16px !important;
    white-space: normal;
    /* normal (not break-word): amounts like HK$10,000 must never split
       mid-number — "HK$10,00 / 0" reads as a different figure. */
    word-break: normal;
    overflow-wrap: normal;
  }
  /* The compensation table's last two columns hold the money figures, so they
     get more of the width than the three label columns (equal 20% fifths left
     HK$20,000 too tight and it wrapped). thead drives widths under fixed layout. */
  .elementor-element-comptable1 .gogox-comp-table thead th:nth-child(1) { width: 17%; }
  .elementor-element-comptable1 .gogox-comp-table thead th:nth-child(2) { width: 19%; }
  .elementor-element-comptable1 .gogox-comp-table thead th:nth-child(3) { width: 19%; }
  .elementor-element-comptable1 .gogox-comp-table thead th:nth-child(4) { width: 21%; }
  .elementor-element-comptable1 .gogox-comp-table thead th:nth-child(5) { width: 24%; }
}

.gogox-comp-links-section { max-width: 960px; margin: 0 auto; padding: 0 24px 48px; }
.gogox-comp-links h3 { color: #0088bf; margin: 24px 0 8px; }
.gogox-comp-link {
    color: #0088bf;
    text-decoration: underline;
    font-weight: 500;
}
.gogox-comp-link:hover { color: #006fa0; }

/* ==========================================================
   /quoting/ page — B2C iframe
   ========================================================== */
.iframeB2C { display: block; width: 100%; height: 1060px; border: 0; }
@media (min-width: 768px) {
    .iframeB2C { height: 1440px; }
}

/* ==========================================================
   /contact/ page
   ========================================================== */
.gogox-contact-split {
    display: flex;
    gap: 64px;
    padding: 64px 20px;
    align-items: flex-start;
    max-width: 1200px;
    margin: 0 auto;
}
/* --top-clear modifier: extra top padding to clear the fixed site header on
   pages that don't have a hero banner above this section. Used by /in/
   contact + feedback (the IN composers don't wrap the html widget in an
   Elementor section that would otherwise provide clearance). */
.gogox-contact-split.gogox-contact-split--top-clear {
    padding-top: 120px;
}
.gogox-contact-info { flex: 1; }
/* Production uses a plain <span> for "CONTACT" heading, no h2 */
.gogox-contact-info p { margin: 0 0 20px; line-height: 1.6; color: #00121A; font-size: 16px; }
.gogox-contact-info p:first-child { margin-bottom: 28px; }
.gogox-contact-info strong { color: #00121A; font-weight: 700; }
.gogox-contact-info a { color: #0088bf; }
.gogox-contact-form-right { flex: 1; }
@media (max-width: 768px) {
    .gogox-contact-split {
        flex-direction: column;
        padding: 40px 20px;
        gap: 32px;
    }
    .gogox-contact-split.gogox-contact-split--top-clear {
        padding-top: 96px;
    }
    .gogox-contact-form-right { width: 100%; }
}

/* KR /contact/ — heading override: centered blue to match production ConvertFlow design */
.kr-contact-form-heading {
  font-size: 24px !important;
  font-weight: 700 !important;
  color: #0088BF !important;
  text-align: center !important;
  margin-bottom: 8px !important;
}

/* ==========================================================
   /careers/ page
   ========================================================== */
.gogox-careers-section { max-width: 800px; margin: 0 auto; padding: 48px 24px; }
.gogox-careers-about { max-width: 800px; margin: 0 auto; padding: 48px 24px; }
.gogox-careers-about h2 { color: #0088bf; margin-bottom: 20px; }
.gogox-careers-section h2 { color: #0088bf; margin-bottom: 20px; }
.gogox-careers-perks-section { max-width: 900px; margin: 0 auto; padding: 48px 24px; }
.gogox-careers-perks-section h2 { color: #0088bf; margin-bottom: 24px; }
.gogox-careers-perks { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.gogox-careers-perk {
    background: #f4f9fc;
    border-radius: 8px;
    padding: 20px 24px;
    font-weight: 600;
    color: #00121a;
}
@media (max-width: 600px) {
    .gogox-careers-perks { grid-template-columns: 1fr; }
}

/* ==========================================================
   /moving/ page
   ========================================================== */
.gogox-moving-hero-split {
    width: 100vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    background: #0088bf;
    min-height: 480px;
    align-items: stretch;
}
.gogox-moving-hero-content {
    flex: 0 0 42%;
    padding: 64px 48px 64px max(24px, calc((100vw - 1200px) / 2 + 24px));
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 20px;
}
.gogox-moving-hero-image {
    flex: 0 0 58%;
    overflow: hidden;
}
.gogox-moving-hero-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: left center;
    display: block;
}
.gogox-moving-hero-content h1 {
    color: #ffffff;
    font-size: 2.5rem;
    font-weight: 700;
    line-height: 1.2;
    margin: 0;
}
.gogox-moving-hero-content p {
    color: rgba(255,255,255,0.9);
    font-size: 1.1rem;
    line-height: 1.7;
    margin: 0;
}
.gogox-moving-hero-btn {
    display: inline-block;
    background: #ffdd00;
    color: #00121a;
    padding: 16px 40px;
    border-radius: 50px;
    font-weight: 700;
    font-size: 1rem;
    align-self: flex-start;
}
.gogox-moving-hero-btn:hover { background: #e6c800; }
.gogox-moving-mid-cta { text-align: center; padding: 40px 24px; }
/* Tighten gap between FAQ and CTA */
.gogox-moving-cta .gogox-cta-band { padding-top: 24px !important; }
@media (max-width: 768px) {
    .gogox-moving-hero-split { flex-direction: column; min-height: auto; }
    .gogox-moving-hero-content { flex: none; padding: 48px 24px 32px; }
    .gogox-moving-hero-content h1 { font-size: 1.75rem; }
    .gogox-moving-hero-image { flex: none; min-height: 260px; }
    .gogox-moving-hero-btn { align-self: flex-start; }
}

/* ==========================================================
   /mtr-delivery/ page
   ========================================================== */
.gogox-mtr-intro { max-width: 860px; margin: 0 auto; padding: 48px 24px; }
.gogox-mtr-intro h2 { color: #0088bf; }
.gogox-mtr-intro h3 { color: #00121a; margin-top: 32px; }
.gogox-mtr-details { max-width: 860px; margin: 0 auto; padding: 0 24px 48px; }
.gogox-mtr-details h2 { color: #0088bf; margin-bottom: 16px; margin-top: 32px; }
.gogox-mtr-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; font-size: 0.95rem; }
.gogox-mtr-table th, .gogox-mtr-table td { border: 1px solid #d0e5ef; padding: 10px 14px; text-align: left; }
.gogox-mtr-table th { background: #e8f4fb; font-weight: 600; width: 40%; }

/* ==========================================================
   /shopify-app/ page
   ========================================================== */
/* Hero — 2-col split */
.gogox-shopify-hero-split {
    width: 100vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    background: #0088bf;
    min-height: 520px;
    align-items: stretch;
}
.gogox-shopify-hero-content {
    flex: 0 0 50%;
    padding: 80px 60px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
.gogox-shopify-hero-image {
    flex: 0 0 50%;
    overflow: hidden;
}
.gogox-shopify-hero-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.gogox-shopify-hero-content h1 {
    color: #f2f2f2;
    font-size: 2.5rem;
    font-weight: 700;
    letter-spacing: -0.03em;
    margin-bottom: 20px;
    line-height: 1.2;
}
.gogox-shopify-hero-content p {
    color: #ffffff;
    font-size: 1.1rem;
    line-height: 1.7;
    margin-bottom: 32px;
}
.gogox-shopify-hero-cta {
    display: inline-block;
    background: #ffdd00;
    color: #00121a;
    padding: 16px 40px;
    border-radius: 4px;
    font-weight: 700;
    font-size: 1rem;
    align-self: flex-start;
}
.gogox-shopify-hero-cta:hover { background: #e6c800; }

/* Key highlights — 2×2 grid (columns:2 on gogox_icon_text_grid) */
.gogox-shopify-features { max-width: 1000px; margin: 0 auto; padding: 32px 24px 48px; }

/* How to use — carousel */
.gogox-shopify-howto-section { max-width: 1000px; margin: 0 auto; padding: 72px 24px; }
.gogox-shopify-howto-section h2 { color: #0088bf; font-size: 1.75rem; text-align: center; margin-bottom: 40px; }
.gogox-shopify-carousel-wrap { display: flex; align-items: center; gap: 16px; }
.gogox-shopify-carousel-viewport { flex: 1; overflow: hidden; border-radius: 8px; }
.gogox-shopify-carousel-track { display: flex; transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.gogox-shopify-slide { flex: 0 0 100%; text-align: center; }
.gogox-shopify-slide img { width: 100%; height: auto; border-radius: 8px; display: block; }
.gogox-shopify-slide p { font-size: 0.95rem; color: #555; margin-top: 12px; }
.gogox-shopify-carousel-arrow {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 2px solid #0088bf;
    background: #fff;
    color: #0088bf;
    font-size: 28px;
    line-height: 1;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
    padding: 0;
}
.gogox-shopify-carousel-arrow:hover { background: #e8f4fb; }
.gogox-shopify-carousel-dots { display: flex; justify-content: center; gap: 8px; margin-top: 24px; }
.gogox-shopify-carousel-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: #cdd8df;
    border: none;
    cursor: pointer;
    padding: 0;
    transition: background 0.2s;
}
.gogox-shopify-carousel-dot.is-active,
.gogox-shopify-carousel-dot:hover { background: #0088bf; }

/* Centered "Add Shopify App" CTA */
.gogox-shopify-add-cta { text-align: center; padding: 72px 24px; }
.gogox-shopify-add-cta .gogox-shopify-hero-cta { align-self: auto; }

/* 2-col signup section — full-bleed blue, content constrained to ~80% like production */
.gogox-shopify-signup-split {
    width: 100vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    background: #0088bf;
    min-height: 240px;
    padding-left: 10%;
    padding-right: 10%;
}
.gogox-shopify-signup-col {
    flex: 0 0 50%;
    padding: 64px 60px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    gap: 24px;
}
.gogox-shopify-signup-col + .gogox-shopify-signup-col { border-left: 1px solid rgba(255,255,255,0.2); }
.gogox-shopify-signup-col h3 { color: #ffffff; font-size: 1.4rem; font-weight: 700; margin: 0; }
.gogox-shopify-signup-btn {
    display: inline-block;
    padding: 12px 32px;
    border-radius: 4px;
    font-weight: 700;
    font-size: 1rem;
}
.gogox-shopify-signup-btn--yellow { background: #ffdd00; color: #00121a; }
.gogox-shopify-signup-btn--yellow:hover { background: #e6c800; }
.gogox-shopify-signup-btn--white { background: transparent; color: #ffffff; border: 2px solid #ffffff; }
.gogox-shopify-signup-btn--white:hover { background: rgba(255,255,255,0.1); }

@media (max-width: 768px) {
    .gogox-shopify-hero-split { flex-direction: column; min-height: auto; }
    .gogox-shopify-hero-content { flex: none; padding: 48px 24px 32px; }
    .gogox-shopify-hero-content h1 { font-size: 1.6rem; }
    .gogox-shopify-hero-image { flex: none; min-height: 240px; }
    .gogox-shopify-hero-cta { align-self: center; }
    .gogox-shopify-signup-split { flex-direction: column; }
    .gogox-shopify-signup-col { flex: none; padding: 48px 24px; }
    .gogox-shopify-signup-col + .gogox-shopify-signup-col { border-left: none; border-top: 1px solid rgba(255,255,255,0.2); }
    .gogox-shopify-carousel-arrow { width: 36px; height: 36px; font-size: 22px; }
    .gogox-shopify-howto-section { padding: 48px 24px; }
    .gogox-shopify-add-cta { padding: 48px 24px; }
}

/* ==========================================================
   Legal pages (privacy, terms, terms-for-api)
   ========================================================== */
/* language switcher on /terms/ */
.gogox-terms-lang-switcher { max-width: 860px; margin: 0 auto; padding: 32px 24px 0; }
.select-css {
    display: block;
    font-size: 1rem;
    font-family: "proxima-nova", sans-serif;
    color: #444;
    padding: 10px 40px 10px 16px;
    max-width: 280px;
    border: 1.5px solid #ddd;
    border-radius: 8px;
    appearance: none;
    -webkit-appearance: none;
    background-color: #fff;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23444' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 14px center;
    cursor: pointer;
}
.select-css:focus { outline: none; border-color: #0088bf; }

/* Boxed content utility — max-width container, no type overrides. Used on
   platform_support and similar info pages where content should be centred
   but retain its own font/colour styles. */
.ggx-content-boxed { max-width: 860px; margin: 0 auto; padding: 32px 24px; box-sizing: border-box; }
@media (max-width: 768px) { .ggx-content-boxed { padding: 20px 20px; } }

/* Desktop-only / mobile-only visibility utilities.
   _css_classes approach doesn't reach flat top-level widgets in Elementor's
   renderer, so visibility is controlled per-page via element-ID selectors below. */
.ggx-desktop-only { display: block !important; }
.ggx-mobile-only  { display: none  !important; }
@media (max-width: 767px) {
    .ggx-desktop-only { display: none  !important; }
    .ggx-mobile-only  { display: block !important; }
}

/* /hk/gogox-321-go-shoot-2026/ (post 926) */
.elementor-element-shoot_banner_m,
.elementor-element-shoot_sched_m { display: none !important; }
@media (max-width: 767px) {
    .elementor-element-shoot_banner_d,
    .elementor-element-shoot_sched_d1,
    .elementor-element-shoot_sched_d2,
    .elementor-element-shoot_sched_d3 { display: none !important; }
    .elementor-element-shoot_banner_m,
    .elementor-element-shoot_sched_m  { display: block !important; }
}
/* GoShoot: Activity 1 section — light blue-grey background matching live */
.elementor-element-shoot_act1_kv,
.elementor-element-shoot_act1_body,
.elementor-element-shoot_steps,
.elementor-element-shoot_act1_followup,
.elementor-element-shoot_sched_hdr,
.elementor-element-shoot_sched_body,
.elementor-element-shoot_sched_d1,
.elementor-element-shoot_sched_d2,
.elementor-element-shoot_sched_d3,
.elementor-element-shoot_sched_m,
.elementor-element-shoot_cta2 { background-color: #F3F7F8 !important; }

/* /hk/fixed-fee-moving-landing-page/ (post 927) */
.elementor-element-ffm_banner_m,
.elementor-element-ffm_reasons_m,
.elementor-element-ffm_veh_m,
.elementor-element-ffm_steps_m { display: none !important; }
@media (max-width: 767px) {
    .elementor-element-ffm_banner_d,
    .elementor-element-ffm_reasons,
    .elementor-element-ffm_veh_d,
    .elementor-element-ffm_steps_d  { display: none !important; }
    .elementor-element-ffm_banner_m,
    .elementor-element-ffm_reasons_m,
    .elementor-element-ffm_veh_m,
    .elementor-element-ffm_steps_m  { display: block !important; }
}
/* FFM: vehicle comparison dark section — navy background matching live */
.elementor-element-ffm_veh_hdr,
.elementor-element-ffm_veh_d,
.elementor-element-ffm_veh_m,
.elementor-element-ffm_cta2 { background-color: #005085 !important; }
/* FFM: steps instruction image — hidden everywhere (desktop: in 2-col layout; mobile: not needed) */
.elementor-element-ffm_steps_instr { display: none !important; }
/* FFM mobile: section padding matching live gogox.com — excludes hero banners */
@media (max-width: 767px) {
    /* Heading + body copy sections: vertical + horizontal */
    .elementor-element-ffm_adv_hdr,
    .elementor-element-ffm_adv_body,
    .elementor-element-ffm_steps_hdr,
    .elementor-element-ffm_veh_hdr,
    .elementor-element-ffm_holdings,
    .elementor-element-ffm_faq,
    .elementor-element-ffm_tnc {
        padding: 20px 24px !important;
    }
    /* Image/carousel sections: horizontal only (keep image height natural) */
    .elementor-element-ffm_reasons_m,
    .elementor-element-ffm_steps_m,
    .elementor-element-ffm_veh_m {
        padding-left: 24px !important;
        padding-right: 24px !important;
    }
    /* CTA: horizontal padding so button isn't edge-to-edge */
    .elementor-element-ffm_cta2 {
        padding: 24px !important;
    }
    /* Desktop-only sections hidden on mobile — apply for consistency if ever shown */
    .elementor-element-ffm_reasons {
        padding-left: 24px !important;
        padding-right: 24px !important;
    }
}

/* /hk/rentaldriver_partnership_offer_rentatruck/ (post 928) */
.elementor-element-rdt_banner_m,
.elementor-element-rdt_hiw_m,
.elementor-element-rdt_feat_m { display: none !important; }
@media (max-width: 767px) {
    .elementor-element-rdt_banner_d,
    .elementor-element-rdt_hiw_d,
    .elementor-element-rdt_feat_d { display: none !important; }
    .elementor-element-rdt_banner_m,
    .elementor-element-rdt_hiw_m,
    .elementor-element-rdt_feat_m { display: block !important; }
}
/* RDT: how-to-claim section — light grey background matching live */
.elementor-element-rdt_hiw_hdr,
.elementor-element-rdt_hiw_d,
.elementor-element-rdt_hiw_m { background-color: #EFEEEE !important; }
/* RDT: platform advantages dark section — navy background matching live; zero-out Elementor's
   default section margins so consecutive navy widgets form one seamless stripe */
.elementor-element-rdt_feat_hdr,
.elementor-element-rdt_feat_sub,
.elementor-element-rdt_feat_d,
.elementor-element-rdt_feat_m,
.elementor-element-rdt_cta2 {
    background-color: #005085 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
/* RDT: registration checklist — light grey background matching live */
.elementor-element-rdt_prep_hdr,
.elementor-element-rdt_prep_imgs { background-color: #EFEEEE !important; }

.gogox-legal-page { max-width: 860px; margin: 0 auto; padding: 56px 24px; }
/* /bad-weather/ (page 375 root, 819 /hk/): no vertical padding between the
   text sections — desktop and mobile. Scoped so other legal pages keep
   their breathing room. */
body.page-id-375 .gogox-legal-page,
body.page-id-819 .gogox-legal-page { padding: 0 24px; }
.gogox-legal-page h1 { color: #0088bf; margin-bottom: 32px; }
.gogox-legal-page h2 { color: #00121a; margin-top: 36px; margin-bottom: 12px; font-size: 1.1rem; }
.gogox-legal-page p, .gogox-legal-page li { font-size: 0.95rem; line-height: 1.7; color: #333; }
.gogox-legal-page ul { padding-left: 24px; margin-bottom: 16px; }
.gogox-legal-page li { margin-bottom: 6px; }
.gogox-legal-page a { color: #0088bf; }

/* Moving-tnc (#1276) + delivery-partner (#912) were rebuilt by cloning the
   legal-page layout via raw _elementor_data, so Elementor's container-default
   row direction doesn't kick in and the nav + body stacked. Pin the 2-column
   (nav left / body right) layout explicitly by page-id — matches the editor-
   built legal pages (#47/#49/#715). Collapses to a single column on phones. */

/* ==========================================================
   /about/ page
   ========================================================== */
.gogox-about-banner-img { display: block; width: 100%; height: auto; }

.gogox-about-mission-expand {
    background: #DEF9FF;
    border-radius: 20px;
    box-shadow: 0 0 10px 0 rgba(0,0,0,0.05);
    margin-top: 40px;
    padding: 20px 30px;
}
.gogox-about-mission-expand > summary {
    cursor: pointer;
    color: #0088bf;
    font-weight: 600;
    font-size: 0.95rem;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
}
.gogox-about-mission-expand > summary::after { content: '+'; font-size: 1.2rem; }
.gogox-about-mission-expand[open] > summary::after { content: '−'; }
.gogox-about-mission-body { padding-top: 20px; }
.gogox-about-mission-body p { font-size: 0.95rem; line-height: 1.7; color: #555; margin-bottom: 12px; }

.gogox-about-values-section { max-width: 1100px; margin: 0 auto; padding: 24px; }
.gogox-about-values-heading { color: #00121a; font-size: 1.5rem; font-weight: 700; margin-bottom: 20px; }
.gogox-about-values-intro { font-size: 1rem; line-height: 1.7; color: #555; margin-bottom: 24px; }

/* Desktop — no !important, higher-specificity selectors (matches SG gogox-itg--alternating pattern) */
.gogox-about-values-wrap .gogox-about-value {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 60px;
    padding: 56px 0;
    border-top: 1px solid #E3E7EC;
}
.gogox-about-values-wrap .gogox-about-value:first-child { border-top: 0; padding-top: 0; }
.gogox-about-values-wrap .gogox-about-value:last-child  { padding-bottom: 0; }
.gogox-about-values-wrap .gogox-about-value--img-right  { flex-direction: row-reverse; }
.gogox-about-value-img { flex: 1 1 0; overflow: hidden; border-radius: 8px; box-shadow: 0 0 0 1.5px rgba(0,18,26,0.10); }
.gogox-about-value-img img { width: 100%; height: auto; aspect-ratio: 3/2; object-fit: cover; display: block; border-radius: 0; }
.gogox-about-value-text { flex: 1 1 0; padding: 0; }
.gogox-about-value-text h3 { color: #0088bf; font-size: 28px; font-weight: 700; line-height: 1.2; margin: 0 0 16px; }
.gogox-about-value-text p { font-size: 16px; line-height: 1.6; color: #2D3D4D; margin: 0; }
.gogox-about-value-divider { display: none; }

/* Mobile — same specificity as desktop, later source order wins (no !important needed) */
@media (max-width: 768px) {
    .gogox-about-values-section { padding: 24px 16px; }
    .gogox-about-values-wrap .gogox-about-value,
    .gogox-about-values-wrap .gogox-about-value--img-right {
        flex-direction: column;
        align-items: stretch;
        gap: 16px;
        padding: 32px 0;
    }
    .gogox-about-values-wrap .gogox-about-value:first-child { padding-top: 0; }
    .gogox-about-value-img { flex: none; width: 100%; }
    .gogox-about-value-text { flex: none; width: 100%; }
    .gogox-about-values-heading { font-size: 1.15rem; }
}
.gogox-pricing-table + .gogox-pricing-table {
  margin-top: 40px;
}
.gogox-pricing-table thead th {
  background: #F3F7F8;
  color: #00121A;
  font-weight: 700;
  text-align: center;
  padding: 14px 12px;
  border-bottom: 2px solid #E3E7EC;
  white-space: nowrap;
}
.gogox-pricing-table tbody th {
  text-align: left;
  font-weight: 600;
  color: #00121A;
  padding: 12px;
  background: #FFFFFF;
  border-bottom: 1px solid #F0F0F0;
  width: 280px;
  vertical-align: top;
}
.gogox-pricing-table tbody td {
  padding: 12px;
  text-align: center;
  color: #00121A;
  border-bottom: 1px solid #F0F0F0;
  vertical-align: top;
}
.gogox-pricing-table tbody tr.gogox-pricing-table-entry:nth-of-type(even) td,
.gogox-pricing-table tbody tr.gogox-pricing-table-entry:nth-of-type(even) th {
  background: #FAFCFD;
}

/* Subsection headers — "Manpower Fees", "Measurements". Span the full row,
 * brand-blue + larger font to read as a distinct group separator. Mirrors
 * prod's gogovan-service-pricing-table-category styling. */
.gogox-pricing-table tbody tr.gogox-pricing-table-category td {
  background: #F3F7F8;
  color: #0088BF;
  font-weight: 700;
  text-align: left;
  padding: 14px 12px;
  font-size: 18px;
  border-bottom: 2px solid #E3E7EC;
  border-top: 1px solid #E3E7EC;
}

/* Footnote rows — span the full row, muted gray italics, small text. */
.gogox-pricing-table tbody tr.gogox-pricing-table-info td {
  background: #FFFFFF;
  color: #7a7a7a;
  font-style: italic;
  font-size: 12px;
  line-height: 1.55;
  text-align: left;
  padding: 8px 12px;
  border-bottom: 1px solid #F0F0F0;
  word-break: break-word;
}

/* /sg/pricing/ — Additional Fees 2-column variant. Each row is one fee
 * category; col 1 holds title + description + amounts, col 2 holds
 * supplementary info (zone list, festive dates, etc.) Inherits the
 * .gogox-pricing-table chrome but overrides cell alignment + typography
 * so rich HTML (lists, bullets, line breaks) reads cleanly. */
.gogox-pricing-table--fees {
  min-width: 720px;
  table-layout: fixed;
}
.gogox-pricing-table--fees tbody tr.gogox-pricing-table-entry td,
.gogox-pricing-table--fees tbody tr.gogox-pricing-table-entry th {
  text-align: left;
  vertical-align: top;
  padding: 18px 20px;
  width: 50%;
  font-size: 14px;
  line-height: 1.55;
  color: #00121A;
}
.gogox-pricing-table--fees p { margin: 0 0 10px; }
.gogox-pricing-table--fees p:last-child { margin-bottom: 0; }
.gogox-pricing-table--fees strong,
.gogox-pricing-table--fees b { color: #00121A; font-weight: 700; }
.gogox-pricing-table--fees ul {
  margin: 8px 0 12px;
  padding-left: 24px;
}
.gogox-pricing-table--fees ul li {
  margin: 0 0 4px;
  list-style: disc;
}

/* Top border on the Additional Fees table's first row (CBD Zonal Charge),
 * so the table reads as a distinct section beneath the heading band. */
.gogox-pricing-table--fees tbody tr.gogox-pricing-table-entry:first-child td {
  border-top: 1px solid #E3E7EC;
}

/* Disclaimer note ("Please note that:" + bullets) — left-aligned block
 * centered on the page, sized to match the pricing tables above. */
.gogox-pricing-notes {
  max-width: 1200px;
  margin: 0 auto;
  padding: 8px 24px 48px;
  font-size: 13px;
  color: #7a7a7a;
  text-align: left;
}
/* Modifier — narrows the notes block to 1024px so the left edge aligns
   with a table/image rendered at 1024px width (e.g. /sg/ggx-reserve/'s
   tier-benefits table screenshot). Drops the inherited horizontal padding
   so the asterisk sits flush with the table's outer left edge — leaving
   the 24px gutter would push the text 24px to the right of the table.
   align-self + explicit margin-left/right are needed because Elementor sets
   the parent .elementor-widget-wrap to display:flex and forces
   .elementor-element { width: 100% }; without these, the disclaimer ignores
   margin:auto and stretches edge-to-edge on viewports > 1024px. */
.gogox-pricing-notes.gogox-pricing-notes--narrow {
  max-width: 1024px !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin-left: auto !important;
  margin-right: auto !important;
  align-self: center;
  box-sizing: border-box;
  display: block;
}
.gogox-pricing-notes p { margin: 0 0 8px; }
.gogox-pricing-notes p:last-child { margin-bottom: 0; }
.gogox-pricing-notes ul {
  margin: 0;
  padding-left: 24px;
  list-style: disc;
}
.gogox-pricing-notes ul li { margin: 0 0 4px; }
.gogox-pricing-notes strong,
.gogox-pricing-notes b { color: #00121A; font-weight: 700; }

@media (max-width: 700px) {
  .gogox-pricing-table-section { padding: 16px 16px 32px; }
}
/* ====================================================================
   gogox-mobile-fab — floating action bubble (mobile ≤890px only).
   Circular yellow button pinned to bottom-right, stacked icon + label
   ("Download App"). Tappable; overlays content (no body padding reserved).
   Markup + label copy lives in footer.php.
   ==================================================================== */
.gogox-mobile-fab { display: none; } /* desktop: hidden by default */

@media (max-width: 890px) {
  .gogox-mobile-fab {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    position: fixed;
    right: 18px;
    bottom: 18px;
    width: 86px;
    height: 86px;
    padding: 8px;
    border-radius: 50%;
    background: #FFDD00; /* GoGoX brand yellow */
    color: #000000;      /* black icon + label, matches ref */
    text-decoration: none;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.28), 0 2px 4px rgba(0, 0, 0, 0.12);
    z-index: 9999;       /* above Elementor sticky elements */
    transition: transform 0.18s ease, box-shadow 0.18s ease;
    /* Respect iOS safe-area (home-indicator bar on notched phones). */
    bottom: calc(18px + env(safe-area-inset-bottom, 0px));
  }
  .gogox-mobile-fab:hover,
  .gogox-mobile-fab:focus-visible {
    transform: translateY(-2px) scale(1.04);
    box-shadow: 0 10px 24px rgba(0, 0, 0, 0.32), 0 3px 6px rgba(0, 0, 0, 0.16);
  }
  .gogox-mobile-fab:active {
    transform: translateY(0) scale(0.98);
  }
  .gogox-mobile-fab__icon {
    width: 30px;
    height: 30px;
    display: block;
  }
  .gogox-mobile-fab__label {
    display: block;
    font-family: "proxima-nova", sans-serif;
    font-weight: 900;
    font-size: 11px;
    line-height: 1.1;
    letter-spacing: -0.2px;
    text-align: center;
    color: #000000;
  }
  /* Moving pages: "Quote now" variant — dark blue with white icon/label. */
  .gogox-mobile-fab--quote {
    background: #006E9B;
    color: #FFFFFF;
  }
  .gogox-mobile-fab--quote .gogox-mobile-fab__label {
    color: #FFFFFF;
  }
}

/* ====================================================================
   gogox_promo_banner — canonical "A member of GoGoX Holdings Limited"
   text band. Replaces the underlying bannerD image (and the empty side
   rails) with a thin solid brand-blue band carrying the holdings line.
   Applied widget-wide so every page across every region (HK / SG / IN /
   future) inherits identical styling without per-instance overrides.
   Originally introduced as a homepage-only override (.home
   .elementor-element-hmpromo1) by Austin in PR #3; lifted to widget level
   so all pages inherit the style.
   ==================================================================== */
.gogox-promo-banner {
  background: #0088bf !important;
  min-height: 56px;
  padding: 16px 24px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  position: relative;
  box-sizing: border-box;
}
/* NOTE: the promo banner used to render inset on the legal pages (terms /
   privacy). Root cause was NOT CSS: those pages' pasted legal text carried an
   unclosed <div>, which swallowed the following siblings so the banner ended up
   nested inside the padded .elementor-element-legalwrap instead of being the
   top-level section the page data says it is. Fixed at the source by closing
   the tag in `_elementor_data`, so no CSS breakout is needed here. */
.gogox-promo-banner::before {
  content: "A member of GoGoX Holdings Limited";
  color: #FFFFFF;
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 400;
  line-height: 1.4;
  letter-spacing: 0.2px;
  text-align: center;
}
/* Hide the rails + the (now-suppressed) image container. The image setting
   on the widget is kept so future re-introduction is one CSS toggle away. */
.gogox-promo-banner .gogox-promo-rail,
.gogox-promo-banner .gogox-promo-image {
  display: none !important;
}
/* On narrow phones, text scales down slightly to fit on one line. */
@media (max-width: 480px) {
  .gogox-promo-banner::before {
    font-size: 14px;
    letter-spacing: 0;
  }
  .gogox-promo-banner {
    padding: 14px 16px !important;
  }
}

/* Desktop only — "What's new" cards Read more CTA styled as an OUTLINED
   pill button (transparent bg, #0088BF border + label). Hover fills the
   pill with brand blue. Mobile keeps the plain text link. */
@media (min-width: 701px) {
  .home .gogox-news-card-cta {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    align-self: flex-start;
    background: transparent !important;
    color: #0088BF !important;
    border: 2px solid #0088BF;
    font-family: "proxima-nova", sans-serif;
    font-size: 15px;
    font-weight: 700;
    line-height: 1;
    padding: 10px 22px;
    border-radius: 999px;
    margin-top: 12px;
    transition: background-color 0.18s ease, color 0.18s ease;
  }
  .home a.gogox-news-card:hover .gogox-news-card-cta {
    background: #0088BF !important;
    color: #FFFFFF !important;
    text-decoration: none !important;
  }
}

/* "How can we help" funnel (hmsvc1d) desktop — restyle the "Learn More" CTA to
   match the "What's New" outlined-blue pill: always visible (not hover-revealed),
   fills brand blue on hover. The card itself stays static (no bg-darken / icon
   collapse) so it reads like the What's New cards. EN + TC share id hmsvc1d. */
@media (min-width: 601px) {
  /* keep card static on hover */
  .home .elementor-element-hmsvc1d a.gogox-funnel-card:hover {
    background-color: rgba(3, 78, 138, 0.35) !important;
    transform: none !important;
  }
  .home .elementor-element-hmsvc1d a.gogox-funnel-card:hover .gogox-funnel-card-img {
    flex-basis: 128px !important;
    width: 128px !important;
    height: 128px !important;
    opacity: 1 !important;
    margin: 0 !important;
  }
  /* the CTA as an always-visible outlined pill */
  /* Equal-height cards: the body stretches to fill the card and the CTA is
     pushed to the bottom (margin-top:auto), so every card's button sits on
     the same line no matter how long its title/description wraps. */
  .home .elementor-element-hmsvc1d .gogox-funnel-card-body {
    flex: 1 1 auto !important;
  }
  .home .elementor-element-hmsvc1d .gogox-funnel-card-desc {
    margin-bottom: 8px !important;  /* min text→button gap on the tallest card */
  }
  .home .elementor-element-hmsvc1d .gogox-funnel-card-cta {
    display: inline-flex !important;
    align-items: center !important;
    gap: 8px !important;
    align-self: center !important;
    max-height: none !important;
    overflow: visible !important;
    opacity: 1 !important;
    transform: none !important;
    margin-top: auto !important;
    background: transparent !important;
    color: #0088BF !important;
    border: 2px solid #0088BF !important;
    font-family: "proxima-nova", sans-serif !important;
    font-size: 16px !important;      /* standard preset size */
    font-weight: 700 !important;
    line-height: 1 !important;
    padding: 16px 40px !important;   /* standard preset size */
    border-radius: 999px !important;
    transition: background-color 0.18s ease, color 0.18s ease !important;
  }
  .home .elementor-element-hmsvc1d .gogox-funnel-card-cta::after {
    background-color: #0088BF !important; /* chevron mask fill → blue */
  }
  /* hover: fill the pill blue + white label/chevron */
  .home .elementor-element-hmsvc1d a.gogox-funnel-card:hover .gogox-funnel-card-cta {
    background: #0088BF !important;
    color: #FFFFFF !important;
    max-height: none !important;
    transform: none !important;
    margin-top: auto !important;
  }
  .home .elementor-element-hmsvc1d a.gogox-funnel-card:hover .gogox-funnel-card-cta::after {
    background-color: #FFFFFF !important;
  }
}

/* Hide the Learn More outlined pill at 600-767px viewport (small tablet
   portrait). At ≤600px the pill is already hidden by the base
   .gogox-funnel-card-cta { display: none } rule; this catches the
   601-767 gap where the @media (min-width: 601px) block above would
   otherwise show it. */
@media (min-width: 601px) and (max-width: 767px) {
  .home .elementor-element-hmsvc1d .gogox-funnel-card-cta {
    display: none !important;
  }
}

/* GoGoX Reserve benefits table — desktop/mobile responsive swap */
.hkgrs-benefits-mobile { display: none; }
@media (max-width: 767px) {
  .hkgrs-benefits-desktop { display: none; }
  .hkgrs-benefits-mobile  { display: block; }
}

/* Tutorial text-editor section wrapper — matches gogox-itg/gogox-faq vertical rhythm */
.gogox-tutorial-wrap {
  padding: 72px 24px;
  max-width: 880px;
  margin: 0 auto;
  box-sizing: border-box;
}
@media (max-width: 900px) {
  .gogox-tutorial-wrap { padding: 48px 24px; }
}

/* Footer app-store + Google Play badges (used on HK + SG site-footer
   fcrApps text-editor). Class-based so the responsive switch from
   horizontal (desktop) to stacked (tablet + mobile) can be done via a
   media query — inline styles would block it. */
.gogox-footer-badges {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  align-items: center;
  margin: 0;
}
@media (max-width: 900px) {
  .gogox-footer-badges {
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
  }
}

/* Header nav popover (used by /in/'s Contact Us → Partner Support hotline).
   Generic so any .gogox-nav-item--has-popover gets a hover-revealed sub-menu. */
.gogox-nav-item--has-popover {
  position: relative;
}
.gogox-nav-popover {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%) translateY(4px);
  min-width: 260px;
  background: #FFFFFF;
  border: 1px solid #E3E7EC;
  border-radius: 8px;
  padding: 6px 0;
  box-shadow: 0 6px 20px rgba(0, 18, 26, 0.10);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
  z-index: 100;
}
.gogox-nav-item--has-popover:hover .gogox-nav-popover,
.gogox-nav-item--has-popover:focus-within .gogox-nav-popover {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}
/* Selector chains the full header path so it out-specifies the existing
   `.elementor-location-header .elementor-element-hdract a { color:#fff !important }`
   rule (which would otherwise paint the popover link white via spec-tied
   !important). Specificity (0,4,1) beats the header rule's (0,2,1). */
.elementor-location-header .elementor-element-hdract .gogox-nav-popover a.gogox-nav-popover-link {
  display: block;
  padding: 10px 18px;
  color: #00121A !important;
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.elementor-location-header .elementor-element-hdract .gogox-nav-popover a.gogox-nav-popover-link:hover,
.elementor-location-header .elementor-element-hdract .gogox-nav-popover a.gogox-nav-popover-link:focus {
  background: #F4F4F4;
  color: #0088BF !important;
}

/* Footer badges (app store + google play) — sizing is class-based so both
   badges behave identically when the viewport scales. object-fit:contain +
   max-width:100% lets them shrink gracefully without distorting. */
.gogox-footer-badges img {
  display: block;
  height: 48px;
  width: auto;
  max-width: 100%;
  object-fit: contain;
}

/* Empty-state for archive category tabs with no posts (rendered by
   gogox_news_posts when source=current_archive and the queried term has
   zero published posts). Sits centred under the tab row. */
.gogox-news-empty {
  text-align: center;
  margin: 64px 0;
  color: #6E7A82;
  font-size: 16px;
  font-weight: 400;
}

/* Blog Single Post — REVISED layout (replaces the dark image-as-banner hero).
   New order via flex `order`: title → meta → featured image, stacked on a
   light background. No DOM restructure needed; the template still has the
   same blgshero container with the same three widget children. */
.gogox-blog-single-hero {
  position: relative !important;
  min-height: 0 !important;
  /* 120px top so the H1 clears the sticky nav bar (sat under the desktop
     nav otherwise). Mobile breakpoint below reduces to 96px since the
     mobile bar is shorter. */
  padding: 120px 24px 0 !important;
  background-color: transparent !important;
  overflow: visible !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: flex-start !important;
}
/* Children share the same 720px max-width as .gogox-blog-single-body's
   theme-post-content, so the title / meta / featured-image visually align
   with the body copy below. */
.gogox-blog-single-hero > .elementor-widget-theme-post-title,
.gogox-blog-single-hero > .elementor-widget-post-info,
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image {
  width: 100% !important;
  max-width: 720px !important;
}
.gogox-blog-single-hero::before { display: none !important; }
.gogox-blog-single-hero > .elementor-widget-theme-post-title          { order: 1; }
.gogox-blog-single-hero > .elementor-widget-post-info                 { order: 2; }
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image { order: 3; }
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image {
  position: static !important;
  inset: auto !important;
  width: 100% !important;
  height: auto !important;
  margin: 32px 0 0 !important;
  z-index: auto !important;
}
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image > div { height: auto; }
.gogox-blog-single-hero > .elementor-widget-theme-post-featured-image img {
  width: 100% !important;
  height: auto !important;
  object-fit: contain !important;
  display: block !important;
  border-radius: 8px;
}
.gogox-blog-single-hero .elementor-widget-theme-post-title h1 {
  color: #00121A !important;
  font-family: "proxima-nova", sans-serif !important;
  font-size: 40px !important;
  font-weight: 700 !important;
  line-height: 1.2 !important;
  margin: 0 !important;
  max-width: 100% !important;
  text-shadow: none !important;
}
.gogox-blog-single-hero .elementor-widget-post-info { margin-top: 12px !important; }
.gogox-blog-single-hero .elementor-icon-list-items,
.gogox-blog-single-hero .elementor-post-info {
  color: #6E7A82 !important;
}
.gogox-blog-single-hero .elementor-icon-list-text,
.gogox-blog-single-hero .elementor-post-info-item__text { color: #6E7A82 !important; }
@media (max-width: 900px) {
  .gogox-blog-single-hero { padding: 96px 20px 0 !important; }
  .gogox-blog-single-hero .elementor-widget-theme-post-title h1 { font-size: 28px !important; }
  .gogox-blog-single-hero > .elementor-widget-theme-post-featured-image { margin-top: 24px !important; }
}

/* ----- gogox_services_modal — CTA + lightbox with hover-tooltip grid -----
   Used first on /gogovan/ for the "Additional Services" lightbox. Triggers
   look like the rest of the primary buttons; modal centers a card with a
   grid of icon + label items, each with an optional "?" hover tooltip
   on desktop. On mobile (≤900px) the tooltip is replaced by always-visible
   inline description text. */
/* Trigger sits visually attached to the content block above it (e.g. the
   "Over 40,000 drivers" grid on /gogovan/) with a clear breathing gap before
   the next section. Marketing can override per-instance via Elementor's
   Advanced > Spacing controls if needed. */
.gogox-svmodal-wrap {
  display: flex;
  margin-top: 0;
  margin-bottom: 72px;
}
.gogox-svmodal-align-left   { justify-content: flex-start; }
.gogox-svmodal-align-center { justify-content: center; }
.gogox-svmodal-align-right  { justify-content: flex-end; }

/* Trigger button piggybacks .gogox-btn-primary for visual parity with other
   CTA buttons across the site (Hero CTA, CTA Band, etc.) */
.gogox-svmodal-trigger {
  cursor: pointer;
  border: 0;
  font-family: "proxima-nova", sans-serif;
}

/* Modal root: hidden by default via display:none. JS toggles .is-open to
   show. We can't rely on the [hidden] HTML attribute alone because this
   rule has tied specificity with `[hidden] { display:none }` and loads
   later, so a `display: flex` here would override the browser default. */
.gogox-svmodal {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.gogox-svmodal.is-open {
  display: flex;
  animation: gogox-svmodal-fade 0.18s ease-out;
}
@keyframes gogox-svmodal-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
body.gogox-svmodal-open { overflow: hidden; }

.gogox-svmodal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 18, 26, 0.55);
  cursor: pointer;
}
.gogox-svmodal-dialog {
  position: relative;
  z-index: 1;
  background: #FFFFFF;
  border-radius: 12px;
  max-width: 960px;
  width: 100%;
  max-height: calc(100vh - 48px);
  overflow-y: auto;
  padding: 48px 40px 40px;
  box-shadow: 0 20px 60px rgba(0, 18, 26, 0.25);
}
.gogox-svmodal-close {
  position: absolute;
  top: 12px;
  right: 16px;
  background: transparent;
  border: 0;
  width: 36px;
  height: 36px;
  font-size: 28px;
  line-height: 1;
  color: #00121A;
  cursor: pointer;
}
.gogox-svmodal-close:hover { color: #0088BF; }
.gogox-svmodal-title {
  font-family: "proxima-nova", sans-serif;
  font-size: 28px;
  font-weight: 900;
  color: #00121A;
  margin: 0 0 28px;
  text-align: center;
}
.gogox-svmodal-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px 16px;
}
.gogox-svmodal-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 8px;
}
.gogox-svmodal-item-icon {
  width: 64px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 12px;
}
.gogox-svmodal-item-icon img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}
.gogox-svmodal-item-body { width: 100%; }
.gogox-svmodal-item-label {
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  line-height: 1.4;
  color: #00121A;
  margin: 0;
  font-weight: 600;
}
.gogox-svmodal-item-label a {
  color: #0088BF;
  text-decoration: underline;
}
.gogox-svmodal-item-label a:hover { color: #006fa0; }

/* "?" help icon + tooltip — desktop only. Mobile shows the description
   inline as .gogox-svmodal-item-desc-mobile instead. */
.gogox-svmodal-help {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  position: relative;
  margin-left: 6px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #E3E7EC;
  color: #4A5D69;
  cursor: help;
  vertical-align: middle;
}
.gogox-svmodal-help-icon {
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
}
.gogox-svmodal-tooltip {
  position: absolute;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  min-width: 200px;
  max-width: 280px;
  background: #00121A;
  color: #FFFFFF;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.45;
  padding: 8px 12px;
  border-radius: 6px;
  text-align: left;
  white-space: normal;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.15s ease, visibility 0.15s;
  z-index: 10;
}
.gogox-svmodal-tooltip::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -4px;
  border: 4px solid transparent;
  border-top-color: #00121A;
}
.gogox-svmodal-help:hover .gogox-svmodal-tooltip,
.gogox-svmodal-help:focus .gogox-svmodal-tooltip,
.gogox-svmodal-help:focus-within .gogox-svmodal-tooltip {
  opacity: 1;
  visibility: visible;
}
.gogox-svmodal-item-desc-mobile { display: none; }

@media (max-width: 900px) {
  .gogox-svmodal-dialog { padding: 40px 20px 24px; }
  .gogox-svmodal-title { font-size: 22px; margin-bottom: 20px; }
  .gogox-svmodal-grid { grid-template-columns: repeat(2, 1fr); gap: 20px 12px; }
  /* On mobile: hide hover-only tooltip + help icon, show inline description */
  .gogox-svmodal-help { display: none; }
  .gogox-svmodal-item-desc-mobile {
    display: block;
    font-family: "proxima-nova", sans-serif;
    font-size: 12px;
    line-height: 1.45;
    color: #6E7A82;
    margin: 6px 0 0;
  }
}
@media (max-width: 540px) {
  .gogox-svmodal-grid { grid-template-columns: 1fr; }
}

/* Delivery page: grey background on category icons to merge with weight/size section */
.gogox-delivery-cats-bg {
  background: #F3F7F8;
  padding-bottom: 72px;
}

/* ── Advertising enquiry form ───────────────────────────────────────────── */
.gogox-adv-form-wrap { max-width: 640px !important; margin: 0 auto !important; }
.gogox-contact-form-body .gogox-phone-wrap { display: flex; gap: 8px; }
.gogox-contact-form-body .gogox-phone-wrap span { display: flex; flex-direction: column; }
.gogox-contact-form-body .gogox-phone-wrap span:first-child { flex: 0 0 140px; }
.gogox-contact-form-body .gogox-phone-wrap span:last-child  { flex: 1; }
.gogox-contact-form-body .gogox-phone-wrap input { width: 100%; }
/* Style plain <label> tags in CF7 form body (used for textarea/radio section headings) */
.gogox-contact-form-body label {
  display: block;
  font-family: "proxima-nova", sans-serif;
  font-weight: 700;
  font-size: 14px;
  line-height: 1.4;
  color: #00121A;
  margin: 16px 0 8px;
}
/* Radio options use <label> too — keep those inline and normal weight */
.gogox-contact-form-body .wpcf7-radio label {
  display: inline;
  font-weight: 400;
  font-size: 15px;
  margin: 0;
  cursor: pointer;
}
/* Radio buttons wrap horizontally */
.gogox-contact-form-body .wpcf7-radio {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 20px;
}
.gogox-contact-form-body .wpcf7-radio .wpcf7-list-item {
  margin: 0;
}
/* Match 查詢詳情 textarea height to single-line inputs (12px padding×2 + 21px line-height + 2px border = 47px) */
.gogox-adv-form-wrap .gogox-contact-form-body textarea.wpcf7-form-control {
  min-height: 0;
  height: 47px;
  resize: none;
}

/* KR 솔루션-2 form — ~20% height reduction via kr-cta-form modifier.
   Savings breakdown (target 114px off ~570px baseline):
     body padding     8+8 = 16px
     heading margin       =  4px
     intro margin         =  8px
     row margins   4×6  = 24px
     input padding 8×5  = 40px
     textarea height      = 16px
     submit margin        =  6px  → total 114px ≈ 20% */
.kr-cta-form .gogox-contact-form { padding: 0; }
.kr-cta-form .gogox-contact-form-inner { gap: 16px; }
.kr-cta-form .gogox-contact-form-body { padding: 16px 24px 20px; }
.kr-cta-form .gogox-contact-form-body .gogox-contact-form-heading { margin: 0 0 8px; }
.kr-cta-form .gogox-contact-form-body .gogox-contact-form-intro   { margin: 0 0 16px; }
.kr-cta-form .gogox-contact-form-body .gogox-cf7-row              { margin: 0 0 6px; }
.kr-cta-form .gogox-contact-form-body .wpcf7-form-control         { padding: 8px 12px; }
.kr-cta-form .gogox-contact-form-body textarea.wpcf7-form-control { min-height: 64px; }
.kr-cta-form .gogox-contact-form-body .gogox-cf7-submit           { margin: 14px 0 0; }
.kr-cta-form .gogox-contact-form-body .wpcf7-submit               { padding: 12px 40px; }

/* KR /industries/ — tighten the gap between krinrows (icon_text_grid) and
   krincta (cta_band). Both default to 72px CSS padding = 144px combined gap.
   Scoped to element IDs so no other page is affected. */
.elementor-element-krinrows .gogox-itg {
  padding-bottom: 24px;
}
.elementor-element-krincta .gogox-cta-band {
  padding-top: 32px !important;
  padding-bottom: 32px !important;
}

/* KR 솔루션-2 — consistent horizontal section margins.
   sol_cst2col and sol_cta have 0px section padding in Elementor data;
   this adds 24px left/right to match sol_intro / sol_fg1 / sol_fg2. */
.elementor-element-sol_cst2col,
.elementor-element-sol_cta {
  padding-left: 24px !important;
  padding-right: 24px !important;
}

/* KR 솔루션-2 WeWork column — flexbox chain stretches the <img> widget to
   fill the full column height, then object-fit:contain shows the full image.
   inset:10% gives the 80% display size the user requested.
   Image is served from the staging media library (attachment 461). */
.elementor-element-sol_cta_r {
  background-color: #ffffff !important;
}
.elementor-element-sol_cta_r .elementor-widget-wrap {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.elementor-element-sol_cta_r .elementor-widget-wrap > .elementor-element {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.elementor-element-sol_cta_r .elementor-widget-container {
  flex: 1;
  position: relative;
  overflow: hidden;
}
.elementor-element-sol_cta_r .elementor-widget-container img {
  position: absolute;
  inset: 10%;
  object-fit: contain;
  display: block;
}

/* ── GoGoX Advertising page ─────────────────────────────────────────────── */
.gogox-adv-btn {
  display: inline-block;
  background: #0088bf;
  color: #fff;
  padding: 12px 28px;
  border-radius: 6px;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  margin-top: 16px;
}
.gogox-adv-btn:hover { background: #006e9a; color: #fff; }

/* Vehicle wrap: image left, text right */
.gogox-adv-split {
  display: flex;
  align-items: center;
  gap: 48px;
  padding: 64px 0;
}
.gogox-adv-split-image { flex: 1; }
.gogox-adv-split-image img { width: 100%; border-radius: 8px; display: block; }
.gogox-adv-split-content { flex: 1; }
.gogox-adv-split-content h2 { font-size: 1.75rem; font-weight: 700; color: #00121a; margin: 0 0 12px; }
.gogox-adv-split-content p  { font-size: 16px; color: #444; line-height: 1.6; margin: 0; }

/* Generic centred section */
.gogox-adv-section { padding: 64px 0; }
.gogox-adv-section--light { background: #f8fafc; }
.gogox-adv-section-header { text-align: center; max-width: 680px; margin: 0 auto 32px; }
.gogox-adv-section-header h2 { font-size: 1.75rem; font-weight: 700; color: #00121a; margin: 0 0 12px; }
.gogox-adv-section-header p  { font-size: 16px; color: #444; line-height: 1.6; margin: 0; }
.gogox-adv-section-img { display: block; width: 100%; max-width: 640px; margin: 0 auto 40px; border-radius: 8px; }

/* Icon grids */
.gogox-adv-icon-grid {
  display: grid;
  gap: 32px;
  text-align: center;
  margin: 0 auto;
}
.gogox-adv-icon-grid--3 { grid-template-columns: repeat(3, 1fr); max-width: 600px; }
.gogox-adv-icon-grid--6 { grid-template-columns: repeat(6, 1fr); }
.gogox-adv-icon-item img { width: 72px; height: 72px; object-fit: contain; margin: 0 auto 10px; display: block; }
.gogox-adv-icon-item p   { font-size: 14px; font-weight: 600; color: #00121a; margin: 0; }

@media (max-width: 768px) {
  .gogox-adv-split { flex-direction: column; gap: 24px; padding: 40px 0; }
  .gogox-adv-icon-grid--6 { grid-template-columns: repeat(3, 1fr); }
  .gogox-adv-icon-grid--3 { grid-template-columns: repeat(3, 1fr); }
}

/* ── GoGoX Advertising page (live-prefix `ggx-adv-*` classes) ──────────────
   The advertising-page html widgets (advveh1, advdrv1, advinapp1) emit
   markup with `ggx-adv-*` class names (matches the live-prod CSS naming
   from www.gogox.com). These rules style that structure. They coexist
   with the `.gogox-adv-*` rules above (used by alternative composer
   variants that match the rebuild-internal naming convention). */
.ggx-adv-wrap { padding: 64px 24px; }
.ggx-adv-split {
  display: flex;
  align-items: center;
  gap: 48px;
  max-width: 1100px;
  margin: 0 auto;
}
.ggx-adv-split-img { flex: 1; min-width: 0; }
.ggx-adv-split-img img {
  width: 100%;
  border-radius: 8px;
  display: block;
}
.ggx-adv-split-body { flex: 1; min-width: 0; }
.ggx-adv-split-body h2 {
  font-size: 1.75rem;
  font-weight: 700;
  color: #00121a;
  margin: 0 0 12px;
}
.ggx-adv-split-body p {
  font-size: 16px;
  color: #444;
  line-height: 1.6;
  margin: 0 0 20px;
}
.ggx-adv-cta-blue {
  display: inline-block;
  background: #0088bf;
  color: #fff;
  padding: 12px 28px;
  border-radius: 6px;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
}
.ggx-adv-cta-blue:hover {
  background: #006e9a;
  color: #fff;
}
/* In-app icon row + driver icon row (3-col stack: icon image + label) */
.ggx-adv-icons,
.ggx-adv-drv-icons {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
  margin: 32px 0;
  max-width: 540px;
}
.ggx-adv-icon,
.ggx-adv-drv-icon { text-align: center; }
.ggx-adv-icon img,
.ggx-adv-drv-icon img {
  width: 72px;
  height: 72px;
  object-fit: contain;
  display: block;
  margin: 0 auto 10px;
}
.ggx-adv-icon p,
.ggx-adv-drv-icon p {
  font-size: 14px;
  font-weight: 600;
  color: #00121a;
  margin: 0;
  line-height: 1.4;
}
@media (max-width: 768px) {
  .ggx-adv-wrap { padding: 48px 20px; }
  .ggx-adv-split { flex-direction: column; gap: 24px; }
  .ggx-adv-icons,
  .ggx-adv-drv-icons {
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
    max-width: 100%;
  }
}
@media (max-width: 480px) {
  .ggx-adv-icons,
  .ggx-adv-drv-icons {
    grid-template-columns: 1fr;
  }
}

/* ── API installation page — toggle steps ───────────────────────────────── */
.ggx-toggle-wrap .elementor-tab-title { text-align: center; cursor: pointer; padding: 22px 15px; }
.ggx-toggle-wrap .elementor-tab-content { text-align: left; }

/* Chevron indicator — pure CSS, no icon font required */
.ggx-toggle-wrap .elementor-tab-title::after {
  content: '';
  display: inline-block;
  width: 10px;
  height: 10px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  margin-left: 10px;
  vertical-align: middle;
  opacity: 0.6;
  transition: transform 0.2s ease;
  position: relative;
  top: -2px;
}
.ggx-toggle-wrap .elementor-tab-title.elementor-active::after {
  transform: rotate(225deg);
  top: 2px;
}

/* Transparent full-cover link: rendered when button_link set but button_text empty.
   Sits above bg/overlay (z-index 2) but below hero-box content (z-index 5). */
.gogox-hero-section-link {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: block;
    cursor: pointer;
}

/* ── /ecommerce/ hero: subject near top of image — pin to top so head isn't clipped */
.elementor-element-ecohero1 .gogox-hero-bg,
.elementor-element-hkeco_hero .gogox-hero-bg {
    object-position: center top !important;
}

/* /hk/gogox-reserve/ — member tier section: desktop 3-col, mobile stacked sections */
/* /sg/info/ + /in/info/ hero: show full landscape banner at natural ratio on mobile */
@media (max-width: 1176px) {
    .ggx-info-hero .gogox-hero-section {
        min-height: 0 !important;
        padding: 0 !important;
        background: #00121a !important; /* matches banner edge colour */
    }
    .ggx-info-hero .gogox-hero-section::after { display: none !important; }
    .ggx-info-hero .gogox-hero-bg:not(.gogox-hero-bg--mobile) {
        display: none !important;
    }
    .ggx-info-hero .gogox-hero-bg--mobile {
        position: relative !important;
        inset: auto !important;
        width: 100% !important;
        height: auto !important;
        opacity: 1 !important;
        display: block !important;
    }
}

.hkgrs-tier-mobile   { display: none; }
.hkgrs-tier-sep      { display: none; }
.hkgrs-tier-header   { background: #005289; padding: 14px 24px; text-align: center; }
.hkgrs-tier-header .hkgrs-dot  { color: #f5a623; font-size: 20px; margin-right: 8px; }
.hkgrs-tier-header .hkgrs-name { color: #fff; font-size: 18px; font-weight: 600; }
.hkgrs-tier-body     { background: rgba(110,193,228,.09); padding: 32px 24px; text-align: center; }
.hkgrs-tier-body img { max-width: 220px; width: 100%; height: auto; margin-bottom: 12px; display: block; margin-left: auto; margin-right: auto; }
.hkgrs-tier-body p   { font-size: 14px; color: #7a7a7a; margin: 0; }
@media (max-width: 767px) {
    .hkgrs-tier-desktop { display: none !important; }
    .hkgrs-tier-mobile  { display: block; }
    .hkgrs-tier-sep     { display: block; width: 100%; height: auto; }
}

/* SG + IN /contact/ — feedback toggle: form hidden until "Leave feedback" clicked */
.ggx-sg-feedback-form,
.ggx-in-feedback-form { display: none; }

/* /gogox-advertising/ — responsive split sections (in-app, vehicle, driver) */
.ggx-adv-wrap          { padding: 64px 40px; }
.ggx-adv-split         { display: flex; align-items: center; gap: 48px; max-width: 1100px; margin: 0 auto; }
.ggx-adv-split-img     { flex: 0 0 42%; min-width: 0; }
.ggx-adv-split-img.ggx-adv-half { flex: 1; }
.ggx-adv-split-img img { width: 100%; display: block; border-radius: 8px; }
.ggx-adv-split-body    { flex: 1; min-width: 0; }
.ggx-adv-split-body h2 { font-size: 1.75rem; font-weight: 700; color: #00121a; margin: 0 0 12px; }
.ggx-adv-split-body > p { font-size: 16px; color: #444; line-height: 1.6; margin: 0 0 20px; }
/* in-app section: larger heading */
.ggx-adv-split-body.ggx-adv-inapp h2 { font-size: 2rem; }
.ggx-adv-split-body.ggx-adv-inapp > p { color: #333; margin-bottom: 32px; }
/* CTA buttons */
.ggx-adv-cta           { display: inline-block; background: #f5b800; color: #00121a; padding: 14px 32px; border-radius: 50px; font-size: 16px; font-weight: 700; text-decoration: none; }
.ggx-adv-cta-blue      { display: inline-block; background: #0088bf; color: #fff; padding: 12px 28px; border-radius: 6px; font-size: 15px; font-weight: 600; text-decoration: none; margin-bottom: 32px; }
/* in-app audience icons */
.ggx-adv-icons         { display: flex; gap: 32px; margin-bottom: 36px; flex-wrap: wrap; }
.ggx-adv-icon          { text-align: center; }
.ggx-adv-icon img      { width: 64px; height: 64px; object-fit: contain; display: block; margin: 0 auto 8px; }
.ggx-adv-icon p        { font-size: 14px; font-weight: 600; color: #00121a; margin: 0; }
/* driver channel icon grid */
.ggx-adv-drv-icons     { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px 16px; }
.ggx-adv-drv-icon      { text-align: center; }
.ggx-adv-drv-icon img  { width: 56px; height: 56px; object-fit: contain; display: block; margin: 0 auto 8px; }
.ggx-adv-drv-icon p    { font-size: 13px; font-weight: 600; color: #00121a; margin: 0; }
@media (max-width: 768px) {
    .ggx-adv-wrap      { padding: 48px 20px; }
    .ggx-adv-split     { flex-direction: column; gap: 32px; }
    .ggx-adv-split-img { flex: 0 0 auto; width: 100%; max-width: 340px; margin: 0 auto; }
    .ggx-adv-split-img.ggx-adv-half { max-width: 100%; }
    .ggx-adv-split-body h2 { font-size: 1.375rem; }
    .ggx-adv-split-body.ggx-adv-inapp h2 { font-size: 1.5rem; }
    .ggx-adv-icons     { gap: 20px; justify-content: center; }
}
/* ====================================================================
   KR home — Elementor preset tabs / accordion / image-carousel.
   Constrain to the 1140px content width + apply brand typography (the
   presets otherwise render full-width with Elementor's default styles).
   ==================================================================== */
.gogox-kr-tabs,
.gogox-kr-accordion,
.gogox-kr-carousel,
.gogox-kr-1140 {
  max-width: 1140px;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* KR section headings — match live size/weight/colour + vertical padding,
   but keep the brand font family (do NOT switch to Lato). */
.gogox-kr-h2 { padding-top: 48px !important; padding-bottom: 24px !important; }
.gogox-kr-h2 .elementor-heading-title {
  font-size: 32px !important;
  font-weight: 400 !important;
  color: #00121A !important;
}
/* Heading immediately followed by a subtitle — no gap between them. */
.gogox-kr-h2--tight { padding-bottom: 0 !important; }
.gogox-kr-subtitle { padding-bottom: 24px; }
.gogox-kr-subtitle p {
  margin: 0 !important;
  text-align: center;
  color: #4A4A4A;
  font-size: 18px;
}
/* Tabs — button text default + active; 2px borders, 20px labels */
.gogox-kr-tabs .elementor-tab-title {
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 600 !important;
  font-size: 20px !important;
  color: #6B7780 !important;
  border-width: 2px !important;
}
.gogox-kr-tabs .elementor-tab-title.elementor-active {
  color: #0088BF !important;
}
.gogox-kr-tabs .elementor-tabs-content-wrapper,
.gogox-kr-tabs .elementor-tab-content {
  border-width: 2px !important;
}
/* Accordion — title typography; no side borders; caret matches font colour;
   top border hidden by default; divider below an OPEN title hidden; 40px below. */
.gogox-kr-accordion { margin-bottom: 64px !important; }
.gogox-kr-accordion .elementor-accordion-item {
  border-left: 0 !important;
  border-right: 0 !important;
  border-top: 0 !important;
}
.gogox-kr-accordion .elementor-tab-title.elementor-active {
  border-bottom-color: transparent !important;
}
.gogox-kr-accordion .elementor-tab-content {
  border-top-color: transparent !important;
}
.gogox-kr-accordion .elementor-accordion-title {
  font-family: "proxima-nova", sans-serif !important;
  font-weight: 600 !important;
  font-size: 17px !important;
  color: #00121A !important;
}
.gogox-kr-accordion .elementor-accordion-icon i,
.gogox-kr-accordion .elementor-accordion-icon svg {
  color: #00121A !important;
  fill: #00121A !important;
}

/* KR /service/ reviews — restyle the Elementor testimonial-carousel into a
   bordered card: GoGoX favicon avatar + name on top (left), quote left-aligned
   below, per-card platform badge (slide image) in the top-right corner. */
.gogox-kr-reviews .elementor-testimonial {
  border: 1px solid #E3E7EC !important;
  border-radius: 8px !important;
  padding: 28px !important;
  background: #fff !important;
  text-align: left !important;
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  height: 100%;
  box-sizing: border-box;
}
/* author row (footer) on top; quote below */
.gogox-kr-reviews .elementor-testimonial__footer {
  order: 0 !important;
  margin: 0 0 16px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
}
.gogox-kr-reviews .elementor-testimonial__content { order: 1 !important; }
.gogox-kr-reviews .elementor-testimonial__text,
.gogox-kr-reviews .elementor-testimonial__text * {
  text-align: left !important;
  font-size: 15px !important;
  line-height: 1.6 !important;
  color: #2D3D4D !important;
  font-style: normal !important;
}
/* author row: GoGoX favicon avatar far-left; name (line 1) + title (line 2)
   stacked to its right. */
.gogox-kr-reviews .elementor-testimonial__cite {
  display: grid !important;
  grid-template-columns: auto 1fr !important;
  grid-template-rows: auto auto !important;
  column-gap: 12px !important;
  align-items: center !important;
  text-align: left !important;
}
.gogox-kr-reviews .elementor-testimonial__cite::before {
  content: "";
  grid-column: 1 !important;
  grid-row: 1 / 3 !important;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  align-self: center;
  background: #fff url("https://s3-ap-northeast-1.amazonaws.com/wp-gogovan.com/wp-content/uploads/sites/7/2020/06/03091203/icon.png") center/contain no-repeat;
}
.gogox-kr-reviews .elementor-testimonial__name {
  grid-column: 2 !important;
  grid-row: 1 !important;
  align-self: end !important;
  font-weight: 700 !important;
  color: #00121A !important;
  font-size: 16px !important;
  line-height: 1.2 !important;
}
.gogox-kr-reviews .elementor-testimonial__title {
  grid-column: 2 !important;
  grid-row: 2 !important;
  align-self: start !important;
  font-weight: 400 !important;
  font-style: normal !important;
  color: #6B7780 !important;
  font-size: 13px !important;
  line-height: 1.2 !important;
}
/* the absolutely-positioned platform mark leaves a 20px inline gap on the
   cite by Elementor's default rule — zero it so the avatar sits flush left. */
.gogox-kr-reviews .elementor-testimonial__image + cite,
.gogox-kr-reviews .elementor-testimonial--layout-image_inline .elementor-testimonial__image + cite {
  margin-inline-start: 0 !important;
}
/* per-card platform logo mark (slide image) → top-right corner */
.gogox-kr-reviews .elementor-testimonial__image {
  position: absolute !important;
  top: 22px !important;
  right: 22px !important;
  margin: 0 !important;
}
.gogox-kr-reviews .elementor-testimonial__image img {
  width: 22px !important;
  height: 22px !important;
  border-radius: 0 !important;
  background: transparent !important;
  object-fit: contain !important;
}
/* customer icon centered just above the "앱 평점 4.6점!" heading */
.gogox-kr-revicon img { width: auto !important; height: auto !important; }
.gogox-kr-revicon .elementor-widget-container { text-align: center !important; margin-bottom: 0 !important; }
/* the review heading sits tight under the icon (drop its big top padding) */
.gogox-kr-revicon + .gogox-kr-h2,
.gogox-kr-h2--attached { padding-top: 4px !important; }

/* KR /service/ vehicle tiers: enlarge the vehicle image so it overflows /
   overlaps the round grey background behind it (designer request). */
.gogox-kr-tiers .gogox-tier-icon-wrap { overflow: visible !important; }
.gogox-kr-tiers .gogox-tier-icon,
.gogox-kr-tiers .gogox-tier-icon img {
  width: 110px !important;
  height: 110px !important;
}

/* ── SG /sg/download/ hero split layout ─────────────────────────────────── */
/* Matches live gogox.com/sg/download/: solid #0088BF bg, text left 50%,
   banner_SG.png displayed as foreground image right 50% */
.gg-sg-dl-hero {
  background: #0088BF;
  display: flex;
  align-items: center;
  padding: 80px 60px 90px;
  gap: 40px;
  box-sizing: border-box;
}
.gg-sg-dl-hero-text {
  flex: 0 0 calc(50% - 20px);
}
.gg-sg-dl-hero-text h1 {
  color: #fff;
  font-size: 36px;
  font-weight: 700;
  margin: 0 0 20px;
  line-height: 1.2;
}
.gg-sg-dl-hero-text p {
  color: #fff;
  font-size: 16px;
  margin: 0 0 32px;
  line-height: 1.6;
}
.gg-sg-dl-hero-img {
  flex: 0 0 calc(50% - 20px);
  text-align: center;
}
.gg-sg-dl-hero-img img {
  max-width: 100%;
  height: auto;
  display: inline-block;
}
@media (max-width: 900px) {
  .gg-sg-dl-hero {
    flex-direction: column;
    padding: 48px 24px 32px;
    text-align: center;
    gap: 32px;
  }
  .gg-sg-dl-hero-text,
  .gg-sg-dl-hero-img {
    flex: none;
    width: 100%;
  }
  .gg-sg-dl-hero-text h1 { font-size: 26px; }
  .gg-sg-dl-hero-img img { max-width: 280px; }
}

/* SG /sg/download/ app store padding is set in the Elementor section
   settings (sgdlappstoresec), not via CSS, so it is editable from the
   Elementor canvas inspector. */

/* ── SG /sg/download/ HIW accordion: consistent image + no content gap ───── */
/* Image panel: fixed 800px so all 4 phone screenshots are the same size.
   Content panel: min-height 800px so it always fills the full widget height,
   preventing empty gray space below the step cards when content is short. */
.elementor-element-sgdlhiw1 .gogox-process-steps {
  align-items: flex-start !important;
}
.elementor-element-sgdlhiw1 .gogox-process-steps-image {
  height: 800px !important;
  min-height: 800px !important;
  max-height: 800px !important;
  flex-shrink: 0 !important;
  align-self: flex-start !important;
}
.elementor-element-sgdlhiw1 .gogox-process-steps-content {
  min-height: 800px !important;
}

/* Per-item flat logo strip beneath an icon-text-grid item's description
   (KR industries service rows — client-logo strips under each row's copy). */
.gogox-itg-logo-strip {
  width: 100%;
  max-width: 460px;
  height: auto;
  display: block;
  margin-top: 18px;
}
.gogox-itg--alternating .gogox-itg-logo-strip {
  margin-top: 24px;
}

/* KR /flex-driver/ side-by-side CTAs (앱 다운로드 + 배송가이드).
   Two clickable image cards live in the page as html widgets; the button
   styling lives here so the hover state works (inline :hover can't be set
   on the html-widget anchor markup). Matches live's pill button + bg swap. */
.gogox-kr-flex-cta-btn {
  display: inline-block;
  background: #FFDD00;
  color: #0088BF;
  font-weight: bold;
  font-size: 16px;
  padding: 12px 32px;
  border-radius: 100px;
  transition: background 0.2s ease;
  position: relative;
}
.gogox-kr-flex-cta-card:hover .gogox-kr-flex-cta-btn,
.gogox-kr-flex-cta-btn:hover {
  background: #FFFFFF;
  color: #0088BF;
}
/* ----- SOCIAL POST CAROUSEL (gogox_social_carousel) ----- */
/* Instagram post embeds on the shared CAROUSEL_CONFIGS pipeline (footer.php).
   Mirrors the gogox_icon_text_grid carousel: N visible columns, chevrons +
   dots, 1 card per step. Auto-engages only when posts > visible columns —
   otherwise .gogox-socar--grid renders a plain centered row. */
.gogox-socar {
  width: 100%;
  padding: 72px 0;
}
.gogox-socar-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  text-align: center;
}
/* Typography mirrors .gogox-itg-heading so section titles match across the page. */
.gogox-socar-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 40px;
}
.gogox-socar-heading:has(+ .gogox-socar-intro) {
  margin-bottom: 12px;
}
.gogox-socar-intro {
  color: #7a7a7a;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.6;
  margin: 0 auto 40px;
  max-width: 720px;
}
/* IG's embed.js forces min-width:326px on the blockquote — cards must win. */
.gogox-socar-item {
  /* flex items default to min-width:auto — without this the IG iframe's
     forced 326px min-width stops cards shrinking to the column width and
     the track overflows (rightmost card gets cropped). */
  min-width: 0;
  /* Scroll-up jank guard: on fast scroll Chrome re-rasterizes / re-lays-out
     the cross-origin IG iframes — for 1-2s they report no height and paint
     white, collapsing the row to just the absolute arrows. A floor height
     plus a skeleton background keeps the section shaped and reads as
     "loading" instead of vanished; translateZ promotes each card to its
     own compositor layer so Chrome keeps the iframe texture around. */
  min-height: 420px;
  background: #F1F3F5;
  border-radius: 8px;
  transform: translateZ(0);
}
.gogox-socar-item .instagram-media,
.gogox-socar-item iframe.instagram-media,
.gogox-socar-item iframe.instagram-media-rendered {
  margin: 0 !important;
  min-width: 0 !important;
  max-width: 100% !important;
  width: 100% !important;
}
.gogox-socar--grid .gogox-socar-grid {
  display: flex;
  justify-content: center;
  gap: 24px;
  flex-wrap: wrap;
}
.gogox-socar--grid .gogox-socar-item {
  flex: 0 1 360px;
  min-width: 280px;
}
.gogox-socar--carousel .gogox-socar-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}
.gogox-socar--carousel .gogox-socar-viewport {
  flex: 1 1 auto;
  overflow: hidden;
}
.gogox-socar--carousel .gogox-socar-track {
  display: flex;
  align-items: flex-start;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
.gogox-socar--carousel.gogox-socar--cols-4 .gogox-socar-track .gogox-socar-item {
  flex: 0 0 calc((100% - 72px) / 4);
}
.gogox-socar--carousel.gogox-socar--cols-3 .gogox-socar-track .gogox-socar-item {
  flex: 0 0 calc((100% - 48px) / 3);
}
.gogox-socar--carousel.gogox-socar--cols-2 .gogox-socar-track .gogox-socar-item {
  flex: 0 0 calc((100% - 24px) / 2);
}
.gogox-socar--carousel .gogox-socar-arrow {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #E3E7EC;
  background: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  line-height: 1;
  color: #0088BF;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  padding: 0;
}
.gogox-socar--carousel .gogox-socar-arrow:hover {
  background: #0088BF;
  border-color: #0088BF;
  color: #fff;
}
.gogox-socar--carousel .gogox-socar-arrow:disabled {
  opacity: 0.35;
  cursor: default;
  background: #fff;
  border-color: #E3E7EC;
  color: #0088BF;
}
.gogox-socar--carousel .gogox-socar-dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 24px;
}
.gogox-socar--carousel .gogox-socar-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  background: #D8DEE2;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.15s ease;
}
.gogox-socar--carousel .gogox-socar-dot:hover { background: #0088BF; }
.gogox-socar--carousel .gogox-socar-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}
@media (max-width: 1100px) {
  .gogox-socar--carousel.gogox-socar--cols-4 .gogox-socar-track .gogox-socar-item,
  .gogox-socar--carousel.gogox-socar--cols-3 .gogox-socar-track .gogox-socar-item {
    flex: 0 0 calc((100% - 24px) / 2);
  }
}
@media (max-width: 700px) {
  .gogox-socar { padding: 48px 0; }
  .gogox-socar--carousel .gogox-socar-track .gogox-socar-item {
    flex: 0 0 100% !important;
  }
  .gogox-socar--carousel .gogox-socar-arrow { width: 36px; height: 36px; font-size: 22px; }
}

/* News posts — optional centered section button under the cards
   (section_cta_text/link/style on gogox_news_posts, e.g. "Explore more news").
   Desktop-only: on mobile the cards swipe like the homepage carousel, so the
   button is hidden to keep the section compact. */
.gogox-news-section-cta {
  margin-top: 40px;
  display: flex;
  justify-content: center;
}
@media (max-width: 700px) {
  .gogox-news-section-cta { display: none; }
}

/* ----- GOOGLE REVIEWS (gogox_google_reviews) ----- */
/* Rating summary + review-card carousel on the shared CAROUSEL_CONFIGS
   pipeline. Cards: avatar initial, name, stars, clamped text + See More,
   optional photo. */
.gogox-greviews {
  width: 100%;
  padding: 72px 0;
}
.gogox-greviews-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  text-align: center;
}
.gogox-greviews-heading {
  color: #00121A;
  font-family: "proxima-nova", sans-serif;
  font-size: 32px;
  font-weight: 400;
  line-height: 40px;
  margin: 0 0 32px;
}
.gogox-greviews-summary { margin-bottom: 40px; }
.gogox-greviews-biz {
  font-size: 22px;
  font-weight: 700;
  color: #00121A;
  margin-bottom: 8px;
}
.gogox-greviews-stars { display: inline-flex; gap: 2px; font-size: 20px; line-height: 1; }
.gogox-greviews-star { color: #FBBC04; }
.gogox-greviews-star--off { color: #D8DEE2; }
.gogox-greviews-meta { font-size: 14px; color: #5E636E; margin: 8px 0 0; }
.gogox-greviews-meta strong { color: #00121A; }

.gogox-greviews-card {
  background: #fff;
  border: 1px solid #E3E7EC;
  border-radius: 12px;
  padding: 24px;
  text-align: left;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}
.gogox-greviews-avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  color: #fff;
  font-size: 20px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.gogox-greviews-name { font-size: 17px; font-weight: 700; color: #00121A; margin: 0; }
.gogox-greviews-card .gogox-greviews-stars { font-size: 17px; }
.gogox-greviews-text {
  font-size: 14px;
  color: #333;
  line-height: 1.6;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.gogox-greviews-text.is-expanded { display: block; -webkit-line-clamp: unset; overflow: visible; }
.gogox-greviews-more {
  background: none;
  border: 0;
  padding: 0;
  font-weight: 700;
  font-size: 14px;
  color: #00121A;
  cursor: pointer;
}
.gogox-greviews-more:hover { color: #0088BF; }
.gogox-greviews-photo {
  width: 100%;
  border-radius: 8px;
  object-fit: cover;
  max-height: 220px;
}

.gogox-greviews--grid .gogox-greviews-grid {
  display: flex;
  justify-content: center;
  gap: 24px;
  flex-wrap: wrap;
}
.gogox-greviews--grid .gogox-greviews-card { flex: 0 1 360px; min-width: 280px; }

.gogox-greviews--carousel .gogox-greviews-stage {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
}
.gogox-greviews--carousel .gogox-greviews-viewport {
  flex: 1 1 auto;
  overflow: hidden;
}
.gogox-greviews--carousel .gogox-greviews-track {
  display: flex;
  align-items: flex-start;
  gap: 24px;
  transition: transform 0.4s ease;
  will-change: transform;
}
.gogox-greviews--carousel .gogox-greviews-track .gogox-greviews-card { min-width: 0; }
.gogox-greviews--carousel.gogox-greviews--cols-4 .gogox-greviews-track .gogox-greviews-card {
  flex: 0 0 calc((100% - 72px) / 4);
}
.gogox-greviews--carousel.gogox-greviews--cols-3 .gogox-greviews-track .gogox-greviews-card {
  flex: 0 0 calc((100% - 48px) / 3);
}
.gogox-greviews--carousel.gogox-greviews--cols-2 .gogox-greviews-track .gogox-greviews-card {
  flex: 0 0 calc((100% - 24px) / 2);
}
.gogox-greviews--carousel .gogox-greviews-arrow {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #E3E7EC;
  background: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #0088BF;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  padding: 0;
}
.gogox-greviews--carousel .gogox-greviews-arrow:hover {
  background: #0088BF;
  border-color: #0088BF;
  color: #fff;
}
.gogox-greviews--carousel .gogox-greviews-arrow:disabled {
  opacity: 0.35;
  cursor: default;
  background: #fff;
  border-color: #E3E7EC;
  color: #0088BF;
}
.gogox-greviews--carousel .gogox-greviews-dots {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin-top: 24px;
}
.gogox-greviews--carousel .gogox-greviews-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  background: #D8DEE2;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.15s ease;
}
.gogox-greviews--carousel .gogox-greviews-dot:hover { background: #0088BF; }
.gogox-greviews--carousel .gogox-greviews-dot.is-active {
  background: #0088BF;
  transform: scale(1.2);
}
@media (max-width: 1100px) {
  .gogox-greviews--carousel.gogox-greviews--cols-4 .gogox-greviews-track .gogox-greviews-card,
  .gogox-greviews--carousel.gogox-greviews--cols-3 .gogox-greviews-track .gogox-greviews-card {
    flex: 0 0 calc((100% - 24px) / 2);
  }
}
@media (max-width: 700px) {
  .gogox-greviews { padding: 48px 0; }
  .gogox-greviews-heading { font-size: 26px; line-height: 34px; }
  .gogox-greviews--carousel .gogox-greviews-track .gogox-greviews-card {
    flex: 0 0 100% !important;
  }
  .gogox-greviews--carousel .gogox-greviews-arrow { width: 36px; height: 36px; }
}

/* Google Reviews — optional "Reviews powered by Google" line (Boxful style). */
.gogox-greviews-powered {
  font-size: 13px;
  color: #5E636E;
  margin: 6px 0 0;
}
.gogox-greviews-glogo {
  font-weight: 700;
  font-size: 16px;
  letter-spacing: 0.2px;
}

/* Google Reviews — linked business name / cards (business_link control). */
a.gogox-greviews-biz {
  display: inline-block;
  text-decoration: none;
  transition: color 0.15s ease;
}
a.gogox-greviews-biz:hover { color: #0088BF; }
a.gogox-greviews-card {
  text-decoration: none;
  color: inherit;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
a.gogox-greviews-card:hover {
  border-color: #0088BF;
  box-shadow: 0 4px 16px rgba(0, 136, 191, 0.12);
}

/* ── KR legal / policy pages ────────────────────────────────────────────── */
.gg-kr-policy {
  max-width: 820px;
  margin: 0 auto;
  color: #374151;
}
.gg-kr-policy h2 {
  font-size: 1.1em;
  font-weight: 700;
  margin: 2.25em 0 .5em;
  color: #00121A;
}
.gg-kr-policy h2:first-child { margin-top: 0; }
.gg-kr-policy h3 {
  font-size: 1em;
  font-weight: 600;
  margin: 1.5em 0 .4em;
  color: #00121A;
}
.gg-kr-policy p { margin: 0 0 .85em; line-height: 1.75; font-size: .9375em; }
.gg-kr-policy ul,
.gg-kr-policy ol { padding-left: 1.6em; margin: .4em 0 1em; }
.gg-kr-policy li { font-size: .9375em; line-height: 1.7; margin-bottom: .3em; }
.gg-kr-policy strong { font-weight: 600; color: #00121A; }
.gg-kr-policy .gg-kr-effective { font-size: .85em; color: #6B7280; margin-bottom: 1.5em; }
.gg-kr-policy table {
  width: 100%;
  border-collapse: collapse;
  font-size: .875em;
  margin: 1.25em 0 2em;
  overflow-x: auto;
  display: block;
}
.gg-kr-policy table th,
.gg-kr-policy table td {
  border: 1px solid #D1D5DB;
  padding: 9px 14px;
  text-align: left;
  vertical-align: top;
  min-width: 80px;
}
.gg-kr-policy table th {
  background: #F3F7F8;
  font-weight: 600;
  white-space: nowrap;
  color: #00121A;
}
@media (max-width: 700px) {
  .gg-kr-policy { font-size: .95em; }
  .gg-kr-policy table { font-size: .8em; }
  .gg-kr-policy table th,
  .gg-kr-policy table td { padding: 7px 9px; min-width: 60px; }
}

/* KR legal page hero — white heading on #0088BF blue section.
   Targeted by element ID (always present in rendered HTML) so this works
   regardless of Elementor per-page CSS generation or object-cache state.
   .gg-kr-hero rule is kept as a secondary hook for future FRESH=1 runs. */
.gg-kr-hero .elementor-heading-title,
.elementor-element-krpip_hsec   .elementor-heading-title,
.elementor-element-krhpp_hsec   .elementor-heading-title,
.elementor-element-krpp630_hsec .elementor-heading-title,
.elementor-element-krpp2025_hsec .elementor-heading-title,
.elementor-element-krppo_hsec   .elementor-heading-title,
.elementor-element-krmc_hsec    .elementor-heading-title,
.elementor-element-krolst_hsec  .elementor-heading-title,
.elementor-element-krfaq_hsec   .elementor-heading-title {
  color: #FFFFFF !important;
  font-size: 32px;
  font-weight: 400;
}

/* ITG tick list (item_ticks) — 2-column green-check grid under an item's
   description (1 column on mobile). Spec: emerald ticks, slate text,
   32px column gap, 12px row gap. */
.gogox-itg-ticks {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: 32px;
  row-gap: 12px;
  list-style: none;
  margin: 16px 0 0;
  padding: 0;
  text-align: left;
}
.gogox-itg-tick {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: "proxima-nova", sans-serif;
  font-size: 16.5px;
  font-weight: 500;
  color: #334155;
}
.gogox-itg-tick svg {
  width: 20px;
  height: 20px;
  flex: 0 0 20px;
  color: #10B981;
}
@media (max-width: 700px) {
  .gogox-itg-ticks { grid-template-columns: 1fr; }
}

/* ----- SITE FOOTER (gogox_site_footer) ----- */
/* Black footer band — every size audited 1:1 against the Service-
   Instructions Figma SVG (band 1440x512, side inset 108): logo 24px,
   hotline 18/22/16, socials 40px circles gap 20, badges 40px gap 8,
   links 14px on a 32px row pitch, all text solid #FFFFFF. !important on
   size-critical rules so Elementor's generic `.elementor img
   { height: auto }` etc. can't override them on live pages. */
.gogox-sfooter {
  width: 100%;
  padding: 60px 0 0;
  color: #FFFFFF;
}
.gogox-sfooter-inner {
  max-width: 1224px; /* 1440 - 2x108 SVG side inset */
  margin: 0 auto;
  padding: 0 24px 44px;
  display: grid;
  /* Content-width tracks + space-between: equal-fraction tracks (1fr each) made
     the *visual* gaps look uneven because the columns hold very different link
     lengths, so short columns left a big void. Sizing each track to its content
     and distributing the slack evenly makes the spacing read as equal. */
  grid-template-columns: max-content max-content max-content max-content;
  justify-content: space-between;
  gap: 40px;
  align-items: start;
}
.gogox-sfooter-logo {
  height: 24px !important;
  width: auto !important;
  max-width: none !important;
  display: block;
  margin-bottom: 28px;
}
.gogox-sfooter-hotline-title {
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.2;
  color: #FFFFFF;
  margin: 0 0 10px;
}
.gogox-sfooter-hotline-line {
  font-size: 16px;
  color: #FFFFFF;
  margin: 0 0 4px;
  line-height: 1.5;
}
/* First line after the title is the phone number — 22px per the SVG. */
.gogox-sfooter-hotline-title + .gogox-sfooter-hotline-line {
  font-size: 22px;
  font-weight: 600;
  line-height: 1.3;
  margin: 0 0 6px;
}
.gogox-sfooter-socials {
  display: flex;
  gap: 20px;
  margin: 44px 0 0; /* 48px visual gap below the hours line */
}
/* Icon artwork (circle + carved-out glyph) is the exact Figma path inside
   the SVG; the anchor stays transparent. currentColor fills the circle —
   the two-class selector + !important beats the legacy
   `.elementor-location-footer a { color:#7a7a7a !important }` leak. */
.gogox-sfooter .gogox-sfooter-social {
  width: 40px !important;
  height: 40px !important;
  color: #FFFFFF !important;
  display: inline-flex;
  transition: transform 0.15s ease;
}
.gogox-sfooter-social svg { width: 40px !important; height: 40px !important; display: block; }
.gogox-sfooter .gogox-sfooter-social:hover { color: #FFFFFF !important; transform: translateY(-2px); }
.gogox-sfooter-badges { display: flex; gap: 8px; align-items: center; margin-top: 60px; } /* SVG: socials -> badges gap 60 */
/* Badge size per the Figma SVG clip-paths: App Store 119.7x40, Google Play
   135x40 — both 40px tall, width follows the artwork's ratio. !important
   beats Elementor's generic img sizing. */
.gogox-sfooter-badges img {
  height: 40px !important;
  width: auto !important;
  max-width: none !important;
  display: block;
}
.gogox-sfooter-col-title {
  font-family: "proxima-nova", sans-serif;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.4px;
  line-height: 1.2;
  color: #FFFFFF;
  margin: 8px 0 22px; /* SVG: column titles sit ~8px below the logo top line, 30px above links */
}
.gogox-sfooter-links {
  list-style: none;
  margin: 0;
  padding: 0;
}
/* The `.gogox-sfooter` prefix + !important below out-specifies the legacy
   old-footer block (`.elementor-location-footer a/li/h4 !important`, kept
   for the SG/IN/KR footers) that otherwise leaks into this widget: gray
   links/icons, blue hover, 8px row pitch. */
.gogox-sfooter .gogox-sfooter-links li { margin: 0 0 12px !important; } /* 32px row pitch at 14px/1.4 */
.gogox-sfooter .gogox-sfooter-links a {
  color: #FFFFFF !important;
  font-size: 14px;
  line-height: 1.4;
  text-decoration: none;
  opacity: 1; /* SVG links are solid white, no dimming */
  transition: opacity 0.15s ease, color 0.15s ease;
}
.gogox-sfooter .gogox-sfooter-links a:hover { color: #FFDD00 !important; }

/* Korea's contact block carries a tel: and a mailto: anchor. Without a rule of
   its own those anchors get caught by the same legacy leak noted above
   (`.elementor-location-footer a { color:#7a7a7a !important }`) and render grey
   while Hong Kong's plain-text number renders white. `inherit` rather than a
   literal colour so the phone line keeps its 22px/600 treatment and the email
   line keeps the 16px one — one rule covers both. */
.gogox-sfooter .gogox-sfooter-hotline-line a {
  color: inherit !important;
  font-weight: inherit;
  text-decoration: none;
  transition: color 0.15s ease;
}
.gogox-sfooter .gogox-sfooter-hotline-line a:hover { color: #FFDD00 !important; }

/* ── Footer sizing follows the viewport ──────────────────────────────────────
   The fixed values above come from the 1440px Figma frame, and on a laptop
   they read too airy — the link row pitch and the socials/badges gaps in
   particular. These clamps keep the same proportions but let every vertical
   metric shrink with the viewport, so the footer fits the screen it is being
   read on instead of one reference width.

   SPACING ONLY — every font-size above is left exactly as it was. An earlier
   pass shrank the type as well and that was wrong: the band read as too airy
   because of the gaps between things, not because the text was too big. So the
   column titles stay 18px, the hotline line 16px, the phone line 22px and the
   links 14px, and only the vertical rhythm moves.

   DESKTOP ONLY. Relying on the @media blocks below to override this did not
   work: they restyle the properties the stacked layout needs, but they never
   touch the inner bottom padding, the column-title margin, the link row margin
   or the bottom-bar padding — so those four leaked onto phones and tightened a
   layout nobody asked to change. Scoping the whole block to ≥901px leaves the
   tablet and mobile footers byte-identical to what they were. */
@media (min-width: 901px) {
  .gogox-sfooter { padding: clamp(28px, 2.8vw, 40px) 0 0; }
  .gogox-sfooter-inner { padding-bottom: clamp(20px, 2.1vw, 30px); gap: clamp(24px, 2.8vw, 40px); }
  .gogox-sfooter-logo { margin-bottom: clamp(12px, 1.25vw, 18px); }
  .gogox-sfooter-hotline-title { margin-bottom: clamp(4px, 0.42vw, 6px); }
  .gogox-sfooter-hotline-title + .gogox-sfooter-hotline-line { margin-bottom: clamp(2px, 0.28vw, 4px); }
  .gogox-sfooter-socials { margin-top: clamp(16px, 1.6vw, 23px); }
  .gogox-sfooter-badges { margin-top: clamp(16px, 1.7vw, 24px); }
  .gogox-sfooter-col-title { margin-bottom: clamp(9px, 0.9vw, 13px); }
  /* 14px links at line-height 1.4 occupy ~20px, so a 5px margin lands the row
     pitch near 25px. The 32px pitch this replaces was the single biggest reason
     the band read as empty on a laptop. */
  .gogox-sfooter .gogox-sfooter-links li { margin: 0 0 clamp(3px, 0.35vw, 5px) !important; }
  .gogox-sfooter-bottom-inner { padding-top: clamp(14px, 1.5vw, 22px); padding-bottom: clamp(14px, 1.5vw, 22px); }
}

@media (max-width: 900px) {
  .gogox-sfooter { padding: 48px 0; }
  .gogox-sfooter-inner { grid-template-columns: 1fr 1fr; }
  .gogox-sfooter-brand { grid-column: 1 / -1; }
}
/* Mobile: DiDi-JP footer order — logo, hotline (where DiDi puts its
   copyright), socials, then the link columns in a 2-up grid (row 1:
   公司/COMPANY + 支援/SUPPORT, row 2: 服務/SERVICE), store badges last.
   The brand wrapper becomes display:contents so its children join the
   grid; full-width items span both tracks. Inner children are
   [brand, col1 公司, col2 服務, col3 支援] — nth-child(3) is 服務. */
@media (max-width: 540px) {
  /* gap: 0 24px kills the desktop 40px row-gap that was inflating every
     row; vertical rhythm is DiDi-tight via margins instead. */
  .gogox-sfooter-inner { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; }
  .gogox-sfooter-brand { display: contents; }
  .gogox-sfooter-logo { order: 1; grid-column: 1 / -1; margin-bottom: 24px; }
  .gogox-sfooter-hotline-title { order: 2; grid-column: 1 / -1; margin-bottom: 6px; }
  .gogox-sfooter-hotline-line { order: 3; grid-column: 1 / -1; margin-bottom: 2px; }
  .gogox-sfooter-hotline-title + .gogox-sfooter-hotline-line { margin-bottom: 4px; }
  .gogox-sfooter-socials { order: 4; grid-column: 1 / -1; margin: 24px 0 0; }
  .gogox-sfooter-col { order: 5; margin-top: 48px; } /* row 1: 公司+支援 side by side, row 2: 服務 */
  /* nth-child counts ALL siblings incl. .gogox-sfooter-brand (1st), so the
     2nd .gogox-sfooter-col (服務/SERVICE) is the container's 3rd child. It holds
     the most links, so it gets the full-width second row. */
  .gogox-sfooter-col:nth-child(3) { order: 6; } /* 服務 → its own second row */
  .gogox-sfooter-badges { order: 7; grid-column: 1 / -1; margin-top: 48px; }
}

/* Site footer — light theme (matches the existing #F2F2F2 site footer):
   dark text, black social circles, dark logo. Bottom bar stays black. */
.gogox-sfooter--light { color: #00121A; }
.gogox-sfooter--light .gogox-sfooter-hotline-title,
.gogox-sfooter--light .gogox-sfooter-hotline-line,
.gogox-sfooter--light .gogox-sfooter-col-title { color: #00121A; }
.gogox-sfooter--light .gogox-sfooter-links a { color: #333333 !important; }
.gogox-sfooter--light .gogox-sfooter-links a:hover { color: #0088BF !important; }
.gogox-sfooter--light .gogox-sfooter-social { color: #000000 !important; }
.gogox-sfooter--light .gogox-sfooter-social:hover { color: #000000 !important; }
.gogox-sfooter--light .gogox-sfooter-bottom-links a,
.gogox-sfooter--light .gogox-sfooter-bottom-meta { color: #00121A !important; }

/* Site footer — black bottom bar: legal links left, member + copyright right. */
/* Bottom row sits within the same footer background (no separate bar /
   border) — matches the single black block in the Figma. */
.gogox-sfooter-bottom { background: transparent; color: inherit; }
.gogox-sfooter-bottom-inner {
  max-width: 1224px;
  margin: 0 auto;
  padding: 18px 24px 60px; /* SVG: badges -> bottom row 67, bottom row -> band edge 65 */
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}
.gogox-sfooter-bottom-links { display: flex; gap: 32px; }
.gogox-sfooter .gogox-sfooter-bottom-links a {
  color: #FFFFFF !important; /* beat the legacy location-footer link color */
  font-size: 14px;
  text-decoration: none;
}
.gogox-sfooter .gogox-sfooter-bottom-links a:hover { color: #FFDD00 !important; }
.gogox-sfooter-bottom-meta { display: flex; gap: 32px; font-size: 14px; }
@media (max-width: 700px) {
  .gogox-sfooter-bottom-inner { flex-direction: column; align-items: flex-start; gap: 10px; }
  .gogox-sfooter-bottom-meta { flex-direction: column; gap: 4px; }
}


/* News posts — optional full-width separator line closing the section
   (section_divider switch): sits below the Explore-more button. */
.gogox-news--divider .gogox-news-inner {
  border-bottom: 1px solid #E3E7EC;
  padding-bottom: 56px;
}

/* Divider-mode news sections (VAS pages): no outer padding — the divider
   line and neighbouring sections control the rhythm. */
.gogox-news--divider { padding: 0; }

/* ----- ITG case-photo lightbox (item_gallery) ----- */
/* Items with case photos are clickable and show a camera hint; clicking
   opens a full-screen popup gallery (prev/next, ESC/backdrop to close). */
.gogox-itg-item--gallery { cursor: pointer; }
.gogox-itg-item--gallery:hover .gogox-itg-gallery-hint { color: #006E9B; }
.gogox-itg-gallery-hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  font-size: 14px;
  font-weight: 700;
  color: #0088BF;
}
.gogox-itg-gallery-hint svg { width: 18px; height: 18px; }

.gogox-itg-lightbox {
  position: fixed;
  inset: 0;
  z-index: 99999;
}
.gogox-itg-lightbox-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.82);
}
.gogox-itg-lightbox-dialog {
  position: relative;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 48px 24px;
  /* stop iOS claiming horizontal pans so JS swipe always gets the events */
  touch-action: none;
}
.gogox-itg-lightbox-img {
  max-width: min(1100px, 86vw);
  max-height: 82vh;
  border-radius: 8px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
  background: #111;
}
.gogox-itg-lightbox-close,
.gogox-itg-lightbox-prev,
.gogox-itg-lightbox-next {
  position: relative;
  z-index: 1;
  width: 48px;
  height: 48px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.92);
  color: #00121A;
  font-size: 28px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease;
}
.gogox-itg-lightbox-close:hover,
.gogox-itg-lightbox-prev:hover,
.gogox-itg-lightbox-next:hover { background: #FFDD00; }
.gogox-itg-lightbox-close {
  position: absolute;
  top: 20px;
  right: 20px;
}
.gogox-itg-lightbox-counter {
  position: absolute;
  bottom: 18px;
  left: 50%;
  transform: translateX(-50%);
  color: #FFFFFF;
  font-size: 14px;
  letter-spacing: 1px;
}
@media (max-width: 700px) {
  .gogox-itg-lightbox-dialog { padding: 16px 8px; gap: 8px; }
  .gogox-itg-lightbox-img { max-width: 92vw; max-height: 70vh; }
  /* On phones the flex row has no room for the arrows (the image takes
     92vw and squeezes them to zero) — float them over the image instead. */
  .gogox-itg-lightbox-prev, .gogox-itg-lightbox-next {
    width: 40px;
    height: 40px;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    background: rgba(255, 255, 255, 0.85);
  }
  .gogox-itg-lightbox-prev { left: 10px; }
  .gogox-itg-lightbox-next { right: 10px; }
}

/* HK only: icon-text-grid items read +10% on desktop/tablet (title
   20→22px, desc 15→16.5px). Mobile keeps the icon-left list's own tuned
   sizes; SG/IN/KR keep the original scale. */
@media (min-width: 701px) {
  .gogox-region-hken .gogox-itg-item-title,
  .gogox-region-hktc .gogox-itg-item-title { font-size: 22px; }
  .gogox-region-hken .gogox-itg-item-desc,
  .gogox-region-hktc .gogox-itg-item-desc { font-size: 16.5px; }
}

/* Inline links inside item descriptions (e.g. 尊尚貨Van upsell) — brand
   blue hover tone (#006E9B, same as the HK quote CTA), semibold +
   underlined so the word pops from the grey body copy. All widths. */
.gogox-itg-item-desc a {
  color: #006E9B;
  font-weight: 600;
  text-decoration: none;
}
.gogox-itg-item-desc a:hover { color: #00506F; }

/* ITG — opt-in 2-by-2 mobile grid (mobile_two_col switch), like the
   homepage value grid: 2 columns on phones with tighter gaps and a
   smaller icon so four items fit above the fold. */
@media (max-width: 700px) {
  .gogox-itg--mobile-2col .gogox-itg-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 32px 16px;
  }
  .gogox-itg--mobile-2col .gogox-itg-icon-wrap .gogox-itg-icon { max-width: 72px; max-height: 72px; }
  .gogox-itg--mobile-2col .gogox-itg-item-title { font-size: 18px; }
  .gogox-itg--mobile-2col .gogox-itg-item-desc { font-size: 14px; }

  /* Mobile icon-left list (Lalamove / Lyft style): each item is a compact
     row — icon column on the left, left-aligned title + description on the
     right. Beats the 2-col toggle when both are on. */
  .gogox-itg--mobile-list .gogox-itg-grid {
    grid-template-columns: 1fr !important;
    gap: 26px;
  }
  .gogox-itg--mobile-list .gogox-itg-item {
    display: flex !important;
    flex-direction: row !important; /* base item is a column flex */
    align-items: flex-start;
    gap: 18px;
    text-align: left;
  }
  .gogox-itg--mobile-list .gogox-itg-icon-wrap {
    flex: 0 0 53px;
    margin: 0;
    display: flex;
    justify-content: center;
  }
  .gogox-itg--mobile-list .gogox-itg-icon-wrap .gogox-itg-icon { max-width: 53px; max-height: 53px; }
  .gogox-itg--mobile-list .gogox-itg-item-content { flex: 1; min-width: 0; gap: 2px; } /* the content column's own 12px flex gap was the real spacer */
  .gogox-itg--mobile-list .gogox-itg-item-title { font-size: 19px; line-height: 1.3; margin: 0; text-align: left; } /* tight title→desc gap, Lalamove-style */
  .gogox-itg--mobile-list .gogox-itg-item-desc { font-size: 15px; line-height: 1.5; margin: 0; text-align: left; }
}

/* ----- HK-ONLY CTA BUTTON FORMAT (Amon spec 2026-07-13) -----
   Scoped by the per-site body class: 48px-high pill, 16px label, width
   hugs the text. Applies to all three shared button styles on HK EN + TC
   only — SG / IN / KR keep the original format. */
.gogox-region-hken .gogox-btn-primary,
.gogox-region-hktc .gogox-btn-primary,
.gogox-region-hken .gogox-btn-outline,
.gogox-region-hktc .gogox-btn-outline,
.gogox-region-hken .gogox-btn-yellow,
.gogox-region-hktc .gogox-btn-yellow,
.gogox-region-hken .gogox-itg-item-cta,
.gogox-region-hktc .gogox-itg-item-cta {
  font-size: 16px !important;
  line-height: 1 !important;
  min-height: 48px !important;
  padding: 0 24px !important;
  border-radius: 999px !important;
}
/* icon-text-grid item CTAs share the HK 48px pill size (colour/content
   unchanged — already blue #0088BF / white). Its base padding is
   16px 40px / line-height 1.5 (~56px tall); normalise to the HK size. */
.gogox-region-hken .gogox-itg-item-cta,
.gogox-region-hktc .gogox-itg-item-cta {
  padding: 0 28px !important;
}

/* Remaining HK CTAs normalised to the 48px pill size (colour unchanged):
   the vehicles-widget "Get quote" button and any native Elementor button
   widget. Both were ~52-54px with a 40px radius; size only. */
.gogox-region-hken .gogox-vehicles-cta-btn,
.gogox-region-hktc .gogox-vehicles-cta-btn,
.gogox-region-hken .elementor-widget-button .elementor-button,
.gogox-region-hktc .elementor-widget-button .elementor-button {
  font-size: 16px !important;
  line-height: 1 !important;
  min-height: 48px !important;
  height: 48px !important;
  padding: 0 28px !important;
  border-radius: 999px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}

/* HK-only (EN + TC) primary CTA — size only (48px pill, 16px bold label,
   width follows the text, 28px side padding as before). Colour + content
   stay as the existing primary style. Other regions keep the base
   .gogox-btn-primary until Amon aligns them globally. */
.gogox-region-hken .gogox-btn-primary,
.gogox-region-hktc .gogox-btn-primary {
  font-size: 16px !important;
  line-height: 1 !important;
  min-height: 48px !important;
  padding: 0 28px !important;
  border-radius: 999px !important;
}

/* ITG — opt-in mobile swipe cards (mobile_swipe switch). On phones the
   grid / alternating rows collapse into side-scrolling cards (image top,
   text below), matching the homepage service carousel feel. */
@media (max-width: 700px) {
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-grid,
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-alternating {
    display: flex !important;
    flex-direction: row !important;
    grid-template-columns: none !important;
    gap: 16px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    padding: 4px 24px 12px;
    margin: 0 -24px;
  }
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-grid::-webkit-scrollbar,
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-alternating::-webkit-scrollbar { display: none; }
  /* Specificity note: the base alternating mobile-stack rule is
     `.gogox-itg.gogox-itg--alternating .gogox-itg-item` (3 classes) — this
     override must match or exceed that, so it repeats both root classes. */
  .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item,
  .gogox-itg.gogox-itg--alternating.gogox-itg--mobile-swipe .gogox-itg-item:nth-child(even),
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-item {
    flex: 0 0 82vw !important;
    max-width: 82vw;
    flex-direction: column !important;
    scroll-snap-align: center;
    border-top: 0 !important;
    padding: 0 !important;
    background: #fff;
    border: 1px solid #E3E7EC;
    border-radius: 16px;
    overflow: hidden;
    text-align: left;
  }
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-icon-wrap { width: 100% !important; margin: 0 !important; }
  .gogox-itg.gogox-itg--mobile-swipe .gogox-itg-item-content { padding: 20px !important; width: auto !important; }
  /* ── Premium mobile card (mobile_premium_cards switch) ───────────────────
     Bound to the class the widget sets, never to an element id: this same
     widget also draws the About Us core values, so an id-bound rule would be
     one rename away from breaking that page or silently not applying here.
     Turning the switch on is what opts an instance in.

     Vertical ratio per the brief — hero 38%, content 42%, CTA 20% — held by
     giving the card a fixed aspect ratio and letting the three zones divide it,
     rather than by hard-coding pixel heights that would drift with font size. */
  /* 68vw, not the 80-84% the brief suggested. Those two asks are mutually
     exclusive: on a 390px screen a card at 82% is 320px, and with the rail's
     24px inset and a 14px gap that leaves 9% of the next card showing — well
     under the 18-22% peek the same brief asks for, and the peek is the point
     (it is what tells someone the row scrolls). At 68vw the card is 265px and
     the peek lands at 22%, the top of the requested band. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item {
    flex: 0 0 74vw !important;
    max-width: 74vw !important;
    gap: 0 !important;
    /* Fixed ratio, so every card in the rail is the same height and the CTA lands
       at the same place on each. Content-driven height meant the fuel card — whose
       description fits one line where the insurance card's takes two — came out
       shorter, and its link sat visibly higher than its neighbour's. The earlier
       dead-band problem is handled by reserving two lines for the description
       below rather than by letting the card shrink.
       23/24 is derived: at 296px wide the content block is 179px, so a 42% hero
       puts the card at 309px. */
    /* No fixed ratio. Equal card heights come from the description reserving two
       lines below, which is enough on its own — a fixed ratio only added slack
       under the CTA that had to be absorbed somewhere. */
    position: relative;                    /* anchor for the whole-card tap target */
    /* A hairline, not a shadow. Dropping both left the card with no edge at all
       below the hero — the text and link just floated on the page background,
       so where one card ended and the next began was unreadable. The border
       defines the edge without bringing the shadow back. */
    border: 1px solid #E3E7EC !important;
    border-radius: 20px !important;
    box-shadow: none !important;
    background: #FFFFFF !important;
  }
  /* Hero image: 38% of the card, cropped to its centre so wide banner artwork
     keeps its subject instead of being squashed. */
  /* Hero ratio measured off the mock: its card is 344x458 with a 221px image,
     so the hero is 48% of the card and the card itself is 3:4. A 25:16 hero on a
     265px card is 170px, which lands at 46% once the content block below is
     sized for phone-legible type — the mock's own type is smaller relative to
     its card than 16px on a 390px screen, so matching its spacing AND its font
     sizes exactly would make the card taller than the one it replaced. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-icon-wrap {
    flex: 0 0 auto !important;
    /* 8:5 — on a 289px card that is a 181px hero, inside the 180-200px the brief
       asks for. Note the stated 45% and the stated 180px pull apart: 181px of a
       368px card is 49%. Height is the concrete number, so height wins. */
    aspect-ratio: 8 / 5;
    min-height: 0;
    overflow: hidden;
    position: relative;               /* anchor for the category pill */
  }
  /* Floating category pill, top-left over the hero. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-badge {
    position: absolute;
    top: 12px;
    left: 12px;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    /* ~15% more compact than the first pass: the pill supports the image, it
       does not compete with it. */
    padding: 5px 10px 5px 5px;
    background: #FFFFFF;
    border-radius: 999px;
    box-shadow: 0 1px 2px rgba(11, 31, 51, 0.08), 0 4px 12px rgba(11, 31, 51, 0.12);
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-badge-icon {
    width: 17px;
    height: 17px;
    flex: 0 0 17px;
    border-radius: 50%;
    background: #0088BF;
    color: #FFFFFF;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-badge-icon svg,
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-badge-icon i { width: 9px; height: 9px; fill: currentColor; }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-badge-text {
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    color: #0B1F33;
    white-space: nowrap;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-icon {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    /* Centred. Shifting the focal point was an attempt to crop the photo's own
       "FUEL SAVINGS" lettering out of frame, but the source is 782x388 against a
       1.56 crop box — only 22% of the width can ever be cropped, and the
       lettering sits near the middle, so no object-position value removes it.
       Centred at least frames it deliberately. */
    object-position: center center !important;
  }
  /* Content takes the remaining 62%; the title/description block sits at the
     top of it and the CTA is pushed to the bottom edge, which lands the split
     near the 42/20 the brief asks for without pinning either to a pixel value. */
  /* Left-aligned throughout. The grid mode centres its items by default, which
     reads fine for icon tiles but not for these cards — the brief and the mock
     are both flush left. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item,
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-content,
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-title,
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-desc { text-align: left !important; }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-content {
    flex: 0 0 auto !important;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: stretch !important;
    /* The content column carries a 12px flex gap of its own, which was landing
       on top of every margin here — the brief's 12px title→description read as
       24px and its 20px description→divider as 32px. Spacing is set by the
       margins below, so the gap has to go. */
    gap: 0 !important;
    /* Vertical rhythm scaled off the mock (35 / 12 / 36 / 34 / 38 on a 344px
       card) and pulled in just enough to keep the card near the height of the
       one it replaced. 24px sides rather than 20 — the wider gutter is most of
       what makes the narrower card still read as premium instead of cramped. */
    /* 20 above the title, 16 below the CTA — less weight at the bottom.
       24 at the sides. */
    padding: 20px 24px 16px !important;
    min-height: 0;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-title {
    font-size: clamp(22px, 6.4vw, 25px) !important;
    line-height: 1.2 !important;
    font-weight: 700 !important;
    color: #0B1F33 !important;
    margin: 0 0 10px !important;      /* tightened title → description (8-12px band) */
    white-space: nowrap;              /* brief: title is one line only */
    overflow: hidden;
    text-overflow: ellipsis;
  }
  /* Two lines maximum, per the brief. Anything longer is clamped rather than
     allowed to push the CTA out of the card. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-desc {
    font-size: 16px !important;
    line-height: 1.5 !important;
    color: #5C6B7A !important;
    margin: 0 !important;
    /* Always occupies two lines: clamped at two so it never grows, and reserved
       at two so a one-line description leaves the block the same height. This is
       what keeps the divider and link aligned across cards. */
    min-height: 3em;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  /* Hairline divider + text link instead of a button. margin-top:auto is what
     pins this to the bottom of the content area. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-cta {
    /* Fixed gaps, not margin-top:auto — auto is what produced the dead band.
       24 above the divider and 18 below it, tracking the mock's 36 / 34 pair. */
    /* Divider restored — it had been removed one round earlier on the note that
       the link read better straight under the description; this reverses that.
       #E5E7EB per the brief, with the gap split above and below it. */
    margin-top: 16px !important;
    padding-top: 16px !important;
    /* The base CTA is styled as an outlined button. Clearing all four sides
       first is what turns it into a text link — setting only border-top left
       the other three showing, so the "divider" rendered as a box. */
    border: 0 !important;
    border-top: 1px solid #E5E7EB !important;
    background: none !important;
    border-radius: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    padding-bottom: 0 !important;
    /* #0F2C59 as specified. Worth knowing it is neither the GoGoX brand blue
       (#0088BF) nor the navy this card's own title uses (#0B1F33) — it is a third
       value, so if the intent was "match the title" this wants changing to
       #0B1F33 instead. */
    color: #0F2C59 !important;
    font-size: 15px !important;
    font-weight: 600 !important;
    text-decoration: none !important;
    display: flex !important;
    align-items: center;
    gap: 12px;
    width: 100%;
    justify-content: flex-start;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-cta::after {
    content: "→";
    font-size: 16px;
    line-height: 1;
  }
  /* No press animation on phones. The scale + shadow + arrow-slide pass was
     dropped on request: the whole card is already a link, and on touch the
     movement fought the scroll gesture rather than adding anything. Nothing here
     replaces it deliberately — the card is static until it navigates. */
  /* Whole card tappable, with no JS: the CTA's own pseudo-element is stretched
     over the card, so a tap anywhere follows the same link. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-item-cta::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    border-radius: 20px;
  }
  /* Pagination dots under the rail. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-swipe-dots {
    display: flex;
    justify-content: center;
    gap: 8px;
    margin: 4px 0 0;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-swipe-dot {
    width: 8px;
    height: 8px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #E5E7EB;
    cursor: pointer;
    transition: background 0.15s ease;
  }
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-swipe-dot.is-active { background: #0F2C59; }
  /* Card-to-card gap at the lower end of the 12-16px band, which buys the peek
     a couple of extra pixels without the cards touching. */
  /* Narrower rail inset than the shared swipe rule's 24px: at 24 the 16% peek
     the brief asks for is unreachable, because inset + card + gap already eats
     the viewport. 16px keeps a gutter and lets the next card show properly. */
  .gogox-itg.gogox-itg--mobile-premium .gogox-itg-grid {
    gap: 14px !important;
    padding-left: 12px !important;
    padding-right: 12px !important;
    margin-left: -12px !important;
    margin-right: -12px !important;
  }
  /* Pull the next section up: the stock gap below this carousel made the page
     read longer than it is on a phone, with 精選動態 sitting well below the fold. */
  /* -36px measured as the next section overlapping the dots, so this is backed
     off. The measurement is not fully trustworthy either way: the following
     section's box top sits above its visible content because of its own padding,
     so neither value can be confirmed numerically — judge this one by eye. */
  .gogox-itg.gogox-itg--mobile-premium { margin-bottom: -24px; }
}
/* The dots and the category pill are both emitted for every mobile_premium
   instance, but both are phone-only affordances and all of their styling lives in
   the max-width:700px block. Left unhidden, the pill arrived on desktop as an
   unpositioned inline span and rendered as a squashed vertical strip of text
   against the edge of the image — desktop has to stay exactly as it was. */
@media (min-width: 701px) {
  .gogox-itg-swipe-dots,
  .gogox-itg-badge { display: none !important; }
}

/* ITG — per-image pop-in (items_pop switch). Armed by JS only, so images
   are never hidden if scripts fail; each icon bounces in with a stagger. */
.gogox-itg--pop-items .gogox-itg-icon-wrap.gogox-pop-armed {
  opacity: 0;
  transform: scale(0.3);
}
.gogox-itg--pop-items .gogox-itg-icon-wrap.gogox-pop-armed.is-pop {
  animation: gogoxPopIn 0.65s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;
}
@keyframes gogoxPopIn {
  0%   { opacity: 0; transform: scale(0.3); }
  55%  { opacity: 1; transform: scale(1.06); }
  75%  { transform: scale(0.96); }
  100% { opacity: 1; transform: scale(1); }
}

/* ITG — hover Bounce In on item images (items_hover_bounce switch).
   Exact replica of Elementor's Image-widget "Bounce In" hover animation
   (hover.css): 0.5s, scale(1.2), overshoot bezier — same as production. */
.gogox-itg--hover-bounce .gogox-itg-icon-wrap img {
  transition-duration: 0.5s;
  transition-property: transform;
}
.gogox-itg--hover-bounce .gogox-itg-icon-wrap:hover img {
  transform: scale(1.2);
  transition-timing-function: cubic-bezier(0.47, 2.02, 0.31, -0.36);
}
/* The square/landscape wraps crop with overflow:hidden for their rounded
   corners — that clips the scaled-up image. In hover-bounce mode let the
   image escape the wrap (rounding moves onto the img itself) and float the
   hovered card above its neighbours. */
.gogox-itg--hover-bounce .gogox-itg-icon-wrap {
  overflow: visible !important;
}
.gogox-itg--hover-bounce .gogox-itg-icon-wrap img {
  border-radius: 8px;
}
.gogox-itg--hover-bounce .gogox-itg-icon-wrap:hover {
  position: relative;
  z-index: 3;
}

/* Hover bounce is desktop-only: on phones a "hover" fires on tap, which
   just makes the image jump unexpectedly — disable it there. */
@media (max-width: 700px) {
  .gogox-itg--hover-bounce .gogox-itg-icon-wrap:hover img {
    transform: none;
  }
}

/* ===================================================================
   LEGAL DOC HUB (Terms / Compensation / Pet Order Guidelines / Privacy)
   Lalamove-style 2-column: sticky left nav + document content right.
   The `legalwrap` container is a flex row; nav is a fixed-width column.
   =================================================================== */
/* Targeted TWO ways so every legal doc — current and future — gets the exact
   same format (padding, gap, nav width, body font-size/colour, first-line
   alignment):
     1. `.elementor-element-legalwrap` — the shared container id on the
        editor-built docs (terms / privacy / pet order guidelines).
     2. `.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav)`
        — ANY boxed container whose columns hold the legal-nav widget. Pages
        rebuilt/cloned via _elementor_data get fresh element ids, so the id
        selector alone missed them (nav+body stacked, wrong font + spacing).
   To add a new terms doc: clone the terms page layout (hero + 2-col container
   with gogox_legal_nav on the left) and it inherits this format automatically. */
.elementor-element-legalwrap,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) { padding: 48px 24px 64px !important; }
.elementor-element-legalwrap > .e-con-inner,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner {
  display: flex !important;
  flex-direction: row !important;
  align-items: flex-start !important;
  gap: 48px !important;
  max-width: 1200px !important;
  margin: 0 auto !important;
  width: 100% !important;
}
/* nav column */
.elementor-element-legalwrap > .e-con-inner > .e-con:first-child,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:first-child {
  flex: 0 0 260px !important;
  max-width: 260px !important;
  align-self: flex-start !important;
  position: sticky;
  top: 96px;
}
/* body column */
.elementor-element-legalwrap > .e-con-inner > .e-con:last-child,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:last-child {
  flex: 1 1 auto !important;
  min-width: 0 !important;
}
/* Sidebar nav */
.gogox-legal-nav-title {
  font-family: "proxima-nova", sans-serif;
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: #9aa3ad;
  margin: 0 0 16px;
}
.gogox-legal-nav-list { list-style: none; margin: 0; padding: 0; }
.gogox-legal-nav-item { margin: 0; }
.gogox-legal-nav-item a {
  display: block;
  padding: 12px 16px;
  border-left: 3px solid transparent;
  color: #333333;
  font-family: "proxima-nova", sans-serif;
  font-size: 16px;
  line-height: 1.4;
  text-decoration: none;
  transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
}
.gogox-legal-nav-item a:hover { color: #0088BF; background: #F4F8FB; }
.gogox-legal-nav-item.is-active a {
  color: #0088BF;
  font-weight: 700;
  border-left-color: #0088BF;
  background: #F4F8FB;
}
@media (max-width: 900px) {
  .elementor-element-legalwrap > .e-con-inner,
  .e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner { flex-direction: column !important; gap: 24px !important; }
  .elementor-element-legalwrap > .e-con-inner > .e-con:first-child,
  .e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:first-child {
    flex: 1 1 auto !important;
    max-width: none !important;
    position: static;
    width: 100%;
  }
  /* Mobile: nav is a 2-per-row grid (so 4 docs = 2 rows). No horizontal
     scroll, so nothing is hidden — as more docs are added it grows more
     rows rather than clipping. */
  .gogox-legal-nav-list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 12px;
  }
  .gogox-legal-nav-item {
    flex: 0 0 calc(50% - 6px);
    max-width: calc(50% - 6px);
  }
  .gogox-legal-nav-item a {
    white-space: normal;
    border-left: 0;
    border-bottom: 3px solid transparent;
    padding: 10px 12px;
  }
  .gogox-legal-nav-item.is-active a { border-left: 0; border-bottom-color: #0088BF; border-radius: 0; }
}

/* Hide the floating "Download App" FAB on the legal doc pages (Terms /
   Compensation / Pet order guidelines / Privacy, both languages). */
body.page-id-253 .gogox-mobile-fab,
body.page-id-223 .gogox-mobile-fab,
body.page-id-267 .gogox-mobile-fab,
body.page-id-254 .gogox-mobile-fab,
body.page-id-47 .gogox-mobile-fab,
body.page-id-147 .gogox-mobile-fab,
body.page-id-715 .gogox-mobile-fab,
body.page-id-49 .gogox-mobile-fab {
  display: none !important;
}

/* Inline PDF viewer (e.g. Cargo Compensation Promises on the compensation
   page). Responsive height; full width of its column. */
.gogox-pdf-embed {
  width: 100%;
  margin: 24px 0 8px;
  border: 1px solid #E3E7EC;
  border-radius: 8px;
  overflow: hidden;
  background: #F7F9FB;
}
.gogox-pdf-embed iframe {
  display: block;
  width: 100%;
  height: 80vh;
  min-height: 560px;
  border: 0;
}
@media (max-width: 700px) {
  .gogox-pdf-embed iframe { height: 70vh; min-height: 440px; }
}

/* Legal-page hero bands (Terms / Compensation / Pet Order Guidelines /
   Privacy) reuse the /bad-weather/ band style but 10% smaller title. */
.gogox-hero-legal .gogox-hero-section--band-title-h1 .gogox-hero-title {
  font-size: 50px !important;  /* 56 - 10% */
}
@media (max-width: 768px) {
  .gogox-hero-legal .gogox-hero-section--band.gogox-hero-section--band-title-h1 .gogox-hero-title {
    font-size: 36px !important; /* 40 - 10% */
  }
}

/* Legal doc body text: unify all four docs on the doc standard carried
   over from production widgets (15.2px, #333). Without this the
   compensation page's intro text falls back to the kit default
   (16px grey #7A7A7A) and looks different from terms/privacy/guidelines. */
.elementor-element-legalwrap > .e-con-inner > .e-con:last-child .elementor-widget-text-editor,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:last-child .elementor-widget-text-editor {
  font-size: 15.2px;
  color: #333333;
}

/* Legal docs: zero the top margin/padding of the first content element in
   the body column so every doc's first line starts at the same height
   below the hero band (production copy starts with different leading
   elements — bold line vs plain para vs Word wrapper — which otherwise
   makes terms/compensation/privacy/guidelines sit at slightly different
   heights). Two levels deep covers the DIV>P wrapper Word paste creates.
   NOTE: Elementor 4.x no longer renders the inner `.elementor-text-editor`
   div, so the legacy selectors below never match — `.gogox-legal-page` (the
   widget div itself) is the reliable hook and is what actually does the work.
   Docs imported from production happened to carry inline `margin-top: 0pt`,
   which masked this; hand-written first lines (e.g. a "last updated" line)
   sat ~15px lower until this was added. */
.elementor-element-legalwrap > .e-con-inner > .e-con:last-child .elementor-widget-text-editor .elementor-text-editor > *:first-child,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:last-child .elementor-widget-text-editor .elementor-text-editor > *:first-child,
.elementor-element-legalwrap > .e-con-inner > .e-con:last-child .elementor-widget-text-editor .elementor-text-editor > *:first-child > *:first-child,
.e-con:has(> .e-con-inner > .e-con .elementor-widget-gogox_legal_nav) > .e-con-inner > .e-con:last-child .elementor-widget-text-editor .elementor-text-editor > *:first-child > *:first-child {
  margin-top: 0 !important;
  padding-top: 0 !important;
}
/* Elementor 4.x structure (no .elementor-text-editor wrapper): the legal body
   widget carries .gogox-legal-page and the copy is its direct children. */
.gogox-legal-page > *:first-child,
.gogox-legal-page > *:first-child > *:first-child {
  margin-top: 0 !important;
  padding-top: 0 !important;
}

/* Compensation PDF: both desktop and mobile use an "Open full document (PDF)"
   button (the inline iframe viewer read awkwardly and iOS Safari can't page a
   PDF in an iframe). Uses the latest HK CTA pill format: 48px min-height,
   0 24px padding, 999px radius, inline-flex centred. */
.gogox-pdf-open {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #0088BF;
  color: #fff;
  font-family: Lato, sans-serif;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
  min-height: 48px;
  padding: 0 24px;
  border-radius: 999px;
  text-decoration: none;
  margin: 8px 0;
}
.gogox-pdf-open:hover { background: #005f85; color: #fff; }

/* Cargo compensation is a standalone doc (pulled out of the legal hub — no
   shared sidebar). Content sits in a centred column; reuse the doc text
   standard so it matches the other legal pages' typography. Targeted by the
   container id (Elementor doesn't emit custom classes on containers). */
.elementor-element-compwrap { padding: 0 24px 64px !important; }
.elementor-element-compwrap > .e-con-inner {
  max-width: 960px !important;
  margin: 0 auto !important;
}
.elementor-element-compwrap .elementor-widget-text-editor {
  font-size: 15.2px;
  color: #333333;
}

/* Cargo compensation standalone: centre all content (intro, table, PDF
   button, claim/contact block) so the PDF button and Submit-a-Claim block
   line up centred rather than drifting left/right. */
.elementor-element-compwrap > .e-con-inner {
  align-items: center !important;
  text-align: center !important;
}
.elementor-element-compwrap .gogox-comp-links,
.elementor-element-compwrap .ggx-comp-section { text-align: center !important; }
/* The PDF button is an <a> in an html widget that doesn't inherit the centre
   alignment — centre it explicitly (flex + auto margins). */
.elementor-element-compwrap .gogox-pdf-open {
  display: flex;
  width: fit-content;
  margin: 8px auto;
}
/* Claim pills follow the same latest HK CTA format (48px / 999px / 0 24px). */
.elementor-element-compwrap .ggx-comp-btn,
.elementor-element-compwrap .gogox-comp-link {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 48px !important;
  padding: 0 24px !important;
  border-radius: 999px !important;
  font-family: Lato, sans-serif !important;  /* match the PDF button above */
  font-size: 16px !important;
  font-weight: 700 !important;               /* was inheriting 400 (too thin) */
  line-height: 1 !important;
}

/* Divider between the PDF button and the Submit-a-Claim block on the
   standalone compensation page (matches the site's section separators).
   Explicit width so it centres correctly inside the align-items:center
   column (width:100% of a shrink-to-fit widget collapses to 0). */
.gogox-comp-divider {
  border: 0 !important;
  border-top: 1px solid #E3E7EC !important;
  width: 960px !important;
  max-width: 100% !important;
  margin: 32px auto !important;   /* !important: a global hr reset zeroes margins */
}

/* Submit a Claim / Contact Us block re-styled to the pet-page CTA band
   (gogox-cta-band): centred, proxima-nova 32px/400 titles, 16px grey text,
   pet-like vertical rhythm. Buttons keep the 48px pill format. */
.ggx-comp-cta { padding: 24px 24px 8px !important; }
.ggx-comp-cta .ggx-comp-btn { margin: 2px 0; }
.ggx-comp-cta .ggx-comp-contact { margin-top: 48px !important; }

/* Homepage "Looking for other services?" cards (hmother1, GoGoX fuel card /
   insurance): centre the title, description and CTA under each card image
   (the landscape variant is left-aligned by default). HK TC + EN.

   DESKTOP ONLY. These are element-id-bound and sit later in the file than the
   premium mobile card block, so at equal specificity they were winning and
   keeping the phone cards centred no matter what that block asked for — the
   exact failure mode that made a widget-set class the right hook for the new
   style. Confining them to ≥701px leaves the desktop look untouched and gets
   them out of the mobile cascade. */
@media (min-width: 701px) {
  .elementor-element-hmother1 .gogox-itg-item-title,
  .elementor-element-hmother1 .gogox-itg-item-desc,
  .elementor-element-hkzother1 .gogox-itg-item-title,
  .elementor-element-hkzother1 .gogox-itg-item-desc,
  .elementor-element-sghother1 .gogox-itg-item-title,
  .elementor-element-sghother1 .gogox-itg-item-desc { text-align: center !important; }
  .elementor-element-hmother1 .gogox-itg-item-content,
  .elementor-element-hkzother1 .gogox-itg-item-content,
  .elementor-element-sghother1 .gogox-itg-item-content { align-items: center !important; }
  .elementor-element-hmother1 .gogox-itg-item-cta,
  .elementor-element-hkzother1 .gogox-itg-item-cta,
  .elementor-element-sghother1 .gogox-itg-item-cta { align-self: center !important; }
}

/* Restore the compensation claim pill fill/colour (the base .ggx-comp-btn
   background lived in an inline <style> that was removed when the block was
   rebuilt as a CTA band). */
.elementor-element-compwrap .ggx-comp-btn,
.elementor-element-compwrap .gogox-comp-link {
  background: #0088BF !important;
  color: #fff !important;
  text-decoration: none !important;
}
.elementor-element-compwrap .ggx-comp-btn:hover,
.elementor-element-compwrap .gogox-comp-link:hover { background: #006E9B !important; color: #fff !important; }

/* Intro paragraph AND the table share the bad-weather page's 860px measure, so
   both land on the same left edge (bad-weather has intro text, heading and table
   all flush at one line; here the table was 884px and sat 12px further left). */
.elementor-element-compintro1,
.elementor-element-comptable1 {
  max-width: 860px !important;
  width: 100% !important;
  align-self: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

/* News "explore more" button: shown as a centred button BELOW the cards on
   every breakpoint (incl. mobile homepage — per Russ, "bring it to the
   bottom"). The old end-of-swipe slide is retired. */
.gogox-news-more-slide { display: none !important; }
@media (max-width: 700px) {
  /* Un-hide the centred section CTA on the mobile homepage so the button
     sits at the bottom, and standardise it to the HK 48px pill. */
  .home .gogox-news-section-cta { display: flex !important; margin-top: 24px; }
}

/* Delivery "cut-off time / 截單時間": plain centred section title (like the
   moving "附加服務" heading) — no card. */
.elementor-element-hkzdlv_s06,
.elementor-element-s06cot { text-align: center; }
.elementor-element-hkzdlv_s06 .elementor-heading-title,
.elementor-element-hkzdlv_s06 .elementor-widget-text-editor,
.elementor-element-s06cot .elementor-heading-title,
.elementor-element-s06cot .elementor-widget-text-editor { text-align: center !important; }

/* Delivery timing tiers (即時 / 4小時 / 當日): horizontal swipe carousel on
   mobile (like the DiDi / moving cards) instead of a vertical stack.
   TC = .ggx-tiers (inline-styled html widget); EN = container s07tir. */
@media (max-width: 768px) {
  /* TC — override the widget's inline `grid-template-columns:1fr` */
  .ggx-tiers {
    display: flex !important;
    grid-template-columns: none !important;
    flex-wrap: nowrap !important;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    gap: 16px !important;
    padding: 4px 24px 48px !important;
    scrollbar-width: none;
  }
  .ggx-tiers::-webkit-scrollbar { display: none; }
  .ggx-tiers > .ggx-tier {
    flex: 0 0 auto !important;
    width: min(78vw, 300px) !important;
    min-height: 0 !important;
    scroll-snap-align: center;
  }
  /* EN — container of the three tier cards */
  .elementor-element-s07tir > .e-con-inner,
  .elementor-element-s07tir.e-con > .e-con-inner {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    gap: 16px !important;
    scrollbar-width: none;
    padding-bottom: 8px;
  }
  .elementor-element-s07tir > .e-con-inner::-webkit-scrollbar { display: none; }
  .elementor-element-s07tir > .e-con-inner > .e-con {
    flex: 0 0 auto !important;
    width: min(78vw, 300px) !important;
    scroll-snap-align: center;
  }
}

/* ----- SG CTA BUTTON FORMAT — match the HK 48px pill (per request) ----- */
.gogox-region-sg .gogox-btn-primary,
.gogox-region-sg .gogox-btn-outline,
.gogox-region-sg .gogox-btn-yellow,
.gogox-region-sg .gogox-itg-item-cta {
  font-size: 16px !important;
  line-height: 1 !important;
  min-height: 48px !important;
  padding: 0 24px !important;
  border-radius: 999px !important;
}
.gogox-region-sg .gogox-itg-item-cta { padding: 0 28px !important; }
.gogox-region-sg .gogox-vehicles-cta-btn,
.gogox-region-sg .elementor-widget-button .elementor-button {
  font-size: 16px !important;
  line-height: 1 !important;
  min-height: 48px !important;
  height: 48px !important;
  padding: 0 28px !important;
  border-radius: 999px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.gogox-region-sg .gogox-btn-primary { padding: 0 28px !important; }

/* App-steps ("使用方法 / 三步完成預約") CTA button: hidden on mobile across all
   HK pages using the widget (per request). Desktop keeps it. */
@media (max-width: 700px) {
  .gogox-region-hken .gogox-appsteps-cta,
  .gogox-region-hktc .gogox-appsteps-cta { display: none !important; }
}

/* Hero background VIDEO: when a hero has bg_video, the background plays the
   video (autoplay, muted, loop) instead of the image — on ALL breakpoints
   (desktop + mobile). The image bgs are hidden while a video is present. */
.gogox-hero-section:has(.gogox-hero-bg-video) .gogox-hero-bg:not(.gogox-hero-bg-video) { display: none !important; opacity: 0 !important; }
.gogox-hero-bg-video {
  display: block !important;
  opacity: 1 !important;
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  z-index: 0 !important;
  pointer-events: none;
}
/* Where the hero now carries the brand video, the separate standalone
   video section is redundant → hidden on every breakpoint. */
.elementor-element-hkzsvc_vid_wrap,
.elementor-element-svcvid1w { display: none !important; }

/* ============================================================================
   PRICING PAGE — Apple/Stripe-style visual refresh (content unchanged).
   Scoped to priceveh1 (vehicle cards) + pricetbl1 (the fee tables) + the
   pricing step nav, all of which only appear on the /pricing/ pages.
   ========================================================================== */
/* Vehicle cards → light, bordered, rounded, soft shadow */
.elementor-element-priceveh1 .gogox-vehicle-card {
  background: #FFFFFF;
  border: 1px solid #E6E9ED;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
  color: #00121A;
  gap: 18px;
}
.elementor-element-priceveh1 .gogox-vehicle-card-name { color: #00121A; }
.elementor-element-priceveh1 .gogox-vehicle-card-specs { gap: 0; }
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row {
  border-top: 1px solid #EEF1F4;
  padding: 8px 0;
}
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row:first-child { border-top: 0; padding-top: 0; }
/* tighter vertical rhythm between name / specs / features */
.elementor-element-priceveh1 .gogox-vehicle-card { gap: 14px; }
.elementor-element-priceveh1 .gogox-vehicle-card-body { gap: 8px; }
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row dt { color: #8A94A0; }
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row dd { color: #00121A; }
.elementor-element-priceveh1 .gogox-vehicle-card-features {
  border-top: 1px solid #EEF1F4;
  padding-top: 10px;
  margin-top: 0;
}
.elementor-element-priceveh1 .gogox-vehicle-card-features li { color: #00121A; }

/* Fee tables → premium rounded card, light-grey header, airy rows */
.elementor-element-pricetbl1 .gogox-pricing-table-wrap {
  border: 1px solid #E6E9ED;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
  background: #FFFFFF;
  overflow-x: auto;              /* wide table scrolls / swipes horizontally */
  -webkit-overflow-scrolling: touch;
}
.elementor-element-pricetbl1 .gogox-pricing-table {
  border-collapse: separate;
  border-spacing: 0;
  font-size: 15px;
  min-width: 560px;
}
/* On phones EVERY fee table fits the viewport in one view — no horizontal swipe.
   The 560px min-width is dropped and the type/padding tighten so four columns
   fit 375px, matching how the vehicles table already behaves. */
@media (max-width: 768px) {
  .elementor-element-pricetbl1 .gogox-pricing-table,
  .elementor-element-pricetbl1 .gogox-pricing-table--fit { min-width: 0 !important; width: 100% !important; }
  .elementor-element-pricetbl1 .gogox-pricing-table tbody td,
  .elementor-element-pricetbl1 .gogox-pricing-table tbody th {
    padding: 8px 6px !important;
    font-size: 12.5px !important;
    line-height: 18px !important;
  }
  /* Headers stay a readable 14px in every table (body cells carry the width, so
     shrinking those is what makes the four columns fit). */
  .elementor-element-pricetbl1 .gogox-pricing-table thead th {
    padding: 9px 6px !important;
    font-size: 14px !important;
    line-height: 19px !important;
  }
  .elementor-element-pricetbl1 .gogox-pricing-table thead th:first-child,
  .elementor-element-pricetbl1 .gogox-pricing-table tbody td:first-child { width: 34% !important; }
  /* wider location column (divider sits further right) so the long airport
     labels stay on their two intended lines */
  .elementor-element-pricetbl1 .gogox-pricing-table--fit th:first-child,
  .elementor-element-pricetbl1 .gogox-pricing-table--fit td:first-child { width: 46% !important; }
  /* keep each label segment on one line — no further wrapping */
  .elementor-element-pricetbl1 .ggx-nb { white-space: nowrap; }
  /* Vehicles section drops its desktop image clearance once the cards give way
     to the table, so its heading→table gap matches the other sections
     (was 44px against their 16px). Needs the element-id prefix to outrank the
     later `.elementor-element-priceveh1 .gogox-vehicles { padding-top: 28px }`. */
  .elementor-element-priceveh1 .gogox-vehicles.gogox-vehicles--has-mtable { padding-top: 0 !important; }
}
/* Brand-blue header (matching bad-weather / compensation); rows keep the light
   hairline dividers. */
.elementor-element-pricetbl1 .gogox-pricing-table thead th {
  background: #0088BF;
  color: #FFFFFF;
  font-weight: 600;
  border-bottom: 1px solid #0088BF;
  padding: 12px 18px;
  text-align: center;
}
.elementor-element-pricetbl1 .gogox-pricing-table tbody td,
.elementor-element-pricetbl1 .gogox-pricing-table tbody th {
  padding: 10px 18px;
  border-bottom: 1px solid #F0F2F5;
  vertical-align: middle;
}
.elementor-element-pricetbl1 .gogox-pricing-table tbody tr:last-child td,
.elementor-element-pricetbl1 .gogox-pricing-table tbody tr:last-child th { border-bottom: 0; }
.elementor-element-pricetbl1 .gogox-pricing-table tbody td:first-child { text-align: left; font-weight: 500; }
.elementor-element-pricetbl1 .gogox-pricing-table tbody td { text-align: center; color: #00121A; }
.elementor-element-pricetbl1 .gogox-pricing-table tbody tr:nth-of-type(even) td { background: #F2F5F7; }
/* section headings sit above each table with generous rhythm */
.elementor-element-pricetbl1 h3 {
  font-size: 22px;
  font-weight: 700;
  color: #00121A;
  margin: 48px 0 16px;
}
.elementor-element-pricetbl1 > .elementor-widget-container > h3:first-child { margin-top: 0; }
/* Footnotes / disclaimers read as fine print, so they sit a step below the
   table type rather than matching it. */
.elementor-element-pricetbl1 .gogox-pricing-footnote,
.elementor-element-pricetbl1 .gogox-pricing-disclaimer {
  margin-top: 20px;
  font-size: 13px;
  line-height: 20px;
}
@media (max-width: 768px) {
  .elementor-element-pricetbl1 .gogox-pricing-footnote,
  .elementor-element-pricetbl1 .gogox-pricing-disclaimer {
    font-size: 12px;
    line-height: 18px;
  }
}

/* Step nav (index of the fee sections) — numbered pills joined by hairlines */
.gogox-price-steps {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 8px 4px;
  max-width: 1040px;
  margin: 4px auto 0;
  padding: 0 24px;
}
.gpx-step { display: inline-flex; align-items: center; gap: 11px; color: #475467; font-size: 17px; white-space: nowrap; }
.gpx-step-num {
  flex: 0 0 28px; width: 28px; height: 28px; border-radius: 50%;
  background: #0088BF; color: #fff; font-size: 14px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
}
.gpx-step-line { flex: 0 0 44px; height: 1px; background: #D0D5DD; margin: 0 6px; }
/* Mobile: swap the numbered stepper for an icon tab-bar (short labels, active
   tab underlined, horizontally scrollable). */
.gogox-price-tabs { display: none; }
@media (max-width: 768px) {
  .gogox-price-steps { display: none !important; }
  .gogox-price-tabs {
    display: flex;
    align-items: stretch;
    gap: 2px;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    border-bottom: 1px solid #E6E9ED;
    padding: 0;
    margin: 0 0 8px;
  }
  .gogox-price-tabs::-webkit-scrollbar { display: none; }
  .gpt-tab {
    flex: 1 1 0;
    min-width: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    padding: 12px 4px;
    white-space: nowrap;
    color: #667085;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
  }
  .gpt-tab svg { flex: 0 0 16px; width: 16px; height: 16px; display: block; }
  .gpt-tab.is-active { color: #0088BF; border-bottom-color: #0088BF; }
}
@media (max-width: 900px) {
  .gogox-price-steps { gap: 10px 14px; }
  .gpx-step-line { display: none; }
}
/* Tighten the vehicle-cards section — drop its 60px top/bottom padding so the
   cards sit close to the step nav above and the fee tables below. */
.elementor-element-priceveh1 .gogox-vehicles {
  /* No extra clearance: the heading→content gap then matches the other sections
     (16px). The vehicle images overhang the card by 60px, but their artwork has
     ~35px of transparent headroom, so the visible vehicle still clears the
     heading. */
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
/* Step nav is clickable — each pill anchors to its section. Smooth-scroll with
   a header-height offset so the target sits below the sticky nav. */
html { scroll-behavior: smooth; }
a.gpx-step { text-decoration: none; color: #475467; cursor: pointer; transition: color .15s; }
a.gpx-step:hover { color: #0088BF; }
a.gpx-step:hover .gpx-step-num { background: #006A95; }
#ggx-sec1, #ggx-sec2, #ggx-sec3, #ggx-sec4 { scroll-margin-top: 96px; }
/* Close the gap under the vehicle cards: the fee-table widget carried 24px top
   padding + the first heading carried a 48px top margin. Trim both so the first
   fee section sits close beneath the cards; also lighten the cards' base. */
.elementor-element-pricetbl1 { padding-top: 0 !important; }
.elementor-element-priceveh1 .gogox-vehicle-card { padding-bottom: 28px; }
/* Keep the left label column visible while the fee columns swipe horizontally
   — the item/location description stays pinned so you always know the row. */
.elementor-element-pricetbl1 .gogox-pricing-table thead th:first-child,
.elementor-element-pricetbl1 .gogox-pricing-table tbody td:first-child {
  position: sticky;
  left: 0;
  z-index: 2;
  border-right: 1px solid #EAECEF;
}
.elementor-element-pricetbl1 .gogox-pricing-table thead th:first-child { background: #0088BF; }
.elementor-element-pricetbl1 .gogox-pricing-table tbody td:first-child { background: #FFFFFF; }
.elementor-element-pricetbl1 .gogox-pricing-table tbody tr:nth-of-type(even) td:first-child { background: #F2F5F7; }
/* Tighten the label column so the divider sits closer to short labels
   (e.g. tunnel names); long labels still wrap within this width. */
.elementor-element-pricetbl1 .gogox-pricing-table thead th:first-child,
.elementor-element-pricetbl1 .gogox-pricing-table tbody td:first-child { width: 32%; }
/* SG's detailed-pricing tables use <th scope="row"> for the row labels (HK uses
   <td>), so mirror the whole first-column treatment onto those th cells: pinned
   while the data columns swipe, white/zebra background, left aligned, 32% wide.
   The colspan category/info rows are <td>, so this never touches them. */
.elementor-element-pricetbl1 .gogox-pricing-table tbody th:first-child {
  position: sticky;
  left: 0;
  z-index: 2;
  border-right: 1px solid #EAECEF;
  background: #FFFFFF;
  width: 32%;
  text-align: left;
  font-weight: 500;
}
.elementor-element-pricetbl1 .gogox-pricing-table tbody tr:nth-of-type(even) th:first-child {
  background: #F2F5F7;
}
/* The three vehicle columns share the remaining width equally. Left to auto
   layout they sized to their headings, so 貨Van came out ~75px narrower than
   5.5噸貨車 in the tunnel table. Fixed layout honours the percentages exactly. */
.elementor-element-pricetbl1 .gogox-pricing-table:not(.gogox-pricing-table--fit) { table-layout: fixed; }
.elementor-element-pricetbl1 .gogox-pricing-table:not(.gogox-pricing-table--fit) thead th:not(:first-child),
.elementor-element-pricetbl1 .gogox-pricing-table:not(.gogox-pricing-table--fit) tbody td:not(:first-child) { width: 22.66%; }
/* Responsive line break inside labels: inline on desktop, own line on mobile. */
.elementor-element-pricetbl1 .ggx-nl { display: inline; }
@media (max-width: 768px) {
  .elementor-element-pricetbl1 .ggx-nl { display: block; }
}

/* ── Singapore /sg/pricing/ (reuses the HK pricehd1/pricestep1/pricevhead1/
   pricetbl1 element ids to inherit ALL the HK table styling). Two SG-only
   deltas: (1) the widgets need the 1200 max-width that HK gets from its own
   per-page Elementor width setting; (2) on mobile the wide detailed tables
   SWIPE horizontally inside their scroll card instead of shrinking to fit. */
body.gogox-region-sg .elementor-element-pricehd1,
body.gogox-region-sg .elementor-element-pricestep1,
body.gogox-region-sg .elementor-element-pricevhead1,
body.gogox-region-sg .elementor-element-pricetbl1 {
  max-width: 1200px;
  margin-left: auto;
  margin-right: auto;
}
/* Two detailed-pricing tables sit under ONE heading (HK never stacks two tables
   without an h3 between), so add a gap between their cards. */
body.gogox-region-sg .elementor-element-pricetbl1 .gogox-pricing-table-wrap + .gogox-pricing-table-wrap {
  margin-top: 24px;
}
/* Align the "1 Vehicles" heading with "2 Detailed Pricing" / "3 Additional Fees":
   the table section carries 24px inner padding but the Vehicles heading widget
   doesn't, so its number badge sat 24px to the left. */
body.gogox-region-sg .elementor-element-pricevhead1 { padding-left: 24px; }
@media (max-width: 768px) {
  body.gogox-region-sg .elementor-element-pricevhead1 { padding-left: 16px; }
}
/* SG's kit-3 lacks the kit-4 main padding that lets HK's 48px title padding clear
   the fixed header, so the title block takes the extra top clearance itself. */
body.gogox-region-sg .elementor-element-pricehd1 { padding-top: 80px; }
@media (max-width: 768px) {
  /* SG's row labels are <th scope=row> (HK uses <td>); match HK's mobile first-
     column width so every table fits the viewport exactly like HK — no swipe. */
  .elementor-element-pricetbl1 .gogox-pricing-table tbody th:first-child { width: 34%; }
}

/* SG vehicle cards used to need a size override: the old SG artwork was a set of
   cartoon illustrations with wildly different native sizes (the motorcycle was 3×
   the sedan), so the image area was pinned to a fixed 96px box with 66px images.
   SG now uses the same uniform vehicle photos as the SG homepage / HK pricing
   (all 576×252), so the override is gone and SG inherits the shared
   `.gogox-vehicle-card-img` rules — i.e. it renders exactly like HK. */

/* Numbered section-header badges (like the comp): a blue circle before each
   section title, numbered to match the step nav (1 vehicles … 4 parking). */
.elementor-element-pricetbl1 h3[id^="ggx-sec"],
.gpx-vsec-head {
  display: flex !important;
  align-items: center;
  gap: 12px;
}
.elementor-element-pricetbl1 h3[id^="ggx-sec"]::before,
.gpx-vsec-head::before {
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: #0088BF;
  color: #FFFFFF;
  font-size: 15px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.gpx-vsec-head::before { content: "1"; }
#ggx-sec2::before { content: "2"; }
#ggx-sec3::before { content: "3"; }
#ggx-sec4::before { content: "4"; }
/* the added "select vehicle" heading matches the fee-section headings */
.gpx-vsec-head {
  font-size: 22px;
  font-weight: 700;
  color: #00121A;
  margin: 48px auto 16px;   /* match the fee-section headings (48 top / 16 bottom) */
  max-width: 1200px;
  padding: 0 24px;
  box-sizing: border-box;
}
/* Align every pricing section to one 1200px centred box (the fee table already
   uses this) so cards, headings and tables share the same left edge + width. */
.elementor-element-priceveh1 .gogox-vehicles {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* Matches the fee tables below: the table widget is a 1200px box with 24px of
   side padding, so its table card renders 1152px wide starting 24px in. The 24px
   here puts the vehicle row on exactly the same left and right edge — measured,
   not eyeballed (both land on x=57 … 1209). */
.elementor-element-priceveh1 .gogox-vehicles-inner {
  max-width: 1200px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  padding-left: 24px !important;
  padding-right: 24px !important;
  box-sizing: border-box;
}
/* All four vehicle images now use the homepage matched set (motorcycle/van/
   5.5t/9t), so they render at a consistent size — no per-card cap needed. */
/* Smaller spec-row type in the pricing vehicle cards for a tighter, cleaner look. */
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row {
  font-size: 15px !important;
  line-height: 22px !important;
  align-items: center;   /* label centred against multi-line values */
}
/* Label column narrows once the TC label carries its own <br> (車廂<br>尺寸),
   giving the multi-line spec value more width. */
.elementor-element-priceveh1 .gogox-vehicle-card-spec-row dt { flex-basis: 74px; }
.gogox-region-hktc .elementor-element-priceveh1 .gogox-vehicle-card-spec-row dt { flex-basis: 44px; }
/* Footnote / disclaimer links use the standard embedded-link blue. */
.elementor-element-pricetbl1 .gogox-pricing-footnote a,
.elementor-element-pricetbl1 .gogox-pricing-disclaimer a {
  color: #0088BF;
  text-decoration: none;
}
.elementor-element-pricetbl1 .gogox-pricing-footnote a:hover,
.elementor-element-pricetbl1 .gogox-pricing-disclaimer a:hover { text-decoration: underline; }
.elementor-element-priceveh1 .gogox-vehicle-card-features li { font-size: 13px; }

/* ==========================================================================
   EDITING-PROOF TABLE STYLING  (pricing / compensation / bad-weather)
   --------------------------------------------------------------------------
   Marketing edits these tables in Elementor and may ADD ROWS or retype cells.
   Elementor's Visual (TinyMCE) tab can silently strip classes off <table> and
   <span>, which would drop all styling and the mobile behaviour. So every rule
   below is ALSO bound to the Elementor element-id wrapper — content editing
   cannot remove that. Net effect: any <tr>/<td> a marketer adds inside these
   widgets inherits the correct styling automatically, class or no class.
   Keep these in step with the class-based rules earlier in this file.
   ========================================================================== */

/* ---- fee tables (pricing page: pricetbl1) ---- */
.elementor-element-pricetbl1 table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 15px;
  min-width: 560px;
}
.elementor-element-pricetbl1 table thead th {
  background: #0088BF;
  color: #FFFFFF;
  font-weight: 600;
  border-bottom: 1px solid #0088BF;
  padding: 12px 18px;
  text-align: center;
}
.elementor-element-pricetbl1 table tbody td,
.elementor-element-pricetbl1 table tbody th {
  padding: 10px 18px;
  border-bottom: 1px solid #F0F2F5;
  vertical-align: middle;
}
.elementor-element-pricetbl1 table tbody tr:last-child td,
.elementor-element-pricetbl1 table tbody tr:last-child th { border-bottom: 0; }
.elementor-element-pricetbl1 table tbody td { text-align: center; color: #00121A; }
.elementor-element-pricetbl1 table tbody td:first-child { text-align: left; font-weight: 500; }
.elementor-element-pricetbl1 table tbody tr:nth-of-type(even) td { background: #F2F5F7; }
/* a table pasted WITHOUT the wrapper div still reads as a card */
.elementor-element-pricetbl1 > .elementor-widget-container > table {
  border: 1px solid #E6E9ED;
  border-radius: 16px;
  overflow: hidden;
}

/* ---- compensation + bad-weather tables (comptable1 / bwfee1) ---- */
.elementor-element-comptable1 table,
.elementor-element-bwfee1 table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 15px;
  min-width: 640px;
}
.elementor-element-comptable1 table th,
.elementor-element-bwfee1 table th {
  background: #0088BF;
  color: #FFFFFF;
  font-weight: 600;
  border-bottom: 1px solid #0088BF;
  padding: 12px 18px;
  text-align: left;
}
.elementor-element-comptable1 table td,
.elementor-element-bwfee1 table td {
  padding: 10px 18px;
  border: 0;
  border-bottom: 1px solid #F0F2F5;
  color: #00121A;
  vertical-align: middle;
}
.elementor-element-comptable1 table tbody tr:last-child td,
.elementor-element-bwfee1 table tbody tr:last-child td { border-bottom: 0; }
.elementor-element-comptable1 table tbody tr:nth-of-type(even) td,
.elementor-element-bwfee1 table tbody tr:nth-of-type(even) td { background: #F2F5F7; }
.elementor-element-comptable1 > .elementor-widget-container > table,
.elementor-element-bwfee1 > .elementor-widget-container > table {
  border: 1px solid #E6E9ED;
  border-radius: 16px;
  overflow: hidden;
}

/* ---- phones: every one of these tables still fits in one view ---- */
@media (max-width: 768px) {
  .elementor-element-pricetbl1 table,
  .elementor-element-comptable1 table,
  .elementor-element-bwfee1 table {
    min-width: 0 !important;
    width: 100% !important;
    table-layout: fixed;
  }
  .elementor-element-pricetbl1 table thead th {
    padding: 9px 6px !important;
    font-size: 14px !important;
    line-height: 19px !important;
    white-space: normal !important;
  }
  .elementor-element-pricetbl1 table tbody td,
  .elementor-element-pricetbl1 table tbody th {
    padding: 8px 6px !important;
    font-size: 12.5px !important;
    line-height: 18px !important;
  }
  .elementor-element-comptable1 table th,
  .elementor-element-bwfee1 table th {
    white-space: normal !important;
    padding: 8px 5px !important;
    font-size: 12.5px !important;
    line-height: 17px !important;
  }
  .elementor-element-comptable1 table td,
  .elementor-element-bwfee1 table td {
    padding: 7px 5px !important;
    font-size: 11.5px !important;
    line-height: 16px !important;
    word-break: normal;
    overflow-wrap: normal;
  }
}

/* ==========================================================================
   BREATHING ROOM ABOVE THE FOOTER
   --------------------------------------------------------------------------
   Pages whose last section is ordinary boxed content used to sit only ~16px
   above the black footer band (main carries no bottom padding). That got worse
   once the promo banner / CTA bands were removed from the HK pages, since those
   full-bleed bands had been doing the spacing.
   Full-bleed enders (CTA band, promo banner, e-con-full) are MEANT to butt
   against the footer, so they are excluded rather than pushed away from it.

   The exclusion list is the load-bearing part of this rule. Anything full-bleed
   that can end a page has to be listed, or it renders a white strip between
   itself and the black footer:
     gogox_funnel  — the grey "download the app" QR band (HK EN + TC homepages)
     gogox_hero    — a hero reused as a closing CTA band (KR /business/)
   Boxed enders (contact forms, text-editor, process steps, FAQ) are the case
   this rule exists for and must NOT be added here.
   The trailing :not(:has(.elementor-widget-gogox_cta_band)) also covers the
   VAS pages (pet / premium van / travel) where the closing cta_band is wrapped
   in a plain container — the widget-class :not() above can't see it, so the
   :has() excludes the wrapper too (otherwise a 72px white strip appears). */
   /* ========================================================================= */
main > .elementor > .elementor-element:last-child:not(.e-con-full):not(.elementor-widget-gogox_cta_band):not(.elementor-widget-gogox_promo_banner):not(.elementor-widget-gogox_heading_band):not(.elementor-widget-gogox_funnel):not(.elementor-widget-gogox_hero):not(:has(.elementor-widget-gogox_cta_band)) {
  margin-bottom: 72px;
}
@media (max-width: 768px) {
  main > .elementor > .elementor-element:last-child:not(.e-con-full):not(.elementor-widget-gogox_cta_band):not(.elementor-widget-gogox_promo_banner):not(.elementor-widget-gogox_heading_band):not(.elementor-widget-gogox_funnel):not(.elementor-widget-gogox_hero):not(:has(.elementor-widget-gogox_cta_band)) {
    margin-bottom: 48px;
  }
}

/* Bad-weather table column split on phones: the service column only holds
   "GoGoVan" / "GoGoVan 速遞服務", so equal thirds wasted its width while the
   arrangements column (much longer text) was cramped. Divider moves left. */
@media (max-width: 768px) {
  .elementor-element-bwfee1 .gogox-comp-table thead th:nth-child(1),
  .elementor-element-bwfee1 table thead th:nth-child(1) { width: 22%; }
  .elementor-element-bwfee1 .gogox-comp-table thead th:nth-child(2),
  .elementor-element-bwfee1 table thead th:nth-child(2) { width: 30%; }
  .elementor-element-bwfee1 .gogox-comp-table thead th:nth-child(3),
  .elementor-element-bwfee1 table thead th:nth-child(3) { width: 48%; }
}

/* ==========================================================================
   VALUE-PROPS STACK — "story" layout (layout_story switch)
   --------------------------------------------------------------------------
   The About Us origin section. Reuses the widget's existing fields rather than
   adding parallel ones: `heading` becomes a small blue eyebrow with a rule under
   it, and `intro` — unused on these sections until now — becomes the large
   headline. Only the credit caption needed new storage.

   Bound to the class the switch sets, not to the About Us element ids, because
   this widget also draws Who We Are / Why GoGoX on the same pages and the
   homepage's "reliable logistics partner" section.

   Shorter than the default stack: the section padding and the gap between
   paragraphs both come in, which is the "矮點" part of the ask. Colours are
   unchanged — the eyebrow picks up the existing brand blue and the body keeps
   its current tone.
   ========================================================================== */
.gogox-vstack--story .gogox-vstack-inner { align-items: center; }
.gogox-vstack--story { padding-top: 56px !important; padding-bottom: 56px !important; }
/* Story sections inherit the default value-props "with-illustration" sizing —
   a 560px min-height on the inner and 80px top/bottom padding on the text
   column — which left the shorter story/purpose bands floating in a tall box
   with big empty gaps above and below the copy. The story owns its own 56px
   section padding, so drop the inherited min-height and the vertical content
   padding: the band now hugs its content (image or text, whichever is taller)
   with an even, tighter rhythm. */
.gogox-vstack--story .gogox-vstack-inner { min-height: 0 !important; }
/* No inherited 80px/64px content padding — the story text sat far from the
   left edge of its column ("too much space to the left"). The inner flex gap
   already separates the text from the image, so zero the content padding and
   let the copy start at the column edge. */
.gogox-vstack--story .gogox-vstack-content { padding: 0 !important; }

.gogox-vstack--story .gogox-vstack-heading {
  font-size: 15px !important;
  font-weight: 700 !important;
  line-height: 1.3 !important;
  color: #0088BF !important;
  margin: 0 0 10px !important;
  padding-bottom: 12px;
  position: relative;
}
.gogox-vstack--story .gogox-vstack-heading::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  width: 34px; height: 3px;
  background: #0088BF;
  border-radius: 2px;
}
/* `intro` is the headline in this layout. */
.gogox-vstack--story .gogox-vstack-intro {
  font-size: clamp(26px, 2.6vw, 38px) !important;
  line-height: 1.25 !important;
  font-weight: 700 !important;
  color: #0B1F33 !important;
  margin: 0 0 20px !important;
}
.gogox-vstack--story .gogox-vstack-items { display: block; }
.gogox-vstack--story .gogox-vstack-item { margin: 0; }
.gogox-vstack--story .gogox-vstack-item-desc {
  font-size: 15px !important;
  line-height: 1.75 !important;
  margin: 0 !important;
}
.gogox-vstack--story .gogox-vstack-illustration {
  border-radius: 18px !important;
  width: 100% !important;
  height: auto !important;
  display: block;
}
/* Credit caption: icon, hairline, then label over names. */
.gogox-vstack--story .gogox-vstack-credit {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 26px;
}
.gogox-vstack--story .gogox-vstack-credit-icon {
  flex: 0 0 26px;
  color: #0088BF;
}
.gogox-vstack--story .gogox-vstack-credit-icon svg { width: 26px; height: 26px; display: block; }
.gogox-vstack--story .gogox-vstack-credit-text {
  display: block;
  padding-left: 14px;
  border-left: 1px solid #D7DEE5;
  font-size: 14px;
  line-height: 1.6;
}
.gogox-vstack--story .gogox-vstack-credit-label { display: block; font-weight: 600; }
.gogox-vstack--story .gogox-vstack-credit-names { display: block; }

@media (max-width: 768px) {
  .gogox-vstack--story { padding-top: 40px !important; padding-bottom: 40px !important; }
  .gogox-vstack--story .gogox-vstack-intro { margin-bottom: 16px !important; }
  .gogox-vstack--story .gogox-vstack-credit { margin-top: 20px; }
}

/* Story layout — size the image down and fix the eyebrow on the blue theme.
   Two problems the first pass created: the illustration rendered at its natural
   width and filled roughly half the viewport, taking the section to ~825px tall
   when the brief asked for shorter; and the eyebrow was coloured #0088BF, which
   is invisible on these sections because their own theme background is brand
   blue. On the blue theme the eyebrow and its rule go yellow. */
.gogox-vstack--story .gogox-vstack-inner {
  /* Generous breathing room between the image and the copy. */
  gap: clamp(64px, 7vw, 120px);
}
.gogox-vstack--story .gogox-vstack-image {
  /* 42%. 38% left the photo too small, 48% squeezed the headline onto four
     lines — this sits between the two: the image stays clearly bigger than it
     started and the text column regains the width it needs to breathe. The gap
     also comes in, which buys the text back another 20-odd pixels. */
  flex: 0 0 42% !important;
  max-width: 42% !important;
}
.gogox-vstack--story .gogox-vstack-illustration {
  max-height: 360px !important;
  object-fit: cover !important;
  object-position: center center !important;
}
.gogox-vstack--story .gogox-vstack-content { flex: 1 1 auto !important; min-width: 0; }
/* Eyebrow contrast per theme. */
.gogox-vstack--story.gogox-vstack--theme-brand-blue .gogox-vstack-heading { color: #FFDD00 !important; }
.gogox-vstack--story.gogox-vstack--theme-brand-blue .gogox-vstack-heading::after { background: #FFDD00; }
.gogox-vstack--story.gogox-vstack--theme-brand-blue .gogox-vstack-intro { color: #FFFFFF !important; }
.gogox-vstack--story.gogox-vstack--theme-brand-blue .gogox-vstack-credit-text { border-left-color: rgba(255,255,255,0.35); }
.gogox-vstack--story.gogox-vstack--theme-brand-blue .gogox-vstack-credit-icon { color: #FFDD00; }

@media (max-width: 768px) {
  .gogox-vstack--story .gogox-vstack-image {
    flex: 0 0 100% !important;
    max-width: 100% !important;
  }
  .gogox-vstack--story .gogox-vstack-illustration { max-height: 240px !important; }
  /* On phones the story stacks (image on top, text below). The text column
     inherited 64px side padding from the default with-illustration layout,
     which indented the copy away from the full-width image and read as a
     "weird" misaligned text box. Zero it so the text lines up with the image. */
  .gogox-vstack--story .gogox-vstack-content {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
}

/* Story layout — final proportions. Height comes down roughly 40% from the
   825px the first pass produced: image capped at 300px, section padding at 40px
   and the paragraph rhythm tightened. The reference has a light background, so
   the eyebrow returns to brand blue as originally designed and the brand-blue
   overrides above only apply if a section is ever switched back to that theme. */
.gogox-vstack--story { padding-top: 40px !important; padding-bottom: 40px !important; }
.gogox-vstack--story .gogox-vstack-illustration { max-height: 300px !important; }
.gogox-vstack--story .gogox-vstack-intro { margin-bottom: 16px !important; }
.gogox-vstack--story .gogox-vstack-item-desc { line-height: 1.7 !important; }
.gogox-vstack--story .gogox-vstack-credit { margin-top: 18px; }
@media (max-width: 768px) {
  .gogox-vstack--story { padding-top: 28px !important; padding-bottom: 28px !important; }
  .gogox-vstack--story .gogox-vstack-illustration { max-height: 200px !important; }
}

/* Founders photo must show in full — never cropped. The height-reduction pass
   had capped it at 300px with object-fit: cover, which cut the heads and feet off
   a nearly-square group shot. The image now sizes to its own aspect inside the
   column, so all four founders stay in frame. Where "show the whole photo" and
   "make the section shorter" pull against each other, the photo wins; the section
   still saves height through its padding and text rhythm. */
.gogox-vstack--story .gogox-vstack-illustration {
  max-height: none !important;
  height: auto !important;
  object-fit: contain !important;
}
@media (max-width: 768px) {
  .gogox-vstack--story .gogox-vstack-illustration { max-height: none !important; }
}

/* Story image window — for image-LEFT story bands (宗旨), give the photo a fixed
   3:2 window (cover) so it reads as a consistent card rather than sizing to its
   own aspect. Higher specificity + !important beats the general "never crop"
   founders rule above, which stays in force for the image-RIGHT 起點 band. */
.gogox-vstack--story.gogox-vstack--image-left .gogox-vstack-illustration {
  width: 100% !important;
  aspect-ratio: 3 / 2 !important;
  height: auto !important;
  max-height: none !important;
  object-fit: cover !important;
  object-position: center center !important;
}

/* Value-props stack — constrain to the site content width. Its inner wrapper
   carried max-width:none and no side padding, so every one of these sections ran
   the full viewport with the body text hard against both edges, while the FAQ
   (880), heading band (960), icon-text-grid (1200) and stat band (1200) around
   them all stop short. Applied to the widget rather than just the story layout,
   because Why GoGoX / Who We Are sit on the same pages and had the same problem.
   1200 matches the icon-text-grid and stat band directly above and below. */
.gogox-vstack-inner {
  max-width: 1200px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  padding-left: 24px !important;
  padding-right: 24px !important;
}


/* ==========================================================================
   GoGoX Journey Timeline — `gogox_journey_timeline` widget.

   Two-column band: image on one side, and on the other a yellow-ruled eyebrow
   + heading followed by a horizontal row of milestones. Each milestone is a
   circular icon on a light plate, joined to its neighbour by a connector line
   that runs between the two plate centres, with a blue title and body under it.

   All colours come in as custom properties set inline by the widget (the
   fallbacks below are the shipped defaults, so the CSS still reads correctly
   if a control is cleared). Layout width matches .gogox-vstack-inner (1200).
   ========================================================================== */
.gogox-journey {
  --gogox-journey-plate: #E4F2F9;
  --gogox-journey-icon: #0088BF;
  --gogox-journey-line: #CFE7F3;
  --gogox-journey-node-title: #0088BF;
  --gogox-journey-node-text: #4A4A4A;
  --gogox-journey-eyebrow: #0088BF;
  --gogox-journey-eyebrow-bar: #FFDD00;
  --gogox-journey-heading: #1A1A1A;
  --gogox-journey-plate-size: 64px;
  padding: 56px 0;
}
.gogox-journey-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
  display: flex;
  align-items: center;
  gap: 48px;
}
.gogox-journey--image-right .gogox-journey-inner { flex-direction: row-reverse; }

.gogox-journey-media {
  flex: 0 0 48%;
  max-width: 48%;
}
/* Wide 2:1 frame matching the van GIF so the whole animation shows (no square
   crop); the milestone text is squeezed a little to give the visual the room. */
.gogox-journey-image {
  aspect-ratio: 1150 / 580;
  object-fit: cover;
}
.gogox-journey--no-image .gogox-journey-inner { display: block; }

/* Utility: fully hide an element (kept in the DB, just not rendered). Used to
   hide the About "了解我們的宗旨 / Read our full mission statement" accordion,
   which is redundant now that the 宗旨 / Our purpose band is on the page. */
.gogox-hidden { display: none !important; }
.gogox-journey-image {
  display: block;
  width: 100%;
  height: auto;
}
.gogox-journey--rounded .gogox-journey-image { border-radius: 16px; }

.gogox-journey-content {
  flex: 1 1 auto;
  min-width: 0;
}

/* Eyebrow — small line of text with a yellow vertical bar on its left. */
/* Eyebrow synced to the value-props story format — small blue label with a
   short bottom rule (not a left bar), so 我們的起點 / 宗旨 / GoGoX 的旅程 all
   read as the same kind of section title. */
.gogox-journey-eyebrow {
  position: relative;
  margin: 0 0 12px;
  padding: 0 0 12px;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 0.04em;
  color: var(--gogox-journey-eyebrow);
}
.gogox-journey-eyebrow::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 34px;
  height: 3px;
  border-radius: 2px;
  /* Blue rule to match the story eyebrows on a light background (宗旨 etc.),
     not the yellow bar — keeps every section title the same colour. */
  background: var(--gogox-journey-eyebrow);
}
.gogox-journey-heading {
  margin: 0 0 16px;
  font-size: 38px;
  line-height: 1.25;
  font-weight: 700;
  color: var(--gogox-journey-heading);
}
.gogox-journey-intro {
  margin: 0 0 8px;
  font-size: 17px;
  line-height: 1.7;
  color: var(--gogox-journey-node-text);
}

/* Milestones — equal-width columns so the connector maths below holds. */
.gogox-journey-nodes {
  list-style: none;
  margin: 32px 0 0;
  padding: 0;
  display: flex;
  align-items: flex-start;
  gap: 24px;
}
.gogox-journey-node {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  text-align: left;
}
/* Connector: from the right edge of this plate to the left edge of the next
   one. The plate sits at the node's left edge, not its centre, so the line
   starts at the plate width and ends 12px short of the next node's box — half
   the 24px flex gap, which leaves matching clearance at both ends. */
.gogox-journey-node:not(:last-child)::after {
  content: "";
  position: absolute;
  top: calc(var(--gogox-journey-plate-size) / 2 - 1px);
  left: calc(var(--gogox-journey-plate-size) + 12px);
  right: -12px;
  height: 2px;
  background: var(--gogox-journey-line);
}
.gogox-journey-node-plate {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--gogox-journey-plate-size);
  height: var(--gogox-journey-plate-size);
  border-radius: 50%;
  background: var(--gogox-journey-plate);
  color: var(--gogox-journey-icon);
}
.gogox-journey-node-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: calc(var(--gogox-journey-plate-size) * 0.42);
  line-height: 1;
  color: var(--gogox-journey-icon);
}
.gogox-journey-node-icon svg {
  width: calc(var(--gogox-journey-plate-size) * 0.42);
  height: calc(var(--gogox-journey-plate-size) * 0.42);
  fill: currentColor;
}
.gogox-journey-node-img {
  width: calc(var(--gogox-journey-plate-size) * 0.5);
  height: calc(var(--gogox-journey-plate-size) * 0.5);
  object-fit: contain;
}
.gogox-journey-node-title {
  margin: 16px 0 8px;
  font-size: 22px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--gogox-journey-node-title);
}
.gogox-journey-node-text {
  margin: 0;
  font-size: 15px;
  line-height: 1.7;
  color: var(--gogox-journey-node-text);
}

/* Tablet — keep the row but tighten it. */
@media (max-width: 1024px) {
  .gogox-journey-inner { gap: 32px; }
  .gogox-journey-heading { font-size: 32px; }
  .gogox-journey-nodes { gap: 16px; }
  .gogox-journey-node:not(:last-child)::after {
    left: calc(var(--gogox-journey-plate-size) + 8px);
    right: -8px;
  }
}

/* Mobile — image on top, and the timeline turns vertical: plate in a left
   column with the title + body beside it, connector running down the plates. */
@media (max-width: 767px) {
  .gogox-journey { padding: 40px 0; }
  .gogox-journey-inner,
  .gogox-journey--image-right .gogox-journey-inner {
    flex-direction: column;
    align-items: stretch;
    gap: 24px;
  }
  .gogox-journey-media { flex: 0 0 auto; max-width: 100%; }
  .gogox-journey-heading { font-size: 26px; }
  .gogox-journey-nodes {
    flex-direction: column;
    /* align-items:flex-start from the desktop rule sizes each node to its
       content once the flex axis turns vertical, which pushes the body copy
       past the viewport. Stretch puts them back on the container width. */
    align-items: stretch;
    gap: 0;
    margin-top: 24px;
  }
  .gogox-journey-node {
    display: grid;
    grid-template-columns: var(--gogox-journey-plate-size) 1fr;
    column-gap: 16px;
    padding-bottom: 28px;
  }
  .gogox-journey-node:last-child { padding-bottom: 0; }
  .gogox-journey-node-plate { grid-column: 1; grid-row: 1 / span 2; }
  .gogox-journey-node-title { grid-column: 2; grid-row: 1; margin-top: 0; min-width: 0; }
  .gogox-journey-node-text  { grid-column: 2; grid-row: 2; min-width: 0; }
  .gogox-journey-node:not(:last-child)::after {
    top: calc(var(--gogox-journey-plate-size) + 8px);
    bottom: 8px;
    left: calc(var(--gogox-journey-plate-size) / 2 - 1px);
    right: auto;
    width: 2px;
    height: auto;
  }
}

/* ==========================================================================
   Icon-Text-Grid — Value Cards mode (`display_mode: value_cards`).
   A row of cards, each a photo with a round badge icon overlapping its lower
   edge, then a bold English title, the Chinese title, and a description.
   Built for the About Us 我們的核心價值 section. Class-scoped, no ids.
   ========================================================================== */
/* The 憑藉… heading band directly above is the section title, so pull the cards
   up close to it — trim the grid's own default 72px section padding on top. */
.gogox-itg--value-cards { padding-top: 8px !important; }
/* 我們的核心價值 header — left-aligned small blue eyebrow + short rule + a
   description paragraph, matching the 宗旨 / 我們的起點 section titles. */
.gogox-itg--value-cards .gogox-itg-inner { text-align: left; }
.gogox-itg--value-cards .gogox-itg-heading {
  position: relative;
  display: inline-block;
  margin: 0 0 12px !important;
  padding-bottom: 12px !important;
  font-size: 15px !important;
  font-weight: 700 !important;
  line-height: 1.3 !important;
  letter-spacing: 0.04em;
  color: #0088BF !important;
}
.gogox-itg--value-cards .gogox-itg-heading::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 34px;
  height: 3px;
  border-radius: 2px;
  background: #0088BF;
}
.gogox-itg--value-cards .gogox-itg-intro {
  margin: 0 !important;
  max-width: 760px;
  font-size: 15px !important;
  line-height: 1.7 !important;
  color: #667085 !important;
}
.gogox-itg--value-cards .gogox-itg-vc-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 20px;
  margin-top: 16px;
}
.gogox-itg--value-cards .gogox-itg-vc {
  position: relative;
  display: flex;
  flex-direction: column;
  background: #FFFFFF;
  border: 1px solid #E3E7EC;
  border-radius: 14px;
  box-shadow: 0 4px 18px rgba(11, 31, 51, 0.06);
}
.gogox-itg--value-cards .gogox-itg-vc-media {
  position: relative;               /* badge is positioned against this; not clipped */
  margin-bottom: 0;
}
.gogox-itg--value-cards .gogox-itg-vc-photo {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
  border-radius: 14px 14px 0 0;
}
.gogox-itg--value-cards .gogox-itg-vc-badge {
  position: absolute;
  left: 50%;
  bottom: -26px;
  transform: translateX(-50%);
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: #FFDD00;
  color: #0B1F33;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 10px rgba(11, 31, 51, 0.20);
  z-index: 2;
}
.gogox-itg--value-cards .gogox-itg-vc-badge svg {
  width: 26px;
  height: 26px;
  fill: currentColor;
}
.gogox-itg--value-cards .gogox-itg-vc-body {
  padding: 42px 18px 26px;          /* top clears the overlapping badge */
  text-align: center;
}
.gogox-itg--value-cards .gogox-itg-vc-en {
  margin: 0 0 14px;
  font-size: 17px;
  font-weight: 700;
  line-height: 1.3;
  color: #0B1F33;
}
.gogox-itg--value-cards .gogox-itg-vc-tc {
  margin: 0 0 12px;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.3;
  color: #0B1F33;
}
.gogox-itg--value-cards .gogox-itg-vc-desc {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.75;
  color: #667085;
}
@media (max-width: 1024px) {
  .gogox-itg--value-cards .gogox-itg-vc-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 700px) {
  /* Phones: a left-to-right swipe rail, one card at a time (not a 2-col grid). */
  .gogox-itg--value-cards .gogox-itg-vc-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 14px;
    margin-top: 16px;
    padding-bottom: 6px;
    scrollbar-width: none;
  }
  .gogox-itg--value-cards .gogox-itg-vc-grid::-webkit-scrollbar { display: none; }
  .gogox-itg--value-cards .gogox-itg-vc {
    flex: 0 0 74vw;
    max-width: 300px;
    scroll-snap-align: center;
  }
  .gogox-itg--value-cards .gogox-itg-vc-body { padding: 40px 16px 22px; }
  .gogox-itg--value-cards .gogox-itg-vc-badge { width: 48px; height: 48px; bottom: -24px; }
  .gogox-itg--value-cards .gogox-itg-vc-badge svg { width: 24px; height: 24px; }
}

/* Value-props CTA as a text button (used when it opens a modal instead of a link) */
/* 查看全文 — identical to the homepage primary button (gogox-btn-primary). */
.gogox-vstack-cta-btn {
  appearance: none;
  cursor: pointer;
  font-family: "proxima-nova", sans-serif;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #0088BF;
  color: #FFFFFF;
  font-weight: 700;
  font-size: 16px;
  line-height: 16px;
  min-height: 48px;
  padding: 0 28px;
  border: 2px solid #0088BF;
  border-radius: 999px;
  transition: all 0.2s ease;
}
.gogox-vstack-cta-btn:hover { background: #0F2C59; border-color: #0F2C59; }

/* Read-more / mission modal (triggered from a value-props CTA). */
.gogox-modal {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.gogox-modal[hidden] { display: none; }
.gogox-modal-overlay {
  position: absolute;
  inset: 0;
  background: rgba(11, 31, 51, 0.55);
}
.gogox-modal-panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  max-height: 85vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;            /* clip the scroll to the rounded corners */
  background: #FFFFFF;
  border-radius: 16px;
  box-shadow: 0 24px 60px rgba(11, 31, 51, 0.28);
}
.gogox-modal-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: #F2F4F7;
  color: #0B1F33;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
}
.gogox-modal-close:hover { background: #E3E7EC; }
.gogox-modal-body {
  overflow-y: auto;
  padding: 52px clamp(24px, 4vw, 56px) 44px;   /* top clears the close button */
  color: #33475B;
  font-size: 15px;
  line-height: 1.8;
  scrollbar-width: thin;
  scrollbar-color: #CBD5E1 transparent;
}
.gogox-modal-body::-webkit-scrollbar { width: 8px; }
.gogox-modal-body::-webkit-scrollbar-thumb { background: #CBD5E1; border-radius: 999px; }
.gogox-modal-body::-webkit-scrollbar-track { background: transparent; }
.gogox-modal-body p { margin: 0 0 14px; }
.gogox-modal-body p:last-child { margin-bottom: 0; }

/* 展望未來 closing CTA — give its image the same fixed 3:2 window as 宗旨
   (scoped class so it can crop-to-fill without touching the founders rule). */
.gogox-cta-band .gogox-vstack-illustration {
  width: 100% !important;
  aspect-ratio: 3 / 2 !important;
  height: auto !important;
  max-height: none !important;
  object-fit: cover !important;
  object-position: center center !important;
}

/* 展望未來 closing CTA — render 探索網誌 as the standard pill button. */
.gogox-cta-band .gogox-vstack-cta { margin-top: 8px; }
.gogox-cta-band .gogox-vstack-cta a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #0088BF;
  color: #FFFFFF !important;
  font-weight: 700;
  font-size: 16px;
  line-height: 16px;
  min-height: 48px;
  padding: 0 28px;
  border: 2px solid #0088BF;
  border-radius: 999px;
  text-decoration: none;
  transition: all 0.2s ease;
}
.gogox-cta-band .gogox-vstack-cta a:hover { background: #0F2C59; border-color: #0F2C59; }

/* About Us font audit — the 憑藉… core-values headline (heading band) rendered
   at weight 400 while every other section headline is 700; bold it on the two
   About pages so all section headlines read the same. Scoped by region+page-id. */
body.gogox-region-hktc.elementor-page-138 .gogox-heading-band-title,
body.gogox-region-hken.elementor-page-237 .gogox-heading-band-title,
body.gogox-region-sg.elementor-page-15 .gogox-heading-band-title,
body.gogox-region-in.elementor-page-22 .gogox-heading-band-title,
body.gogox-region-kr.elementor-page-253 .gogox-heading-band-title {
  font-weight: 700 !important;
}

/* Story headline line break — the break is authored as a newline (<br>) so it
   splits on desktop; hide it on phones where the line wraps on its own. */
@media (max-width: 768px) {
  .gogox-vstack--story .gogox-vstack-intro br { display: none; }
}

/* Stat band eyebrow title (e.g. 我們的成就) — small label + short rule, light
   on the dark band, matching the other section titles. */
/* Left-aligned eyebrow above the stat row (the inner is a flex row); a tighter
   band when an eyebrow is present, matching the mockup. */
.gogox-stat-band:has(.gogox-stat-band-eyebrow) { padding-top: 48px; padding-bottom: 48px; }
.gogox-stat-band-eyebrow {
  position: relative;
  width: 100%;
  text-align: left;
  margin: 0 0 28px;
  padding-bottom: 12px;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 0.04em;
  color: #FFFFFF;
}
.gogox-stat-band-eyebrow::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 34px;
  height: 3px;
  border-radius: 2px;
  background: #FFDD00;
}

/* ── Inline-icons layout (About "我們的成就") ─────────────────────────
   A flat-colour card (bg + text colour come from the widget — set to #005085
   with white text): eyebrow top-left, then a row of stats each with an outline
   icon beside the figure. Colours inherit so it works on any band colour. */
.gogox-stat-band--inline {
  padding: 44px 0;
}
/* Match the other About sections: inner is the 1200 column (at ~33px) and the
   content carries the 24px inset, so the eyebrow/stats line up with 我們的起點
   and 我們的核心價值 (which sit at ~57px), not at the raw column edge. */
.gogox-stat-band--inline .gogox-stat-band-inner {
  padding-left: 24px;
  padding-right: 24px;
}
.gogox-stat-band--inline .gogox-stat-band-eyebrow { color: inherit; }
.gogox-stat-band--inline .gogox-stat-band-grid {
  gap: 18px 18px;
  justify-content: flex-start;
  align-items: center;
  text-align: left;
}
.gogox-stat-band--inline .gogox-stat-band-item {
  flex: 1 1 0;
  min-width: 172px;
  display: flex;
  align-items: center;
  gap: 14px;
  padding-right: 18px;
  border-right: 1px solid rgba(255, 255, 255, 0.22);
}
.gogox-stat-band--inline .gogox-stat-band-item:last-child { border-right: 0; padding-right: 0; }
.gogox-stat-band--inline .gogox-stat-band-icon {
  flex: 0 0 auto;
  color: inherit;
  display: inline-flex;
}
.gogox-stat-band--inline .gogox-stat-band-icon svg { width: 40px; height: 40px; }
.gogox-stat-band--inline .gogox-stat-band-body { min-width: 0; }
.gogox-stat-band--inline .gogox-stat-band-figure {
  font-size: 35px;
  font-weight: 900;
  color: inherit;
  white-space: nowrap;   /* keep "5.2M+" on one line — no awkward wrap */
}
.gogox-stat-band--inline .gogox-stat-band-prefix,
.gogox-stat-band--inline .gogox-stat-band-suffix { font-size: 23px; }
.gogox-stat-band--inline .gogox-stat-band-label {
  margin-top: 3px;
  text-transform: none;
  letter-spacing: 0.01em;
  font-size: 14px;
  font-weight: 600;
  color: inherit;
  opacity: 0.9;
}
.gogox-stat-band-footnote {
  margin: 20px 0 0;
  font-size: 12px;
  color: inherit;
  opacity: 0.7;
  text-align: left;
}
@media (max-width: 900px) {
  .gogox-stat-band--inline .gogox-stat-band-item {
    flex: 1 1 44%;
    border-right: 0;
    padding-right: 0;
  }
}
@media (max-width: 560px) {
  .gogox-stat-band--inline .gogox-stat-band-grid { gap: 18px 20px; }
  .gogox-stat-band--inline .gogox-stat-band-item { flex: 1 1 100%; }
  .gogox-stat-band--inline .gogox-stat-band-figure { font-size: 28px; }
  .gogox-stat-band--inline .gogox-stat-band-icon svg { width: 32px; height: 32px; }
}

/* 展望未來 closing CTA — the text column was too wide (headline wouldn't wrap to
   3 lines) and the image too small vs the mockup. Give the image the larger
   share with a curved left edge; the copy sits in a narrower column.
   NOTE: gogox-cta-band is on the Elementor wrapper and gogox-vstack--story on
   the widget root INSIDE it — so these must be DESCENDANT selectors (space),
   not a compound (.a.b) which never matches and let the shared 42% rule win. */
.gogox-cta-band .gogox-vstack--story .gogox-vstack-image {
  flex: 0 0 52% !important;
  max-width: 52% !important;
}
.gogox-cta-band .gogox-vstack--story .gogox-vstack-content {
  /* Grow to fill the space left of the image (like 我們的起點's text column) so the
     left edge is pinned to the section padding — deterministic at every width.
     A fixed 40% basis left free space that shifted the column by a viewport-
     dependent amount. */
  flex: 1 1 auto !important;
  max-width: none !important;
  min-width: 0;
}
.gogox-cta-band .gogox-vstack-illustration {
  border-radius: 260px 18px 18px 260px !important;   /* big curved left edge */
  max-height: 260px !important;                       /* was ~400px — too tall vs the mockup */
  object-fit: cover !important;
}
/* 展望未來 headline reads smaller than the other story headlines (per request). */
.gogox-cta-band .gogox-vstack--story .gogox-vstack-intro {
  font-size: clamp(22px, 1.9vw, 27px) !important;
}
/* Compress the whole 展望未來 band — the mockup sits much shorter than the 400px
   image was forcing. The .gogox-cta-band wrapper carries its OWN 72px top/bottom
   padding on top of the story's, so trim both layers to hug the content. */
.gogox-cta-band .gogox-vstack--story {
  padding-top: 20px !important;
  padding-bottom: 20px !important;
}
.gogox-cta-band:has(.gogox-vstack--story) {
  padding-top: 12px !important;
  padding-bottom: 12px !important;
  /* Drop the band's 24px side padding so its inner 1200 column lands at the same
     left as the other story sections (was pushing 展望未來 ~33px to the right). */
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* .gogox-cta-band is display:flex/align-items:center (from the old CTA banner),
   which shrank the value_props widget-container to content-width and centred it —
   pushing 展望未來 in. Stretch it full-width so the vstack's own 1200 column
   centres at the same left (~33px) as every other section. */
.gogox-cta-band:has(.gogox-vstack--story) > .elementor-widget-container {
  width: 100% !important;
  align-self: stretch !important;
}
@media (max-width: 768px) {
  .gogox-cta-band .gogox-vstack--story .gogox-vstack-image,
  .gogox-cta-band .gogox-vstack--story .gogox-vstack-content { flex: 0 0 100% !important; max-width: 100% !important; }
  .gogox-cta-band .gogox-vstack-illustration { border-radius: 18px !important; }
}

/* Screen-reader-only utility. Used by gogox_hero for pages whose headline lives
   inside the background artwork: the H1 has to exist for search engines and
   assistive tech, but must not be painted over the image. Standard clip-rect
   pattern — the text stays in the accessibility tree and is still selectable by
   crawlers, unlike display:none. */
.gogox-sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ---------- COUPON CTA (gogox_coupon_cta widget + [gogox_coupon] shortcode) ----------
   One row: gift icon · the offer (label / 即減 $20 / qualifier) · a divider · the
   code in a dashed ticket with its own copy control and the expiry · the booking
   CTA. Brand Process Blue carries the amount, the code and the button; the card
   itself stays neutral so it sits calmly at the top of an article. */
.gogox-coupon {
  --gogox-coupon-accent: #0B5FD8;
  display: flex;
  flex-wrap: wrap;          /* the CTA drops onto its own row below the rule */
  align-items: center;
  gap: 26px;
  background: #FFFFFF;
  border: 1px solid #E7EAEE;
  border-radius: 20px;
  padding: 24px 28px;
  margin: 0 0 32px;
  font-family: "proxima-nova", sans-serif;
}
.gogox-coupon-offer-head { display: flex; align-items: center; gap: 14px; margin-bottom: 6px; }
.gogox-coupon-icon {
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: 14px;
  background: #EAF1FE;
  color: var(--gogox-coupon-accent);
  display: flex;
  align-items: center;
  justify-content: center;
}
.gogox-coupon-icon svg { width: 26px; height: 26px; }
.gogox-coupon-offer { flex: 1 1 auto; min-width: 290px; }
/* !important throughout this card: the blog single template styles every <p>
   inside the post content (.gogox-blog-single-body … p, specificity 0,2,1), which
   otherwise outranks these single-class rules and flattened the card to 18px. */
.gogox-coupon-label {
  margin: 0 !important;
  font-size: 18px !important;
  font-weight: 700 !important;
  color: #00121A !important;
  line-height: 1.3 !important;
}
.gogox-coupon-headline {
  margin: 0 0 6px !important;
  font-size: 40px !important;
  font-weight: 800 !important;
  line-height: 1.1 !important;
  color: #00121A !important;
  letter-spacing: -0.01em;
}
.gogox-coupon-amount { color: var(--gogox-coupon-accent); }
/* One line, like the mock — the offer column reserves the width for it. */
.gogox-coupon-note { margin: 0 !important; font-size: 15px !important; color: #5A6572 !important; line-height: 1.5 !important; white-space: nowrap; }
/* The divider is drawn on the code column so it disappears with it. */
.gogox-coupon-codewrap {
  flex: 0 0 auto;
  padding-left: 32px;
  border-left: 1px solid #E7EAEE;
}
.gogox-coupon-code-label { margin: 0 0 6px !important; font-size: 15px !important; font-weight: 700 !important; color: #00121A !important; }
.gogox-coupon-codebox {
  display: flex;
  align-items: stretch;
  min-width: 300px;          /* the mock's ticket is wide, not shrink-to-fit … */
  border: 1.5px dashed var(--gogox-coupon-accent);
  border-radius: 10px;
  overflow: hidden;
  background: #F7FAFF;
}
.gogox-coupon-code {
  flex: 1 1 auto;            /* … so the code sits left and the copy icon goes right */
  padding: 11px 18px;
  font-size: 18px !important;
  font-weight: 800 !important;
  letter-spacing: 0.04em;
  color: var(--gogox-coupon-accent);
  white-space: nowrap;
}
.gogox-coupon-copyicon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  flex: 0 0 auto;
  padding: 0 16px;
  padding: 0;
  border: 0;
  border-left: 1.5px dashed var(--gogox-coupon-accent);
  background: transparent;
  color: var(--gogox-coupon-accent);
  cursor: pointer;
}
.gogox-coupon-copyicon svg { width: 17px; height: 17px; flex: 0 0 auto; }
.gogox-coupon-copyicon-text { font-size: 15px; font-weight: 700; white-space: nowrap; }
.gogox-coupon-copyicon:hover { background: #EAF1FE; }
.gogox-coupon-copyicon.is-copied { background: #12813F; color: #FFFFFF; border-left-color: #12813F; }
.gogox-coupon-valid { margin: 8px 0 0 !important; font-size: 13px !important; color: #5A6572 !important; }
/* The CTA gets its own row under a rule, with the button centred. */
.gogox-coupon-action {
  flex: 1 1 100%;
  display: flex;
  justify-content: center;
  padding-top: 20px;
  margin-top: 4px;
  border-top: 1px solid #E7EAEE;
}
.gogox-coupon-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 52px;
  padding: 0 26px;
  border: 0;
  border-radius: 12px;
  background: var(--gogox-coupon-accent);
  color: #FFFFFF !important;
  font-family: inherit;
  font-size: 17px;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
  transition: filter 0.15s ease;
}
.gogox-coupon-btn:hover { filter: brightness(0.92); }
.gogox-coupon-btn.is-copied { background: #12813F; }
.gogox-coupon-btn-arrow { font-size: 19px; line-height: 1; }
@media (max-width: 900px) {
  /* Phones keep the earlier, more compact treatment: the icon sits inline with
     the offer text instead of taking a row of its own, and the code becomes one
     big centred ticket — that is the part a reader has to tap and copy. */
  .gogox-coupon { flex-wrap: wrap; gap: 14px; padding: 20px; border-radius: 16px; }
  .gogox-coupon-icon { width: 44px; height: 44px; border-radius: 12px; }
  .gogox-coupon-icon svg { width: 22px; height: 22px; }
  .gogox-coupon-offer { flex: 1 1 0; min-width: 0; }
  .gogox-coupon-label { font-size: 16px; }
  .gogox-coupon-headline { font-size: 28px !important; margin-bottom: 4px !important; }
  .gogox-coupon-note { white-space: normal; font-size: 14px; }
  .gogox-coupon-codewrap {
    flex: 1 1 100%;
    padding-left: 0;
    padding-top: 14px;
    border-left: 0;
    border-top: 1px solid #E7EAEE;
    text-align: center;
  }
  .gogox-coupon-codebox { min-width: 0; width: 100%; }
  .gogox-coupon-code { font-size: 24px !important; text-align: center; padding: 13px 12px; }
  .gogox-coupon-valid { text-align: center; }
  .gogox-coupon-action { flex: 1 1 100%; padding-top: 16px; }
  .gogox-coupon-btn { width: 100%; justify-content: center; }
}

/* Expired coupon: the card stays (so the post still reads as a promo) but the
   offer is gone — a live-looking code that no longer works is worse than no card.
   Neutral grey rail, the dead code struck through, and the region's own social
   accounts as the next step. */
.gogox-coupon.gogox-coupon--expired {
  border-left-color: #98A2AD;
  background: #F4F6F7;
}
.gogox-coupon-expired-code {
  margin: 0 0 6px;
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0.05em;
  color: #98A2AD;
  text-decoration: line-through;
}
.gogox-coupon-expired-msg { margin: 0; font-size: 15px; color: #3C4550; }
.gogox-coupon-social {
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  padding: 0 18px;
  margin-left: 8px;
  border: 1px solid #0088BF;
  border-radius: 999px;
  color: #0088BF !important;
  font-size: 15px;
  font-weight: 700;
  text-decoration: none;
}
.gogox-coupon-social:hover { background: #0088BF; color: #FFFFFF !important; }
@media (max-width: 700px) {
  .gogox-coupon-social { margin: 0 8px 0 0; }
}
