/* fonts.css is linked from each page's <head> (not @import'd here) so the
   browser discovers the font files in parallel with this stylesheet */

/* ==========================================================================
   Jib OS — landing page
   Hand-written CSS. No framework, no JS, no animation.
   Design tokens mirror the reference design's warm-neutral system.
   ========================================================================== */

/* --- tokens --------------------------------------------------------------- */
:root {
  /* warm paper surfaces */
  --surface-50:  oklch(99.3% 0.004 96);
  --surface-300: oklch(97.5% 0.007 96);
  --surface-500: oklch(96.3% 0.012 96);
  --white:       oklch(100% 0 0);

  /* warm-grey ink ramp */
  --ink-100: oklch(95.8% 0.007 98);
  --ink-200: #edeae4;
  --ink-300: oklch(87.6% 0.011 98);
  --ink-400: oklch(71.4% 0.009 98);
  --ink-500: oklch(67.6% 0.012 98);
  --ink-600: oklch(57.6% 0.008 98);
  --ink-700: oklch(38%   0.008 98);
  --ink-800: oklch(29%   0.005 98);
  --ink-900: oklch(23%   0.002 98);

  --text-primary:  var(--ink-900);
  --text-secondary:var(--ink-700);
  /* darker than the ink-500 ramp step it replaced: small muted labels
     (stat captions, "/ month", card intents, pills) need ≥4.5:1 on paper */
  --text-muted:    oklch(53% 0.011 98);
  --text-inverse:  var(--ink-100);

  --border-subtle:  var(--ink-100);
  --border-default: var(--ink-200);
  --border-strong:  var(--ink-300);

  /* accents sampled from Jib himself */
  --accent-blue:   rgb(59 130 246);
  --accent-blue-d: rgb(37 99 235);
  --accent-teal:   rgb(45 212 191);
  --accent-coral:  rgb(251 146 96);

  --font-heading: "new-kansas", Georgia, serif;
  --font-body: "Jib Sans", "Noto Sans Thai", system-ui, -apple-system, sans-serif;
}

/* No lang-scoped override here, unlike the TH site. Thai needed one: it dropped
   the serif headings for a Thai sans and swapped the body face. Indonesian is
   Latin script, so lang="id" inherits the root stack above and the Indonesian
   page gets the same typography as the English one — new-kansas headings,
   Jib Sans body. That is intentional, not an oversight.

   NOTE: new-kansas is served from Adobe Typekit kit rsi5hww, and Typekit web
   projects are DOMAIN-SCOPED. hdmall.id has to be added to that kit or every
   heading silently falls back to Georgia. There is no console error. */
:root {

  --radius-sm: 0.375rem;
  --radius-md: 0.5rem;
  --radius-lg: 0.625rem;
  --radius-xl: 0.75rem;
  --radius-2xl: 1rem;
  --radius-3xl: 1.5rem;
  --radius-full: 9999px;

  --container: 1320px;
  --gutter: 24px;
  --section-y: 120px;

  --shadow-card: 0 1px 2px rgb(28 25 23 / 0.04), 0 8px 24px -8px rgb(28 25 23 / 0.10);
  --shadow-raised: 0 1px 2px rgb(28 25 23 / 0.06), 0 12px 32px -8px rgb(28 25 23 / 0.16);
}

/* --- reset ---------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: auto; }

/* the one exception to the no-motion rule: in-page anchor scrolling */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}

body {
  font-family: var(--font-body);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--text-primary);
  background: var(--surface-50);
  -webkit-font-smoothing: antialiased;
}

img, svg, video { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; padding: 0; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }

/* Respect the "no animation" rule globally — nothing here transitions. */

/* --- layout primitives ---------------------------------------------------- */
.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.section { padding-block: var(--section-y); }
.section--tight { padding-block: 72px; }

.eyebrow {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 500;
  color: var(--text-secondary);
  text-align: center;
}

h1, h2, h3, h4 {
  font-family: var(--font-heading);
  font-weight: 500;
  letter-spacing: -0.013em;
  line-height: 1.15;
  text-wrap: balance;
}

h1 { font-size: clamp(2.5rem, 5.2vw, 4rem); line-height: 1.07; letter-spacing: -0.02em; }
h2 { font-size: clamp(2rem, 3.6vw, 3rem); line-height: 1.15; }
h3 { font-size: 1.75rem; line-height: 1.2; letter-spacing: -0.023em; }
h4 { font-size: 1.25rem; line-height: 1.25; letter-spacing: -0.01em; }

.lede {
  font-size: 1.25rem;
  line-height: 1.6;
  color: var(--text-secondary);
  text-wrap: pretty;
}

/* --- buttons -------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 14px 26px;
  border-radius: var(--radius-xl);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: -0.011em;
  white-space: nowrap;
}

.btn--primary { background: var(--ink-900); color: var(--white); }
.btn--primary:hover { background: var(--ink-800); }

.btn--light { background: var(--white); color: var(--ink-900); box-shadow: var(--shadow-card); }
.btn--light:hover { background: var(--ink-100); }

.btn--ghost-dark {
  background: rgb(255 255 255 / 0.10);
  color: var(--white);
  border: 1px solid rgb(255 255 255 / 0.18);
  backdrop-filter: blur(8px);
}
.btn--ghost-dark:hover { background: rgb(255 255 255 / 0.18); }

.btn--outline { border: 1px solid var(--border-strong); color: var(--ink-900); background: var(--white); }
.btn--outline:hover { background: var(--surface-300); }

.btn--sm { padding: 9px 16px; font-size: 0.875rem; }

/* the one conversion moment gets the biggest button on the page */
.btn--xl {
  padding: 18px 36px;
  font-size: 1.125rem;
  border-radius: var(--radius-2xl);
  box-shadow: 0 2px 4px rgb(10 6 20 / 0.18), 0 14px 40px -8px rgb(10 6 20 / 0.45);
}
.btn__arrow { font-weight: 400; }
.btn--xl:hover .btn__arrow { padding-inline-start: 2px; }

/* --- nav ------------------------------------------------------------------ */
.nav {
  position: fixed;
  top: 40px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 50;
  width: min(calc(var(--container) + -28px), calc(100% - 32px));
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.nav__group {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 6px;
  /* background: rgb(255 255 255 / 0.92); */
  backdrop-filter: blur(12px);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-card);
}

.nav__brand {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  font-family: var(--font-heading);
  font-size: 1.125rem;
  font-weight: 600;
  letter-spacing: -0.02em;
  white-space: nowrap;
}

/* Jib, the mascot, doubles as the brand mark */
.brandmark { width: 24px; height: 24px; object-fit: contain; flex: none; }
.footer__brand .brandmark { width: 28px; height: 28px; }

.nav__divider { width: 1px; height: 22px; background: var(--border-default); margin-inline: 4px; }

.nav__link {
  padding: 8px 14px;
  border-radius: var(--radius-md);
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--ink-800);
  white-space: nowrap;
}
.nav__link:hover { background: var(--surface-300); }

/* language select, dressed as a nav link with its own small chevron */
.nav__lang {
  appearance: none;
  -webkit-appearance: none;
  border: 0;
  padding: 8px 24px 8px 12px;
  border-radius: var(--radius-md);
  font: inherit;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--ink-800);
  cursor: pointer;
  background: transparent url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M3 4.5L6 7.5L9 4.5' fill='none' stroke='%23837d72' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>") right 8px center / 10px no-repeat;
}
.nav__lang:hover { background-color: var(--surface-300); }

/* landing-page variant: the pills wear the same glass as .btn--ghost-dark
   (article pages keep the white pills — their nav sits on paper, not art) */
.nav--glass .nav__group,
.nav--glass .nav__burgerpill {
  /* background: rgb(255 255 255 / 0.10);
  border: 1px solid rgb(255 255 255 / 0.18);
  backdrop-filter: blur(8px);
  box-shadow: none; */
}
.nav--glass .nav__brand,
.nav--glass .nav__link { color: var(--white); }
.nav--glass .nav__link:hover { background: rgb(255 255 255 / 0.14); }
.nav--glass .nav__lang {
  color: var(--white);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M3 4.5L6 7.5L9 4.5' fill='none' stroke='%23ffffff' stroke-opacity='0.8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>");
}
.nav--glass .nav__lang:hover { background-color: rgb(255 255 255 / 0.14); }
.nav--glass .nav__lang option { color: var(--text-primary); }
.nav--glass .nav__divider { background: rgb(255 255 255 / 0.25); }
.nav--glass .nav__burger span { background: var(--white); }
/* the open mobile sheet stays a solid white menu for readability */
.nav--glass .nav__mobile { color: var(--text-primary); }
.nav--glass .nav__mobile .nav__lang { color: var(--ink-800); background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M3 4.5L6 7.5L9 4.5' fill='none' stroke='%23837d72' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }

/* --- hero ----------------------------------------------------------------- */
/* the frame's own gradient is sampled from the hero art's top (near-navy)
   and bottom (dusty rose/coral) tones, so the inset margin reads as a
   continuation of the art instead of a cut-out white border */
.hero-frame {
  padding: 20px;
  background: var(--surface-500);
}

.hero {
  position: relative;
  isolation: isolate;
  min-height: min(90vh, 800px);
  min-height: min(90svh, 800px);
  border-radius: 2rem;
  padding-top: 168px;
  padding-bottom: 96px;
  overflow: hidden;
  text-align: center;
  color: var(--white);
  background: #171029;
}

.hero__art {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center bottom;
}

/* keeps the headline legible over the brightest part of the art */
.hero__scrim {
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(180deg, rgb(14 9 26 / 0.62) 0%, rgb(14 9 26 / 0.30) 42%, rgb(14 9 26 / 0) 72%);
}

/* reduced motion gets the video's opening frame as a still instead */
@media (prefers-reduced-motion: reduce) {
  .hero__video { display: none; }
  .hero {
    background: #171029 url("assets/brand/hero-poster.jpg") center bottom / cover no-repeat;
  }
}
@media (prefers-reduced-motion: reduce) and (max-width: 720px) {
  .hero {
    background: #171029 url("assets/brand/hero-poster-mobile.jpg") center bottom / cover no-repeat;
  }
}

.hero h1 { max-width: 20ch; margin-inline: auto; }

.hero .lede {
  max-width: 58ch;
  margin: 24px auto 0;
  color: rgb(255 255 255 / 0.82);
}

.hero__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 32px;
}

/* --- logo bar ------------------------------------------------------------- */
.logobar { background: var(--surface-500); padding-block: 48px; border-radius: 0 0 50px 50px; }
.logobar .eyebrow { margin-bottom: 32px; }

.logobar__row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 26px 56px;
  /* fade the outermost logos rather than hard-cut the row's edges. Wide
     enough to reach past the centering slack on a wrapped line (justify-
     content: center leaves empty space before the first/last item whenever
     a line's items don't fill the full row width) */
  -webkit-mask-image: linear-gradient(to right, transparent, black 140px, black calc(100% - 140px), transparent);
  mask-image: linear-gradient(to right, transparent, black 140px, black calc(100% - 140px), transparent);
}

.logobar__row img {
  height: 40px;
  width: 100px;
  object-fit: contain;
  opacity: 0.9;
  /* fixed box + contain: every mark gets the same footprint regardless of its
     native aspect ratio (a 346x96 wordmark and an 81x96 mark used to render
     at wildly different widths at a shared height).
     these are real partner marks — keep their color, they turn to mush in greyscale */
}

