/**
 * GVS 2026 — Theme Custom Styles
 *
 * Additional styles that complement TailwindCSS.
 * Handles WordPress-specific overrides and component polish.
 *
 * @package GVS_2026
 */

/* ============================================================
   Section Background Variants
   Available for any .gvs-section — 4 approved palette options.
   Maps to ACF "Background Color" select field on each block.
   ============================================================ */

/* Wire up section padding token */
.gvs-section {
  padding-block: var(--section-pad-y);
}

/* Prevent heading / text overflow on narrow viewports */
.gvs-section h1,
.gvs-section h2,
.gvs-section h3 {
  overflow-wrap: break-word;
  word-break: break-word;
}

.gvs-section--bg-white      { background-color: #fff; }
.gvs-section--bg-grey       { background-color: var(--color-surface, #F8F9FC); }
.gvs-section--bg-light-blue { background-color: var(--color-primary-light, #1B4BB4); color: var(--color-text-inverse, #F0F4FF); }
.gvs-section--bg-dark-blue  { background-color: var(--color-primary, #0F2B5B); color: var(--color-text-inverse, #F0F4FF); }

/* Labels and dividers adapt to dark backgrounds */
.gvs-section--bg-light-blue .gvs-label,
.gvs-section--bg-dark-blue .gvs-label {
  color: var(--color-accent, #FFBD59);
}
.gvs-section--bg-light-blue .gvs-label::before,
.gvs-section--bg-dark-blue .gvs-label::before {
  background: var(--color-accent, #FFBD59);
}

/* ============================================================
   WordPress Block Overrides
   ============================================================ */

/* Fallback for browsers that don't support 100dvh (older Safari) */
.gvs-hero {
  min-height: 100vh; /* fallback */
}
@supports (min-height: 100dvh) {
  .gvs-hero {
    min-height: 100dvh;
  }
}
/* Mobile: use svh (small viewport height) so the hero doesn't resize
   when the browser address bar hides/shows during scroll. */
@media (max-width: 767px) {
  @supports (min-height: 100svh) {
    .gvs-hero {
      min-height: 100svh;
    }
  }
  .gvs-hero__content {
    padding-bottom: 3rem;         /* fixed gap below Follow Us button */
  }
}
/* Tablet+: clear the absolutely-positioned scroll indicator at bottom: 2rem */
@media (min-width: 768px) {
  .gvs-hero__content {
    padding-bottom: 5rem;
  }
}

/* Hero title: generous line-height to avoid descender clipping ("y" in Volatility)
   while keeping overflow:hidden so the GSAP slide-up is properly masked. */
.gvs-hero__title {
  line-height: 1.15;
}
.gvs-hero__title .gsap-split-line {
  overflow: hidden;
  padding-bottom: 0.08em; /* breathing room for descenders inside the clip box */
}

/* --- Scrollbar space reservation (prevents layout shift when modals hide overflow) --- */
html {
  scrollbar-gutter: stable;
}

/* --- Sticky footer: push footer to bottom when content is short --- */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
#main-content {
  flex: 1 0 auto;
}
.gvs-site-footer {
  flex-shrink: 0;
  position: relative;
  z-index: 2;            /* layer above sticky parallax banners */
}
/* Mobile-only footer compactness (desktop untouched) */
@media (max-width: 767px) {
  .gvs-site-footer .gvs-container {
    padding-top: 2rem;
    padding-bottom: 2rem;
  }
  .gvs-footer-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 1rem;
  }
  .gvs-footer-grid > *:first-child {
    grid-column: 1 / -1;          /* brand spans full width */
    margin-bottom: 0.5rem;
  }
  .gvs-footer-grid h4 {
    margin-bottom: 0.75rem;
  }
  .gvs-footer-contact {
    display: none;                /* envelope icon covers contact on mobile */
  }
  .gvs-site-footer .gvs-social-link {
    width: 2.75rem;
    height: 2.75rem;
  }
  .gvs-site-footer .gvs-social-link svg {
    width: 20px;
    height: 20px;
  }
  .gvs-site-footer img[alt*="Volatility"],
  .gvs-site-footer .custom-logo {
    height: 2.5rem;
  }
}
/* Tablet: brand spans full row, 3 columns below */
@media (min-width: 768px) and (max-width: 1023px) {
  .gvs-footer-grid > *:first-child {
    grid-column: 1 / -1;
  }
}
/* Bottom bar: clear fixed back-to-top button when links go horizontal */
@media (min-width: 640px) and (max-width: 1023px) {
  .gvs-footer-bottom {
    padding-right: 4rem;
  }
}

/* Hero overlay — custom gradient over Tailwind default */
.gvs-hero__overlay {
  background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-surface-dark) 50%, var(--color-primary) 100%);
}

/* Thinner, more elegant section divider lines
   Explicit background + border override — Tailwind base sets
   hr { border-top-width: 1px; color: inherit } which bleeds
   through as a blue line if only height is overridden here. */
.gvs-divider {
  background: linear-gradient(90deg, var(--color-accent, #FFBD59), var(--color-accent-warm, #FF8C42));
  border: none;
  border-radius: 99px;
  width: 60px;
  height: 2px;
}

/* Scroll indicator animations — overrides Tailwind gvs-float */
.gvs-scroll-indicator {
  animation: none;
  opacity: 0.7;
}
@media (max-width: 767px) {
  .gvs-scroll-indicator {
    visibility: hidden;
    pointer-events: none;
  }
}
@media (max-height: 850px) {
  .gvs-scroll-indicator {
    display: none;
  }
}

/* Mouse outline */
.gvs-scroll-indicator__mouse {
  width: 20px;
  height: 32px;
  border: 2px solid rgba(255,255,255,0.6);
  border-radius: 11px;
  position: relative;
}

/* Animated dot inside mouse */
.gvs-scroll-indicator__dot {
  width: 3px;
  height: 7px;
  background: rgba(255,255,255,0.9);
  border-radius: 2px;
  position: absolute;
  left: 50%;
  margin-left: -1.5px;
  top: 6px;
  animation: gvs-scroll-dot 2s ease-in-out infinite;
}

/* Chevron below mouse */
.gvs-scroll-indicator__chevron {
  animation: gvs-chevron-bounce 2s ease-in-out infinite;
}

@keyframes gvs-scroll-dot {
  0%        { opacity: 1; top: 6px; }
  50%       { opacity: 0; top: 16px; }
  50.01%    { opacity: 0; top: 6px; }
  100%      { opacity: 1; top: 6px; }
}

@keyframes gvs-chevron-bounce {
  0%, 100%  { transform: translateY(0); opacity: 0.3; }
  50%       { transform: translateY(3px); opacity: 0.8; }
}

/* ============================================================
   Self-hosted Fonts — ensures fonts load without cache
   ============================================================ */

@font-face {
  font-family: "Inter Variable";
  src: url("../fonts/inter/InterVariable.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Inter";
  src: url("../fonts/inter/InterVariable.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Instrument Serif";
  src: url("../fonts/instrument-serif/InstrumentSerif-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* ============================================================
   Global: No Bold Fonts — All text uses weight 400 (normal)
   Override Tailwind's font-weight custom properties so every
   utility class (.font-bold, .font-semibold, etc.) resolves
   to 400. Then neutralize browser-default bold on semantic
   elements. No universal selector, no !important needed.
   ============================================================ */
:root {
  /* ── Weight overrides (brand: all 400) ── */
  /* Exceptions: .gvs-btn (600) and .gvs-stat__label (600) use
     explicit font-weight in Tailwind components for legibility. */
  --font-weight-light: 400;
  --font-weight-normal: 400;
  --font-weight-medium: 400;
  --font-weight-semibold: 400;
  --font-weight-bold: 400;

  /* ── Colour alias (not in tailwind.css :root) ── */
  --color-primary-dark: #0F2B5B;

  /* ── Layout tokens ── */
  --header-height:       3.5rem;          /* 56px — mobile default */
  --header-pad-x:        2rem;            /* 32px */
  --header-pad-y:        1rem;            /* 16px */
  --logo-height:         2rem;            /* 32px — slightly larger mobile logo */
  --logo-max-width:      55vw;

  --hero-pad-top:        5.5rem;          /* compact hero mobile */
  --hero-pad-bottom:     2rem;

  --section-pad-y:       clamp(3rem, 2rem + 5vw, 6rem);

  /* ── Spacing scale (8px base) ── */
  --space-2xs:           0.25rem;         /*  4px */
  --space-xs:            0.5rem;          /*  8px */
  --space-sm:            0.75rem;         /* 12px */
  --space-md:            1rem;            /* 16px */
  --space-lg:            1.5rem;          /* 24px */
  --space-xl:            2rem;            /* 32px */
  --space-2xl:           2.5rem;          /* 40px */
  --space-3xl:           3rem;            /* 48px */
  --space-4xl:           4rem;            /* 64px */

  /* ── Type scale (component-level) ── */
  --text-body:           1rem;            /* 16px — card body, base prose */
  --text-body-lg:        1.0625rem;       /* 17px — intro/section body */
  --text-caption:        0.875rem;        /* 14px — meta, dates, nav */
  --text-micro:          0.75rem;         /* 12px — labels, fine print */
  --text-card-heading:   clamp(1.25rem, 1rem + 1.2vw, 1.75rem); /* matches --text-lg / speaker names */
  --text-detail-heading: 1.25rem;         /* detail card heading */
  --text-small:          0.8125rem;       /* 13px — footer nav, agenda links */
  --text-countdown:      1.7rem;          /* 27px — countdown digits */
  --text-countdown-num:  1.5rem;          /* 24px — countdown number compact */
  --text-nano:           0.65rem;         /* 10px — countdown unit labels */
  --text-disclaimer:     0.8rem;          /* 13px — disclaimer toggle/text */
  --text-privacy-h2:     1.15rem;         /* 18.4px — privacy/cookies h2 */
  --text-input:          1rem;             /* 16px — search input, TOC links (≥16px prevents iOS auto-zoom) */
  --text-type-label:     0.6875rem;       /* 11px — search result type badges */
  --text-decorative-quote: 3rem;          /* 48px — testimonial quotation mark */
  --text-hero-sm:        clamp(2.5rem, 5vw, 3.75rem); /* compact hero titles */
  --text-404:            clamp(4rem, 10vw, 8rem);     /* 404 page display number */

  /* ── Component tokens ── */
  --timeline-dot:        9px;
  --timeline-line:       1.5px;
  --timeline-scroll-max-h: 560px;
  --timeline-grid:       1.5rem 4rem 1fr;
  --timeline-gap:        0 1rem;
  --timeline-offset:     1.75rem;         /* dot vertical center */

  --card-padding:        var(--space-3xl) var(--space-2xl);
  --card-radius:         var(--radius-lg, 1rem);

  --btn-pad:             0.875rem 2rem;
  --btn-radius:          9999px;
  --btn-font:            var(--text-caption);
}

/* ── Responsive token overrides ── */
@media (min-width: 375px) {
  :root {
    --header-height:     4rem;
    --logo-height:       2.25rem;         /* 36px */
    --hero-pad-top:      6.5rem;
    --hero-pad-bottom:   2.5rem;
    --header-pad-x:      2rem;
    --header-pad-y:      1rem;
  }
}
@media (min-width: 768px) {
  :root {
    --header-height:     4.5rem;
    --logo-height:       2.625rem;        /* 42px */
    --logo-max-width:    none;
    --hero-pad-top:      7rem;
    --hero-pad-bottom:   3rem;
    --header-pad-x:      2.5rem;
    --header-pad-y:      1.25rem;
  }
}
@media (min-width: 1024px) {
  :root {
    --header-height:     5rem;
    --logo-height:       3rem;            /* 48px */
    --hero-pad-top:      8rem;
    --hero-pad-bottom:   3rem;
    --header-pad-x:      3.5rem;
    --header-pad-y:      1.25rem;
    --timeline-grid:     1.5rem 5rem 1fr;
    --timeline-gap:      0 1.5rem;
  }
}

h1, h2, h3, h4, h5, h6,
b, strong,
th, dt, legend,
optgroup {
  font-weight: 400;
}

/* ============================================================
   Accessibility: Keyboard focus indicators (WCAG 2.1 AA)
   Tailwind base layer provides :focus-visible for all elements.
   These additions ensure custom components on dark backgrounds
   remain visible and that mouse clicks don't show outlines.
   ============================================================ */

/* Hide outlines for mouse/touch — only show for keyboard */
:focus:not(:focus-visible) {
  outline: none;
}

/* Brighter ring on dark sections so the gold outline stays visible */
.gvs-section--dark :focus-visible,
.gvs-hero :focus-visible,
.gvs-mobile-menu :focus-visible,
.gvs-search-overlay :focus-visible,
.gvs-header :focus-visible {
  outline: 2px solid var(--color-accent, #FFBD59);
  outline-offset: 3px;
}

/* Modal close / hamburger buttons — ensure ring is visible on custom shapes */
[data-modal-close]:focus-visible,
#menuToggle:focus-visible {
  outline: 2px solid var(--color-accent, #FFBD59);
  outline-offset: 2px;
  border-radius: 9999px;
}

/* ============================================================
   Missing Tailwind utilities — not in compiled tailwind.css
   ============================================================ */
@media (min-width: 1024px) {
  .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.py-28 { padding-top: 7rem; padding-bottom: 7rem; }
.space-y-1\.5 > * + * { margin-top: 0.375rem; }
.min-w-\[6rem\] { min-width: 6rem; }
.max-w-\[260px\] { max-width: 260px; }
.mt-0\.5 { margin-top: 0.125rem; }
.screen-reader-text {
  clip: rect(1px, 1px, 1px, 1px);
  clip-path: inset(50%);
  height: 1px;
  width: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  white-space: nowrap;
}
.screen-reader-text:focus {
  clip: auto;
  clip-path: none;
  height: auto;
  width: auto;
  margin: 0;
  overflow: visible;
  padding: 0.75rem 1.5rem;
  position: fixed;
  top: 5px;
  left: 5px;
  z-index: 100000;
  background: var(--color-accent, #FFBD59);
  color: var(--color-primary, #0F2B5B);
  font-size: 0.875rem;
  border-radius: 4px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.3);
}
.gvs-opaque-wrapper {
  position: relative;
  z-index: 2;
  background: #fff;
}
@media (min-width: 768px) {
  .md\:py-28 { padding-top: 7rem; padding-bottom: 7rem; }
  .md\:inline { display: inline; }
}

/* ============================================================
   Fix #1: Countdown clock — fixed-width digits, no jumping
   ============================================================ */
#countdownDays,
#countdownHours,
#countdownMins,
#countdownSecs {
  font-size: var(--text-countdown);
  font-variant-numeric: tabular-nums;
  min-width: 2ch;
  display: inline-block;
  text-align: center;
}

/* ============================================================
   Button overrides
   Unlayered CSS naturally beats Tailwind's @layer components,
   so no !important needed.
   ============================================================ */

/* Dark button — white text */
.gvs-btn--dark,
.gvs-btn--dark:visited,
.gvs-btn--dark:hover {
  color: #fff;
}

/* Outline button — white text (fixes :visited browser override) */
.gvs-btn--outline,
.gvs-btn--outline:visited {
  color: #fff;
}

/* Sponsor card outline button — grey border, navy text, navy fill on hover */
.gvs-btn--sponsor-outline {
  background: transparent;
  border: 1.5px solid var(--color-secondary, #94A3B8);
  color: var(--color-primary, #0F2B5B);
}
.gvs-btn--sponsor-outline:visited {
  color: var(--color-primary, #0F2B5B);
}
.gvs-btn--sponsor-outline:hover {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}

/* Featured sponsor card button — gold bg, white text on hover */
.gvs-btn--sponsor-featured {
  background: var(--color-primary, #0F2B5B);
  border: 1.5px solid var(--color-secondary, #94A3B8);
  color: #fff;
}
.gvs-btn--sponsor-featured:visited {
  color: #fff;
}
.gvs-btn--sponsor-featured:hover {
  background: var(--color-primary-light, #1B4BB4);
  color: #fff;
}

/* ============================================================
   Fix #4: LinkedIn icon white on blue circle
   ============================================================ */
.gvs-resource-linkedin,
.gvs-resource-linkedin:visited {
  color: #fff;
}
.gvs-resource-linkedin svg {
  fill: #fff;
  color: #fff;
}

/* ============================================================
   Register page — event details card
   ============================================================ */
.gvs-detail-card {
  border: 1px solid var(--color-border, #E2E8F0);
  border-radius: var(--card-radius);
  background: #fff;
  padding: var(--card-padding);
  cursor: default;
}
.gvs-detail-card__link {
  color: var(--color-text-primary, #0F1729);
  transition: color 0.2s ease;
}
.gvs-detail-card__link:visited {
  color: var(--color-text-primary, #0F1729);
}
.gvs-detail-card__link:hover,
.gvs-detail-card__link:focus-visible {
  color: var(--color-primary-light, #1B4BB4);
}

/* Calendar dropdown toggle — 44px tap target */
.gvs-cal-dropdown__toggle {
  min-height: 2.75rem;          /* 44px */
  display: inline-flex;
  align-items: center;
}

/* Calendar dropdown menu — shared base */
.gvs-cal-dropdown__menu {
  min-width: 15rem;             /* 240px */
  box-shadow: 0 12px 40px rgba(15, 43, 91, 0.15);
  visibility: hidden;           /* hidden by default — JS toggles on click */
  text-align: left;
  overflow: hidden;             /* clip hover bg to rounded shape */
  padding: 0;                   /* no inner padding — items go edge-to-edge */
}

/* Calendar dropdown — dark variant (hero) */
.gvs-cal-dropdown__menu--dark {
  background: #fff;
  border: 1px solid var(--color-border, #E2E8F0);
}

/* Calendar dropdown — light variant (register) */
.gvs-cal-dropdown__menu--light {
  background: #fff;
  border: 1px solid var(--color-border, #E2E8F0);
}

/* Calendar menu item — dark (hero) */
.gvs-cal-menu-item--dark {
  color: var(--color-text-primary, #0F1729);
}
.gvs-cal-menu-item--dark:hover,
.gvs-cal-menu-item--dark:focus-visible {
  color: var(--color-primary-light, #1B4BB4);
  background: var(--color-surface, #F8F9FC);
}

/* Calendar menu item — light (register) */
.gvs-cal-menu-item--light {
  color: var(--color-text-primary, #0F1729);
}
.gvs-cal-menu-item--light:hover,
.gvs-cal-menu-item--light:focus-visible {
  color: var(--color-primary-light, #1B4BB4);
  background: var(--color-surface, #F8F9FC);
}

/* Calendar add-to links — 44px tap target + focus parity */
.gvs-cal-link {
  min-height: 2.75rem;          /* 44px */
  display: inline-flex;
  align-items: center;
  text-decoration: none;
  transition: color 0.2s ease, background 0.2s ease;
}
.gvs-cal-link:focus-visible {
  color: var(--color-accent, #FFBD59);
}
.gvs-link--subtle {
  color: var(--color-primary-light, #1B4BB4);
  text-decoration: none;
}
.gvs-link--subtle:hover {
  text-decoration: underline;
}

/* ============================================================
   Register page — countdown cells
   ============================================================ */
.gvs-countdown__cell {
  background: var(--color-surface, #F8F9FC);
  padding: 0.75rem 1.25rem;
  min-width: 5rem;
  text-align: center;
  border-radius: 0.75rem;
}
@media (max-width: 767px) {
  .gvs-countdown__cell {
    min-width: 0;
    padding: 0.5rem 0.75rem;
    flex: 1 1 0%;
  }
}
.gvs-countdown__number {
  display: block;
  font-size: clamp(1.25rem, 1rem + 1.5vw, 1.75rem);
  font-variant-numeric: tabular-nums;
  color: var(--color-primary, #0F2B5B);
}

/* ============================================================
   Reduced-motion: disable scroll-reveal animations.
   Normal users still get GSAP-driven reveals from Tailwind's
   hidden-state classes (opacity:0 / translateY).
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .gsap-reveal,
  .gsap-reveal-left,
  .gsap-reveal-right,
  .gsap-reveal-scale {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    will-change: auto;
  }
  .gvs-btn--pulse {
    animation: none;
  }
  .gvs-hamburger__line {
    transition: none !important;
  }
}

/* ============================================================
   Registration CTA pulse glow
   Subtle gold ring that breathes on idle. Pauses on hover
   (user is already engaged). Applied only to hero + CTA banner.
   ============================================================ */
@keyframes gvs-pulse-glow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 189, 89, 0.5); }
  50%      { box-shadow: 0 0 0 12px rgba(255, 189, 89, 0); }
}

.gvs-btn--pulse {
  animation: gvs-pulse-glow 2.8s ease-in-out infinite;
}

.gvs-btn--pulse:hover,
.gvs-btn--pulse:focus-visible {
  animation: none;
}
.gvs-countdown__unit {
  font-size: var(--text-nano);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--color-text-secondary, #4A5568);
}
.gvs-hero__title--sm {
  font-size: var(--text-hero-sm);
}

/* Compact hero — snug text-wrapping banner (articles, resources, search) */
.gvs-hero--compact,
.gvs-hero--article {
  min-height: auto;
  padding-top: var(--hero-pad-top);
  padding-bottom: var(--hero-pad-bottom);
}

.gvs-detail-card .gvs-divider {
  max-width: 120px;
}
.gvs-detail-card__heading {
  font-size: var(--text-detail-heading);
  line-height: 1.8;
  color: var(--color-text-primary, #0F1729);
  margin: 0 0 var(--space-md);
}
.gvs-detail-card__body {
  font-size: var(--text-body);
  line-height: 1.8;
  color: var(--color-text-secondary, #4A5568);
  margin: 0;
}
.gvs-body-text {
  font-size: var(--text-body-lg);
  line-height: 1.7;
  color: var(--color-text-secondary, #4A5568);
  max-width: 100%;
  text-align: justify;
  overflow-wrap: break-word;
  word-break: break-word;
}
@media (max-width: 767px) {
  .gvs-body-text {
    text-align: left;
  }
}

/* ============================================================
   Event Timeline — Scrollable Vertical Timeline
   Single-column centered layout with internal scroll.
   Shows ~4 events in view; rest scroll internally.
   data-lenis-prevent stops Lenis from hijacking the container.
   ============================================================ */

/* Controls — centered above timeline */
.gvs-timeline-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
}
/* Mobile: hide scroll nav — all items visible in full */
@media (max-width: 767px) {
  .gvs-timeline-controls { display: none; }
}
.gvs-timeline-btn {
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
  border: 1.5px solid var(--color-border, #E2E8F0);
  background: transparent;
  color: var(--color-primary, #0F2B5B);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.2s, color 0.2s, border-color 0.2s;
}
.gvs-timeline-btn:hover {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}
.gvs-timeline-btn:disabled {
  opacity: 0.3;
  cursor: default;
  pointer-events: none;
}
.gvs-timeline-count {
  font-size: var(--text-micro);
  color: var(--color-text-secondary, #4A5568);
  letter-spacing: 0.05em;
}

/* Scrollable container */
.gvs-timeline-scroll {
  max-height: min(560px, 65vh);
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior-y: auto;
  scroll-behavior: smooth;
  position: relative;
  outline: none;
  /* Fade hint at bottom */
  -webkit-mask-image: linear-gradient(to bottom, #000 85%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 85%, transparent 100%);
}
/* Remove fade when scrolled to bottom */
.gvs-timeline-scroll--at-end {
  -webkit-mask-image: none;
  mask-image: none;
}

/* Custom scrollbar — thin, premium */
.gvs-timeline-scroll::-webkit-scrollbar {
  width: 3px;
}
.gvs-timeline-scroll::-webkit-scrollbar-track {
  background: var(--color-border, #E2E8F0);
  border-radius: 3px;
}
.gvs-timeline-scroll::-webkit-scrollbar-thumb {
  background: var(--color-primary, #0F2B5B);
  border-radius: 3px;
}
/* Firefox scrollbar */
.gvs-timeline-scroll {
  scrollbar-width: thin;
  scrollbar-color: var(--color-primary, #0F2B5B) var(--color-border, #E2E8F0);
}

/* Mobile: show all timeline items — no internal scroll trap */
@media (max-width: 767px) {
  .gvs-timeline-scroll {
    max-height: none;
    overflow-y: visible;
    -webkit-mask-image: none;
    mask-image: none;
  }
}

/* Timeline item row */
.gvs-timeline-item {
  display: grid;
  grid-template-columns: var(--timeline-grid);
  gap: var(--timeline-gap);
  align-items: start;
  padding: var(--space-lg) 0;
  position: relative;
}
@media (min-width: 1024px) {
  .gvs-timeline-item {
    grid-template-columns: var(--timeline-grid);
    gap: var(--timeline-gap);
  }
}

/* Continuous vertical line — drawn on the track, not per-item */
.gvs-timeline-track {
  position: relative;
}
.gvs-timeline-track::before {
  content: '';
  position: absolute;
  top: var(--timeline-offset);
  bottom: var(--timeline-offset);
  left: 0.75rem;
  width: var(--timeline-line);
  transform: translateX(-50%);
  background: var(--color-border, #E2E8F0);
}

/* Line column — keeps dots positioned, no per-item line */
.gvs-timeline-item__line {
  position: relative;
  display: flex;
  justify-content: center;
  align-self: stretch;
}

/* Dot on the line */
.gvs-timeline-item__dot {
  position: absolute;
  top: var(--timeline-offset);
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--timeline-dot);
  height: var(--timeline-dot);
  border-radius: 50%;
  background: var(--color-primary, #0F2B5B);
  z-index: 2;
}

/* Line caps — hide the line above first / below last dot */
.gvs-timeline-item__line-cap {
  position: absolute;
  left: 50%;
  width: 3px;
  transform: translateX(-50%);
  z-index: 1;
}
.gvs-timeline-item__line-cap--top {
  top: 0;
  height: var(--timeline-offset);
}
.gvs-timeline-item__line-cap--bottom {
  top: var(--timeline-offset);
  bottom: 0;
}
/* Match section background */
.gvs-section--bg-white .gvs-timeline-item__line-cap { background: #fff; }
.gvs-section--bg-grey .gvs-timeline-item__line-cap  { background: var(--color-surface, #F8F9FC); }

/* Year label — center of 1rem text aligns with dot center at --timeline-offset */
.gvs-timeline-item__year {
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-accent, #FFBD59);
  letter-spacing: 0.05em;
  padding-top: 1.25rem;
  white-space: nowrap;
  line-height: 1;
}

/* Content area — h3 center aligns near dot center */
.gvs-timeline-item__content {
  padding-top: 1rem;
}
.gvs-timeline-item__content h3 {
  font-size: var(--text-card-heading);
  text-wrap: auto;
}

/* Learn more link */
.gvs-timeline-item__link {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  font-size: var(--text-micro);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-primary-light, #1B4BB4);
  background: none;
  border: none;
  padding: 0.75rem 0;
  min-height: 2.75rem;
  cursor: pointer;
  transition: color 0.2s;
}
.gvs-timeline-item__link:hover {
  color: var(--color-accent, #FFBD59);
}
.gvs-body-text p {
  max-width: 100%;
  margin-bottom: 0.75rem;
}
.gvs-body-text sup {
  font-size: 0.75em;
  line-height: 0;
  position: relative;
  top: -0.4em;
  vertical-align: baseline;
  color: var(--color-text-secondary, #4A5568);
  font-weight: 600;
}

/* Footnotes beneath body text */
.gvs-footnotes {
  margin-top: var(--space-md, 1rem);
  padding-top: var(--space-md, 1rem);
  border-top: 1px solid var(--color-border, #E2E8F0);
  list-style: decimal;
  padding-left: 1.25rem;
  font-size: var(--text-small, 0.8125rem);
  line-height: 1.6;
  color: var(--color-text-secondary, #4A5568);
}
.gvs-footnotes li {
  margin-bottom: 0.35rem;
}
.gvs-section--bg-dark-blue .gvs-footnotes,
.gvs-section--bg-light-blue .gvs-footnotes {
  border-top-color: rgba(255, 255, 255, 0.15);
  color: rgba(255, 255, 255, 0.7);
}
.gvs-body-text ul,
.gvs-body-text ol {
  margin: 0 0 0.75rem;
  padding-left: 1.5rem;
}
.gvs-body-text ul {
  list-style-type: disc !important;
}
.gvs-body-text ol {
  list-style-type: decimal !important;
}
.gvs-body-text li {
  margin-bottom: 0.35rem;
  display: list-item !important;
}
.gvs-resource-card h3 {
  font-size: var(--text-card-heading);
  overflow-wrap: break-word;
  word-break: break-word;
}
.gvs-modal-backdrop {
  background: color-mix(in srgb, var(--color-surface-dark, #0A1628) 65%, transparent);
}

/* ============================================================
   Accordion block
   ============================================================ */
.gvs-accordion__item summary {
  list-style: none;
  cursor: pointer;
  overflow-wrap: break-word;
  word-break: break-word;
  font-size: var(--text-body-lg);
}
@media (min-width: 768px) {
  .gvs-accordion__item summary {
    font-size: var(--text-lg, clamp(1.25rem, 1rem + 1.2vw, 1.75rem));
  }
}
.gvs-accordion__item summary::-webkit-details-marker {
  display: none;
}
.gvs-accordion__icon {
  transition: transform 0.3s var(--ease-smooth);
  flex-shrink: 0;
}
.gvs-accordion__item[open] .gvs-accordion__icon {
  transform: rotate(180deg);
}
.gvs-accordion__item summary:focus-visible {
  outline: 2px solid var(--color-accent, #FFBD59);
  outline-offset: 3px;
  border-radius: 0.25rem;
}

/* ============================================================
   Agenda block
   ============================================================ */
.gvs-agenda__item {
  display: flex;
  gap: var(--space-md);
  padding-block: var(--space-md);
  border-bottom: 1px solid var(--color-border, #E2E8F0);
}
.gvs-agenda__item:last-child {
  border-bottom: none;
}
.gvs-agenda__time {
  flex-shrink: 0;
  width: 7.5rem;
  font-weight: 400;
  color: var(--color-primary, #0F2B5B);
}
@media (min-width: 640px) and (max-width: 767px) {
  .gvs-agenda__time {
    width: 6rem;
  }
}
.gvs-agenda__content {
  flex: 1;
  min-width: 0;
}
.gvs-agenda__title-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-sm);
}

.gvs-agenda__title {
  font-weight: 400;
  font-size: var(--text-lg, 1.125rem);
  color: var(--color-primary, #0F2B5B);
  overflow-wrap: break-word;
  word-break: break-word;
}

.gvs-agenda__cal-btn {
  flex-shrink: 0;
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--color-border, #E2E8F0);
  border-radius: 0.375rem;
  background: transparent;
  color: var(--color-text-secondary, #4A5568);
  cursor: pointer;
  transition: all 0.2s ease;
  margin-top: 0.125rem;
}

.gvs-agenda__cal-btn:hover {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}
.gvs-agenda__speaker {
  font-style: italic;
  font-size: var(--text-sm, 0.875rem);
  color: var(--color-accent, #FFBD59);
  margin-top: var(--space-2xs);
}
.gvs-agenda__desc {
  color: var(--color-text-secondary, #4A5568);
}
.gvs-agenda__item--break {
  background: var(--color-surface, #F8F9FC);
  border-left: 4px solid var(--color-accent, #FFBD59);
  border-radius: 0.375rem;
  padding-inline: var(--space-sm);
}
.gvs-agenda__item--break .gvs-agenda__title {
  font-style: italic;
  font-weight: 400;
}

@media (max-width: 639px) {
  .gvs-agenda__item {
    flex-direction: column;
    gap: var(--space-2xs);
  }
  .gvs-agenda__time {
    width: auto;
  }
}

/* ============================================================
   Video Showcase block
   ============================================================ */
.gvs-video__wrapper {
  max-width: 60rem;
  margin-inline: auto;
  aspect-ratio: 16 / 9;
  border-radius: var(--radius-md, 0.75rem);
  overflow: hidden;
  box-shadow: 0 4px 24px rgba(15, 43, 91, 0.08);
}
@media (max-width: 639px) {
  .gvs-video__wrapper {
    border-radius: var(--radius-sm, 0.375rem);
  }
}
.gvs-video__iframe {
  width: 100%;
  height: 100%;
  border: 0;
}

/* ============================================================
   Testimonials block
   ============================================================ */
.gvs-testimonials__grid {
  display: grid;
  gap: var(--space-lg);
  grid-template-columns: 1fr;
}
@media (min-width: 640px) {
  .gvs-testimonials__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 1024px) {
  .gvs-testimonials__grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
.gvs-testimonials__grid--single {
  max-width: 40rem;
  margin-inline: auto;
  grid-template-columns: 1fr;
}
.gvs-testimonials__grid--pair {
  max-width: 56rem;
  margin-inline: auto;
  grid-template-columns: 1fr;
}
@media (min-width: 640px) {
  .gvs-testimonials__grid--pair {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 1024px) {
  .gvs-testimonials__grid--pair {
    grid-template-columns: repeat(2, 1fr);
  }
}
.gvs-testimonial__card {
  padding: var(--space-lg);
  background: #fff;
  border-radius: var(--radius-md, 0.75rem);
  box-shadow: 0 2px 12px rgba(15, 43, 91, 0.06);
}
.gvs-section--bg-grey .gvs-testimonial__card,
.gvs-section--bg-light-blue .gvs-testimonial__card {
  background: #fff;
}
.gvs-section--bg-dark-blue .gvs-testimonial__card {
  background: rgba(255, 255, 255, 0.05);
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
}
.gvs-testimonial__mark {
  font-family: var(--font-display, 'Instrument Serif', serif);
  font-size: var(--text-decorative-quote);
  line-height: 1;
  color: var(--color-accent, #FFBD59);
  opacity: 0.7;
}
.gvs-testimonial__quote {
  font-family: var(--font-display, 'Instrument Serif', serif);
  font-style: italic;
  font-size: var(--text-lg, 1.125rem);
  line-height: 1.7;
  color: var(--color-primary, #0F2B5B);
  margin: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}
.gvs-section--bg-dark-blue .gvs-testimonial__quote {
  color: #fff;
}
.gvs-testimonial__divider {
  width: 2rem;
  height: 2px;
  background: var(--color-accent, #FFBD59);
  margin-top: var(--space-sm);
  margin-bottom: var(--space-sm);
}
.gvs-testimonial__name {
  font-weight: 400;
  color: var(--color-primary, #0F2B5B);
}
.gvs-section--bg-dark-blue .gvs-testimonial__name {
  color: #fff;
}
.gvs-testimonial__role {
  font-size: var(--text-sm, 0.875rem);
  color: var(--color-text-secondary, #4A5568);
}
.gvs-section--bg-dark-blue .gvs-testimonial__role {
  color: rgba(255, 255, 255, 0.7);
}

/* ============================================================
   Venue block
   ============================================================ */
.gvs-venue__grid {
  display: grid;
  gap: var(--spacing-fluid-lg);
  grid-template-columns: 1fr;
  align-items: start;
}
@media (min-width: 768px) {
  .gvs-venue__grid {
    grid-template-columns: 1fr 1fr;
  }
}
.gvs-venue__grid--info-only {
  grid-template-columns: 1fr;
  max-width: 40rem;
}
.gvs-venue__name {
  font-size: var(--text-xl, 1.25rem);
  font-weight: 400;
  color: var(--color-primary, #0F2B5B);
  margin-bottom: var(--space-xs);
}
.gvs-venue__address {
  display: flex;
  gap: var(--space-xs);
  color: var(--color-text-secondary, #4A5568);
  line-height: 1.6;
}
.gvs-venue__address svg {
  flex-shrink: 0;
  margin-top: 0.2em;
  color: var(--color-accent, #FFBD59);
}
.gvs-venue__map {
  border-radius: var(--radius-md, 0.75rem);
  overflow: hidden;
  aspect-ratio: 4 / 3;
  box-shadow: 0 2px 12px rgba(15, 43, 91, 0.06);
}
.gvs-venue__map iframe {
  width: 100%;
  height: 100%;
  border: 0;
}
@media (max-width: 767px) {
  .gvs-venue__map {
    aspect-ratio: 16 / 9;
    min-height: 220px;
  }
}

/* ============================================================
   Media & Text block
   ============================================================ */
.gvs-media-text__grid {
  display: grid;
  gap: var(--spacing-fluid-lg);
  grid-template-columns: 1fr;
  align-items: center;
}
@media (min-width: 768px) {
  .gvs-media-text__grid {
    grid-template-columns: 1fr 1fr;
  }
}
.gvs-media-text__media img {
  width: 100%;
  height: auto;
  border-radius: var(--radius-md, 0.75rem);
  object-fit: cover;
  box-shadow: 0 4px 24px rgba(15, 43, 91, 0.08);
}
@media (min-width: 768px) {
  .gvs-media-text--reversed .gvs-media-text__media {
    order: 2;
  }
  .gvs-media-text--reversed .gvs-media-text__content {
    order: 1;
  }
}

/* ============================================================
   Newsletter CTA block
   ============================================================ */
.gvs-newsletter__inner {
  max-width: 40rem;
  margin-inline: auto;
  text-align: center;
}
.gvs-newsletter__icon {
  margin-inline: auto;
  margin-bottom: var(--space-sm);
  color: var(--color-accent, #FFBD59);
}
.gvs-newsletter__desc {
  color: var(--color-text-secondary, #4A5568);
  margin-bottom: var(--space-md);
}
.gvs-newsletter__inner .gvs-btn {
  min-height: 2.75rem;
  min-width: 10rem;
}
.gvs-section--bg-dark-blue .gvs-newsletter__desc {
  color: rgba(255, 255, 255, 0.7);
}

/* Dark-bg overrides for new blocks */
.gvs-section--bg-dark-blue .gvs-accordion__item summary { color: var(--color-text-inverse, #F0F4FF); }
.gvs-section--bg-dark-blue .gvs-accordion__item .gvs-body-text { color: rgba(255, 255, 255, 0.8); }
.gvs-section--bg-dark-blue .gvs-agenda__time,
.gvs-section--bg-dark-blue .gvs-agenda__title { color: var(--color-text-inverse, #F0F4FF); }
.gvs-section--bg-dark-blue .gvs-agenda__cal-btn {
  border-color: rgba(255, 255, 255, 0.2);
  color: rgba(255, 255, 255, 0.6);
}
.gvs-section--bg-dark-blue .gvs-agenda__cal-btn:hover {
  background: var(--color-accent, #FFBD59);
  border-color: var(--color-accent, #FFBD59);
  color: var(--color-primary, #0F2B5B);
}
.gvs-section--bg-dark-blue .gvs-venue__name { color: var(--color-text-inverse, #F0F4FF); }
.gvs-section--bg-dark-blue .gvs-venue__address { color: rgba(255, 255, 255, 0.7); }
.gvs-section--bg-dark-blue .gvs-body-text { color: rgba(255, 255, 255, 0.8); }

/* ============================================================
   Privacy Policy page content
   ============================================================ */
.gvs-privacy-wrapper {
  max-width: 1100px;
  margin: 0 auto;
  padding: 2rem 1.25rem 3rem;
  width: 100%;
}
@media (min-width: 768px) {
  .gvs-privacy-wrapper {
    padding: 3rem 2rem 4rem;
  }
}
.gvs-privacy-content {
  font-size: 0.875rem;
  line-height: 1.8;
  color: var(--color-text-secondary, #4A5568);
  width: 100%;
  text-align: left;
}
.gvs-privacy-content,
.gvs-privacy-content * {
  max-width: 100%;
  box-sizing: border-box;
}
.gvs-privacy-content h2 {
  font-size: var(--text-privacy-h2);
  font-family: var(--font-body);
  color: var(--color-text-primary, #0F1729);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin: 2.5rem 0 0.75rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--color-border, #E2E8F0);
  width: 100%;
}
.gvs-privacy-content h3 {
  font-size: 1rem;
  font-family: var(--font-body);
  color: var(--color-text-primary, #0F1729);
  margin: 2rem 0 0.5rem;
  width: 100%;
}
.gvs-privacy-content p {
  margin: 0 0 0.75rem;
  font-size: 0.875rem;
  line-height: 1.8;
  width: 100%;
  display: block;
  text-align: left;
}
.gvs-privacy-content ul {
  margin: 0 0 0.75rem;
  padding-left: 1.5rem;
  width: 100%;
  list-style-type: disc;
}
.gvs-privacy-content ul ul {
  list-style-type: circle;
}
.gvs-privacy-content li {
  margin-bottom: 0.35rem;
  font-size: 0.875rem;
  line-height: 1.7;
  display: list-item;
}
.gvs-privacy-content a {
  color: var(--color-primary-light, #1B4BB4);
  text-decoration: none;
}
.gvs-privacy-content a:hover {
  text-decoration: underline;
}
/* !important required: must beat global * { font-weight: 400 !important } */
.gvs-privacy-content strong {
  font-weight: 600 !important;
}

/* ============================================================
   Disclaimer divider & collapsible
   ============================================================ */
.gvs-disclaimer {
  max-width: 100%;
  width: 100%;
}
.gvs-disclaimer__line {
  height: 1px;
  background: linear-gradient(to right, var(--color-accent, #FFBD59), var(--color-accent-warm, #FF8C42));
  margin-bottom: 1rem;
}
.gvs-disclaimer__details {
  cursor: pointer;
}
.gvs-disclaimer__summary {
  font-size: var(--text-disclaimer);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--color-primary-dark, #0F2B5B);
  list-style: none;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  user-select: none;
}
.gvs-disclaimer__summary svg {
  transition: transform 0.3s ease;
}
.gvs-disclaimer__details[open] .gvs-disclaimer__summary svg {
  transform: rotate(180deg);
}
.gvs-disclaimer__text {
  font-size: var(--text-disclaimer);
  line-height: 1.7;
  color: var(--color-text-secondary, #4A5568);
  max-width: 100%;
  margin-top: 0.75rem;
}

/* ============================================================
   Speaker Search & Filter
   ============================================================ */
.gvs-speaker-filter__input {
  appearance: none;
  -webkit-appearance: none;
  width: 100%;
  padding: 0.75rem 1rem 0.75rem 2.75rem;
  min-height: 2.75rem;
  border: 1px solid var(--color-border, #E2E8F0);
  border-radius: 9999px;
  font-size: var(--text-input);
  color: var(--color-text-primary, #0F1729);
  background: var(--color-surface, #F8F9FC);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
  outline: none;
}

.gvs-speaker-filter__input:focus {
  border-color: var(--color-primary-light, #1B4BB4);
  box-shadow: 0 0 0 3px rgba(27, 75, 180, 0.12);
}

.gvs-speaker-filter__input::placeholder {
  color: var(--color-text-secondary, #4A5568);
  opacity: 0.6;
}

.gvs-chip {
  appearance: none;
  -webkit-appearance: none;
  padding: 0.625rem 1rem;
  min-height: 2.75rem;
  border: 1px solid var(--color-border, #E2E8F0);
  border-radius: 9999px;
  font-size: 0.8125rem;
  color: var(--color-text-secondary, #4A5568);
  background: transparent;
  cursor: pointer;
  transition: all 0.2s ease;
  white-space: nowrap;
}

.gvs-chip:hover {
  border-color: var(--color-primary-light, #1B4BB4);
  color: var(--color-primary, #0F2B5B);
}

.gvs-chip--active {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}

.gvs-chip--active:hover {
  background: var(--color-primary-light, #1B4BB4);
  border-color: var(--color-primary-light, #1B4BB4);
  color: #fff;
}

/* ============================================================
   Reusable 5-Column Grid — Responsive
   Mobile: 2-col  |  Tablet (768+): 3-col  |  Desktop (1024+): 5-col
   ============================================================ */
.gvs-grid-5 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
}

.gvs-grid-5--tight {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 2px;
}

@media (min-width: 768px) {
  .gvs-grid-5 {
    grid-template-columns: repeat(3, 1fr);
  }
  .gvs-grid-5--tight {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (min-width: 1024px) {
  .gvs-grid-5 {
    grid-template-columns: repeat(4, 1fr);
  }
  .gvs-grid-5--tight {
    grid-template-columns: repeat(4, 1fr);
  }
}

@media (min-width: 1280px) {
  .gvs-grid-5 {
    grid-template-columns: repeat(5, 1fr);
  }
  .gvs-grid-5--tight {
    grid-template-columns: repeat(5, 1fr);
  }
}

/* ============================================================
   Partner logos — sizing, grayscale, hover
   Intentional override: Tailwind defines 3.5rem, we need 200px
   for the 5-column grid layout.
   ============================================================ */
img.gvs-partners__logo,
.gvs-marquee img {
  height: clamp(120px, 30vw, 200px);
  width: 100%;
  max-width: 100%;
  max-height: none;
  object-fit: contain;
  filter: grayscale(100%) opacity(0.7);
  transition: filter 0.3s ease;
}

img.gvs-partners__logo:hover,
.gvs-marquee img:hover {
  filter: none;
}

.gvs-partners__cell {
  height: clamp(120px, 30vw, 200px);
  padding: var(--space-2xs);
  background: transparent;
}

/* ============================================================
   Mobile menu — hide off-screen state properly
   Tailwind uses transform:translate(100%) + transition to hide,
   but this can flash on bfcache restore or CSS re-parse.
   visibility:hidden is the bulletproof guard.
   ============================================================ */
.gvs-mobile-menu {
  visibility: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px);
}
.gvs-mobile-menu--open {
  visibility: visible;
}

/* Close button inside the modal (a11y — reachable via focus trap).
   Visually hidden by default (hamburger X is the visible close affordance).
   Revealed on :focus-visible so keyboard users can see it when they Tab to it. */
.gvs-mobile-menu__close {
  position: absolute;
  top: calc(1.5rem + env(safe-area-inset-top, 0px));
  right: calc(1.5rem + env(safe-area-inset-right, 0px));
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  color: var(--color-text-inverse, #F0F4FF);
  background: transparent;
  border: none;
  cursor: pointer;
  transition: background 0.3s, opacity 0.2s;
  opacity: 0;
  pointer-events: none;
}
.gvs-mobile-menu__close:focus-visible {
  opacity: 1;
  pointer-events: auto;
  background: rgba(255, 255, 255, 0.1);
}

/* Fallback: ensure menu links are visible when menu is open
   (Tailwind sets opacity:0 for GSAP stagger animation;
    this catches the case where GSAP fails to load) */
.gvs-mobile-menu--open .gvs-mobile-menu__link,
.gvs-mobile-menu--open nav a {
  opacity: 1;
  transform: none;
}

/* ============================================================
   Mobile menu — white text on dark background
   ============================================================ */
.gvs-mobile-menu__link,
.gvs-mobile-menu__link:visited,
.gvs-mobile-menu a,
.gvs-mobile-menu nav a,
.gvs-mobile-menu .menu-item a {
  font-family: var(--font-display, 'Instrument Serif', Georgia, serif);
  font-size: var(--text-2xl, clamp(2rem, 1.2rem + 4vw, 4rem));
  color: var(--color-text-inverse, #F0F4FF);
  text-decoration: none;
  line-height: 1.3;
  min-height: 2.75rem;     /* 44px WCAG AA touch target */
  display: inline-flex;
  align-items: center;
  overflow-wrap: break-word;
  word-break: break-word;
  max-width: 90vw;
  transition: color 0.3s ease;
}

.gvs-mobile-menu__link:hover,
.gvs-mobile-menu a:hover,
.gvs-mobile-menu .menu-item a:hover {
  color: var(--color-accent, #FFBD59);
}

/* Touch feedback — :active for devices where :hover doesn't fire */
@media (hover: none) {
  .gvs-mobile-menu__link:active,
  .gvs-mobile-menu a:active,
  .gvs-mobile-menu .menu-item a:active {
    color: var(--color-accent, #FFBD59);
    opacity: 0.8;
  }
}

/* Strip default wp_nav_menu list styles inside mobile menu */
.gvs-mobile-menu li {
  list-style: none;
}

/* Landscape phones — compact menu to fit short viewports */
@media (max-height: 500px) and (orientation: landscape) {
  .gvs-mobile-menu nav {
    gap: var(--space-sm, 0.75rem);
  }
  .gvs-mobile-menu__link,
  .gvs-mobile-menu a,
  .gvs-mobile-menu nav a,
  .gvs-mobile-menu .menu-item a {
    font-size: var(--text-xl, clamp(1.5rem, 1.1rem + 2vw, 2.5rem));
  }
}

/* Reduced motion — instant open/close, no 600ms slide */
@media (prefers-reduced-motion: reduce) {
  .gvs-mobile-menu {
    transition: none;
  }
  .gvs-mobile-menu__link,
  .gvs-mobile-menu a,
  .gvs-mobile-menu nav a {
    transition: none;
  }
}

/* ============================================================
   Search Overlay — full-screen centered search
   ============================================================ */
.gvs-search-overlay {
  position: fixed;
  inset: 0;
  z-index: 250;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-surface-dark, #0A1628);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.4s var(--ease-smooth), visibility 0.4s;
}

.gvs-search-overlay--open {
  opacity: 1;
  visibility: visible;
}

.gvs-search-overlay__inner {
  text-align: center;
  width: 100%;
  max-width: 36rem;
  padding: var(--space-md, 1rem);
  padding-top: calc(var(--space-md, 1rem) + env(safe-area-inset-top, 0px));
}
@media (min-width: 768px) {
  .gvs-search-overlay__inner {
    padding: 2rem;
  }
}

.gvs-search-overlay__close {
  position: absolute;
  top: calc(1.5rem + env(safe-area-inset-top, 0px));
  right: calc(1.5rem + env(safe-area-inset-right, 0px));
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  color: var(--color-text-inverse, #F0F4FF);
  background: transparent;
  border: none;
  cursor: pointer;
  transition: background 0.3s;
}

.gvs-search-overlay__close:hover {
  background: rgba(255, 255, 255, 0.1);
}

.gvs-search-overlay__form {
  display: flex;
  flex-direction: column;
  align-items: center;
  position: relative;
  width: 100%;
}

.gvs-search-overlay__row {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
}

.gvs-search-overlay__row .gvs-search-input--overlay {
  flex: 1 1 0%;
  min-width: 0;
  width: auto;
  text-align: left;
}

.gvs-search-overlay__submit {
  flex-shrink: 0;
  width: 3rem;
  height: 3rem;
  padding: 0;
  border-radius: 9999px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ============================================================
   Shared search input styling
   ============================================================ */
.gvs-search-input {
  font-family: var(--font-body);
  font-size: 1rem;
  padding: 0.875rem 3rem 0.875rem 1.25rem;
  min-height: 2.75rem;
  border-radius: var(--radius-md, 0.75rem);
  border: 1px solid var(--color-border, #E2E8F0);
  background: var(--color-surface, #F8F9FC);
  color: var(--color-text-primary, #0F1729);
  width: 100%;
  outline: none;
  transition: border-color 0.3s, box-shadow 0.3s;
}

.gvs-search-input:focus {
  border-color: var(--color-accent, #FFBD59);
  box-shadow: 0 0 0 3px rgba(255, 189, 89, 0.2);
}

.gvs-search-input::placeholder {
  color: var(--color-text-secondary, #4A5568);
  opacity: 0.6;
}

/* Dark variant for headers / dark backgrounds */
.gvs-search-input--dark {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.15);
  color: var(--color-text-inverse, #F0F4FF);
}

.gvs-search-input--dark::placeholder {
  color: rgba(255, 255, 255, 0.5);
}

.gvs-search-input--dark:focus {
  border-color: var(--color-accent, #FFBD59);
  box-shadow: 0 0 0 3px rgba(255, 189, 89, 0.15);
}

/* Overlay variant — pill-shaped input with single accent border */
.gvs-search-input--overlay {
  font-size: var(--text-lg, 1.25rem);
  padding: 0.75rem 1.5rem;
  background: transparent;
  border: 1px solid var(--color-accent, #FFBD59);
  border-radius: 9999px;
  color: var(--color-text-inverse, #F0F4FF);
  text-align: left;
}

.gvs-search-input--overlay::placeholder {
  color: rgba(255, 255, 255, 0.4);
}

.gvs-search-input--overlay:focus {
  border-color: var(--color-accent, #FFBD59);
  box-shadow: 0 0 0 3px rgba(255, 189, 89, 0.15);
  outline: none;
}

/* Search suggestion chips */
.gvs-search-suggestions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 1.5rem;
}

.gvs-search-suggestions__label {
  font-size: var(--text-sm, 0.875rem);
  color: rgba(255, 255, 255, 0.4);
  font-family: var(--font-body);
  letter-spacing: 0.04em;
}

.gvs-search-chip {
  font-family: var(--font-body);
  font-size: var(--text-sm, 0.875rem);
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  padding: 0.375rem 0.875rem;
  border-radius: 9999px;
  border: 1px solid rgba(255, 255, 255, 0.15);
  background: rgba(255, 255, 255, 0.06);
  color: rgba(255, 255, 255, 0.7);
  cursor: pointer;
  transition: background 0.25s, color 0.25s, border-color 0.25s;
}

.gvs-search-chip:hover,
.gvs-search-chip:focus-visible {
  background: rgba(255, 189, 89, 0.15);
  border-color: var(--color-accent, #FFBD59);
  color: var(--color-accent, #FFBD59);
}

/* ============================================================
   Live Search Typeahead Dropdown
   ============================================================ */
.gvs-live-results {
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  margin-top: 0.5rem;
  background: var(--color-surface-dark, #0A1628);
  border: 1px solid rgba(255, 189, 89, 0.25);
  border-radius: 1.5rem;
  max-height: 24rem;
  overflow-y: auto;
  display: none;
  z-index: 300;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}

.gvs-live-results--open {
  display: block;
}

/* Loading spinner for live search */
.gvs-live-results--loading {
  display: block;
  text-align: center;
  padding: 1.5rem;
}
.gvs-live-results--loading::after {
  content: '';
  display: inline-block;
  width: 1.25rem;
  height: 1.25rem;
  border: 2px solid rgba(255, 255, 255, 0.2);
  border-top-color: var(--color-accent, #FFBD59);
  border-radius: 50%;
  animation: gvs-spin 0.6s linear infinite;
}
@keyframes gvs-spin {
  to { transform: rotate(360deg); }
}

.gvs-live-results--overlay {
  text-align: left;
  position: relative;
  top: auto;
  margin-top: 0.5rem;
}

.gvs-live-results__item {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.375rem 0.625rem;
  padding: 0.75rem 1rem;
  text-decoration: none;
  color: var(--color-text-inverse, #F0F4FF);
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
  transition: background 0.2s;
  min-height: 2.75rem;
}

.gvs-live-results__item:last-child {
  border-bottom: none;
}

.gvs-live-results__item:hover,
.gvs-live-results__item--active {
  background: rgba(255, 189, 89, 0.1);
}

.gvs-live-results__type {
  font-size: var(--text-type-label);
  font-family: var(--font-body);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-accent, #FFBD59);
  flex-shrink: 0;
  padding: 0.125rem 0.5rem;
  border: 1px solid rgba(255, 189, 89, 0.3);
  border-radius: 9999px;
  line-height: 1.4;
}

.gvs-live-results__title {
  font-family: var(--font-body);
  font-size: var(--text-sm, 0.875rem);
  font-weight: 500;
  color: var(--color-text-inverse, #F0F4FF);
}

.gvs-live-results__sub {
  font-family: var(--font-body);
  font-size: 0.75rem;
  color: rgba(255, 255, 255, 0.45);
  width: 100%;
}

.gvs-live-results mark {
  background: rgba(255, 189, 89, 0.25);
  color: inherit;
  border-radius: 2px;
  padding: 0 1px;
}

/* Submit button inside inline search */
.gvs-search-submit {
  position: absolute;
  right: 0.75rem;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: var(--color-text-inverse, #F0F4FF);
  opacity: 0.5;
  cursor: pointer;
  padding: 0.75rem;
  min-width: 2.75rem;
  min-height: 2.75rem;
  transition: opacity 0.3s;
}

.gvs-search-submit:hover {
  opacity: 1;
}

/* ============================================================
   Fix: Header container — full width so hamburger stays far-right
   ============================================================ */
.gvs-header .gvs-container--wide {
  width: 100%;
  max-width: 100%;
}

/* ============================================================
   Fix #10: Header logo — ensure it's visible
   ============================================================ */
.gvs-header__logo img {
  max-height: var(--logo-height);
  height: var(--logo-height);
  max-width: var(--logo-max-width);
  width: auto;
  object-fit: contain;
  display: block;
  visibility: visible;
  opacity: 1;
  transition: opacity 0.2s ease;
}

/* ============================================================
   Hamburger menu button — 3 visible lines
   ============================================================ */
#menuToggle {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
  margin-left: auto;
}
.gvs-hamburger__line {
  display: block;
  width: 2rem;
  height: 3px;
  background-color: var(--color-text-inverse, #F0F4FF);
  border-radius: 9999px;
}

/* CSS-only hamburger → X fallback (activates when GSAP is absent) */
.gvs-hamburger--open .gvs-hamburger__line:nth-child(1) {
  transform: translateY(8px) rotate(45deg);
}
.gvs-hamburger--open .gvs-hamburger__line:nth-child(2) {
  opacity: 0;
}
.gvs-hamburger--open .gvs-hamburger__line:nth-child(3) {
  transform: translateY(-8px) rotate(-45deg);
}

/* ============================================================
   WordPress Block Overrides
   ============================================================ */

/* Ensure full-width blocks break out of content container */
.wp-block-group.alignfull {
  width: 100vw;
  max-width: 100vw;
  margin-left: calc(-50vw + 50%);
}

/* Clean up block editor spacing */
.entry-content > *:not(.alignwide):not(.alignfull) {
  max-width: min(72rem, 90vw);
  margin-inline: auto;
}

/* ============================================================
   Feature Card Micro-Interactions
   Intentional override: Tailwind .gvs-card has shadow + lift hover.
   Design uses flat border + accent underline hover instead.
   ============================================================ */

.gvs-card {
  box-shadow: none;
  border: 1px solid rgba(0, 0, 0, 0.06);
  transition: border-color 0.5s cubic-bezier(0.22, 1, 0.36, 1),
              background-color 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}

.gvs-card::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, var(--color-primary-light, #1B4BB4), var(--color-accent, #FFBD59));
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

.gvs-card:hover {
  border-color: rgba(0, 0, 0, 0.10);
  background-color: #f8f9fc;
}

.gvs-card:hover::after {
  transform: scaleX(1);
}

/* Icon micro-interaction on card hover */
.gvs-feature-icon {
  background: var(--color-surface, #F8F9FC);
  transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1),
              background-color 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}

/* Inline SVG icon coloring via currentColor */
.gvs-feature-icon__svg {
  color: var(--color-primary, #0F2B5B);
  transition: color 0.4s ease;
}
.gvs-feature-icon__svg svg {
  width: 100%;
  height: 100%;
  display: block;
}
/* Recolor strokes and fills to inherit from parent color */
.gvs-feature-icon__svg svg [stroke]:not([stroke="none"]):not([stroke="0"]) {
  stroke: currentColor !important;
}
.gvs-feature-icon__svg svg [fill]:not([fill="none"]):not([fill="0"]) {
  fill: currentColor !important;
}

.gvs-card:hover .gvs-feature-icon {
  background-color: var(--color-primary, #0F2B5B);
}
.gvs-card:hover .gvs-feature-icon__svg {
  color: var(--color-accent, #FFBD59);
}

/* PNG icon — no filter; display in native colour */
.gvs-feature-icon img {
  width: 2rem;
  height: 2rem;
  object-fit: contain;
}

/* ============================================================
   Speaker Card Micro-Interactions
   ============================================================ */

.gvs-speaker-card {
  position: relative;
}

.gvs-speaker-card::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  max-width: 260px;
  height: 2px;
  background: linear-gradient(90deg, var(--color-primary-light, #1B4BB4), var(--color-accent, #FFBD59));
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

.gvs-speaker-card:hover::after {
  transform: scaleX(1);
}

.gvs-speaker-card .gvs-speaker-name {
  color: var(--color-primary, #0F2B5B);
  transition: color 0.5s cubic-bezier(0.22, 1, 0.36, 1);
  overflow-wrap: break-word;
  word-break: break-word;
}

.gvs-speaker-card:hover .gvs-speaker-name {
  color: var(--color-primary-light, #1B4BB4);
}

/* ============================================================
   Keynote Speaker — Visual Distinction
   ============================================================ */

/* Thin gold border around entire card */
.gvs-speaker-card--keynote {
  border: 1px solid var(--color-accent, #FFBD59);
  border-radius: var(--radius-lg, 1rem);
  padding: var(--space-md, 1rem);
}

/* Keynote badge — uppercase pill, gold→orange gradient */
.gvs-keynote-badge {
  display: inline-block;
  margin-top: 0.5rem;
  margin-bottom: 0.25rem;
  padding: 0.2rem 0.625rem;
  font-family: var(--font-body);
  font-size: var(--text-nano);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary, #0F2B5B);
  background: linear-gradient(90deg, var(--color-accent, #FFBD59), var(--color-accent-warm, #FF8C42));
  border-radius: 99px;
  line-height: 1;
}

/* No hover underline on keynote cards — the gold border is enough */
.gvs-speaker-card--keynote::after {
  display: none;
}

/* ============================================================
   CTA Banner — Label line override on dark background
   ============================================================ */

#cta .gvs-label::before {
  background: rgba(255, 255, 255, 0.5);
}

/* ============================================================
   Details — marker removal
   ============================================================ */

details summary::-webkit-details-marker {
  display: none;
}

/* ============================================================
   Custom Block Styles (forward-looking — for ACF Block Theme)
   These styles are not used by current templates but will apply
   once the theme is converted to use the WordPress block editor.
   ============================================================ */

/* Glass card block style */
.is-style-gvs-glass {
  background: rgba(255, 255, 255, 0.04);
  backdrop-filter: blur(24px) saturate(150%);
  -webkit-backdrop-filter: blur(24px) saturate(150%);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 1.5rem;
  padding: clamp(1.5rem, 1rem + 2.5vw, 3rem);
}

/* Elevated card block style */
.is-style-gvs-elevated {
  background: #fff;
  border-radius: 1.5rem;
  box-shadow: 0 4px 20px rgba(15, 43, 91, 0.1);
  padding: clamp(1.5rem, 1rem + 2.5vw, 3rem);
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1),
              box-shadow 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.is-style-gvs-elevated:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 40px rgba(15, 43, 91, 0.15);
}

/* Outline button style */
.is-style-gvs-outline .wp-block-button__link {
  background: transparent !important;
  border: 1.5px solid currentColor;
}

/* Ghost button style */
.is-style-gvs-ghost .wp-block-button__link {
  background: transparent !important;
  border: none;
  text-decoration: underline;
  text-underline-offset: 4px;
}

/* ============================================================
   WordPress / Tailwind @layer Cascade Fixes

   CRITICAL: TailwindCSS v4 puts ALL output in CSS @layer.
   Any UNLAYERED CSS always beats @layer'd styles regardless
   of specificity. We removed elements.link and elements.button
   from theme.json to stop WordPress generating overrides.

   These unlayered rules handle ONLY specific edge-cases.
   ============================================================ */

/* --- Reset WordPress core link styles (unlayered safety net) --- */
a:where(:not(.wp-element-button)) {
  color: inherit;
  text-decoration: inherit;
}

/* --- Body text links (editor content only) --- */
.entry-content a:not([class]),
.wp-block-post-content a:not([class]) {
  color: var(--color-primary-light, #1B4BB4);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.entry-content a:not([class]):hover,
.wp-block-post-content a:not([class]):hover {
  color: var(--color-accent, #FFBD59);
}

/* --- WordPress Block Buttons (fallback styling) --- */
.wp-element-button,
.wp-block-button__link {
  display: inline-flex;
  align-items: center;
  padding: var(--btn-pad);
  border-radius: var(--btn-radius);
  background: var(--color-primary, #0F2B5B);
  color: #fff;
  font-weight: 400;
  font-size: var(--btn-font);
  text-decoration: none;
  border: none;
  cursor: pointer;
  transition: all 0.3s;
}
.wp-element-button:hover,
.wp-block-button__link:hover {
  background: var(--color-accent, #FFBD59);
  color: var(--color-primary, #0F2B5B);
}

/* --- Partner logos: handled by inline styles + grid layout above --- */

/* --- Navigation Overlay (hamburger menu) --- */
.wp-block-navigation__responsive-container-open {
  color: var(--color-text-inverse, #F0F4FF) !important;
}
.wp-block-navigation__responsive-container-open svg {
  fill: var(--color-text-inverse, #F0F4FF);
  width: 28px;
  height: 28px;
}
.wp-block-navigation__responsive-container.is-menu-open {
  background: var(--color-surface-dark, #0A1628) !important;
  padding: 2rem;
}
.wp-block-navigation__responsive-container.is-menu-open
  .wp-block-navigation-item__content {
  color: var(--color-text-inverse, #F0F4FF) !important;
  font-size: 1.5rem;
  font-weight: 400;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.wp-block-navigation__responsive-container.is-menu-open
  .wp-block-navigation-item__content:hover {
  color: var(--color-accent, #FFBD59) !important;
}
.wp-block-navigation__responsive-container-close {
  color: var(--color-text-inverse, #F0F4FF) !important;
}

/* --- Footer nav menu links --- */
.gvs-footer-nav a,
.gvs-footer-nav li a {
  font-size: var(--text-small) !important;
  line-height: 1.5;
  padding-block: 0.375rem;
  display: flex;
  align-items: center;
  min-height: 2.75rem;    /* 44px WCAG AA touch target — mobile */
  color: rgba(255, 255, 255, 0.6);  /* WCAG AA: ~4.7:1 on --color-primary */
  text-decoration: none;
  transition: color 0.3s ease;
}
/* Tablet: slightly tighter */
@media (min-width: 768px) and (max-width: 1023px) {
  .gvs-footer-nav a,
  .gvs-footer-nav li a {
    min-height: 2.5rem;
    padding-block: 0.25rem;
  }
}
/* Desktop: tighter footer nav (mouse-pointer, no touch target needed) */
@media (min-width: 1024px) {
  .gvs-footer-nav a,
  .gvs-footer-nav li a {
    min-height: auto;
    padding-block: 0.1875rem;  /* 3px — compact spacing */
  }
}
.gvs-footer-nav a:hover,
.gvs-footer-nav li a:hover {
  color: var(--color-accent, #FFBD59);
}

.gvs-footer-bottom a {
  font-size: var(--text-micro) !important;
  color: rgba(255, 255, 255, 0.6);  /* WCAG AA: ~4.7:1 on --color-primary */
  text-decoration: none;
  transition: color 0.3s ease;
  min-height: 2.75rem;    /* 44px WCAG AA touch target */
  display: inline-flex;
  align-items: center;
}
.gvs-footer-bottom a:hover {
  color: rgba(255, 255, 255, 0.85);
}

/* --- Footer Social Icons — Clockwise border draw-on (SVG stroke) --- */
.gvs-social-link:hover .gvs-social-ring circle {
  stroke-dashoffset: 0 !important;
}

.gvs-social-link:hover {
  border-color: transparent !important;
}

/* --- Header logo: handled by fixes section above --- */

/* --- Header background + positioning ---
   Mobile/tablet (all sizes, portrait + landscape): sticky navy bar
   (stays at top on scroll, remains in document flow so no content overlap)
   >= 1440px (desktop): completely transparent, fixed position, NO bar ever */
.gvs-header {
  background: var(--color-primary, #0F2B5B);
  position: sticky;
  top: 0;
  z-index: 100;
}
@media (min-width: 1440px) {
  .gvs-header {
    position: fixed;
    background: transparent;
  }
  .gvs-header--scrolled {
    background: transparent;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
  }
}

/* --- WordPress Admin Bar offset (only matters when header is fixed) --- */
@media (min-width: 1440px) {
  .admin-bar .gvs-header {
    top: 32px;
  }
}

/* --- Remove rogue body top-padding (WordPress global styles) --- */
body {
  padding-top: 0 !important;
  margin-top: 0 !important;
}

/* ============================================================
   Page Transitions
   ============================================================ */
/* Page transition overlay removed — caused full-screen blue wipe on every navigation */

/* ============================================================
   Loading / Preloader — "Stairs" loader
   Adapted from CodePen (MIT License).
   ============================================================ */
.gvs-preloader {
  position: fixed;
  inset: 0;
  z-index: 10000;
  background: #0A1628;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.5rem;
  transition: opacity 0.6s ease, transform 0.6s ease;
  /* CSS-only fallback: auto-hide after 8 s if JS fails completely */
  animation: gvs-preloader-fallback 0.6s ease 8s forwards;
}

.gvs-preloader--hide {
  opacity: 0;
  transform: translateY(-40px);
  pointer-events: none;
  animation: none;  /* Cancel fallback animation — prevents Firefox flash */
}

@keyframes gvs-preloader-fallback {
  to { opacity: 0; visibility: hidden; pointer-events: none; }
}

.gvs-preloader__text {
  color: rgba(255, 255, 255, 0.5);
  font-size: 0.75rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}

/* ---- Stairs Loader (CodePen ispal/mVaaJe — exact animation) ---- */

.loader {
  position: relative;
  width: 75px;
  height: 100px;
}

.loader__bar {
  position: absolute;
  bottom: 0;
  width: 10px;
  height: 50%;
  background: #fff;
  transform-origin: center bottom;
  box-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
}

.loader__bar:nth-child(1) {
  left: 0;
  transform: scale(1, 0.2);
  animation: barUp1 4s infinite;
}
.loader__bar:nth-child(2) {
  left: 15px;
  transform: scale(1, 0.4);
  animation: barUp2 4s infinite;
}
.loader__bar:nth-child(3) {
  left: 30px;
  transform: scale(1, 0.6);
  animation: barUp3 4s infinite;
}
.loader__bar:nth-child(4) {
  left: 45px;
  transform: scale(1, 0.8);
  animation: barUp4 4s infinite;
}
.loader__bar:nth-child(5) {
  left: 60px;
  transform: scale(1, 1);
  animation: barUp5 4s infinite;
}

.loader__ball {
  position: absolute;
  bottom: 10px;
  left: 0;
  width: 10px;
  height: 10px;
  background: #fff;
  border-radius: 50%;
  animation: ball 4s infinite;
}

@keyframes ball {
  0%   { transform: translate(0, 0); }
  5%   { transform: translate(8px, -14px); }
  10%  { transform: translate(15px, -10px); }
  17%  { transform: translate(23px, -24px); }
  20%  { transform: translate(30px, -20px); }
  27%  { transform: translate(38px, -34px); }
  30%  { transform: translate(45px, -30px); }
  37%  { transform: translate(53px, -44px); }
  40%  { transform: translate(60px, -40px); }
  50%  { transform: translate(60px, 0); }
  57%  { transform: translate(53px, -14px); }
  60%  { transform: translate(45px, -10px); }
  67%  { transform: translate(37px, -24px); }
  70%  { transform: translate(30px, -20px); }
  77%  { transform: translate(22px, -34px); }
  80%  { transform: translate(15px, -30px); }
  87%  { transform: translate(7px, -44px); }
  90%  { transform: translate(0, -40px); }
  100% { transform: translate(0, 0); }
}

@keyframes barUp1 {
  0%        { transform: scale(1, 0.2); }
  40%       { transform: scale(1, 0.2); }
  50%       { transform: scale(1, 1); }
  90%       { transform: scale(1, 1); }
  100%      { transform: scale(1, 0.2); }
}
@keyframes barUp2 {
  0%        { transform: scale(1, 0.4); }
  40%       { transform: scale(1, 0.4); }
  50%       { transform: scale(1, 0.8); }
  90%       { transform: scale(1, 0.8); }
  100%      { transform: scale(1, 0.4); }
}
@keyframes barUp3 {
  0%        { transform: scale(1, 0.6); }
  100%      { transform: scale(1, 0.6); }
}
@keyframes barUp4 {
  0%        { transform: scale(1, 0.8); }
  40%       { transform: scale(1, 0.8); }
  50%       { transform: scale(1, 0.4); }
  90%       { transform: scale(1, 0.4); }
  100%      { transform: scale(1, 0.8); }
}
@keyframes barUp5 {
  0%        { transform: scale(1, 1); }
  40%       { transform: scale(1, 1); }
  50%       { transform: scale(1, 0.2); }
  90%       { transform: scale(1, 0.2); }
  100%      { transform: scale(1, 1); }
}

/* ============================================================
   Unified Modal Panel Styles
   ============================================================ */

/* Shared modal panel — all 3 popups */
.gvs-modal-panel {
  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  max-width: none;
  margin-left: 0;
  background: #fff;
  border-radius: 0;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.35);
  overflow: hidden;                /* clips photo to rounded corners */
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-y: contain;
  opacity: 0;
  transform: translateX(100%);
}

/* Tablet PORTRAIT: wider centred panel, scrollable content */
@media (min-width: 768px) and (orientation: portrait) {
  .gvs-modal-panel {
    position: fixed;
    top: 2rem;
    bottom: 2rem;
    right: 2rem;
    left: 2rem;
    max-width: 28rem;
    margin-inline: auto;
    border-radius: 1.5rem;
  }
}

/* Tablet LANDSCAPE + Desktop: right-side panel */
@media (min-width: 768px) and (orientation: landscape) {
  .gvs-modal-panel {
    position: absolute;
    top: 7rem;
    bottom: 2.5rem;
    right: 2.5rem;
    left: 2.5rem;
    max-width: 28rem;
    margin-left: auto;
    border-radius: 2.5rem;
  }
}

/* Responsive video container */
.gvs-event-modal__video {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 */
  height: 0;
  overflow: hidden;
  border-radius: 0.75rem;
  background: #000;
  margin-bottom: 1.5rem;
}

.gvs-event-modal__video iframe,
.gvs-event-modal__video img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 0;
  object-fit: cover;
}

/* Video placeholder when no YouTube ID */
.gvs-event-modal__video-placeholder {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, var(--color-primary, #0F2B5B) 0%, var(--color-primary-light, #1B4BB4) 100%);
  color: rgba(255, 255, 255, 0.3);
  border-radius: 0.75rem;
}

/* Meta info row */
.gvs-event-modal__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  margin-bottom: 1.5rem;
  padding-bottom: 1.5rem;
  border-bottom: 1px solid var(--color-border, #E2E8F0);
}

/* Smaller body text inside all modals (event, speaker, partner, year) */
.gvs-event-modal__content .gvs-body-text,
.gvs-speaker-modal__content .gvs-body-text,
.gvs-partner-modal__panel .gvs-body-text,
.gvs-year-modal__content .gvs-body-text {
  font-size: var(--text-caption);
  text-align: left;
}

.gvs-event-modal__meta-item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.875rem;
  color: var(--color-text-secondary, #4A5568);
}

.gvs-event-modal__meta-item svg {
  flex-shrink: 0;
  opacity: 0.6;
}

/* Agenda link */
.gvs-event-modal__agenda-link {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  margin-top: 1.5rem;
  padding: 0.625rem 1.25rem;
  min-height: 2.75rem;          /* 44px WCAG AA touch target */
  font-size: var(--text-small);
  font-weight: 400;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--color-primary, #0F2B5B);
  border: 1.5px solid var(--color-border, #E2E8F0);
  border-radius: 0.5rem;
  transition: all 0.3s;
  text-decoration: none;
}

.gvs-event-modal__agenda-link:hover {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}

/* ============================================================
   Educational Resources Section
   ============================================================ */

/* Unified "Full Article" pill button */
.gvs-resource-article-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  border: 1px solid var(--color-secondary, #94A3B8);
  background: transparent;
  color: var(--color-text-primary, #0F1729);
  padding: 0.8125rem 1.75rem;
  min-height: 2.75rem;
  font-size: var(--text-micro);
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  text-decoration: none;
  border-radius: var(--btn-radius);
  transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

.gvs-resource-article-btn:hover {
  background: var(--color-primary, #0F2B5B);
  color: #fff;
  border-color: var(--color-primary, #0F2B5B);
}

/* Resource card entrance animation */
.gvs-resource-card {
  transition: opacity 0.5s ease, transform 0.5s ease;
}

/* Search result CTA spacing */
.gvs-resource-card .gvs-resource-article-btn {
  margin-top: var(--space-sm, 0.75rem);
  margin-bottom: var(--space-xs, 0.5rem);
}

/* Search results group spacing */
.gvs-search-group + .gvs-search-group {
  margin-top: var(--space-xl, 2rem);
}

/* LinkedIn share button */
.gvs-resource-linkedin {
  transition: background-color 0.3s, transform 0.3s;
}

.gvs-resource-linkedin:hover {
  transform: scale(1.1);
}

/* Remove last border */
.gvs-resources-list .gvs-resource-card:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

/* Article list on archive pages — single column with consistent spacing */
@media (min-width: 1024px) {
  .gvs-resources-list--archive {
    max-width: 56rem;
    margin-inline: auto;
  }
}

/* Year filter pills — same visual as "Full Article" button */
.gvs-year-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--color-secondary, #94A3B8);
  background: transparent;
  color: var(--color-text-primary, #0F1729);
  padding: 0.8125rem 1.75rem;
  min-height: 2.75rem;
  font-size: var(--text-micro);
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  text-decoration: none;
  border-radius: var(--btn-radius);
  cursor: pointer;
  transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

.gvs-year-pill:hover {
  background: var(--color-primary, #0F2B5B);
  color: #fff;
  border-color: var(--color-primary, #0F2B5B);
}

.gvs-year-pill--active {
  background: var(--color-primary, #0F2B5B);
  color: #fff;
  border-color: var(--color-primary, #0F2B5B);
}

/* PDF Viewer — 3-tier responsive
   Mobile  (<768px):  .gvs-pdf-viewer--mobile  (open-in-reader card)
   Tablet  (768–1023px): .gvs-pdf-viewer--tablet (open-in-reader card)
   Desktop (≥1024px): .gvs-pdf-viewer--desktop (native iframe) */
.gvs-pdf-viewer--desktop {
  display: none;
}
.gvs-pdf-viewer--tablet {
  display: none;
}
.gvs-pdf-viewer--mobile {
  display: block;
}
@media (min-width: 48rem) {
  .gvs-pdf-viewer--mobile {
    display: none;
  }
  .gvs-pdf-viewer--tablet {
    display: block;
  }
}
@media (min-width: 64rem) {
  .gvs-pdf-viewer--tablet {
    display: none;
  }
  .gvs-pdf-viewer--desktop {
    display: block;
  }
}
.gvs-pdf-viewer--desktop {
  clip-path: inset(0 round 0.5rem);
}
.gvs-pdf-viewer__iframe {
  height: 80vh;
  min-height: 400px;
  background: var(--color-surface, #F8F9FC);
}

/* Parallax banner — fixed-image effect
   clip-path:inset(0) creates a containing block for the fixed-position
   image, so it stays viewport-locked but only shows within the section's
   rectangle. Content above/below scrolls over it naturally. */
.gvs-parallax-banner {
  position: relative;
  height: 60vh;
  min-height: 250px;
  clip-path: inset(0);       /* Clip fixed child to section bounds */
}
.gvs-parallax-banner__media {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh !important;  /* Fill the viewport — clip-path crops it */
  object-fit: cover;
  z-index: -1;
  transition: none !important;
}
.gvs-parallax-banner__overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
}

/* ============================================================
   Pagination (Educational Resources archive)
   ============================================================ */
ul.page-numbers {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  list-style: none;
  padding: 0;
  margin: 0;
}

ul.page-numbers li {
  margin: 0;
}

ul.page-numbers li a,
ul.page-numbers li span {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.75rem;
  height: 2.75rem;
  padding: 0.5rem 0.75rem;
  border: 1.5px solid var(--color-border, #E2E8F0);
  border-radius: 0.5rem;
  font-size: var(--text-caption);
  font-weight: 500;
  color: var(--color-primary, #0F2B5B);
  text-decoration: none;
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}

ul.page-numbers li a:hover {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}

ul.page-numbers li span.current {
  background: var(--color-primary, #0F2B5B);
  border-color: var(--color-primary, #0F2B5B);
  color: #fff;
}

/* ============================================================
   Articles Scroll Container (homepage content-grid block)
   Mirrors the event timeline vertical scroll pattern.
   ============================================================ */
.gvs-articles-scroll {
  max-height: min(620px, 70vh);
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior-y: auto;
  scroll-behavior: smooth;
  position: relative;
  padding-right: 1.5rem;
  -webkit-mask-image: linear-gradient(to bottom, #000 92%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 92%, transparent 100%);
  scrollbar-width: thin;
  scrollbar-color: var(--color-primary, #0F2B5B) var(--color-border, #E2E8F0);
}

/* Custom scrollbar — matches timeline design */
.gvs-articles-scroll::-webkit-scrollbar { width: 3px; }
.gvs-articles-scroll::-webkit-scrollbar-track { background: var(--color-border, #E2E8F0); border-radius: 3px; }
.gvs-articles-scroll::-webkit-scrollbar-thumb { background: var(--color-primary, #0F2B5B); border-radius: 3px; }

/* Mobile: show all articles — no internal scroll trap */
@media (max-width: 767px) {
  .gvs-articles-scroll {
    max-height: none;
    overflow-y: visible;
    -webkit-mask-image: none;
    mask-image: none;
    padding-right: 0;
  }
  .gvs-resource-excerpt { -webkit-line-clamp: 3; }
}

/* Remove bottom fade when scrolled to end */
.gvs-articles-scroll--at-end {
  -webkit-mask-image: none;
  mask-image: none;
}

/* line-clamp-6 fallback (not in compiled Tailwind safelist) */
.line-clamp-6 {
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Article excerpt readability */
.gvs-resource-excerpt {
  text-align: justify;
  max-width: none;
}
@media (max-width: 767px) {
  .gvs-resource-excerpt { text-align: left; }
}

/* ============================================================
   Parallax Banner — mobile height reduction
   Same position:fixed + clip-path:inset(0) mechanism as desktop
   (supported on iOS 16+). Just a shorter section window.
   ============================================================ */
@media (max-width: 767px) {
  .gvs-parallax-banner {
    height: 35vh;
    min-height: 180px;
  }
}

/* ============================================================
   Privacy Page — Table of Contents
   ============================================================ */
.gvs-privacy-toc {
  background: var(--color-surface, #F8F9FC);
  border: 1px solid var(--color-border, #E2E8F0);
  border-radius: 0.75rem;
  padding: 1.5rem 2rem;
  margin-bottom: 2.5rem;
}
.gvs-privacy-toc__title {
  font-size: 1rem;
  font-weight: 400;
  margin: 0 0 0.75rem;
  color: var(--color-primary, #0F2B5B);
}
.gvs-privacy-toc__list {
  list-style: decimal;
  padding-left: 1.25rem;
  margin: 0;
}
.gvs-privacy-toc__list li {
  margin-bottom: 0.35rem;
}
.gvs-privacy-toc__list a {
  color: var(--color-primary-light, #1B4BB4);
  text-decoration: none;
  font-size: var(--text-input);
  display: inline-block;
  padding-block: 0.25rem;
  min-height: 2.75rem;
  line-height: 2rem;
}
.gvs-privacy-toc__list a:hover {
  text-decoration: underline;
}

/* ============================================================
   Back to Top Button
   ============================================================ */
.gvs-back-to-top {
  position: fixed;
  bottom: calc(2rem + env(safe-area-inset-bottom, 0px));
  right: calc(2rem + env(safe-area-inset-right, 0px));
  z-index: 90;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.15);
  background: var(--color-primary, #0F2B5B);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  opacity: 0;
  visibility: hidden;
  transform: translateY(10px);
  transition: opacity 0.3s, visibility 0.3s, transform 0.3s, background 0.3s;
  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
}
.gvs-back-to-top--visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.gvs-back-to-top:hover {
  background: var(--color-accent, #FFBD59);
  color: var(--color-primary, #0F2B5B);
}

/* ============================================================
   Touch Devices — :active feedback for interactive elements
   On touch screens :hover doesn't fire, so we duplicate key
   hover effects onto :active for tactile feedback.
   ============================================================ */
@media (hover: none) {
  .gvs-btn:active {
    opacity: 0.85;
  }
  .gvs-resource-article-btn:active {
    background: var(--color-primary, #0F2B5B);
    color: #fff;
    border-color: var(--color-primary, #0F2B5B);
  }
  .gvs-year-pill:active {
    background: var(--color-primary, #0F2B5B);
    color: #fff;
    border-color: var(--color-primary, #0F2B5B);
  }
  .gvs-resource-linkedin:active {
    background-color: #0077B5;
    transform: scale(1.1);
  }
  .gvs-timeline-btn:active {
    background: var(--color-primary, #0F2B5B);
    border-color: var(--color-primary, #0F2B5B);
    color: #fff;
  }
  .gvs-back-to-top:active {
    background: var(--color-accent, #FFBD59);
    color: var(--color-primary, #0F2B5B);
  }
}

/* ============================================================
   Reduced Motion — respect user preference
   The grain overlay's noise texture can cause visual fatigue
   for users sensitive to motion. Hide it entirely and disable
   any CSS animations that aren't handled by Tailwind's layer.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .grain::after {
    display: none;
  }
  .gvs-back-to-top {
    transition: none;
  }
}

/* ============================================================
   Page Transitions (View Transitions API)
   Cross-document same-origin transitions. Degrades to instant
   page load in unsupported browsers (no JS required).
   ============================================================ */
@view-transition {
  navigation: auto;
}

::view-transition-old(root) {
  animation: gvs-fade-out 200ms ease-out;
}

::view-transition-new(root) {
  animation: gvs-fade-in 300ms ease-in;
}

@keyframes gvs-fade-out {
  from { opacity: 1; }
  to   { opacity: 0; }
}

@keyframes gvs-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Disable page transitions for reduced-motion users */
@media (prefers-reduced-motion: reduce) {
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation: none;
  }
}

/* ============================================================
   Past Event Years — Year Tile Grid
   ============================================================ */
.gvs-year-tile {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem 1rem;
  min-height: 5rem;
  cursor: pointer;
  transition: transform 0.4s var(--ease-smooth, cubic-bezier(.16, 1, .3, 1)),
              box-shadow 0.4s var(--ease-smooth, cubic-bezier(.16, 1, .3, 1)),
              border-color 0.4s var(--ease-smooth, cubic-bezier(.16, 1, .3, 1));
  border: 1.5px solid rgba(255, 255, 255, 0.15);
  will-change: transform;
  position: relative;
  overflow: hidden;
}
/* Shine sweep on hover — same as .gvs-btn */
.gvs-year-tile::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.06), transparent);
  transition: left 0.6s var(--ease-smooth, cubic-bezier(.16, 1, .3, 1));
}
.gvs-year-tile:hover::before {
  left: 100%;
}
.gvs-year-tile:hover,
.gvs-year-tile:focus-visible {
  transform: translateY(-2px);
  border-color: rgba(255, 255, 255, 0.35);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
}
.gvs-year-tile:focus-visible {
  outline: 2px solid var(--color-accent, #FFBD59);
  outline-offset: 3px;
}
.gvs-year-tile__year {
  font-family: var(--font-display, 'Instrument Serif', serif);
  font-size: clamp(1rem, 0.85rem + 1vw, 1.5rem);
  color: var(--color-text-inverse, #F0F4FF);
  line-height: 1;
  letter-spacing: -0.01em;
}

/* Light background variants (white, grey, light-blue) */
.gvs-section--bg-white .gvs-year-tile,
.gvs-section--bg-grey .gvs-year-tile,
.gvs-section--bg-light-blue .gvs-year-tile {
  border-color: rgba(0, 0, 0, 0.06);
  background: #fff;
  box-shadow: none;
}
/* Gradient underline — hidden by default, sweeps in on hover */
.gvs-section--bg-white .gvs-year-tile::after,
.gvs-section--bg-grey .gvs-year-tile::after,
.gvs-section--bg-light-blue .gvs-year-tile::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, var(--color-primary-light, #1B4BB4), var(--color-accent, #FFBD59));
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
.gvs-section--bg-white .gvs-year-tile::before,
.gvs-section--bg-grey .gvs-year-tile::before,
.gvs-section--bg-light-blue .gvs-year-tile::before {
  background: linear-gradient(90deg, transparent, rgba(15, 43, 91, 0.03), transparent);
}
.gvs-section--bg-white .gvs-year-tile:hover,
.gvs-section--bg-white .gvs-year-tile:focus-visible,
.gvs-section--bg-grey .gvs-year-tile:hover,
.gvs-section--bg-grey .gvs-year-tile:focus-visible,
.gvs-section--bg-light-blue .gvs-year-tile:hover,
.gvs-section--bg-light-blue .gvs-year-tile:focus-visible {
  transform: translateY(-2px);
  border-color: rgba(0, 0, 0, 0.10);
  background-color: #f8f9fc;
  box-shadow: none;
}
.gvs-section--bg-white .gvs-year-tile:hover::after,
.gvs-section--bg-white .gvs-year-tile:focus-visible::after,
.gvs-section--bg-grey .gvs-year-tile:hover::after,
.gvs-section--bg-grey .gvs-year-tile:focus-visible::after,
.gvs-section--bg-light-blue .gvs-year-tile:hover::after,
.gvs-section--bg-light-blue .gvs-year-tile:focus-visible::after {
  transform: scaleX(1);
}
.gvs-section--bg-white .gvs-year-tile__year,
.gvs-section--bg-grey .gvs-year-tile__year,
.gvs-section--bg-light-blue .gvs-year-tile__year {
  color: var(--color-primary, #0F2B5B);
}

/* Search icon inside filter inputs — replaces inline style= */
.gvs-search-icon {
  position: absolute;
  left: 1rem;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
  width: 18px;
  height: 18px;
  color: var(--color-text-secondary, #4A5568);
}

/* ============================================================
   Print Stylesheet
   Strip decorative backgrounds, hide navigation & interactive
   elements, ensure readable text on white paper.
   ============================================================ */
@media print {
  @page {
    margin: 2cm 1.5cm;
  }

  /* Reveal all GSAP-hidden content */
  .gsap-reveal,
  .gsap-reveal-left,
  .gsap-reveal-right,
  .gsap-reveal-scale {
    opacity: 1 !important;
    transform: none !important;
  }

  /* Hide non-printable elements */
  .gvs-header,
  .gvs-mobile-menu,
  .gvs-search-overlay,
  .gvs-preloader,
  .gvs-back-to-top,
  .gvs-scroll-indicator,
  .gvs-cookie-banner,
  .gvs-speaker-modal,
  .gvs-partner-modal,
  .gvs-event-modal,
  .gvs-year-modal,
  .gvs-blob,
  .gvs-btn--pulse,
  .gvs-speaker-filter,
  .gvs-speaker-filter__empty,
  .gvs-agenda__cal-btn,
  .gvs-social-link,
  .gvs-resource-linkedin,
  #eventCountdown,
  [data-modal-close],
  .gvs-hero__scroll-cta,
  .grain::after,
  video,
  iframe {
    display: none !important;
  }

  /* Reset dark backgrounds to white for ink savings */
  .gvs-hero,
  .gvs-hero--compact,
  .gvs-hero--article,
  .gvs-section--dark,
  .gvs-section--bg-dark-blue,
  .gvs-cta-banner,
  footer[role="contentinfo"],
  .gvs-hero__bg,
  .gvs-hero__overlay {
    background: #fff !important;
    color: #000 !important;
  }

  /* Fix inverse text on now-white backgrounds */
  .gvs-hero__title,
  .gvs-hero__subtitle,
  .gvs-label,
  [class*="text-[var(--color-text-inverse"] {
    color: #000 !important;
  }

  /* Ensure readable body text */
  body {
    font-size: 12pt;
    line-height: 1.5;
    color: #000;
    background: #fff;
  }

  /* Show link URLs after anchor text */
  a[href]::after {
    content: " (" attr(href) ")";
    font-size: 0.8em;
    font-weight: normal;
    color: #555;
  }
  /* Skip internal anchors, JS links, and nav/footer links */
  a[href^="#"]::after,
  a[href^="javascript:"]::after,
  .gvs-footer a::after,
  .gvs-nav a::after,
  .gvs-btn::after {
    content: "";
  }

  /* Prevent page breaks inside content blocks */
  .gvs-card,
  .gvs-speaker-card,
  .gvs-accordion__item,
  .gvs-timeline__item,
  .gvs-agenda__item,
  .gvs-resource-card {
    break-inside: avoid;
  }

  /* Section breaks — start key sections on new pages */
  .gvs-section {
    break-before: auto;
  }

  /* Constrain images to page width */
  img {
    max-width: 100% !important;
    height: auto !important;
  }

  /* Show all speaker cards (undo any filter hiding) */
  .gvs-speaker-card {
    display: block !important;
  }
}
