@import url("https://use.typekit.net/gsa1yet.css");
/* ─── Stratus Carta — flowing marketing site ──────────────────────────── */

/* Gotham (self-hosted, licensed via Hoefler & Co) */
:root {
  --teal: #0AAFB5;
  --teal-light: #5BC2C6;
  --navy: #232F5F;
  --orange: #FCB03C;
  --purple: #7A6CC0;
  --cream: #FAF7F0;
  --white: #FEFEFE;
  --card-tint: #C9E8EA;
  --font: 'Gotham', 'Montserrat', -apple-system, sans-serif;
  --header-h: 88px;
  --panel-gap: clamp(28px, 4vw, 56px);
  --panel-inset: clamp(12px, 2vw, 28px);
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  /* keep the gutter reserved so locking scroll for a modal doesn't shift the layout */
  scrollbar-gutter: stable;
}
/* Lenis owns the scroll once it loads; native smooth-scroll would fight its rAF loop.
   The rule above stays as the no-JS / CDN-failure fallback. */
html.has-lenis { scroll-behavior: auto; }
html.lenis, html.lenis body { height: auto; }
html.lenis-stopped { overflow: hidden; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }

body {
  font-family: var(--font);
  background: var(--cream);
  color: var(--navy);
}

/* ── Horizontal overflow guard ──
   `overflow-x: hidden` on <body> alone was not holding on mobile. Two reasons:
   1. `overflow-x: hidden` forces the other axis to compute as `overflow-y: auto`,
      which turns <body> into its own scroll container. On Android that nests a
      second scroller inside the viewport one and it gets its own sideways pan.
   2. `.hero` is `position: sticky`, and sticky resolves against the nearest
      scrolling ancestor. Making <body> a scroller re-parented the hero's sticky
      context away from the viewport.
   `overflow-x: clip` clips without creating a scroll container, so overflow-y stays
   `visible`, sticky keeps resolving against the viewport, and Lenis is untouched.
   Set on <html> as well: the guard has to sit on whichever element ends up as the
   viewport-propagating one. `hidden` stays as the fallback for older engines. */
html, body { overflow-x: hidden; }
@supports (overflow: clip) {
  html, body { overflow-x: clip; }
}

/* ── Splash ── */
.splash {
  position: fixed; inset: 0; z-index: 200;
  background: var(--white);
  display: flex; align-items: center; justify-content: center;
}
.splash-logo { width: min(44vw, 560px); }

/* ── Header ── */
.site-header {
  position: fixed; top: 0; left: 0; right: 0; z-index: 100;
  height: var(--header-h);
  display: flex; align-items: center; gap: 36px;
  padding: 0 clamp(20px, 3.5vw, 48px);
  /* Translucent dark glass: one bar that stays legible over every ground the site
     uses — cream page heroes, the teal home hero, video, and all four panel colours. */
  background: rgba(20, 27, 56, .72);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  box-shadow: none;
}
.header-logo-link { line-height: 0; margin-right: auto; }
.header-logo { width: 156px; opacity: 0; }
.header-nav { display: flex; gap: 34px; }
.header-nav a {
  color: var(--white); text-decoration: none;
  font-size: 17px; font-weight: 500; letter-spacing: .01em;
  opacity: .82; transition: opacity .18s;
}
.header-nav a:hover { opacity: 1; }
.btn-cta {
  background: transparent; color: var(--navy);
  text-decoration: none; font-weight: 500; font-size: 15px;
  letter-spacing: -0.01em;
  padding: 0 1.6rem; height: 2.9rem; border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center;
  position: relative; isolation: isolate;
  transition: transform .18s, box-shadow .18s;
}
.btn-cta:hover { transform: translateY(-2px); box-shadow: 0 10px 26px rgba(35, 47, 95, .22); }
.site-header .btn-cta { font-size: 15px; height: 2.8rem; padding: 0 1.5rem; }
.btn-cta--lg { font-size: 1.2rem; height: 3.5rem; padding: 0 2rem; }
.btn-cta--navy { color: var(--white); }
.btn-cta--navy:hover { box-shadow: 0 10px 26px rgba(35, 47, 95, .3); }

/* Layered hover: three brand discs bloom out from the centre and settle back on the
   base colour, while the label swaps for a duplicate sliding up from below.
   Layer markup is injected by wireButtonFx() so the 30-odd call sites stay plain. */
.button-bg {
  position: absolute; inset: 0; z-index: -1;
  overflow: hidden; border-radius: inherit;
  background: var(--orange);
}
.btn-cta--navy .button-bg { background: var(--navy); }
.button-bg-layers {
  position: absolute; left: 50%; top: -60%;
  transform: translateX(-50%);
  aspect-ratio: 1 / 1; width: max(200%, 10rem);
  display: block;
}
.button-bg-layer {
  position: absolute; inset: 0; display: block;
  border-radius: 9999px; transform: scale(0);
}
.button-bg-layer--1 { background: var(--purple); }
.button-bg-layer--2 { background: var(--teal); }
/* final layer settles on white, so the gold button reads white while hovered
   (navy label keeps strong contrast); the navy variant still settles on navy */
.button-bg-layer--3 { background: var(--white); }
.btn-cta--navy .button-bg-layer--3 { background: var(--navy); }

/* clipped to the line box so the outgoing and incoming labels read as one rolling
   swap instead of two offset copies overlapping mid-transition. line-height gives
   descenders (y, g, p) room inside the clip. */
.button-inner { position: relative; display: block; overflow: hidden; line-height: 1.45; }
.button-inner-static, .button-inner-hover { display: block; pointer-events: none; white-space: nowrap; }
.button-inner-hover { position: absolute; top: 0; left: 0; opacity: 0; transform: translateY(70%); }

.btn-cta:hover .button-inner-static {
  opacity: 0; transform: translateY(-70%);
  transition: transform 1.4s cubic-bezier(.19, 1, .22, 1), opacity .3s linear;
}
.btn-cta:hover .button-inner-hover {
  opacity: 1; transform: translateY(0);
  transition: transform 1.4s cubic-bezier(.19, 1, .22, 1), opacity 1.4s cubic-bezier(.19, 1, .22, 1);
}
.btn-cta:hover .button-bg-layer {
  transition: transform 1.3s cubic-bezier(.19, 1, .22, 1), opacity .3s linear;
}
.btn-cta:hover .button-bg-layer--1 { transform: scale(1); }
.btn-cta:hover .button-bg-layer--2 { transition-delay: .1s; transform: scale(1); }
.btn-cta:hover .button-bg-layer--3 { transition-delay: .2s; transform: scale(1); }

@media (prefers-reduced-motion: reduce) {
  .btn-cta, .button-bg-layer, .button-inner-static, .button-inner-hover { transition: none !important; }
  .btn-cta:hover { transform: none; }
  .btn-cta:hover .button-bg-layer { transform: scale(0); }
  .btn-cta:hover .button-inner-static { opacity: 1; transform: none; }
  .btn-cta:hover .button-inner-hover { opacity: 0; }
}
.btn-ghost {
  color: var(--navy); text-decoration: none; font-weight: 500; font-size: 15px;
  padding: 16px 10px; opacity: .75; transition: opacity .18s;
}
.btn-ghost:hover { opacity: 1; }

/* ── Fixed ribbon background ── */
.ribbons { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.ribbon { position: absolute; opacity: .92; }
.ribbon--teal   { width: 120vw; left: -10vw; top: -30vh; }
.ribbon--navy   { width: 118vw; left: -9vw; top: -8vh; }
.ribbon--orange { width: 46vw; right: -12vw; top: -14vh; }
.ribbon--purple { width: 42vw; left: -15vw; top: 4vh; }
.ribbon--arc    { width: 40vw; right: -7vw; bottom: -24vh; }

/* Montserrat here on purpose: Chromium mis-lays-out this Gotham build on SVG
   textPath at non-zero startOffset (glyphs vanish), in any format. Montserrat
   Bold is the closest geometric sans and renders flawlessly on paths. */
.ribbon-text {
  font-family: 'Montserrat', sans-serif;
  font-weight: 700;
  letter-spacing: .08em;
  font-size: 30px;
  dominant-baseline: middle;
}
.ribbon--teal .ribbon-text, .ribbon--navy .ribbon-text { font-size: 27px; }
.ribbon-text--white   { fill: var(--white); }
.ribbon-text--navy    { fill: var(--navy); }
.ribbon-text--onlight { fill: var(--white); }

main { position: relative; z-index: 1; }

/* ── Decorative blobs inside panels (matches the social-media style:
     organic shapes with an offset outline ring, like the logo) ── */
.deco {
  position: absolute; pointer-events: none; z-index: 0;
  will-change: transform;
}
.deco-circle { border-radius: 58% 42% 55% 45% / 48% 60% 40% 52%; }
.deco-circle::after {
  content: ''; position: absolute; inset: 0;
  border-radius: inherit;
  border: none;
  transform: translate(1.8%, -2.2%) scale(1.015) rotate(2deg);
}
.panel--navy .deco-circle::after { border-color: rgba(254, 254, 254, .3); }
.deco--teal   { background: var(--teal); }
.deco--navy   { background: var(--navy); }
.deco--orange { background: var(--orange); }
/* All four corners share one geometry so every blob is the same size and pokes out
   by the same amount — only the anchoring corner differs. --tr is the reference. */
.deco--tr { width: 34vw; height: 34vw; top: -17vw; right: -10vw; }
.deco--br { width: 34vw; height: 34vw; bottom: -17vw; right: -10vw; }
.deco--bl { width: 34vw; height: 34vw; bottom: -17vw; left: -10vw; }
.deco--sm.deco--tr { width: 22vw; height: 22vw; top: -11vw; right: -7vw; }
.panel-inner { position: relative; z-index: 1; }

/* ── Hero: sticky, centered low like the reference; title grows behind panels ── */
.hero {
  position: sticky; top: 0; z-index: 0;
  min-height: 100svh;
  display: flex; align-items: center; justify-content: center;
  text-align: center;
  padding: calc(var(--header-h) + 24px) clamp(24px, 6vw, 96px) 24px;
}
/* Brand-teal ground behind the hero; fades out as the first panel arrives */
.hero-bg {
  position: absolute; inset: 0; z-index: 0;
  background: var(--teal);
}
.hero-inner { position: relative; z-index: 1; max-width: 1300px; }
.hero-title { display: block; transform-origin: 50% 50%; will-change: transform; }
.hero-l1 {
  display: block;
  font-size: clamp(34px, 5vw, 88px);
  font-weight: 800; line-height: 1.06; letter-spacing: -0.015em;
  color: var(--white);
}
.hero-l2 {
  display: block; margin-top: 8px;
  font-size: clamp(34px, 5vw, 88px);
  font-weight: 800; line-height: 1.06; letter-spacing: -0.015em;
  color: var(--orange);
}
.hero-sub {
  margin: 22px auto 0;
  font-size: clamp(14px, 1.3vw, 19px); font-weight: 400; line-height: 1.55;
  max-width: 620px; color: var(--white); opacity: .92;
}
.hero .btn-ghost { color: var(--white); opacity: .85; }
.hero .btn-ghost:hover { opacity: 1; }
.hero-actions { margin-top: 28px; display: flex; gap: 18px; align-items: center; justify-content: center; flex-wrap: wrap; }

/* ── Panels: rounded color blocks floating over the ribbons ── */
.panel {
  position: relative; z-index: 1;
  margin: var(--panel-gap) var(--panel-inset);
  border-radius: clamp(20px, 2.4vw, 34px);
  overflow: clip;
  box-shadow: 0 24px 70px rgba(35, 47, 95, .14);
  transform-origin: 50% 0;
  will-change: transform;
}
.panel--teal   { background: var(--teal); color: var(--white); }
/* First panel arrives later: extra breathing room after the hero */
#fit { margin-top: 30vh; }
.panel--navy   { background: var(--navy); color: var(--white); }
.panel--orange { background: var(--orange); color: var(--navy); }
.panel--white  { background: var(--white); color: var(--navy); }

/* Full-bleed sections: edge-to-edge, no card framing */
.panel--full {
  margin-left: 0; margin-right: 0;
  border-radius: 0;
  box-shadow: none;
}
.panel--full + .panel--full { margin-top: 0; }
.panel--full:has(+ .panel--full) { margin-bottom: 0; }
.panel--full > .panel-inner { padding-left: clamp(24px, 5.5vw, 96px); padding-right: clamp(24px, 5.5vw, 96px); }

.panel-inner {
  max-width: 1600px; margin: 0 auto;
  padding: clamp(56px, 6vw, 96px) clamp(24px, 4.5vw, 72px);
}

/* ── Typography ── */
h2 { font-size: clamp(28px, 3.1vw, 54px); font-weight: 700; line-height: 1.14; letter-spacing: -0.01em; }
.h-orange { color: var(--orange); }
.h-white  { color: var(--white); }
.h-navy   { color: var(--navy); }
.h-orange-sm { color: var(--orange); font-size: clamp(16px, 1.3vw, 20px); font-weight: 700; margin-bottom: 14px; }

.kicker {
  font-size: 13px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--orange); margin-bottom: 16px;
}
.panel--teal .kicker { color: var(--navy); }
.kicker--navy { color: var(--navy); }
.kicker--teal { color: var(--teal); }