/* --- pull quote ----------------------------------------------------------- */
.quote { text-align: center; background: var(--surface-50); }

.quote blockquote {
  font-family: var(--font-heading);
  font-size: clamp(1.75rem, 3.2vw, 2.75rem);
  font-weight: 400;
  line-height: 1.28;
  letter-spacing: -0.018em;
  color: var(--ink-800);
  max-width: 22ch;
  margin-inline: auto;
  text-wrap: balance;
  /* grows from smaller to full size as the quote streams in on scroll
     (--stream-scale is set per scroll frame in assets/i18n.js) */
  transform: scale(var(--stream-scale, 1));
  transform-origin: center;
}


/* --- feature rows --------------------------------------------------------- */
.feature { padding-block: var(--section-y); }

/* breathing room between the two group sections */
.group + .group { margin-top: var(--section-y); }

/* the group's feature rows sit in one rounded card that rides up over the
   banner art, like the old agent card did */
.group__card {
  position: relative;
  margin-top: -104px;
  background: var(--white);
  border: 1px solid var(--border-default);
  /* concentric radii: the card is the outermost rounded surface, so its radius
     stays larger than anything nested inside it (32 > 16) */
  border-radius: 2rem;
  box-shadow: var(--shadow-raised);
  padding-inline: clamp(20px, 4vw, 64px);
}
.group__card .feature { padding-block: 56px; }
.group__card .feature .container { padding-inline: 0; }
/* immersive rows are background blocks, so they space with margins instead of
   internal padding — this keeps clear air between every row in the card */
.group__card .feature--immersive { margin-block: 48px; padding-block: 56px; }
.group__card .feature--immersive:last-child { margin-bottom: 56px; }

.feature__inner {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
  gap: 72px;
}

.feature--reverse .feature__media { order: -1; }

.feature__body { margin-top: 16px; max-width: 46ch; }

.feature__list { margin-top: 24px; display: grid; gap: 12px; }

.feature__list li {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  font-size: 0.9375rem;
  color: var(--text-secondary);
}

.feature__tick {
  flex: none;
  width: 20px; height: 20px;
  margin-top: 2px;
  border-radius: var(--radius-full);
  background: var(--ink-900);
  color: var(--white);
  font-size: 11px;
  line-height: 20px;
  text-align: center;
  font-weight: 700;
}

.feature__media img,
.feature__media video {
  width: 100%;
  border-radius: var(--radius-2xl); /* nested inside .group__card (2rem) */
  box-shadow: var(--shadow-raised);
  aspect-ratio: 16 / 10;
  object-fit: cover;
}

/* --- stat band ------------------------------------------------------------ */

.stats__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
  text-align: center;
}

.stat__num {
  font-family: var(--font-heading);
  font-size: clamp(1.375rem, 2.4vw, 2rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1;
}

.stat__label { margin-top: 10px; font-size: 0.9375rem; color: var(--text-muted); }

/* --- closing CTA ---------------------------------------------------------- */
.cta {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  text-align: center;
  color: var(--text-primary);
  margin: 20px;
  border-radius: 2rem;
  padding-block: 132px;
  padding-bottom: 400px;
}

.cta__art {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover; /* the plate is authored bright; the scrim is eased to 0.28 */
}

.cta__scrim { position: absolute; inset: 0; z-index: -1; background: rgb(16 10 28 / 0.28); }

.cta h2 { max-width: 18ch; margin-inline: auto; }
.cta .lede { max-width: 58ch; margin: 20px auto 0; }
.cta__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 32px; }

/* --- footer --------------------------------------------------------------- */
.footer {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  color: var(--white);
  padding-block: 84px 0px;
  padding-top: 0px;
}

/* frosted-glass card floating over the shared finale art, rather than the
   footer content sitting directly on the raw scrim */
.footer .container {
  /* background: linear-gradient(155deg, rgb(255 255 255 / 0.16), rgb(255 255 255 / 0.04) 60%);
  border: 1px solid rgb(255 255 255 / 0.22); */
  border-radius: 28px;
  /* backdrop-filter: blur(28px) saturate(150%);
  -webkit-backdrop-filter: blur(28px) saturate(150%);
  box-shadow:
    0 20px 48px -12px rgb(0 0 0 / 0.35),
    inset 0 1px 0 rgb(255 255 255 / 0.25); */
  padding: 56px 48px 40px;
  /* .footer has a fixed height for the finale art behind it; stretch the
     container to that height so footer__bottom can be pinned to its floor */
  height: 100%;
  display: flex;
  flex-direction: column;
}

.footer__top {
  display: grid;
  grid-template-columns: 2fr 1.2fr 1.4fr;
  gap: 48px;
}

.footer__blurb { max-width: 34ch; color: var(--white); font-size: 0.9375rem; margin-top: 14px; }

.footer__brand {
  display: flex; align-items: center; gap: 10px;
  color: var(--white);
  font-family: var(--font-heading);
  font-size: 1.25rem; font-weight: 600; letter-spacing: -0.02em;
}

.footer h4 {
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--white);
  margin-bottom: 16px;
}

.footer__links { display: grid; gap: 4px; font-size: 0.9375rem; }
/* padding instead of pure grid gap keeps each row a ≥28px touch target */
.footer__links a { display: inline-block; padding-block: 4px; color: var(--white); }
.footer__links a:hover { color: rgb(255 255 255 / 0.7); }

.footer__bottom {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  margin-top: auto;
  padding-top: 100px;
  font-size: 0.875rem;
  color: var(--white);
}

.footer__legal { color: inherit; }
.footer__legal:hover { color: var(--ink-600); }

/* --- responsive ----------------------------------------------------------- */
@media (max-width: 1024px) {
  :root { --section-y: 88px; }
  .feature__inner { grid-template-columns: 1fr; gap: 40px; }
  .feature--reverse .feature__media { order: 0; }
  .footer__top { grid-template-columns: 1fr 1fr; gap: 36px; }
  .stats__grid { grid-template-columns: repeat(2, 1fr); gap: 36px; }
}

@media (max-width: 720px) {
  :root { --section-y: 64px; --gutter: 18px; }
  /* one mobile type ladder: h1 40 → h2 + banner titles 28 → card h2 / h3 24
     → lede 17 → body 16. Class-level headings (.wall__head, .faq__aside h2)
     get the same 28 in their own later media blocks. */
  h2 { font-size: 1.75rem; }
  h3 { font-size: 1.5rem; }
  .lede { font-size: 1.125rem; }
  /* a right-shifted crop keeps the small banner Jibs (baked in at ~73% from
     the left) clear of the title on phones; the title's own mobile size lives
     in the late 720 block — it must follow the base clamp() in file order */
  .group .agent__art { object-position: 65% center; }
  .nav { top: 22px; }
  .hero-frame { padding: 10px; }
  .hero { border-radius: 1.25rem; }
  .cta { margin: 10px; border-radius: 1.25rem; }
  /* keep the brand visible; drop only the section links */
  .nav__group--links .nav__link,
  .nav__group--links .nav__divider { display: none; }
  .nav__brand { padding-inline: 10px; font-size: 1rem; }
  .nav__group { gap: 2px; }
  .nav__link { padding: 8px 10px; font-size: 0.875rem; }
  .btn--sm { padding: 9px 13px; }
  .hero { padding-top: 132px; }
  /* .footer rules removed with the <footer> element — site links now live in
     the .sitemap band below the finale artwork */
  .logobar__row img { height: 34px; width: 128px; }
  .logobar__row { gap: 20px 40px; }
}

/* --- print / reduced motion ----------------------------------------------- */
/* No motion to reduce — the page ships without animation by design. */

/* ==========================================================================
   Group banners (classes named agent__* from the removed Meet Jib showcase
   this pattern came from)
   ========================================================================== */

/* --- banner --- */
.agent__banner {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 560px;
  display: flex;
  align-items: center;
  padding-block: 88px 160px;
  border-radius: 50px 50px 0 0;
}

.agent__art {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover;
}

/* the art ends mid-card; fade it into the page so there is no hard seam beside it */
.agent__banner::after {
  content: "";
  position: absolute; left: 0; right: 0; bottom: 0;
  height: 140px;
  z-index: -1;
  background: linear-gradient(180deg, transparent, var(--surface-50));
}

/* lifts the headline off the brightest part of the cloud art */
.agent__scrim {
  position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(100deg, rgb(38 20 48 / 0.42) 0%, rgb(38 20 48 / 0.18) 46%, rgb(38 20 48 / 0) 72%);
}

.agent__title {
  font-family: var(--font-heading);
  font-weight: 500;
  color: var(--white);
  letter-spacing: -0.02em;
  line-height: 1.06;
  font-size: clamp(2.25rem, 4.4vw, 3.75rem);
  max-width: 20ch;
  text-shadow: 0 2px 24px rgb(30 16 40 / 0.28);
}

/* the second line is a subtitle: same voice, one step down (em-based so it
   tracks the title through every breakpoint) */
.agent__title span {
  display: block;
  margin-top: 0.2em;
  font-size: 0.78em;
}

/* daylight banner variant: dark title over a light wash, like the light
   immersive rows */
.agent__banner--light .agent__scrim {
  background: linear-gradient(100deg, rgb(255 250 240 / 0.55) 0%, rgb(255 250 240 / 0.24) 46%, rgb(255 250 240 / 0) 72%);
}
.agent__banner--light .agent__title { color: var(--text-primary); text-shadow: none; }

.pill {
  padding: 3px 9px;
  border-radius: var(--radius-full);
  font-size: 0.75rem;
  font-weight: 700;
  white-space: nowrap;
}
.pill--warn { background: #fdf0e3; color: #9a5a17; }
.pill--ok   { background: #e6f6ee; color: #1c6b46; }
.pill--wait { background: var(--surface-500); color: var(--text-muted); }

/* square looping video in a feature row keeps its 1:1 ratio */
.feature__media .feature__vid, .feature__media .feature__vidstill { aspect-ratio: 1 / 1; }
.feature__vidstill { display: none; }
@media (prefers-reduced-motion: reduce) {
  .feature__vid { display: none; }
  .feature__vidstill { display: block !important; }
}

.feature__cta { margin-top: 28px; }

/* --- immersive feature rows: full-width art background, text on one half --- */
.feature--immersive {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: var(--radius-2xl); /* nested inside .group__card (2rem) */
  color: var(--white);
  display: flex;
  align-items: center;
  min-height: 540px;
  padding-inline: clamp(24px, 4vw, 56px);
}
.immersive__art {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover;
}
.immersive__scrim { position: absolute; inset: 0; z-index: -1; }
.feature--text-right .immersive__scrim {
  background: linear-gradient(270deg, rgb(18 12 32 / 0.72) 0%, rgb(18 12 32 / 0.40) 46%, rgb(18 12 32 / 0) 68%);
}
.feature--text-left .immersive__scrim {
  background: linear-gradient(90deg, rgb(18 12 32 / 0.72) 0%, rgb(18 12 32 / 0.40) 46%, rgb(18 12 32 / 0) 68%);
}
.feature--immersive .feature__inner { width: 100%; }
.feature--text-right .immersive__copy { grid-column: 2; }
.feature--text-left .immersive__copy { grid-column: 1; grid-row: 1; }
.feature--immersive h2 { text-shadow: 0 2px 20px rgb(10 6 20 / 0.35); }
.feature--immersive .lede,
.feature--immersive .feature__list,
.feature--immersive .feature__list li { color: rgb(255 255 255 / 0.88); }

/* bright daylight variant: dark text over a light sky */
.feature--immersive--light { color: var(--text-primary); }
.feature--immersive--light h2 { text-shadow: none; }
.feature--immersive--light .lede,
.feature--immersive--light .feature__list,
.feature--immersive--light .feature__list li { color: rgb(44 39 33 / 0.85); }
.feature--immersive--light.feature--text-right .immersive__scrim {
  background: linear-gradient(270deg, rgb(255 250 240 / 0.66) 0%, rgb(255 250 240 / 0.32) 46%, rgb(255 250 240 / 0) 68%);
}
.feature--immersive--light.feature--text-left .immersive__scrim {
  background: linear-gradient(90deg, rgb(255 250 240 / 0.66) 0%, rgb(255 250 240 / 0.32) 46%, rgb(255 250 240 / 0) 68%);
}

/* --- pricing (partner tiers from jib-os.hdmall.co.th), on night art -------- */
.pricing {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  color: var(--white);
  background: #1f1833;
}
.pricing__art {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover;
}
.pricing__scrim { position: absolute; inset: 0; z-index: -1; background: rgb(16 10 28 / 0.40); }
.pricing__lede { margin-top: 14px; max-width: 60ch; color: rgb(255 255 255 / 0.85); }
.pricing__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 48px;
}
.price {
  display: flex;
  flex-direction: column;
  overflow: hidden; /* clips the media band to the card radius */
  color: var(--text-primary); /* the section is white-on-dark; cards are not */
  background: var(--white);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-raised);
}
/* tone-setting band: tier art + scrim with the name and promise overlaid */
.price__media { position: relative; isolation: isolate; height: 200px; flex: none; }
.price__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.price__mediascrim {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgb(16 10 28 / 0.08) 0%, rgb(16 10 28 / 0.66) 100%);
}
.price__head { position: absolute; inset-inline: 24px; bottom: 16px; color: var(--white); }
.price__head h3 { color: var(--white); text-shadow: 0 1px 12px rgb(10 6 20 / 0.4); }
.price__sub { margin-top: 4px; color: rgb(255 255 255 / 0.9); font-size: 0.9375rem; }
.price__body { display: flex; flex-direction: column; flex: 1; padding: 20px 24px 24px; }
.price__list {
  flex: 1;
  list-style: disc;
  padding-left: 20px;
  margin-top: 16px;
  display: grid;
  gap: 12px;
  color: var(--text-secondary);
  font-size: 0.9375rem;
}
.price__list strong { color: var(--text-primary); }
.price__amount {
  margin-top: 24px;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 2rem;
  color: var(--text-primary);
}
.price__amount span { font-family: var(--font-body); font-weight: 400; font-size: 0.9375rem; color: var(--text-muted); }