.lede {
  margin-top: 16px;
  font-size: clamp(14px, 1.3vw, 21px); font-weight: 400; line-height: 1.55;
  color: var(--white); max-width: 760px;
}
.lede--navy { color: var(--navy); }

/* ── Diagram ── */
.diagram-row { display: flex; gap: 6%; align-items: flex-start; margin-top: 52px; }
.diagram { flex: 0 0 46%; }
.dg-box {
  border-radius: 12px; padding: 16px 18px; text-align: center;
  display: flex; flex-direction: column; gap: 4px;
}
.dg-box strong { font-size: 15px; font-weight: 700; }
.dg-box span { font-size: 11.5px; font-weight: 400; opacity: .92; }
.dg-box--stratus { background: var(--teal); color: var(--white); margin-bottom: 22px; }
.dg-bottom { display: flex; gap: 18px; align-items: center; justify-content: space-between; }
.dg-box--prime { background: #303E77; color: var(--white); flex: 1; }
.dg-box--customer { background: var(--teal); color: var(--white); flex: 1; }
.dg-sf { width: 74px; flex: 0 0 auto; }
.diagram-copy { flex: 1; font-size: clamp(13px, 1.1vw, 15.5px); line-height: 1.6; }
.diagram-copy p { margin-bottom: 16px; }
.diagram-copy .bold { font-weight: 700; }

/* ── "Where we fit": taller panel, content scaled up to fill it ── */
#fit .panel-inner {
  min-height: 76svh;
  display: flex; flex-direction: column; justify-content: center;
  padding-top: clamp(72px, 8vw, 128px);
  padding-bottom: clamp(72px, 8vw, 128px);
}
#fit .lede { font-size: clamp(15px, 1.5vw, 24px); max-width: 820px; }
#fit .diagram-row { margin-top: clamp(48px, 5vw, 78px); align-items: center; gap: 7%; }
#fit .dg-box { padding: clamp(20px, 2vw, 32px) 22px; border-radius: 16px; gap: 6px; }
#fit .dg-box strong { font-size: clamp(16px, 1.35vw, 21px); }
#fit .dg-box span { font-size: clamp(12px, 1vw, 14px); }
#fit .dg-box--stratus { margin-bottom: clamp(26px, 2.6vw, 42px); }
#fit .dg-bottom { gap: 22px; }
#fit .dg-sf { width: clamp(74px, 6vw, 96px); }
#fit .diagram-copy { font-size: clamp(14px, 1.2vw, 17.5px); line-height: 1.7; }
#fit .diagram-copy p { margin-bottom: 20px; }
#fit .quote { margin-top: clamp(32px, 3.2vw, 48px); font-size: clamp(16px, 1.5vw, 23px); }
.founder-note {
  margin-top: 44px; text-align: center;
  font-size: clamp(11.5px, 1vw, 13.5px); line-height: 1.65; opacity: .92;
  max-width: 760px; margin-left: auto; margin-right: auto;
}

/* ── Struggle numbered list ── */
.struggle-list { list-style: none; margin-top: 48px; }
.struggle-list li {
  display: flex; align-items: center; gap: 18px;
  font-size: clamp(15px, 1.4vw, 21px); font-weight: 500; color: var(--navy);
  margin-bottom: 10px;
}
.struggle-list li:nth-child(2) { margin-left: 5%; }
.struggle-list li:nth-child(3) { margin-left: 10%; }
.struggle-list li:nth-child(4) { margin-left: 15%; }
.big-num { font-size: clamp(44px, 4.4vw, 64px); font-weight: 800; color: var(--teal); line-height: 1; }

/* ── Appendix list ── */
.appendix-list { list-style: none; margin-top: 40px; }
.appendix-list li {
  font-size: clamp(13px, 1.2vw, 17px); font-weight: 500; color: var(--white);
  margin-bottom: 14px;
}

/* ── Cards ── */
.cards { display: flex; gap: 24px; margin-top: 48px; }
.cards--first { margin-top: 12px; }
.collage--first { margin-top: 0; }
.cards--3 .card { flex: 1; }
.cards--4 { gap: 20px; }
.cards--4 .card { flex: 1; }

.card {
  background: var(--white); color: var(--navy);
  border-radius: 18px;
  padding: 28px 26px;
  box-shadow: 0 10px 30px rgba(35, 47, 95, .12);
  font-size: clamp(12.5px, 1vw, 14.5px);
  line-height: 1.55;
}
.panel--white .card { border: 1px solid rgba(35, 47, 95, .08); box-shadow: 0 8px 26px rgba(35, 47, 95, .07); }
.card h4 { font-size: clamp(15px, 1.25vw, 18px); font-weight: 700; margin-bottom: 14px; }
.card h5 { font-size: clamp(14px, 1.2vw, 17px); font-weight: 700; color: var(--navy); margin-bottom: 14px; line-height: 1.3; }
.card p { margin-bottom: 12px; }
.card p:last-child { margin-bottom: 0; }
.card strong { font-weight: 700; }
.card-closer { color: var(--teal); font-weight: 700; margin-top: 4px; }

.card--tint {
  background: var(--card-tint);
  position: relative;
  padding-top: 34px;
  box-shadow: none;
}
.card-num {
  position: absolute; top: -24px; left: 12px;
  font-size: 54px; font-weight: 800; color: #0B858A;
}
.card--tint h5 { color: var(--navy); }
.card--tint ul { list-style: disc; padding-left: 18px; }
.card--tint li { margin-bottom: 10px; }

.cards--5 { flex-wrap: wrap; gap: 22px; }
.cards--5 .card { flex: 1 1 calc(33.333% - 15px); min-width: 260px; }
.card--why h5 { color: var(--teal); }

.cards--situation .card { text-align: center; padding: 44px 28px; }
.cards--situation .card h5 { font-size: clamp(16px, 1.4vw, 19px); }

.slide-footnote {
  margin-top: 36px; text-align: center;
  font-size: clamp(11.5px, 1vw, 14px); font-weight: 500;
}

/* ── Team ── */
.team-grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 18px;
  margin-top: 48px;
}
.tcard {
  background: var(--white); color: var(--navy);
  border-radius: 16px;
  box-shadow: 0 8px 24px rgba(35, 47, 95, .14);
  position: relative;
  padding: 20px 14px 0;
  /* lift via `top`, not a transform: GSAP owns this element's entrance tween and writes
     `transform` AND `translate/rotate/scale: none` inline, both of which beat a stylesheet
     hover rule. The card is already position:relative, so `top` shifts it without reflow. */
  top: 0;
  transition: top .3s cubic-bezier(.22, .61, .36, 1),
              box-shadow .3s cubic-bezier(.22, .61, .36, 1);
}
.tcard:hover {
  top: -8px;
  box-shadow: 0 22px 48px rgba(35, 47, 95, .26);
}
/* orange accent blob peeking behind the photo (social-media style) */
.tcard::before {
  content: ''; position: absolute;
  top: 8px; left: 6%; right: 6%; height: 46%;
  background: var(--orange);
  border-radius: 62% 38% 52% 48% / 55% 45% 55% 45%;
  transform: rotate(-6deg);
  transition: transform .45s cubic-bezier(.22, .61, .36, 1);
}
.tcard:hover::before { transform: rotate(5deg) scale(1.05); }
.tcard-photo {
  position: relative; background: var(--teal-light);
  aspect-ratio: 1 / 1.14; overflow: hidden;
  border-radius: 58% 42% 52% 48% / 50% 55% 45% 50%;
  margin: 6px 4px 0;
  transition: border-radius .55s cubic-bezier(.22, .61, .36, 1);
}
/* the organic blob mask morphs on hover, echoing the ribbon/deco shapes */
.tcard:hover .tcard-photo {
  border-radius: 46% 54% 44% 56% / 56% 47% 53% 44%;
}
.tcard-photo > img:last-child {
  width: 100%; height: 100%; object-fit: cover; object-position: top center;
  transition: transform .5s cubic-bezier(.22, .61, .36, 1);
}
.tcard:hover .tcard-photo > img:last-child { transform: scale(1.07); }

@media (prefers-reduced-motion: reduce) {
  .tcard, .tcard::before, .tcard-photo, .tcard-photo > img:last-child { transition: none; }
  .tcard:hover { top: 0; }
  .tcard:hover::before { transform: rotate(-6deg); }
  .tcard:hover .tcard-photo > img:last-child { transform: none; }
}
.tcard-badge { position: absolute; top: 8px; left: 8px; width: 34px; z-index: 2; }
.tcard-sf { position: absolute; top: 8px; right: 8px; width: 30px; z-index: 2; }
.tcard-info { padding: 18px 12px 24px; text-align: center; }
.tcard-info strong { display: block; font-size: clamp(14px, 1.24vw, 18px); font-weight: 700; margin-bottom: 5px; }
.tcard-info span { display: block; font-size: clamp(12px, 1.05vw, 15px); font-weight: 500; line-height: 1.4; margin-bottom: 7px; }
.tcard-info em { display: block; font-size: clamp(10.5px, .92vw, 13px); font-style: italic; line-height: 1.45; opacity: .9; }
.team-legend {
  margin: 26px auto 0; width: fit-content;
  background: var(--white); border-radius: 999px;
  padding: 12px 30px;
  display: flex; gap: 30px; align-items: center;
  color: var(--navy); font-size: clamp(11px, 1vw, 14px); font-weight: 500;
}
.team-legend span { display: flex; align-items: center; gap: 9px; }
.team-legend img { height: 26px; }

/* ── Collage ── */
.collage {
  display: grid; gap: 12px;
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: clamp(52px, 8.5vh, 116px);
  margin-top: 44px;
}
.cl { width: 100%; height: 100%; object-fit: cover; border-radius: 10px; }
.cl-1 { grid-column: 1 / 6;   grid-row: 1 / 4; }
.cl-2 { grid-column: 6 / 9;   grid-row: 1 / 3; }
.cl-3 { grid-column: 9 / 13;  grid-row: 1 / 3; }
.cl-5 { grid-column: 1 / 3;   grid-row: 4 / 7; }
.cl-6 { grid-column: 3 / 6;   grid-row: 4 / 7; }
.cl-7 { grid-column: 6 / 13;  grid-row: 3 / 7; }
.logo-bar {
  margin-top: 18px;
  background: var(--cream); border-radius: 14px;
  display: flex; align-items: center; justify-content: space-between;
  gap: 18px; padding: 14px 26px;
  border: 1px solid rgba(35, 47, 95, .06);
}
.logo-bar img { height: 30px; max-width: 11%; object-fit: contain; }
.logo-bar span { color: var(--navy); font-size: clamp(11px, 1vw, 14px); font-weight: 500; white-space: nowrap; }

/* ── Stats ── */
.stats { display: flex; gap: 5%; margin-top: 56px; }
.stat { flex: 1; max-width: 230px; }
.stat-num { display: block; font-size: clamp(46px, 4.8vw, 76px); font-weight: 800; color: var(--orange); line-height: 1; }
.stat-label { display: block; margin-top: 12px; font-size: clamp(11px, 1vw, 14px); font-weight: 500; color: var(--white); line-height: 1.45; }
.badge-row { display: flex; gap: 26px; margin-top: 52px; align-items: center; }
.badge-row img { height: clamp(52px, 5.2vw, 76px); }

/* ── Close to product ── */
.content--close { display: flex; align-items: center; gap: 5%; }
.close-left { flex: 1 1 58%; }
.close-body { margin-top: 18px; font-size: clamp(13px, 1.1vw, 15.5px); line-height: 1.65; max-width: 560px; }
.close-how { margin-top: 28px; font-weight: 700; font-size: clamp(13px, 1.1vw, 15.5px); }
.chips { display: flex; gap: 12px; margin-top: 16px; flex-wrap: wrap; }
.chip {
  background: var(--orange); color: var(--navy);
  border-radius: 10px; padding: 12px 16px;
  font-size: clamp(10.5px, .9vw, 12.5px); font-weight: 700; line-height: 1.35;
  max-width: 180px; text-align: center;
}
.close-right { flex: 0 0 34%; display: flex; justify-content: center; }
.close-circle {
  width: clamp(240px, 24vw, 340px); aspect-ratio: 1;
  background: var(--navy); border-radius: 50%;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px;
}
.close-logo { width: 55%; }
.close-x { font-size: 22px; font-weight: 500; color: var(--white); }
.close-sf { width: 30%; }

/* ── Contact ── */
.contact-cta { margin-top: 44px; text-align: center; }

/* ── Marquee ── */
.marquee {
  position: relative; z-index: 1;
  margin-top: var(--panel-gap);
  background: var(--navy);
  overflow: hidden;
  padding: clamp(26px, 3vw, 44px) 0;
}
.marquee-track {
  display: flex; width: max-content;
  white-space: nowrap;
  will-change: transform;
}
.marquee-track span {
  font-size: clamp(34px, 4.4vw, 68px);
  font-weight: 800; letter-spacing: -0.01em;
  color: var(--white);
}
.marquee-track em { font-style: normal; color: var(--teal); }

/* ── Footer ── */
.site-footer {
  margin-top: 0 !important;
}
.site-footer {
  position: relative; z-index: 1;
  background: var(--navy); color: var(--white);
  margin-top: var(--panel-gap);
  padding: clamp(48px, 5vw, 72px) clamp(24px, 5vw, 72px) 28px;
}
.footer-inner {
  max-width: 1600px; margin: 0 auto;
  display: flex; gap: 8%; justify-content: space-between; flex-wrap: wrap;
}
.footer-brand img { width: 170px; margin-bottom: 18px; }
.footer-brand p { font-size: 14px; opacity: .8; max-width: 300px; line-height: 1.6; }
.footer-thanks { display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 10px; }
.footer-thankyou { font-size: clamp(34px, 3.6vw, 54px); font-weight: 700; color: var(--white); }
.footer-url { color: var(--orange); text-decoration: none; font-weight: 500; font-size: 15px; }
.footer-url:hover { text-decoration: underline; }
.footer-bottom {
  max-width: 1600px; margin: 40px auto 0; padding-top: 20px;
  border-top: 1px solid rgba(254, 254, 254, .14);
  font-size: 12px; opacity: .7;
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  [data-a], .hero-l1, .hero-l2, .hero-sub, .hero-actions, .header-logo
  { opacity: 1 !important; transform: none !important; visibility: visible !important; }
  .splash { display: none; }
}

/* ── Responsive ── */
@media (max-width: 900px) {
  .header-nav { display: none; }
  .hero { min-height: 100svh; }   /* full height on mobile, as on desktop */
  .cards { flex-direction: column; gap: 16px; }
  .cards--5 .card { flex: 1 1 100%; min-width: 0; }
  .diagram-row { flex-direction: column; gap: 32px; }
  .diagram { flex: 1 1 auto; width: 100%; }
  .team-grid { grid-template-columns: repeat(2, 1fr); }
  .stats { flex-wrap: wrap; gap: 28px; }
  .stat { flex: 1 1 40%; max-width: none; }
  .badge-row { flex-wrap: wrap; gap: 16px; }
  .content--close { flex-direction: column; align-items: flex-start; }
  .close-right { margin: 36px auto 0; }
  .logo-bar { flex-wrap: wrap; justify-content: center; }
  .logo-bar img { height: 26px; max-width: 24%; }   /* +20% on mobile at client request */
  .team-legend { flex-direction: column; gap: 10px; align-items: flex-start; border-radius: 18px; }
  .footer-inner { flex-direction: column; gap: 36px; }
  .footer-thanks { align-items: flex-start; }
  .struggle-list li:nth-child(n) { margin-left: 0; }
  .deco--tr, .deco--br, .deco--bl, .deco--sm.deco--tr { width: 46vw; height: 46vw; }
  .deco--tr { top: -26vw; right: -18vw; }
  .deco--br { bottom: -28vw; right: -20vw; }
  .deco--bl { bottom: -26vw; left: -22vw; }
}

/* ═══════════════════ Multi-page components (wireframe sitemap) ═══════════════════ */

/* ── Header nav with dropdowns ── */
.header-nav { align-items: center; }
.nav-item { position: relative; }
.nav-item > a { display: inline-block; padding: 33px 0; }
.drop {
  position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  min-width: 250px;
  background: var(--white); border-radius: 14px;
  box-shadow: 0 18px 50px rgba(35, 47, 95, .18);
  padding: 10px;
  opacity: 0; visibility: hidden; translate: 0 8px;
  transition: opacity .18s, visibility .18s, translate .18s;
  z-index: 110;
}
.nav-item:hover .drop, .nav-item:focus-within .drop { opacity: 1; visibility: visible; translate: 0 0; }

/* ── Open dropdown dims + blurs the page behind it ──
   Lives on the header as a fixed ::after so it spans the viewport below the bar. It sits
   inside the header's stacking context (z-index 100) at z-index -1, so it paints above all
   page content but under the header chrome and under the panel itself (z-index 110). */
.site-header::after {
  content: '';
  position: fixed; inset: var(--header-h) 0 0 0;
  z-index: -1; pointer-events: none;
  background: rgba(35, 47, 95, .14);
  backdrop-filter: blur(7px);
  -webkit-backdrop-filter: blur(7px);
  opacity: 0; visibility: hidden;
  transition: opacity .24s ease, visibility .24s ease;
}
.site-header:has(.nav-item:hover .drop)::after,
.site-header:has(.nav-item:focus-within .drop)::after { opacity: 1; visibility: visible; }
@media (prefers-reduced-motion: reduce) { .site-header::after { transition: none; } }
.drop a {
  display: block; padding: 10px 14px; border-radius: 9px;
  color: var(--navy); text-decoration: none;
  font-size: 13.5px; font-weight: 500;
}
.drop-col a span { display: block; font-size: 11px; font-weight: 400; opacity: .65; margin-top: 2px; }
.drop a:hover { background: rgba(10, 175, 181, .1); }

/* ── Dropdowns: Design B treatment (section labels, mega panel, photo) ── */
.chev { font-size: 11px; opacity: .55; margin-left: 4px; }
.drop {
  border-radius: 20px; padding: 26px; min-width: 460px;
}
/* Mega panels are wide enough to run off the right edge if centred on their nav item,
   so they hang from the item's right edge instead and cap at the viewport width. */
.drop--mega {
  display: flex; gap: 28px; align-items: stretch;
  min-width: min(760px, calc(100vw - 48px));
  left: auto; right: 0; transform: none;
}
.drop-label {
  display: block; font-size: 12.5px; font-weight: 500; letter-spacing: .1em;
  text-transform: uppercase; opacity: .5; margin: 4px 18px 14px; color: var(--navy);
}
/* the menu column carries the divider, so the image keeps its own hover/radius */
.drop--mega .drop-col { border-right: 1px solid rgba(35, 47, 95, .12); padding-right: 28px; }
.drop-col { flex: 1; min-width: 0; }
.drop a { opacity: 1; font-weight: 500; font-size: 17px; padding: 14px 18px; border-radius: 12px; }
.drop-col a span { font-size: 13.5px; margin-top: 4px; }
.drop-photo { flex: 0 0 380px; }
.drop-photo img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 16px; }

/* Resources: featured latest article — image + title, links through to the blog grid */
.drop-feature {
  flex: 0 0 380px; display: block; padding: 14px !important; border-radius: 16px;
  text-decoration: none; color: var(--navy);
  transition: background .18s;
}
.drop-feature:hover { background: rgba(10, 175, 181, .1); }
.drop-feature .drop-label { margin: 2px 4px 10px; }
.drop-feature-img {
  display: block; opacity: 1; border-radius: 12px; overflow: hidden;
  aspect-ratio: 16 / 9; margin-bottom: 12px; background: var(--card-tint);
}
.drop-feature-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.drop-feature strong {
  display: block; padding: 0 4px;
  font-size: 15px; font-weight: 500; line-height: 1.35;
}

/* ── Page hero (sub-pages) ── */
.page-hero {
  position: relative; z-index: 1;
  padding: calc(var(--header-h) + clamp(48px, 8vh, 96px)) clamp(24px, 6vw, 96px) clamp(40px, 7vh, 80px);
  max-width: 1600px; margin: 0 auto;
}
.breadcrumb {
  font-size: 12px; font-weight: 500; letter-spacing: .04em;
  color: var(--navy); opacity: .6; margin-bottom: 26px;
}
.breadcrumb a { color: inherit; text-decoration: none; }
.breadcrumb a:hover { text-decoration: underline; }
.page-hero h1,
.df-hero-inner h1 {
  font-size: clamp(32px, 4.2vw, 68px);
  font-weight: 800; line-height: 1.08; letter-spacing: -0.015em;
  color: var(--navy); max-width: 1000px;
}
.page-hero .accent { color: var(--teal); }
.page-hero-sub,
.df-hero-sub {
  margin-top: 20px; font-size: clamp(14px, 1.3vw, 19px); line-height: 1.6;
  color: var(--navy); opacity: .85; max-width: 720px;
}
.page-hero .hero-actions { justify-content: flex-start; margin-top: 30px; }