/* --- demo request dialog (native <dialog>, no JS animation) ---------------- */
.demo {
  width: min(880px, calc(100vw - 32px));
  margin: auto; /* the global margin reset kills the UA's dialog centering */
  border: 0;
  border-radius: var(--radius-3xl);
  padding: 0;
  overflow: hidden; /* clips the art panel to the dialog's radius */
  color: var(--text-primary);
  box-shadow: var(--shadow-raised);
}
.demo::backdrop { background: rgb(16 10 28 / 0.55); }
/* two panels on desktop: themed art left, form right */
.demo__inner { display: grid; grid-template-columns: 5fr 6fr; }
.demo__art { width: 100%; height: 100%; object-fit: cover; }
.demo__body { padding: 32px; align-self: center; }
.demo__head { padding-inline-end: 28px; }
.demo__head h3 { font-size: 1.75rem; }
/* pinned to the dialog's own top-right corner, above both panels */
.demo__close {
  position: absolute;
  top: 12px; inset-inline-end: 12px;
  width: 44px; height: 44px;
  display: grid; place-items: center;
  border-radius: var(--radius-full);
  background: rgb(255 255 255 / 0.85);
  color: var(--text-secondary);
  font-size: 17px;
}
.demo__close:hover { background: var(--white); color: var(--text-primary); }
.demo__sub { margin-top: 8px; font-size: 0.9375rem; color: var(--text-secondary); }
.demo__field { margin-top: 20px; }
.demo__field label { display: block; font-size: 0.875rem; font-weight: 700; margin-bottom: 6px; }
.demo__opt { font-weight: 400; font-size: 0.8125rem; color: var(--text-muted); margin-left: 6px; }
.demo__field input {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  font: inherit;
  color: var(--text-primary);
  background: var(--white);
}
.demo__field input::placeholder { color: var(--text-muted); }
.demo__field input:focus-visible {
  outline: 2px solid var(--accent-blue);
  outline-offset: 1px;
  border-color: var(--accent-blue);
}
.demo__submit { width: 100%; margin-top: 24px; }
.demo__error { margin-top: 12px; font-size: 0.875rem; color: #b3261e; }
.demo__success { text-align: center; padding: 12px 4px 4px; }
.demo__tick {
  width: 44px; height: 44px;
  margin-inline: auto;
  display: grid; place-items: center;
  border-radius: var(--radius-full);
  background: #e6f6ee;
  color: #1c6b46;
  font-size: 20px;
  font-weight: 700;
}
.demo__success h3 { margin-top: 14px; font-size: 1.5rem; }
.demo__success p { margin-top: 8px; font-size: 0.9375rem; color: var(--text-secondary); }
.demo__success .btn { margin-top: 20px; }

@media (max-width: 1024px) {
  .group__card { margin-top: -72px; }
  .group__card .feature { padding-block: 40px; }
  .pricing__grid { grid-template-columns: 1fr; }
  /* immersive rows collapse to full-width text over a dimmed image; the wash
     needs to hold up where the copy crosses the art's Jib and props */
  .feature--immersive { min-height: 0; }
  .feature--immersive .immersive__scrim { background: rgb(18 12 32 / 0.68); }
  /* doubled class outranks the desktop directional gradients (0,3,0) */
  .feature--immersive--light.feature--text-right .immersive__scrim,
  .feature--immersive--light.feature--text-left .immersive__scrim { background: rgb(255 250 240 / 0.78); }
  .agent__banner { min-height: 440px; padding-block: 72px 130px; }
}

@media (max-width: 720px) {
  /* On phones the white group card dissolves: it becomes a transparent
     16px-gap stack and every feature row is its own card. Regular rows are
     white text cards; immersive rows become portrait story cards — the
     <picture> swaps in a plate whose content sits in the top half, and the
     copy overlays the empty bottom sky behind a bottom-up scrim (paragraph
     and eyebrow hidden there — the checklist says the same thing in half the
     height). Both card kinds share radius, border, shadow and the 20px text
     inset, so every h2 and list starts at the same x. */
  .group__card {
    display: grid;
    gap: 16px;
    padding-inline: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }
  .group__card .feature {
    padding: 32px 20px;
    background: var(--white);
    border: 1px solid var(--border-default);
    border-radius: var(--radius-2xl);
    box-shadow: var(--shadow-card);
  }
  .feature__inner { gap: 24px; }
  /* the regular rows' media boxes hold only the looping video plates — on
     phones the story cards carry the art, so these go entirely (hiding just
     .feature__vid would leave an empty box and its grid gap behind) */
  .group__card .feature__media { display: none; }
  .group__card .feature--immersive {
    aspect-ratio: 2 / 3;
    align-items: flex-end;
    margin: 0;
    padding: 24px 20px;
  }
  /* the desktop text-right/text-left column pinning would drag the 24px grid
     gap in as phantom indentation on the 1-column mobile grid */
  .feature--immersive .immersive__copy { grid-column: 1; }
  .feature--immersive .feature__body { display: none; }
  .feature--immersive .immersive__scrim {
    background: linear-gradient(180deg, rgb(18 12 32 / 0) 20%, rgb(18 12 32 / 0.55) 48%, rgb(18 12 32 / 0.88) 100%);
  }
  .feature--immersive--light.feature--text-right .immersive__scrim,
  .feature--immersive--light.feature--text-left .immersive__scrim {
    background: linear-gradient(180deg, rgb(255 250 240 / 0) 20%, rgb(255 250 240 / 0.62) 48%, rgb(255 250 240 / 0.94) 100%);
  }
  .feature--immersive h2 { font-size: 1.5rem; }
  /* block flow (tick absolute) so the "coming soon" pill wraps inline with
     the text instead of squeezing it into a narrow flex column */
  .feature--immersive .feature__list { margin-top: 16px; gap: 12px; }
  .feature--immersive .feature__cta { margin-top: 20px; }
  .feature--immersive .feature__list li { display: block; position: relative; padding-inline-start: 30px; }
  .feature--immersive .feature__tick { position: absolute; inset-inline-start: 0; top: 2px; margin-top: 0; }

  /* the banner headline runs across Jib's bright face on narrow screens —
     carry the scrim further right so the title always has backing */
  .group .agent__scrim {
    background: linear-gradient(100deg, rgb(38 20 48 / 0.55) 0%, rgb(38 20 48 / 0.34) 52%, rgb(38 20 48 / 0.12) 85%);
  }
  .group .agent__banner--light .agent__scrim {
    background: linear-gradient(100deg, rgb(255 250 240 / 0.62) 0%, rgb(255 250 240 / 0.36) 52%, rgb(255 250 240 / 0.12) 85%);
  }
  .agent__banner--light .agent__title { text-shadow: none; }

  /* banner titles join the mobile h2 tier (28px); this must sit after the
     base clamp() rule in file order or it loses the same-specificity tie.
     The tighter first shadow keeps letter edges crisp over Jib's face */
  .agent__title {
    font-size: 1.75rem;
    text-shadow: 0 1px 4px rgb(30 16 40 / 0.5), 0 2px 24px rgb(30 16 40 / 0.35);
  }

  /* tighter block rhythm on phones */
  .pricing__grid { margin-top: 32px; gap: 16px; }
  .price__media { height: 148px; }
  .price__head { inset-inline: 20px; bottom: 14px; }
  .price__body { padding: 16px 20px 20px; }
  .stats__grid { gap: 28px 24px; }
  /* single panel on phones: the art yields to the form */
  .demo__inner { grid-template-columns: 1fr; }
  .demo__art { display: none; }
  .demo__body { padding: 24px; }
  .btn--xl { white-space: normal; padding: 16px 24px; font-size: 1.0625rem; }
}

/* ==========================================================================
   Quote wall — gradient testimonial carousel
   Radio-driven track (no JS). Nothing animates: the track jumps between
   positions, matching the no-motion rule used everywhere else.
   ========================================================================== */

.wall { padding-block: var(--section-y); overflow: hidden; }

.wall__head {
  font-size: clamp(2rem, 3.6vw, 3rem);
  max-width: 24ch;
  margin-bottom: 40px;
}

.wall__viewport { overflow: hidden; }

/* the inputs live inside .container, so match on type rather than child depth */
.wall input[type="radio"] { position: absolute; opacity: 0; pointer-events: none; }

.wall__track {
  --card: 420px;
  --gap: 20px;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: var(--card);
  gap: var(--gap);
  transform: translateX(0);
}

/* one step per position; no transition, so it snaps */
#w2:checked ~ .wall__viewport .wall__track { transform: translateX(calc((var(--card) + var(--gap)) * -1)); }
#w3:checked ~ .wall__viewport .wall__track { transform: translateX(calc((var(--card) + var(--gap)) * -2)); }

.qcard {
  display: flex;
  flex-direction: column;
  gap: 24px;
  min-height: 460px;
  padding: 28px;
  border-radius: var(--radius-3xl);
  color: var(--ink-900);
}

/* each card gets its own soft wash, the way the reference varies them */
.qcard--1 { background: linear-gradient(150deg, #fbdcef 0%, #e7dcfa 55%, #dfe6fb 100%); }
.qcard--2 { background: linear-gradient(150deg, #d8ecfb 0%, #e6e2fa 50%, #fadde9 100%); }
.qcard--3 { background: linear-gradient(150deg, #fde0d2 0%, #fbe7cf 55%, #fbf3d4 100%); }
.qcard--4 { background: linear-gradient(150deg, #d6f2e6 0%, #dcebfa 55%, #e9e2fb 100%); }
.qcard--5 { background: linear-gradient(150deg, #eee0fb 0%, #fadfe9 55%, #fdead9 100%); }

.qcard__logo { height: 24px; width: auto; align-self: flex-start; opacity: 0.9; }

.qcard blockquote {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 400;
  line-height: 1.42;
  letter-spacing: -0.012em;
  text-wrap: pretty;
}

.qcard__by {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: auto;      /* pins attribution to the bottom, as in the reference */
}
.qcard__by img { width: 44px; height: 44px; border-radius: var(--radius-full); object-fit: cover; }
.qcard__name { font-weight: 700; font-size: 0.9375rem; }
.qcard__role { font-size: 0.875rem; color: var(--text-secondary); }

/* --- arrows: one nav block per position, only the active one is shown --- */
.wall__nav { display: none; justify-content: center; gap: 12px; margin-top: 32px; }
#w1:checked ~ .wall__nav--1,
#w2:checked ~ .wall__nav--2,
#w3:checked ~ .wall__nav--3 { display: flex; }

.wall__arrow {
  width: 42px; height: 42px;
  display: grid; place-items: center;
  border-radius: var(--radius-full);
  background: var(--white);
  border: 1px solid var(--border-default);
  box-shadow: var(--shadow-card);
  cursor: pointer;
  font-size: 15px;
  color: var(--ink-900);
}
.wall__arrow:hover { background: var(--surface-300); }

.wall__arrow--off {
  cursor: default;
  color: var(--ink-400);
  box-shadow: none;
  background: var(--surface-300);
}

@media (max-width: 1024px) {
  .wall__track { --card: 340px; }
  .qcard { min-height: 420px; }
}

@media (max-width: 720px) {
  .wall__track { --card: 82vw; --gap: 16px; }
  .wall__head { font-size: 1.75rem; margin-bottom: 32px; }
  .qcard { min-height: 0; padding: 24px; }
  .qcard blockquote { font-size: 1.125rem; }
}

/* ==========================================================================
   FAQ — heading beside a single bordered accordion card
   Native <details>/<summary>: interactive with no JS, and no motion either,
   since <details> does not animate on its own.
   ========================================================================== */

.faq { padding-block: var(--section-y); }

.faq__inner {
  display: grid;
  grid-template-columns: 5fr 7fr;
  gap: 72px;
  align-items: start;
}

.faq__aside h2 { font-size: clamp(2rem, 3.6vw, 3rem); max-width: 12ch; }

.faq__ask {
  margin-top: 20px;
  font-size: 0.9375rem;
  color: var(--text-muted);
}
.faq__ask a { color: var(--text-secondary); text-decoration: underline; text-underline-offset: 3px; }
.faq__ask a:hover { color: var(--text-primary); }

.faq__list {
  background: var(--white);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}

.faq__item + .faq__item { border-top: 1px solid var(--border-default); }

.faq__item summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 20px 24px;
  cursor: pointer;
  font-family: var(--font-heading);
  font-size: 1.125rem;
  font-weight: 500;
  letter-spacing: -0.011em;
  line-height: 1.35;
  list-style: none;                     /* hide the default disclosure triangle */
}
.faq__item summary::-webkit-details-marker { display: none; }

/* plus turns to minus when the row is open — a glyph swap, not a rotation */
.faq__item summary::after {
  content: "+";
  flex: none;
  width: 22px;
  font-family: var(--font-body);
  font-size: 1.25rem;
  font-weight: 400;
  line-height: 1;
  color: var(--text-muted);
  text-align: center;
}
.faq__item[open] summary::after { content: "\2212"; }

.faq__item p {
  padding: 0 56px 20px 24px;
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--text-secondary);
  text-wrap: pretty;
}
.faq__item p + p { padding-top: 12px; }

@media (max-width: 1024px) {
  .faq__inner { grid-template-columns: 1fr; gap: 36px; }
  .faq__aside h2 { max-width: none; }
}

@media (max-width: 720px) {
  .faq__aside h2 { font-size: 1.75rem; }
  .faq__item summary { padding: 18px; font-size: 1rem; }
  .faq__item p { padding: 0 18px 18px; }
}

/* ==========================================================================
   Mobile menu
   Desktop shows the flat link pills; below 1025px a checkbox toggle opens a
   flat list of the same links plus the language select. No JS, no motion.
   ========================================================================== */

.nav__toggle { position: absolute; opacity: 0; pointer-events: none; }

/* --- burger (mobile only) --- */
.nav__burger {
  display: none;
  width: 44px; height: 44px;
  border-radius: var(--radius-md);
  cursor: pointer;
  place-items: center;
  align-content: center;
  gap: 4px;
}
.nav__burger span {
  display: block;
  width: 18px; height: 2px;
  border-radius: 2px;
  background: var(--ink-900);
}

.nav__mobile { display: none; }

@media (max-width: 1024px) {
  .nav__group--actions { display: none; }
  .nav__burger { display: grid; }

  .nav__burgerpill {
    display: flex;
    padding: 3px;
    /* background: rgb(255 255 255 / 0.92); */
    backdrop-filter: blur(12px);
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow-card);
  }

  .nav__toggle:checked ~ .nav__mobile { display: block; }

  .nav__mobile {
    position: absolute;
    top: calc(100% + 10px);
    left: 0;
    right: 0;
    z-index: 60;
    max-height: calc(100vh - 96px);
    overflow-y: auto;
    padding: 10px;
    background: var(--white);
    border: 1px solid var(--border-default);
    border-radius: var(--radius-2xl);
    box-shadow: var(--shadow-raised);
  }

  .nav__mlink {
    display: block;
    padding: 14px 12px;
    font-size: 1rem;
    font-weight: 700;
    border-bottom: 1px solid var(--border-default);
  }

  /* the language row matches the link rows, chevron tucked to the label */
  .nav__lang--mobile {
    display: block;
    width: 100%;
    padding: 14px 32px 14px 12px;
    font-size: 1rem;
    font-weight: 700;
    border-radius: 0;
    border-bottom: 1px solid var(--border-default);
    background-position: right 12px center;
  }

  .nav__mcta { display: block; margin: 12px; text-align: center; }
}

@media (min-width: 1025px) {
  .nav__burgerpill { display: none; }
}

/* ===== sample dialogs (AEO report / booking widget / multilingual site) ===== */
.feature__cta { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.sample {
  width: min(460px, calc(100vw - 40px));
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  overflow-y: auto;
  margin: auto;
  border: 0;
  border-radius: var(--radius-3xl);
  padding: 34px 30px 30px;
  background: var(--white);
  color: var(--text-primary);
  box-shadow: var(--shadow-raised);
}
.sample::backdrop { background: rgb(16 10 28 / 0.55); }
.sample h3 { font-size: 1.5rem; margin-top: 12px; }
.sample__tag {
  display: inline-block;
  font-size: 0.8125rem; font-weight: 600;
  color: var(--text-muted);
  background: var(--surface-300);
  border-radius: var(--radius-full);
  padding: 4px 12px;
}
.sample__sub { color: var(--text-muted); margin-top: 4px; }
.sample__note { color: var(--text-muted); font-size: 0.875rem; margin-top: 18px; }

.rep__score { display: flex; align-items: baseline; gap: 12px; margin-top: 20px; }
.rep__num { font-family: var(--font-heading); font-size: 3rem; line-height: 1; }
.rep__num small { font-size: 1.25rem; color: var(--text-muted); }
.rep__label { color: var(--text-muted); }

.book__days { display: flex; gap: 8px; margin-top: 18px; }
.book__day {
  flex: 1; display: grid; justify-items: center; gap: 2px;
  padding: 8px 0 10px;
  border: 1px solid var(--border-strong); border-radius: var(--radius-lg);
  font-size: 0.75rem; color: var(--text-muted);
}
.book__day b { font-size: 1.0625rem; color: var(--text-primary); }
.book__day--on { background: var(--ink-900); border-color: var(--ink-900); }
.book__day--on, .book__day--on b { color: var(--white); }
.book__slots { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 12px; }
.book__slot { text-align: center; padding: 10px 0; border: 1px solid var(--border-strong); border-radius: var(--radius-lg); font-weight: 500; font-size: 0.9375rem; }
.book__slot--on { background: var(--ink-900); color: var(--white); border-color: var(--ink-900); }
.book__confirm { width: 100%; margin-top: 16px; justify-content: center; }

@media (max-width: 720px) {
  .sample { padding: 28px 22px 24px; }
}

/* ===== Arabic (RTL) ===== */
/* Jib Sans has no Arabic glyphs; keep it first so Latin brand words stay branded
   and Arabic falls through to the system face. Negative tracking breaks Arabic
   letter joining, so zero it everywhere. */
html[lang="ar"] { --font-heading: "Jib Sans", system-ui, sans-serif; --font-body: system-ui, "Segoe UI", Tahoma, sans-serif; }
html[lang="ar"] * { letter-spacing: 0; }
[dir="rtl"] .nav__lang { background-position: left 8px center; padding: 8px 12px 8px 24px; }
[dir="rtl"] .btn__arrow { transform: scaleX(-1); }
/* ===== motion system (per Emil Kowalski's design-eng skill) ===== */
:root {
  --ease-out-strong: cubic-bezier(0.23, 1, 0.32, 1);
  --ease-in-out-strong: cubic-bezier(0.77, 0, 0.175, 1);
}
.btn { transition: transform 160ms var(--ease-out-strong), background-color 150ms ease, color 150ms ease; }
@media (prefers-reduced-motion: no-preference) {
  .btn:active, .maps__book:active { transform: scale(0.97); }
  /* modal entrance: fade + slight scale, centered origin (modals are exempt from
     origin-aware scaling); exit stays instant — exits should be faster than entries */
  .sample[open], .demo[open] {
    opacity: 1;
    transform: scale(1);
    transition: opacity 220ms var(--ease-out-strong), transform 220ms var(--ease-out-strong);
    @starting-style { opacity: 0; transform: scale(0.96); }
  }
  .sample[open]::backdrop, .demo[open]::backdrop {
    opacity: 1;
    transition: opacity 220ms ease;
    @starting-style { opacity: 0; }
  }
  /* FAQ accordion: height snap -> smooth (progressive; Chrome 129+) */
  html { interpolate-size: allow-keywords; }
  .faq__item::details-content {
    block-size: 0;
    overflow: clip;
    transition: block-size 220ms var(--ease-out-strong), content-visibility 220ms allow-discrete;
  }
  .faq__item[open]::details-content { block-size: auto; }
}

/* ===== sticky nav: past the hero the glass pills go solid for contrast ===== */
.nav__group, .nav__burgerpill { transition: background-color 200ms ease, border-color 200ms ease, box-shadow 200ms ease; }
.nav__link, .nav__brand, .nav__lang { transition: color 200ms ease, background-color 150ms ease; }
.nav--glass.nav--solid .nav__group,
.nav--glass.nav--solid .nav__burgerpill {
  background: rgb(255 255 255 / 0.92);
  border-color: rgb(255 255 255 / 0.55);
  box-shadow: var(--shadow-card);
}
.nav--glass.nav--solid .nav__brand,
.nav--glass.nav--solid .nav__link { color: var(--ink-900); }
.nav--glass.nav--solid .nav__link:hover { background: var(--surface-300); }
.nav--glass.nav--solid .nav__lang {
  color: var(--ink-800);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M3 4.5L6 7.5L9 4.5' fill='none' stroke='%23837d72' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>");
}
.nav--glass.nav--solid .nav__lang:hover { background-color: var(--surface-300); }
.nav--glass.nav--solid .nav__divider { background: var(--border-default); }
.nav--glass.nav--solid .nav__burger span { background: var(--ink-800); }

/* ===== sample dialogs v2 ===== */
.sample--wide { width: min(720px, calc(100vw - 40px)); }
.sample--xl { width: min(960px, calc(100vw - 40px)); }
@media (min-width: 721px) {
  .sample--xl .sitep__pane { height: 600px; }
}

/* AEO report: prompt table + generate-content sequence */
.rep__caption { margin-top: 22px; font-weight: 600; font-size: 0.9375rem; }
.rep__table { margin-top: 10px; border: 1px solid var(--border-default); border-radius: var(--radius-xl); overflow: hidden; }
.rep__hrow, .rep__row { display: grid; grid-template-columns: 1fr 76px 76px 76px; align-items: center; }
.rep__hrow { background: var(--surface-300); }
.rep__hrow span { padding: 8px 12px; font-weight: 600; font-size: 0.8125rem; color: var(--text-muted); }
.rep__hrow span:not(:first-child) { text-align: center; padding-inline: 4px; }
.rep__grp {
  padding: 7px 12px;
  background: var(--surface-300);
  border-top: 1px solid var(--border-default);
  font-size: 0.75rem; font-weight: 700; letter-spacing: 0.02em; text-transform: uppercase;
  color: var(--text-muted);
}
.rep__row { border-top: 1px solid var(--border-default); }
.rep__row > span { padding: 8px 12px; font-size: 0.875rem; color: var(--text-secondary); }
.rk {
  justify-self: center;
  min-width: 36px;
  padding: 2px 6px;
  border-radius: var(--radius-full);
  font-style: normal; font-weight: 700; font-size: 0.75rem; text-align: center;
}
.rk--n { background: oklch(94% 0.06 85); color: oklch(45% 0.11 70); }
.rk--x { background: oklch(96% 0.02 27); color: oklch(55% 0.14 27); }
.rep__legend { margin-top: 8px; font-size: 0.8125rem; color: var(--text-muted); }
.gen { margin-top: 18px; }
/* (generate flow lives in .genwin below) */

/* Booking sample: shared bits (windows live in the v4 block near EOF) */
.ding__ring { position: absolute; inset: 0; border-radius: var(--radius-full); border: 3px solid oklch(52% 0.14 150 / 0.5); opacity: 0; }
@keyframes ding-ring { 0% { transform: scale(0.7); opacity: 0.8; } 100% { transform: scale(1.55); opacity: 0; } }

/* Site preview: real generated-site screenshots in a scrollable frame */
.sitep { margin-top: 16px; }
.sitep > input { position: absolute; opacity: 0; pointer-events: none; }
.sitep__tabs { display: flex; flex-wrap: wrap; gap: 6px; }
.sitep__tabs label {
  font-size: 0.875rem; font-weight: 600;
  padding: 6px 14px;
  border-radius: var(--radius-full);
  border: 1px solid var(--border-strong);
  cursor: pointer;
  transition: background-color 150ms ease, color 150ms ease;
}
#sl-th:checked ~ .sitep__tabs label[for="sl-th"],
#sl-zh:checked ~ .sitep__tabs label[for="sl-zh"],
#sl-ar:checked ~ .sitep__tabs label[for="sl-ar"] { background: var(--ink-900); color: var(--white); border-color: var(--ink-900); }
.sitep__frame { margin-top: 12px; border: 1px solid var(--border-strong); border-radius: var(--radius-2xl); overflow: hidden; }
.site__bar { display: flex; gap: 5px; padding: 9px 12px; border-bottom: 1px solid var(--border-strong); background: var(--surface-300); }
.site__bar i { width: 8px; height: 8px; border-radius: var(--radius-full); background: var(--border-strong); }
.sitep__pane { display: none; height: 480px; overflow-y: auto; overscroll-behavior: contain; background: var(--white); }
.sitep__pane img { display: block; width: 100%; height: auto; }
#sl-th:checked ~ .sitep__frame .sitep__pane--th,
#sl-zh:checked ~ .sitep__frame .sitep__pane--zh,
#sl-ar:checked ~ .sitep__frame .sitep__pane--ar { display: block; }
@media (max-width: 720px) {
  .rep__hrow, .rep__row { grid-template-columns: 1fr 54px 54px 54px; }
  .sitep__pane { height: 380px; }
  .bk { min-height: 0; }
}

/* RTL: banner and immersive art are composed with a buffer on the text side;
   mirror them so the empty space follows the text when Arabic flips the layout */
[dir="rtl"] .agent__art,
[dir="rtl"] .immersive__art { transform: scaleX(-1); }

/* ===== mobile design pass (user-reported): banner height, type hierarchy,
   story-card breathing room, stats gap. Late in file so ties resolve here. ===== */
@media (max-width: 720px) {
  /* the day/night banners ran tall and cropped Jib; shorter box + a crop
     centered on the baked-in mascot (~73% from the left) */
  .agent__banner { min-height: 340px; padding-block: 56px 72px; }
  .group .agent__art { object-position: 74% center; }
  /* hierarchy: section banner titles must outrank every card heading —
     banner 34px, all card headings 24px */
  .agent__title { font-size: 2.125rem; }
  .group__card .feature h2,
  .group__card .feature h3,
  .feature--immersive h2 { font-size: 1.5rem; }
  /* story cards: reserve the top for the art instead of forcing 2:3 — with
     two CTAs the copy was climbing onto the mascot */
  .group__card .feature--immersive { aspect-ratio: auto; padding-top: 58%; }
  .feature--immersive .immersive__scrim {
    background: linear-gradient(180deg, rgb(18 12 32 / 0) 26%, rgb(18 12 32 / 0.55) 44%, rgb(18 12 32 / 0.9) 100%);
  }
  .feature--immersive--light.feature--text-right .immersive__scrim,
  .feature--immersive--light.feature--text-left .immersive__scrim {
    background: linear-gradient(180deg, rgb(255 250 240 / 0) 26%, rgb(255 250 240 / 0.66) 44%, rgb(255 250 240 / 0.96) 100%);
  }
  /* the group's last card carried a desktop margin into the transparent
     stack, doubling the distance to the next band */
  .group__card .feature:last-child,
  .group__card .feature--immersive:last-child { margin-bottom: 0; }
}

/* ===== desktop language dropdown (the native select stays for mobile) ===== */
.langdd { position: relative; }
.langdd__btn { display: inline-flex; align-items: center; }
.langdd__btn svg { display: block; }
.langdd__menu {
  position: absolute;
  top: calc(100% + 8px);
  inset-inline-end: 0;
  z-index: 60;
  min-width: 136px;
  padding: 6px;
  display: grid;
  gap: 2px;
  background: var(--white);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-raised);
  opacity: 0;
  transition: opacity 160ms ease;
}
.langdd__menu[hidden] { display: none; }
.langdd__menu.on { opacity: 1; }
.langdd__item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 9px 12px;
  border-radius: var(--radius-md);
  font: inherit;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text-primary);
  text-align: start;
  transition: background-color 120ms ease;
}
.langdd__item:hover { background: var(--surface-300); }
.langdd__item[aria-selected="true"]::after { content: "\2713"; font-size: 0.75rem; color: var(--text-muted); }
@media (prefers-reduced-motion: no-preference) {
  /* popovers scale from their trigger: top end corner, mirrored in RTL */
  .langdd__menu {
    transform: scale(0.96);
    transform-origin: top right;
    transition: opacity 160ms var(--ease-out-strong), transform 160ms var(--ease-out-strong);
  }
  [dir="rtl"] .langdd__menu { transform-origin: top left; }
  .langdd__menu.on { transform: scale(1); }
}

/* ===== stats live inside the logo bar now, right under the logos ===== */
.logobar .stats__grid { margin-top: 56px; }

/* ===== booking widget: the confirm reads as "go" ===== */
.book__confirm {
  width: 100%;
  margin-top: 18px;
  background: oklch(52% 0.14 150);
  color: var(--white);
}
.book__confirm:hover { background: oklch(45% 0.14 150); }
@media (prefers-reduced-motion: no-preference) {
  /* a soft repeating ring so the one tappable thing in the sample invites the tap */
  .book__confirm { animation: confirm-pulse 2.2s ease infinite; }
}
@keyframes confirm-pulse {
  0%, 100% { box-shadow: 0 0 0 0 oklch(52% 0.14 150 / 0.4); }
  55% { box-shadow: 0 0 0 10px oklch(52% 0.14 150 / 0); }
}
@media (max-width: 720px) {
  .logobar .stats__grid { margin-top: 40px; }
  .book__confirm { margin-top: 20px; }
}

/* ===== scroll entrance (applies only under html.js-reveal, set by JS) ===== */
/* pre-entrance blocks sit at 101.5% scale; clip (not hidden — no new scroll
   container) so they never widen the page */
html.js-reveal, html.js-reveal body { overflow-x: clip; }
@media (prefers-reduced-motion: no-preference) {
  html.js-reveal .rv {
    opacity: 0;
    transform: translateY(48px) scale(1.04);
    transition: opacity 700ms var(--ease-out-strong), transform 700ms var(--ease-out-strong);
  }
  html.js-reveal .rv.rv--in { opacity: 1; transform: none; }
  /* grids cascade gently */
  html.js-reveal .stats__grid > div.rv:nth-child(2), html.js-reveal .price.rv:nth-child(2) { transition-delay: 70ms; }
  html.js-reveal .stats__grid > div.rv:nth-child(3), html.js-reveal .price.rv:nth-child(3) { transition-delay: 140ms; }
  html.js-reveal .stats__grid > div.rv:nth-child(4) { transition-delay: 210ms; }
}

/* pricing follows the Run group directly since the stats moved north — give it
   the standard section rhythm */
.pricing { margin-top: var(--section-y); }
@media (max-width: 720px) {
  .pricing { margin-top: 40px; }
}

/* ===== "generate content": Finder-style window inside the AEO dialog ===== */
#aeoDialog.genmode { padding: 0; overflow: hidden; }
#aeoDialog.genmode > *:not(.genwin):not(.demo__close) { display: none; }
.genwin__bar {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 14px;
  background: linear-gradient(#f7f6f4, #efedea);
  border-bottom: 1px solid #ddd8d1;
}
.genwin__lights { display: flex; gap: 7px; }
.genwin__light { width: 12px; height: 12px; border-radius: var(--radius-full); }
.genwin__light--r { background: #ff5f57; cursor: pointer; }
.genwin__light--y { background: #febc2e; }
.genwin__light--g { background: #28c840; }
.genwin__title { flex: 1; text-align: center; margin-inline-end: 50px; font-size: 0.8125rem; font-weight: 600; color: #6f6a62; }
.genwin__finder { min-height: 350px; padding: 30px 24px 38px; background: var(--white); }
.genwin__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px 12px; }
.gfile { display: grid; justify-items: center; gap: 8px; opacity: 0; transition: opacity 240ms ease; }
.genwin--load .gfile { opacity: 1; }
.gfile:nth-child(2) { transition-delay: 90ms; }
.gfile:nth-child(3) { transition-delay: 180ms; }
.gfile:nth-child(4) { transition-delay: 270ms; }
.gfile:nth-child(5) { transition-delay: 360ms; }
.gfile:nth-child(6) { transition-delay: 450ms; }
.gfile__icon {
  position: relative;
  width: 52px; height: 64px;
  display: grid; place-items: end center;
  padding-bottom: 7px;
  background: var(--white);
  border: 1px solid #d8d2c9;
  border-radius: 7px;
  box-shadow: 0 1px 2px rgb(0 0 0 / 0.07);
  font-size: 0.625rem; font-weight: 800; color: #837b6f;
}
.gfile__icon::before {
  content: "";
  position: absolute; top: -1px; inset-inline-end: -1px;
  width: 15px; height: 15px;
  background: #efece7;
  border-inline-start: 1px solid #d8d2c9;
  border-bottom: 1px solid #d8d2c9;
  border-radius: 0 7px 0 8px;
}
.gfile__name {
  max-width: 160px;
  padding: 2px 7px;
  border-radius: var(--radius-sm);
  font-size: 0.6875rem; line-height: 1.35; text-align: center;
  color: var(--text-secondary);
  overflow-wrap: anywhere;
}
.gfile--sel .gfile__name { background: oklch(55% 0.17 262); color: var(--white); }
.gfile--sel .gfile__icon { outline: 3px solid oklch(55% 0.17 262 / 0.3); }
.genwin__doc { display: none; }
.genwin--open .genwin__finder { display: none; }
.genwin--open .genwin__doc {
  display: block;
  max-height: min(64vh, 560px);
  overflow-y: auto;
  padding: 30px 34px 42px;
  background: var(--white);
}
.gdoc__h1 { font-family: var(--font-heading); font-size: 1.5rem; line-height: 1.25; letter-spacing: -0.015em; }
.gdoc__meta { margin-top: 6px; font-size: 0.75rem; color: var(--text-muted); }
.gdoc__p { margin-top: 14px; font-size: 0.9375rem; line-height: 1.7; color: var(--text-secondary); }
.gdoc__h2 { margin-top: 24px; font-size: 1.125rem; }
.gdoc__img {
  margin-top: 16px;
  aspect-ratio: 16 / 9;
  display: grid; place-items: center;
  border-radius: var(--radius-xl);
  background: #edeae3;
  color: #b7afa2;
}
@media (prefers-reduced-motion: no-preference) {
  .gfile { transform: translateY(10px) scale(0.9); transition: opacity 280ms var(--ease-out-strong), transform 280ms var(--ease-out-strong); }
  .gfile:nth-child(2) { transition-delay: 90ms; }
  .gfile:nth-child(3) { transition-delay: 180ms; }
  .gfile:nth-child(4) { transition-delay: 270ms; }
  .gfile:nth-child(5) { transition-delay: 360ms; }
  .gfile:nth-child(6) { transition-delay: 450ms; }
  .genwin--load .gfile { transform: none; }
  .genwin--open .genwin__doc { animation: docin 260ms var(--ease-out-strong); }
  .gdoc__img {
    background: linear-gradient(100deg, #edeae3 36%, #f6f3ee 50%, #edeae3 64%);
    background-size: 240% 100%;
    animation: skel 1.5s linear infinite;
  }
}
@keyframes docin { from { opacity: 0; transform: scale(0.985) translateY(6px); } }
@keyframes skel { to { background-position: -120% 0; } }
@media (max-width: 720px) {
  .genwin__grid { grid-template-columns: repeat(2, 1fr); }
  .genwin--open .genwin__doc { padding: 22px 20px 30px; }
}

/* ===== FAQ comfort doodle: crayon Jib pinned to the section's corner ===== */
.faq__inner { position: relative; }
.faq__doodle {
  position: absolute;
  bottom: 0;
  inset-inline-start: 0;
  width: 240px;
  height: auto;
}
@media (max-width: 720px) {
  .faq__doodle { display: none; }
}

/* ===== small credential marks under feature bullets ===== */
.creds { display: flex; align-items: center; gap: 16px; margin-top: 18px; }
.creds img { height: 20px; width: auto; opacity: 0.85; }
.creds--night img { opacity: 0.9; }

/* ===== hello bubbles floating out of the international header ===== */
.hellowrap { position: relative; }
.hello { position: absolute; inset: -10px 0 auto 0; pointer-events: none; display: none; }
/* desktop: the bubbles drift up in the open art space to the right of the
   header; phones keep them above the title */
@media (min-width: 721px) {
  .hello {
    inset: -60px auto auto 102%;
    width: min(360px, 26vw);
    height: 120px;
  }
}
.hello i {
  position: absolute;
  bottom: 0;
  padding: 5px 12px;
  border-radius: var(--radius-full);
  background: rgb(255 255 255 / 0.88);
  box-shadow: var(--shadow-card);
  font-style: normal; font-size: 0.8125rem; font-weight: 600;
  color: var(--text-primary);
  opacity: 0;
  white-space: nowrap;
}
@media (prefers-reduced-motion: no-preference) {
  .hello { display: block; }
  .hello i { animation: hello-float 6s ease-in-out infinite; }
  .hello i:nth-child(1) { inset-inline-start: 2%; }
  .hello i:nth-child(2) { inset-inline-start: 20%; animation-delay: 1s; }
  .hello i:nth-child(3) { inset-inline-start: 38%; animation-delay: 2s; }
  .hello i:nth-child(4) { inset-inline-start: 55%; animation-delay: 3s; }
  .hello i:nth-child(5) { inset-inline-start: 70%; animation-delay: 4s; }
  .hello i:nth-child(6) { inset-inline-start: 86%; animation-delay: 5s; }
}
@keyframes hello-float {
  0% { opacity: 0; transform: translateY(10px) scale(0.9); }
  12% { opacity: 1; transform: translateY(-4px) scale(1); }
  60% { opacity: 1; }
  100% { opacity: 0; transform: translateY(-52px) scale(0.96); }
}

/* ===== scroll-streamed pull quote ===== */
.stream__src { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.stream__w { opacity: 0.08; transition: opacity 160ms ease; }
.stream__w.on { opacity: 1; }

/* social-proof logos: uniform greyscale so no single brand shouts */
.logobar__row img { filter: grayscale(1); opacity: 0.72; }

/* ===== booking sample v3: Google search results context ===== */
.bk__step--cal, .bk__step--done { max-width: 480px; margin-inline: auto; width: 100%; }
.gsr { background: var(--white); }
.gsr__bar { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--border-default); }
.gsr__g { width: 22px; height: 22px; display: block; flex: none; }
.gsr__q { flex: 1; max-width: 380px; padding: 8px 16px; border-radius: var(--radius-full); border: 1px solid var(--border-default); box-shadow: 0 1px 3px rgb(0 0 0 / 0.06); font-size: 0.875rem; color: var(--text-secondary); }
.gsr__body { display: grid; grid-template-columns: 1fr 220px; gap: 24px; padding: 18px 20px 22px; }
.gsr__hit { display: grid; gap: 7px; margin-top: 14px; }
.gsr__hit:first-child { margin-top: 0; }
.gsr__hit i { display: block; border-radius: 4px; background: #edeae3; }
.gsr__url { width: 34%; height: 8px; }
.gsr__title { width: 78%; height: 13px; background: #dbe5f6 !important; }
.gsr__line { width: 95%; height: 8px; }
.gsr__line--short { width: 62%; }
.gsr__panel { display: grid; gap: 5px; align-content: start; padding: 14px; border: 1px solid var(--border-default); border-radius: var(--radius-xl); }
.gsr__panel b { font-size: 1.0625rem; }
.maps__meta { font-size: 0.8125rem; color: var(--text-muted); }
.maps__meta em { color: oklch(52% 0.14 150); font-style: normal; font-weight: 600; }
.maps__chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.maps__chips span { font-size: 0.75rem; font-weight: 600; color: oklch(48% 0.16 262); border: 1px solid var(--border-default); border-radius: var(--radius-full); padding: 4px 11px; }
.maps__book {
  margin-top: 10px; width: 100%;
  padding: 11px;
  border-radius: var(--radius-full);
  background: oklch(52% 0.19 262); color: var(--white);
  font: inherit; font-weight: 700; font-size: 0.9375rem;
  transition: transform 160ms var(--ease-out-strong), background-color 150ms ease;
}
.maps__book:hover { background: oklch(47% 0.19 262); }
@media (prefers-reduced-motion: no-preference) {
  .gsr__hit i { background: linear-gradient(100deg, #edeae3 36%, #f6f3ee 50%, #edeae3 64%); background-size: 240% 100%; animation: skel 1.5s linear infinite; }
  .gsr__title { background: linear-gradient(100deg, #dbe5f6 36%, #e9f0fb 50%, #dbe5f6 64%) !important; background-size: 240% 100%; animation: skel 1.5s linear infinite; }
}
@media (max-width: 720px) {
  .gsr__body { grid-template-columns: 1fr; }
  .gsr__main { display: none; }
}


/* ===== finale: the closing CTA and footer share one boulevard scene ===== */
/* .finale { 
border-radius: 50px 50px 0 0;

} */

@media (max-width: 720px) {
  .finale .cta { padding-block: 96px 220px; }
}
.finale { position: relative; isolation: isolate; overflow: hidden; }
/* 60%, verified in-browser. The original 80% was tuned when the footer sat
   INSIDE .finale — that made the section taller, so a lower value was needed to
   reach the mascots. The section is now CTA-only and shorter, which reduces how
   much of the square art overflows, so the same framing arrives higher up.
   If .finale ever gains or loses content again, this number moves with it. */
.finale__art { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; object-position: center 60%; }

.finale .footer { background: transparent; }

@media (max-width: 720px) {
  /* finale-mobile.jpg is 1639×6789 — a very tall strip made when the footer sat
     inside .finale and this box was long. The mascots sit at roughly 44% down;
     everything below ~48% is cloud. `bottom` therefore showed only cloud once the
     footer moved out and the box got short.
     35% puts them in the lower third of a typical phone viewport, under the CTA
     text rather than behind it. Tune this number, not the image. */
  /* The mascots sit ~44% down the 1639x6789 mobile strip; everything below ~48%
     is cloud. This value frames them in the lower part of the CTA.
     NOTE: this only behaves now that .sitemap sits OUTSIDE .finale. While the
     link columns were inside it, the section ran several viewports tall and
     `cover` stretched the strip across all of it — no object-position could
     recover that, which is why a height override appeared to be the only fix. */
  .finale__art { object-position: center 35%; }

}

/* the profiles "coming soon" pill sits above the heading now */
.immersive__copy > .pill { display: inline-block; margin-bottom: 14px; }

/* ===== booking sample v4: the browser story ===== */
.bk { margin-top: 16px; }
.bk__step { display: none; }
.bk__step.on { display: block; }
.bwin { border: 1px solid var(--border-strong); border-radius: var(--radius-2xl); overflow: hidden; background: var(--white); box-shadow: var(--shadow-card); }
.bwin[hidden] { display: none; }
.bwin__bar {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px;
  background: linear-gradient(#f7f6f4, #efedea);
  border-bottom: 1px solid #ddd8d1;
}
.bwin__lights { display: flex; gap: 6px; }
.bwin__lights i { width: 11px; height: 11px; border-radius: var(--radius-full); }
.bwin__lights i:nth-child(1) { background: #ff5f57; }
.bwin__lights i:nth-child(2) { background: #febc2e; }
.bwin__lights i:nth-child(3) { background: #28c840; }
.bwin__url {
  flex: 1; max-width: 420px;
  padding: 5px 14px;
  border-radius: var(--radius-full);
  background: var(--white);
  border: 1px solid #e2ddd5;
  font-size: 0.75rem; color: var(--text-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.bwin__body { min-height: 372px; }
.bk__step--cal { max-width: 460px; margin-inline: auto; padding: 22px 20px 26px; }
.bk__clinic { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
.bk__logo {
  width: 40px; height: 40px; flex: none;
  display: grid; place-items: center;
  border-radius: 12px;
  background: linear-gradient(135deg, oklch(62% 0.14 230), oklch(50% 0.16 262));
  color: var(--white); font-weight: 800; font-size: 1.125rem;
}
.bk__clinic b { display: block; font-size: 1.0625rem; }
.bk__clinic small { color: var(--text-muted); font-size: 0.8125rem; }
.bk__app { position: relative; background: var(--surface-300); min-height: 372px; }
.bk__appbar {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 16px;
  background: var(--ink-900); color: var(--white);
  font-size: 0.9375rem;
}
.bk__appbar img { border-radius: var(--radius-full); }
.bk__appnav { margin-inline-start: auto; display: flex; gap: 5px; }
.bk__appnav i { width: 7px; height: 7px; border-radius: var(--radius-full); background: rgb(255 255 255 / 0.35); }
.bk__rows { padding: 18px 16px; display: grid; gap: 12px; }
.bk__row { display: flex; gap: 12px; align-items: center; background: var(--white); border: 1px solid var(--border-default); border-radius: var(--radius-lg); padding: 12px 14px; }
.bk__row > span { flex: 1; display: grid; gap: 7px; }
.bk__ava { width: 34px; height: 34px; flex: none; border-radius: var(--radius-full); background: #e4dfd6; }
.bk__l1, .bk__l2 { display: block; height: 9px; border-radius: 4px; background: #edeae3; }
.bk__l1 { width: 46%; }
.bk__l2 { width: 72%; }
.bk__shade {
  position: absolute; inset: 0;
  background: rgb(23 16 41 / 0.32);
  opacity: 0;
  transition: opacity 260ms ease;
  pointer-events: none;
}
.bk__shade.on { opacity: 1; }
.bk__toast {
  position: absolute; inset: 0;
  margin: auto;
  width: min(320px, 86%);
  height: max-content;
  display: grid;
  justify-items: center;
  gap: 4px;
  padding: 26px 22px 24px;
  text-align: center;
  background: var(--white);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-2xl);
  box-shadow: var(--shadow-raised);
  opacity: 0;
  transition: opacity 240ms ease;
}
.bk__toast.on { opacity: 1; }
.bk__toast b { font-size: 1.0625rem; }
.bk__toast small { color: var(--text-muted); font-size: 0.8125rem; }
.bk__party {
  position: relative;
  width: 52px; height: 52px;
  display: grid; place-items: center;
  margin-bottom: 8px;
  border-radius: var(--radius-full);
  background: oklch(52% 0.14 150 / 0.12);
  font-size: 1.5rem;
}
.bk__party .ding__ring { border-color: oklch(52% 0.14 150 / 0.5); }
@media (prefers-reduced-motion: no-preference) {
  .bwin--closing { animation: win-out 300ms var(--ease-out-strong) forwards; }
  .bwin--open { animation: win-in 320ms var(--ease-out-strong); }
  .bk__toast.on { animation: pop-in 460ms var(--ease-out-strong); }
  .bk__toast.on .ding__ring { animation: ding-ring 750ms 200ms ease-out 2; }
}
@keyframes pop-in { 0% { opacity: 0; transform: scale(0.82); } 60% { transform: scale(1.05); } 100% { transform: scale(1); } }
@keyframes win-out { to { opacity: 0; transform: scale(0.96) translateY(8px); } }
@keyframes win-in { from { opacity: 0; transform: scale(0.97) translateY(10px); } }
@media (max-width: 720px) {
  .bwin__body, .bk__app { min-height: 0; }

}

/* ===== blog showcase before the finale (dark band) ===== */
.blogrow { padding-block: var(--section-y); background: oklch(23% 0.03 300); color: var(--white); }
.blogrow h2 { color: var(--white); }
.blogrow__all { color: rgb(255 255 255 / 0.72); }
.blogrow__all:hover { color: var(--white); }
.bcard h3 { color: var(--white); }
.bcard .bcard__meta { color: rgb(255 255 255 / 0.55); }
.blogrow__head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 32px; }
.blogrow__all { font-weight: 600; text-decoration: none; white-space: nowrap; }
.blogrow__all:hover { text-decoration: underline; text-underline-offset: 3px; }
.blogrow__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.bcard { display: block; color: inherit; text-decoration: none; }
.bcard img { width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; border-radius: var(--radius-xl); }
.bcard h3 { font-size: 1.3125rem; line-height: 1.4; margin-top: 16px; letter-spacing: 0; }
.bcard:hover h3 { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.bcard .bcard__meta { margin-top: 8px; font-size: 0.8125rem; color: var(--text-muted); }
@media (max-width: 720px) {
  .blogrow__grid { grid-template-columns: 1fr; gap: 28px; }
}

/* pricing: consultation CTA under the cards */
.pricing__cta { margin-top: 44px; text-align: center; }

/* ===== bullets retired on desktop: the ledes carry the outcomes now =====
   Mobile is the exception. The mobile block above hides .feature__body on
   immersive rows — prose over a photo at 400px is unreadable — and was written
   to show the bullets in its place, which is why the mobile bullet styling at
   ~line 951 exists. Retiring bullets globally left those rows with a heading
   and two buttons and no body copy at all on a phone.
   So: bullets off on desktop, back on below 720px. */
.feature__list { display: none; }

@media (max-width: 720px) {
  .feature--immersive .feature__list { display: grid; }
}
.feature__cta { margin-top: 34px; }
.feature--immersive .feature__cta { margin-top: 30px; }
.creds { margin-top: 22px; }

/* ===== subtle parallax on the big arts below the hero ===== */
@media (prefers-reduced-motion: no-preference) {
  .agent__art, .immersive__art, .pricing__art, .finale__art {
    transform: translateY(var(--par, 0px)) scale(1.12);
    will-change: transform;
  }

  [dir="rtl"] .agent__art, [dir="rtl"] .immersive__art {
    transform: translateY(var(--par, 0px)) scale(1.12) scaleX(-1);
  }
}

/* pricing cards: one consistent, larger type ladder */
.price__head h3 { font-size: 1.5rem; letter-spacing: -0.015em; }
.price__sub { font-size: 1rem; }
.price__body { font-size: 1rem; }
.price__body li { font-size: 1rem; line-height: 1.65; }

/* ===== case studies dialog ===== */
.cs { margin-top: 18px; }
.cs__kicker { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.06em; color: var(--text-muted); }
.cs__page { display: none; }
.cs__page.on { display: block; }
.cs__page h4 { margin-top: 6px; font-size: 1.625rem; line-height: 1.2; letter-spacing: -0.015em; }
.cs__page > p { margin-top: 10px; color: var(--text-secondary); line-height: 1.65; }
.cs__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 18px; }
.cs__col { padding: 14px 16px; border-radius: var(--radius-xl); }
.cs__col--before { border: 1px solid var(--border-default); }
.cs__col--after { background: oklch(96% 0.025 150); border: 1px solid oklch(88% 0.05 150); }
.cs__grid b { font-size: 0.75rem; letter-spacing: 0.05em; color: var(--text-muted); }
.cs__col--after b { color: oklch(40% 0.1 150); }
.cs__grid ul { margin: 8px 0 0; padding-inline-start: 18px; }
.cs__grid li { font-size: 0.9rem; line-height: 1.55; color: var(--text-secondary); margin-top: 4px; }
.cs__shots { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 20px; }
.cs__shots img { width: 100%; height: auto; border-radius: var(--radius-lg); border: 1px solid var(--border-default); }
.cs__shots figcaption { margin-top: 7px; font-size: 0.75rem; font-weight: 700; letter-spacing: 0.05em; color: var(--text-muted); }
.cs__shots--single { grid-template-columns: minmax(0, 460px); justify-content: center; }
.cs__stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 20px; padding: 16px; background: var(--surface-300); border-radius: var(--radius-xl); }
.cs__stats b { display: block; font-family: var(--font-heading); font-size: 1.875rem; color: oklch(40% 0.1 150); }
.cs__stats span { font-size: 0.8125rem; color: var(--text-muted); line-height: 1.4; }
.cs__more { display: none; }
.cs__more article { border: 1px solid var(--border-default); border-radius: var(--radius-xl); padding: 14px 16px; }
.cs__more p { margin-top: 6px; font-size: 0.875rem; color: var(--text-secondary); line-height: 1.5; }
.cs__nums { display: flex; gap: 16px; margin-top: 10px; font-size: 0.8125rem; color: var(--text-muted); }
.cs__nums b { color: oklch(45% 0.12 150); }
.cs__cta { margin-top: 22px; text-align: center; }
@media (max-width: 720px) {
  .cs__grid, .cs__shots, .cs__more { grid-template-columns: 1fr; }
  .cs__stats { grid-template-columns: 1fr; }
}

/* ===== live inbox demo dialog ===== */
.ops { margin-top: 16px; border: 1px solid var(--border-strong); border-radius: var(--radius-2xl); overflow: hidden; background: var(--white); }
.ops__top { display: flex; align-items: center; gap: 8px; padding: 11px 14px; background: var(--ink-900); color: var(--white); font-size: 0.9375rem; }
.ops__top img { border-radius: var(--radius-full); }
.ops__view { font-size: 0.625rem; letter-spacing: 0.1em; color: rgb(255 255 255 / 0.55); }
.ops__tabs { margin-inline-start: auto; display: flex; gap: 8px; }
.ops__tabs i { display: inline-flex; align-items: center; font-style: normal; font-size: 0.8125rem; padding: 4px 12px; border-radius: var(--radius-full); color: rgb(255 255 255 / 0.7); }
.ops__tabs i.on { background: rgb(255 255 255 / 0.14); color: var(--white); }
.ops__tabs em { display: inline-flex; align-items: center; line-height: 1; font-style: normal; background: oklch(62% 0.19 27); border-radius: var(--radius-full); font-size: 0.6875rem; padding: 3px 7px; margin-inline-start: 6px; }
.ops__body { display: grid; grid-template-columns: 300px 1fr; height: 500px; }
.ops__list { border-inline-end: 1px solid var(--border-default); background: var(--surface-300); }
.ops__listhead { padding: 12px 14px; font-size: 0.8125rem; font-weight: 700; }
.ops__row { display: flex; gap: 10px; padding: 10px 14px; border-top: 1px solid var(--border-default); background: var(--white); cursor: default; opacity: 1; }
.ops__row.on { background: oklch(96% 0.02 165); box-shadow: inset 3px 0 0 oklch(60% 0.13 165); }
.ops__ava { width: 32px; height: 32px; flex: none; display: grid; place-items: center; border-radius: var(--radius-full); background: #e4dfd6; font-size: 0.6875rem; font-weight: 800; color: #57534a; }
.ops__rowmain { flex: 1; min-width: 0; }
.ops__rowmain b { display: block; font-size: 0.8125rem; }
.ops__rowmain small { display: block; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 190px; }
.ops__tags { display: flex; gap: 4px; margin-top: 4px; }
.ops__tags i { font-style: normal; font-size: 0.625rem; font-weight: 700; padding: 1px 7px; border-radius: var(--radius-full); background: var(--surface-300); color: var(--text-muted); }
.ops__rowside { display: grid; justify-items: end; align-content: start; gap: 6px; font-size: 0.6875rem; color: var(--text-muted); }
.ops__rowside em { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; font-style: normal; background: oklch(52% 0.14 150); color: var(--white); border-radius: var(--radius-full); font-size: 0.625rem; font-weight: 800; line-height: 1; }
.ops__pane { display: flex; flex-direction: column; }
.ops__panehead { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--border-default); }
.ops__panehead b { display: block; font-size: 0.9375rem; }
.ops__panehead small { color: var(--text-muted); font-size: 0.75rem; }
.ops__actions { margin-inline-start: auto; display: flex; gap: 8px; }
.ops__actions i { font-style: normal; font-size: 0.8125rem; font-weight: 600; padding: 6px 14px; border-radius: var(--radius-full); border: 1px solid var(--border-strong); }
.ops__act { background: oklch(52% 0.14 150); color: var(--white); border-color: transparent !important; }
.ops__msgs { flex: 1; padding: 16px; display: flex; flex-direction: column; gap: 10px; overflow-y: auto; }
.ops__msg { max-width: 72%; padding: 10px 14px; border-radius: 14px; font-size: 0.875rem; line-height: 1.5; opacity: 0; transition: opacity 240ms ease; }
.ops__msg.on { opacity: 1; }
.ops__msg--in { background: var(--surface-300); align-self: flex-start; border-end-start-radius: 4px; }
.ops__msg--out { background: var(--ink-900); color: var(--white); align-self: flex-end; border-end-end-radius: 4px; }
.ops__composer { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-top: 1px solid var(--border-default); font-size: 0.8125rem; }
.ops__composer span { font-weight: 700; }
.ops__mut { color: var(--text-muted); font-weight: 500 !important; }
.ops__composer em { flex: 1; font-style: normal; color: var(--text-muted); }
.ops__send { font-style: normal; background: oklch(52% 0.14 150); color: var(--white); font-weight: 700; padding: 7px 16px; border-radius: var(--radius-lg); }
@media (prefers-reduced-motion: no-preference) {
  .ops__msg { transform: translateY(6px); transition: opacity 260ms var(--ease-out-strong), transform 260ms var(--ease-out-strong); }
  .ops__msg.on { transform: none; }
  .ops__row { animation: ops-row-in 300ms var(--ease-out-strong); }
}
@keyframes ops-row-in { from { opacity: 0; transform: translateX(-8px); } }
@media (max-width: 720px) {
  .ops__body { grid-template-columns: 1fr; }
  .ops__list { display: none; }
}

/* agent demo: bigger stage, fixed height so chats never jump */
#agentDialog { width: min(1100px, calc(100vw - 40px)); }
.ops__list { overflow-y: auto; }
.ops__msgs { min-height: 0; }
@media (max-width: 720px) { .ops__body { height: 440px; } }

/* feature cards: consistent minimum height, more air before the CTA */
@media (min-width: 721px) {
  .group__card .feature { min-height: 600px; display: flex; align-items: center; }
  .group__card .feature > .container, .group__card .feature > .feature__inner { width: 100%; }
  .feature--immersive { min-height: 580px; }
}
.feature__cta { margin-top: 44px; }
.feature--immersive .feature__cta { margin-top: 40px; }

/* case-study pager */
.cs__pager { display: flex; align-items: center; justify-content: center; gap: 18px; margin-top: 24px; }
.cs__nav {
  width: 44px; height: 44px;
  display: grid; place-items: center;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-full);
  background: var(--white);
  font-size: 1.375rem; line-height: 1; color: var(--text-primary);
  transition: background-color 150ms ease, transform 160ms var(--ease-out-strong);
}
.cs__nav:hover { background: var(--surface-300); }
.cs__dots { display: flex; gap: 8px; }
.cs__dots i { width: 8px; height: 8px; border-radius: var(--radius-full); background: var(--ink-300); }
.cs__dots i.on { background: var(--ink-900); }

/* generated-draft article: real photo + richer body */
.gdoc__photo { width: 100%; height: auto; border-radius: var(--radius-xl); margin-top: 16px; }
.gdoc__cap { margin-top: 7px; font-size: 0.75rem; color: var(--text-muted); }
.gdoc__ul { margin: 10px 0 0; padding-inline-start: 20px; }
.gdoc__ul li { font-size: 0.9375rem; line-height: 1.7; color: var(--text-secondary); margin-top: 4px; }

/* case-study dialog: the dialog chrome steps back, the case title leads */
#csDialog > h3 { font-size: 1.0625rem; margin-top: 10px; letter-spacing: 0; }
#csDialog > .sample__sub { font-size: 0.8125rem; margin-top: 2px; padding-bottom: 16px; border-bottom: 1px solid var(--border-default); }
#csDialog .cs { margin-top: 24px; }
#csDialog .cs__kicker { color: oklch(45% 0.12 150); }
#csDialog .cs__page h4 { margin-top: 8px; font-size: 1.75rem; }

/* Free-trial badge on the Jib OS pricing card. Only that module is covered —
   the website and growth modules involve team work from day one. */
.price__trial { margin-top: 6px; font-size: .9rem; font-weight: 600; color: #1a7f37; }
/* Setup fees and usage exclusions sit under the headline price. The ID pricing
   is not a flat per-module fee like the TH page: AEO carries a one-off build
   fee and Jib OS excludes WABA pass-through. Muted so the headline number
   still reads first. */
.price__note { margin-top: 6px; font-size: .8125rem; line-height: 1.4; color: var(--text-muted); }

/* Reassurance under the trial form's submit button. Answers the "am I signing
   up for something" hesitation at the point it occurs. */
.demo__reassure { margin-top: 10px; font-size: .8125rem; line-height: 1.55; color: #6b6459; text-align: center; }





/* Site links on their own dark band. Four fixed columns so the eight cells form
   two even rows; the finale artwork above is left to carry the closing CTA on
   its own, which is what it was composed for. */
.sitemap { background: oklch(23% 0.03 300); color: var(--white); padding-block: 60px 28px; }
.sitemap__cols { display: grid; grid-template-columns: repeat(4, 1fr); gap: 40px 28px; }
.sitemap__about { max-width: 34ch; }
.sitemap__about .footer__brand { display: flex; align-items: center; gap: 10px;
  font-weight: 700; font-size: 1.125rem; margin-bottom: 12px; color: var(--white); }
.sitemap__about .footer__blurb { font-size: .8125rem; line-height: 1.65;
  color: rgb(255 255 255 / 0.62); margin: 0; }
.sitemap h4 { font-size: .75rem; letter-spacing: .06em; text-transform: uppercase;
  color: rgb(255 255 255 / 0.5); margin: 0 0 14px; font-weight: 600; }
.sitemap .footer__links { display: grid; gap: 9px; list-style: none; margin: 0; padding: 0; }
.sitemap .footer__links a { font-size: .8125rem; line-height: 1.45;
  color: rgb(255 255 255 / 0.8); text-decoration: none; }
.sitemap .footer__links a:hover { color: var(--white); text-decoration: underline; }
.sitemap__bottom { display: flex; justify-content: space-between; align-items: center; gap: 16px;
  margin-top: 44px; padding-top: 20px; border-top: 1px solid rgb(255 255 255 / 0.12);
  font-size: .8125rem; color: rgb(255 255 255 / 0.5); }
.sitemap__bottom a { color: rgb(255 255 255 / 0.5); text-decoration: none; }
.sitemap__bottom a:hover { color: var(--white); }
@media (max-width: 1000px) { .sitemap__cols { grid-template-columns: repeat(2, 1fr); gap: 32px 24px; } }
@media (max-width: 560px) {
  .sitemap { padding-block: 40px 24px; }
  .sitemap__cols { grid-template-columns: 1fr; gap: 28px; }
  .sitemap__bottom { flex-direction: column; align-items: flex-start; gap: 8px; }
}

/* Template download gate. The file is released only after an email is given;
   asked once per session. */
.dlgate { margin-top: 18px; padding: 20px 22px; background: #faf8f4;
  border: 1px solid #e8e2d8; border-radius: 14px; text-align: left; }
.dlgate__q { margin: 0; font-weight: 700; font-size: 0.9375rem; }
.dlgate__sub { margin: 6px 0 14px; font-size: 0.875rem; color: var(--text-secondary); }
.dlgate__form { display: flex; flex-wrap: wrap; gap: 10px; }
.dlgate__form input { flex: 1 1 200px; padding: 11px 13px; font: inherit;
  border: 1px solid #ddd6c9; border-radius: 10px; background: #fff; min-width: 0; }
.dlgate__form button { flex: 0 0 auto; padding: 11px 22px; font: inherit;
  font-weight: 700; border: 0; border-radius: 10px; cursor: pointer;
  background: var(--text-primary, #1a1a1a); color: #fff; }
.dlgate__form button[disabled] { opacity: .6; cursor: default; }
.dlgate__msg { margin: 10px 0 0; font-size: 0.8125rem; color: #9c0006; }
@media (max-width: 520px) { .dlgate__form button { flex: 1 1 100%; } }

/* Blockquote notes in articles — used for caveats and "read this first"
   warnings, so styled to be noticed rather than to recede. */
.article blockquote, article blockquote {
  margin: 22px 0; padding: 14px 18px;
  background: #faf8f4; border-left: 4px solid #1F3864; border-radius: 0 10px 10px 0;
}
.article blockquote p, article blockquote p { margin: 0; font-size: 0.9375rem; }