/* ── Text links & kickers ── */
.link-arrow {
  color: inherit; font-weight: 700; text-decoration: none;
  font-size: clamp(13px, 1.05vw, 15.5px);
  border-bottom: 2px solid currentColor; padding-bottom: 2px;
  transition: opacity .15s;
}
.link-arrow:hover { opacity: .75; }
.card .link-arrow { color: var(--teal); }

/* ── Stat chips (home hero) ── */
.stat-chips { display: flex; gap: 12px; margin-top: 34px; flex-wrap: wrap; justify-content: center; }
.stat-chip {
  background: rgba(254, 254, 254, .8); border: 1px solid rgba(35, 47, 95, .12);
  border-radius: 999px; padding: 10px 18px;
  font-size: clamp(11px, .95vw, 13.5px); font-weight: 500; color: var(--navy);
}
.stat-chip strong { color: var(--teal); font-weight: 800; }

/* ── Salesforce Partner blob badge (from the social templates) ── */
.sf-badge {
  display: inline-flex; align-items: center; gap: 14px;
  background: var(--navy); color: var(--white);
  border-radius: 48% 52% 45% 55% / 62% 55% 45% 38%;
  padding: 18px 34px 20px 26px;
}
.sf-badge img { width: 46px; }
.sf-badge span { text-align: left; line-height: 1.2; }
.sf-badge strong { display: block; font-size: 15px; font-weight: 800; letter-spacing: .06em; }
.sf-badge em { font-style: normal; font-size: 11.5px; opacity: .85; }
.hero .sf-badge { margin-top: 30px; }
.site-footer .sf-badge { margin-top: 22px; padding: 14px 26px 16px 20px; background: rgba(254,254,254,.08); border: 1px solid rgba(254,254,254,.18); }
.site-footer .sf-badge img { width: 36px; }
.site-footer .sf-badge strong { font-size: 13px; }

/* ── Quote block ── */
.quote {
  margin-top: 34px; padding-left: 22px;
  border-left: 4px solid var(--orange);
  font-size: clamp(15px, 1.4vw, 21px); font-weight: 500; line-height: 1.45;
  font-style: italic; max-width: 640px;
}

/* ── Numbered rows (why-different, warning signs, value props) ── */
/* Vertical cards in a responsive grid — as wide full-width rows these left a large
   dead zone on the right at desktop widths. auto-fit handles the 3/4/5-item variants
   across pages without a per-page column count. */
.num-rows {
  margin-top: clamp(44px, 5vw, 68px);
  /* Uniform grid: every card the same size. grid-auto-rows:1fr equalises across rows
     too, so all five match rather than just those sharing a row. */
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 1fr;
  gap: clamp(14px, 1.4vw, 20px);
  align-items: stretch;
}
@media (max-width: 1100px) { .num-rows { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 700px)  { .num-rows { grid-template-columns: 1fr; } }
.num-row {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: clamp(14px, 1.3vw, 20px);
  padding: clamp(26px, 2.4vw, 36px) clamp(22px, 2vw, 30px) clamp(30px, 2.6vw, 40px);
  background: rgba(254, 254, 254, .05);
  border: 1px solid rgba(254, 254, 254, .16);
  border-radius: 18px;
  /* lift via `top`, not a transform: GSAP drives this card's entrance tween and writes
     `transform` plus `translate/rotate/scale: none` inline, both of which beat a
     stylesheet hover rule. See the same treatment on .tcard. */
  position: relative; top: 0;
  transition: background .22s ease, top .22s ease, box-shadow .22s ease, border-color .22s ease;
}
.num-row:hover {
  background: rgba(254, 254, 254, .1);
  border-color: rgba(254, 254, 254, .3);
  top: -4px;
  box-shadow: 0 16px 38px rgba(0, 0, 0, .18);
}
.num-row:hover .num-row-n { transform: scale(1.08); }
/* light-ground panels need a dark tint instead of a white one */
.panel--white .num-row, .panel--orange .num-row {
  background: rgba(35, 47, 95, .04);
  border-color: rgba(35, 47, 95, .12);
}
.panel--white .num-row:hover, .panel--orange .num-row:hover {
  background: rgba(35, 47, 95, .07);
  border-color: rgba(35, 47, 95, .22);
  box-shadow: 0 16px 38px rgba(35, 47, 95, .14);
}
@media (prefers-reduced-motion: reduce) {
  .num-row, .num-row-n { transition: none; }
  .num-row:hover { top: 0; }
  .num-row:hover .num-row-n { transform: none; }
}
.num-row-n {
  font-size: clamp(34px, 3.2vw, 54px); font-weight: 800; color: var(--orange);
  /* column flex: a flex-basis here would set the HEIGHT, not the width */
  flex: 0 0 auto; line-height: 1;
  transition: transform .22s ease; transform-origin: 0% 50%;
}
.panel--orange .num-row-n { border-bottom-color: rgba(35,47,95,.12); color: var(--navy); }
.panel--white .num-row-n { color: var(--teal); }
.num-row-body strong { display: block; font-size: clamp(19px, 1.7vw, 26px); font-weight: 700; margin-bottom: 9px; }
.num-row-body p { font-size: clamp(15px, 1.25vw, 18px); line-height: 1.6; opacity: .92; }

/* ── Team teaser ── */
.team-teaser { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin-top: 44px; }
.more-pill {
  margin: 26px auto 0; width: fit-content;
  background: rgba(254, 254, 254, .14); border: 1px solid rgba(254, 254, 254, .35);
  color: var(--white); border-radius: 999px; padding: 12px 26px;
  font-size: clamp(12px, 1vw, 14.5px); font-weight: 500;
}
.panel--white .more-pill, .bench-note {
  color: var(--navy);
}
.bench-note {
  margin-top: 28px; font-size: clamp(12.5px, 1.05vw, 15px); line-height: 1.6;
  opacity: .85; max-width: 820px;
}
.panel--teal .bench-note, .panel--navy .bench-note { color: var(--white); }

/* ── Article / resource cards ── */
.res-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; margin-top: 44px; }
.res-card {
  background: var(--white); color: var(--navy);
  border: 1px solid rgba(35, 47, 95, .1);
  border-radius: 16px; padding: 24px 22px;
  display: flex; flex-direction: column; gap: 12px;
  transition: transform .18s, box-shadow .18s;
}
.res-card:hover { transform: translateY(-4px); box-shadow: 0 14px 36px rgba(35, 47, 95, .12); }
.res-tag {
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--teal);
}
.res-card h3, .res-card h4 { font-size: clamp(14.5px, 1.2vw, 17.5px); font-weight: 700; line-height: 1.35; }
.res-card p { font-size: clamp(12px, 1vw, 14px); line-height: 1.55; opacity: .85; }
.res-by { margin-top: auto; display: flex; align-items: center; gap: 10px; font-size: 12px; font-weight: 500; opacity: .8; }
.res-avatar {
  width: 30px; height: 30px; border-radius: 50%;
  background: var(--navy); color: var(--white);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700; flex: 0 0 auto;
}
.res-card--featured { border-top: 5px solid var(--orange); }

/* ── Filter chips (resources) ── */
.filter-bar { margin-top: 40px; display: flex; flex-direction: column; gap: 12px; }
.filter-row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.filter-label { font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; opacity: .7; margin-right: 6px; }
.chip-toggle {
  background: var(--white); border: 1px solid rgba(35, 47, 95, .18); color: var(--navy);
  border-radius: 999px; padding: 8px 16px; font-family: var(--font);
  font-size: 12.5px; font-weight: 500; cursor: pointer;
  transition: background .15s, color .15s;
}
.chip-toggle.on { background: var(--navy); color: var(--white); border-color: var(--navy); }
.filter-count { font-size: 12.5px; font-weight: 500; opacity: .7; }
.filter-clear { background: none; border: none; color: var(--teal); font-family: var(--font); font-weight: 700; font-size: 12.5px; cursor: pointer; text-decoration: underline; }

/* ── Podcast row ── */
.podcast-card {
  display: flex; gap: 26px; align-items: center;
  background: var(--white); color: var(--navy);
  border-radius: 18px; padding: 30px 32px; margin-top: 40px;
  box-shadow: 0 10px 30px rgba(35, 47, 95, .12);
}
.podcast-play {
  flex: 0 0 74px; height: 74px; border-radius: 50%;
  background: var(--orange); color: var(--navy);
  display: flex; align-items: center; justify-content: center;
  font-size: 26px;
}
.podcast-body h3 { font-size: clamp(15px, 1.3vw, 19px); font-weight: 700; margin: 6px 0 10px; }
.podcast-body p { font-size: clamp(12.5px, 1.05vw, 14.5px); line-height: 1.55; opacity: .88; }
.podcast-body .res-tag { color: var(--teal); }
.podcast-body .link-arrow { display: inline-block; margin-top: 14px; color: var(--teal); }

/* ── Forms (contact, subscribe) ── */
.form-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 18px; margin-top: 40px; max-width: 860px; }
.form-field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.form-field--full { grid-column: 1 / -1; }
.form-field label { font-size: 12.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.form-field input, .form-field select, .form-field textarea {
  font-family: var(--font); font-size: 15px; color: var(--navy);
  background: var(--white); border: 1px solid rgba(35, 47, 95, .22);
  border-radius: 10px; padding: 14px 16px;
  width: 100%; max-width: 100%; min-width: 0;
}
.form-field textarea { min-height: 140px; resize: vertical; }
.form-field input:focus, .form-field select:focus, .form-field textarea:focus {
  outline: 2px solid var(--teal); border-color: var(--teal);
}
.form-submit { grid-column: 1 / -1; display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
.btn-cta.as-button { border: none; cursor: pointer; font-family: var(--font); }
.form-note { font-size: 13px; opacity: .8; }
.form-note a { color: var(--teal); font-weight: 700; }
.subscribe-row { display: flex; gap: 14px; margin-top: 30px; flex-wrap: wrap; }
.subscribe-row input {
  flex: 1 1 300px; font-family: var(--font); font-size: 15px;
  border: none; border-radius: 999px; padding: 15px 22px;
}

/* ── CTA panel ── */
.panel--cta .panel-inner { text-align: center; padding-top: clamp(64px, 8vw, 128px); padding-bottom: clamp(64px, 8vw, 128px); }
.panel--cta .lede { margin-left: auto; margin-right: auto; }
.panel--cta .contact-cta { margin-top: 32px; }

/* ── Footer columns ── */
.footer-cols {
  display: grid; grid-template-columns: 2fr 1fr 1fr 1fr 1fr; gap: 40px;
  max-width: 1600px; margin: 0 auto;
}
.footer-col h5 {
  font-size: 12.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--orange); margin-bottom: 16px;
}
.footer-col ul { list-style: none; }
.footer-col li { margin-bottom: 10px; }
.footer-col a { color: var(--white); opacity: .82; text-decoration: none; font-size: 13.5px; }
.footer-col a:hover { opacity: 1; text-decoration: underline; }

/* ── Stats on light panels ── */
.stats--onlight .stat-label { color: var(--navy); }
.stats--onlight .stat-num { color: var(--teal); }
.badge-row + .stat-chips { margin-top: 34px; }
.footer-brand img { width: 170px; margin-bottom: 18px; }
.footer-brand p { font-size: 13.5px; opacity: .8; max-width: 280px; line-height: 1.6; }

/* ── Two-up value cards (about: for customer / for SI) ── */
.cards--2 { display: flex; gap: 26px; margin-top: 44px; }
.cards--2 .card { flex: 1; }
.card-kicker { font-size: 11.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: rgba(35, 47, 95, .55); margin-bottom: 12px; }

/* ── FAQ ── */
.faq { margin-top: 40px; max-width: 900px; }
.faq details {
  border-bottom: 1px solid rgba(35, 47, 95, .14);
  padding: 6px 0;
}
.panel--navy .faq details, .panel--teal .faq details { border-bottom-color: rgba(254,254,254,.2); }
.faq summary {
  cursor: pointer; list-style: none;
  display: flex; justify-content: space-between; align-items: center; gap: 20px;
  padding: 16px 0;
  font-size: clamp(14px, 1.2vw, 17px); font-weight: 700;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: '+'; font-size: 22px; font-weight: 400; opacity: .6; }
.faq details[open] summary::after { content: '–'; }
.faq details p { padding: 0 0 18px; font-size: clamp(12.5px, 1.05vw, 15px); line-height: 1.6; opacity: .9; max-width: 800px; }

/* ── Highlight stat band (rescue 73%) ── */
.stat-band { display: flex; gap: 5%; align-items: center; margin-top: 44px; }
.stat-band-num { font-size: clamp(56px, 6vw, 96px); font-weight: 800; color: var(--orange); line-height: 1; flex: 0 0 auto; }
/* "Up to" rides above the figure so the claim stays qualified without competing with it */
.stat-band-qual {
  display: block;
  font-size: clamp(12px, 1.05vw, 15px); font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--orange); opacity: .8;
  margin-bottom: 6px;
}
.stat-band-body { font-size: clamp(13px, 1.15vw, 16px); line-height: 1.6; max-width: 640px; }
.stat-band-body .link-arrow { display: inline-block; margin-top: 14px; }

/* ── Responsive for new components ── */
@media (max-width: 900px) {
  .team-teaser { grid-template-columns: repeat(2, 1fr); }
  .res-grid { grid-template-columns: 1fr; }
  .cards--2 { flex-direction: column; }
  .form-grid { grid-template-columns: minmax(0, 1fr); }
  .footer-cols { grid-template-columns: 1fr 1fr; }
  .podcast-card { flex-direction: column; align-items: flex-start; }
  .stat-band { flex-direction: column; align-items: flex-start; gap: 18px; }
  .num-row { gap: 14px; }
  .num-row-n { flex: 0 0 44px; }
}

/* ═══ Mobile navigation ═══ */
.nav-burger {
  display: none;
  width: 44px; height: 44px;
  background: none; border: none; cursor: pointer;
  flex-direction: column; justify-content: center; gap: 6px;
  padding: 8px;
}
.nav-burger span {
  display: block; height: 3px; border-radius: 2px;
  background: var(--white);
  transition: transform .25s, opacity .25s;
}
body.menu-open .nav-burger span:nth-child(1) { transform: translateY(9px) rotate(45deg); }
body.menu-open .nav-burger span:nth-child(2) { opacity: 0; }
body.menu-open .nav-burger span:nth-child(3) { transform: translateY(-9px) rotate(-45deg); }

.mobile-menu {
  position: fixed; inset: 0; z-index: 95;
  background: #141B38;
  padding: calc(var(--header-h) + 24px) 28px 40px;
  overflow-y: auto;
  display: none;
}
body.menu-open .mobile-menu { display: block; }
body.menu-open { overflow: hidden; }
.mobile-menu a { text-decoration: none; color: var(--white); display: block; }
.mobile-menu .mm-top {
  font-size: 22px; font-weight: 500; padding: 14px 0;
  border-bottom: 1px solid rgba(254, 254, 254, .14);
}
.mobile-menu .mm-sub {
  font-size: 15px; font-weight: 500; padding: 10px 0 10px 18px; opacity: .8;
}
/* the menu's links went white with the dark ground; the gold pill still wants navy */
/* `display: block` here was overriding .btn-cta's `inline-flex`, which killed the
   `align-items: center` that vertically centres the label inside the fixed 2.9rem
   pill — the text sat on the baseline near the top. `flex` restores centring and
   still spans the menu width. */
.mobile-menu .btn-cta { margin-top: 26px; display: flex; align-items: center; justify-content: center; color: var(--navy); }

@media (max-width: 900px) {
  /* header scaled down 20% on mobile: 88 -> 70px, logo 156 -> 125px */
  :root { --header-h: 70px; }
  .header-logo { width: 125px; }
  .nav-burger { width: 36px; height: 36px; gap: 5px; }
  .nav-burger { display: flex; }
  .site-header .btn-cta { display: none; }
}

/* ── Resource card cover images — standard size 740x416 (16:9) ── */
.res-img {
  aspect-ratio: 740 / 416;
  margin: -24px -22px 4px;
  border-radius: 15px 15px 0 0;
  overflow: hidden;
  background: var(--card-tint);
}
.res-card--featured .res-img { border-radius: 10px 10px 0 0; }
.res-img img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ── Podcast thumbnail (standard 740x416 cover with play overlay) ── */
.podcast-thumb {
  flex: 0 0 min(360px, 40%);
  aspect-ratio: 740 / 416;
  border-radius: 14px; overflow: hidden;
  position: relative;
}
.podcast-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.podcast-thumb .podcast-play {
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  flex: none; width: 64px; height: 64px;
  box-shadow: 0 6px 20px rgba(35, 47, 95, .35);
}
@media (max-width: 900px) {
  .podcast-thumb { flex: 1 1 auto; width: 100%; }
}

/* ── Blog category colors (top accent + tag, per format) ── */
.res-card { border-top: 5px solid var(--teal); text-decoration: none; }
.res-card[data-format="release-notes"], .res-card--cat-release-notes { border-top-color: var(--orange); }
.res-card[data-format="deep-dive"],     .res-card--cat-deep-dive     { border-top-color: var(--teal); }
.res-card[data-format="case-study"],    .res-card--cat-case-study    { border-top-color: var(--navy); }
.res-card[data-format="event-recap"],   .res-card--cat-event-recap   { border-top-color: var(--purple); }
.res-card[data-format="release-notes"] .res-tag, .res-card--cat-release-notes .res-tag { color: #E08900; }
.res-card[data-format="case-study"] .res-tag,    .res-card--cat-case-study .res-tag    { color: var(--navy); }
.res-card[data-format="event-recap"] .res-tag,   .res-card--cat-event-recap .res-tag   { color: var(--purple); }
.res-card--featured { border-top-width: 5px; }

/* ── Blog detail page ── */
.post-meta {
  display: flex; align-items: center; gap: 14px; margin-top: 26px;
  font-size: 14px; font-weight: 500; color: var(--navy);
}
.post-meta .res-avatar { width: 42px; height: 42px; font-size: 14px; }
.post-meta em { font-style: normal; opacity: .65; font-weight: 500; }
.post-cat {
  display: inline-block; margin-bottom: 18px;
  font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  padding: 8px 16px; border-radius: 999px;
  background: var(--navy); color: var(--white);
}
.post-cover {
  max-width: 1100px; margin: 0 auto;
  aspect-ratio: 740 / 416; border-radius: clamp(16px, 2vw, 26px);
  overflow: hidden; box-shadow: 0 24px 70px rgba(35, 47, 95, .18);
  position: relative; z-index: 1;
}
.post-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.article-body { max-width: 820px; margin: 0 auto; font-size: clamp(15px, 1.2vw, 17.5px); line-height: 1.75; }
.article-body p { margin-bottom: 22px; }
.article-body h2 {
  font-size: clamp(22px, 2vw, 30px); margin: 44px 0 18px; line-height: 1.25;
}
.article-body ul { margin: 0 0 22px 22px; }
.article-body li { margin-bottom: 10px; }
.article-body blockquote {
  margin: 34px 0; padding: 6px 0 6px 24px;
  border-left: 4px solid var(--orange);
  font-size: clamp(17px, 1.5vw, 22px); font-weight: 500; font-style: italic; line-height: 1.5;
}
.article-callout {
  margin: 36px 0; padding: 28px 30px;
  background: var(--card-tint); border-radius: 16px;
  display: flex; gap: 22px; align-items: center;
}
.article-callout strong { font-size: clamp(38px, 3.6vw, 54px); font-weight: 800; color: var(--teal); line-height: 1; }
.article-callout span { font-size: clamp(13px, 1.1vw, 15.5px); line-height: 1.5; }
.author-box {
  max-width: 820px; margin: 56px auto 0;
  display: flex; gap: 22px; align-items: center;
  background: var(--cream); border-radius: 18px; padding: 24px 28px;
  border: 1px solid rgba(35, 47, 95, .1);
}
.author-box img {
  width: 86px; height: 86px; object-fit: cover; object-position: top center;
  border-radius: 58% 42% 52% 48% / 50% 55% 45% 50%;
  background: var(--teal-light); flex: 0 0 auto;
}
.author-box strong { display: block; font-size: 16px; margin-bottom: 4px; }
.author-box span { font-size: 13.5px; line-height: 1.55; opacity: .85; }

/* ── Blog post header aligns with the cover image column ── */
.page-hero--post {
  max-width: 1148px;
  padding-left: 24px; padding-right: 24px;
}
.post-cover { width: min(1100px, calc(100% - 48px)); }

/* ═══ Sub-pages: ribbons positioned clear of headings (no overlap with text) ═══ */
.subpage .ribbon--navy   { top: -26vh; }                 /* thin arc above the header only */
.subpage .ribbon--teal   { top: 62vh; }                  /* big S below the hero text zone */
.subpage .ribbon--purple { left: -30vw; top: 40vh; }     /* sliver at far left, below title */
.subpage .ribbon--orange { right: -22vw; top: -20vh; }   /* corner sliver, above heading line */
.subpage .ribbon--arc    { right: -14vw; bottom: -30vh; }

/* ════ Headlines: medium (500), never bold — client direction ════ */
h1, h2, h3, h4, h5, h6,
.hero-l1, .hero-l2, .page-hero h1,
.stat-num, .big-num, .card-num, .stat-band-num,
.marquee-track span, .footer-thankyou, .post-cat,
.card h4, .card h5, .res-card h3, .tcard-info strong,
.num-row-n, .num-row-body strong {
  font-weight: 500 !important;
}

/* ════ Mega footer (shared with Design B) ════ */
.site-footer, .marquee { display: none; }
/* Design A has no --b-dark token: define the footer ground locally */
.footer-mega { --b-dark: #1B2447; }
.footer-mega {
  position: relative; z-index: 1;
  background: var(--b-dark); color: var(--white);
  padding: clamp(70px, 8vw, 130px) clamp(28px, 4vw, 64px) clamp(28px, 3vw, 44px);
}
.fm-grid {
  display: grid;
  /* content-sized tracks spread edge to edge: logo left, socials right, the two link
     blocks evenly spaced between, so no single void collects the leftover width */
  grid-template-columns: repeat(4, auto);
  justify-content: space-between;
  gap: clamp(36px, 4vw, 76px);
  align-items: start;
  max-width: 1780px; margin: 0 auto;
}
.fm-logo { width: clamp(200px, 19vw, 290px); display: block; }
/* Navigation runs as three side-by-side lists rather than one tall stack, so the
   column ends up about as deep as Legal beside it instead of towering over it. */
.fm-nav {
  display: grid;
  grid-template-columns: repeat(3, max-content);
  gap: 0 clamp(30px, 3.4vw, 68px);
}
.fm-nav .fm-label { grid-column: 1 / -1; }
.fm-label {
  display: block;
  font-size: 13px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase;
  color: rgba(254, 254, 254, .45);
  margin-bottom: 30px;
  border: none; padding: 0; opacity: 1;
}
.fm-group { margin-bottom: 0; }
.fm-head {
  display: block; color: var(--orange); text-decoration: none;
  font-size: 19px; font-weight: 500; margin-bottom: 14px;
}
.fm-link {
  display: block; color: var(--white); text-decoration: none;
  font-size: 16.5px; font-weight: 400; margin-bottom: 13px;
}
.fm-link--static { cursor: default; opacity: .95; }
.fm-label--touch { margin-top: 44px; }
.fm-chip {
  display: inline-block; text-decoration: none;
  font-size: 14px; font-weight: 500;
  padding: 12px 18px; border-radius: 10px;
  margin: 0 8px 12px 0;
}
.fm-chip--outline { background: rgba(252, 176, 60, .12); color: var(--orange); }
.fm-chip--outline:hover { background: rgba(252, 176, 60, .2); }
.fm-chip--gold { background: var(--orange); color: var(--b-dark); }
.fm-chip--gold:hover { filter: brightness(1.05); }
.fm-social { display: flex; gap: 14px; justify-self: end; }
.fm-social a {
  width: 46px; height: 46px; border-radius: 50%;
  border: 1.5px solid rgba(254, 254, 254, .4);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--white); transition: border-color .15s, background .15s;
}
.fm-social a:hover { border-color: var(--white); background: rgba(254,254,254,.08); }
.fm-bottom {
  display: grid; grid-template-columns: 1fr 1fr auto;
  gap: clamp(36px, 5vw, 90px); align-items: end;
  max-width: 1780px; margin: clamp(52px, 6vw, 96px) auto 0;
}
.fm-cell .fm-label { margin-bottom: 16px; }
.fm-cell p, .fm-cell p a { color: var(--white); font-size: 17px; font-weight: 400; text-decoration: none; }
.fm-cell--right { text-align: right; display: flex; flex-direction: column; gap: 40px; align-items: flex-end; }
.fm-copy { color: rgba(254,254,254,.5); font-size: 14px; }

/* ── Footer link hover: colour eases to brand teal while an underline wipes in from
   the left (and retracts to the right on the way out, via the transform-origin flip).
   No GSAP touches the footer, so real transforms are safe here. ── */
a.fm-head, a.fm-link, .fm-cell p a, .fm-top {
  position: relative; width: fit-content;
  transition: color .28s cubic-bezier(.22, .61, .36, 1),
              transform .28s cubic-bezier(.22, .61, .36, 1);
}
a.fm-head::after, a.fm-link::after, .fm-cell p a::after, .fm-top::after {
  content: ''; position: absolute; left: 0; bottom: -3px;
  width: 100%; height: 2px; border-radius: 2px;
  background: currentColor;
  transform: scaleX(0); transform-origin: right center;
  transition: transform .34s cubic-bezier(.22, .61, .36, 1);
}
a.fm-head:hover, a.fm-link:hover, .fm-cell p a:hover, .fm-top:hover {
  color: var(--teal); transform: translateX(4px);
}
a.fm-head:hover::after, a.fm-link:hover::after, .fm-cell p a:hover::after, .fm-top:hover::after {
  transform: scaleX(1); transform-origin: left center;
}
/* non-link list items must not pick up the affordance */
.fm-link--static { pointer-events: none; }

/* social icons follow the same colour move — their SVGs use currentColor */
.fm-social a {
  transition: color .28s ease, border-color .28s ease, background-color .28s ease, transform .28s cubic-bezier(.22, .61, .36, 1);
}
.fm-social a:hover {
  color: var(--teal); border-color: var(--teal);
  background: rgba(10, 175, 181, .12);
  transform: translateY(-3px);
}

@media (prefers-reduced-motion: reduce) {
  a.fm-head, a.fm-link, .fm-cell p a, .fm-top, .fm-social a,
  a.fm-head::after, a.fm-link::after, .fm-cell p a::after, .fm-top::after { transition: none; }
  a.fm-head:hover, a.fm-link:hover, .fm-cell p a:hover, .fm-top:hover,
  .fm-social a:hover { transform: none; }
}
.fm-top {
  color: var(--white); text-decoration: none;
  font-size: 16px; font-weight: 500;
  display: inline-flex; align-items: center; gap: 10px;
  min-height: 44px;
}
/* Between the nav breakpoint (900px) and ~1250px an 880px mega panel cannot fit:
   anchored to its nav item's right edge it runs off the left of the viewport.
   Drop the imagery and narrow the panel to the link column alone. */
@media (max-width: 1250px) {
  .drop--mega { min-width: min(520px, calc(100vw - 32px)); }
  .drop-photo, .drop-feature { display: none; }
  .drop--mega .drop-col { border-right: none; padding-right: 0; }
}

@media (max-width: 1000px) {
  .fm-grid { grid-template-columns: 1fr 1fr; }
  /* half the width to work with, so the nav lists drop to two across */
  .fm-nav { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 30px clamp(20px, 3vw, 40px); }
  .fm-social { flex-direction: row; }
  .fm-bottom { grid-template-columns: 1fr; gap: 28px; }
  .fm-cell--right { text-align: left; align-items: flex-start; gap: 18px; }
}


/* Stat numerals never wrap (e.g. "1 of 500") */
.stat-num { white-space: nowrap; }
.stats .stat { max-width: none; }

/* ── Credibility stats: count up while resolving out of a blur ──
   Blur/scale/opacity live in CSS (class-toggled) rather than in GSAP so the whole
   effect lifts cleanly into a Wix Studio HTML embed or custom element. ── */
.stat-num { font-variant-numeric: tabular-nums; transform-origin: 0% 50%; }
.stat-num.is-counting {
  opacity: 0; transform: scale(.92); filter: blur(10px);
  will-change: opacity, transform, filter;
}
.stat-num.is-counted {
  opacity: 1; transform: scale(1); filter: blur(0);
  transition: opacity 1.2s cubic-bezier(.22, .61, .36, 1),
              transform 1.2s cubic-bezier(.22, .61, .36, 1),
              filter 1.2s cubic-bezier(.22, .61, .36, 1);
}

/* Certification badges: larger */
/* Fourteen certification badges rather than five: wrap them into centred rows and step
   the size down so a full set still reads as a wall of proof, not a scroll. */
/* ── Certification badges: a continuous right-to-left marquee ──
   The strip holds the fourteen badges twice; the duplicate set is what makes the loop
   seamless. Spacing is a trailing margin per badge rather than flex `gap`, so both
   halves measure identically and translating by exactly -50% lands on the seam. */
.badge-marquee {
  margin-top: 60px;
  overflow: hidden;
  /* badges drift in and out of the edges instead of being cut off square */
  -webkit-mask-image: linear-gradient(to right, transparent, #000 7%, #000 93%, transparent);
          mask-image: linear-gradient(to right, transparent, #000 7%, #000 93%, transparent);
}
.badge-track {
  display: flex; align-items: center;
  width: max-content;
  animation: badge-scroll 48s linear infinite;
}
.badge-track img {
  height: clamp(74px, 7.7vw, 125px);   /* +20% at client request */
  flex: 0 0 auto;
  margin-right: clamp(20px, 2.4vw, 40px);
}
.badge-marquee:hover .badge-track { animation-play-state: paused; }
@keyframes badge-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  /* no drift: fall back to a static centred block and drop the duplicate set */
  .badge-marquee { -webkit-mask-image: none; mask-image: none; }
  .badge-track { animation: none; width: auto; flex-wrap: wrap; justify-content: center; }
  .badge-track img[aria-hidden="true"] { display: none; }
}

/* ── Home: the A-Team is one group shot rather than four cards ── */
.team-group {
  margin: clamp(36px, 4vw, 58px) 0 0;
  border-radius: clamp(16px, 2vw, 26px);
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(20, 27, 56, .26);
}
/* Fixed 550px band. The source has a lot of empty ceiling above the group, so the crop
   is weighted low and the faces sit in frame rather than the roof. */
.team-group img {
  width: 100%; display: block;
  height: 550px;
  object-fit: cover;
  /* The group shot is 1.15 (near-square) in a ~2.36 band, so cover shows only ~49% of
     the image height. The previous value (72%) was tuned for the old photo and framed
     36.8%-85.7% — legs, not faces. Faces in the current photo sit at roughly 22%-47%,
     so 30% frames 15.3%-64.2% and keeps every head well inside. Recompute this if the
     photo is ever swapped again. */
  object-position: center 30%;
}
/* 550px would swallow a phone screen — step it down there */
@media (max-width: 700px) {
  /* A fixed 340px height made the box 0.89 (portrait) against a 1.15 source, so cover
     trimmed ~23% of the width — the people at each end lost. Using the source's own
     aspect ratio instead means no crop at all, at any phone width. */
  .team-group img { height: auto; aspect-ratio: 1219 / 1059; }
}


/* ═══ Small screens (phones / narrow tablets) ═══════════════════════════════════ */
@media (max-width: 600px) {
  /* Footer: two columns needed 386px of a 375px viewport and overflowed. */
  .fm-grid { grid-template-columns: 1fr; gap: 32px; }
  .fm-nav { grid-template-columns: 1fr; gap: 0; }
  .fm-group { margin-bottom: 30px; }
  .fm-bottom { gap: 24px; }
  .fm-logo { width: min(240px, 70vw); }

  /* Team cards: 1fr columns were resolving unevenly (132px vs 153px) because a long
     word set one column's min-content. minmax(0,1fr) forces true halves. */
  .team-teaser, .team-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .tcard { padding: 14px 10px 0; }
  .tcard-info { padding: 12px 6px 16px; }

  /* Stat blocks need the full width for their long labels at this size. */
  .stat { flex: 1 1 100%; }
  .stats { gap: 22px; }

  /* Numbered cards already single-column below 700px — just tighten the padding. */
  .num-row { padding: 24px 20px 28px; }

  /* Prime SI / Salesforce / Customer sat in one flex row. `flex: 1` without min-width:0
     can't shrink past min-content, so the Customer box overflowed its container by 40px
     and got clipped by the panel. Stack them instead. */
  .dg-bottom { flex-direction: column; gap: 14px; }
  #fit .dg-bottom { gap: 14px; }
  .dg-box { min-width: 0; width: 100%; }
  .dg-sf, #fit .dg-sf { width: 62px; align-self: center; }
}


/* Dropdown images were removed at the client's request, so the Services and About Us
   mega panels are a single link column now — no divider, no reserved photo width.
   Resources still has a second column (the latest-article text link). */
.drop--mega:not(:has(.drop-feature)) {
  min-width: min(420px, calc(100vw - 32px));
}
.drop--mega:not(:has(.drop-feature)) .drop-col {
  border-right: none; padding-right: 0;
}
.drop-feature { flex: 0 0 300px; }


/* Numbered cards carrying only a number + sentence (the "Signs your program needs a
   rescue" set) don't need the padding the titled cards do — that section was reading
   far too tall. Titled cards elsewhere are untouched. */
.num-row:not(:has(strong)) {
  padding: 20px 20px 24px;
  gap: 8px;
}
.num-row:not(:has(strong)) .num-row-n { font-size: clamp(26px, 2.2vw, 36px); }
.num-row:not(:has(strong)) .num-row-body p { font-size: clamp(13.5px, 1.05vw, 15.5px); line-height: 1.55; }


/* Second statistic filling the space to the right of the 73% band (client note 4d).
   The 180+ figure is the one already used in the Step 3 card on the same page. */
.stat-band { justify-content: space-between; }
.stat-band-aside {
  flex: 0 1 320px; align-self: stretch;
  display: flex; flex-direction: column; justify-content: center;
  padding-left: clamp(24px, 3vw, 48px);
  border-left: 1px solid rgba(254, 254, 254, .22);
}
.stat-band-aside-num {
  display: block; line-height: 1; margin-bottom: 12px;
  font-size: clamp(34px, 3.2vw, 52px); font-weight: 800; color: var(--teal);
}
.stat-band-aside p { font-size: clamp(12.5px, 1vw, 14.5px); line-height: 1.55; opacity: .92; }
@media (max-width: 900px) {
  .stat-band-aside {
    flex: 1 1 auto; width: 100%;
    padding-left: 0; padding-top: 22px;
    border-left: none; border-top: 1px solid rgba(254, 254, 254, .22);
  }
}


/* Gold card eyebrow — used where the label needs to carry more weight than the
   default muted-navy treatment (Start Your Transformation / Hire Elite Talent). */
.card-kicker--gold {
  color: var(--orange);
  font-size: 14px;
  letter-spacing: .09em;
  margin-bottom: 14px;
}

/* "Where we fit" no longer carries the three-box diagram, so the copy is on its own in
   the row — cap the measure rather than letting it run the full panel width. */
#fit .diagram-copy { max-width: 980px; }
/* …and the panel no longer needs the height the diagram called for. */
#fit .panel-inner { min-height: 0; }

/* ═══════════════════ Dreamforce 2026 event page ═══════════════════════════════ */

/* Nav: the event entry is time-limited, so it reads as a marker rather than a
   permanent section — teal dot, dropped when the burger takes over. */
.nav-item--event > a,
.mm-top--event { position: relative; padding-left: 16px; }
.nav-item--event > a::before,
.mm-top--event::before {
  content: ''; position: absolute; left: 0; top: 50%;
  width: 7px; height: 7px; margin-top: -3px;
  border-radius: 50%; background: var(--teal);
}
/* Rings ripple out of the dot continuously so the live event reads as live. Both
   pseudo-elements run the same loop half a cycle apart, so a new ring is always on its
   way out before the last one has faded — no gap, and no beat between pulses. Spread on
   a box-shadow rather than a scaled element: nothing reflows and the label can't shift. */
.nav-item--event > a::after,
.mm-top--event::after {
  content: ''; position: absolute; left: 0; top: 50%;
  width: 7px; height: 7px; margin-top: -3px;
  border-radius: 50%; pointer-events: none;
}
.nav-item--event > a::before, .nav-item--event > a::after,
.mm-top--event::before, .mm-top--event::after {
  animation: nav-event-ripple 1.9s linear infinite;
}
/* negative delay drops the second ring in mid-flight instead of waiting a beat first */
.nav-item--event > a::after, .mm-top--event::after { animation-delay: -0.95s; }
@keyframes nav-event-ripple {
  0%   { box-shadow: 0 0 0 0 rgba(10, 175, 181, .5); }
  100% { box-shadow: 0 0 0 12px rgba(10, 175, 181, 0); }
}
/* .mobile-menu .mm-top sets `padding: 14px 0`, which outranks a bare .mm-top--event —
   match its specificity so the label clears the dot. */
.mobile-menu .mm-top--event { padding-left: 16px; }
@media (prefers-reduced-motion: reduce) {
    .nav-item--event > a::before, .nav-item--event > a::after,
  .mm-top--event::before, .mm-top--event::after { animation: none; }
}

/* ── Hero: SF skyline footage behind the type ── */
.df-hero {
  position: relative; z-index: 1; overflow: hidden;
  min-height: min(88svh, 820px);
  display: flex; align-items: flex-end;
  /* full-bleed: the bar floats over the footage, so nothing frames the top edge */
  margin: 0;
}
.df-hero-video {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%; object-fit: cover;
  /* the footage is already dusk-dark; a touch more contrast holds the type */
  filter: saturate(1.05) contrast(1.04);
}
/* Scrim: heavier at the foot where the copy sits, clear at the top so the bridge reads. */
.df-hero-scrim {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(to top, rgba(20, 27, 56, .92) 0%, rgba(20, 27, 56, .72) 32%,
                    rgba(20, 27, 56, .34) 62%, rgba(20, 27, 56, .30) 100%);
}
.df-hero-inner {
  position: relative; z-index: 2;
  width: 100%; max-width: 1600px; margin: 0 auto;
  padding: calc(var(--header-h) + clamp(56px, 9vh, 120px))
           clamp(24px, 5vw, 84px) clamp(46px, 6vw, 88px);
  color: var(--white);
}
/* type scale is shared with .page-hero above; only the colours differ over video */
.df-hero-inner h1 { color: var(--white); }
.df-kicker { color: var(--orange); margin-bottom: 20px; }
.df-hero-sub { color: var(--white); opacity: .92; }
.df-hero .hero-actions { justify-content: flex-start; margin-top: 30px; }
.df-hero .btn-ghost { color: var(--white); opacity: .85; }
.df-hero .btn-ghost:hover { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  /* no autoplaying footage — fall back to the poster frame as a still */
  .df-hero-video { display: none; }
  .df-hero { background: #141B38 url('../assets/df-header-poster.jpg') center / cover no-repeat; }
}

/* ── Session card ── */
.df-session { display: flex; gap: clamp(28px, 4vw, 64px); align-items: center; }
/* Same portrait treatment as the team cards — organic blob mask with the orange accent
   peeking out behind it — but with the white card stripped off, so it reads straight
   against the navy panel. Reusing .tcard keeps it in step if that component changes. */
.tcard--bare {
  background: transparent;
  box-shadow: none;
  padding: 18px 10px 0;
}
.tcard--bare:hover { box-shadow: none; }
.df-session-figure { flex: 0 0 clamp(220px, 24vw, 340px); }
.df-session-body { flex: 1; min-width: 0; }
.df-facts { margin-top: clamp(22px, 2.4vw, 34px); display: grid; gap: 14px; }
.df-fact { display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; }
.df-fact dt {
  flex: 0 0 78px;
  font-size: 12.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--orange);
}
.df-fact dd { flex: 1; min-width: 220px; font-size: clamp(14px, 1.2vw, 17.5px); line-height: 1.55; }
.df-session-actions { margin-top: clamp(26px, 2.8vw, 40px); display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
.df-note { font-size: 13px; opacity: .72; }

/* ── Experts: same team cards, three across in two rows ──
   Capped and centred so a third of the panel doesn't blow the portraits up past the
   ~330px the team cards run at elsewhere on the site. */
/* Four across, so the six run 4 + 2. At full width that lands each card near 350px —
   the same size the team teaser runs at on the home page. */
.team-grid--experts { grid-template-columns: repeat(4, minmax(0, 1fr)); }

/* ── Ask us about ── */
.df-topics {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(16px, 1.6vw, 24px); margin-top: clamp(40px, 4.5vw, 64px);
}
.df-topic {
  background: rgba(35, 47, 95, .04);
  border: 1px solid rgba(35, 47, 95, .12);
  border-radius: 18px;
  padding: clamp(24px, 2.2vw, 34px) clamp(20px, 1.9vw, 30px);
  position: relative; top: 0;
  transition: background .22s ease, border-color .22s ease, top .22s ease, box-shadow .22s ease;
}
.df-topic:hover {
  background: rgba(10, 175, 181, .07);
  border-color: rgba(10, 175, 181, .4);
  top: -4px; box-shadow: 0 16px 38px rgba(35, 47, 95, .12);
}
@media (prefers-reduced-motion: reduce) { .df-topic { transition: none; } .df-topic:hover { top: 0; } }
.df-topic strong { display: block; font-size: clamp(16px, 1.4vw, 21px); font-weight: 700; margin-bottom: 10px; }
.df-topic p { font-size: 15px; line-height: 1.6; opacity: .82; }

/* ── Booking form on the navy panel ── */
.df-form .form-field label, .df-form .form-radios legend { color: var(--white); }
.df-form .form-hint { font-size: 12px; opacity: .6; }
.form-radios { border: none; padding: 0; margin: 0; }
.form-radios legend {
  padding: 0; margin-bottom: 8px;
  font-size: 12.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
}
.form-radio { display: flex; align-items: center; gap: 10px; font-size: 15px; padding: 6px 0; }
.form-radio input { accent-color: var(--teal); width: 17px; height: 17px; }

@media (max-width: 1100px) {
  .team-grid--experts { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .df-topics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  /* the burger menu owns navigation at this width; the dot loses its context */
  .nav-item--event > a::before, .nav-item--event > a::after { display: none; }
  .df-session { flex-direction: column; align-items: flex-start; }
  .df-session-figure { flex: 0 0 auto; width: min(280px, 66vw); }
}
@media (max-width: 700px) {
  .df-hero { min-height: 78svh; }
  .team-grid--experts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .df-topics { grid-template-columns: 1fr; }
}

/* The Dreamforce entry makes this a five-item bar, so hand over to the burger a little
   earlier than 900px — otherwise the links wrap onto two lines around 1000px. */
@media (max-width: 1080px) {
  .header-nav { display: none; }
  .nav-burger { display: flex; }
  .site-header .btn-cta { display: none; }
}

/* ── Home hero: scroll cue ──
   The wrapper does the centring so GSAP is free to own `transform` on the link itself
   (it writes transform + translate/rotate/scale inline, which would beat a
   translateX(-50%) centring rule — the same trap noted on .tcard and .num-row). */
.scroll-cue-wrap {
  position: absolute; z-index: 2;
  left: 0; right: 0; bottom: clamp(18px, 3.4vh, 40px);
  display: flex; justify-content: center;
  pointer-events: none;
}
.scroll-cue {
  pointer-events: auto;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  text-decoration: none; color: var(--white);
  padding: 6px 12px 0;
}
.scroll-cue-label {
  font-size: 11.5px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
  opacity: .72; transition: opacity .22s ease;
}
.scroll-cue:hover .scroll-cue-label { opacity: 1; }

/* Thin rail with a short bar that runs down it, pauses, and repeats. */
.scroll-cue-track {
  position: relative; overflow: hidden;
  width: 2px; height: clamp(36px, 5vh, 54px);
  border-radius: 2px;
  background: rgba(254, 254, 254, .26);
  transition: background .22s ease;
}
.scroll-cue:hover .scroll-cue-track { background: rgba(254, 254, 254, .4); }
.scroll-cue-track::after {
  content: ''; position: absolute; left: 0; right: 0;
  height: 40%; border-radius: 2px;
  background: var(--orange);
  animation: scroll-cue-run 1.9s cubic-bezier(.62, .04, .34, 1) infinite;
}
@keyframes scroll-cue-run {
  0%   { top: -40%; }
  62%  { top: 100%; }
  100% { top: 100%; }   /* the tail of the cycle is the beat between runs */
}
@media (prefers-reduced-motion: reduce) {
  .scroll-cue-track::after { animation: none; top: 30%; }
}
/* Short hero on phones (78svh) leaves little room under the CTA — tighten the cue so it
   clears the button instead of sitting on it. */
@media (max-width: 700px) {
  .scroll-cue-wrap { bottom: 12px; }
  .scroll-cue { gap: 8px; padding-top: 0; }
  .scroll-cue-label { font-size: 10px; letter-spacing: .16em; }
  .scroll-cue-track { height: 26px; }
}
/* On a short phone the hero has no spare room at all, and the cue would land on the
   button. Nothing is lost by dropping it: the fold is obvious at that size. */
@media (max-width: 700px) and (max-height: 720px) {
  .scroll-cue-wrap { display: none; }
}

/* ── About Us: Our Story gains the founder's card alongside the copy ── */
/* Capped and centred: the copy keeps a readable measure, but the card sits beside it
   rather than being pushed to the far edge with a dead column between them. */
.story-row {
  display: flex; align-items: center;
  gap: clamp(28px, 3.5vw, 56px);
  max-width: 1120px; margin: 0 auto;
}
.story-copy { flex: 1; min-width: 0; }
.story-copy .lede { max-width: none; }
.story-founder { flex: 0 0 clamp(220px, 22vw, 300px); }
@media (max-width: 900px) {
  .story-row { flex-direction: column; align-items: flex-start; }
  .story-founder { flex: 0 0 auto; width: min(260px, 62vw); }
}

/* ── Modal (About Us: Join the team) ── */
.modal { position: fixed; inset: 0; z-index: 150; display: flex; align-items: center; justify-content: center; padding: clamp(12px, 3vh, 40px) clamp(16px, 4vw, 48px); }
/* The modal markup sits inside <main>. If any ancestor forms a stacking context the
   modal's z-index is scoped to it, so the fixed header (z-index 100 at the root) can
   paint over the panel and swallow the close button. Hiding the header while the modal
   is open is independent of stacking order, and hands the form the whole viewport. */
body.modal-open .site-header { display: none; }
.modal[hidden] { display: none; }
.modal-backdrop { position: absolute; inset: 0; background: rgba(20, 27, 56, .62); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.modal-panel {
  position: relative; z-index: 1;
  width: min(720px, 100%);
  /* fill the space actually available rather than a flat 88svh, which overflowed a
     short phone viewport and pushed the panel top off-screen */
  max-height: calc(100svh - 2 * clamp(12px, 3vh, 40px)); overflow-y: auto;
  background: var(--white); color: var(--navy);
  border-radius: clamp(18px, 2vw, 26px);
  padding: clamp(28px, 3.4vw, 52px);
  box-shadow: 0 30px 90px rgba(20, 27, 56, .34);
}
.modal-close {
  /* sticky, not absolute: the panel is the scroll container, so the close stays pinned
     at the top-right through a long form instead of scrolling away with the content */
  position: sticky; top: 0; float: right; margin: -6px -6px 0 12px; z-index: 3;
  width: 38px; height: 38px; border: none; border-radius: 50%;
  background: rgba(35, 47, 95, .07); color: var(--navy);
  font-size: 24px; line-height: 1; cursor: pointer;
  transition: background .18s;
}
.modal-close:hover { background: rgba(35, 47, 95, .14); }
.modal-panel .form-grid { margin-top: 26px; }
.modal-panel .form-field input[type="file"] { border: 1px dashed rgba(35, 47, 95, .3); background: rgba(35, 47, 95, .03); cursor: pointer; }
.form-hint { font-size: 12px; opacity: .7; line-height: 1.5; }
body.modal-open { overflow: hidden; }
/* Six cards in a four-column grid leaves an orphaned pair — centre the second row
   so Khaled and Luca sit under Anuj and Keith rather than hugging the left edge. */
.team-grid--experts > .tcard:nth-child(5) { grid-column: 2; }
@media (max-width: 1100px) { .team-grid--experts > .tcard:nth-child(5) { grid-column: auto; } }

/* ── Legal pages (privacy) ── */
/* Inherits .article-body's centred 820px measure — pinning it left stranded a wide
   empty column on the right. */
.legal-body { max-width: 820px; }
.legal-updated { font-size: 13px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; opacity: .55; }
.legal-body h2 {
  font-size: clamp(20px, 1.9vw, 27px); line-height: 1.25;
  margin: clamp(38px, 3.6vw, 54px) 0 14px;
  color: var(--navy);
}
.legal-body h2:first-of-type { margin-top: clamp(28px, 2.6vw, 38px); }
.legal-body code { font-size: .92em; background: rgba(35, 47, 95, .06); padding: 2px 6px; border-radius: 5px; }
.legal-body a { color: var(--teal); font-weight: 500; }
/* Unconfirmed details are highlighted so they can't be published by accident. */
.legal-body mark { background: #FFF1B8; color: var(--navy); padding: 1px 5px; border-radius: 4px; font-weight: 500; }
.legal-todo {
  border-left: 4px solid var(--orange);
  background: rgba(252, 176, 60, .1);
  padding: 18px 22px; border-radius: 0 12px 12px 0;
  font-size: clamp(13.5px, 1.05vw, 15px); line-height: 1.65;
  margin-bottom: 8px;
}

/* Blog excerpts come from Wix and vary wildly in length; the design assumed short
   hand-written ones. Clamp card copy to 3 lines so the grid stays even. */
.res-card p {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Wix auto-excerpts are long; the design's standfirst is ~2 lines. Clamp so the
   article hero keeps its proportions. */
.page-hero--post .page-hero-sub {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Author avatars: the design used initials; real member photos slot into the same circle. */
.res-avatar--img { padding: 0; overflow: hidden; object-fit: cover; }

/* ── Form anti-spam + result message ──
   The honeypot is a real, focusable input kept out of the visual and accessibility
   trees. People never see it; bots that fill every field give themselves away, and
   the server discards those submissions. `display: none` is avoided deliberately —
   some bots skip hidden inputs, which would defeat the trap. */
.hp-field {
  position: absolute !important; width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}
.form-success {
  margin-top: 18px; padding: 14px 18px; border-radius: 12px;
  background: rgba(0, 166, 158, .12); color: var(--navy);
  font-weight: 500; line-height: 1.5;
}
.panel--navy .form-success, .panel--teal .form-success,
.df-book .form-success { background: rgba(254, 254, 254, .16); color: var(--white); }

/* CV picker validation feedback */
.form-hint.cv-hint-error { color: #C0392B; font-weight: 500; }

/* ── Collage on mobile ──
   The desktop layout is a 12-column grid with explicit row spans. There was no mobile
   override, so on a phone tiles like .cl-5 (2 of 12 columns, 3 rows tall) collapsed to
   roughly 65px wide by 250px tall — a 0.26 ratio. Every source photo is 4:3 landscape
   (1.33), so `object-fit: cover` was discarding ~80% of the width and cropping the people
   out entirely; several tiles showed only ceiling or sky.

   On mobile we drop the mosaic and give each photo its native 4:3 box, so nothing is
   cropped: two full-width features and a 2x2 of the rest. */
@media (max-width: 700px) {
  .collage {
    grid-template-columns: repeat(2, 1fr);
    grid-auto-rows: auto;
    gap: 10px;
  }
  .collage .cl {
    grid-column: auto;
    grid-row: auto;
    height: auto;
    aspect-ratio: 4 / 3;   /* matches the source images, so cover has nothing to trim */
  }
  /* the two strongest group shots get the full width */
  .collage .cl-1,
  .collage .cl-7 { grid-column: 1 / -1; }
}

/* ── Dreamforce happy hour, pulled live from Wix Events ── */
.event-card {
  margin-top: clamp(24px, 3vw, 40px);
  display: grid; grid-template-columns: minmax(0, 6fr) minmax(0, 6fr);
  gap: clamp(20px, 2.6vw, 40px); align-items: center;
  background: var(--white); border-radius: clamp(16px, 2vw, 24px);
  padding: clamp(18px, 2vw, 28px);
  box-shadow: 0 18px 50px rgba(35, 47, 95, .10);
}
/* No forced ratio. The client's banner is 1827x1023 (1.79); a 4/3 box cropped 26% off
   the width and sliced the first and last letters of the title. Letting the image keep
   its own shape also means any future upload displays uncropped. */
.event-cover { width: 100%; display: block; border-radius: 14px; height: auto; }
.event-meta { display: flex; flex-direction: column; gap: 18px; }
.event-fact dt {
  font-size: 12px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase;
  color: var(--teal); margin-bottom: 4px;
}
.event-fact dd { margin: 0; font-size: clamp(15px, 1.3vw, 18px); font-weight: 500; line-height: 1.5; }
.event-addr { font-weight: 400; opacity: .75; font-size: .92em; }
.event-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 4px; }
/* The RSVP is the primary action on this card — give it real presence next to the
   three ghost links rather than letting it shrink to its four characters. */
.event-actions .btn-cta { min-width: 190px; padding: 0 2.2rem; }
@media (max-width: 700px) {
  .event-actions { gap: 10px; }
  .event-actions .btn-cta { width: 100%; min-width: 0; }
}
@media (max-width: 900px) {
  .event-card { grid-template-columns: 1fr; }
}

/* RSVP block under the event card */
/* The RSVP sat as bare fields directly on the panel, visually detached from the event
   it belongs to. Card treatment ties it to the event and gives the fields room. */
.rsvp-form {
  margin-top: clamp(18px, 2vw, 26px);
  max-width: none;
  background: rgba(35, 47, 95, .04);
  border: 1px solid rgba(35, 47, 95, .10);
  border-radius: clamp(16px, 2vw, 24px);
  padding: clamp(20px, 2.4vw, 34px);
  gap: clamp(14px, 1.4vw, 20px);
}
.rsvp-title {
  grid-column: 1 / -1; margin: 0; color: var(--navy);
  font-size: clamp(18px, 1.7vw, 24px); font-weight: 700; line-height: 1.25;
}
.rsvp-sub { grid-column: 1 / -1; margin: -6px 0 2px; font-size: 14.5px; opacity: .75; line-height: 1.5; }
.rsvp-actions {
  /* this element also carries .form-field, which sets flex-direction: column — without
     an explicit row the two responses stacked no matter what else was set */
  display: flex; flex-direction: row; flex-wrap: wrap; gap: 14px; align-items: center;
  margin-top: 6px; padding-top: clamp(14px, 1.6vw, 20px);
  border-top: 1px solid rgba(35, 47, 95, .10);
}
@media (max-width: 700px) {
  .rsvp-form { grid-template-columns: 1fr; }
  /* Side by side is a desktop layout. On a phone the pair stacks, primary first, each
     full width — squeezing both onto one line left two cramped tap targets. */
  .rsvp-actions { flex-direction: column; align-items: stretch; gap: 10px; }
  .rsvp-actions > * { width: 100%; text-align: center; justify-content: center; }
}
.rsvp-form select {
  width: 100%; padding: 12px 14px; border-radius: 10px;
  border: 1px solid rgba(35, 47, 95, .22); background: var(--white);
  font: inherit; color: var(--navy);
}
.event-closed { font-weight: 500; opacity: .7; }

.form-hint-inline { font-weight: 400; opacity: .7; font-size: .85em; }

/* Standalone /event-details/<slug> page — the event and its RSVP, nothing else.
   No width cap: a 900px cap left ~230px of dead space on the right of a 1113px
   container, and made the card look narrow beside a 999px heading. Both blocks now
   fill the panel, so the right edge lines up with the heading. */
.event-page .event-card,
.event-page .rsvp-form { max-width: none; width: 100%; }
.event-page .event-closed { margin-top: 24px; display: inline-block; }

@media (max-width: 700px) {
  /* Gutters were nesting: .page-hero 24 + .panel-inner 24 + .event-card 18 pushed the
     cover image to 66px from the edge and left it 239px of a 371px screen. The outer
     pair is doing the same job twice on a phone, so the panel keeps the page gutter and
     the inner wrapper drops to zero. */
  .event-page { padding-left: 16px; padding-right: 16px; }
  .event-page .panel-inner { padding-left: 0; padding-right: 0; }
  .event-page .event-card { padding: 14px; gap: 16px; }
  .event-page .rsvp-form { padding: 16px; }
}

