/* Shared stylesheet for every page. Extracted verbatim from the original
   single-file build; the chrome wrappers below are the only addition. */
@import url("https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap");
/* GameMantra brand tokens — the identity sheet, verbatim.
   NOT imported by site.css yet. This file is the source of truth; site.css still carries
   the pixel-sampled palette from 2026-09-09 and has not been migrated.

   The eight are the Colour System row of the identity sheet. The --*-on-white values are
   derived, not brand: same hue, same saturation, lightness lowered only until white ink or
   the white page clears 4.5:1. Nothing else is invented. */
:root{
  /* Shiva Indigo   Depth       white 15.94:1  black  1.32:1  on indigo  1.00:1 */
  --gm-shiva-indigo:#0B1F4D;
  /* Himalayan Blue Clarity     white  2.68:1  black  7.84:1  on indigo  5.95:1 */
  --gm-himalayan-blue:#0EA5FF;
  /* Peacock Teal   Awareness   white  2.26:1  black  9.28:1  on indigo  7.05:1 */
  --gm-peacock-teal:#00C2A8;
  /* Kartikeya Gold Focus       white  1.88:1  black 11.15:1  on indigo  8.47:1 */
  --gm-kartikeya-gold:#F6B024;
  /* Shakti Orange  Energy      white  2.91:1  black  7.22:1  on indigo  5.48:1 */
  --gm-shakti-orange:#FF663D;
  /* Moon Silver    Balance     white  1.24:1  black 16.96:1  on indigo 12.88:1 */
  --gm-moon-silver:#E5E7EB;
  /* Stone          Stability   white  4.75:1  black  4.42:1  on indigo  3.35:1 */
  --gm-stone:#667488;
  /* Earth          Grounded    white 11.37:1  black  1.85:1  on indigo  1.40:1 */
  --gm-earth:#3A3A3A;

  /* derived — for the fixed white page, where the brights run 2.26-2.91:1 as text.
     ONLY TWO OF THE FOUR MAY BE DARKENED. Each hue has a maximum chroma it can hold at a given
     lightness, and they peak in different places (CIE Lab, measured):

         L*35  L*45  L*55  L*65  L*75      cost of the darkened step
       Kartikeya Gold    45    55    64    73    83    -24.6% chroma, and the hue turns brown
       Peacock Teal      28    33    39    44    49    -24.5%
       Himalayan Blue    35    43    50    56    42    -15.5%
       Shakti Orange     70    85    99    72    44    +17.7% — it gets MORE vivid

     Gold and Teal peak light, so darkening them to pass white ink destroys them: #9F6C07 is
     brown, not gold. They are light fills with dark ink on white, never text. Blue and Orange
     survive, so they are the two that may carry interface text. */
  --gm-himalayan-blue-on-white:#007BC4;   /* L38 · white 4.54:1 · -15.5% chroma */
  --gm-shakti-orange-on-white:#E02F00;    /* L44 · white 4.59:1 · +17.7% chroma */

  /* Kartikeya Gold and Peacock Teal have no on-white text value by design. To make them read on
     white, give the fill a dark edge instead — gold against Shiva Indigo is dE 122 against
     white's 79, so a hairline or an indigo-tinted shadow buys locally what an indigo ground
     buys globally. Area matters too: a 44px gold pill reads gold, 12px gold text reads brown. */
  --gm-edge-on-white:inset 0 0 0 1.5px var(--gm-shiva-indigo);
  --gm-lift-on-white:0 8px 22px rgba(11,31,77,.30);

  /* ── MATERIALS ─────────────────────────────────────────────────────────────────────
     A flat token cannot look like the mark, and this is why: measured off
     static/img/gm-logo-full.webp, EVERY colour family in the artwork spans about 90 L*
     units inside a single face — from a near-black shadow to a near-white specular — and
     the chroma at the ends far exceeds the token's:

       family     artwork peak C*   the token's C*
       blue             107               54   <- the mark's blue is TWICE as colourful
       orange           100               76
       gold              92               75
       teal              59               47

     The hue also travels along the ramp: blue swings 58 degrees from blue-violet in shadow
     to pale cyan at the highlight; orange swings 44 from red to gold. That hue travel is
     where the punch comes from, and holding the hue while darkening — which is what I did
     in the first derivation — throws it away.

     So each token is the MID of a three-stop material. Use the flat token for text, hairlines
     and anything under about 20px. Use the material for surfaces, buttons, discs, bands —
     anything with area. Stops below are measured pixels from the mark, with the brand token
     substituted as the mid so the material stays brand-true. */
  --gm-himalayan-deep:#0047FD;  --gm-himalayan-spec:#92D9FD;
  --gm-peacock-deep:#0E8A6E;    --gm-peacock-spec:#14F4C6;
  --gm-kartikeya-deep:#9C7C2E;  --gm-kartikeya-spec:#FFF71D;
  --gm-shakti-deep:#F41300;     --gm-shakti-spec:#FFC40C;
  --gm-indigo-deep:#061433;     --gm-indigo-spec:#16336F;

  --gm-mat-himalayan:linear-gradient(165deg,#92D9FD 0%,#0EA5FF 42%,#0047FD 100%);
  --gm-mat-peacock:linear-gradient(165deg,#14F4C6 0%,#00C2A8 46%,#0E8A6E 100%);
  --gm-mat-kartikeya:linear-gradient(165deg,#FFF71D 0%,#F6B024 46%,#9C7C2E 100%);
  --gm-mat-shakti:linear-gradient(165deg,#FFC40C 0%,#FF663D 46%,#F41300 100%);
  --gm-mat-indigo:linear-gradient(165deg,#16336F 0%,#0B1F4D 55%,#061433 100%);

  /* the lit edge — the mark's faces are bevelled, so every surface has a light top edge and
     a dark bottom one. Without it a gradient still reads as a printed shape, not a lit one. */
  --gm-bevel:inset 0 1px 0 rgba(255,255,255,.45), inset 0 -1px 0 rgba(0,0,0,.28);

  /* the sheet's own ramp: Foundation -> Awareness -> Focus -> Energy -> Balance */
  --gm-sweep:linear-gradient(90deg,#0B1F4D 0%,#0EA5FF 26%,#00C2A8 45%,#F6B024 64%,#FF663D 80%,#E5E7EB 100%);
}

/* Plus Jakarta Sans replaces the two embedded Bloomreach Sans woff2 blocks. */
site-cookie,site-header,site-footer,site-crumb{display:contents} /* v2: the crumb is pre-rendered too, so its wrapper gets the rule the JS used to set inline */

/* ============================================================
   1. TOKENS  — the whole design system lives in this block
   ============================================================ */
:root{
  /* Brand values are the production --e-global-color-* tokens verbatim. */
  /* The three yellow tokens have no readers left: every button, badge, chip, tile, swatch
     and focus ring that used to read them is himalayan blue now. Kept, not deleted, because
     they are the production --e-global-color-* values and are what a source comparison
     against the saved originals is checked against. */
  --yellow:#FFD500;        /* c442edd — was buttons and accents; unread */
  --yellow-hover:#FFDD33;  /* 32c9961 — was button hover; unread */
  --yellow-ink:#002840;    /* was the ink on both; unread */
  --purple:#8873FF;        /* 1e8e11d — was the ticker band. No rule reads the TOKEN, but
                              .pp__eyebrow still writes #8873FF as a literal, so the colour
                              is on the page even though the variable is dead. */
  --cyan:#019ACE;          /* f97dbcb */
  /* Verbatim from .bx-lbl-num:before (the numbered ring). There is no teal stop
     upstream — it goes #FFFB00 -> #FFD500 -> #00B2DB. --grad-pill was the same ramp;
     it is now himalayan blue, because .chcard__badge sets a white label on it and the
     old near stop, #FFFB00, carried that label at 1.07:1. */
  --grad-loomi:linear-gradient(236deg,#0179F8 -44.11%,#0461C8 -17.1%,#00B2DB 81.53%);
  /* The brand sweep, Clarity -> Awareness -> Focus -> Energy: four of the sheet's five
     meanings in its own order, and the monogram's own left-to-right ramp — blue through cyan
     to gold and orange. Read by .chcard__badge alone.
     Foundation and Balance are deliberately NOT in it. The full sweep cannot carry a label:
     dark ink is 1.28:1 on the Foundation indigo and white is 1.24:1 on Balance silver, so no
     single ink survives end to end. Measured across every interpolated step of THIS ramp,
     dark ink never drops below 7.01:1. */
  /* The monogram coin's rim, unrolled — measured every 15deg on a least-squares fit of
     the ring itself. Read by .acc__num::before and the hero eyebrow, so it lives here
     rather than being written out twice. */
  --gm-coin-ring:conic-gradient(#9BFCFF 0deg,#ED5B00 45deg,#FFDD38 90deg,#FED466 135deg,
    #00EAFB 180deg,#0099FC 225deg,#00EEFF 270deg,#008AFD 315deg,#9BFCFF 360deg);
  --grad-pill:linear-gradient(90deg,#0EA5FF 0%,#00C2A8 33%,#F6B024 67%,#FF663D 100%);

  /* neutrals — light surface (their navy-based ramp, not a grey one) */
  --white:#FFFFFF;
  --surface:#F5F5F5;       /* the value actually used for light cards here */
  --line:#E5E9EC;          /* 388c9b9 */
  --text:#002840;          /* 8611160 — body text is navy, not black */

  /* neutrals — dark surface */
  --black:#000000;
  --line-dark:#335366;     /* a0d4d64 */
  --text-inv:#FFFFFF;

  /* pastel panels — production container backgrounds
     3a5baab (marketing agent) / 3d56b74 (shopping agent) / 3749890 (connect) */
  --lilac:#F5F4FF;
  --aqua:#EDF8FB;
  --mint:#EBFAF5;

  /* radius — production uses 10 / 16 / 20 / 40 / 50, with 20px dominant */
  --r-lg:20px; --r-pill:99px;

  /* space scale — production gaps run 8/10/16/20/24/30/40/50, sections at 120px */
  --s2:8px; --s4:16px; --s5:24px; --s6:30px;
  --s7:40px; --s8:50px; --s9:120px; --s10:160px;

  /* type scale */
  /* Lifted from the production Elementor global typography tokens. The real site
     has only two weights (400 Regular / 500 Medium) — there is no bold anywhere —
     letter-spacing is 0 throughout, and line-heights sit at ~1.2 on display sizes. */
  /* Production has the hero at 50/60 (230d2b0) and every section heading at 60/72
     (519bad6, 3db7d05, 995d5de, 3e16eab, c35a048, 09d1edf). I had these inverted. */
  --f-display:50px;                    --lh-display:60px;
  --f-h1:clamp(38px,5vw,60px);        --lh-h1:1.2;
  --f-h3:24px;                        --lh-h3:34px;
  --f-body:16px;                      --lh-body:26px;
  --f-sm:16px;
  --f-xs:14px;

  --wrap:1220px;   /* production --content-width */
}

/* ============================================================
   2. BASE
   ============================================================ */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:76px} /* the header is in its scrolled 60px state by the time a jump lands */
body{
  margin:0;
  font-family:"Plus Jakarta Sans",Poppins,"Helvetica Neue",Arial,sans-serif;
  font-size:var(--f-body);
  line-height:var(--lh-body);
  color:var(--text);
  background:var(--white);
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,p{margin:0}
h1,h2,h3,h4{font-weight:500;letter-spacing:0}
strong{font-weight:500}
img,video{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}

.wrap{max-width:calc(var(--wrap) + 30px);margin-inline:auto;padding-inline:15px}
.section{padding:var(--s9) 0 0}
.section--journey{padding-bottom:100px}                      /* 120 / 100 */
.section--int{padding-top:var(--s10);padding-bottom:100px}   /* 160 / 100 */
.section--cta{padding-top:100px;padding-bottom:140px}        /* 100 / 140 */
.section--tight{padding-block:var(--s8)}
.dark{background:var(--black);color:var(--text-inv)}
.dark .lead{color:#fff}

/* ============================================================
   3. TYPOGRAPHY COMPONENTS
   ============================================================ */
.display{font-size:var(--f-display);font-weight:500;line-height:var(--lh-display);letter-spacing:0}
.h1{font-size:var(--f-h1);font-weight:500;line-height:var(--lh-h1);letter-spacing:0}
.h3{font-size:var(--f-h3);font-weight:500;line-height:var(--lh-h3);letter-spacing:0}
.h1,.h3{color:#000}
@media(max-width:1024px){:root{--f-h3:18px;--lh-h3:29px;--f-display:30px;--lh-display:38px}}
.dark .h1,.dark .h3{color:inherit}
/* measured across the source: 16/26 on 19 of 34 body paragraphs, colour #002840
   on light and #fff on dark — no paragraph uses a muted grey */
.lead{font-size:16px;line-height:26px}
.caps{font-size:13px;font-weight:500;line-height:13px;color:#000}          /* bx-lbl-label */
.walllabel{font-size:16px;font-weight:500;line-height:16px;color:#000}
.chiprow{font-size:14px;font-weight:500;line-height:20px;text-transform:uppercase;color:#000}
/* Himalayan blue. The largest single cluster of that family in the logo — 29.4% of its
   pixels — sits at lightness 45-50, and its mean is this. On the .dark section's black it
   reads 5.09:1, so it carries the 60px headline. The .cta band uses the same hue and
   saturation at lightness 40 and 28, because there it is a ground, not ink. */
.hl{color:#01CE7F}
/* per-section header measures, taken from the source */
.shead{display:grid;text-align:center;margin-inline:auto}
.shead--intel{gap:30px;max-width:none;margin-bottom:100px}
@media(max-width:1024px){.shead--intel{margin-bottom:50px}}
@media(max-width:767px){.shead--intel{margin-bottom:30px}}
.shead--intel .lead{max-width:600px;margin-inline:auto}
.shead--journey{gap:30px;max-width:1000px;margin-bottom:80px}
.shead--journey .h1{font-size:50px;line-height:60px}          /* this one h2 is 50/60 */
@media(max-width:1024px){.shead--journey .h1{font-size:30px;line-height:38px}}
.shead--journey .lead{max-width:600px;margin-inline:auto}
.shead--cases{gap:16px;max-width:540px;margin-bottom:50px}
.shead--cases .lead{text-wrap:balance}
.shead--cases > .h1{margin-bottom:10px;max-width:520px;margin-inline:auto}

/* ============================================================
   4. BUTTONS
   ============================================================ */
/* Production kit button: 16px/500/26px, radius 99px, padding 11px 32px. */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);
  padding:11px 32px;border-radius:var(--r-pill);
  font-size:var(--f-sm);font-weight:500;line-height:26px;
  transition:transform .15s ease,background .15s ease,color .15s ease;
}
.btn:hover{transform:translateY(-1px)}
/* Himalayan blue at lightness 40, where white ink reads 5.92:1; the hover goes deeper
   rather than lighter, because the family's bright end drops white to 4.13:1 and this
   button's label is 13px. The class name still says yellow — renaming it would mean
   editing markup on every page that carries the cookie bar. */
.btn--yellow{background:#0461C8;color:#fff}
.btn--yellow:hover{background:#03448C}
.btn--ghost{background:transparent;color:inherit;border:1px solid var(--line)}
.btn--sm{padding:9px 18px;font-size:var(--f-xs)}

/* underlined text link (used all over the light sections) */
.tlink{font-weight:500;color:var(--cyan);text-decoration:underline;text-underline-offset:4px;align-self:flex-start}

/* icon button (carousel arrows) */
/* .br-swiper-arrows buttons: 64x64 circles, hover scale(1.1), 24px icon,
   disabled at opacity .35 with pointer-events off. */
/* .smart-arrow — the journey rail's arrows */
.iconbtn{
  position:static;display:flex;align-items:center;justify-content:center;
  width:52px;height:auto;aspect-ratio:1/1;border-radius:50%;margin:0;
  background:#019ACE;color:#fff;
  transition:opacity 200ms ease-in-out,transform 200ms ease-in-out
}
.iconbtn:not([disabled]):hover{transform:scale(1.1)}
.iconbtn[disabled]{opacity:.5;cursor:auto}
/* width only, as the source sets it: the svg keeps its height="24" attribute */
.iconbtn svg{width:20px}
/* .br-swiper-arrows .swiper-button-* — the case-study rail's arrows, with the
   e9e2db4 widget override that repaints them yellow */
.iconbtn--yellow{width:64px;background:#0461C8;color:#fff;
  transition:transform 200ms ease-in-out,opacity 200ms ease-in-out}
.iconbtn--yellow svg{width:24px}
.iconbtn--yellow[disabled]{opacity:.35;pointer-events:none}
@media(max-width:1800px){.iconbtn--yellow{width:48px}}

/* ============================================================
   5. BADGES / PILLS / DOTS
   ============================================================ */
.badge{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 12px;border-radius:var(--r-pill);
  font-size:var(--f-xs);font-weight:500;line-height:1.4
}
.badge--pink{background:#F24165;color:#fff;font-size:13px;font-weight:500;line-height:1;
  text-transform:uppercase;padding:5px 8px 3px;border-radius:100px;margin-left:4px}
/* also paints the "Live" and the count pills in the nav dropdown — one rule, several
   labels. Dark ink: white on this green is 2.07:1, #050505 is 9.84:1. */
.badge--count{background:#01CE7F;color:#050505;font-size:11px;padding:1px 8px}

/* the gradient-outlined "loomi" chip */
.hero__chip{display:block;width:84px;height:32px}

.dot{flex:none;display:block;width:16px;height:16px;border-radius:50%}
.dot--orb{border-radius:20px;object-fit:cover}
.dot--yellow{background:#0179F8}

/* ============================================================
   6. NAVBAR
   ============================================================ */
/* Production header variables: top bar 40px, main bar 90px, 80px side padding,
   inner max-width 1720px (wider than the 1220px content wrap).
   --hdr-top is 0 since 2026-09-12: the utility bar (.nav__top) is commented out in the
   <site-header> template in site.js, and this token is what .nav-space and the scroll
   retract read, so at 40px the flow stayed open for a bar that no longer renders — a 40px
   band between header and hero. Back to 40px if the bar returns. */
:root{--hdr-top:0px;--hdr-nav:90px;--hdr-pad:80px;--hdr-maxw:1720px;--navitem-pad:24px}
/* Lockup: the icon box and the wordmark width, held as one pair so the retract plate and
   the two breakpoints below cannot drift from them. 60/204 is the original 40/136 at 1.5x. */
:root{--logo-icon:60px;--logo-text:204px}
/* The header shrinks with the viewport, and the top bar is zeroed out below 1200
   so the drawer's top offset stays flush with the bar. */
@media(max-width:1600px){:root{--hdr-pad:40px}}
@media(max-width:1199px){:root{--hdr-top:0px;--hdr-nav:60px;--hdr-pad:15px;--navitem-pad:20px}}
@media(max-width:575px){:root{--hdr-nav:48px}}
.nav{position:fixed;top:0;left:0;right:0;z-index:1000;background:#fff;
  transition:transform 600ms ease-in-out,box-shadow 600ms ease-in-out}
/* .brheader.scroll — past 30px the top bar slides away, the nav bar shrinks
   90->60, a shadow appears and the wordmark slides out behind the icon. */
.nav.scroll{--hdr-nav:60px;box-shadow:0 0 40px rgba(11,31,77,.08);
  transform:translateY(calc(var(--hdr-top) * -1))}
@media(max-width:575px){.nav.scroll{--hdr-nav:48px}}
.nav__main{transition:height 250ms ease-in-out}
.nav__top{position:relative;z-index:1200;display:flex;align-items:center;height:var(--hdr-top);
  color:#fff;font-size:12px;background:var(--gm-shiva-indigo);padding-inline:var(--hdr-pad)}
.nav__top__in{display:flex;align-items:center;justify-content:space-between;width:100%;
  max-width:var(--hdr-maxw);height:100%;margin-inline:auto;gap:var(--s5)}
.nav__top a{color:#fff}
.nav__top a:hover{color:var(--gm-himalayan-blue)}
.nav__top__links{display:flex;align-items:normal;gap:16px;white-space:nowrap}
.nav__top__links > *{height:26px;line-height:26px}
.nav__promo{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* ---- TOP-BAR DROPDOWNS (Company / Login / EN) ----
   Hover-driven, matching .brheader__top__nav__dropdown: the panel is always in
   the DOM and fades+slides in, so nothing reflows when it opens. */
.nav__top__item{position:relative;display:block;color:#fff;font-size:12px;cursor:default}
.nav__top__item:hover{color:var(--gm-himalayan-blue)}
.nav__top__chev{display:inline-block;width:6.23px;height:8px;vertical-align:-1px}
.nav__top__dd{position:absolute;top:26px;right:-10px;padding-top:10px;opacity:0;pointer-events:none;
  transform:translateY(10px);
  transition:transform 250ms ease-in-out,opacity 250ms ease-in-out}
.nav__top__item:hover .nav__top__dd{opacity:1;pointer-events:auto;transform:translateY(0)}
.nav__top__dd__box{display:flex;flex-direction:column;background:var(--gm-shiva-indigo);padding:20px 24px;border-radius:8px}
.nav__top__dd__box a{display:block;color:#fff;font-size:12px;font-weight:400;line-height:26px;white-space:nowrap}
.nav__top__dd__box a:hover{color:var(--gm-himalayan-blue)}
.nav__top__dd__box--login ul{display:flex;flex-wrap:wrap;gap:0;list-style:none;margin:0;padding:0}
.nav__top__dd__box--login li{width:100%;padding:4px 0;line-height:19.8px}
.nav__top__dd__box--login a{display:inline;font-size:13.2px;line-height:19.8px}
.nav__top__dd__box--login a svg{width:6.23px;color:var(--gm-himalayan-blue);margin-right:3px}
.nav__top__dd__box--lang span{display:inline-block;width:20px;margin:4px 4px 4px 0;padding:3px;
  background:var(--gm-himalayan-blue-on-white);color:#fff;font-size:12px;line-height:1.2;border-radius:4px;text-align:center}

.nav__promo em{font-style:normal;font-weight:500;color:var(--gm-kartikeya-gold)}
.nav__promo em svg{width:6.23px;height:8px;vertical-align:-1px}
@media(max-width:1100px){.nav__top{display:none}}

.nav__main{position:relative;z-index:1100;height:var(--hdr-nav);background:#fff;padding-inline:var(--hdr-pad);
  display:flex;align-items:center;border-bottom:1px solid var(--gm-moon-silver)}
.nav__in{display:flex;align-items:center;justify-content:flex-start;
  width:100%;max-width:var(--hdr-maxw);height:100%;margin-inline:auto;gap:0}
.logo{position:relative;overflow:hidden;display:flex;align-items:center;gap:8px;
  transition:transform 250ms ease-in-out}
.nav .logo:hover{transform:scale(1.05)}
/* The retract plate: the wordmark slides left behind it, the icon sits above it.
   It must be the ICON'S box, not the row's. `height:100%` assumed the row was as tall as
   the icon; it is not. `.l-text` is gm-text.png, 2172x724, so at width:204px it renders
   68px tall and the row is 68px while the icon is 60 — and 44 once .nav.scroll shrinks it.
   The plate was inheriting the wordmark's height, so it stood 4px proud of the icon at
   rest and 12px once scrolled, which is the white bar above and below the coin.
   Centred and sized to --logo-icon it matches the icon in every state: 60, 48, 36, 44. */
.nav .logo::before{content:"";position:absolute;z-index:2;top:50%;left:0;
  width:var(--logo-icon);height:var(--logo-icon);transform:translateY(-50%);
  background:var(--white)}
.logo img{position:relative;z-index:3;display:block;border-radius:0}
.logo .l-icon{width:var(--logo-icon);height:var(--logo-icon);
  transition:width 250ms ease-in-out,height 250ms ease-in-out}
.logo .l-text{z-index:1;width:var(--logo-text);height:auto;transform:translateX(0);
  transition:transform 600ms ease-in-out}
/* the same 1.5x on both steps: 32/109 -> 48/163, 24/82 -> 36/123 */
@media(max-width:1199px){:root{--logo-icon:48px;--logo-text:163px}}
@media(max-width:575px){:root{--logo-icon:36px;--logo-text:123px}}
/* Scrolled, the desktop bar drops 90 -> 60. A 60px icon in a 60px bar sits flush against
   both edges (measured: 0px above, 1px below) and .logo:hover scale(1.05) then pushes it
   past them. 44px gives back the 8px of clearance the 40px icon had. Below 1200 the bar
   does not shrink, so the step is scoped away from there. */
@media(min-width:1200px){.nav.scroll{--logo-icon:44px}}
.nav.scroll .logo .l-text{transform:translateX(-120%)}
.nav__links{display:flex;align-items:center;gap:26px;margin:0 0 0 46px}
.nav__links a{display:flex;align-items:center;gap:5px;color:var(--gm-shiva-indigo);font-size:15px;font-weight:500;
  line-height:1.85;padding:7px 5px 3px}
.nav__links a:hover{color:var(--gm-himalayan-blue-on-white)}
.nav__cta{display:flex;align-items:center;gap:0;margin-left:auto}
.nav__cta a{display:inline-block;color:#050505;font-size:15px;font-weight:500;line-height:26px;
  padding:9px 24px 7px;background:linear-gradient(180deg,#FFD95A 0%,#F6B024 100%);border-radius:50px;
  box-shadow:0 7px 20px rgba(246,176,36,.24),inset 0 1px 0 rgba(255,255,255,.28);
  transition:background 250ms ease-in-out,box-shadow 220ms ease,filter 220ms ease}
.nav__cta a:hover{background:linear-gradient(180deg,#FFE07A 0%,#E7A51E 100%);filter:brightness(1.025);
  box-shadow:0 10px 26px rgba(246,176,36,.30),inset 0 1px 0 rgba(255,255,255,.34)}
/* "Log in" pill. Upstream this slot was "Loomi AI platform" with an inline arrow svg and an
   <em> hover label, so the rule padded 46px on the right for the arrow; with plain text that
   left a 22px hole and the label off-centre. Symmetric now; the svg/em rules went with them. */
.nav__cta a.nav__ctaloomi{position:relative;background:transparent;border:1px solid var(--gm-shiva-indigo);color:var(--gm-shiva-indigo);
  padding:9px 24px 7px;margin-left:33px;
  transition:background 250ms ease-in-out,color 250ms ease-in-out,transform 250ms ease-in-out}
.nav__cta a.nav__ctaloomi:hover{background:var(--gm-shiva-indigo);color:#fff}
.nav__cta a.nav__ctaloomi::before{content:"";position:absolute;top:0;bottom:0;left:-18px;
  width:1px;background:var(--gm-moon-silver)}
/* Two outlined pills now (GameMantra AI, then Log in). The divider and the 33px gap belong
   between the filled CTA and the FIRST of them; the second just sits alongside. */
.nav__cta a.nav__ctaloomi + a.nav__ctaloomi{margin-left:10px}
.nav__cta a.nav__ctaloomi + a.nav__ctaloomi::before{content:none}
/* mobiletop and the mobile-only list only exist inside the drawer */
.nav__mobiletop{display:none}
@media(max-width:1399px){
  .nav__links{gap:16px}
  .nav__cta a{padding:7px 16px 5px}
  .nav__cta a.nav__ctaloomi{padding:7px 16px 5px;margin-left:10px}
}
@media(max-width:767px){.nav__cta a.nav__ctaloomi{display:none}}
@media(max-width:575px){.nav__cta a{font-size:12px;padding:3px 12px 1px}}

/* ---- DRAWER (.brheader__main__nav below 1200): fixed panel sliding in from the right ---- */
@media(max-width:1199px){
  .nav__top{display:none!important}
  .nav__links{
    position:fixed;top:var(--hdr-nav);left:0;width:100%;height:100vh;background:#fff;
    padding:20px 0 300px;border-top:1px solid var(--gm-moon-silver);
    transition:transform 400ms ease-in-out;transform:translateX(100%);
    overflow-y:auto;display:flex;flex-direction:column;justify-content:flex-start;
    align-items:flex-start;gap:0;margin:0}
  .nav.menu-active .nav__links{transform:translateX(0)}
  .nav__links > a,.nav__links .nav__item{
    position:relative;width:100%;font-size:24px;line-height:1.85;
    padding:5px 0 5px var(--hdr-pad);justify-content:flex-start}
  .nav__links .nav__item > span{position:absolute;right:15px;top:50%;font-size:16px;
    display:flex;transform:translateY(-50%) rotate(270deg)}
  .nav__links .nav__item > span svg{width:12.45px;height:16px}
  .nav__mobiletop{display:flex;align-items:center;justify-content:space-between;
    margin:0 var(--hdr-pad) 10px;width:calc(100% - var(--hdr-pad) * 2)}
}


/* EN / Login disclosures inside the drawer */
.nav__mob{position:relative;color:var(--gm-shiva-indigo);font-size:14px;font-weight:500;cursor:pointer;background:none;padding:0}
.nav__mob i{display:inline-block;font-style:normal;font-size:11px;position:relative;top:-2px;
  transition:transform 250ms ease-in-out}
.nav__mob.active i{transform:rotate(180deg)}
.nav__mob__dd{opacity:0;pointer-events:none;transform:translateY(10px);position:absolute;z-index:1500;
  top:100%;left:0;width:200px;padding-top:5px;
  transition:opacity 250ms ease-in-out,transform 250ms ease-in-out}
.nav__mob.active .nav__mob__dd{opacity:1;pointer-events:auto;transform:translateY(0)}
.nav__mob--login .nav__mob__dd{left:auto;right:0}
.nav__mob__dd__box{display:flex;flex-direction:column;gap:16px;background:#fff;border-radius:5px;
  box-shadow:0 0 10px rgba(11,31,77,.06);border:1px solid var(--gm-moon-silver);padding:16px;text-align:left}
.nav__mob--lang a{display:block;color:var(--gm-shiva-indigo);font-size:14px;padding:0;border-radius:4px}
.nav__mob--login .nav__mob__dd__box a{display:inline-block;width:auto;color:var(--gm-shiva-indigo);font-size:14px;font-weight:400;padding:0;line-height:1.2}
.nav__mob--login .nav__mob__dd__box ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:16px}
.nav__mob--lang a:hover{color:#fff;background:var(--gm-himalayan-blue-on-white)}
.nav__mob--lang .nav__mob__dd__box span{display:inline-block;width:20px;color:#fff;font-size:12px;
  font-weight:500;text-align:center;line-height:1.2;border-radius:4px;background:var(--gm-himalayan-blue-on-white);
  padding:3px;margin:4px 4px 4px 0}
.nav__mob--login ul{display:flex;flex-wrap:wrap;gap:0;padding:0;margin:5px 0 0;list-style:none}
.nav__mob--login ul li{position:relative;width:100%;color:var(--gm-shiva-indigo);font-size:14px;padding:10px 0 8px 12px}
.nav__mob--login ul li:not(:last-child){border-bottom:1px dotted var(--gm-moon-silver)}
.nav__mob--login ul li::before{content:"";position:absolute;opacity:.6;top:calc(50% - 2px);left:0;
  width:4px;height:4px;background:var(--gm-shiva-indigo);border-radius:50%}

/* holds the flow open under the fixed header, as .brheader-space does upstream */
.nav-space{height:calc(var(--hdr-top) + var(--hdr-nav))}
.nav__burger{display:none;position:relative;left:10px;flex-direction:column;align-items:center;
  justify-content:center;gap:6px;padding:10px;margin-left:auto;background:none;cursor:pointer}
@media(max-width:575px){.nav__burger{gap:5px;left:5px;padding:5px}}
.nav__burger span{display:block;width:24px;height:2px;background:var(--gm-shiva-indigo);border-radius:2px;
  transition:transform 200ms ease-in-out,opacity 150ms ease-in-out}
@media(max-width:575px){.nav__burger span{width:20px}}
@media(max-width:1199px){.nav__burger{display:flex;margin-left:0}
  .nav__in{justify-content:flex-start;gap:0}
  .nav__cta{margin-left:auto}}
/* burger -> X, matching .brheader.menu-active */
.nav.menu-active .nav__burger span:nth-child(1){transform:translateY(8px) rotate(45deg)}
.nav.menu-active .nav__burger span:nth-child(2){opacity:0}
.nav.menu-active .nav__burger span:nth-child(3){transform:translateY(-8px) rotate(-45deg)}

@media(max-width:575px){   /* gap drops 6->5, so the bars meet 1px closer */
  .nav.menu-active .nav__burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .nav.menu-active .nav__burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}}

/* ---- SUBNAV PANELS (.brheader__subnav et al, verbatim spec) ----
   Upstream the panel is position:fixed at its static position; this header is
   sticky, so it is absolutely placed at the header's bottom edge for the same
   result without a fixed-position containing-block dependency. */
.nav__item{position:relative;display:flex;align-items:center;gap:5px;color:var(--gm-shiva-indigo);font-size:15px;font-weight:500;
  line-height:1.85;padding:7px 15px 3px 5px;cursor:pointer;background:none;font-family:inherit}
.nav__item > span{position:absolute;right:0;top:50%;display:flex;align-items:center;
  transform:translateY(-50%);font-size:10px}
.nav__item > span svg{width:8px;height:10px}
.nav__item:hover,.nav__item.active{color:var(--gm-himalayan-blue-on-white)}


.nav__links .nav__item.inactive{opacity:.55}
.brheader__subnav{position:absolute;top:100%;left:0;width:100%;z-index:1050;color:var(--gm-shiva-indigo);background:#fff;
  border-top:1px solid var(--gm-moon-silver);padding:32px var(--hdr-pad) 64px;box-shadow:0 0 0 rgba(11,31,77,.06);
  transform:translateY(calc(-100% - 5px));
  /* visibility is held until the slide-out finishes, otherwise the panel vanished
     instantly on close and only the opening half of the animation was ever seen */
  transition:transform 400ms ease-in-out,box-shadow 400ms ease-in-out,visibility 0s linear 400ms;
  visibility:hidden}
.brheader__subnav.active{transform:translateY(0);box-shadow:0 0 40px rgba(11,31,77,.08);
  visibility:visible;transition:transform 400ms ease-in-out,box-shadow 400ms ease-in-out,visibility 0s linear 0s}
.brheader__maxw{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:1720px;height:100%}
.brheader__maxw--subnav{display:flex;align-items:stretch;gap:32px;max-width:1400px;margin-inline:auto;height:auto}
.brheader__subnav__back{position:relative;left:-10px;cursor:pointer;display:flex;align-items:center;
  justify-content:flex-start;gap:8px;width:100%;color:var(--gm-shiva-indigo);font-size:16px;font-weight:500;line-height:1.2;
  padding:5px 10px;margin:-10px 0}
.brheader__subnav__back span{font-size:11px}
@media(min-width:1200px){.brheader__subnav__back{display:none}}
.brheader__subnav__left{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch}
.brheader__subnav__left{width:65%}
.brheader-label{position:relative;color:var(--gm-shiva-indigo);font-size:12px;font-weight:500;line-height:29px;
  text-transform:uppercase;padding:0 var(--navitem-pad);margin:16px 0 8px}
.brheader-label:first-child{margin-top:0}
.brheader__b-tiles{display:flex;flex-wrap:wrap;gap:8px}
.brheader__b-tile{cursor:pointer;position:relative;display:flex;flex-direction:column;gap:8px;
  width:calc(50% - 4px);color:var(--gm-shiva-indigo);padding:var(--navitem-pad);border-radius:16px;background:#fff;
  transition:background 250ms ease-in-out,color 250ms ease-in-out}
.brheader__b-tile--three{width:calc(33% - 5px)}
.brheader__b-tile--smallpad{padding:16px 24px}
.brheader__b-tile--lconnect{width:100%;max-width:340px}
/* the agent tile: upstream's own geometry -- 64px left padding with a 32px icon parked at 24/13,
   and a gradient wash that fades in under the tile on hover (its yellow/cyan, our sheet) */
.brheader__b-tile--agent{padding:16px 24px 16px 64px}
.brheader__b-tile--agent > img{position:absolute;z-index:5;top:13px;left:24px;
  width:32px;height:32px;border-radius:0}
.brheader__b-tile--agent::before{content:"";position:absolute;inset:0;z-index:1;opacity:0;border-radius:16px;
  pointer-events:none;transition:opacity 250ms ease-in-out;
  background:linear-gradient(266deg,rgba(246,176,36,.10) -5%,rgba(14,165,255,.10) 84%,rgba(0,194,168,.10) 108%)}
.brheader__b-tile--agent:hover{background:transparent}
.brheader__b-tile--agent:hover::before{opacity:1}
.brheader__b-tile__title{position:relative;z-index:5;font-size:24px;font-weight:500;line-height:1.2}
.brheader__b-tile--lconnect .brheader__b-tile__title{font-size:18px;padding-top:4px}
@media(max-width:1400px){nav[data-subnav="products"] .brheader__b-tile__title{font-size:20px}}

@media(max-width:1300px){nav[data-subnav="products"] .brheader__b-tile__title{font-size:18px}}
/* ---- panel content: badges, tile text, the integrations row ----
   Every class below is in the header markup; none of them had a rule. */
.brheader__badge{color:#fff;background:var(--gm-himalayan-blue-on-white);padding:1px 6px;border-radius:30px;
  font-size:10px;font-weight:500;line-height:1;margin-left:5px;transition:background 250ms ease-in-out}
.brheader__badge--large{position:relative;top:-2px;padding:4px 8px 2px}
.brheader__b-tile__title .brheader__badge--large{top:-4px;margin-left:0}
.brheader__b-tile:hover .brheader__badge{background:#fff;color:var(--gm-himalayan-blue-on-white)}
.brheader__b-tile__cta{position:relative;z-index:5;color:var(--gm-himalayan-blue-on-white);font-size:12px;line-height:1.5;
  transition:color 250ms ease-in-out}
.brheader__b-tile:hover .brheader__b-tile__cta{color:var(--gm-shiva-indigo);text-decoration:underline}


.brheader__b-tile__description{position:relative;z-index:5;font-size:12px;line-height:1.5;
  transition:color 250ms ease-in-out}
.brheader__integrations{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:10px}
.brheader__integrations a{color:var(--gm-shiva-indigo);font-weight:400}
.brheader__integrations a:hover{text-decoration:underline}
.brheader__integrations a strong{padding-left:10px}
.brheader__integrations img{display:block;width:26px;height:26px;border-radius:0;
  transform:scale(1.1);transition:transform 150ms linear}
.brheader__integrations a:hover img{transform:scale(1.4)}
.brheader__integrations__more{line-height:1.2;text-transform:none}
/* ---- the panel's right column and its list items: upstream's own rules, ported for the
   Product flyout now that it carries the six capability pages. width 35% beside the 65% left
   column; a two-column list of pill links, 14px, 24px icon. Hover wash is the sheet's. */
.brheader__subnav__right{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;width:35%}
.brheader__b-2col{display:flex;gap:8px}
.brheader__b-2col__col{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:5px;width:100%}
.brheader__b-item{display:flex;align-items:center;justify-content:flex-start;gap:8px;color:var(--gm-shiva-indigo);font-size:14px;
  line-height:1.4;border-radius:50px;padding:11px var(--navitem-pad) 9px;transition:background 250ms ease-in-out}
.brheader__b-item img{position:relative;top:-1px;flex:none;width:24px;height:24px;border-radius:0}
@media(min-width:1200px){.brheader__b-item:hover{background:rgba(14,165,255,.08)}}
@media(max-width:1360px){.brheader__b-item{padding:11px 16px 9px}}

/* ---- the header panels below 1200: a sheet over the drawer, not a dropdown ----
   Measured off the source's own @media(max-width:1199px) rules. */
@media(max-width:1199px){
  .brheader__subnav{z-index:1150;left:0;width:100%;height:100vh;padding:0;
    transform:translateX(100%)}
  .brheader__subnav.active{transform:translateX(0);box-shadow:none}
  /* height:100% is what makes overflow-y:auto bite: the desktop rule sets height:auto,
     which let the column grow past the sheet and hid everything below the fold. */
  .brheader__maxw--subnav{overflow-y:auto;height:100%;flex-direction:column;
    justify-content:flex-start;align-items:flex-start;gap:0;padding:20px var(--hdr-pad) 300px}
  .brheader__subnav__right{width:100%;gap:10px}
  .brheader__b-2col__col{align-items:stretch}
  .brheader__b-item{padding:5px 0}
  .brheader__subnav__left{
    width:100%!important;gap:10px!important}
  .brheader-label{padding:15px 0 0;border-top:1px solid var(--gm-moon-silver);margin:20px 0 0!important}
  .brheader__b-tiles{flex-direction:column;gap:20px}
  .brheader__b-tile{padding:0;gap:5px;width:100%;max-width:265px}
  .brheader__b-tile__title{font-size:18px;padding-top:0!important}
  .brheader__b-tile__cta{display:none}
  /* both classes sit on the same element, so this has to outrank the 18px rule above */
  .brheader__lconnect{order:-5}
  .brheader__lconnect-label{order:-10}
}

/* nothing on this page had a visible keyboard focus state */
a:focus-visible,button:focus-visible,summary:focus-visible,label:focus-visible{
  outline:3px solid #0179F8;outline-offset:3px;border-radius:6px}

.cookie{position:fixed;inset:auto 0 0;z-index:99;background:#fff;color:var(--text);
  border-top:1px solid var(--line);box-shadow:0 -6px 24px rgba(0,0,0,.12);
  padding:var(--s5);display:flex;gap:var(--s5);align-items:flex-start}
.cookie[hidden]{display:none}
.cookie__actions{display:flex;gap:var(--s4);align-items:center;flex-wrap:wrap;margin-top:var(--s4)}
@media(max-width:640px){.cookie{flex-direction:column}}
/* the preference centre -- upstream's CookieYes dialog, drawn here on the identity sheet */
/* above the fixed header (1000) and its flyouts (up to 1500): a consent dialog is modal */
.cookie__modal{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;
  padding:24px;background:rgba(11,31,77,.55)}
.cookie__modal[hidden]{display:none}
.cookie__dialog{width:100%;max-width:1040px;max-height:calc(100vh - 48px);display:flex;flex-direction:column;
  background:#fff;color:var(--gm-shiva-indigo);border-radius:8px;
  box-shadow:0 30px 80px rgba(11,31,77,.35);outline:none}
.cookie__dialog__head{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:28px 32px;border-bottom:1px solid var(--gm-moon-silver)}
.cookie__dialog__title{font-size:24px;line-height:1.2;font-weight:600;margin:0}
.cookie__dialog__close{flex:none;width:40px;height:40px;display:flex;align-items:center;justify-content:center;
  border-radius:50%;border:2px solid var(--gm-himalayan-blue-on-white);background:#fff;
  color:var(--gm-shiva-indigo);cursor:pointer;padding:0}
.cookie__dialog__close:hover{background:rgba(14,165,255,.08)}
.cookie__dialog__body{overflow:auto;padding:8px 32px 0}
.cookie__dialog__body p{font-size:16px;line-height:1.6;color:var(--gm-earth);margin:14px 0}
.cookie__cat{padding:18px 0 6px;border-top:1px solid var(--gm-moon-silver)}
.cookie__cat__head{display:flex;align-items:center;justify-content:space-between;gap:16px}
.cookie__cat__head h3{font-size:20px;line-height:1.2;font-weight:600;margin:0;color:var(--gm-shiva-indigo)}
.cookie__cat__always{font-size:16px;font-weight:600;color:var(--gm-peacock-deep)}
/* the switch: a 44x24 pill; the thumb rides on the checked state */
.cookie__switch{appearance:none;-webkit-appearance:none;position:relative;flex:none;width:44px;height:24px;
  margin:0;border-radius:12px;border:0;background:var(--gm-moon-silver);cursor:pointer;
  transition:background 200ms ease}
.cookie__switch::before{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform 200ms ease}
.cookie__switch:checked{background:var(--gm-himalayan-blue-on-white)}
.cookie__switch:checked::before{transform:translateX(20px)}
.cookie__dialog__foot{display:flex;align-items:center;justify-content:flex-end;gap:16px;flex-wrap:wrap;
  padding:24px 32px 32px;border-top:1px solid var(--gm-moon-silver)}
.cookie__dialog__link{margin-right:auto;background:none;border:0;padding:0;cursor:pointer;
  font:inherit;font-weight:600;color:var(--gm-himalayan-blue-on-white);text-decoration:underline}
@media(max-width:640px){
  .cookie__modal{padding:0;align-items:flex-end}
  .cookie__dialog{max-height:100vh;border-radius:8px 8px 0 0}
  .cookie__dialog__head,.cookie__dialog__body,.cookie__dialog__foot{padding-left:20px;padding-right:20px}
  .cookie__dialog__foot{flex-direction:column;align-items:stretch}
  .cookie__dialog__link{margin:0;text-align:center}}

/* ============================================================
   7. HERO
   ============================================================ */
.hero{position:relative;background:var(--black);color:#fff;overflow:hidden}
/* d86885c inside a 1440-capped e-con-inner: the ratio box never exceeds 1440 wide */
/* The hero copy hugs the stage padding edge (not the centred content wrap);
   upstream insets it a further 110px only from 1500px up. */
.hero__in{max-width:none;margin-inline:0}
@media(min-width:1500px){.hero__copy{margin-inline-start:110px}}
.hero__stage{position:relative;width:100%;max-width:1440px;margin-inline:auto;
  aspect-ratio:1440/886;display:flex;align-items:center}
@media(max-width:1024px){.hero__stage{padding-block:60px}}
@media(max-width:767px){.hero__stage{aspect-ratio:auto;display:block;padding:80vw 0 40px}
  .hero__copy .lead{display:none}}   /* elementor-hidden-mobile */
/* Production treatment (.elementor-element-d86885c): the video runs at full
   brightness and only the two vertical edges fade to black over 100px. No
   full-surface scrim — that is what was making this hero look muddy. */
.hero__bg{position:absolute;inset:0;background:var(--black);overflow:hidden}
.hero__bg::before,.hero__bg::after{
  content:"";pointer-events:none;position:absolute;z-index:2;top:0;width:100px;height:100%;
  background:linear-gradient(90deg,rgba(0,0,0,1),rgba(0,0,0,0))}
/* The left scrim is the SOURCE's, not a 100px edge fade. Upstream .elementor-element-043bddd
   is a full-hero overlay at z-index 2 carrying
       linear-gradient(90deg, rgba(0,0,0,.5) 7.5%, rgba(0,0,0,0) 50%)
   — the whole left HALF is progressively darkened, which is what covers a left-aligned copy
   column. This build had inherited only the shared 100px edge fade, so the copy ran from x=15
   to x=495 across almost entirely unprotected video: measured behind the lead, 68% of the area
   was under 4.5:1 for white text, against 12% upstream.
   The right-hand ::after keeps its 100px fade — widening that one would dim the hero art. */
.hero__bg::before{left:0;width:100%;
  background:linear-gradient(90deg,rgba(0,0,0,.5) 7.5%,rgba(0,0,0,0) 50%)}
.hero__bg::after{left:auto;right:0;background:linear-gradient(-90deg,rgba(0,0,0,1),rgba(0,0,0,0))}
/* The source has NO text-shadow on the hero copy — the scrim does the work. Ours was a
   rebuild-only addition standing in for the missing scrim, and it cost the hero CTA: the blur
   bled over the button so only 9.6% of its area was the declared fill, against 84.9% upstream.
   Removed with the scrim restored. */
.hero__in{position:relative;z-index:3;width:100%;display:grid;grid-template-columns:1fr;gap:var(--s8);align-items:center}
/* c51b0c3: max-width 600px, align-items flex-start | d5d9c8f: gap 15px */
.hero__copy{display:grid;gap:30px;justify-items:stretch;align-items:flex-start;max-width:600px}
.hero__copy > :not(.hero__actions){max-width:480px}
/* The hero eyebrow reuses .caps rather than a bespoke class. Upstream this slot held an
   84x32 .hero__chip image with a gradient border; the pill is drawn instead, on the same
   ring technique as .acc__num — a ::before inset to 0 with 1px of padding, filled with the
   coin gradient and masked so only the border shows. Both read --gm-coin-ring.
   .caps is color:#000 for the light sections it was written for, and .hero__copy is a grid
   with justify-items:stretch, so the pill needs its own colour and its own width here.
   Scoped to .hero__copy: every other .caps on the site is untouched. */
.hero__copy .caps{position:relative;justify-self:start;width:fit-content;
  padding:9px 18px 7px;border-radius:100px;color:#fff;
  background:rgba(11,31,77,.34);backdrop-filter:blur(3px)}
.hero__copy .caps::before{content:"";position:absolute;inset:0;border-radius:inherit;
  padding:1px;pointer-events:none;background:var(--gm-coin-ring);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
@media(max-width:1024px){.hero__copy{gap:15px}}
@media(max-width:1024px){.hero__copy{max-width:50%}}
@media(max-width:767px){.hero__copy{max-width:100%}}
.hero__actions{display:flex;gap:10px;flex-wrap:nowrap}
/* upstream stacks the hero CTAs from the tablet breakpoint down, not just on mobile */
@media(max-width:1024px){.hero__actions{align-items:flex-start;flex-direction:column}}
@media(max-width:980px){.hero__in{grid-template-columns:1fr}}

/* ============================================================
   8. CARD PRIMITIVES
   ============================================================ */
/* 3a5baab: flex column, padding 32px, gap 16px, border-radius 20px. It was an inline
   display:grid on the markup: when the sibling card ran taller from longer copy, grid
   stretched every row and the spare 60px landed in the gaps (16 -> 28); a column keeps it
   at the bottom, as upstream does. */
.panel{display:flex;flex-direction:column;border-radius:20px;padding:32px;gap:16px}
@media(max-width:1024px){.panel{padding:20px}}
.panel--lilac{background:var(--lilac)}
/* --mint had exactly one reader, this rule, and now has none. Kept in :root as the
   production value rather than deleted, like the other retired brand tokens. */
.panel--mint{background:#FFC8DE}
/* Loomi Connect feature card (3749890). Its own component: the image keeps its
   natural 620/438 ratio, so it cannot share .shot's 16/10 cover with the videos */
.connect{display:flex;flex-direction:row;align-items:center;gap:40px}
.connect__img{flex:0 0 310px;width:310px;max-width:100%;height:auto;border-radius:20px}
.connect__col{display:flex;flex-direction:column;gap:16px;max-width:630px}
.connect__title{font-size:24px;font-weight:500;line-height:34px;color:#000}
.connect__body{font-size:16px;line-height:26px;color:#002840}
/* #04C586 measured 1.56:1 on this panel's #FFC8DE — the link was all but invisible.
   Nothing saturated survives that ground: cyan 2.24, #0179F8 2.86, #0461C8 4.10, purple
   2.45 — only dark ink clears 4.5. #0B1F4D is 11.06:1 and is the deep navy the rebrand
   already uses; the underline keeps it reading as a link next to #002840 body copy. */
.connect__link{font-size:16px;font-weight:500;color:#0B1F4D;text-decoration:underline}
.connect__link:hover{text-decoration:none}
@media(max-width:1024px){.connect{padding:20px}}
@media(max-width:767px){.connect{flex-direction:column;align-items:stretch}
  .connect__img{flex-basis:auto;width:100%}}
.panel--aqua{background:var(--aqua)}

/* device/screenshot placeholder — stands in for real product art. The 20px under it was on a
   .vid-fix wrapper that also carried the "Live"/"2.0" badge; both removed 2026-09-12, the
   margin (source: the video block is m 0 0 20px) now lives on the video itself. */
.shot{display:block;width:100%;height:auto;aspect-ratio:5/3;border-radius:16px;object-fit:cover;margin-bottom:20px}

/* Section 9 (the hand-built email preview card, signal chips and mini product
   tiles) is gone: upstream both cards are single images, so this page uses those
   assets and the ~40 lines of CSS that reproduced them are no longer referenced. */

/* .br-cta — the hover is an expanding circle behind the label, not a colour swap */
.br-cta{overflow:hidden;position:relative;cursor:pointer;display:block;color:#050505;font-size:16px;
  text-align:center;line-height:1.5;padding:13px 35px 11px;border-radius:50px;
  border:1px solid var(--gm-kartikeya-gold);
  /* REVERTED 2026-09-15 on the user's call: var(--gm-mat-kartikeya) ends on #9C7C2E and
     var(--gm-bevel) adds inset 0 -1px 0 rgba(0,0,0,.28), which together read as the button
     fading to black at the bottom. This is the gold it carried before 2026-09-14 -- the top
     lit edge only. Do not re-apply the material here without asking. */
  background:linear-gradient(180deg,#FFD95A,var(--gm-kartikeya-gold));
  box-shadow:0 7px 20px rgba(246,176,36,.24),inset 0 1px 0 rgba(255,255,255,.28);
  transition:border-color 300ms ease-in-out,box-shadow 220ms ease,filter 220ms ease}
.br-cta strong{position:relative;z-index:5;pointer-events:none;font-weight:500}
.br-cta span{position:absolute;top:50%;left:50%;z-index:1;display:block;width:0;aspect-ratio:1/1;
  border-radius:50%;background-color:#E7A51E;transform:translate(-50%,-50%);
  transition:width 300ms ease-in,height 300ms ease-in}
.br-cta:hover{color:#050505;border-color:#E7A51E;filter:brightness(1.025);
  box-shadow:0 10px 26px rgba(246,176,36,.30),inset 0 1px 0 rgba(255,255,255,.28)}
.br-cta:active{box-shadow:0 5px 14px rgba(246,176,36,.20)}
.br-cta:focus-visible{outline:2px solid #0179F8;outline-offset:5px}
.br-cta:hover span{width:201%}
/* the modifier restates the base's gradient, so it has to move with it -- or anything wearing
   --hero-y keeps whichever gold the base has just left */
.br-cta--hero-y{color:#050505;background:linear-gradient(180deg,#FFD95A,var(--gm-kartikeya-gold));
  border-color:var(--gm-kartikeya-gold)}
.br-cta--hero-y span{background-color:#E7A51E}
.br-cta--hero-y:hover{color:#050505;border-color:#E7A51E}
/* The ghost CTA was #02010100 — fully transparent, copied verbatim from the source, so it
   sat straight on the video. Measured across five frames it was the only hero text that
   did not clear 4.5:1 everywhere: min 4.12:1 with 1% of its area under. The other four
   are 4.70 to 12.58:1 at 0%. A 28% Shiva Indigo veil lifts its worst frame to 5.20:1 and
   uses the same language as the eyebrow pill. A divergence from source, and the reason is
   the requirement that the hero text read on any frame. */
/* Ghost CTA: no fill, the source value #02010100, fully transparent.
   The label goes to 600 because the face changed. Plus Jakarta Sans 500 is lighter than
   the Bloomreach Sans this was matched against, and with no fill behind it the label was
   washing into the video. Measured glyph ink inside the label box, mean of two frames:
       500  12.8% of the box, 92.0% of it at full strength
       600  15.2%  (+19% ink), 93.2%
       700  17.0%  (+33% ink), 94.4%
   600 balances the primary CTA. 700 reads BOLDER than the primary, whose label is 500 on
   an opaque fill, which inverts the hierarchy — so 600, not 700.
   Scoped to this button: .br-cta strong stays 500 everywhere else. */
.br-cta--hero-g{color:#fff;background:#02010100;border-color:#02010100}
.br-cta--hero-g strong{font-weight:600}
.br-cta--hero-g span{background-color:#02010100}
.br-cta--hero-g:hover{color:#fff;border-color:#fff}
/* Himalayan blue. The border takes the family's bright end so the outline reads on white
   AND on the black footer; the hover circle takes lightness 40, because that is where white
   label text clears AA on it (5.92:1 against 4.13:1 on the bright stop). */
.br-cta--secondary{color:#03448C;background:transparent;border-color:#0179F8}
.br-cta--secondary span{background-color:#0461C8}
.br-cta--secondary:hover{color:#fff}
/* the places it sits on a dark ground -- including the design guide's own dark board, which
   was showing the variant at 2.21:1 and so misrepresenting the component it documents */
.dark .br-cta--secondary,.ls__hero__cta .br-cta--secondary,
.dg-board--dark .br-cta--secondary{color:#fff}
.br-cta--custom{color:#002840;background:#fff;border-color:#fff}
.br-cta--custom span{background-color:#F5F5F5}
.br-cta--custom:hover{color:#000;border-color:#F5F5F5}
/* The glow and the inset sheen belong to the gold fill, so every variant that replaces the
   fill replaces them too. Left on the base alone they painted a warm halo and a white top
   line around a blue outline button and a transparent one. `:hover` is listed explicitly
   because `.br-cta:hover` is (0,2,0) and outranks a bare variant class. */
.br-cta--hero-g,.br-cta--hero-g:hover,
.br-cta--secondary,.br-cta--secondary:hover,
.br-cta--ca-ghosty,.br-cta--ca-ghosty:hover,
.br-cta--ca-ghostk,.br-cta--ca-ghostk:hover{box-shadow:none}
.br-cta--custom,.br-cta--custom:hover{box-shadow:0 7px 20px rgba(0,0,0,.16)}

/* ---- real media swapped in for the original placeholders ---- */
/* Was 455px at aspect-ratio 909/882, copied from the production rule for
   .elementor-element-bf377f0. Those numbers belong to hero-ab-floating.webp, whose artwork
   fills its 909x882 canvas 100% x 100%. The replacement does not and is a different shape:
   hero-widget.png measured 1274x1235 with content filling 98.0% x 69.4%, true aspect 1.460.
   Contained in a 1.031 frame it fitted by width and floated in a third of a box of nothing,
   which is why it read as smaller than source.
   Asset is now cropped to its content (1251x857) and re-encoded to webp — 434KB against the
   PNG's 1.5MB, and 2.31x density in the box below. Frame takes the artwork's own aspect.
   Width 542, not 455, because the artwork is wider and shorter than the original: matching
   width alone would land at 68% of the source's visual weight, while 542 makes the rendered
   area 201,243px2 against the source frame's 200,876 — inside 0.2%.
   The 1199 step is 42vw, NOT the 1.191-proportional 48. Below 1200 the obstacle is
   .hero__actions, whose right edge is pinned at 570px from 1034 up to 1440; the pinch is at
   1034, where anything over 42vw puts the art into the button row. 48vw collided by 42px
   there and by 7px at 1100. The consequence is that below 1200 this artwork cannot carry the
   area the old one did — it is wide and short, and the space left of the buttons is narrow.
   Above 1200 there is room: the tightest is exactly 1200, 68px clear. */
.hero__art{position:absolute;pointer-events:none;z-index:3;right:20px;bottom:100px;
  width:542px;height:auto;aspect-ratio:1251/857;
  background:url('https://media.gamemantra.ai/static/img/hero-widget.webp') no-repeat center/contain}
@media(max-width:1199px){.hero__art{bottom:5vw;width:42vw}}
/* 300px -> 332px. Below 767 the art sits ABOVE the copy, and the eyebrow added in this
   build is 44px of height the source never had (29px pill + the 15px grid gap), so the
   art tracked the taller hero downward and landed on it: clearance ran 16px at 390, 11px
   at 340 and -15px at 320, a 151x15 overlap. +32px restores 17px at 320 and leaves the
   mid widths comfortable. A deliberate divergence from the matched geometry, caused by
   adding an element the source did not have. */
@media(max-width:767px){.hero__art{bottom:calc(10vw + 332px);width:60vw}}
.tabdd{display:flex;align-items:flex-start;justify-content:space-between;gap:40px;width:100%}
.tabdd__img{position:relative;width:50%;max-width:550px}
.tabdd__txt{width:50%;max-width:550px;margin-top:40px}
/* two stacked frames, cross-faded by the tab toggle */
.intel__art{opacity:0;width:100%;height:auto;display:block;border-radius:var(--r-lg);
  transition:opacity 200ms ease-in-out}
.intel__art.imgone{opacity:1}
.intel__art.imgtwo{position:absolute;top:0;left:0}
.tabdd:has(#mode-blast:checked) .imgone{opacity:0}
.tabdd:has(#mode-blast:checked) .imgtwo{opacity:1}
@media(max-width:767px){.tabdd{flex-direction:column-reverse;gap:20px}
  .tabdd__img,.tabdd__txt{width:100%;max-width:100%}
  .tabdd__txt{margin-top:0}}
@media(max-width:1199px){.hero__art{width:42vw}}
@media(max-width:980px){.hero__art{margin-inline:auto}}
@media(max-width:767px){.hero__art{width:min(60vw,381px)}}
/* brightness(.8) is a divergence from the source, chosen deliberately. The source scrim
   alone (restored above) takes the worst video frame from 68% to 18% of the copy area
   under 4.5:1 for white text. Measured across five frames at 0.5/2.5/5/7.5/9.5s:
       source scrim only          worst frame 18% under 4.5:1, min 3.01:1
       deeper scrim .62 to 55%    worst frame  3% under 4.5:1, min 3.78:1
       scrim + brightness(.8)     worst frame  0% under 4.5:1, min 4.46:1
   Only the last is legible on every frame, which is the requirement. It is a filter on
   the element, not a re-encode, so it is one number to dial or drop. */
.hero__video{position:absolute;inset:0;z-index:1;width:100%;height:100%;object-fit:cover;
  filter:brightness(.8)}
/* logos keep their intrinsic dimensions rather than a single forced height */
/* the six GameMantra marks are outlined Didot from tools/ticker_mark.py; the <img>
   width/height are the file's own aspect at 16px, as every production logo is */
.ticker__logo{flex:none;display:block;border-radius:0}
/* The same slot carries a FIGURE on the stat items ("+71%"): the marks are <img>, a figure is a
   <span>, so the type only lands on the span and every existing mark is untouched. */
span.ticker__logo{font-size:24px;font-weight:600;line-height:40px;letter-spacing:-.01em;color:#fff}
/* the attribution after a stat — .caps is the site's eyebrow, written for light sections, so the
   band gives it its own ink here exactly as .hero__copy does */
.ticker .caps{flex:none;color:rgba(255,255,255,.6);letter-spacing:.08em;text-transform:uppercase}
/* 6b3ace8: grid repeat(4,1fr) x repeat(3,1fr), gap 16px, max-width 1020px.
   The assets are 484x192 with the mark centred in generous padding, so they fill the
   cell rather than being capped — capping them at 36px was what cramped the row. */
/* 0e2fc0f: align-items center, gap 16px | 09d1edf: 60/72 centred | 79ad957: max 540px */
.int__head{display:flex;flex-direction:column;align-items:center;gap:16px;margin-bottom:50px}
.int__title{margin-bottom:10px}
.int__title{font-size:60px;font-weight:500;line-height:72px;letter-spacing:0;text-align:center;color:#000}
.int__sub{text-align:center;max-width:540px;font-size:var(--f-body);line-height:var(--lh-body)}
@media(max-width:1024px){.int__title{font-size:36px;line-height:45px}}
.intgrid{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(3,1fr);
  gap:16px;max-width:1020px;margin-inline:auto;align-items:center;justify-items:center}
.intgrid img{width:100%;height:auto;object-fit:contain}
@media(max-width:767px){.intgrid{grid-template-columns:repeat(2,1fr);grid-template-rows:auto}}
/* The SDK flow, replacing the logo grid on index.html. Cut from one flat 2172x724
   artwork into five pieces so the wording is real text: the YOUR GAME / GAMEMANTRA
   labels, the engine names and the closing line all reflow and are readable, where the
   flat image baked them in at a single size and a single language. */
.sdkflow{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(150px,0.5fr) minmax(0,1.25fr);
  align-items:start;gap:24px;max-width:1250px;margin-inline:auto}
.sdkflow__connector{align-self:center}
.sdkflow__engine,.sdkflow__core{display:flex;flex-direction:column;align-items:center;gap:18px}
.sdkflow__label{font-size:13px;font-weight:500;letter-spacing:.22em;
  text-transform:uppercase;color:var(--meta)}
/* the shot spans both rows; the two engine boxes stack beside it, as in the artwork */
.sdkflow__engines{display:grid;grid-template-columns:auto auto;align-items:center;
  justify-content:center;gap:12px}
.sdkflow__shot{grid-row:1/3;width:100%;max-width:375px;height:auto}
.sdkflow__engines span{display:flex;flex-direction:column;align-items:center;gap:8px;
  width:88px;padding:14px 8px;border-radius:16px;background:var(--surface);
  font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--text)}
.sdkflow__engines span img{width:40px;height:auto}
.sdkflow__connector{display:flex;align-items:center;width:100%}
.sdkflow__connector img{flex:none;width:72px;height:auto}
/* the two glowing connector pieces, supplied as art: a dot-and-line into the chip and a
   line-and-arrowhead out of it. Sized `auto 100%` and anchored to the OUTER edge, so the
   dot and the arrowhead stay pinned while any slack in the column falls in the middle. */
.sdkflow__connector i,.sdkflow__connector b{flex:1 1 30px;min-width:22px;
  background-repeat:no-repeat;background-size:auto 100%}
.sdkflow__connector i{height:26px;background-position:left center;
  background-image:url("https://media.gamemantra.ai/static/img/gm-sdk-arrow-start.webp")}
.sdkflow__connector b{height:22px;background-position:right center;
  background-image:url("https://media.gamemantra.ai/static/img/gm-sdk-arrow-end.webp")}
.sdkflow__core img{width:100%;max-width:470px;height:auto}
.sdkflow__reassurance{display:flex;flex-direction:column;align-items:center;gap:8px;
  margin-top:44px;text-align:center}
.sdkflow__reassurance strong{font-size:28px;font-weight:600;line-height:36px;color:#000}
.sdkflow__reassurance span{font-size:16px;line-height:26px;color:var(--text);max-width:540px}
/* three across needs ~1020px; below that it reads top to bottom and the connector turns */
@media(max-width:1023px){.sdkflow{grid-template-columns:1fr;justify-items:center;gap:18px}
  .sdkflow__connector{flex-direction:column}
  .sdkflow__connector i,.sdkflow__connector b{flex:none;width:2px;height:26px;min-width:0;
    background:linear-gradient(180deg,#0EA5FF,#0179F8)}
  .sdkflow__reassurance{margin-top:32px}
  .sdkflow__reassurance strong{font-size:24px;line-height:32px}}
@media(max-width:520px){.sdkflow__shot{grid-row:auto;grid-column:1/-1}
  .sdkflow__engines{justify-items:center;gap:12px 16px}}

/* ============================================================
   10. TICKER (marquee band)
   ============================================================ */
/* container 14926d9: 32px block padding; .marquee-item is 40px tall, white text */
/* Band drawn from the "G" of the monogram. Sampling that glyph's saturated pixels by hue:
   37% cyan, 23% himalayan blue, 10% blue, 5% indigo/violet -- all at ~50% lightness, so none
   of them can be a band on its own. Taken to 18% lightness at their own hue and saturation
   they become these three stops, and white reads 13.18:1, 15.67:1 and 17.68:1 across them.
   The band MUST stay dark: every .ticker__logo asset is white artwork (90.1% pure #FFFFFF,
   no filter), so on a pale ground they vanish -- a pale sky measured 1.18:1. */
.ticker{background:linear-gradient(100deg,#00315C 0%,#001E5C 52%,#17005B 100%);
  color:#fff;overflow:hidden;padding-block:32px;width:100%}
.ticker__track{display:flex;width:max-content;will-change:transform;animation:marquee 38s linear infinite}
/* duration is set from the track width in JS: the source scrolls at 40px/s */
.ticker:hover .ticker__track{animation-play-state:paused}
.ticker__item{display:flex;align-items:center;gap:12px;height:40px;color:#fff;white-space:nowrap}
/* the separator is a star asset, not a text glyph */
.ticker__item::after{content:"";flex:none;width:10px;height:10px;margin:0 32px 0 20px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M5 0c.45 2.65 1.9 4.1 5 5-3.1.9-4.55 2.35-5 5-.45-2.65-1.9-4.1-5-5 3.1-.9 4.55-2.35 5-5z' fill='%23fff'/%3E%3C/svg%3E") no-repeat center center}
@keyframes marquee{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.ticker__track{animation:none}}

/* ============================================================
   11. LOGO WALL
   ============================================================ */
/* ca1df92: repeat(4,1fr) x repeat(2,1fr), gap 16px, max-width 1020px, radius 20px
   b90864a: column, align center, gap 50px, padding 60px 15px */
.wallwrap{display:flex;flex-direction:column;align-items:center;gap:50px}
@media(max-width:767px){.wallwrap{gap:30px}}
.logowall{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);
  gap:16px;width:100%;max-width:1020px;margin-inline:auto}
.logowall__cell{background:var(--surface);border-radius:var(--r-lg);min-height:96px;display:grid;place-items:center;font-weight:500;font-size:20px;color:#111}
/* Upstream never needed this: every source logo was a uniform 484x192, so they all
   rendered the same height for free. The GameMantra marks are raw brand assets of
   mixed aspect — 1200x628, 200x200, 1000x1000, 1128x191 — and with no constraint each
   one painted at its own height: 13px next to 128px in the same row. Cap them instead. */
.logowall__cell img{width:auto;height:auto;max-width:74%;max-height:46px;object-fit:contain}
/* 46px is the WORDMARK cap upstream's customer logos want: short, wide, text-only marks.
   The fallback team-type marks are a different kind of art -- ~2.7:1 icon+label lockups whose
   label is part of the raster -- and under that cap the mark renders 108x46 in a 243x96 cell
   (45% of it) with the label near 12px, downscaled 4x from its 186px source. Unreadable, which
   is an asset-shape problem, not a cap to relax for everyone: raising it for the client wall
   would resize marks that are correct. The modifier is on the block the template already
   switches, so both states stay in this one rule set. */
.logowall--marks .logowall__cell img{max-width:86%;max-height:76px}
@media(max-width:767px){.logowall{grid-template-columns:repeat(2,1fr);grid-template-rows:auto;gap:8px}
  .logowall__cell{min-height:70px}}

/* ============================================================
   12. SEGMENTED TOGGLE  (CSS-only, radio driven)
   ============================================================ */
.segmented{display:inline-flex;align-items:center;justify-content:flex-start;gap:5px;margin-bottom:50px}
.tabs{display:grid}
.tabs > input{position:absolute;opacity:0;pointer-events:none}
.tabs .acc{display:none}
#mode-ai:checked ~ .acc[data-panel="intelligence"]{display:grid}
#mode-blast:checked ~ .acc[data-panel="blast"]{display:grid}
#mode-ai:checked ~ .segmented label[for="mode-ai"],
#mode-blast:checked ~ .segmented label[for="mode-blast"]{cursor:default;color:#000;background:#fff;border:1px solid #fff}
#mode-ai:checked ~ .segmented label[for="mode-ai"]:hover,
#mode-blast:checked ~ .segmented label[for="mode-blast"]:hover{background:#fff}
.tabs > input:focus-visible ~ .segmented label{outline:3px solid #0179F8;outline-offset:3px}
.segmented label{
  cursor:pointer;display:flex;color:#fff;font-size:15px;font-weight:500;
  padding:10px 16px 8px;border-radius:100px;border:1px solid #5C5C5C;
  transition:color 200ms ease-in-out,background 200ms ease-in-out,border 200ms ease-in-out
}
.segmented label:hover{background:#5C5C5C}
@media(max-width:767px){.segmented{justify-content:center;margin-bottom:30px}}
@media(max-width:400px){.segmented label{font-size:14px;padding:8px 12px 6px}}

/* ============================================================
   13. NUMBERED ACCORDION  (native <details>)
   ============================================================ */
.acc{display:grid}
.acc__item{display:flex;flex-direction:column;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.16);margin-bottom:16px}
@media(max-width:767px){.acc__item{padding-bottom:10px;margin-bottom:10px}}
/* .tabdd-dd-top: relative, gap 14px, 30px right gutter for the absolutely placed icon */
.acc__item summary{
  list-style:none;position:relative;display:flex;align-items:center;
  justify-content:flex-start;gap:14px;padding-right:30px;cursor:pointer
}
.acc__item summary::-webkit-details-marker{display:none}
.acc__num{
  position:relative;flex:none;width:36px;height:auto;border-radius:100px;
  font-size:16px;font-weight:500;text-align:center;padding:3px 0 1px;color:var(--text-inv);
  transition:color 200ms ease-in-out,background 200ms ease-in-out
}
/* The ring is the outer circle of the monogram coin, unrolled: a conic gradient puts each
   stop at the angle it sits at on the coin. Re-measured 2026-09-09 on a least-squares fit of
   the ring itself -- centre (266.2, 340.9), R 224.5, residual 1.02px mean. The first pass
   took the circle from the artwork's alpha bounding box, which is 43px off in y because the
   glow is not symmetric, so its angles were skewed and it read shadowed interior pixels as
   rim. Sampled every 15deg, most saturated opaque pixel between 0.90 and 1.06 R:
   gold from 1 o'clock to 4:30, cyan and himalayan blue from 5:30 back round to 12. */
.acc__num::before{
  content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:var(--gm-coin-ring);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
}
.acc__item[open] .acc__num{color:#050505;background:linear-gradient(180deg,#FFD95A 0%,#F6B024 100%)}
.acc__item[open] .acc__num::before{padding:0}
.acc__title{font-size:16px;font-weight:500;line-height:1.2}
.acc__sign{position:absolute;top:50%;right:0;transform:translateY(-50%);
  display:flex;align-items:center;justify-content:center;width:16px;height:auto;
  aspect-ratio:1/1;border:1px solid #fff;border-radius:50%}
.acc__sign::before,.acc__sign::after{content:"";position:absolute;top:50%;left:50%;
  width:8px;height:1px;background:#fff;border-radius:2px;
  transform:translate(-50%,-50%);transition:transform 200ms ease-in-out}
.acc__sign::after{transform:translate(-50%,-50%) rotate(90deg)}
.acc__item[open] .acc__sign::after{transform:translate(-50%,-50%) rotate(0)}
.acc__body{color:#fff;font-size:14px;line-height:144%;padding-top:12px;padding-right:30px}

/* ============================================================
   14. JOURNEY TIMELINE (horizontal scroll-snap rail)
   ============================================================ */
.rail{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none}
/* spaceBetween:0 in the source. The cards must sit flush, because .step__node::before
   overhangs each card's 30px padding by 30px on both sides to join into one line */
#journey{gap:0;align-items:self-end}
/* The disc FILL carries the category, the way the source uses a filled coloured disc
   rather than a ring — six arbitrary accents said nothing about what kind of moment a
   step was. Only the legend's three categories exist, so a glance is enough.
   Each ink is measured against its own fill, not assumed:
     PLAYER MOMENT        #0179F8 fill, #050505 glyph   4.94:1
     PLAYER CONTEXT       --grad-pill fill, #050505     7.01:1 minimum across the ramp
     MONETIZATION RESPONSE #0B1F4D fill, #fff glyph     15.94:1
   --grad-pill, NOT the legend dot's 5-stop sweep: that sweep opens on #0B1F4D, and no
   single ink survives it end to end — dark ink bottoms out at 1.28:1 and white at 1.88:1.
   Dropping the navy lead-in is what buys the 7.01:1. Same trap as .chcard__badge. */
.step:nth-child(1),.step:nth-child(2){--step-fill:#0179F8;--step-ink:#050505;--step-glow:#0179F8}
.step:nth-child(3),.step:nth-child(6){--step-fill:var(--grad-pill);--step-ink:#050505;--step-glow:#00C2A8}
.step:nth-child(4),.step:nth-child(5){--step-fill:#0B1F4D;--step-ink:#fff;--step-glow:#F6B024;
  --step-ring:#F6B024}
/* The rail scrolls, so it clips; the card's hover is scale(1.02) — 3.8px past its box on
   every side — and the source's swiper computes overflow:visible, so there it bleeds and here
   it was cut. Padding with an equal negative margin moves the clip edge, not the boxes;
   scroll-padding keeps the snap where it was. Below 767 the same rule already bled the rail
   to the viewport edge with 15px; this is that rule, at every width. */
#cases{gap:30px;align-items:flex-start;margin:-8px -15px;padding:8px 15px;scroll-padding-inline:15px}
.rail::-webkit-scrollbar{display:none}
/* .smart-item — bottom-aligned so the connector line meets across cards of unequal height */
.step{flex:0 0 400px;scroll-snap-align:center;display:flex;flex-direction:column;
  justify-content:flex-end;color:#fff;text-align:center;padding:0 30px}
.step__imgwrap{margin-bottom:32px}
.step__shot{display:inline;max-width:100%;height:auto}
/* the day label sits BELOW the node now (requested 2026-09-11); it keeps its own
   type, and only its colour follows the node it now hangs from */
.step__day{color:rgba(255,255,255,.4);font-size:16px;font-weight:500;line-height:140%;
  text-transform:uppercase;margin-bottom:24px}
.step__day strong{color:var(--step-glow);font-weight:500}
.step__node{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:8px}
/* top:28px is the centre of the 56px node, where 16px was the centre of the 33px icon */
.step__node::before{content:"";position:absolute;top:28px;left:-30px;width:calc(100% + 60px);
  height:1px;background:rgba(255,255,255,.5)}
.step__node svg{position:relative;z-index:5;box-sizing:border-box;display:block;flex:none;
  width:56px;height:56px;padding:13px;border-radius:50%;color:var(--step-ink);
  background:var(--step-fill);
  /* --step-ring is set only by the response category: #0B1F4D is barely a disc against a
     black section, so it takes the orb's own gold as a 2px ring to stay legible as a disc.
     The other two fills are bright enough to read on their own and set no ring. */
  box-shadow:0 0 0 2px var(--step-ring,transparent),0 0 22px -4px var(--step-glow)}
/* the orb badge marks a step that is ALSO a monetization response. It is a transparent
   PNG, so it needs its own opaque disc or the connector line shows through it. */
.step__node img{position:relative;z-index:5;flex:none;display:block;
  width:56px;height:56px;border-radius:50%;object-fit:contain;background:var(--black)}
.step__title{font-size:24px;font-weight:500;line-height:140%;margin-bottom:8px}
.step__desc{height:100px;opacity:.7;color:#EAFDFF;font-size:14px;line-height:140%;text-wrap:balance}
@media(max-width:767px){.step{flex-basis:100%}}
/* upstream swiper: slidesPerView 2 between the tablet and desktop breakpoints */
@media(min-width:768px) and (max-width:1023px){.step{flex-basis:50%}}
.legend{display:flex;justify-content:center;align-items:center;gap:40px;flex-wrap:wrap;margin-block:50px 40px;
  font-size:14px;line-height:20px;color:#fff}
.legend span{display:inline-flex;align-items:center;gap:var(--s2)}
/* section footer — the rule/label/rule strip that closes the timeline */
.section--journey footer.shead{display:flex;align-items:center;justify-content:center;
  gap:28px;margin-block:40px 0}
.section--journey footer.shead::before,
.section--journey footer.shead::after{content:"";flex:1 1 0;max-width:200px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.3))}
.section--journey footer.shead::after{background:linear-gradient(90deg,rgba(255,255,255,.3),transparent)}
.section--journey footer.shead .lead{margin:0;font-size:13px;line-height:20px;
  letter-spacing:.3em;text-transform:uppercase;color:rgba(255,255,255,.72)}
.railnav{display:flex;gap:8px;justify-content:center}
.railnav--swiper{gap:24px;width:100%;margin-top:40px;justify-content:flex-start}
@media(max-width:1800px){.railnav--swiper{gap:16px;margin-top:20px}}

/* ============================================================
   15. GENERIC GRIDS + FEATURE CARDS
   ============================================================ */
.grid{display:grid;gap:var(--s5)}
.grid--2{grid-template-columns:repeat(2,1fr)}
@media(max-width:640px){.grid--2{grid-template-columns:1fr}}

/* three-step flow with arrows between */
/* afebad7: a flex row of three .bx cards, 120px apart */
/* 3db7d05: the heading widget carries margin-bottom:10px, as in every section */
.plat__copy > .h1{margin-bottom:10px}
.flow{display:flex;gap:120px}
.stepcard__mediawrap{position:relative;display:block}
/* the connector is a pseudo-element on the media wrapper, not a text glyph between cards */
.stepcard:nth-child(1) .stepcard__mediawrap::after,
.stepcard:nth-child(2) .stepcard__mediawrap::after{
  content:"";position:absolute;display:block;top:50%;left:calc(100% + 44px);
  transform:translateY(-50%);width:33px;height:26px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33 26'%3E%3Cpath d='M1 13h30M20 2l11 11-11 11' fill='none' stroke='%23002840' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain}
@media(max-width:1024px){.flow{gap:40px}
  .stepcard:nth-child(1) .stepcard__mediawrap::after,
  .stepcard:nth-child(2) .stepcard__mediawrap::after{left:calc(100% + 10px);width:22px}}
/* Stacked, the connector hangs off the whole card (28px below it, centred, 33px),
   not off the image — upstream re-hosts it at this breakpoint. */
@media(max-width:767px){.flow{flex-direction:column;gap:80px}
  .stepcard:nth-child(1) .stepcard__mediawrap::after,
  .stepcard:nth-child(2) .stepcard__mediawrap::after{content:none}
  .stepcard{position:relative}
  .stepcard:nth-child(1)::after,
  .stepcard:nth-child(2)::after{
    content:"";position:absolute;display:block;top:calc(100% + 28px);left:50%;
    transform:translateX(-50%) rotate(90deg);width:33px;height:26px;
    background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33 26'%3E%3Cpath d='M1 13h30M20 2l11 11-11 11' fill='none' stroke='%23002840' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain}}
.stepcard{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:16px}
.stepcard .lead{color:#000}
.stepcard__media{display:block;width:100%;aspect-ratio:656/480;object-fit:fill;border-radius:20px}
.stepcard__kicker{display:flex;align-items:center;gap:8px}
.stepcard__kicker .caps{padding-top:2px}
.stepcard__n{position:relative;padding:7px 12px 5px;border-radius:50px;
  font-size:13px;font-weight:500;line-height:13px;color:#000}
.stepcard__n::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:var(--grad-loomi);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
/* 06c2e79 */
/* The operating strip. Capsules, not cards: one --surface pill per beat, a numbered
   .acc__num coin outside its left end, the flow's own arrow between them, and the payoff
   line in an --aqua capsule of its own. Everything here already existed:
     .acc__num + --gm-coin-ring  the accordion's numbered ring
     the three glyphs            the journey rail's ADAPT / IMPROVE / NEXT MOMENT nodes
     the arrow                   .stepcard__mediawrap::after, verbatim
     --surface --aqua --r-pill --line --text   existing tokens */
.feedback{display:flex;flex-wrap:wrap;gap:26px 52px;align-items:stretch;justify-content:center;
  border-top:1px solid var(--line);margin-top:50px;padding-top:32px}
.feedback > div{position:relative;flex:1 1 0;min-width:0;max-width:380px;
  display:flex;align-items:center;gap:16px;
  margin-left:28px;padding:16px 22px 16px 52px;
  background:var(--surface);border-radius:var(--r-pill)}
/* the coin hangs off the capsule's left end, half in and half out */
.feedback .acc__num{position:absolute;left:-28px;top:50%;transform:translateY(-50%);
  display:grid;place-items:center;width:56px;height:56px;padding:0;
  font-size:17px;font-weight:600;color:var(--text);background:var(--white)}
.feedback .acc__num::before{padding:2px}
/* the glyph, with the divider that separates it from the wording */
.feedback > div > svg{flex:none;box-sizing:content-box;width:28px;height:28px;
  padding-right:16px;border-right:1px solid #D8DDE1;color:var(--text)}
.feedback > div > div{min-width:0}
.feedback .caps{font-size:14px;font-weight:700;letter-spacing:.02em;color:var(--text)}
.feedback p{margin:0;font-size:13px;line-height:19px;font-weight:400;color:#425563}
.feedback .caps + p{margin-top:3px}
/* the arrow sits in the gap, clear of the next capsule's coin */
.feedback > div + div::before{content:"";position:absolute;top:50%;left:-66px;
  transform:translateY(-50%);width:24px;height:19px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33 26'%3E%3Cpath d='M1 13h30M20 2l11 11-11 11' fill='none' stroke='%23002840' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain}
/* The payoff line: its own capsule, and the section's one dark note.
   --aqua was the wrong ground and the icon proved it. The glyph is a blue-to-gold ramp,
   and measured pixel by pixel against each candidate, the share of it falling under 3:1 is
     --aqua #EDF8FB   50.5%      --surface #F5F5F5  50.8%
     --text #002840   37.3%      #0B1F4D            35.5%      #050505  26.3%
   Half the glyph was disappearing into a near-white ground. #0B1F4D is the deep navy the
   MONETIZATION RESPONSE discs already use in the rail above — which is what this sentence
   is about — and white on it measures 15.94:1.
   The residual 35.5% is the glyph's own doing, not the ground's: it is a dark-blue to gold
   ramp, so its dark half loses contrast on any dark ground and its light half loses it on
   any light one. No single flat ground can carry both ends. */
/* max-width:fit-content made the used width SMALLER than the remaining space on row 1,
   so the capsule stopped forcing a wrap and squeezed the three beats into slivers.
   A real max-width still clamps the capsule but stays wider than any leftover gap. */
/* a row, not a text block: an <img> dropped in front of the line is inline, so at any
   size over the line-height it pushes the text onto its own line and sits left. */
.feedback > p{flex:none;width:100%;max-width:820px;margin:14px auto 0;
  display:flex;align-items:center;justify-content:center;gap:14px;
  padding:18px 44px;border-radius:var(--r-pill);background:#0B1F4D;
  font-size:19px;line-height:26px;font-weight:600;color:#fff;text-align:center}
.feedback > p img{flex:none;width:36px;height:36px;object-fit:contain}
/* one capsule per row below 1024: three of them need 1140px and the wrap is 994 */
@media(max-width:1023px){.feedback{flex-direction:column;align-items:center}
  .feedback > div{width:100%;max-width:420px;flex:none}
  .feedback > div + div::before{content:none}
  .feedback > p{font-size:17px;line-height:24px;padding:16px 28px}}
/* narrow phones: the coin comes inside the capsule instead of hanging off it */
@media(max-width:520px){.feedback > div{margin-left:0;padding:14px 18px;gap:12px}
  /* position stays RELATIVE. .acc__num::before is inset:0 against its nearest positioned
     ancestor, so setting the coin to static handed the ring to the capsule — the whole
     pill got a rainbow outline and the coin went plain grey. */
  .feedback .acc__num{position:relative;left:auto;top:auto;transform:none;
    width:44px;height:44px;font-size:15px}
  .feedback > div > svg{width:24px;height:24px;padding-right:12px}}
/* channel card */
/* .appbox / .appbox-icon — channel card (grid b9c44a3, badge b0d4b47) */
.appgrid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:24px}
.appgrid:not(:has(> :nth-child(4))){grid-template-rows:auto}  /* one row of three: no phantom second row */
@media(max-width:1024px){.appgrid{gap:10px}}
@media(max-width:767px){.appgrid{grid-template-columns:1fr;grid-template-rows:auto}}
.chcard{position:relative;display:flex;flex-direction:column;gap:10px;padding:30px;
  border:1px solid #ddd;border-radius:20px;color:#000;text-decoration:none}
.chcard:hover{background:rgba(0,0,0,.03)}
@media(max-width:1024px){.chcard{padding:20px}}
/* The six glyphs carry their ink as attributes — 23 `fill="black"` and 3 `fill="#002840"`.
   The markup is fixed, so the ink is set here instead: an SVG presentation ATTRIBUTE loses to
   a CSS rule, verified in the browser, so `fill`/`stroke` on the paths overrides what the
   markup says without touching it. This is the pattern for all 286 legacy brand colours still
   sitting in SVG across the build — none of them is an inline style, so all of them are
   reachable from here. */
.chcard__icon{display:flex;align-items:center;justify-content:center;width:56px;height:auto;
  aspect-ratio:1/1;background:#01CE7F;color:#fff;border-radius:50%;margin-bottom:10px}
.chcard__icon svg [fill]:not([fill="none"]){fill:currentColor}
.chcard__icon svg [stroke]:not([stroke="none"]){stroke:currentColor}
.chcard__icon svg{display:block}
/* index.html's six cards carry raster art instead of a glyph — a 112px (2x) transparent
   cut from tools/card_icon.py. The green disc is for a white monoline glyph and the art is
   not one: measured across all six, the share of the artwork falling under 3:1 is 38.4% on
   #01CE7F against 24.0% on the card's own white, and every light tint in the theme lands
   between (mint 25.8, aqua 25.9, lilac and surface 26.1). Dropping the disc also drops the
   inscribed circle, which is the bigger win — art fitted to the 112px square is 108px wide
   where the same art inscribed in the circle was 74px.
   :has(img) so preview-index's SVG glyph cards keep the green disc they need — white glyphs
   on white would be invisible. */
.chcard__icon img{display:block;width:100%;height:100%;object-fit:contain}
.chcard__icon:has(img){background:none;border-radius:0}
.chcard__badge{position:absolute;top:30px;right:30px;width:auto;background:var(--grad-pill);
  border-radius:100px;padding:10px 14px 8px;color:#050505;font-size:13px;font-weight:500;line-height:13px}
.chcard__title{font-size:20px;font-weight:500;line-height:29px;color:#000}   /* 2669e6b */
.chcard__body{font-size:16px;line-height:26px;color:#000}
/* 995d5de / 4872b00 — section heading and its three sub-headings */
.apps__sub{font-size:36px;font-weight:400;line-height:43px;color:#000;max-width:810px;margin-bottom:10px}
.ways > .h1{margin-bottom:10px}
/* each later sub-heading opens a new block, so it gets 60px above the 30px gap */
.appgrid + .apps__sub,.grid--2 + .apps__sub{margin-top:60px}
@media(max-width:767px){.appgrid + .apps__sub,.grid--2 + .apps__sub{margin-top:40px}}
.ways .grid--2{gap:30px}
.apps__sub strong{font-weight:500}

/* case-study card */
.caseitem{flex:0 0 380px;scroll-snap-align:start}
/* one full card per view on a phone, like every other rail on the site — a fixed 380px
   card is wider than a 320px screen and leaves the rail permanently mid-card */
@media(max-width:767px){.caseitem{flex-basis:100%}}
/* block flow, not grid: the real card spaces itself with per-element margins whose
   collapse (label 10 / title 20 -> 20) a single grid gap cannot reproduce */
.caseitem__a{display:block;cursor:pointer;color:inherit;text-decoration:none;
  transition:transform 200ms ease-in-out}
.caseitem__a:hover{transform:scale(1.02)}
.caseitem__img{display:block;width:100%;aspect-ratio:3/2;height:auto;object-fit:cover;
  border-radius:20px;margin-bottom:16px}
.caselabel{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;margin-bottom:10px}
.caselabel span{display:inline-block;font-size:12px;font-weight:500;line-height:1;
  padding:5px 10px 3px;color:#fff;background:#0461C8;border-radius:100px}
.caseitem__title{font-size:24px;font-weight:500;line-height:1.2;margin-top:20px;color:#000}
.caseitem__desc{color:#000;font-size:16px;line-height:1.8;margin-top:16px}
.caseitem__cta{display:inline-block;margin-top:16px;color:#019ACE;
  font-size:16px;font-weight:500;text-decoration:underline}

/* ============================================================
   16. BIG CTA + WORDMARK + FOOTER
   ============================================================ */
/* CTA block, from the production containers: 9a570cb padding 60px (40/20 on mobile),
   12cef54 inner column 900px, c35a048 60/500/72, 0f85fa1 20/400/29,
   f98a7a9 12/400/14 capped at 200px, and the note stacked under the second button. */
/* Himalayan blue, sampled off the logo. That family is hue 212 at 96% saturation, and it
   is bimodal in the artwork: 29% of its pixels sit at lightness 45-50 (mean #0179F8) and
   another 26% at 10-20 (mean #022857). These two stops are that family at lightness 40 and
   28, so the card runs bright-to-deep the way the logo does. White reads 5.92:1 at the top
   and 9.50:1 at the bottom, which is why the ink below is white and the note, which sits in
   the lower half, can stay quieter without dropping under AA. */
/* Himalayan Blue as a LIGHT FILL WITH DARK INK, the same register as the gold panel on
   gamemantra-ai: the guide sends dark-ink fills to #0EA5FF (white ink would need #007BC4).
   Indigo on Himalayan Blue measures 5.81:1, black 7.84:1. Flat, not --gm-mat-himalayan:
   the material bottoms out at #0047FD, where dark ink stops clearing. */
.cta{background:var(--gm-himalayan-blue);color:var(--gm-shiva-indigo);border-radius:40px;width:100%;display:flex;flex-direction:row;justify-content:center;gap:0;padding:100px}
@media(max-width:1024px){.cta{padding:60px}}
@media(max-width:767px){.cta{padding:40px 20px}}
.cta__inner{display:flex;flex-direction:column;align-items:center;gap:30px;width:900px;max-width:100%}
.cta__title{font-size:60px;font-weight:500;line-height:72px;letter-spacing:0;text-align:center;color:var(--gm-shiva-indigo)}
@media(max-width:1024px){.cta__title{font-size:36px;line-height:45px}}
.cta__sub{font-size:20px;font-weight:400;line-height:29px;text-align:center;color:var(--gm-shiva-indigo)}
@media(max-width:1024px){.cta__sub{font-size:18px}}
/* e423b89: align-items flex-start on desktop (center only under the mobile query),
   justify-content center, gap 10px. Using center here vertically centred the taller
   button+note column against the lone button, lifting the second button off the line. */
.cta__row{display:flex;flex-direction:row;align-items:flex-start;justify-content:center;gap:10px}
.cta__row > div{width:auto}
/* 0cfc160: column, justify-content flex-start, align-items center, gap 10px */
.cta__col{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:10px}
.cta__note{font-size:12px;font-weight:400;line-height:14px;text-align:center;max-width:200px;color:var(--gm-shiva-indigo)}   /* full strength, not .8: at 12px the faded ink measured
   4.03:1 on Himalayan Blue, under the 4.5 floor. At full token it is 5.81:1. */
@media(max-width:767px){
  .cta{padding:40px 20px}
  .cta__row{flex-direction:column;align-items:center}
}
/* Set in the body face, so the wordmark stays selectable, scales without a second asset,
   and costs no markup. Both numbers are properties of THE STRING, not just the font — when
   the text changed from "bloomreach" to "gamemantra" they both went stale and the line
   overflowed by 76.2px at 1440, clipped silently by overflow:hidden.
   Measured in Plus Jakarta Sans 500:
       "gamemantra"  advance 6.1490x   ink 6.0280x   ink height 0.8825x
       "bloomreach"  advance 5.8400x   ink 5.7080x   ink height 0.7690x
   Divide by the ADVANCE ratio, never the ink ratio: text is laid out from the left content
   edge, so the left side bearing pushes the ink right and the ink ratio overruns.
   The line-height is the ink height, and it grew because "gamemantra" has a descender where
   "bloomreach" had none. Tracking is 0: the artwork has none and adding any breaks the ratio.
   RE-MEASURE BOTH IF THE WORD CHANGES AGAIN. */
@media(max-width:520px){.grid-2{grid-template-columns:1fr!important}}

/* on the identity sheet: the footer is the site's dark register, Shiva Indigo like every other dark ground */
.footer{background:var(--gm-shiva-indigo);color:#fff;padding:var(--s8) 0 80px}
/* the wordmark asset is black artwork, so on the dark footer it is set as text */
.footer__logo{display:inline-flex;align-items:center;gap:8px;color:#fff;margin-bottom:var(--s7);overflow:visible;
  /* the footer lockup shares the .logo class, so the header's 60px icon reached it and
     put a 60px mark beside 24px type. It keeps the original 40. */
  --logo-icon:40px}
.footer__logo span{font-size:24px;font-weight:500;line-height:1;letter-spacing:-.01em}
.footer__cols{display:flex;flex-wrap:wrap;justify-content:space-between;gap:60px;max-width:1110px;margin-inline:auto}
.footer__cols > div{display:flex;flex-direction:column;gap:16px;align-items:stretch}
@media(max-width:1024px){.footer__cols{gap:30px}
  .footer__cols > div{flex:0 1 calc(50% - 15px);min-width:0}}
/* production: 16px/500/26px, uppercase, 1.6px tracking */
.footer h4{font-size:16px;font-weight:500;line-height:26px;letter-spacing:1.6px;
  text-transform:uppercase}
/* upstream's first column stacks two groups (Products, Channels & Agents): the second
   heading sits 16px column gap + 20px margin below the first list */
.footer h4:not(:first-child){margin-top:20px}
/* measured on the real footer: links are 14px/400/20px in #fff */
.footer ul{list-style:none;margin:0;padding:0;display:grid;gap:16px;
  font-size:14px;font-weight:400;line-height:20px;letter-spacing:0;color:#fff}
.footer li a{display:inline-flex;align-items:center;gap:var(--s2)}
/* upstream sets the footer badge 8px off the label, which is the link gap; the header badge's own 5px would make it 13 */
.footer li a .brheader__badge{margin-left:0;top:0}
.footer li a:hover{color:var(--gm-kartikeya-gold)}
.footer__meta{display:flex;align-items:center;gap:var(--s7);flex-wrap:wrap;margin-top:60px;
  max-width:1110px;margin-inline:auto}
.footer__lang .nav__mob{color:#fff;display:flex;align-items:center;gap:6px}
.footer__lang .nav__mob__dd{top:auto;bottom:100%;padding:0 0 5px}
.footer__lang .nav__mob__dd__box{color:var(--gm-shiva-indigo)}
/* `.footer ul` (0,1,1) outranks a bare class, so these need the extra qualifier
   or they inherit the single-column grid used by the link lists. */
.footer ul.footer__social{display:flex;align-items:center;gap:var(--s5);list-style:none;margin:0;padding:0;font-size:22px;line-height:0}
.footer__social a{color:#fff;display:block;transition:opacity 200ms ease-in-out}
.footer__social svg{display:block;width:22px;height:22px}
@media(max-width:767px){.footer ul.footer__social{gap:12px}
  .footer__social svg{width:18px;height:18px}}
.footer ul.footer__social a:hover{color:var(--gm-himalayan-blue)}
.footer__bottom{display:flex;justify-content:space-between;gap:var(--s6);flex-wrap:wrap;
  margin:60px auto 0;max-width:1110px;font-size:12px;color:#fff}
.footer__bottom > span:first-child{line-height:14px}
/* .footer-links-all: 12px, 8px/16px gaps, underline on hover */
.footer__legal{display:flex;gap:8px 16px;flex-wrap:wrap;font-size:12px}
.footer__legal a:hover{color:var(--gm-kartikeya-gold);text-decoration:none}
@media(max-width:820px){.footer__meta{gap:var(--s5)}}
@media(max-width:820px){.footer__cols{grid-template-columns:repeat(2,1fr)}}
/* upstream drops every heading a step at the tablet breakpoint; measured per group. */
@media(max-width:1024px){
  .h1{font-size:36px;line-height:45px}
  .apps__sub{font-size:24px;line-height:30px}
  .chcard__title{font-size:18px;line-height:29px}
  .connect__title{font-size:18px;line-height:29px}
}
/* Upstream steps the section rhythm down per section, not uniformly:
   intel/platform/ways drop at 1024; cases and integrations hold until 767;
   the CTA never changes. Measured on the reference page at 1440/1024/768/390. */
@media(max-width:1024px){
  .section{padding-top:60px}
  .section--journey{padding-bottom:60px}
  .section--cases{padding-top:120px}
  .section--int{padding-top:var(--s10)}
  .section--cta{padding-top:100px}
  /* the journey rail tightens its three gaps: 80/50/40 -> 40/20/20 */
  .shead--journey{margin-bottom:40px}
  .legend{margin-top:20px;margin-bottom:20px}
  .section--journey footer.shead{gap:20px;margin-block:24px 20px}
  .section--journey footer.shead .lead{font-size:12px;letter-spacing:.22em}
}
@media(max-width:767px){
  .section--cases{padding-top:60px}
  .section--int{padding-top:60px;padding-bottom:60px}
  /* the label wraps below 767, and side rules on a wrapped block read as stray dashes */
  .section--journey footer.shead{gap:0}
  .section--journey footer.shead::before,
  .section--journey footer.shead::after{content:none}
  .section--journey footer.shead .lead{font-size:12px;letter-spacing:.16em}
}
/* Mobile footer tail: upstream stacks language / social / badges, and the legal
   links sit ABOVE the copyright, which ends the page. */
@media(max-width:767px){
  .footer__meta{flex-direction:column;align-items:flex-start;gap:30px}
  .footer__bottom{flex-direction:column-reverse;align-items:flex-start;gap:26px;margin-top:30px}
}


/* ============================================================
   BLOG LANDING  — every value measured on the production blog page
   ============================================================ */
:root{ --meta:#99A9B3; }          /* post meta grey, measured rgb(153,169,179) */

/* Category filter bar. Measured on the production page: sticky at top:60px (z-index 6),
   66px tall on a #F2F4F5 band, content centred, 40px chevrons, 1020px scrolling list,
   32px gaps, and a 2px cyan underline pinned to the bottom of the active link. */
.blogbar{position:sticky;top:60px;z-index:6;background:#F2F4F5;transition:.4s}
/* the header shrinks to 48px below 575px, so a hardcoded 60 left a 12px strip of
   page scrolling through between the header and this bar */
@media(max-width:575px){.blogbar{top:48px}}
.blogbar__in{display:flex;justify-content:center;align-items:stretch;padding:0 15px}
.blogbar__arrow{flex:none;width:40px;height:66px;display:flex;align-items:center;justify-content:center;
  background:none;border:0;color:var(--text);cursor:pointer}
.blogbar__arrow:disabled{opacity:.35;cursor:default}
.blogbar__wrap{display:flex;width:calc(100% - 280px);max-width:1020px;min-width:0}
.blogbar__list{max-width:1020px;width:100%;display:flex;align-items:stretch;gap:32px;list-style:none;margin:0;padding:0;height:66px;
  overflow-x:auto;scrollbar-width:none;font-size:16px;line-height:26px}
.blogbar__list::-webkit-scrollbar{display:none}
.blogbar__list a{position:relative;display:flex;align-items:center;height:100%;white-space:nowrap;color:var(--text)}
.blogbar__list a:hover{color:var(--cyan)}
.blogbar__list .is-active a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--cyan)}
.blogbar__btns{flex:none;display:flex;align-items:center;max-width:200px;border-left:1px solid #CCD4D9}
.blogbar__filter{display:inline-flex;align-items:center;gap:8px;padding:20px 16px;
  background:none;border:0;color:var(--text);font:inherit;font-size:16px;cursor:pointer}
.blogbar__filter svg{flex:none;width:11.56px;height:16px}
.blogbar__filter[aria-expanded="true"]{color:var(--cyan)}
.blogbar__count{background:var(--cyan);color:#fff;border-radius:99px;padding:1px 8px;font-size:12px;line-height:18px}
@media(max-width:767px){
  .blogbar{background:#fff}
  .blogbar__in{flex-wrap:wrap;padding:0;border-bottom:1px solid #F2F4F5}
  .blogbar__wrap{width:calc(100% - 80px);height:66px}
  .blogbar__btns{max-width:none;width:100%;border-left:none;border-top:1px solid #F2F4F5}
  .blogbar__filter{width:100%;justify-content:center;background:#F2F4F5}}

/* filter flyout */
.pff{position:absolute;left:0;right:0;top:100%;background:#fff;border-top:1px solid #CCD4D9;
  box-shadow:0 24px 40px rgba(0,0,0,.10);display:none}
.pff[data-open]{display:block}
.pff__cols{display:flex;gap:60px;max-width:1110px;margin-inline:auto;padding:32px 15px 8px}
.pff__col{flex:1 1 0;min-width:0}
.pff__title{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0 0 16px}
.pff__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.pff__list ul{list-style:none;margin:12px 0 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}
.pff__label{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:16px;line-height:26px;color:var(--text)}
.pff__label input{flex:none;width:18px;height:18px;accent-color:var(--cyan)}
.pff__badge{margin-left:auto;background:var(--surface);border-radius:99px;padding:2px 10px;
  font-size:12px;line-height:18px;color:var(--text)}
.pff__actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;max-width:1110px;
  margin-inline:auto;padding:16px 15px 24px}
.pff__reset{background:none;border:0;font:inherit;font-size:16px;font-weight:500;color:var(--text);
  text-decoration:underline;text-underline-offset:4px;cursor:pointer}
.pff__apply{border:0;border-radius:99px;background:var(--cyan);color:#fff;padding:11px 32px;
  font:inherit;font-size:16px;font-weight:500;cursor:pointer}
.pff__note{margin:0 auto 0 0;font-size:14px;line-height:20px;color:var(--meta)}
.blognores{display:none;max-width:1110px;margin:0 auto;padding:60px 15px;text-align:center;
  font-size:20px;line-height:29px;color:var(--text)}
.blognores[data-on]{display:block}
@media(max-width:767px){.pff__cols{flex-direction:column;gap:24px}}

/* featured post */
.bloghero{display:flex;align-items:center;gap:30px;max-width:1110px;margin-inline:auto}
.bloghero__media{position:relative;flex:0 0 auto;width:486px;overflow:hidden;border-radius:20px}
.bloghero__media img{display:block;width:100%;height:389px;object-fit:cover;transition:.4s}
.bloghero__body{flex:1 1 auto;display:flex;flex-direction:column;align-items:flex-start;gap:40px;min-width:0}
.bloghero__head{display:flex;flex-direction:column;gap:24px;align-self:stretch}
.bloghero__metarow{display:flex;flex-direction:column;gap:16px}
.bloghero__title{font-size:36px;line-height:43px;font-weight:500;color:var(--text);margin:0}
.bloghero__meta{display:flex;align-items:center;gap:0;font-size:16px;line-height:26px;color:var(--meta);margin:0}
.bloghero__meta span{display:flex;align-items:center}
.bloghero__meta span:not(:last-child)::after{content:"";display:block;width:4px;height:4px;
  border-radius:50%;background:#CCD4D9;margin:0 16px}
/* 768-1024 the source keeps the row but shrinks the artwork to 229 and the title to 24/30,
   inside the same centred 768 box the other bands use. Below 767 it stacks title-over-art
   via column-reverse, since the markup puts the artwork first. */
@media(max-width:1024px){
  .bloghero{width:calc(100% - 2px);max-width:768px;margin-inline:auto}
  .bloghero__media{width:229px}
  .bloghero__media img{height:auto;aspect-ratio:5/4}
  .bloghero__title{font-size:24px;line-height:30px}
  .bloghero__body{gap:32px}
  .bloghero__head{gap:20px}}
@media(max-width:767px){
  .bloghero{flex-direction:column-reverse;align-items:stretch;gap:32px}
  .bloghero__media{width:100%}
  .bloghero__body{gap:24px}}

/* the white "Blog" pill sitting 16px into the artwork */
.ptype{position:absolute;top:16px;left:16px;display:inline-flex;align-items:center;gap:6px;
  background:#fff;color:var(--text);border-radius:99px;padding:6px 16px 6px 8px;
  font-size:12px;font-weight:500;line-height:14px}
.ptype svg{display:block;width:14px;height:14px}

/* post card */
.pcard{display:flex;flex-direction:column;gap:16px}
.pcard__media{position:relative;overflow:hidden;border-radius:20px}
.pcard__media img{display:block;width:100%;aspect-ratio:350/232;object-fit:cover;transition:.4s}
/* Hovering anywhere on the card zooms its artwork. Measured upstream:
   scale(1.075) translate(3.2%,-3.2%) over 0.4s, and the wrapper does not clip. */
.pcard:hover .pcard__media img,
.bloghero:hover .bloghero__media img{transform:scale(1.075) translate(3.2%,-3.2%)}
.pcard__body{display:flex;flex-direction:column;gap:12px}
.pcard__date{font-size:14px;line-height:14px;color:#000}
/* Upstream's terms list, measured on blog_home, blog_detail and analyst-reports alike:
   `display:flex; gap:8px 2px; font-size:12px/14px; color:transparent`, with a comma text
   node between the pills that the container paints out. `.p-ar .pcard__tags` carried
   these four values as a page override while the shared rule kept a plain 8px gap -- the
   override was evidence about the shared rule, not a page-specific fact. */
.pcard__tags{display:flex;flex-wrap:wrap;gap:8px 2px;color:transparent;font-size:12px;line-height:14px;font-weight:500}
.pcard__tag{background:var(--text);color:#fff;border-radius:99px;padding:3px 8px;
  font-size:12px;line-height:14px;font-weight:500}
.pcard__title{font-size:22px;line-height:28px;font-weight:500;color:var(--text);margin:0}
@media(max-width:1024px){.pcard__title{font-size:18px;line-height:24px}}
.pcard__title a:hover{color:var(--cyan)}

/* grids and section rhythm */
/* Row sizing measured off the source grid: grid-auto-rows:1fr makes every row
   the height of the tallest card (source resolves to 418px 418px 418px at 1440),
   with the gap living between rows rather than inside the cards. Source goes
   3 columns straight to 1 at the 767 mobile breakpoint -- there is no 2-up stage. */
.pgrid{display:grid;grid-template-columns:repeat(3,1fr);column-gap:30px;row-gap:0;grid-auto-rows:1fr}
@media(max-width:1024px){.pgrid{row-gap:16px;column-gap:16px}}
@media(max-width:767px){.pgrid{grid-template-columns:1fr}}
.blogsec{max-width:1110px;margin-inline:auto;padding-bottom:36px}
@media(max-width:1024px){
  .blogsec{width:calc(100% - 2px);max-width:768px;margin-inline:auto;padding:26px 0}}
.blogsec__h{font-size:50px;line-height:60px;font-weight:500;color:var(--text);margin:0 0 40px}
@media(max-width:1024px){.blogsec__h{font-size:36px;line-height:45px;margin-bottom:30px}}
.blogsec__more{display:flex;justify-content:center;margin-top:40px}

/* outlined "View All" and the solid "Read More" */
.btn-line{display:inline-block;text-align:center;border:1px solid #34AED8;
  border-radius:99px;padding:11px 32px;font-size:16px;font-weight:500;line-height:26px;color:var(--text);background:none}
.btn-line:hover{background:#34AED8;color:#fff}
.btn-solid{display:inline-block;text-align:center;background:var(--cyan);color:#fff;
  border:1px solid transparent;border-radius:99px;padding:11px 32px;font-size:16px;font-weight:500;line-height:26px}
.btn-solid:hover{background:var(--cyan-hover,#0086b6)}

/* resource library carousel */
.reslib{max-width:1110px;margin-inline:auto;padding-top:5px}

/* blog.html band rhythm. Measured off the source bands at 1440 and 1024:
   hero 80/80 -> 32/26, post bands 0-or-36 top + .blogsec's 36 -> a flat 26/26,
   resource library 0/64 -> 0, newsletter 36/72 -> 26/52. These are classes rather
   than inline styles so the 1024 values can override them. */
.bband--hero{padding:80px 0}
.bband--flush{padding-top:0}
.bband--36{padding-top:36px}
.bband--res{padding:0 0 64px}
.bband--news{padding:36px 0 72px}
@media(max-width:1024px){
  .bband--hero{padding:32px 0 26px}
  .bband--flush,.bband--36{padding-top:0}
  .bband--res{padding:0}
  .bband--news{padding:26px 0 52px}}
.reslib__kicker{font-size:16px;line-height:26px;color:var(--meta);margin:0 0 4px}
.reslib > .blogsec__h{margin-bottom:45px}
/* Carousel measured from the source widget: 3 per view (2 tablet / 1 mobile),
   16px spacing, 500ms slide, 5s autoplay, infinite, pause on hover. */
.reslib__view{overflow:hidden}
.reslib__rail{display:flex;gap:16px;transition:transform .5s ease;will-change:transform}
.reslib__rail.is-instant{transition:none}
.rescard{flex:0 0 calc((100% - 32px) / 3);min-width:0;display:flex;align-items:flex-start;gap:16px;
  background:var(--surface);border-radius:20px;padding:16px}
@media(max-width:1024px){.rescard{flex-basis:calc((100% - 16px) / 2)}}
@media(max-width:767px){.rescard{flex-basis:100%}}
.rescard__thumb{flex:0 0 auto;width:100px;height:100px;border-radius:20px;display:block}
/* upstream sets no object-fit here, so these 100x100 thumbs stretch their
   non-square sources. Add object-fit:cover if you'd rather they crop. */
.rescard__body{display:flex;flex-direction:column;gap:16px;min-width:0}
.rescard__head{display:flex;align-items:center;gap:8px}
.rescard__ico{flex:none;width:33px;height:32px;display:grid;place-items:center;
  background:#0461C8;color:#fff;border-radius:8px}
.rescard__title{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0}
.rescard__desc{font-size:16px;line-height:26px;color:var(--text);margin:0}
.rescard__cta{display:flex;align-items:center;align-self:flex-start;
  font-size:16px;line-height:26px;font-weight:500;color:var(--cyan);text-decoration:underline}
.rescard__cta svg{flex:none;display:block}
.reslib__nav{display:flex;align-items:center;gap:12px;margin-top:56px}
.reslib__dots{display:flex;align-items:center;gap:8px;margin-inline:auto}
.reslib__dot{width:8px;height:8px;border-radius:50%;background:#CCD4D9;border:0;padding:0;cursor:pointer}
.reslib__dot.is-on{background:var(--text)}
.reslib__btn{width:41px;height:41px;border-radius:50%;background:#0461C8;border:0;cursor:pointer;
  display:grid;place-items:center;color:#fff}
.reslib__btn:disabled{opacity:.5;cursor:default}

/* ================= ANALYST REPORTS (analyst-reports.html) =========================
   Source: `analyst-reports.html` at the ground-truth root, Elementor ARCHIVE 12051.
   Its own markup is only three sections -- the featured report, the "Recent Analyst
   Insights" grid (with the sticky topic bar and the resource carousel sitting between
   its two loop grids), and the subscribe band. Everything else is the shared chrome.

   Most of the page is components blog.html already carries and this project has already
   matched: `.blogbar` + `.pff` IS upstream's `.posts-filter`, `.pcard` + `.ptype` IS the
   loop card, `.reslib`/`.rescard` IS the resource carousel and `<site-subs>` IS the
   subscribe band. So this block is the deltas only, and the `.p-ar` rules below are
   places where THIS page's source measures differently from blog's -- not overrides of
   a rule that was wrong.

   Breakpoints are Elementor's: 1024 (tablet) and 767 (mobile). */

/* --- 1  the featured report ------------------------------------------------------ */
.ar__hero{display:flex;flex-direction:column;padding:0 15px}
/* width:100% is not redundant next to max-width here: an auto inline margin on a flex
   item cancels the stretch, and the box then shrink-wraps to its own text (measured:
   the heading band came out 549 wide inside a 1110 column) */
.ar__hero__in{display:flex;flex-direction:column;gap:80px;
  width:100%;max-width:1110px;margin-inline:auto;padding:80px 0;box-sizing:border-box}
.ar__feat{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:30px}
/* 45/55 with the default shrink: the two bases plus the 30px gap overflow the row, so
   both give back 30px in proportion -- 486/594 at 1110, which is what upstream renders */
.ar__feat__media{position:relative;display:flex;flex-direction:column;gap:30px;width:45%;min-width:0}
.ar__feat__media img{display:block;width:100%;height:auto;aspect-ratio:5/4;object-fit:cover;border-radius:20px}
.ar__feat__copy{display:flex;flex-direction:column;gap:40px;width:55%;min-width:0}
.ar__feat__top{display:flex;flex-direction:column;gap:24px}
.ar__feat__meta{display:flex;flex-direction:column;align-items:flex-start;gap:16px}
.ar__feat__h{font-size:36px;line-height:43px;font-weight:500;color:var(--text);margin:0}
.ar__feat__lead{font-size:16px;line-height:26px;color:#335366;margin:0}
.ar__btn{align-self:flex-start;display:inline-block;padding:11px 32px;border:1px solid var(--cyan);
  border-radius:99px;background:var(--cyan);color:#fff;font-size:16px;line-height:26px;
  font-weight:500;text-align:center}
/* date + read time, with upstream's 4px dot between them */
.ar__info{display:flex;flex-direction:row;font-size:16px;line-height:26px;margin:0}
.ar__info__i{display:flex;align-items:center;color:var(--text)}
.ar__info__t{display:block;color:#99A9B3}
.ar__info__i:first-child::after{content:"";display:block;width:4px;height:4px;
  border-radius:50%;background:#CCD4D9;margin:0 16px}

/* --- 2  section heading ---------------------------------------------------------- */
.ar__head{display:flex;flex-direction:column;padding:0 15px}
.ar__head__in{width:100%;max-width:1110px;margin-inline:auto;padding:5px 0;
  display:flex;flex-direction:column;gap:4px;box-sizing:border-box}
/* this page's kicker is #667E8C, a step darker than the site's --meta */
.ar__kicker{font-size:16px;line-height:26px;color:#667E8C;margin:0}
.p-ar .reslib__kicker{color:#667E8C}
.ar__h2{font-size:50px;line-height:60px;font-weight:500;color:var(--text);margin:0}

/* --- 3  the two loop grids, with the resource band between them ------------------- */
.ar__body{display:flex;flex-direction:column;padding:0 15px}
.ar__body__in{display:flex;flex-direction:column;gap:0;width:100%;max-width:1110px;margin-inline:auto}
.ar__gridwrap{padding-bottom:64px}
/* only the FIRST grid carries the 64px foot; upstream leaves the last one flush */
.ar__gridwrap:last-child{padding-bottom:0}
.ar__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:64px 30px}
.arcard__cta{align-self:flex-start;margin:0;font-size:16px;line-height:26px;color:var(--cyan)}
.arcard__cta a{text-decoration:underline;color:inherit}
/* this page's chip carries an 8px gap and an <img> mark, where blog's carries 6px and
   an inline svg -- both measured against their own source */
.p-ar .ptype{gap:8px}
.ptype img{display:block;width:14px;height:14px}
/* upstream's pill row: 2px column gap with the transparent ", " sitting in it */

/* the resource band: same component, but upstream frames the rail and its controls
   with a 1px outline -- inset below the rail top on desktop, above the controls below */
.ar__resband{display:flex;flex-direction:column;gap:40px;padding-bottom:40px}
/* upstream hangs the 16px under the rail and 40px under that, where the shared
   component rolls both into the nav's 56px margin. Same total, matched boxes. */
.p-ar .reslib__view{padding-bottom:16px}
.p-ar .reslib__nav{margin-top:0}
.p-ar .rescard{background:#F2F4F5}
.p-ar .reslib__car{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;gap:40px 0}
.p-ar .reslib__view,.p-ar .reslib__nav{flex:1 1 100%;min-width:0}
/* the band is a flex column, so the component's auto inline margin would cancel its
   stretch and leave it at its own 1110 max-width inside a 360 phone (measured) */
.p-ar .reslib{width:100%}
.p-ar .reslib__car::before{content:"";position:absolute;inset:56px 0 0;
  border:1px solid #E5E9EC;border-radius:32px;pointer-events:none}
.rescard__ico--file{flex:none;width:32px;height:32px;background:none;border-radius:0}
/* upstream's swiper on THIS page steps 3 / 2 / 1 at 1024 / 641 / below, where blog's
   steps at 1025 / 768. Measured on both sources, not assumed. The 3-up and 2-up steps
   follow this source; the last step is pulled up from 641 to 767 by divergence 4 --
   every carousel on every page shows exactly one full card at <=767. */
@media(max-width:1024px){.p-ar .rescard{flex-basis:calc((100% - 32px) / 3)}}
@media(max-width:1023px){.p-ar .rescard{flex-basis:calc((100% - 16px) / 2)}}
@media(max-width:767px){.p-ar .rescard{flex-basis:100%}}

/* --- 4  tablet ------------------------------------------------------------------- */
.p-ar .bband--news{display:flex;flex-direction:column;gap:30px}

@media(max-width:1024px){
  .ar__hero{padding:0 16px}
  .ar__hero__in,.ar__head__in,.ar__body__in{max-width:768px}
  .ar__hero__in{gap:36px;padding:32px 0 26px}
  .ar__feat__copy{gap:32px;width:100%}
  .ar__feat__top{gap:20px}
  .ar__feat__h{font-size:24px;line-height:30px}
  /* both band headings centre from tablet down, kicker included */
  .ar__head__in{text-align:center}
  .ar__h2{font-size:30px;line-height:38px}
  .p-ar .reslib__kicker,.p-ar .reslib > .blogsec__h{text-align:center}
  .ar__gridwrap{padding-bottom:32px}
  .ar__grid{gap:32px 16px}
  .p-ar .pcard__media{border-radius:12px}
  .p-ar .reslib__car::before{inset:0 0 56px;border-radius:12px}
  .ar__resband{padding-bottom:0}
  .p-ar .reslib__car{gap:24px 0}
  /* the dot between the date and the read time tightens from 16px to 12px */
  .ar__info__i:first-child::after{margin:0 12px}
  .p-ar .rescard{border-radius:12px}
  .p-ar .rescard__title{font-size:18px}
  /* the tile's inner column tightens from 16px to 10px from tablet down */
  .p-ar .rescard__body{gap:10px}
  .p-ar .reslib > .blogsec__h{font-size:30px;line-height:38px}
  .p-ar .bband--news{padding-top:0}
  /* The stack, the 768 cap, the padding, the radius, the left column's gap and the
     heading size all come from the shared rule now -- it stacks at 1024 too, which is
     what both sources do. Only this page's form spacing is left here. */
  /* upstream's form is one wrapping flex column here: 12px between every line,
     and the consent block carries its own 8px lead-in */
  .p-ar .subs__right,.p-ar .subs__row{gap:12px}
  .p-ar .subs__note{padding-top:8px}
  .p-ar .subs__row{flex-direction:column}
  .p-ar .subs__row button{width:100%}
}

/* --- 5  mobile ------------------------------------------------------------------- */
@media(max-width:767px){
  .ar__feat{flex-direction:column-reverse;gap:32px}
  .ar__feat__media,.ar__feat__copy{width:100%}
  .ar__feat__copy{gap:24px}
  .ar__btn{align-self:stretch}
  .ar__grid{grid-template-columns:1fr}
  /* the subscribe band pads 16px here, not the site's 15 -- two pixels, but the
     heading sits exactly on its wrap point at 767 and they decide the line count */
  .p-ar .bband--news .wrap{padding-inline:16px}
}

/* newsletter */
.subs{max-width:1110px;margin-inline:auto;background:#E5F5FA;border-radius:32px;padding:32px;
  display:flex;align-items:flex-end;gap:30px}
.subs__left{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
/* align-self + gap:0 -- upstream's avatar row is 126px of content, not the column's
   full 508. A flex child stretches by default, so this box was four times too wide on
   blog, blog-detail and analyst-reports as well. The avatars themselves sit at the
   same 0/36/72 either way, which is why nothing looked wrong. */
.subs__faces{display:flex;align-self:flex-start;gap:0}
.subs__faces img{width:42px;height:42px;border-radius:20px;border:2px solid #CCD4D9;object-fit:cover}
/* The overlap is PAINTED, not laid out: upstream gives each avatar a full 42px slot
   (3 x 42 = the 126px box) and pulls the image left inside it. A negative margin
   instead put the avatars in the right places -- 0/36/72 either way -- but shrank the
   row to 114. position:relative/left keeps the box and moves the paint. */
.subs__faces img{position:relative}
.subs__faces img:nth-child(2){left:-6px}
.subs__faces img:nth-child(3){left:-12px}
.subs__h{font-size:36px;line-height:43px;font-weight:500;color:var(--text);margin:0}
.subs__right{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:16px}
.subs__row{display:flex;gap:8px}
.subs__row input{flex:1 1 auto;min-width:0;height:48px;border-radius:99px;background:#fff;
  border:1px solid #CCD4D9;padding:10px 32px;font:inherit;font-size:16px;color:var(--text)}
.subs__row button{flex:none;height:48px;border:0;border-radius:99px;background:#0461C8;
  color:#fff;padding:11px 32px;font:inherit;font-size:16px;font-weight:500;cursor:pointer}
.subs__note{font-size:16px;line-height:26px;color:var(--text);margin:0}
/* upstream's reCAPTCHA line is HubSpot's own 10/12, one line at 442 wide -- measured
   on BOTH saved sources (blog_home and analyst-reports); at 12/18 it wrapped and made
   the right column 24px too tall on every page that carries this band */
.subs__fine{font-size:10px;line-height:12px;color:var(--text);margin:0}
/* Four values here were wrong on every page carrying this band -- blog, blog-detail and
   analyst-reports as well as news. Both sources agree exactly (news.html and
   blog_home.html, measured at 767 and 320): radius 20 not 24, align-items flex-end not
   stretch, the left column's gap 24 not 30, and the heading 24/30 not 28/34. The `.p-ar`
   block above already carried the right numbers because that page stacks at 1024 and
   needed its own copy -- so the correct values were sitting ten lines away from the wrong
   ones the whole time. Its copies are NOT redundant (they cover 901-1024) and stay. */
/* 1024, not 900: BOTH sources stack this band at 1024 (news.html and blog_home.html,
   measured). analyst-reports had it right in its own block, which is how the wrong
   shared breakpoint survived -- the page that needed a copy wrote the correct one. */
@media(max-width:1024px){
  .subs{flex-direction:column;align-items:flex-end;max-width:768px;padding:24px;border-radius:20px}
  .subs__left,.subs__right{width:100%}
  .subs__left{gap:24px}
  .subs__h{font-size:24px;line-height:30px}
  /* stacked, the field and the button sit 12px apart, not 8 */
  .subs__row{flex-direction:column;gap:12px}
  .subs__row button{width:100%}}


/* ============ BLOG DETAIL ============
   Measured from blog_detail.html at 1440: content 1110 @165, article column 731,
   sidebar 355, 24px between them. */
/* visually hidden: reachable by screen readers, no layout box */
.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.bd__top{padding-top:72px}
/* Type, icons and separator come from the SHARED rank-math block (search "rank-math
   breadcrumb -- the SHARED skin"): the nav also carries .crumbs. This rule is only the
   container both bd pages wrap their trail in. */
.bd__crumb{max-width:1110px;margin:0 auto 30px}

.bd__hero{max-width:1110px;margin-inline:auto;display:flex;align-items:center;gap:30px}
.bd__hero__l{flex:0 1 540px;min-width:0;display:flex;flex-direction:column;gap:24px}
.bd__hero__img{flex:0 1 540px;width:540px;height:auto;aspect-ratio:540/432;min-width:0;  /* a replaced item's automatic minimum is its specified width, so without
     min-width:0 the image refuses to shrink and the text column absorbs it all */
  border-radius:20px;object-fit:cover}
/* Upstream's terms list is `display:flex; gap:8px 2px` with a comma text node BETWEEN
   the pills, painted transparent by the wrapper's own colour. The 7px gap this used to
   carry was reverse-engineered from one row of two terms: 28+7+102 happens to equal
   28+2+comma+2+102, and it would be wrong for any other pair. */
.bd__ptags{display:flex;font-size:12px;line-height:14px;font-weight:500}
.bd__ptags__list{display:flex;flex-wrap:wrap;gap:8px 2px;color:transparent}
.bd__ptag{background:var(--text);color:#fff;font-size:12px;font-weight:500;line-height:14px;
  border-radius:99px;padding:3px 8px}
.bd__h1{font-size:50px;line-height:60px;font-weight:500;color:var(--text);margin:0}
.bd__meta{display:flex;align-items:center;gap:16px;font-size:16px;line-height:26px}
.bd__meta__author{display:flex;align-items:center;gap:12px}
.bd__meta img{flex:none;width:40px;height:40px;border-radius:50%;object-fit:cover}
.bd__meta__name{color:var(--cyan)}
.bd__meta__stats{display:flex;align-items:center}
.bd__meta__sub{display:flex;align-items:center;color:var(--meta)}
/* 4px dot between the date and the read time -- the source draws it, it is not a glyph. */
.bd__meta__sub:not(:last-child)::after{content:"";display:block;width:4px;height:4px;
  border-radius:50%;background:#CCD4D9;margin:0 16px}

.bd__body{padding-top:72px}
.bd__layout{max-width:1110px;margin-inline:auto;display:flex;align-items:flex-start;gap:24px}
.bd__article{flex:1 1 731px;min-width:0;display:flex;flex-direction:column;gap:32px}
.bd__side{flex:0 0 355px;position:sticky;top:80px;
  display:flex;flex-direction:column;align-items:center;gap:24px}

/* prose */
.bd__article h2{font-size:36px;line-height:43px;font-weight:500;color:var(--text);margin:0 0 32px;scroll-margin-top:100px}
.bd__article h3{font-size:30px;line-height:36px;font-weight:500;color:var(--text);margin:0 0 32px}
.bd__article p{font-size:16px;line-height:26px;color:var(--text);margin:0 0 32px}
.bd__article h4{font-size:24px;line-height:30px;font-weight:500;color:var(--text);margin:0 0 32px}
.bd__article ul{list-style:none;margin:0 0 32px;padding:0}
.bd__article li{position:relative;font-size:16px;line-height:26px;color:var(--text);
  margin:0;padding:0 0 0 32px}
.bd__article li::before{content:"";position:absolute;top:10px;left:16px;display:flex;
  width:4px;height:4px;border-radius:50%;background:#002840}
.bd__article img{width:100%;height:auto;border-radius:20px;margin:0 0 32px}
.bd__article a{color:var(--cyan);text-decoration:underline}

/* The post body's FAQ accordion — a Gutenberg block (faq-section-v1), so it can appear
   in ANY post on this template, not just this one. Numbers are that block's own
   stylesheet, read out of the page's inline <style>; the two font vars it uses resolve to
   36/43 w500 for the section title and 16/26 for both the question and the answer. */
.bd__faq{margin-bottom:32px}
.bd__article .bd__faq__title{font-size:36px;line-height:43px;font-weight:500;
  color:var(--text);margin:0 0 32px}
.bd__faq__item{display:flex;flex-direction:column;margin-bottom:10px;border-radius:16px;
  overflow:hidden;border:1px solid #E5E9EC}
.bd__faq__q{display:flex;align-items:center;padding:10px 10px 10px 16px;cursor:pointer}
.bd__article .bd__faq__qt{flex-grow:1;margin:0 10px 0 0;font-size:16px;line-height:26px;
  font-weight:500;color:var(--text)}
.bd__faq__mark{display:flex;align-items:center;justify-content:center;flex:0 1 auto;
  width:48px;height:48px;border-radius:50%;border:1px solid #E5E9EC;
  transition:border .3s linear}
.bd__faq__mark svg{color:#019ACE;margin:auto;transition:transform .3s linear}
.bd__faq__item.is-open .bd__faq__mark{border-color:transparent}
.bd__faq__item.is-open .bd__faq__mark svg{transform:rotate(180deg)}
/* height, not max-height: upstream measures the panel and animates to that exact number */
.bd__faq__a{height:0;overflow:hidden;transition:height .3s linear}
.bd__faq__inner{padding:16px 16px 32px}
.bd__article .bd__faq__a p{margin:0;font-size:16px;line-height:26px;color:var(--text)}
@media(max-width:1024px){
  .bd__faq{margin-bottom:24px}
  .bd__article .bd__faq__title{font-size:22px;line-height:28px;margin-bottom:24px}
  .bd__faq__item{border-radius:8px;margin-bottom:12px}
  .bd__faq__q{padding:16px 12px}
  .bd__article .bd__faq__qt{margin-right:26px}
  .bd__faq__inner{padding:8px 16px 16px}}

.bd__tagsec{display:flex;flex-direction:column;gap:16px;
  border-top:1px solid #CCD4D9;padding:32px 0 8px}
.bd__tagsec h2{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0}
/* the author card and the bio share one 16px column -- they are one block upstream */
.bd__bioblock{display:flex;flex-direction:column;gap:16px}
.bd__author{display:flex;align-items:center;gap:12px;margin:0}
.bd__author__pic{flex:none;width:90px;line-height:26px}
.bd__author img{display:inline;vertical-align:baseline;width:90px;height:90px;margin:0;
  border-radius:50%;object-fit:cover;border:2px solid #CCEBF5}
.bd__author__who{flex:1 1 auto;display:flex;flex-direction:column;gap:4px}
.bd__author .bd__author__name{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0}
.bd__author .bd__author__role{font-size:14px;line-height:20px;font-weight:500;color:var(--text);margin:0}
.bd__bio{display:flex;flex-direction:column;gap:8px}
.bd__author__name a{color:var(--text);text-decoration:none}
.bd__author__social{display:flex;flex-direction:row;gap:12px}
.bd__author__social a{display:block;width:12px;height:26px;color:#019ACE;line-height:26px}
.bd__author__social svg{display:block;margin-top:7px}
.bd__bio p{font-size:18px;line-height:29px;color:#667E8C;margin:0}
.bd__bio a{color:var(--cyan)}

/* sidebar */
/* The 494px this used to hardcode was a RENDERED number: the source declares
   `.post_toc_blog .elementor-widget-container{max-height:calc(100vh - 456px)}` inside
   `@media(min-width:1025px)`, alongside min-height:250px and overflow:auto, over an
   Elementor base of overflow:hidden. 494 is only what that computes to in a 950px-tall
   viewport, and below 1025 the whole block is gone -- which is why a tablet TOC clamped
   at 494 while the source's ran to its full height. */
.bd__toc{background:#F2F4F5;border-radius:16px;padding:32px;overflow:hidden}
@media(min-width:1025px){.bd__toc{max-height:calc(100vh - 456px);min-height:250px;overflow:auto}}
.bd__toc h2{font-size:24px;line-height:30px;font-weight:500;color:var(--text);margin:0 0 24px}
.bd__toc__list{display:flex;flex-direction:column;gap:16px}
.bd__toc a{display:block;width:100%;padding:8px;border-radius:8px;color:var(--text);
  font-size:18px;line-height:29px;transition:background-color 400ms ease-in-out}
.bd__toc a:hover,.bd__toc a.is-on{background-color:#E5F5FA}
.bd__share{display:flex;flex-direction:column;gap:16px;width:320px;max-width:100%;padding:16px 0}
.bd__share h2{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0}
.bd__share__row{display:flex;align-items:center;gap:30px}
.bd__share__row a{display:flex;align-items:center;justify-content:center;
  width:28px;height:28px;color:var(--text)}
.bd__share__row a:hover{color:var(--cyan)}
.bd__subs{display:flex;flex-direction:column;gap:16px;background:#E5F5FA;border-radius:16px;padding:16px}
.bd__subs h2{font-size:20px;line-height:29px;font-weight:500;color:var(--text);margin:0}
.bd__subs__row{display:flex;align-items:center;gap:8px;background:#fff;border-radius:99px;padding:4px 4px 4px 16px}
.bd__subs__row input{flex:1 1 auto;min-width:0;border:0;background:none;font:inherit;
  font-size:16px;line-height:26px;color:var(--text);padding:6px 0}
.bd__subs__row input::placeholder{color:var(--meta)}
.bd__subs__row input:focus{outline:none}
.bd__subs__row button{flex:none;width:40px;height:40px;border:0;border-radius:99px;
  background:#0461C8;color:#fff;display:grid;place-items:center;cursor:pointer}
.bd__subs__note{font-size:16px;line-height:26px;color:var(--text);margin:16px 0 0}
.bd__subs__fine{font-size:12px;line-height:18px;color:var(--meta);margin:12px 0 0}
.bd__subs__fine a{color:var(--cyan)}

 /* this template's own rhythm: a 72px band whose inner is a 40px flex column with a
   5px-padded head. Scoped under .bd__recent so blog.html's .blogsec keeps its own. */
.bd__recent{padding:0}
.bd__recent .blogsec{display:flex;flex-direction:column;gap:40px;padding:72px 0}
.bd__recent .blogsec__head{display:flex;flex-direction:column;gap:4px;padding:5px 0}
.bd__recent .blogsec__h{margin:0}
.bd__recent .reslib__kicker{font-size:20px;line-height:29px;color:#667E8C;margin:0}
.bd__subsband{display:flex;flex-direction:column;gap:30px;padding:72px 0}
/* upstream's loop-item Read More is a plain cyan link, not an underlined navy one */
.bd__more{align-self:flex-start;color:var(--cyan);text-decoration:none;font-size:16px;line-height:26px}
.bd__recent .pcard__media img{border-radius:20px}
.bd__viewall a{background-color:rgba(255,255,255,0)}
.bd__viewall{text-align:center;margin:0}
@media(max-width:1024px){.bd__recent .pcard__media{border-radius:12px}}
/* View All stretches to the container once the grid goes single-column. */
@media(max-width:767px){.bd__viewall .btn-line{display:block;width:100%}}

.bd__toc__head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.bd__toc__toggle{display:none;flex:none;padding:0;border:0;background:none;color:var(--text);cursor:pointer}
.bd__toc__toggle svg{display:block;transition:transform 250ms ease-in-out}
.bd__toc.is-collapsed .bd__toc__toggle svg{transform:rotate(-180deg)}

@media(max-width:1024px){
  /* the source flips the column (column-reverse), so the sidebar leads; its items
     are full width and left-aligned, not centred as on desktop */
  .bd__side{display:flex;flex-direction:column;align-items:flex-start;gap:32px}
  .bd__toc,.bd__share{width:100%}
  .bd__hero__img{flex:0 0 auto}
  .bd__subs{display:none}
  .bd__toc{border-radius:12px;padding:20px}
  .bd__toc h2{font-size:20px;line-height:26px;margin:0}
  .bd__toc__toggle{display:flex}
  .bd__toc__list{margin-top:24px;gap:4px}   /* .post_toc .elementor-toc__list-wrapper{gap:4px} at <=1024 */
  .bd__toc.is-collapsed .bd__toc__list{display:none}
  .bd__share{padding:4px 0}
  .bd__top{padding-top:24px}
  .bd__crumb{margin-bottom:32px}
  .bd__h1{font-size:30px;line-height:38px}
  .bd__crumb,.bd__hero,.bd__layout{width:calc(100% - 2px);max-width:768px;margin-inline:auto}
  .bd__hero{flex-direction:column;gap:32px}
  .bd__meta{flex-direction:column;align-items:flex-start;gap:8px}
  .bd__meta__sub:not(:last-child)::after{margin:0 12px}
  .bd__hero__l{flex:1 1 auto;width:100%}
  .bd__hero__img{width:100%;height:auto}
  .bd__body{padding-top:32px}
  .bd__layout{flex-direction:column-reverse;align-items:flex-start;gap:24px}
  .bd__article,.bd__side{flex:1 1 auto;width:100%}
  .bd__side{position:static}
  .bd__article h2{font-size:24px;line-height:30px}
  .bd__article h3{font-size:22px;line-height:28px}
  .bd__article h4{font-size:20px;line-height:26px}
  .bd__tagsec{padding-top:20px}
  .bd__article .bd__tagsec h2{font-size:18px;line-height:29px}
  .bd__recent .blogsec{padding:52px 0}
  .bd__recent .reslib__kicker{font-size:18px}
  .bd__recent .blogsec__h{font-size:30px;line-height:38px}
  .bd__subsband{padding:0 0 52px}
  .bd__hero{align-items:flex-start}
  .bd__author .bd__author__name{font-size:18px;line-height:29px}
}
@media(max-width:767px){
  /* the author card wraps: picture on its own line, then the names */
  .bd__author{flex-wrap:wrap}
  .bd__author__pic{flex:1 0 auto;width:100%}
}

/* ============================================================================
   LOOMI CONNECT  (loomi-connect.html)
   A dark page: black body, white type, gradient-clipped kickers and numerals.
   Band paddings, container widths, type sizes and colours are all measured off
   the source page at 1440.
   ========================================================================= */
/* on the identity sheet, same ground as gamemantra-ai.html */
body.lc{background:var(--gm-shiva-indigo);color:#fff}
.lc__band{padding:0 15px}
.lc__wrap{max-width:1300px;margin-inline:auto}

/* 1px gradient ring, drawn as a masked ::before so the fill stays transparent.
   The source reuses this for icon circles, case numerals and the team pills. */
.lc__ring{position:relative;display:flex;align-items:center;justify-content:center;
  width:40px;height:40px;flex:none;border-radius:50%}
.lc__ring::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:linear-gradient(256deg,var(--gm-himalayan-blue) 19.75%,var(--gm-peacock-teal) 69.08%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}

/* the shared gradient used for kickers, the H1 emphasis and the stat numerals */
.lc__grad{background-image:linear-gradient(90deg,var(--gm-peacock-teal) 0%,var(--gm-himalayan-blue) 12.98%,var(--gm-kartikeya-gold) 41.35%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}

.lc__kicker{display:block;width:fit-content;font-size:16px;line-height:16px;font-weight:500;margin:0;
  text-transform:uppercase;letter-spacing:1.6px}
.lc__h2{font-size:60px;line-height:66px;font-weight:500;color:#fff;margin:0}
.lc__lead{font-size:20px;line-height:29px;color:#fff;margin:0;max-width:800px}
.lc__btn{display:inline-flex;align-items:center;justify-content:center;padding:13px 35px 11px;
  border-radius:50px;border:1px solid var(--gm-himalayan-blue-on-white);
  /* Himalayan Blue in its white-ink register: the sheet's #007BC4 is the value for a fill that
     carries white text (4.54:1); the #0EA5FF token itself is 2.6:1 under white */
  background:var(--gm-himalayan-blue-on-white);color:#fff;
  box-shadow:0 7px 20px rgba(0,123,196,.24),var(--gm-bevel);
  transition:border-color 300ms ease-in-out,box-shadow 220ms ease,filter 220ms ease;
  font-size:16px;line-height:24px;font-weight:500}
.lc__btn--wide{width:100%;padding-block:11px}
.lc__btn strong{font-weight:500}
.lc__btn:hover{background:var(--gm-himalayan-deep);border-color:var(--gm-himalayan-deep);
  filter:brightness(1.025);box-shadow:0 10px 26px rgba(0,71,253,.28),var(--gm-bevel)}
.lc__btn--ghost{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.35);
  box-shadow:none}
.lc__btn--ghost:hover{background:rgba(255,255,255,.1);filter:none;box-shadow:none}

/* hero */
.lc__hero{padding-top:80px}
.lc__hero__in{display:flex;flex-direction:column;align-items:center;text-align:center}
.lc__h1{font-size:62.4px;line-height:68.64px;font-weight:500;color:#fff;margin:45px 0 0;
  max-width:1040px;text-wrap:balance}
.lc__h1 strong{font-weight:500}
.lc__hero__lead{font-size:16px;line-height:26px;color:#fff;margin:34px 0 0;max-width:580px}
.lc__hero__in .lc__btn{margin-top:50px}

/* the two looping films, split by a hairline */
.lc__films{padding-top:120px}
.lc__films__in{position:relative;display:flex;flex-direction:column;align-items:center;gap:50px}
.lc__films__in::before{content:"";position:absolute;top:40%;left:50%;
  transform:translate(-50%,-50%);width:80%;aspect-ratio:1030/574;pointer-events:none;
  /* Peacock Teal and Himalayan Blue at 80%: an alpha of a token is written out, as the other
     sheet-swept blocks do */
  background:linear-gradient(325deg,rgba(0,194,168,.8) 21.33%,rgba(14,165,255,.8) 93.14%);
  filter:blur(255px)}
/* the films sit on a solid black card, so the glow reads as a halo around it */
.lc__films__card{position:relative;width:100%;display:flex;justify-content:space-around;
  align-items:stretch;gap:100px;padding:60px;border-radius:20px;background:var(--gm-indigo-deep)}
.lc__film{flex:1 1 0;min-width:0}
.lc__film video{display:block;width:100%;aspect-ratio:1;object-fit:cover}
.lc__films__rule{flex:0 0 1px;align-self:stretch;opacity:.2;
  background:linear-gradient(91deg,rgba(255,255,255,0) 0%,#fff 50%,rgba(255,255,255,0) 100%)}

/* stats */
.lc__stats{padding-top:120px}
.lc__stats__in{display:flex;gap:50px}
.lc__stat{flex:1 1 0;min-width:0;text-align:center}
.lc__stat__n{display:inline-block;font-size:80px;line-height:88px;font-weight:500;margin:0}
.lc__stat__t{font-size:18px;line-height:28.8px;color:#fff;margin:20px auto 0;max-width:400px}

/* the problem */
.lc__problem{padding-top:160px}
.lc__problem__in{display:flex;flex-direction:column;align-items:center;text-align:center}
.lc__problem__in .lc__h2{margin-top:36px;max-width:1089px}
.lc__problem__lead{font-size:16px;line-height:26px;color:#fff;margin:39px 0 0;max-width:772px}

/* without / with */
.lc__compare{padding-top:80px}
.lc__compare__labels{max-width:1140px;margin:0 auto 40px;display:flex;justify-content:center;gap:104px}
.lc__compare__labels .lc__col__h{flex:0 1 518px;min-width:0;background-color:transparent;border:0;
  font-family:inherit;padding:0}
.lc__compare__in{position:relative;max-width:1140px;margin-inline:auto;
  display:flex;justify-content:center;gap:104px}
.lc__compare__in::before{content:"";position:absolute;left:50%;top:0;width:1px;height:100%;
  pointer-events:none;opacity:.4;
  background:linear-gradient(0deg,rgba(255,255,255,0) 0%,#fff 50%,rgba(255,255,255,0) 100%)}
.lc__col{flex:0 1 518px;min-width:0}
.lc__col{position:relative;border-radius:24px;padding:48px;
  display:flex;flex-direction:column;gap:32px}
/* the "without" card is dashed; the "with" card carries a 2px gradient ring */
.lc__col--dotted{border:1px dashed #fff}
.lc__col--plain::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:2px;
  background:linear-gradient(256deg,var(--gm-himalayan-blue) 19.75%,var(--gm-peacock-teal) 69.08%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.lc__col__h{font-size:16px;line-height:16px;font-weight:500;color:#fff;margin:0;
  text-align:center;text-transform:uppercase;letter-spacing:1.6px}
.lc__col__h--with{background-image:linear-gradient(90deg,var(--gm-peacock-teal) 0%,var(--gm-himalayan-blue) 12.98%,var(--gm-kartikeya-gold) 41.35%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.lc__col__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:32px}
.lc__col__list li{display:flex;align-items:center;gap:16px}
.lc__col__list p{font-size:16px;line-height:24px;color:#fff;margin:0}
.lc__ico{flex:none;display:block;width:32px;height:32px}
.lc__ico svg{display:block}

/* why loomi connect */
.lc__why{padding-top:200px}
.lc__why .lc__h2{margin-top:24px;max-width:900px}
.lc__why .lc__lead{margin-top:40px}
.lc__grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:40px;margin-top:64px}
.lc__feat{display:flex;flex-direction:column;gap:20px}
.lc__feat__ico{color:#fff}
.lc__feat__ico svg{display:block;width:24px;height:24px}
.lc__feat__h{font-size:24px;line-height:26.4px;font-weight:500;color:#fff;margin:0}
.lc__feat__p{font-size:16px;line-height:26px;color:var(--gm-moon-silver);margin:0}

/* what your agents can do */
.lc__agents{padding-top:160px}
.lc__agents .lc__h2{margin-top:24px;max-width:900px}
.lc__agents .lc__lead{margin-top:40px}
.lc__agents__shot{display:block;width:896px;max-width:100%;height:auto;margin:84px auto 0;border-radius:20px}

/* numbered use cases */
.lc__cases{padding-top:80px}
.lc__cases .lc__grid3{grid-template-rows:repeat(2,1fr)}
.lc__grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:40px}
.lc__case{display:flex;flex-direction:column;gap:20px}
.lc__case__n{margin:0;font-size:18px;line-height:1;font-weight:500;color:#fff}
.lc__case__h{font-size:24px;line-height:26.4px;font-weight:500;color:#fff;margin:0;max-width:320px}
.lc__case__p{font-size:16px;line-height:26px;color:var(--gm-moon-silver);margin:0}

/* ecosystem */
.lc__eco{padding-top:140px}
.lc__eco .lc__h2{margin-top:24px;max-width:900px}
.lc__eco .lc__lead{margin-top:40px}
.lc__eco__map{position:relative;max-width:1240px;margin:30px auto 0;aspect-ratio:1230/650;
  --eco-rings:
    radial-gradient(ellipse 15.89% 30.08% at 50% 50%,transparent calc(100% - 1.2px),
      rgba(229,231,235,.17) calc(100% - 1.2px),rgba(229,231,235,.17) 100%,transparent 100%),
    radial-gradient(ellipse 25.97% 49.16% at 50% 50%,transparent calc(100% - 1.2px),
      rgba(229,231,235,.15) calc(100% - 1.2px),rgba(229,231,235,.15) 100%,transparent 100%),
    radial-gradient(ellipse 34.44% 65.19% at 50% 50%,transparent calc(100% - 1.2px),
      rgba(229,231,235,.13) calc(100% - 1.2px),rgba(229,231,235,.13) 100%,transparent 100%)}
/* The backdrop is DRAWN, not loaded. It used to be bg-lc-web.jpg from bloomreach.com -- three
   concentric rings and a teal/gold pool, authored on BLACK. Screen-blending it onto Shiva Indigo
   keeps its absolute values (measured: the pool adds 45.1 luminance on black and 47.3 here) but
   the rings are only +8 to +24, which reads as a line on black and as almost nothing on a ground
   of 31. Measured off the file and rebuilt in CSS: the rings are concentric at the box centre
   with radii 197 / 322 / 427 of a 1240x655 box -- 15.89/25.97/34.44% of the width, 30.08/49.16/
   65.19% of the height -- and the pool is a wide band centred at 60% down, teal on the left and
   gold on the right, peaking at x=62%. Alphas are set so the rings clear the indigo ground the
   way they cleared black. No remote asset, and it is correct at any size the map takes. */
.lc__eco__map::before{content:"";position:absolute;inset:0;pointer-events:none;
  mix-blend-mode:screen;
  background:var(--eco-rings),
    radial-gradient(ellipse 30% 38% at 40% 62%,rgba(0,194,168,.50) 0%,rgba(0,194,168,0) 74%),
    radial-gradient(ellipse 30% 38% at 63% 62%,rgba(246,176,36,.46) 0%,rgba(246,176,36,0) 74%)}
.lc__eco__label{position:absolute;top:10%;left:50%;transform:translateX(-50%);text-align:center}
/* the mark is the wordmark itself (2172x724, aspect 3.000). No aspect-ratio here: an <img> with
   height:auto takes its own, and declaring the old 248/123 box would stretch it -- the fault the
   request-demo logo had. Dead-centre on the rings, which are drawn at 50%/50% of the map. */
.lc__eco__mark{position:absolute;z-index:50;top:50%;left:50%;transform:translate(-50%,-50%);
  display:block;width:24%;height:auto}
.lc__node--cust{top:50%;transform:translateY(-55%);right:65%}
.lc__node--agcy{top:50%;transform:translateY(-55%);left:65%}
.lc__node--tech{top:70%;left:50%;transform:translateX(-50%)}
.lc__node{position:absolute;max-width:280px;border:1px solid rgba(255,255,255,.1);
  border-radius:40px;padding:30px;display:flex;flex-direction:column;align-items:center;
  text-align:center;gap:10px;
  background:linear-gradient(135deg,rgba(255,255,255,.08) 0%,rgba(255,255,255,.01) 100%)}
.lc__node img{position:absolute;top:0;left:50%;transform:translate(-50%,-50%);
  display:block;width:56px;height:56px;border-radius:50%}
.lc__node h4{font-size:20px;line-height:22px;font-weight:500;margin:10px 0 0}
/* Moon Silver held back to 72%: Stone itself is 3.4:1 on the indigo ground, too low for 13px */
.lc__node p{font-size:13px;line-height:19.5px;color:rgba(229,231,235,.72);margin:0}
.lc__node--cust h4{color:var(--gm-himalayan-blue)}
.lc__node--tech h4{color:var(--gm-kartikeya-gold)}
.lc__node--agcy h4{color:var(--gm-peacock-teal)}
.lc__tags{display:flex;flex-wrap:nowrap;justify-content:center;gap:5px}
.lc__tags span{flex:none;border:1px solid currentColor;border-radius:50px;padding:8px 12px 6px;
  font-size:11px;line-height:1;font-weight:500}
.lc__node--cust .lc__tags{color:var(--gm-himalayan-blue)}
.lc__node--agcy .lc__tags{color:var(--gm-peacock-teal)}

/* three builder columns */
.lc__teams{padding-top:100px}
.lc__teams .lc__grid3{margin-top:40px}
.lc__team{display:flex;flex-direction:column;gap:20px}
.lc__team__tag{position:relative;align-self:flex-start;display:inline-flex;align-items:center;
  margin:0;padding:1px 12px;border-radius:50px;
  font-size:11px;line-height:22px;font-weight:500;color:#fff;
  text-transform:uppercase;letter-spacing:1.1px}
.lc__team__tag::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:linear-gradient(256deg,var(--gm-himalayan-blue) 19.75%,var(--gm-peacock-teal) 69.08%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.lc__team__h{font-size:50px;line-height:55px;font-weight:500;color:#fff;margin:0}
.lc__team__p{font-size:16px;line-height:26px;color:var(--gm-moon-silver);margin:0}
.lc__team__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.lc__team__list li{margin-bottom:5px}
.lc__team__list li{position:relative;font-size:14px;line-height:20px;color:var(--gm-moon-silver);padding-left:40px}
.lc__team__list li::before{content:"";position:absolute;left:20px;top:8px;width:4px;height:4px;
  border-radius:50%;background:var(--gm-moon-silver)}

/* walkthrough cta */
.lc__walk{padding-top:120px}
.lc__walk__in{max-width:1200px;margin-inline:auto;display:flex;flex-wrap:wrap;
  align-items:center;gap:40px}
.lc__walk__copy{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.lc__walk__h{font-size:36px;line-height:39.6px;font-weight:500;color:#fff;margin:0}
.lc__walk__p{font-size:16px;line-height:26px;color:var(--gm-moon-silver);margin:0;max-width:440px}
.lc__walk__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.lc__walk__list li{display:flex;align-items:center;gap:16px}
.lc__walk__list p{font-size:16px;line-height:16px;color:#fff;margin:0}
.lc__walk__acts{display:flex;flex-wrap:nowrap;gap:10px}
.lc__walk__acts .lc__btn{flex:0 1 auto;min-width:0}
.lc__walk__img{flex:1 1 0;min-width:0;display:block;width:auto;max-width:100%;
  height:auto;border-radius:20px}

/* sign up form */
.lc__signup{padding-top:120px;padding-bottom:160px}
.lc__signup__in{max-width:600px;margin-inline:auto;text-align:center}
.lc__signup__h{font-size:78px;line-height:85.8px;font-weight:500;color:#fff;margin:0}
.lc__signup__p{font-size:16px;line-height:26px;color:#fff;margin:30px 0 0}
.lc__form{margin-top:40px;text-align:left;display:flex;flex-direction:column;gap:8px;
  padding:33px;border-radius:20px;background:rgba(255,255,255,.2);
  border:1px solid rgba(255,255,255,.25)}
.lc__form__row{display:flex;gap:10px}
.lc__form__row .lc__field{flex:1 1 0;min-width:0}
.lc__form__row .lc__field{flex:1 1 0;min-width:0}
.lc__field{display:block}
.lc__field input,.lc__field select{width:100%;height:48px;padding:10px 16px;border-radius:16px;
  border:1px solid var(--gm-moon-silver);background:#fff;color:var(--gm-earth);
  font:inherit;font-size:16px;line-height:26px}
.lc__field input::placeholder{color:var(--gm-stone);opacity:1}
.lc__field select{appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2399A9B3' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 16px center;background-size:16px;color:var(--gm-stone)}
.lc__field input:focus,.lc__field select:focus{outline:2px solid var(--gm-himalayan-blue);outline-offset:1px}
.lc__check{display:flex;align-items:center;gap:10px;margin-top:0;min-height:18px}
.lc__check input{flex:none;width:16px;height:16px;margin-top:1px}
.lc__check span{font-size:12px;line-height:14px;color:rgba(255,255,255,.8)}
.lc__consent{font-size:12px;line-height:14px;color:rgba(255,255,255,.8);margin:21px 0 0}
/* Kartikeya, not Himalayan: this link is 12px on the form's rgba(255,255,255,.2) panel over the
   indigo ground, where Himalayan measures 3.19:1 and the gold 4.51:1 */
.lc__consent a{color:var(--gm-kartikeya-gold);text-decoration:underline}
.lc__form .lc__btn{margin-top:10px}

/* faq -- the one white band on the page */
.lc__faq{background:#fff;color:var(--gm-earth);padding-top:100px;padding-bottom:141px}
.lc__faq__in{max-width:850px;margin-inline:auto}
.lc__faq__h{font-size:60px;line-height:66px;font-weight:500;color:var(--gm-shiva-indigo);margin:0 auto;
  max-width:600px;text-align:center}
/* reuses the shared .acc <details> accordion (one panel open at a time, no extra JS),
   reskinned for this page's white FAQ band */
.lc__acc{margin-top:60px;display:block}
.lc__faq__in .pp__faq__list{margin-top:60px}
.lc__acc .lc__acc__item{display:block;border-bottom:1px solid var(--gm-moon-silver);padding-bottom:0;margin-bottom:0}
.lc__acc .lc__acc__item summary{position:relative;display:block;padding:26px 90px 26px 0;
  cursor:pointer;list-style:none;font-size:20px;line-height:28px;font-weight:500}
.lc__acc .lc__acc__item summary::-webkit-details-marker{display:none}
.lc__acc__q{font-size:20px;line-height:28px;font-weight:500;color:var(--gm-shiva-indigo)}
.lc__acc .lc__acc__item summary svg{position:absolute;top:50%;right:0;
  transform:translateY(-50%);transition:transform 200ms ease-in-out}
.lc__acc .lc__acc__item[open] summary svg{transform:translateY(-50%) rotate(180deg)}
.lc__acc__a{padding:0 90px 26px 0}
.lc__acc__a p{font-size:16px;line-height:26px;color:var(--gm-earth);margin:0;max-width:760px}

@media(max-width:1024px){
  .lc__h2,.lc__faq__h{font-size:36px;line-height:39.6px}
  .lc__compare__in,.lc__compare__labels{max-width:100%;gap:10px}
  .lc__compare__labels{margin-bottom:24px}
  .lc__col,.lc__compare__labels .lc__col__h{flex:1 1 0;min-width:0}
  .lc__col{padding:25px 20px;gap:20px}
  .lc__col__list{gap:20px}
  .lc__signup__h{font-size:46.8px;line-height:51.48px}
  .lc__team__h{font-size:30px;line-height:33px}
  .lc__feat__h,.lc__case__h,.lc__node h4{font-size:18px;line-height:19.8px}
  .lc__walk__h{font-size:24px;line-height:26.4px}
  .lc__stat__n{font-size:60px;line-height:66px}
  .lc__stat__t{font-size:15px;line-height:24px;margin-top:10px}
  .lc__lead{font-size:18px}
  .lc__col__list p{font-size:14px;line-height:21px}
  .lc__films__card{flex-direction:column;gap:20px;max-width:500px}
  .lc__films__rule{flex:0 0 1px;width:100%;
    background:linear-gradient(1deg,rgba(255,255,255,0) 0%,#fff 50%,rgba(255,255,255,0) 100%)}
  .lc__faq{padding-top:80px;padding-bottom:60px}
  .lc__acc,.lc__faq__in .pp__faq__list{margin-top:30px}
}
/* Upstream stacks the ecosystem at 767, but its absolute layout overflows from 787
   down (the source itself scrolls 7px at 768). Stack 20px earlier so it never does. */
@media(max-width:787px){
  .lc__eco__map{aspect-ratio:auto;display:flex;flex-direction:column;align-items:center;
    gap:30px;padding:0;margin-top:70px;
    /* stacked, the map is a tall column: the same percentage ellipses draw ovals running down
       the page instead of circles round the nodes, so the rings come off and the glow stays */
    --eco-rings:none}
  .lc__eco__label{position:static;transform:none}
  /* 20% was tuned for the old 2:1 lockup; the wordmark at that width is 72px on a 360px column */
  .lc__eco__mark{position:static;transform:none;width:60%;align-self:center}
  .lc__node{position:relative;top:auto;left:auto;right:auto;transform:none;
    width:100%;max-width:280px;padding:20px;margin-top:20px}
}
@media(max-width:767px){
  .lc__h1{font-size:36px;line-height:39.6px}
  .lc__problem__in .lc__h2{margin-top:24px}
  .lc__problem__lead{margin-top:27px}
  .lc__h2,.lc__faq__h,.lc__signup__h{font-size:36px;line-height:45px}
  .lc__team__h{font-size:30px;line-height:38px}
  .lc__feat__h,.lc__case__h,.lc__node h4{font-size:18px;line-height:29px}
  .lc__walk__h{font-size:24px;line-height:30px}
  .lc__col__h{font-size:12px}
  .lc__walk__copy{flex:1 1 100%}
  .lc__walk__img{flex:0 1 auto;margin-inline:auto}
  .lc__walk__acts{flex-wrap:wrap}
  .lc__hero{padding-top:40px}
  .lc__films,.lc__stats{padding-top:60px}
  .lc__problem,.lc__why{padding-top:80px}
  .lc__stats__in{flex-direction:column;gap:40px}
  .lc__films__card{padding:0}
  /* the two labels become tab pills and only the selected card is shown */
  .lc__compare__labels{gap:8px;margin-bottom:24px}
  .lc__compare__labels .lc__col__h{position:relative;flex:0 1 auto;
    letter-spacing:0;text-transform:none;padding:12px 12px 10px;
    border-radius:100px;border:1px solid transparent;cursor:pointer;line-height:1;
    display:inline-block;height:36px}
  .lc__compare__labels .lc__col__h--with{padding:13px 14px 11px}
  .lc__compare__labels .lc__col__h.is-on{border-color:#fff}
  .lc__compare__labels .lc__col__h--with.is-on{border-color:transparent}
  .lc__col__h--with::before{content:"";position:absolute;inset:0;border-radius:inherit;
    padding:1px;opacity:0;background:linear-gradient(256deg,var(--gm-himalayan-blue) 19.75%,var(--gm-peacock-teal) 69.08%);
    -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
    mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
    -webkit-mask-composite:xor;mask-composite:exclude}
  .lc__compare__labels .lc__col__h.is-on::before{opacity:1}
  .lc__compare__in{flex-direction:column}
  .lc__compare__in::before{display:none}
  .lc__col{flex:1 1 auto;border-radius:16px;display:none}
  .lc__col .lc__ico,.lc__col .lc__ico svg{width:24px;height:32px}
  .lc__col__list{gap:0}
  .lc__col__list li{margin-bottom:10px}
  .lc__col.is-on{display:flex}
  .lc__grid4,.lc__grid3{grid-template-columns:1fr}
  .lc__tags{flex-wrap:wrap}
  .lc__film{width:100%;flex:0 0 auto}
  .lc__faq{padding-top:60px;padding-bottom:20px}
  .lc__acc__q{font-size:18px;line-height:25.2px}
  .lc__acc .lc__acc__item summary{padding:16px 50px 16px 0;font-size:18px;line-height:25.2px}
  .lc__acc__a{padding:0 0 16px}
}

/* the name pair stacks only on small phones, as upstream does */
@media(max-width:575px){
  .lc__form__row{flex-direction:column;gap:8px}
  .brheader__b-2col{flex-direction:column}
}


/* ============ REQUEST DEMO ============
   Measured off request-demo.html. A standalone landing page: upstream hides the
   site header and footer here, so this page carries only its own two columns. */
.rd{display:flex;flex-wrap:wrap;overflow:hidden;background:#fff;color:var(--gm-earth)}
.rd__col{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:30px;
  padding:60px 100px 120px}
.rd__col--l{width:51%;align-items:flex-end}
.rd__col--r{width:49%;background:var(--gm-shiva-indigo)}
.rd__in{position:relative;z-index:5;width:100%;max-width:640px;
  display:flex;flex-direction:column;align-items:flex-start;gap:40px}

/* the two blurred blobs behind the content. Both sit outside their column and are
   clipped by its overflow:hidden, which is what gives the soft edge-glow. */
.rd__col--l::before{content:"";position:absolute;z-index:1;top:50%;right:640px;
  width:600px;height:540px;border-radius:50%;background:var(--gm-himalayan-blue);
  filter:blur(80px);transform:translateY(-50%)}
.rd__col--r::before{content:"";position:absolute;z-index:1;bottom:0;left:300px;
  width:1400px;height:300px;border-radius:50%;
  background:linear-gradient(250deg,var(--gm-himalayan-blue) 28.92%,var(--gm-peacock-teal) 50.56%);
  filter:blur(250px);transform:translateY(50%)}

.rd__logolink{display:block}
.rd__logolink--w{display:none}
/* the mark is 2172x724, aspect 3.000 -- the old 184x40 box was 4.600 and stretched it 53%.
   It reads small at any honest height because the canvas is padded: the ink is 2111x474, only
   65.5% of the canvas height, so height:40px draws a 26px logo. Sized by WIDTH instead, with
   the height following the aspect, so the drawn mark is 267x60 (desktop) and 200x45 (narrow). */
.rd__logo{display:block;width:275px;height:auto}
.rd__logo--w{width:206px;height:auto}
.rd__grp{display:flex;flex-direction:column;gap:20px;width:100%}
.rd__grp--tight{gap:10px}
.rd__quote{font-size:46px;line-height:1.3;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.rd__by{font-size:16px;line-height:26px;color:var(--gm-earth);margin:0}
.rd__by strong{font-weight:500}
.rd__h3{font-size:36px;line-height:43px;font-weight:500;color:var(--gm-shiva-indigo);margin:0;text-wrap:balance}
.rd__p{font-size:16px;line-height:26px;color:var(--gm-earth);margin:0}
.rd__h5{font-size:24px;line-height:30px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.rd__list{margin:0;padding:0 0 0 40px;font-size:16px;line-height:26px;color:var(--gm-earth)}

/* ---- the form (upstream is a HubSpot embed; the styling below is its own) ---- */
.rd__formh{font-size:36px;line-height:43px;font-weight:500;color:#fff;margin:0}
.rd__form{width:100%;display:flex;flex-direction:column;align-items:stretch;gap:8px}
.rd__row{display:flex;gap:8px;width:100%}
.rd__f{position:relative;flex:1 1 0;min-width:0}
.rd__f--half{flex:0 1 calc(50% - 4px)}
.rd__f input,.rd__f textarea{display:block;width:100%;color:#fff;background:transparent;
  border:1px solid var(--gm-stone);border-radius:12px;padding:16px 16px 4px;
  font:inherit;font-size:16px;line-height:26px}
.rd__f textarea{height:74px;resize:vertical}
.rd__f input:hover,.rd__f input:focus,
.rd__f textarea:hover,.rd__f textarea:focus{border-color:var(--gm-himalayan-blue);outline:none}
/* the label rests inside the field and lifts on focus, as the embed's does */
.rd__f label{position:absolute;top:11px;left:17px;max-width:calc(100% - 32px);
  color:var(--gm-moon-silver);font-size:14px;line-height:26px;
  pointer-events:none;transform-origin:0 0;
  transition:transform 200ms ease-in-out,color 200ms ease-in-out}
/* a single-line field clips its label rather than letting it wrap out of the box */
.rd__f input ~ label{white-space:nowrap;overflow:hidden}
.rd__f input:focus ~ label,.rd__f input:not(:placeholder-shown) ~ label,
.rd__f textarea:focus ~ label,.rd__f textarea:not(:placeholder-shown) ~ label{
  color:var(--gm-himalayan-blue);transform:scale(.7) translateY(-10px)}

.rd__fieldset{border:0;margin:20px 0;padding:0;width:100%}
.rd__legend{display:block;font-size:16px;line-height:26px;font-weight:500;color:#fff;
  margin:0 0 16px;padding:0}
.rd__cbxs{display:flex;flex-wrap:wrap;gap:8px;width:100%}
.rd__cbx{display:flex;align-items:center;gap:8px;width:calc(50% - 4px);
  font-size:14px;line-height:20px;color:var(--gm-moon-silver);cursor:pointer}
.rd__cbx input{appearance:none;-webkit-appearance:none;position:relative;flex:none;
  width:22px;height:22px;border:1px solid #fff;background:transparent;cursor:pointer;margin:0;
  font-size:16px;line-height:24px}
.rd__cbx:hover input{border-color:var(--gm-himalayan-blue)}
.rd__cbx input:checked{border-color:var(--gm-himalayan-blue);background:var(--gm-himalayan-blue)}
.rd__cbx input:checked::after{content:"";position:absolute;left:7px;top:3px;
  width:5px;height:10px;border:solid var(--gm-shiva-indigo);border-width:0 2px 2px 0;transform:rotate(45deg)}

.rd__consent{margin:10px 0}
/* the consent line runs smaller than the interest checkboxes: 12/14, and its row
   is max(30px, text + 8) tall */
.rd__consent .rd__cbx{width:100%;min-height:30px;align-items:center;padding:4px 0;
  font-size:12px;line-height:14px}
.rd__legal{font-size:12px;line-height:14px;color:var(--gm-moon-silver);margin:0}
.rd__legal a{color:var(--gm-himalayan-blue);text-decoration:underline}
.rd__legal a:hover{text-decoration:none}
.rd__submit{align-self:center;margin:0 0 20px;background:var(--gm-himalayan-blue-on-white);color:#fff;
  border:0;border-radius:99px;padding:11px 32px;cursor:pointer;
  font:inherit;font-size:16px;line-height:26px;font-weight:500}
.rd__submit:hover{opacity:.8}

/* ---- customer carousel ---- */
.rdc{display:flex;flex-wrap:wrap;width:100%;border-radius:20px;overflow:hidden}
.rdc__view{width:100%;overflow:hidden;margin-bottom:20px}
.rdc__rail{display:flex;width:100%;transition:transform 500ms ease-in-out;will-change:transform}
.rdc__slide{position:relative;flex:0 0 100%;min-width:0;aspect-ratio:656/337;
  display:flex;flex-direction:column;justify-content:flex-end;align-items:stretch;padding:18px}
/* min-width:0 matters: a slide whose 34px figures cannot wrap has a min-content
   width wider than the rail, and with flex-shrink:0 it would keep that width and
   set a taller aspect-ratio height for every stretched sibling. */
.rdc__bg{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%}
.rdc__bg img{display:block;width:100%;height:100%;object-fit:cover;border-radius:24px}
/* the slide kicker: these slides carry market context rather than a customer result, so they
   say so above the numbers. Optional — a slide without a `label` renders exactly as before. */
.rdc__label{position:relative;z-index:5;margin:0 0 14px;font-size:12px;font-weight:600;
  line-height:1;letter-spacing:.12em;text-transform:uppercase;color:var(--gm-kartikeya-gold)}
.rdc__stats{position:relative;z-index:5;width:100%;display:flex;gap:10px}
.rdc__stat{flex:auto;text-align:center;background:var(--gm-himalayan-blue-on-white);color:#fff;
  border-radius:10px;padding:15px 20px 20px;opacity:0;transform:translateY(20px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.rdc__stat:nth-child(1){transition-delay:300ms}
.rdc__stat:nth-child(2){transition-delay:450ms}
.rdc__stat:nth-child(3){transition-delay:600ms}
.rdc__slide.is-on .rdc__stat{opacity:1;transform:translateY(0)}
.rdc__stat__n{font-size:34px;line-height:1.3;font-weight:500}
.rdc__stat__d{font-size:12px;line-height:1.2;font-weight:500}
.rdc__pagi{display:flex;align-items:center;color:#fff;font-size:16px;line-height:26px}
.rdc__dots{display:flex;margin-right:10px}
.rdc__dot{position:relative;width:20px;height:20px;border:0;border-radius:50%;
  background:none;padding:0;cursor:pointer}
.rdc__dot::before{content:"";position:absolute;top:50%;left:50%;width:10px;height:10px;
  border-radius:50%;background:#fff;transform-origin:0 0;
  transform:scale(.4) translate(-50%,-50%);transition:transform 300ms ease-in-out}
.rdc__dot.is-on::before,.rdc__dot:hover::before{transform:scale(1) translate(-50%,-50%)}
.rdc__arrows{display:flex;justify-content:flex-end;gap:16px;margin-left:auto}
.rdc__btn{display:flex;align-items:center;justify-content:center;width:48px;height:48px;
  border:0;border-radius:50%;background:#0461C8;color:#fff;padding:0;cursor:pointer}
.rdc__btn svg{width:24px;transform:scale(.8);transition:transform 200ms ease-in-out}
.rdc__btn:hover svg{transform:scale(1)}

@media(min-width:1801px){
  .rd__col--l{padding:70px 120px 120px 80px}
  .rd__col--r{padding:70px 80px 120px 120px}}
@media(min-width:1681px){.rd__quote{font-size:60px;line-height:72px}}
@media(max-width:1400px){.rd__col{padding:60px 60px 120px}}
@media(max-width:1200px){
  .rd__col{width:100%;padding:40px 30px;align-items:center}
  .rd__col--l{order:10}
  .rd__col--r{order:5}
  .rd__logolink{display:none}
  .rd__logolink--w{display:block}}
@media(max-width:1024px){
  .rd__quote{font-size:36px;line-height:45px}
  .rd__h3,.rd__formh{font-size:24px;line-height:30px}
  .rd__h5{font-size:20px;line-height:26px}
  /* the form goes single-column and drops to 14/20, so every field is 42px tall */
  .rd__row{flex-wrap:wrap}
  .rd__f,.rd__f--half{flex:1 1 100%}
  .rd__f input,.rd__f textarea{font-size:14px;line-height:20px}
  .rd__f textarea{height:62px}
  .rd__f label{top:12px;line-height:20px}
  .rd__submit{align-self:stretch;width:100%}}
/* Below 800 the yellow blob is anchored to the left edge instead of measured in
   from the right: at 390 the right:640px offset put it at left:-850px, entirely
   outside the column, and overflow:hidden clipped the glow away completely. */
@media(max-width:800px){
  .rd__col--l::before{right:auto;left:0;transform:translate(-80%,-50%)}}
@media(max-width:768px){
  .rd__col{padding:40px 20px}
  .rd__in{gap:20px}
  .rdc__btn{width:40px;height:40px}}
@media(max-width:767px){
  .rd__grp{gap:10px}
  .rdc__slide{padding:10px}}
@media(max-width:600px){.rd__cbxs{gap:16px}.rd__cbx{width:100%}}
@media(max-width:580px){
  /* image above the stats, as upstream renders it. Upstream writes the stats first
     in the DOM and reverses; this markup is already in reading order. */
  .rdc__slide{flex-direction:column;gap:10px;padding:0;aspect-ratio:auto}
  .rdc__bg{position:static;aspect-ratio:656/337;height:auto}
  .rdc__bg img{height:auto;aspect-ratio:656/337}
  .rdc__stats{flex-direction:column}
  .rdc__stat{padding:10px 16px 8px;display:flex;align-items:center}
  .rdc__stat__n{min-width:120px;text-align:left;margin-right:16px}
  .rdc__stat__d{text-align:left}}
@media(max-width:420px){.rdc__dot{width:18px}}


/* ============ ROADMAP & PRODUCT UPDATES ============
   Measured off "Roadmap & Product Updates.html" and its post-90024.css. */
.rm__hero{position:relative;overflow:hidden;background:#000;padding:0 120px}
.rm__hero::before,.rm__hero::after{content:"";position:absolute;z-index:1;pointer-events:none;opacity:.6}
/* the two blurred washes: green/blue low-left, yellow bleeding in from the top right.
   Both are anchored to the left edge so they hold their place at every width. */
.rm__hero::before{width:1280px;height:680px;left:0;top:auto;bottom:0;
  background:linear-gradient(285deg,#01CE7F 47.21%,#019ACE 79.18%);filter:blur(150px);
  transform:rotate(-169.788deg) translate(50%,-80%)}
.rm__hero::after{width:1280px;height:730px;left:100%;top:0;bottom:auto;
  background:#0179F8;filter:blur(210px);
  transform:rotate(-169.788deg) translate(30%,50%)}
@media(max-width:1024px){.rm__hero::before,.rm__hero::after{opacity:.3}}
.rm__hero__in{position:relative;max-width:1720px;margin-inline:auto;
  display:flex;flex-direction:column;gap:140px;padding:100px 0}
/* the lead sits on the h1's baseline block, not at the top of the row */
.rm__hero__top{display:flex;flex-wrap:nowrap;gap:100px;align-items:flex-end}
.rm__hero__l{flex:1 1 0;display:flex;flex-direction:column;align-items:flex-start;gap:30px}
.rm__kicker{width:fit-content;font-size:16px;line-height:25.6px;letter-spacing:5px;text-transform:uppercase;
  font-weight:400;margin:0;
  background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.rm__h1{font-size:60px;line-height:72px;font-weight:500;color:#fff;margin:0}
.rm__lead{flex:1 1 0;min-width:0;max-width:420px;font-size:16px;line-height:26px;color:#fff;margin:0}
.rm__stats{display:flex;flex-wrap:nowrap;align-items:flex-start;gap:30px}
.rm__stat{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.rm__stat__h{font-size:36px;line-height:43px;font-weight:500;color:#fff;margin:0 0 5px}
.rm__stat__p{font-size:16px;line-height:26px;color:rgba(255,255,255,.92);margin:0}
.rm__stat__date{font-size:16px;line-height:26px;color:rgba(255,255,255,.57);margin:0}
.rm__stat__link{font-size:16px;line-height:26px;color:var(--cyan);text-decoration:underline}
.rm__stat__link:hover{text-decoration:none}

/* ---- tab bar ---- */
.rm__tabs{max-width:1960px;margin-inline:auto;padding:80px 120px 60px;display:flex;align-items:center;
  justify-content:space-between;gap:30px;flex-wrap:wrap}
.updttgl{display:flex;align-items:center;justify-content:flex-start;gap:6px;padding:6px;
  background:#0461C8;border-radius:200px}
.updttgl-tab{cursor:pointer;width:270px;height:54px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:18px;font-weight:500;background:transparent;border:0;border-radius:200px;
  padding:2px 0 0;font-family:inherit;text-align:start;
  transition:background 200ms ease-in-out,box-shadow 200ms ease-in-out}
.updttgl-tab:hover{color:#050505;background:rgba(255,255,255,.6)}
.updttgl-tab.active{cursor:default;color:#050505;background:#fff;box-shadow:0 2px 4px 0 rgba(4,97,200,.8)}
@media(max-width:1024px){.updttgl-tab{width:160px;height:44px;font-size:16px}}
@media(max-width:560px){.updttgl-tab{width:130px;height:38px;font-size:15px}}

.rm__body{max-width:1960px;margin-inline:auto;padding:0 120px}
.rm__panel{display:flex;flex-direction:column;gap:30px}
.rm__head{display:flex;flex-direction:column;gap:20px}
.rm__h2{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0 0 10px}
.rm__sub{font-size:16px;line-height:26px;color:var(--text);margin:0}
.rm__sub--lead{font-size:20px;line-height:29px}
.rm__sub a{color:var(--cyan);text-decoration:underline}
.rm__panel[hidden]{display:none}

/* ---- just launched: filters + timeline ---- */
.updates-list--just-launched{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}
@media(max-width:1199px){.updates-list--just-launched{flex-direction:column;gap:5px;margin-bottom:60px}}
.updates-list__categories-mobile{display:none;width:100%;align-items:center;justify-content:center}
@media(max-width:1199px){.updates-list__categories-mobile{display:flex}}
.updates-list__categories-mobile-cta{width:100%;max-width:400px;margin:0 auto;color:#000;
  text-align:center;padding:12px 50px 10px;border:1px solid #000;border-radius:500px;cursor:pointer;
  background:none;font:inherit;font-size:16px;font-weight:500}
.updates-list__categories-mobile-cta:hover{background:#eee}
ul.updates-list__categories{width:320px;display:flex;flex-direction:column;align-items:flex-start;
  justify-content:flex-start;gap:10px;padding:32px;flex-shrink:0;border-radius:20px;
  border:1px solid #CCD4D9;list-style:none;margin:0 0 60px}
@media(max-width:1199px){
  ul.updates-list__categories{position:fixed;z-index:100;top:var(--hdr-nav);left:0;width:100%;
    height:calc(100% - var(--hdr-nav));border-radius:0;border:none;background:#fff;
    transform:translateX(100%);transition:transform 300ms ease-in-out}
  ul.updates-list__categories.opened{transform:translateX(0)}}
ul.updates-list__categories li{position:relative;color:#0D273F;font-size:16px;line-height:1.6;padding-left:24px}
ul.updates-list__categories li label{cursor:pointer;display:block}
ul.updates-list__categories li span{display:inline-block;transition:transform 200ms ease-out}
ul.updates-list__categories li:hover span{transform:translateX(5px)}
ul.updates-list__categories li.updates-list__categories-item--show-all{margin-bottom:10px}
ul.updates-list__categories li.updates-list__categories-item--show-all::after{content:"";position:absolute;
  left:0;bottom:-11px;display:block;width:100%;height:1px;background:#eee}
ul.updates-list__categories li input[type="checkbox"]{position:absolute;top:5px;left:0;appearance:none;
  -webkit-appearance:none;width:15px;height:15px;border:1px solid #949fa9;border-radius:3px;margin:0}
ul.updates-list__categories li input[type="checkbox"]::after{content:"";position:absolute;top:2px;left:2px;
  width:9px;height:9px;border-radius:2px;background:var(--cyan);transform:scale(0);
  transition:transform 200ms ease-in-out}
ul.updates-list__categories li input[type="checkbox"]:checked::after{transform:scale(1)}
ul.updates-list__categories li.mobile-show-results{display:none;position:absolute;left:0;bottom:0;
  align-items:center;justify-content:center;width:calc(100% - 30px);height:100px;padding:0;margin:0 15px}
ul.updates-list__categories li.mobile-show-results .br-cta{width:100%;max-width:400px}
@media(max-width:1199px){
  ul.updates-list__categories li.mobile-show-results{display:flex}}

.updates-list__items{width:calc(100% - 340px)}
@media(max-width:1199px){.updates-list__items{width:100%}}
.updates-list__item.hide{display:none}
@media(max-width:1024px){.updates-list__item{max-width:600px;margin:0 auto}}
@media(max-width:1199px){.updates-list__item-date{display:flex;align-items:center;justify-content:center;
  padding-top:20px;border-top:1px solid #000;margin:20px 0}}
.updates-list__item-date span{position:relative;display:block;color:#000;font-size:16px;font-weight:500;
  line-height:1.4;letter-spacing:1.6px;text-transform:uppercase;padding-left:34px}
.updates-list__item-date span::before{content:"";position:absolute;top:calc(50% - 1px);
  transform:translateY(-50%);left:0;width:19px;height:auto;aspect-ratio:1/1;border-radius:50%;background:#0461C8}
.updates-list__item-link{position:relative;display:flex;align-items:center;justify-content:space-between;
  gap:40px;padding:28px;margin:18px 0 32px 40px;border-radius:30px;border:1px solid #CCD4D9;
  transition:box-shadow 200ms ease-in-out}
.updates-list__item-link:hover{box-shadow:0 10px 30px 0 rgba(0,0,0,.1)}
@media(max-width:1600px){.updates-list__item-link{gap:20px;padding:24px}}
@media(max-width:1199px){.updates-list__item-link{margin:0}}
@media(max-width:1024px){.updates-list__item-link{flex-direction:column}}
@media(min-width:1200px){.updates-list__item-link::before{position:absolute;content:"";top:0;left:-31px;
  width:1px;height:100%;background:#000}}
.updates-list__item-link.featured{background:#000;border:1px solid #000}
.updates-list__item-featured-image{width:48%;flex-shrink:0}
@media(max-width:1024px){.updates-list__item-featured-image{width:100%}}
.updates-list__item-featured-image img{display:block;width:100%;height:auto;aspect-ratio:560/400;
  object-fit:cover;border-radius:10px}
.updates-list__item-content{width:100%;display:flex;flex-direction:column;align-items:flex-start;
  justify-content:space-between;gap:12px;padding:0;color:#858585;font-size:16px;line-height:1.6}
@media(max-width:1800px){.updates-list__item-content{font-size:14px;line-height:1.4}}
@media(min-width:1025px){.updates-list__item-content-pad{gap:30px;padding:18px 0}}
.updates-list__item-link.featured .updates-list__item-content{color:#BFBFBF}
/* The two source pages ship different base rules for this row: the roadmap's carries
   margin-bottom:6px, the detail page's carries none and lets each context set its own.
   The latter is the honest base -- the spacing belongs to the context, not the class. */
.updates-list__item-labels{position:relative;width:100%;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:flex-start;gap:10px}
.updates-list .updates-list__item-labels{margin-bottom:6px}
.updates-list__item-label{color:#fff;font-size:13px;font-weight:500;line-height:1.2;
  padding:4px 10px 1px 11px;background:#0461C8;border-radius:50px;white-space:nowrap}
.updates-list__item-label.gradient-border{position:relative;color:#050505;background:transparent}
.updates-list__item-label.gradient-border::before{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,#0461C8 -20%,#019ACE 100%);border-radius:inherit;padding:1px;
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.updates-list__item-link.featured .updates-list__item-label.gradient-border{color:#fff}
.updates-list__item-greytext{color:#B7B7B7;font-size:13px;line-height:1.2;padding-top:2px;white-space:nowrap}
.updates-list__item-perma{position:absolute;top:10px;right:20px;color:var(--cyan);font-size:14px}
.updates-list__item-perma:hover{text-decoration:underline}
@media(max-width:1024px){.updates-list__item-perma{display:none}}
.updates-list__item-perma svg{position:relative;top:2px;width:14px;height:14px}
.updates-list__item-title{color:#000;font-size:20px;font-weight:500;line-height:1.3;text-decoration:none}
.updates-list__item-title:hover{text-decoration:underline}
.updates-list__item-link.featured .updates-list__item-title{color:#fff}
.updates-list__item-title-large{font-size:40px;line-height:1.2}
@media(max-width:1800px){.updates-list__item-title-large{font-size:32px}}
@media(max-width:1199px){.updates-list__item-title-large{font-size:26px}}
.updates-list__item-content-full p{margin:0 0 10px}
.updates-list__item-content-full a{color:var(--cyan);text-decoration:underline}
.updates-list__item-content-full a:hover{text-decoration:none}
.updates-list__empty{padding:40px 0;color:#858585;font-size:16px}

/* ---- coming soon: three roadmap columns ---- */
.updates-list--coming-soon{display:flex;align-items:flex-start;justify-content:space-between;gap:40px}
@media(max-width:1800px){.updates-list--coming-soon{gap:20px}}
@media(max-width:1199px){.updates-list--coming-soon{flex-direction:column}}
.updates-list__column{display:flex;flex-direction:column;align-items:flex-start;gap:30px;flex:1 0 0;
  border-radius:20px;border:1px solid #CCD4D9;background:#fff;box-shadow:0 4px 44px 0 rgba(0,0,0,.05);
  padding:30px 32px 14px}
@media(max-width:1800px){.updates-list__column{padding:20px 20px 10px}}
@media(max-width:1199px){.updates-list__column{width:100%}}
.updates-list__column-label{font-size:14px;font-weight:500;line-height:1.85;letter-spacing:2.1px;
  margin:0 0 10px;text-transform:uppercase}
.updates-list__column--now .updates-list__column-label{color:#00C75A}
.updates-list__column--coming-soon .updates-list__column-label{color:var(--cyan)}
.updates-list__column--exploring .updates-list__column-label{color:#C9C9C9}
.updates-list__column-title{font-size:36px;line-height:43px;font-weight:500;margin:0}
.updates-list__column-desc{color:#000;font-size:16px;line-height:1.6;margin:10px 0 0}
.updates-list__column-items{width:100%}
.updates-list__column__item{position:relative;width:100%;display:flex;flex-direction:column;
  padding-bottom:16px;border-bottom:1px solid #E8E8E8;margin-bottom:16px;
  transition:transform 140ms ease-in-out}
.updates-list__column__item:last-child{border-bottom:none;margin-bottom:5px}
.updates-list__column__item::before{content:"";position:absolute;z-index:1;top:-15px;left:-15px;
  width:calc(100% + 30px);height:calc(100% + 14px);border-radius:5px;background:#f9f9f9;
  transform:scale(0);transition:transform 200ms ease-in-out}
.updates-list__column__item:hover::before{transform:scale(1)}
.updates-list__column__item.hide{display:none}
.updates-list__column__header{position:relative;z-index:10;width:100%;display:flex;align-items:flex-start}
h3.updates-list__column__title{padding-right:100px;color:#000;font-size:16px;font-weight:500;
  line-height:1.2;margin:0}
.updates-list__column__field--right-label{position:absolute;top:0;right:0;color:#000;font-size:10px;
  font-weight:500;line-height:1.2;border:1px solid #000;padding:4px 10px 2px;border-radius:50px;
  white-space:nowrap}
.updates-list__column__description{position:relative;z-index:10;color:#858585;font-size:12px;
  line-height:1.4;margin-top:8px}
.updates-list__column__labels{position:relative;z-index:10;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:flex-start;gap:10px;margin-top:10px}
.updates-list__column__labels .updates-list__item-label{font-size:10px;padding:4px 10px 2px}
.updates-list__column-show-more{width:100%;text-align:center}
.updates-list__column-show-more a{position:relative;top:-16px;margin-top:-10px;color:var(--cyan);
  text-decoration:underline;padding:5px}
.updates-list__column-show-more a:hover{text-decoration:none}

/* ---- roadmap disclaimer + labs grid ---- */
.rm__note{border:1px solid #CCD4D9;border-radius:20px;padding:32px;margin-top:60px;text-align:center;
  font-size:16px;line-height:26px;color:var(--text)}
.rm__note a{color:var(--cyan);text-decoration:underline}
.rm__note a:hover{text-decoration:none}
.rm__labs__h{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:80px 0 40px}
.updates-labs{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
@media(max-width:1400px){.updates-labs{gap:16px}}
@media(max-width:1199px){.updates-labs{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.updates-labs{grid-template-columns:repeat(1,1fr)}}
.updates-labs-item{color:var(--cyan);text-decoration:none;
  display:flex;flex-direction:column;align-items:flex-start;gap:20px;border-radius:32px;
  border:1px solid #CCD4D9;background:#fff;padding:24px;transition:box-shadow 200ms ease-in-out}
@media(max-width:1400px){.updates-labs-item{border-radius:20px;padding:16px;gap:16px}}
.updates-labs-item:hover{box-shadow:0 10px 30px 0 rgba(0,0,0,.2)}
.updates-labs-item.hide{display:none}
.updates-labs-img{width:100%;height:auto}
.updates-labs-img img{display:block;width:100%;height:auto;aspect-ratio:350/260;object-fit:cover;
  border-radius:10px}
.updates-labs-body{display:flex;flex-direction:column;align-items:flex-start;gap:12px;height:100%}
.updates-labs-meta{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:6px}
.updates-labs-label{display:flex;align-items:center;justify-content:flex-start;color:#fff;font-size:13px;
  font-weight:500;line-height:1.2;padding:4px 10px 2px;background:#0461C8;border-radius:100px;
  white-space:nowrap}
@media(max-width:1400px){.updates-labs-label{font-size:12px}}
img.updates-labs-label-icon{width:14px;height:auto;max-width:16px;max-height:16px;
  border-radius:0;margin-right:5px}
.updates-labs-grey{color:#858585;font-size:14px;line-height:1.4;white-space:nowrap}
@media(max-width:1400px){.updates-labs-grey{font-size:12px}}
.updates-labs-title{color:#000;font-size:26px;line-height:1.2;font-weight:500;margin:0}
.updates-labs-content{color:#858585;font-size:15px;line-height:1.7;margin:0}
/* the labs card steps its type down for everything below the widest desktop */
@media(max-width:1800px){
  .updates-labs-title{font-size:22px}
  .updates-labs-content{font-size:14px}}
.updates-labs-link{color:var(--cyan);font-size:16px;line-height:1.4;text-decoration:underline;margin-top:auto}
.updates-labs-link:hover{text-decoration:none}
.updates-labs-load-more{width:100%;display:flex;align-items:center;justify-content:center;margin-top:40px}

/* ---- newsletter band ---- */
.rm__news{position:relative;overflow:hidden;background:#000;padding:0 120px}
.rm__news::before{content:"";position:absolute;pointer-events:none;opacity:.6;
  display:block;width:1320px;height:1060px;
  top:0;left:0;background:linear-gradient(295deg,#01CE7F 42.88%,#019ACE 75.44%);
  filter:blur(210px);transform:translate(-30%,-50%)}
.rm__news__card{position:relative;z-index:1;max-width:1720px;margin:100px auto 160px;background:#0461C8;
  border-radius:40px;padding:100px;
  display:flex;flex-direction:column;align-items:center;gap:40px}
.rm__news__txt{width:100%;max-width:1100px;display:flex;flex-direction:column;align-items:center;gap:30px}
.rm__news__kicker{font-size:20px;line-height:29px;font-weight:500;color:#fff;margin:0;text-align:center}
.rm__news__h{font-size:60px;line-height:72px;font-weight:500;color:#fff;margin:0;text-align:center}
.rm__news__p{font-size:18px;line-height:29px;color:#fff;margin:0;text-align:center;text-wrap:balance}
.rm__news__form{width:100%;max-width:500px;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:8px}
.rm__news__f{position:relative;width:100%}
.rm__news__f label{position:absolute;left:16px;right:16px;top:50%;transform:translateY(-50%);
  text-align:center;font-size:16px;line-height:26px;color:#99A9B3;pointer-events:none}
.rm__news__f input:focus + label,
.rm__news__f input:not(:placeholder-shown) + label{display:none}
.rm__news__form input{width:100%;height:48px;border:1px solid #CCD4D9;
  border-radius:100px;background:#fff;
  padding:10px 16px;font:inherit;font-size:16px;color:var(--text)}
.rm__news__form button{border:0;border-radius:99px;background:var(--cyan);color:#fff;margin-bottom:10px;
  padding:14px 32px 12px;font:inherit;font-size:18px;line-height:26px;font-weight:500;cursor:pointer}
.rm__news__form button:hover{background:var(--cyan-hover,#0086b6)}
.rm__news__fine{font-size:11px;line-height:1.4;color:#fff;opacity:.75;margin:0}
.rm__news__recap{font-size:10px;line-height:1.2;color:rgba(255,255,255,.75);margin:0}
.rm__news__recap a{color:inherit}

@media(min-width:1600px){
  .rm__h1{font-size:90px;line-height:99px}
  .rm__news__h{font-size:79.8px;line-height:95.76px}}
@media(max-width:1400px){
  .rm__hero,.rm__news{padding:0 40px}
  .rm__tabs{padding:80px 40px 60px}
  .rm__body{padding:0 40px}}
@media(max-width:1200px){
  .rm__hero,.rm__news{padding:0 15px}
  .rm__tabs{padding:80px 15px 60px}
  .rm__body{padding:0 15px}}
@media(max-width:1024px){
  .rm__hero__in{gap:80px;padding:60px 0}
  .rm__h1,.rm__news__h{font-size:36px;line-height:45px}
  .rm__h2,.rm__labs__h{font-size:30px;line-height:38px}
  .rm__sub--lead,.rm__news__kicker{font-size:18px;line-height:29px}
  .rm__stat__h,.updates-list__column-title{font-size:24px;line-height:30px}
  .rm__hero__top{gap:60px}
  .rm__news__form input{font-size:14px;line-height:20px;padding:14px 16px;height:50px}
  .rm__news__f label{font-size:14px;line-height:20px}
  .rm__news__form button{width:100%}}
@media(max-width:767px){
  /* the tab bar stacks and the Subscribe button leads */
  .rm__hero__in{gap:40px;padding:40px 0 50px}
  .rm__hero__top{flex-wrap:wrap;gap:20px}
  .rm__hero__l{flex:1 1 100%;gap:20px}
  .rm__stats{flex-wrap:wrap}
  .rm__stat{flex:1 1 100%}
  .rm__tabs{flex-direction:column;justify-content:center;gap:40px;padding:40px 15px}
  .rm__tabs > div:last-child{order:-1}
  .rm__news__card{padding:40px 20px;margin:60px auto}
  .rm__note{padding:20px}}
@media(max-width:575px){
  .rm__kicker{font-size:14px;line-height:22.4px;letter-spacing:3px}}

/* ============ PRODUCT UPDATE DETAIL ============
   The single-release page. Reuses the roadmap's pill (.updates-list__item-label)
   and newsletter (.rm__news) components; only the article and the Recent Releases
   grid are new. */
.pu__back{display:flex;flex-direction:column;max-width:100%;padding:0 120px}
.pu__back__in{display:flex;flex-direction:column;gap:40px;width:100%;max-width:1720px;margin-inline:auto;padding:60px 0 0}
.pu__back p{font-size:14px;line-height:20px;margin:0}
.pu__back a{color:var(--cyan);text-decoration:underline}
.pu__back a:hover{text-decoration:none}

/* the article keeps its own 15px gutter at every width -- it is not a .brcontainer */
.pu{display:flex;flex-direction:column;max-width:100%;padding:0 15px}
.pu__in{width:100%;max-width:min(100%,1110px);margin-inline:auto;padding:40px 0 0;
  display:flex;flex-direction:column;gap:30px}
.pu__col{width:100%;max-width:860px;margin-inline:auto;
  display:flex;flex-direction:column;gap:30px}
.pu__daterow{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:30px}
.pu__date{font-size:12px;line-height:1.4;font-weight:500;color:#8F8F8F;
  letter-spacing:1.2px;text-transform:uppercase}
.pu__h1{font-size:50px;line-height:60px;font-weight:500;color:#000;text-align:center;margin:0}
.pu__body{max-width:100%;color:#000;font-size:16px;line-height:26px}
.pu__body p{margin:0 0 20px}
.pu__body ul{margin:0;padding:0 0 0 40px;list-style:disc}
.pu__body a{color:var(--cyan);text-decoration:underline}
.pu__body a:hover{text-decoration:none}

.pu__recent{display:flex;flex-direction:column;max-width:100%;padding:0 120px}
.pu__recent__in{width:100%;max-width:1720px;margin-inline:auto;padding:120px 0 90px;
  display:flex;flex-direction:column;gap:40px}
.pu__recent__h{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}

.updates-recent__items{display:grid;grid-template-columns:repeat(4,1fr);gap:30px}
.updates-recent__item{display:flex;flex-direction:column;align-items:flex-start;gap:10px;
  padding:24px;border-radius:32px;border:1px solid #CCD4D9;background:#fff;
  color:var(--cyan);text-decoration:none;transition:box-shadow 200ms ease-in-out}
.updates-recent__item:hover{box-shadow:0 10px 30px 0 rgba(0,0,0,.2)}
.updates-recent .updates-list__item-labels{margin-bottom:10px}
.updates-list__item-greytext{color:#B7B7B7;font-size:13px;line-height:1.2;
  padding-top:2px;margin-left:auto}
.updates-recent__item-title{color:#000;font-size:26px;line-height:1.2;font-weight:500;margin:0}

@media(max-width:1400px){.pu__back,.pu__recent{padding:0 40px}}
@media(max-width:1200px){.pu__back,.pu__recent{padding:0 15px}}
@media(max-width:1024px){
  .pu__h1,.pu__recent__h{font-size:30px;line-height:38px}
  /* Elementor steps the content-width cap per breakpoint; it never binds here, but
     matching it keeps the declaration honest. */
  .pu__in{max-width:min(100%,1024px)}}
@media(max-width:767px){.pu__in{max-width:min(100%,767px)}}
/* Upstream leaves this grid at repeat(4,1fr) with no responsive step, so the cards'
   min-content floor (~809px) pushes the page 504px wide at 320. Stepped down here;
   4 columns still hold wherever they fit, which is every width the source renders
   without overflow. */
@media(max-width:860px){.updates-recent__items{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.updates-recent__items{grid-template-columns:1fr}}

/* ============ MARKETING AUTOMATION ============
   Sections are numbered as in SESSION_NOTES. Shared shell: .brcontainer's 120/40/15
   gutter with a 1720px inner cap, matching every other page. */
.ma__hero,.ma__logos,.ma__stats,.ma__strategy,.ma__agent,.ma__quotes,
.ma__chat,.ma__powerful,.ma__max,.ma__build{position:relative;padding:0 120px}
.ma__hero__in,.ma__stats__in,.ma__strategy__in,.ma__agent__in,.ma__quotes__in,
.ma__chat__in,.ma__powerful__in,.ma__max__in,.ma__build__in{
  position:relative;width:100%;max-width:1720px;margin-inline:auto;
  display:flex;flex-direction:column}
.ma__stats__in,.ma__strategy__in,.ma__agent__in,.ma__quotes__in,
.ma__chat__in,.ma__powerful__in,.ma__max__in,.ma__build__in{z-index:2}

.ma__h2{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}
.ma__h3{font-size:36px;line-height:43px;font-weight:500;color:#000;margin:0}
.ma__h3--center{font-size:36px;line-height:43px;font-weight:500;color:#000;margin:0;text-align:center}
.ma__body{font-size:18px;line-height:29px;color:var(--text);margin:0}
.ma__h2--inv,.ma__h3--inv{color:#fff}
.ma__body--inv{color:#EAFDFF}
.ma__link{color:var(--cyan);text-decoration:none}
.ma__link:hover{text-decoration:underline}
.ma__link--inv{color:var(--cyan)}
.ma__btn{display:inline-flex;align-items:center;justify-content:center;
  font-size:16px;line-height:24px;padding:13px 35px 11px;border-radius:50px;
  text-align:center;text-decoration:none;white-space:nowrap}
.ma__btn--primary{background:#039ACE;color:#fff;border:1px solid #039ACE}
.ma__btn--primary:hover{background:#0286b4}
.ma__btn--ghost{color:var(--text);border:1px solid #039ACE}
.ma__btn--ghost:hover{background:rgba(3,154,206,.08)}

/* 1 · hero — the yellow wash is a blurred pseudo-element parked off the left edge.
   The hero must NOT clip it: upstream lets it bleed down behind the logo band, and
   relies on body{overflow-x:hidden} (set on this page only) to stop the sideways spill. */
.ma__hero{overflow:visible}
body.p-ma{overflow-x:hidden}
/* overflow-x:hidden on body does not stop the header's language-menu SVG from
   extending the document on this page; clip walls it in without making body a
   scroll container (which would break the sticky panels). */
html:has(body.p-es){overflow-x:clip}
.ma__hero::before{content:"";position:absolute;z-index:3;display:block;
  top:50%;left:calc(50% - 1600px);width:934px;height:680px;
  transform:translateY(-40%);background:#0179F8;filter:blur(120px);pointer-events:none}
.ma__hero__in{padding:60px 0 0;gap:60px;align-items:center}
.ma__hero__row{position:relative;z-index:5;width:100%;display:flex;gap:250px}
.ma__hero__l{width:45%;display:flex;flex-direction:column;gap:30px}
.ma__hero__r{width:55%;display:flex;flex-direction:column;gap:30px}
.ma__hero__h1{font-size:64px;line-height:1.15;font-weight:500;color:#000;margin:0}
.ma__hero__lead{font-size:18px;line-height:29px;color:#000;margin:0;text-wrap:pretty}
.ma__hero__cta{display:flex;justify-content:flex-start;gap:16px}
.ma__hero__video{display:block;width:100%;aspect-ratio:820/580;object-fit:cover;border-radius:24px}

/* 2 · logo marquee */
.ma__logos{overflow:hidden;padding:80px 0 20px;display:flex;flex-direction:column;gap:30px}
.ma__logos__kicker{margin:0;padding:0 15px;text-align:center;
  font-size:12px;line-height:1;font-weight:400;letter-spacing:1px;text-transform:uppercase;color:#000}
/* The slider is a fixed 2200px track that bleeds past the viewport and is clipped by
   the section; the 50px edge fades are pseudo-elements tinted by --fade-color.
   Width, z-index and the 80s desktop duration come from the page's own inline <style>,
   which overrides the theme's 36s. */
.ma__logos__slider{position:relative;z-index:-5;width:2200px;margin:0 auto}
.ma__logos__rail{--fade-color:#fff;position:relative;overflow:hidden;display:flex;width:100%}
.ma__logos__rail::before,.ma__logos__rail::after{content:"";pointer-events:none;
  position:absolute;z-index:5;top:0;left:0;width:50px;height:100%;
  background:linear-gradient(to left,rgba(255,255,255,0),var(--fade-color))}
.ma__logos__rail::after{left:auto;right:0;
  background:linear-gradient(to right,rgba(255,255,255,0),var(--fade-color))}
.ma__logos__track{position:relative;display:flex;width:100%;
  animation:ma-logo-slide 80s linear infinite}
.ma__logos__rail:hover .ma__logos__track{animation-play-state:paused}
.ma__logos__track--add{position:absolute;top:0;left:100%;width:100%;animation:none}
@keyframes ma-logo-slide{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}
.ma__logo{flex:1;display:flex;align-items:center;margin-right:50px}
.ma__logo img{display:block;width:100%;height:auto;transform:scale(.9)}
@media(max-width:768px){
  .ma__logos__track{width:auto;flex-wrap:nowrap}
  .ma__logo{flex:none;width:30vw}}
@media(max-width:576px){
  .ma__logo{width:35vw}
  .ma__logo img{transform:scale(1)}}

/* about-us ships a THIRD band. Its track is the section width, not the fixed
   2200px the product pages use, so seven marks divide the viewport: at 1440 an
   item is (1440 - 7x50)/7 = 156, which is what the source measures. Its mobile
   step is 45vw where the product band's is 35vw, and it keeps the 0.9 scale
   there. Verified against final-web/about-us.html by tools/au_band.mjs. */
.au__logos{padding:80px 0 40px}
.au__logos .ma__logos__slider{width:100%}
@media(max-width:767px){
  .au__logos{padding:40px 0}
  /* upstream narrows the kicker to 340px here, so it wraps to two lines */
  .au__logos .ma__logos__kicker{width:340px;max-width:100%;margin-inline:auto;
    font-size:13px;line-height:20px}}
@media(max-width:576px){
  .au__logos .ma__logo{width:45vw}
  .au__logos .ma__logo img{transform:scale(.9)}}

/* 4 · stats */
.ma__stats__in{padding:100px 0;gap:40px}
.ma__stats__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.ma__stat{display:flex;flex-direction:column;gap:16px}
.ma__stat__card{background:#0461C8;border-radius:20px;padding:40px;text-align:center;
  display:flex;flex-direction:column;gap:16px;flex:1}
.ma__stat__n{font-size:100px;line-height:100px;font-weight:500;color:#fff;margin:0}
.ma__stat__d{font-size:18px;line-height:29px;color:#fff;margin:0}
.ma__stat__src{font-size:14px;line-height:20px;color:#000;margin:0;text-align:center}
.ma__stat__src a{color:var(--cyan)}

/* 5 · more strategy, less busywork */
.ma__strategy{overflow:hidden}
.ma__strategy__in{padding:40px 0 100px;gap:40px}
.ma__strategy__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;align-items:start}
.ma__scard{display:flex;flex-direction:column;gap:20px}
.ma__scard__media img,.ma__scard__media video{display:block;width:100%;height:auto;
  aspect-ratio:768/537;object-fit:cover;border-radius:20px}

/* 6 · marketing agent */
.ma__agent__in{padding:0 0 100px;gap:200px;flex-direction:row;align-items:center}
.ma__agent__l{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.ma__agent__r{flex:1 1 0;min-width:0}
.ma__agent__r video{display:block;width:100%;aspect-ratio:820/580;object-fit:cover;border-radius:24px}

/* 7 · industry quotes */
.ma__quotes{overflow:hidden;background:#FAFAEE}
.ma__quotes__in{padding:100px 0;gap:40px;align-items:center}
.ma__quotes__box{width:100%;display:flex;flex-direction:column;gap:40px;align-items:center}
.ma__pills{display:flex;flex-wrap:wrap;justify-content:center;
  background:#0461C8;border-radius:100px;padding:6px}
.ma__pill{border:0;background:transparent;border-radius:100px;cursor:pointer;
  font:inherit;font-size:16px;font-weight:500;color:#fff;padding:12px 28px}
.ma__pill.is-on{color:#050505;background:#fff}
.ma__quote{display:flex;flex-direction:column;gap:30px;align-items:center;max-width:1400px}
.ma__quote__t{font-size:45px;line-height:54px;color:var(--text);margin:0;text-align:center}
.ma__quote__by{display:flex;align-items:center;gap:16px}
.ma__quote__img{width:56px;height:56px;border-radius:50%;object-fit:cover}
.ma__quote__name{font-size:16px;line-height:26px;font-weight:500;color:#000;margin:0}
.ma__quote__role{font-size:16px;line-height:26px;color:#8F8F8F;margin:0}

/* 8 · 30-minute chat */
.ma__chat__in{padding:100px 0;gap:160px;flex-direction:row;align-items:center}
.ma__chat__l{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.ma__chat__r{flex:1 1 0;min-width:0}
.ma__chat__r img{display:block;width:100%;height:auto;border-radius:20px}
.ma__chat__steps{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;align-items:start}
.ma__chat__step{display:flex;flex-direction:column;gap:16px}
.ma__chat__n{display:flex;align-items:center;justify-content:center;
  width:36px;height:36px;border-radius:50%;background:#0461C8;
  font-size:18px;line-height:29px;font-weight:500;color:#fff;margin:0}

/* 9 · powerful, flexible, secure — twin blurred washes behind a dark section */
.ma__powerful,.ma__max{background:#000;overflow:hidden}
.ma__powerful::before,.ma__powerful::after,
.ma__max::before,.ma__max::after{content:"";position:absolute;z-index:1;display:block;
  width:1811px;height:362px;pointer-events:none;
  background:linear-gradient(250deg,#019ACE 28.92%,#01CE7F 50.56%);filter:blur(302.634px)}
.ma__powerful::before,.ma__max::before{top:-200px;left:calc(50% - 2000px)}
.ma__powerful::after,.ma__max::after{bottom:-300px;left:calc(50% + 400px)}
.ma__powerful__in{padding:140px 0;gap:40px;align-items:flex-start}
.ma__rail{position:relative;width:100%;display:flex;flex-direction:column;gap:40px}
.ma__rail__track{display:flex;gap:30px;overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none;padding-bottom:4px}
.ma__rail__track::-webkit-scrollbar{display:none}
.ma__card{flex:0 0 calc((100% - 60px) / 3);scroll-snap-align:start;
  display:flex;flex-direction:column;gap:20px}
.ma__card__media img{display:block;width:100%;height:auto;aspect-ratio:1128/780;
  object-fit:cover;border-radius:20px}
.ma__card__title{font-size:24px;line-height:28.8px;font-weight:500;color:#fff;margin:0}
.ma__card__body{font-size:18px;line-height:32.4px;color:#EAFDFF}
.ma__card__body strong{color:#fff}
.ma__rail__nav{display:flex;gap:24px}
.ma__arrow{display:flex;align-items:center;justify-content:center;width:64px;height:64px;
  border:0;border-radius:50%;background:#0461C8;color:#fff;cursor:pointer;
  transition:transform 200ms ease-in-out,opacity 200ms ease-in-out}
.ma__arrow:hover{transform:scale(1.1)}
.ma__arrow.is-off{opacity:.35;cursor:default}
.ma__arrow.is-off:hover{transform:none}

/* 12 · maximize the power of your marketing channels */
.ma__max__in{padding:140px 0;gap:80px;align-items:flex-start}
.ma__max__grid{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:30px;align-items:start}
.ma__mcard{display:flex;flex-direction:column;gap:20px;align-items:flex-start}
.ma__mcard__icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;
  border-radius:50%;border:1px solid;
  border-image:linear-gradient(180deg,#0179F8,#019ACE) 1;
  background:transparent}
.ma__mcard__icon img{display:block;width:24px;height:24px;filter:brightness(0) invert(1)}

/* 13 · see what you can build */
.ma__build{overflow:hidden}
.ma__build__in{padding:100px 0;gap:40px}
.ma__build__head{display:flex;flex-direction:column;gap:20px}
.ma__build__sub{font-size:24px;line-height:34px;color:#000;margin:0}
.ma__build__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;align-items:start}
.ma__bcard{display:flex;flex-direction:column;gap:20px}
.ma__bcard__img{display:block}
.ma__bcard__img img{display:block;width:100%;height:auto;aspect-ratio:768/545;
  object-fit:cover;border-radius:20px}
.ma__bcard__title{font-size:30px;line-height:36px;font-weight:500;color:var(--text);margin:0}

/* 14 · closing CTA — this one caps at 1110, not 1720 */
.ma__cta{position:relative}
.ma__cta__in{width:100%;max-width:min(100%,1110px);margin-inline:auto;
  padding:100px 0 140px;gap:80px;display:flex;align-items:center}
.ma__cta__l{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.ma__cta__r{flex:1 1 0;min-width:0}
.ma__cta__r img{display:block;width:100%;height:auto;border-radius:20px}

@media(max-width:1800px){
  .ma__hero__row{gap:120px}
  .ma__agent__in{gap:60px}
  .ma__chat__in{gap:60px}}
@media(max-width:1600px){
  .ma__hero__h1{font-size:52px}
  .ma__hero__cta{flex-direction:column;align-items:flex-start}}
@media(max-width:1400px){
  .ma__hero,.ma__stats,.ma__strategy,.ma__agent,.ma__quotes,
  .ma__chat,.ma__powerful,.ma__max,.ma__build{padding:0 40px}
  .ma__hero::before{left:-850px}}
@media(max-width:1200px){
  .ma__hero,.ma__stats,.ma__strategy,.ma__agent,.ma__quotes,
  .ma__chat,.ma__powerful,.ma__max,.ma__build{padding:0 15px}
  .ma__hero__row{gap:60px}
  .ma__hero__h1{font-size:40px}}
@media(max-width:1024px){
  .ma__h2{font-size:30px;line-height:38px}
  .ma__h3,.ma__h3--center{font-size:30px;line-height:38px}
  .ma__quote__t{font-size:26px;line-height:34px}
  .ma__stat__n{font-size:60px;line-height:64px}
  .ma__stats__in{padding:60px 0}
  .ma__strategy__in{padding:40px 0 60px;gap:30px}
  .ma__agent__in{padding:0 0 60px;gap:30px}
  .ma__quotes__in{padding:60px 0}
  .ma__chat__in{padding:60px 0;flex-direction:column;gap:40px}
  .ma__chat__l,.ma__chat__r{width:100%}
  .ma__powerful__in{padding:60px 0 80px}
  .ma__max__in{padding:80px 0;gap:40px}
  .ma__build__in{padding:50px 0}
  .ma__cta__in{padding:50px 15px 100px;gap:20px}
  .ma__card{flex-basis:calc((100% - 30px) / 2)}
  .ma__strategy__grid,.ma__max__grid,.ma__build__grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:992px){.ma__hero__row{gap:30px}}
@media(max-width:768px){
  .ma__hero__cta{gap:10px;align-items:center}}
@media(max-width:767px){
  .ma__hero__in{padding:30px 0 0}
  .ma__hero__row{flex-wrap:wrap}
  .ma__hero__l,.ma__hero__r{width:100%}
  .ma__hero__h1,.ma__hero__lead{text-align:center}
  .ma__hero__cta{justify-content:center;align-items:center}
  .ma__stats__in{padding:40px 0}
  .ma__strategy__in{padding:20px 0 42px}
  .ma__agent__in{flex-direction:column;padding:0 0 60px}
  .ma__agent__l,.ma__agent__r{width:100%}
  .ma__powerful__in{padding:50px 0 60px}
  .ma__max__in{padding:50px 0;gap:30px}
  .ma__build__in{padding:40px 0}
  .ma__cta__in{flex-direction:column;gap:30px}
  .ma__cta__l,.ma__cta__r{width:100%}
  .ma__stats__grid,.ma__strategy__grid,.ma__max__grid,.ma__build__grid,
  .ma__chat__steps{grid-template-columns:1fr}
  .ma__card{flex-basis:100%}
  .ma__hero__h1{font-size:40px}}
@media(max-width:575px){.ma__hero__h1{font-size:34px}}

/* 3 · how it all works together — 400vh of scroll drives a sticky panel */
.ma__hiaw{position:relative;background:#0461C8;color:#fff;height:400vh;--hiaw-top:60px;padding:0 120px}
.ma__hiaw__sticky{position:sticky;top:var(--hiaw-top);display:flex;align-items:stretch;
  min-height:calc(100vh - var(--hiaw-top));max-width:1720px;margin:0 auto;color:#fff}
.ma__hiaw__text{display:flex;flex-direction:column;align-items:flex-start;
  justify-content:flex-start;max-width:400px;padding:15vh 0}
.ma__hiaw__h{font-size:50px;line-height:60px;font-weight:500;color:#fff;margin:0}
.ma__hiaw__h span{font-size:1.6em;line-height:1.15}
.ma__hiaw__tabs{display:flex;gap:24px;margin-top:24px}
.ma__hiaw__tab{cursor:pointer;font:inherit;font-weight:500;text-transform:uppercase;
  padding:6px 16px 4px;border-radius:100px;border:1px solid #fff;background:transparent;color:#fff;
  transition:color 600ms ease-in-out,background 600ms ease-in-out}
.ma__hiaw__tab:hover{background:rgba(0,0,0,.2)}
.ma__hiaw__tab.is-on{color:#fff;background:#000}
.ma__hiaw__desc{position:relative;width:100%;margin-top:auto}
.ma__hiaw__desc__c{position:absolute;width:100%;bottom:0;opacity:0;pointer-events:none;
  transform:translateY(-50px);font-size:22px;line-height:1.6;
  transition:opacity 600ms ease-in-out,transform 600ms ease-in-out}
.ma__hiaw__desc__c.is-on{opacity:1;pointer-events:all;transform:translate(0)}
.ma__hiaw__video{position:absolute;top:50%;left:600px;transform:translateY(-50%);
  width:100vw;max-width:calc(((100vw - 1700px) / 2) + (1700px - 580px));
  height:auto;aspect-ratio:1246/900}
.ma__hiaw__video video{position:absolute;top:50%;opacity:0;width:auto;height:auto;
  max-width:100%;max-height:calc(100vh - var(--hiaw-top));aspect-ratio:1246/900;
  object-fit:cover;transform:translateY(calc(-50% - 100px));
  transition:opacity 600ms ease-in-out,transform 600ms ease-in-out}
.ma__hiaw__video video.is-on{opacity:1;transform:translateY(-50%)}
@media(max-width:1960px){.ma__hiaw__video{left:500px;max-width:calc(100vw - 500px - 120px)}}
@media(max-width:1400px){
  .ma__hiaw{padding:0 40px}
  .ma__hiaw__video{left:450px;max-width:calc(100vw - 450px - 40px)}}
@media(max-height:1200px){.ma__hiaw__text{padding:5vh 0}}
@media(max-height:900px){.ma__hiaw__desc__c{font-size:18px}}
@media(max-height:660px){
  .ma__hiaw__desc__c{font-size:16px}
  .ma__hiaw__tab{font-size:14px;padding:4px 12px 2px}}
@media(max-width:1800px){.ma__hiaw__h span{font-size:1.4em}
  .ma__arrow{width:48px;height:48px}
  .ma__rail__nav{gap:16px}}
@media(max-width:1600px){.ma__hiaw__tabs{gap:12px}
  .ma__hiaw__h span{font-size:1.2em}}
@media(max-width:1200px){.ma__hiaw__h span{font-size:1em}}
/* the height ladder is declared after the width one upstream, so it wins ties */
@media(max-height:900px){.ma__hiaw__h span{font-size:1.2em;line-height:1.05}}
@media(max-height:660px){.ma__hiaw__h span{font-size:1em}}
@media(max-width:1200px){
  .ma__hiaw{padding:0 15px}
  .ma__hiaw__sticky{flex-direction:column-reverse;justify-content:flex-end}
  .ma__hiaw__text{width:100%;height:500px;max-width:none;padding:5vh 0}
  .ma__hiaw__video{position:relative;top:0;left:-15px;transform:none;
    width:calc(100% + 30px);max-width:none;max-height:calc(100vh - 500px - var(--hiaw-top))}
  .ma__hiaw__video video{top:0;width:100%;height:100%;max-height:none;
    transform:translateY(-50px);object-position:50% 0}
  .ma__hiaw__video video.is-on{transform:translateY(0)}}
@media(max-width:768px){.ma__hiaw__tab{font-size:14px;padding:4px 12px 2px}}
@media(max-width:1024px){.ma__hiaw__h{font-size:30px;line-height:38px}}
@media(max-width:767px){
  .ma__hiaw__text{height:calc(100vh - 70vw - var(--hiaw-top));min-height:480px}}
@media(max-width:575px){.ma__hiaw{--hiaw-top:48px}}

/* 10 · customer stories */
.ma__cs{position:relative;background:#FFEEF5;overflow:hidden;padding:0 120px}
.ma__cs__in{position:relative;z-index:2;width:100%;max-width:1720px;margin-inline:auto;
  padding:100px 0;gap:60px;display:flex;flex-direction:column}
.ma__cs .ma__h2{text-align:center}
.ma__cs__wrap{display:flex;flex-direction:column;align-items:flex-start;width:100%;gap:60px}
.ma__cs__tabswrap{overflow-x:auto;width:calc(100% + 30px);display:flex;margin:0 -15px;padding:0 15px}
.ma__cs__tabs{--cs-tabs-bg:#0461C8;--cs-tabs-pad:8px;--cs-tab-bg:transparent;
  display:flex;flex-wrap:wrap;justify-content:center;gap:8px;color:#000;
  padding:var(--cs-tabs-pad);border-radius:100px;background:var(--cs-tabs-bg);margin:0 auto}
.ma__cs__tab{cursor:pointer;border:0;font:inherit;font-weight:500;text-align:center;
  white-space:nowrap;padding:13px 32px 11px;border-radius:100px;background:var(--cs-tab-bg);color:#fff;
  transition:background 200ms ease-in-out,box-shadow 200ms ease-in-out}
.ma__cs__tab:hover{color:#050505;background:rgba(255,255,255,.5)}
.ma__cs__tab.is-on{cursor:default;color:#050505;background:#fff;box-shadow:0 2px 4px 0 rgba(4,97,200,.8)}
/* Upstream is a Swiper: slidesPerView:auto, spaceBetween:80, centeredSlides:true, and
   .br-cs-swiper{overflow:visible} -- so the neighbouring stories peek in either side of
   the centred one at opacity .5, which is what fills the height the rail reserves for
   the tallest slide. The track is transform-driven as upstream's is; a scroll-snap rail
   cannot stand in, because the scroller's own overflow would clip the peek. */
.ma__cs__rail{position:relative;width:100%;overflow:visible}
.ma__cs__slides{display:flex;align-items:flex-start;gap:80px;
  transition:transform 500ms ease-out;will-change:transform}
.ma__cs__slide{flex:0 0 auto;opacity:.5;transition:opacity 400ms ease-in-out;
  display:flex;flex-direction:column;gap:40px;color:#000;width:100%;max-width:1110px}
.ma__cs__slide.is-on{opacity:1}
.ma__cs__img{position:relative;width:100%;aspect-ratio:1110/624;display:flex;align-items:flex-end;padding:24px}
.ma__cs__stats{position:relative;z-index:5;width:100%;display:flex;gap:24px}
.ma__cs__stat{flex:auto;text-align:center;background:#0461C8;color:#fff;border-radius:24px;padding:25px 30px 30px;
  opacity:0;transform:translate(0,20px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.ma__cs__stat:nth-child(1){transition-delay:300ms}
.ma__cs__stat:nth-child(2){transition-delay:450ms}
.ma__cs__stat:nth-child(3){transition-delay:600ms}
.ma__cs__slide.is-on .ma__cs__stat{opacity:1;transform:translate(0)}
.ma__cs__stat__n{font-size:48px;font-weight:500;line-height:1.3}
.ma__cs__stat__d{font-size:16px;font-weight:500;line-height:1.2}
.ma__cs__bg{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%}
.ma__cs__bg img,.ma__cs__bg video{display:block;width:100%;height:100%;object-fit:cover;border-radius:24px}
.ma__cs__content{display:flex;gap:40px;pointer-events:none;opacity:0;
  transform:translate(0,20px);transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.ma__cs__slide.is-on .ma__cs__content{pointer-events:auto;opacity:1;transform:translate(0)}
.ma__cs__title{flex:1;font-size:46px;font-weight:500;line-height:1.1}
.ma__cs__desc{flex:1;font-size:18px;line-height:1.4}
/* upstream's story paragraphs carry no margin at all -- measured on BOTH sources
   (loomi-marketing-agent and marketing-automation): quote 126 + link 25 = 151, no gap.
   The 16px here was invented and added 32px to every story slide on both pages. */
.ma__cs__desc p{margin:0}
.ma__cs__desc a{color:var(--cyan)}
.ma__cs__person{display:flex;align-items:center;justify-content:flex-start;gap:20px;width:100%;
  pointer-events:none;opacity:0;transform:translate(0,40px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.ma__cs__slide.is-on .ma__cs__person{pointer-events:auto;opacity:1;transform:translate(0)}
.ma__cs__person img{display:block;width:60px;height:60px;object-fit:cover;border-radius:50%}
.ma__cs__person__info strong{display:block;color:#000;font-size:18px;font-weight:500}
.ma__cs__person__info span{display:block;color:#86868B;font-size:16px}
@media(max-width:1800px){.ma__cs__slide{max-width:900px}
  .ma__cs__stat__n{font-size:42px}}
@media(max-width:1600px){.ma__cs__slide{max-width:800px}
  .ma__cs__stat__n{font-size:36px}}
@media(max-width:1400px){.ma__cs{padding:0 40px}}
@media(max-width:1200px){.ma__cs{padding:0 15px}
  .ma__cs__tab{font-size:14px;padding:9px 20px 7px}}
@media(max-width:480px){body.p-lm .ma__cs__tabs{--cs-tabs-bg:transparent;--cs-tabs-pad:0;--cs-tab-bg:#0461C8}}
@media(max-width:360px){.ma__cs__tabs{--cs-tabs-bg:transparent;--cs-tabs-pad:0;--cs-tab-bg:#0461C8}}
@media(max-width:1024px){.ma__cs__in{padding:60px 0}
  .ma__cs__wrap{gap:30px}
  .ma__cs__title{font-size:32px}}
@media(max-width:767px){.ma__cs__img{padding:10px}
  .ma__cs__stats{gap:10px}
  .ma__cs__stat{padding:15px 20px 20px;border-radius:10px}
  .ma__cs__stat__n{font-size:30px}
  .ma__cs__stat__d{font-size:14px}
  .ma__cs__person__info strong{font-size:16px}
  .ma__cs__person__info span{font-size:14px;line-height:1.2}}
@media(max-width:580px){
  .ma__cs__slide{gap:16px}
  .ma__cs__img{flex-direction:column-reverse;gap:10px;aspect-ratio:auto;padding:0}
  .ma__cs__stats{flex-direction:column}
  .ma__cs__stat{padding:10px 16px 8px;display:flex;align-items:center}
  .ma__cs__stat__n{min-width:120px;text-align:left;margin-right:16px}
  .ma__cs__stat__d{text-align:left}
  .ma__cs__bg{position:static;aspect-ratio:1110/624;height:auto}
  .ma__cs__bg img,.ma__cs__bg video{height:auto;aspect-ratio:1110/624}
  .ma__cs__content{gap:16px;flex-direction:column}
  .ma__cs__title{margin-top:20px}}

/* 11 · one platform, 13+ ways */
.ma__ways{position:relative;overflow:hidden;padding:0 120px}
.ma__ways__in{position:relative;z-index:2;width:100%;max-width:1720px;margin-inline:auto;
  padding:100px 0;gap:80px;display:flex;flex-direction:column}
.ma__ways__rail{position:relative;width:100%}
.ma__ways__track{display:flex;gap:120px;overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none}
.ma__ways__track::-webkit-scrollbar{display:none}
.ma__way{flex:0 0 280px;scroll-snap-align:start;
  display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:8px}
@media(max-width:1024px){.ma__way{flex-basis:calc((100% - 60px) / 2)}}
@media(max-width:767px){.ma__way{flex-basis:100%}}
.ma__way__ico{display:flex;align-items:center;justify-content:center;width:56px;aspect-ratio:1/1;
  border-radius:50%;background:#0461C8;color:#fff;margin-bottom:16px}
.ma__way__ico img{display:block}
.ma__way__title{font-size:26px;line-height:1.2;font-weight:500;color:#000}
.ma__way__desc{font-size:18px;line-height:1.5;color:var(--text);margin:0}
.ma__way__link{color:#019ACE;font-size:18px;line-height:1.5;text-decoration:none}
.ma__way__link:hover{text-decoration:underline}
.ma__ways__nav{display:flex;gap:24px;width:100%;margin-top:40px}
/* the channel rail declares a hair-different yellow from the Powerful rail */
.ma__ways__nav .ma__arrow{background:#0461C8}
@media(max-width:1800px){.ma__ways__nav{gap:16px;margin-top:20px}}
@media(max-width:1400px){.ma__ways{padding:0 40px}}
@media(max-width:1200px){.ma__ways{padding:0 15px}}
@media(max-width:1024px){.ma__ways__in{padding:60px 0;gap:40px}
  .ma__ways__track{gap:60px}}

/* ============ EMAIL MARKETING ============
   Reuses the ma__ product-page system; only these four blocks are new. */
.em__kicker{font-size:20px;line-height:29px;font-weight:500;color:#000;margin:0;text-transform:uppercase}

/* The email hero's type is NOT the marketing-automation ladder. Upstream holds the
   headline at 50/60 down to 1025 and then drops straight to 30/38 — no 1200 step, no 575
   step — and steps the eyebrow to 18px at the same breakpoint. marketing-automation, on
   its own source, really is 64 → 52 → 40 → 34, and matches at all 17 widths swept, so
   `.ma__hero__h1` itself must not move. Two pages, two ladders: scoped to the page, the
   way the rest of this page's rhythm already is. */
body.em .ma__hero__h1{font-size:50px;line-height:60px}
@media(max-width:1024px){
  body.em .ma__hero__h1{font-size:30px;line-height:38px}
  body.em .em__kicker{font-size:18px}}

/* 3 · the blueprint for smarter email — yellow panel, video bleeding off the right */
.em__bp{position:relative;overflow:hidden;background:#0461C8;padding:0 120px}
.em__bp__in{position:relative;width:100%;max-width:1720px;margin-inline:auto;
  height:900px;min-height:600px;padding:120px 0}
.em__bp__text{position:relative;max-width:600px;height:100%;
  display:flex;flex-direction:column;justify-content:flex-start}
.em__bp__h{font-size:50px;line-height:60px;font-weight:500;color:#fff;margin:0 0 40px}
.em__bp__tabs{display:flex;align-self:flex-start;gap:5px;padding:5px;background:#000;border-radius:200px}
.em__bp__tab{cursor:pointer;border:0;font:inherit;font-weight:500;line-height:1.2;color:#fff;
  padding:12px 24px 10px;background:#000;border-radius:200px;
  transition:background 100ms ease-in-out,color 100ms ease-in-out}
.em__bp__tab:hover{background:rgba(255,255,255,.2)}
.em__bp__tab.is-on{background:#fff;color:#000}
.em__bp__copy{position:absolute;width:100%;left:0;bottom:100px}
.em__bp__copy p{position:absolute;bottom:0;margin:0;font-size:20px;line-height:1.6;color:#fff;
  opacity:0;pointer-events:none;transition:opacity 300ms ease-in-out}
.em__bp__copy p.is-on{opacity:1;pointer-events:all}
.em__bp__arrows{position:absolute;left:0;bottom:0;display:flex;gap:24px;width:100%;margin-top:40px}
/* on the yellow panel these are black circles at 48px, and the disabled one sits at
   opacity .5 rather than the .35 the other rails use */
.em__bp__arrows .ma__arrow{width:48px;height:48px;background:#000;color:#fff}
.em__bp__arrows .ma__arrow.is-off{opacity:.5}
.em__bp__video{position:absolute;top:0;left:auto;right:0;width:auto;height:100%;aspect-ratio:5/4}
.em__bp__video video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transition:opacity 300ms ease-in-out}
.em__bp__video video.is-on{opacity:1}
@media(max-width:2250px){.em__bp__in{height:44vw;padding:calc(7vw - 40px) 0}}
@media(max-width:1800px){
  .em__bp__text{max-width:500px}
  .em__bp__copy p{font-size:16px}
  .em__bp__video{aspect-ratio:1/1}
  .em__bp__arrows{gap:16px;margin-top:20px}}
@media(max-width:1400px){.em__bp{padding:0 40px}}
@media(max-width:1200px){
  .em__bp{padding:0 15px}
  .em__bp__in{min-height:500px;padding:50px 0}
  .em__bp__text{max-width:calc(44vw - 50px)}
  .em__bp__h{margin-bottom:20px}
  .em__bp__tab{font-size:14px;padding:10px 20px 8px}
  .em__bp__copy{bottom:70px}
  .em__bp__copy p{font-size:14px}}
@media(max-width:992px){.em__bp__video{aspect-ratio:4/5}}
@media(max-width:768px){
  .em__bp__in{height:auto;min-height:0;padding:0 0 50px;display:flex;flex-direction:column}
  .em__bp__video{position:relative;top:0;left:-15px;width:calc(100% + 30px);height:75vw;aspect-ratio:auto}
  .em__bp__text{width:100%;max-width:100%;height:auto;margin-top:30px}
  .em__bp__copy{position:relative;bottom:auto;margin-top:20px}
  .em__bp__copy p{position:relative;top:0;bottom:auto;display:none}
  .em__bp__copy p.is-on{display:block}
  .em__bp__arrows{position:relative;bottom:auto}}

/* 4 · a recognized leader — narrower cap than the other two-column sections */
.em__leader .ma__agent__in{max-width:1400px;padding:100px 0 40px;gap:140px}
.em__leader .ma__agent__r img{display:block;width:100%;height:auto;border-radius:24px}

/* 5 · a complete toolkit — the light accordion */
.em__kit{position:relative;overflow:hidden;padding:0 120px}
.em__kit__in{position:relative;width:100%;max-width:1720px;margin-inline:auto;
  padding:100px 0 40px;gap:50px;display:flex;flex-direction:column;align-items:center}
.em__kit__h{text-align:center}
.em__kit__row{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;
  width:100%;min-height:0;color:#000;background:#fff;border-radius:32px}
.em__kit__tabs{display:flex;flex-direction:column;align-items:flex-start;gap:10px;
  width:365px;padding:0 15px 0 0}
.em__kit__tab{width:100%;background:rgba(255,255,255,.1);border:1px solid #D6D6D6;
  border-radius:16px;padding:10px 20px 5px}
.em__kit__title{position:relative;display:flex;align-items:center;width:100%;min-height:68px;
  border:0;background:transparent;cursor:pointer;text-align:left;text-wrap:pretty;
  font:inherit;font-size:18px;line-height:1.4;font-weight:500;color:#000;padding:0 52px 0 0}
.em__kit__title::after{content:"";position:absolute;top:50%;right:-14px;transform:translateY(-50%);
  width:48px;aspect-ratio:1/1;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Ccircle cx='24' cy='24' r='24' fill='%23FEED1B'/%3E%3Cpath d='M15 21L24 30L33 21' stroke='black' stroke-width='2.4' fill='none'/%3E%3C/svg%3E") center center no-repeat;background-size:contain;
  transition:transform 200ms ease-in-out}
.em__kit__tab.is-on .em__kit__title::after{transform:translateY(-50%) rotate(180deg)}
.em__kit__content{display:none;color:#000;font-size:16px;line-height:1.6;padding:10px 0}
.em__kit__tab.is-on .em__kit__content{display:block}
.em__kit__content p{margin:0}
.em__kit__anims{width:calc(100% - 365px);padding:0 0 0 15px;background:#fff;border-radius:32px}
.em__kit__anim{display:none;width:100%;height:auto;border-radius:16px}
.em__kit__anim.is-on{display:block}
@media(min-width:1601px){.em__kit__tabs{width:440px}.em__kit__anims{width:calc(100% - 440px)}}
@media(min-width:1801px){.em__kit__tabs{width:520px}.em__kit__tab{padding:15px 25px 10px}
  .em__kit__anims{width:calc(100% - 520px)}}
@media(max-width:1800px){.em__kit__content{font-size:14px}}
@media(max-width:1400px){.em__kit{padding:0 40px}}
@media(max-width:1200px){.em__kit{padding:0 15px}}
@media(max-width:1024px){
  .em__kit__row{border-radius:20px}
  .em__kit__tabs{padding:0 8px 0 0}
  .em__kit__tab{border-radius:10px}
  .em__kit__title{min-height:50px;font-size:16px;line-height:1.3;padding-right:46px}
  .em__kit__title::after{right:-6px;width:36px}
  .em__kit__content{font-size:14px;line-height:1.5}
  .em__kit__anims{padding:0 0 0 8px;border-radius:20px}
  .em__kit__anim{border-radius:10px}}
@media(max-width:767px){
  .em__kit__tabs,.em__kit__anims{width:100%;padding:0 0 20px}
  .em__kit__anims{order:-1}}

/* 12 · FAQ — .br-faq: the chevron leads in DOM order but is pinned to the right edge */
.br-faq{display:flex;flex-direction:column}
.br-faq-item{display:flex;flex-direction:column;border-bottom:1px solid #e1e1e1}
.br-faq-question{cursor:pointer;position:relative;display:block;width:100%;
  border:0;background:none;text-align:left;font:inherit;
  font-size:20px;font-weight:500;line-height:1.4;color:#000;padding:26px 90px 26px 0}
.br-faq-question svg{position:absolute;top:50%;right:0;transform:translateY(-50%);
  transition:transform 200ms ease-in-out}
.br-faq-item.active .br-faq-question svg{transform:translateY(-50%) rotate(180deg)}
.br-faq-answer{display:none;font-size:16px;color:#2d2d2d;padding:0 90px 26px 0}
.br-faq-item.active .br-faq-answer{display:block}
.br-faq-answer p{margin:0}
@media(max-width:767px){
  .br-faq-question{font-size:18px;padding:16px 50px 16px 0}
  .br-faq-answer{padding:0 0 16px}}

.em__faq{position:relative;padding:0 15px}
.em__faq__in{width:100%;max-width:min(100%,1110px);margin-inline:auto;padding:140px 0 0;
  display:flex;flex-direction:column;align-items:center;gap:60px}
/* the questions sit in an 850px column inside the 1110px wrap */
.em__faq .br-faq{width:850px;max-width:100%}
.em__faq__h{text-align:center}

/* ---- email-marketing section rhythm ------------------------------------------
   This page declares its own vertical padding and gaps per section; reusing the
   marketing-automation values left extra space between most components. Values
   read from post-10747.css, not inferred from the rendered gaps. */
.em .ma__hero__in{padding:60px 0 0;gap:60px}
.em .ma__logos{padding:80px 0 20px}
.em .ma__strategy__in{padding:100px 0;gap:40px}
.em .ma__agent__in{padding:0 0 100px;gap:200px}
.em .ma__cs__in{padding:100px 0;gap:60px}
.em .ma__chat__in{padding:100px 0;gap:160px}
.em .ma__powerful__in{padding:140px 0;gap:40px}
.em .ma__build__in{padding:100px 0;gap:40px}
.em__leader{padding:0 120px}
.em .em__leader .ma__agent__in{max-width:1400px;padding:100px 0 40px;gap:140px}
.em .em__kit__in{padding:100px 0 40px;gap:50px}
.em .em__faq__in{padding:140px 0 0;gap:60px}
.em .ma__cta{padding:0 120px}
.em .ma__cta__in{max-width:min(100%,1400px)}
.em .ma__cta__in{padding:60px 0 140px;gap:140px}
/* the chat column gap steps down before the 1024 breakpoint, as on the sibling page */
@media(max-width:1800px){.em .ma__chat__in{gap:60px}}
@media(max-width:1400px){.em__leader,.em .ma__cta{padding:0 40px}}
@media(max-width:1200px){.em__leader,.em .ma__cta{padding:0 15px}}
@media(max-width:1024px){
  .em .em__leader .ma__agent__in{padding:60px 0 0;gap:20px}
  .em .em__kit__in{padding:60px 0 0;gap:20px}
  .em .ma__agent__in{padding:40px 0 60px;gap:30px}
  .em .ma__cs__in{padding:60px 0}
  .em .ma__chat__in{padding:60px 0;gap:60px}
  .em .ma__powerful__in{padding:60px 0 80px}
  .em .ma__build__in{padding:60px 0}
  .em .em__faq__in{padding:80px 0 60px;gap:30px}
  .em .ma__cta__in{padding:0 0 100px;gap:20px}}
@media(max-width:767px){
  .em .ma__hero__in{padding:30px 0 0}
  .em .ma__logos{padding:60px 0}
  .em .em__leader .ma__agent__in{gap:30px}
  .em .em__kit__in{gap:30px}
  .em .ma__strategy__in{padding:60px 0 0}
  .em .ma__agent__in{padding:70px 0 60px;gap:30px}
  .em .ma__powerful__in{padding:50px 0 60px}
  .em .ma__build__in{padding:60px 0}
  .em .em__faq__in{padding:60px 0 20px;gap:30px}
  .em .ma__cta__in{gap:30px}}

/* ============ ECOMMERCE SEARCH ============
   Every section is a 1110px centred column with no side gutter; the coloured cards
   live on inner elements, not on the sections. */
.es__hero,.es__feat,.es__cq,.es__core,.es__diagram,.es__results,
.es__roi,.es__analysts,.es__partner,.es__res{position:relative;padding:0 15px}
.es__hero__in,.es__logos__in,.es__feat__in,.es__cq__in,.es__core__in,.es__diagram__in,
.es__results__in,.es__roi__in,.es__analysts__in,.es__partner__in,.es__res__in{
  width:100%;max-width:min(100%,1110px);margin-inline:auto;display:flex;flex-direction:column}

.es__h1{font-size:50px;line-height:60px;font-weight:500;color:var(--text);margin:0}
.es__h2{font-size:50px;line-height:60px;font-weight:500;color:var(--text);margin:0}
.es__h3{font-size:36px;line-height:43px;font-weight:500;color:var(--text);margin:0}
.es__h2--center{text-align:center}
.es__lead{font-size:24px;line-height:34px;color:#335366;margin:0}
.es__body{font-size:18px;line-height:29px;color:var(--text);margin:0}
.es__kicker{font-size:20px;line-height:29px;color:#8A9AA5;margin:0;text-align:center}
.es__link{color:var(--cyan);text-decoration:underline}
.es__link:hover{text-decoration:none}
.es__btn{display:inline-flex;align-items:center;justify-content:center;
  font-size:16px;line-height:24px;font-weight:500;padding:13px 35px 11px;border-radius:50px;
  text-decoration:none;white-space:nowrap}
.es__btn--primary{background:#039ACE;color:#fff;border:1px solid #039ACE}
.es__btn--primary:hover{background:#0286b4}
.es__btn--ghost{color:var(--text);border:1px solid #039ACE}
.es__btn--ghost:hover{background:rgba(3,154,206,.08)}

/* 1 · hero */
.es__hero__in{flex-direction:row;align-items:center;padding:100px 0 50px;gap:100px}
.es__hero__l{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.es__hero__r{flex:1 1 0;min-width:0}
.es__hero__r video{display:block;width:100%;height:auto;border-radius:20px}
.es__hero__cta{display:flex;align-items:center;gap:12px;flex-wrap:nowrap}


/* 3-4 · alternating feature rows */
.es__feat__in{flex-direction:row;align-items:center;gap:60px}
.es__feat--flip .es__feat__in{flex-direction:row-reverse}
/* the columns are not 50/50: 418 of copy against a 628 video, 64 apart */
.es__feat__media{flex:1 1 0;min-width:0}
.es__feat__media video{display:block;width:100%;height:auto;border-radius:20px}
.es__feat__txt{flex:0 0 37.66%;min-width:0;display:flex;flex-direction:column;gap:24px;align-items:flex-start}

/* 5 · customer quote */
.es__cq__in{gap:60px}
.es__cq__head{display:flex;flex-direction:column;gap:16px}
.es__cq__row{display:flex;gap:60px;align-items:flex-start}
.es__cq__img{flex:1 1 0;min-width:0}
.es__cq__img img{display:block;width:100%;height:auto;border-radius:20px}
.es__cq__txt{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:24px;align-items:flex-start}
.es__cq__pull{font-size:28px;line-height:37.8px;font-weight:500;color:var(--text);margin:0}
.es__cq__quote{font-size:18px;line-height:28.8px;color:var(--text);margin:0}
.es__cq__name{font-size:14px;line-height:22.4px;font-weight:500;color:var(--cyan);margin:0}
.es__cq__role{font-size:14px;line-height:22.4px;color:#8A9AA5;margin:0}

/* 6-7 · search core + diagram */
.es__core__in{gap:24px;padding:60px 0 0}
.es__core__lead{font-size:24px;line-height:32.4px;color:var(--text);margin:0;text-align:center}
.es__diagram__in{padding:20px 0 60px}
.es__diagram__in img{display:block;width:100%;height:auto}

/* 8 · results card */
.es__results__in{padding:100px 0 0;gap:30px}
.es__results__card{background:#E6F3FE;border-radius:32px;padding:30px 40px;
  display:flex;flex-direction:column;gap:40px}
.es__results__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:40px}
.es__stat{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}
.es__stat__n{font-size:60px;line-height:72px;font-weight:500;color:var(--text);margin:0}
.es__stat__d{font-size:18px;line-height:29px;color:var(--text);margin:0}
.es__stat__logo{display:block;max-width:120px;height:auto;margin-top:12px}

/* 9 · ROI form */
.es__roi__in{gap:40px;padding:60px 0}
.es__roi__card{background:#F2FAFC;border-radius:32px;padding:32px;
  display:flex;flex-wrap:wrap;align-items:center;gap:40px}
.es__roi__img{flex:0 0 auto;width:180px}
.es__roi__img img{display:block;width:100%;height:auto;border-radius:16px}
.es__roi__body{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:16px}
.es__roi__sub{font-size:20px;line-height:29px;color:var(--text);margin:0}
.es__roi__form{display:flex;flex-direction:column;gap:12px}
.es__roi__row{display:flex;gap:16px}
.es__roi__form input[type=text],.es__roi__form input[type=email]{flex:1 1 0;min-width:0;
  height:52px;border:1px solid #CCD4D9;border-radius:100px;background:#fff;
  padding:10px 20px;font:inherit;font-size:16px;color:var(--text)}
.es__roi__opt{display:flex;align-items:center;gap:10px;font-size:16px;line-height:26px;color:var(--text)}
.es__roi__legal{font-size:12px;line-height:14px;color:var(--text);margin:0}
.es__roi__legal a{color:var(--cyan)}
.es__roi__form button{align-self:flex-start;border:0;cursor:pointer;margin-top:8px}

/* 10 · analysts */
.es__analysts__in{gap:40px;padding:0 0 60px}
.es__analysts__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px}
.es__an{display:flex;flex-direction:column;gap:16px;align-items:flex-start}
.es__an__card{width:100%;aspect-ratio:620/260;border-radius:20px;
  display:flex;align-items:center;justify-content:center}
.es__an__card--forrester{background:#00563F}
.es__an__card--gartner{background:#0A2A5E}
.es__an__card img{display:block;max-width:60%;height:auto}
.es__an__t{font-size:22px;line-height:28px;font-weight:500;color:var(--text);margin:0}
.es__an__d{font-size:18px;line-height:29px;color:var(--text);margin:0}

/* 11 · partner testimonials */
.es__partner__in{padding:100px 0 50px;gap:30px}
.es__partner__box{position:relative;display:flex;flex-direction:column;gap:30px}
.es__q__stage{position:relative}
.es__q{display:none;flex-direction:column;align-items:center;gap:24px;
  background:#EAF4FD;border-radius:32px;padding:50px 60px}
.es__q.is-on{display:flex}
.es__q__t{font-size:24px;line-height:34px;font-weight:500;color:var(--text);margin:0;text-align:center}
.es__q__by{display:flex;align-items:center;gap:16px}
.es__q__img{width:48px;height:48px;border-radius:50%;object-fit:cover}
.es__q__who{display:flex;flex-direction:column}
.es__q__name{font-size:14px;line-height:20px;font-weight:500;color:var(--cyan);margin:0}
.es__q__role{font-size:14px;line-height:20px;color:#8A9AA5;margin:0}
.es__q__logo{max-width:140px;height:auto;margin-left:24px;padding-left:24px;border-left:1px solid #D6DDE2}
.es__q__nav{display:flex;align-items:center;justify-content:center;position:relative}
.es__q__dots{display:flex;gap:8px}
.es__q__dot{width:8px;height:8px;border:0;border-radius:50%;background:#CCD4D9;padding:0;cursor:pointer}
.es__q__dot.is-on{background:var(--text)}
.es__q__arrows{position:absolute;right:24px;display:flex;gap:12px}
.es__q__btn{display:flex;align-items:center;justify-content:center;width:41px;height:41px;
  border:0;border-radius:50%;background:#019ACE;color:#fff;cursor:pointer}
.es__q__btn:hover{background:#0286b4}

/* 12 · resources + breadcrumb */
.es__res__in{gap:40px;padding:0 0 60px}
.es__res__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px}
.es__rcard{display:flex;flex-direction:column;align-items:flex-start;gap:16px}
.es__rcard__img{position:relative;display:block;width:100%}
.es__rcard__img img{display:block;width:100%;height:auto;border-radius:20px}
.es__rcard__play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.es__rcard__play img{width:60px;height:60px;border-radius:0}
.es__rcard__tag{display:inline-block;background:#000;color:#fff;border-radius:100px;
  font-size:14px;line-height:20px;font-weight:500;padding:6px 16px}
.es__rcard__t{font-size:22px;line-height:28px;font-weight:500;color:var(--text);margin:0}
/* the crumb's logo and chevron are background images on elements whose own text is
   made transparent -- not <img> tags, which is why a missing asset shows nothing
   upstream rather than a broken-image glyph */
.es__crumbsec{position:relative;display:flex;flex-direction:column;padding:0 15px;margin-top:100px}
.es__crumbsec__in{width:100%;max-width:min(100%,1110px);margin-inline:auto;
  display:flex;flex-direction:column;padding:0 0 20px}
/* type, icons and separator: the shared rank-math block below */
@media(max-width:1024px){.es__crumbsec{margin-top:60px}}

@media(max-width:1024px){
  .es__h1,.es__h2{font-size:30px;line-height:38px}
  .es__h3{font-size:28px;line-height:36px}
  .es__lead,.es__core__lead,.es__q__t{font-size:20px;line-height:29px}
  .es__hero__in{gap:50px;padding:60px 0 40px}
  .es__feat__in,.es__cq__row{gap:40px}
  .es__results__card,.es__q{padding:30px 40px}
  .es__roi__card{padding:32px;gap:20px}
  .es__partner__in,.es__results__in{padding-top:60px}}
@media(max-width:767px){
  .es__hero__in,.es__feat__in,.es__feat--flip .es__feat__in,.es__cq__row{
    flex-direction:column;align-items:stretch}
  .es__hero__in{padding:40px 0 30px;gap:30px}
  .es__feat__in{gap:24px}
  .es__cq__in{gap:30px}
  .es__cq__row{gap:32px}
  .es__cq__pull{font-size:22px;line-height:30px}
  .es__results__grid{grid-template-columns:1fr;gap:26px}
  .es__analysts__grid,.es__res__grid{grid-template-columns:1fr}
  .es__results__card{padding:24px 20px;gap:26px}
  .es__q{padding:28px 20px}
  .es__roi__card{padding:32px;gap:20px}
  .es__roi__card{gap:20px}
  .es__roi__img,.es__roi__body{width:100%;flex:1 1 100%}
  /* the box goes full width but the picture keeps its own 300x239 */
  .es__roi__img img{width:auto;max-width:300px}
  .es__roi__row{flex-direction:column;gap:12px}
  .es__q__by{flex-direction:column;gap:12px}
  .es__q__logo{margin-left:0;padding-left:0;border-left:0}
  .es__q__arrows{position:static;margin-left:16px}
  .es__stat__n{font-size:44px;line-height:52px}}

/* ---- ecommerce-search section rhythm -----------------------------------------
   Read from the page's own post-*.css, not inferred: several sections carry no
   vertical padding at all, and the hero stacks at 1024 rather than 767. */
/* the source opens this section with a 25px spacer widget, not container padding */
.es__core__in{padding:0;gap:30px}
.es__core__in::before{content:"";display:block;height:25px}
.es__diagram__in{padding:0}
.es__roi__in{padding:0;gap:40px}
.es__analysts__in{padding:0;gap:0}
.es__res__in{padding:0;gap:0}
.es__cq__in{gap:60px}
.es__feat__in{gap:64px}
@media(max-width:1024px){
  .es__feat__in{gap:30px}
  .es__hero__cta{justify-content:center}
  .es__hero__in{flex-direction:column;padding:72px 0 32px;gap:32px}
  .es__hero__l,.es__hero__r{width:100%}
  .es__logos__in{padding:60px 0 0;gap:0}
  .es__results__in{padding:60px 0}
  .es__partner__in{padding:26px 0}}
/* Elementor narrows the content cap to 768 for these three between 768 and 1024 */
@media(max-width:1024px) and (min-width:768px){
  .es__hero__in,.es__results__in,.es__partner__in{max-width:min(100%,768px)}}
@media(max-width:767px){
  .es__hero__in{padding:32px 0}
  .es__hero__cta{flex-wrap:wrap}
  .es__feat__in{gap:24px}}

/* ---- ecommerce-search hero: same theme as email-marketing (requested) ---------
   .ma__hero supplies the blurred yellow wash and the un-clipped bleed into the
   logo band; the es__ typography and 1110 column stay as they are. */
.es__hero.ma__hero{padding:0 15px;overflow:visible}
.es__hero .es__hero__in{position:relative;z-index:5}
/* This page's own logo band is shorter than the email one: the section carries the
   gutter, the inner rhythm is 50px top with a 20px gap, and the marks cap at 93px.
   Edge-to-edge at mobile — the shared es__ gutter must not apply, or the 2200px
   slider starts 15px in and pushes the document wider. */
.ma__logos.es__logos{padding:50px 0 0;gap:20px}
/* this page's kicker is 20px/29px title case, not the email band's 12px caps */
.ma__logos.es__logos .ma__logos__kicker{font-size:20px;line-height:29px;font-weight:500;
  letter-spacing:normal;text-transform:none}
.ma__logos.es__logos .ma__logo img{width:100%;height:93px;object-fit:contain;transform:none}
/* Upstream's marks butt straight up against each other -- the breathing room is drawn
   into each 600x250 SVG, so an extra 50px margin doubles it. Items are sized off the
   artwork's 2.4:1 ratio and the track shrinks to fit them. */
.ma__logos.es__logos .ma__logos__slider{width:max-content;margin:0}
.ma__logos.es__logos .ma__logos__track{width:max-content}
.ma__logos.es__logos .ma__logo{flex:0 0 auto;width:222px;margin-right:0}
@media(max-width:1400px){.es__hero.ma__hero{padding:0 15px}}
@media(max-width:1024px){.ma__logos.es__logos .ma__logo img{height:6vw}
  .ma__logos.es__logos .ma__logo{width:14.4vw}}
@media(max-width:767px){.ma__logos.es__logos .ma__logo img{height:58px}
  .ma__logos.es__logos .ma__logo{width:139px}}
@media(max-width:767px){
  .ma__logos.es__logos{padding:60px 0 0;gap:16px}
  .ma__logos.es__logos .ma__logos__kicker{font-size:18px}}
@media(max-width:479px){.ma__logos.es__logos .ma__logo img{height:12.5vw}
  .ma__logos.es__logos .ma__logo{width:30vw}}

/* ---- ecommerce-search inter-section spacing ----------------------------------
   All of this page's space BETWEEN sections is margin-top on the section itself,
   not padding on the inner wrap — which is why an inner-only audit read clean while
   the sections sat flush against each other. */
.es__feat,.es__cq,.es__roi,.es__analysts,.es__res{margin-top:100px}
/* the diagram is a remote image; hold its box so the section keeps its height */
.es__diagram__in img{aspect-ratio:2044/1000}
@media(max-width:1024px){
  .es__feat,.es__cq,.es__roi,.es__analysts,.es__partner{margin-top:60px}
  .es__res{margin-top:40px}}

/* ============ LOOMI MARKETING AGENT ============
   Source: loomi-marketing-agent.html + loomi-marketing-agent_files/post-69037.css.
   Shell: the shared .brcontainer gutter (120/40/15) with a 1720px inner cap, except
   the FAQ, which is a plain 15px-gutter section with an 1110px inner (as upstream).
   The page's own custom CSS is scoped to body.p-lm here, because site.css is shared
   by twelve pages where post-69037.css was loaded by one. */
.p-lm{background:#fff}
/* upstream's .page-content — the only element that actually clips the bleeding glows */
.lm__page{overflow:hidden}

.lm__hero,.lm__steps,.lm__panel,.lm__stats,.lm__prompt,.lm__tabs,
.lm__ai,.lm__know,.lm__deep,.lm__multi,.lm__live{position:relative;padding:0 120px}
.lm__hero__in,.lm__steps__in,.lm__panel__in,.lm__stats__in,.lm__prompt__in,.lm__tabs__in,
.lm__ai__in,.lm__know__in,.lm__deep__in,.lm__multi__in,.lm__live__in{
  position:relative;width:100%;max-width:1720px;margin-inline:auto;
  display:flex;flex-direction:column}
.lm__hero,.lm__steps,.lm__panel,.lm__stats,.lm__prompt,.lm__tabs,.lm__ai,.lm__live{background:#000}
.lm__ai,.lm__multi,.lm__live{overflow:hidden}
@media(max-width:1400px){
  .lm__hero,.lm__steps,.lm__panel,.lm__stats,.lm__prompt,.lm__tabs,
  .lm__ai,.lm__know,.lm__deep,.lm__multi,.lm__live{padding:0 40px}}
@media(max-width:1200px){
  .lm__hero,.lm__steps,.lm__panel,.lm__stats,.lm__prompt,.lm__tabs,
  .lm__ai,.lm__know,.lm__deep,.lm__multi,.lm__live{padding:0 15px}}

/* the two gradient text fills, verbatim from the page's custom CSS */
.p-lm .gradient{background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%);
  background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.p-lm .gmtext{background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%);
  background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}

/* type ladders. h1/h2 hold 50/60 to 1024 and drop to 30/38; the display size lives on
   an inner <span> whose em multiplier steps by viewport, h1 four times and h2 once. */
.lm__h1{font-size:50px;line-height:60px;font-weight:500;color:#fff;margin:0;text-wrap:balance}
.lm__h2{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}
.lm__h2--inv{color:#fff}
.lm__h1 span,.lm__h2 span{font-size:1.6em;line-height:1.15}
@media(max-width:1800px){.lm__h1 span{font-size:1.25em}}
@media(max-width:1600px){.lm__h1 span{font-size:1.3em}}
@media(max-width:1400px){.lm__h1 span{font-size:1.4em}}
@media(max-width:1024px){.lm__h1,.lm__h2{font-size:30px;line-height:38px}}
@media(max-width:767px){.lm__h1 span,.lm__h2 span{font-size:1em}}
.lm__h3{font-size:36px;line-height:43px;font-weight:500;color:#fff;margin:0}
.lm__h3--dark{color:#000}
.lm__body{font-size:18px;line-height:29px;color:var(--text);margin:0}
.lm__body--inv{color:#EAFDFF}
@media(max-width:1024px){.lm__h3{font-size:24px;line-height:30px}}

/* 1 · hero — the headline column is width:100% capped at 1000px, the lead column a
   fixed 520px; both shrink, which is what produces the 781/339 split at 1440. */
.lm__hero__in{flex-direction:row;justify-content:space-between;align-items:flex-start;
  gap:100px;padding:100px 0 60px}
.lm__hero__l{position:relative;z-index:5;width:100%;max-width:1000px;
  display:flex;flex-direction:column;align-items:flex-start;gap:30px}
.lm__hero__r{position:relative;z-index:5;width:520px;flex:0 1 auto;
  display:flex;flex-direction:column;align-items:flex-start;gap:30px;
  margin-top:50px;padding-top:10px}
.lm__kicker{font-size:16px;line-height:16px;font-weight:500;text-transform:uppercase;margin:0}
.lm__hero__cta{display:flex;flex-direction:row;align-items:center;gap:20px}
.lm__hero__cta .br-cta{flex:none}
.lm__hero__note{font-size:12px;line-height:18px;color:#A4B1B2;margin:0}
.lm__hero__lead{font-size:18px;line-height:29px;color:#fff;margin:0}
/* the blue/green wash sits below and right of centre, rotated a half-turn. It keeps
   pointer-events:none: upstream's z-index:1 would otherwise sit over the CTA. */
.lm__hero::after{content:"";pointer-events:none;position:absolute;z-index:1;
  left:calc(50% + 400px);top:500px;width:1600px;height:300px;transform:rotate(-179.965deg);
  background:linear-gradient(250deg,#019ACE 28.92%,#01CE7F 50.56%);filter:blur(200px)}
@media(max-width:1800px){.lm__hero__in{gap:80px}}
@media(max-width:1400px){
  .lm__hero__in{flex-direction:column;align-items:center;gap:0}
  .lm__hero__l{align-items:center;justify-content:center}
  .lm__hero__l .lm__h1{text-align:center}
  .lm__hero__cta{justify-content:center}
  .lm__hero__r{width:100%;max-width:800px;align-items:center;text-align:center}}
@media(max-width:1024px){
  .lm__hero__in{padding:50px 0 30px}
  .lm__hero__r{margin-top:20px}}
@media(max-width:767px){
  .lm__hero__in{padding:40px 0}
  /* Elementor's --flex-wrap-mobile: the CTA and its note stack once they stop fitting */
  .lm__hero__cta{flex-wrap:wrap}
  .lm__hero__r{gap:20px;margin-top:20px}}
@media(max-width:580px){.lm__hero__lead{font-size:15px;line-height:22.5px}}

/* 2 · the three numbered steps. The 260px row gap is only above 1720. */
.lm__steps__in{gap:30px;padding:0 0 60px}
.lm__steps__row{position:relative;z-index:5;display:flex;flex-direction:row;
  justify-content:space-between;align-items:flex-start;gap:260px}
.lm__step{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:20px}
.lm__step .lm__h3{font-size:24px;line-height:34px}
.lm__step .lm__body{font-size:16px;line-height:26px}
/* the numbered/iconed circles are a 1px gradient ring drawn with a mask-composite
   cut-out, not a border-image -- upstream's ring keeps a transparent middle. */
.lm__ring{position:relative;flex:none;width:66px;aspect-ratio:1/1;border-radius:50%;
  display:flex;align-items:center;justify-content:center}
.lm__ring--sm{width:40px}
.lm__ring::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:var(--gm-coin-ring);   /* the monogram's rim; was Bloomreach's #0461C8 -> #14A1D0 */
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.lm__ring img{display:block;width:24px;height:24px}
.lm__step__n{font-size:18px;line-height:18px;font-weight:500;color:#fff;margin:0}
@media(max-width:1720px){.lm__steps__row{gap:40px}}
@media(max-width:1024px){.lm__step .lm__h3{font-size:18px;line-height:29px}}
@media(max-width:767px){.lm__steps__row{flex-wrap:wrap}.lm__step{flex:none;width:100%}}

/* 3 · the campaign-building panel video */
.lm__panel__in{flex-direction:row;gap:0;padding:0}
.lm__panel__video{display:block;width:100%;aspect-ratio:1720/820;object-fit:cover;border-radius:24px}
@media(max-width:1024px){.lm__panel__video{aspect-ratio:1720/1020}}

/* 4 · the proof strip. The separators are borders between the items above 1024 and
   a centred 80px rule underneath each item below it. */
.lm__stats__in{flex-direction:row;gap:0;padding:40px 0 0}
.lm__stats__row{position:relative;z-index:5;width:100%;display:flex;
  align-items:flex-start;justify-content:center}
.lm__stats__row > div{position:relative;width:auto;display:flex;align-items:center;
  justify-content:flex-start;gap:10px;color:#fff;font-size:20px}
.lm__stats__row > div:not(:last-child){padding-right:40px;border-right:1px solid #606060;margin-right:40px}
.lm__stats__row strong{font-size:1.1em;font-weight:400;white-space:nowrap}  /* a flex item: a two-word label wrapped where the template's "2.4x" never could */
@media(max-width:1199px){
  .lm__stats__row > div{font-size:16px}
  .lm__stats__row > div:not(:last-child){padding-right:20px;margin-right:20px}}
@media(max-width:1024px){
  .lm__stats__row{flex-direction:column;align-items:center}
  .lm__stats__row > div:not(:last-child){padding-right:0;border-right:none;margin-right:0;
    padding-bottom:20px;margin-bottom:20px}
  .lm__stats__row > div:not(:last-child)::after{content:"";position:absolute;bottom:0;left:50%;
    width:80px;height:1px;background:#606060;transform:translateX(-50%)}}
@media(max-width:767px){.lm__stats__in{padding:30px 0 0}}

/* 5 · one prompt, one completely autonomous campaign */
.lm__prompt__in{gap:50px;align-items:center;justify-content:flex-start;padding:96px 0 0}
.lm__prompt__h{position:relative;z-index:5;max-width:1060px;text-align:center}
.lm__prompt__lead{position:relative;z-index:5;max-width:840px;
  font-size:16px;line-height:26px;color:#fff;text-align:center;margin:0}
@media(max-width:767px){.lm__prompt__in{padding:60px 0 0}}

/* 6 · the three-tab product panel. Component CSS is upstream's <style> block, kept
   under its own class names so the markup reads the same as the source. */
.lm__tabs__in{gap:40px;padding:56px 0 0}
.a-tabs{position:relative;z-index:5;display:flex;flex-direction:column;gap:0;
  width:100%;margin:0 auto;color:#fff}
.a-tabs-tabs{position:relative;z-index:10;display:flex;align-self:flex-start;gap:5px;
  padding:5px;background:#000;border-radius:200px;margin:0 auto}
.a-tabs-tab{position:relative;cursor:pointer;display:flex;align-items:center;
  justify-content:center;gap:16px;width:270px;height:70px;border:0;background:none;
  font:inherit;font-size:16px;font-weight:500;line-height:1.2;color:#fff;text-align:center;
  padding:12px 24px 10px;
  transition:opacity 200ms ease-in-out,background 100ms ease-in-out,color 100ms ease-in-out}
.a-tabs-tab::after{content:"";position:absolute;z-index:5;top:100%;left:0;width:100%;height:1px;
  background:rgba(255,255,255,.2);transform-origin:center bottom;transition:background 200ms ease-in-out}
.a-tabs-tab:hover::after{transform:scale(1,2);background:rgba(255,255,255,.6)}
.a-tabs-tab.active::after{transform:scale(1,2);background:#0461C8}
.a-tabs-contents{position:relative;z-index:10;aspect-ratio:1200/720}
.a-tabs-content{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;
  opacity:0;transition:opacity 600ms ease-out}
.a-tabs-content.active{pointer-events:auto;opacity:1}
.a-tabs-slide{position:relative;width:100%;height:auto;aspect-ratio:16/7;margin:120px 0}
.a-tabs-slide-video{position:absolute;top:50%;left:800px;height:100%;
  aspect-ratio:1180/740;transform:translateY(-50%)}
.a-tabs-slide-video video{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;
  object-fit:cover;border-radius:20px;opacity:0;transform:translateX(30px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.a-tabs-slide-video video.active{pointer-events:auto;opacity:1;transform:translateX(0)}
.a-tabs-slide-text{position:relative;max-width:600px;height:100%;display:flex;
  flex-direction:column;align-items:flex-start;justify-content:center}
.a-tabs-slide-text__copy{pointer-events:none;position:absolute;top:50%;left:0;width:100%;
  display:flex;flex-direction:column;gap:24px;opacity:0;
  transform:translateY(-50%) translateX(-30px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.a-tabs-slide-text__copy.active{pointer-events:auto;opacity:1;transform:translateY(-50%) translateX(0)}
.a-tabs-slide-text__copy h3{font-size:36px;line-height:43px;font-weight:500;color:#fff;margin:0}
.a-tabs-slide-text__copy p{font-size:16px;line-height:1.6;color:#fff;margin:0}
.a-tabs-slide-arrows{position:absolute;left:0;bottom:0;display:flex;gap:24px;width:100%;margin-top:40px}
.a-tabs-slide-btn-prev,.a-tabs-slide-btn-next{cursor:pointer;display:flex;align-items:center;
  justify-content:center;width:64px;height:64px;border-radius:50%;margin:0;padding:0;
  color:#fff;background:#000;border:1px solid #0179F8;
  transition:transform 200ms ease-in-out,opacity 200ms ease-in-out}
.a-tabs-slide-btn-prev:hover,.a-tabs-slide-btn-next:hover{transform:scale(1.1)}
.a-tabs-slide-btn-prev[disabled],.a-tabs-slide-btn-next[disabled]{cursor:default;opacity:.5;pointer-events:none}
@media(max-width:1800px){
  .a-tabs-slide{margin:70px 0}
  .a-tabs-slide-text{max-width:500px}
  .a-tabs-slide-video{left:600px}
  .a-tabs-slide-arrows{gap:16px;margin-top:20px}
  .a-tabs-slide-btn-prev,.a-tabs-slide-btn-next{width:48px;height:48px}}
@media(max-width:1500px){.a-tabs{max-width:calc(1240px + 80px);padding-left:40px;padding-right:40px}}
@media(max-width:1340px){.a-tabs{max-width:calc(1240px + 40px);padding-left:20px;padding-right:20px}}
@media(max-width:1200px){.a-tabs-tab{font-size:14px;padding:10px 20px 8px}
  .a-tabs-slide-text__copy p{font-size:14px}}
@media(max-width:1024px){.a-tabs-slide-text__copy h3{font-size:24px;line-height:30px}}
@media(max-width:1199px){
  .a-tabs{max-width:100%;padding-left:0;padding-right:0}
  .a-tabs-tabs{order:20;align-self:auto;flex-wrap:wrap;justify-content:center;gap:8px;
    width:100%;padding:0;border-radius:0;background:none;margin:0 0 20px}
  .a-tabs-tab{white-space:nowrap;width:auto;height:40px;border-radius:100px;opacity:.7}
  .a-tabs-tab.active{opacity:1}
  .a-tabs-tab::after{content:none}
  .a-tabs-tab::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
    background:#fff;
    -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
    mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
    -webkit-mask-composite:xor;mask-composite:exclude}
  .a-tabs-tab.active::before{background:linear-gradient(256deg,#0461C8 19.75%,#14A1D0 69.08%)}
  .a-tabs-contents{order:30}
  .a-tabs-content{height:auto}
  .a-tabs-slide{margin:0}
  .a-tabs-slide-text{max-width:calc(46vw - 20px)}
  .a-tabs-slide-video{left:48vw}
  .a-tabs-slide-arrows{left:50%;transform:translateX(-50%);bottom:-80px;width:auto}}
@media(max-width:768px){
  .a-tabs-slide-text{width:100%;max-width:100%;margin-top:20px}
  .a-tabs-slide-arrows{position:relative;transform:none;left:auto;bottom:-10px}}
@media(max-width:767px){
  .a-tabs-tab{height:30px}
  .a-tabs-contents{aspect-ratio:auto}
  .a-tabs-slide-text__copy{top:0;transform:translateY(0) translateX(-30px)}
  .a-tabs-slide-text__copy.active{transform:translateY(0) translateX(0)}
  .a-tabs-slide-video{position:relative;top:0;left:0;width:100%;height:auto;transform:none}}

/* 7 · the $580K figure, drawn inside an outlined "AI". The mark keeps its 663x533
   height attribute while CSS drives the width, so it letterboxes rather than scales. */
.lm__ai__in{flex-direction:row;justify-content:space-between;align-items:center;
  gap:60px;padding:80px 0 200px}
.lm__ai::after{content:"";pointer-events:none;position:absolute;z-index:1;
  left:calc(50% + 350px);top:550px;width:1600px;height:300px;
  background:linear-gradient(250deg,rgba(1,154,206,.8) 28.92%,rgba(1,206,127,.8) 50.56%);
  filter:blur(255px)}
.lm__ai__l{position:relative;z-index:5;width:100%;display:flex;flex-direction:column;gap:30px}
.lm__ai__mark{display:block;margin:0 auto;width:100%}
.lm__ai__box{position:absolute;z-index:5;top:50%;left:50%;width:100%;max-width:480px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  transform:translate(-38%,-50%)}
.lm__ai__box::after{content:"";position:absolute;z-index:-1;top:50%;left:50%;
  width:100%;height:110%;background:#000;border-radius:140px;filter:blur(40px);
  transform:rotate(-4.633deg) translate(-50%,-60%)}
.lm__ai__n{font-size:120px;line-height:1;font-weight:500;margin:0}
.lm__ai__sub{font-size:16px;line-height:26px;color:#fff;text-align:center;text-wrap:balance;margin:0}
.lm__ai__r{position:relative;z-index:5;width:100%;display:flex;flex-direction:column;gap:30px}
.lm__ai__q{width:100%;max-width:700px;margin:0 auto;display:flex;flex-direction:column;gap:48px}
.lm__ai__stars{display:block;margin:0 auto}
.lm__ai__quote{font-size:24px;line-height:34px;font-weight:500;color:#fff;text-align:center;margin:0}
.lm__ai__person{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:12px}
.lm__ai__person img{display:block;width:64px;height:64px;object-fit:cover;border-radius:50%}
.lm__ai__person p{font-size:14px;line-height:1.4;color:#fff;font-weight:400;margin:0}
.lm__ai__person strong{display:block;color:#0179F8;font-weight:400}
@media(max-width:1199px){.lm__ai__n{font-size:80px}}
@media(max-width:1024px){.lm__ai__quote{font-size:18px;line-height:29px}
  .lm__ai__q{gap:24px}}
@media(max-width:767px){
  .lm__ai__in{flex-wrap:wrap}
  .lm__ai__l,.lm__ai__r{width:100%}
  .lm__ai__n{font-size:18vw}
  .lm__ai__mark{height:auto}
  .lm__ai__box{max-width:100%;transform:translate(-50%,-50%)}}

/* 8 · everything you need to know */
.lm__know__in{gap:80px;padding:120px 0 0}
.lm__know__row{display:flex;flex-direction:row;gap:40px}
.lm__kcard{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
/* the card art is a 553x430 medium_large file at its natural size, not stretched:
   above a 553px column it stops growing, which is 143px of card height at 767. */
.lm__kcard img{display:block;align-self:flex-start;width:auto;max-width:100%;height:auto;border-radius:20px}
@media(max-width:767px){.lm__know__row{flex-wrap:wrap}.lm__kcard{flex:none;width:100%}}

/* 9 · deep personalization + the five auto-advancing use cases */
.lm__deep__in{gap:0;align-items:center;justify-content:flex-start;padding:140px 0 0}
.lm__deep__head{width:860px;max-width:100%;display:flex;flex-direction:column;gap:50px}
.lm__deep__h{font-size:60px;line-height:72px;font-weight:500;color:#000;text-align:center;margin:0}
.lm__deep__lead{max-width:660px;margin:0 auto;font-size:20px;line-height:29px;
  color:var(--text);text-align:center}
@media(max-width:1024px){
  .lm__deep__in{padding:80px 0 0}
  .lm__deep__h{font-size:36px;line-height:45px}
  .lm__deep__lead{font-size:18px}}
@media(max-width:767px){.lm__deep__in{padding:40px 0 0}}

.a-slider{position:relative;width:100%;height:auto;aspect-ratio:18/7;margin-top:50px;
  display:flex;flex-direction:column;align-items:center;justify-content:center}
.a-slider__pagi{position:absolute;z-index:5;top:50%;left:0;width:80px;height:auto;
  display:flex;flex-direction:column;align-items:center;gap:10px;transform:translateY(-50%)}
.a-slider__pagi__dot{cursor:pointer;position:relative;width:20px;height:20px;
  border:0;background:none;padding:0;border-radius:50%}
.a-slider__pagi__dot::before{content:"";position:absolute;top:50%;left:50%;width:10px;height:10px;
  border-radius:50%;background:#000;transform-origin:0 0;
  transform:scale(.4) translate(-50%,-50%);transition:transform 300ms ease-in-out}
.a-slider__pagi__dot.active::before,.a-slider__pagi__dot:hover::before{transform:scale(1) translate(-50%,-50%)}
.a-slider__pagi__num{font-size:18px;color:var(--text)}
.a-slider__content{position:relative;width:calc(100% - 240px);height:100%;
  display:flex;align-items:center;justify-content:center}
.a-slider__item{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:40px;
  color:#000;font-size:16px;line-height:1;text-align:center;padding-bottom:60px}
.a-slider__item.active{pointer-events:auto}
.a-slider__item__icon{width:72px;height:auto;aspect-ratio:1/1;font-size:0;border-radius:50%;
  margin-bottom:8px;opacity:0;transform:translateY(-40px);
  transition:opacity 500ms ease-in-out 100ms,transform 500ms ease-in-out 100ms}
.a-slider__item__icon img{display:block;width:100%;height:auto;aspect-ratio:1/1;border-radius:50%}
.a-slider__item strong{font-size:78px;line-height:1.1;max-width:1200px;text-wrap:balance}
.a-slider__item p{max-width:540px;line-height:1.66}
.a-slider__item strong,.a-slider__item p{margin:0 auto;opacity:0;transform:translateY(40px);
  transition:opacity 500ms ease-in-out,transform 500ms ease-in-out}
.a-slider__item.active .a-slider__item__icon,
.a-slider__item.active strong,.a-slider__item.active p{opacity:1;transform:translate(0)}
.a-slider__bar{position:absolute;bottom:0;left:50%;width:100vw;height:10px;transform:translateX(-50%)}
.a-slider__bar span{display:block;width:0;height:100%;background:#0461C8}
@media(max-width:1400px){.a-slider{aspect-ratio:16/7}
  .a-slider__item{gap:20px}
  .a-slider__item strong{font-size:64px}}
@media(max-width:1199px){.a-slider__item__icon{width:52px}
  .a-slider__item strong{font-size:48px}}
@media(max-width:1024px){.a-slider{aspect-ratio:2/1}}
@media(max-width:767px){
  .a-slider{height:500px;aspect-ratio:auto;margin-top:10px}
  .a-slider__pagi{flex-direction:row;flex-wrap:wrap;justify-content:center;
    width:100%;top:auto;bottom:0;transform:none}
  .a-slider__pagi__num{width:100%;font-size:16px;text-align:center}
  .a-slider__content{width:100%}
  .a-slider__item{font-size:14px;padding-bottom:80px}
  .a-slider__item strong{font-size:32px}
  .a-slider__item__icon{margin-bottom:4px;transform:translateY(-20px)}
  .a-slider__item strong,.a-slider__item p{transform:translateY(20px)}}

/* 10 · multiply your output — the shared .ma__cs customer-stories component, on this
   page's own white section rather than marketing-automation's pink one. */
.lm__multi{background:#fff}
.lm__multi__in{gap:60px;padding:140px 0}
.lm__multi__h{text-align:center;margin-bottom:-20px}
.lm__multi__lead{max-width:900px;margin:0 auto;font-size:18px;line-height:29px;
  color:var(--text);text-align:center}
.lm__multi .ma__cs__wrap{gap:60px}
@media(max-width:1024px){.lm__multi__in{padding:60px 0}
  .lm__multi .ma__cs__wrap{gap:30px}}

/* 11 · see it live + request a demo */
.lm__live__in{gap:96px;align-items:center;justify-content:flex-start;padding:160px 0}
.lm__live__head{position:relative;z-index:5;width:100%;max-width:1280px;
  display:flex;flex-direction:column;gap:40px}
.lm__live__head::before{content:"";pointer-events:none;position:absolute;z-index:1;
  top:-50%;left:110%;width:1300px;height:1100px;border-radius:50%;
  background:linear-gradient(269deg,#0EA5FF 42.21%,#00C2A8 55.13%);  /* himalayan blue -> peacock teal, the green glow; was #019ACE -> #01CE7F */
  opacity:.6;filter:blur(270px);transform:translate(-50%,-50%)}
.lm__live__h{position:relative;z-index:5;text-align:center}
.lm__live__lead{position:relative;z-index:5;max-width:780px;margin:0 auto;
  font-size:20px;line-height:29px;color:#fff;text-align:center;text-wrap:balance}
.lm__live__row{position:relative;z-index:5;width:100%;display:flex;flex-direction:row;
  justify-content:space-between;align-items:flex-start;gap:260px}
.lm__live__row::before{content:"";pointer-events:none;position:absolute;z-index:1;
  top:80%;left:-10%;width:700px;height:550px;border-radius:50%;
  background:linear-gradient(269deg,#0461C8 42.21%,#0EA5FF 55.13%);  /* the blue glow; was #019ACE -> #01CE7F */
  opacity:.6;filter:blur(210px);transform:translate(-50%,-50%)}
.lm__lcard{position:relative;z-index:5;flex:1 1 0;min-width:0;display:flex;flex-direction:column;
  align-items:flex-start;gap:20px}
.lm__demo{position:relative;z-index:5;width:100%;max-width:1200px;display:flex;
  flex-direction:row;justify-content:space-evenly;align-items:center;gap:100px}
.lm__demo__l{width:52%;display:flex;flex-direction:column;gap:24px}
.lm__demo__img{display:block;width:152px;height:auto;border-radius:8px}
.lm__demo__h{font-size:50px;line-height:60px;font-weight:500;color:#fff;margin:0}
.lm__demo__p{font-size:16px;line-height:26px;color:#fff;margin:0}
.lm__demo__card{width:48%;display:flex;flex-direction:column;justify-content:center;
  align-items:flex-start;padding:32px;border-radius:20px;
  background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.25)}
@media(max-width:1720px){.lm__live__row{gap:40px}}
@media(max-width:1024px){
  .lm__live__in{gap:60px}
  .lm__live__head::before{opacity:.3}
  .lm__demo{gap:30px}
  .lm__demo__h{font-size:30px;line-height:38px}
  .lm__live__lead{font-size:18px}}
@media(max-width:767px){
  .lm__live__in{gap:40px;padding:60px 0}
  .lm__live__head{gap:10px}
  .lm__live__row{flex-wrap:wrap}
  .lm__lcard{flex:none;width:100%}
  .lm__demo{flex-wrap:wrap}
  .lm__demo__l,.lm__demo__card{width:100%}}

/* the demo form. Upstream is a HubSpot embed: white 16px-radius inputs in a two-up
   grid, the label floating over the field as a placeholder, a pill submit. */
.lm__form{width:100%;display:flex;flex-direction:column;gap:8px}
.lm__form__row{display:flex;gap:8px}
.lm__f{position:relative;flex:1;min-width:0}
.lm__f input,.lm__f textarea{width:100%;box-sizing:border-box;font:inherit;font-size:16px;
  line-height:26px;color:var(--text);background:#fff;border:1px solid #CCD4D9;
  border-radius:16px;padding:10px 16px}
.lm__f textarea{resize:vertical;display:block}
.lm__f label{pointer-events:none;position:absolute;top:11px;left:16px;right:16px;
  font-size:16px;line-height:26px;color:#99A9B3;transition:opacity 150ms ease-in-out}
.lm__f input:focus + label,.lm__f input:not(:placeholder-shown) + label,
.lm__f textarea:focus + label,.lm__f textarea:not(:placeholder-shown) + label{opacity:0}
/* the consent block is a plain block upstream: an 18px checkbox row with a 24px
   bottom margin, then the 12px/14px legal paragraph -- 98px in total. */
.lm__consent{display:block}
.lm__cbx{display:flex;align-items:center;gap:8px;margin-bottom:24px;
  font-size:12px;line-height:14px;color:rgba(255,255,255,.8)}
.lm__cbx input{flex:none;width:18px;height:18px;margin:0;accent-color:#0EA5FF}
.lm__legal{font-size:12px;line-height:14px;color:rgba(255,255,255,.8);margin:0}
.lm__legal a{color:#0EA5FF}
/* no fixed height: at 320 the label wraps to two lines and upstream's button grows
   from 48 to 74, which is the whole of the section's height at that width. */
.lm__submit{width:100%;cursor:pointer;border:0;border-radius:99px;
  font:inherit;font-size:16px;font-weight:500;line-height:26px;color:#050505;
  background:linear-gradient(180deg,#FFD95A 0%,#F6B024 100%);   /* the site's gold CTA; was #00ACE5 */
  box-shadow:0 7px 20px rgba(246,176,36,.24),inset 0 1px 0 rgba(255,255,255,.28);
  padding:11px 32px;margin-top:10px;transition:background 200ms ease-in-out,box-shadow 220ms ease}
.lm__submit:hover{background:linear-gradient(180deg,#FFE07A 0%,#E7A51E 100%);
  box-shadow:0 10px 26px rgba(246,176,36,.30),inset 0 1px 0 rgba(255,255,255,.34)}
/* the embed drops to one field per row at 1024 and grows the controls 2px; measured on
   the source at 1199/1100/1050/1025 (all still two-up) and 1024 (stacked). */
@media(max-width:1024px){
  .lm__form__row{flex-wrap:wrap}
  .lm__form__row .lm__f{flex:1 1 100%}
  .lm__f input,.lm__f textarea{font-size:14px;line-height:20px;border-radius:10px;padding:14px 16px}
  .lm__f label{top:15px;font-size:14px;line-height:20px}}

/* 12 · FAQ — the shared .br-faq component in this page's own 1110/850 column */
.lm__faq{position:relative;padding:0 15px}
.lm__faq__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column;align-items:center;gap:60px;padding:100px 0 140px}
.lm__faq__h{max-width:600px;font-size:60px;line-height:72px;font-weight:500;
  color:#000;text-align:center;margin:0}
.lm__faq .br-faq{width:850px;max-width:100%}
.lm__faq .br-faq-answer{color:#333}
.lm__faq .br-faq-answer a{color:var(--cyan)}
@media(max-width:1024px){
  .lm__faq__in{gap:30px;padding:80px 0 60px}
  .lm__faq__h{font-size:36px;line-height:45px}}
@media(max-width:767px){.lm__faq__in{padding:60px 0 20px}}

/* ============ LOOMI SHOPPING AGENT ============
   Source: loomi-shopping-agent.html + loomi-shopping-agent_files/post-31622.css
   (page id 31622 — still at the ground-truth ROOT, not in completed/).
   Shell: the shared .brcontainer gutter (120/40/15) with a 1720px inner cap on
   sections 1-11; the FAQ is a plain 15px-gutter section with an 1110px inner, as
   upstream. The page's own custom CSS is scoped to body.p-ls, because site.css is
   shared by thirteen pages where post-31622.css was loaded by one.
   Reused wholesale, each verified against THIS page's own source: .a-tabs (both
   panels), .ma__cs__* (bloomreach-case-studies.css is byte-identical to the
   loomi-marketing-agent copy), .br-faq (bloomreach-faqs.css likewise), .br-cta,
   and the HubSpot form component .lm__form/.lm__f/.lm__consent/.lm__submit — the
   same embed with the same 16px radius, 11px label offset and #00ACE5 submit. */
.p-ls{background:#fff}
/* upstream's .page-content — the only element that clips the bleeding glows */
.ls__page{overflow:hidden}

.ls__hero,.ls__video,.ls__stats,.ls__cap,.ls__conv,.ls__tabs,.ls__assoc,
.ls__cs,.ls__connect,.ls__road{position:relative;padding:0 120px}
.ls__hero__in,.ls__video__in,.ls__stats__in,.ls__cap__in,.ls__conv__in,.ls__tabs__in,
.ls__assoc__in,.ls__cs__in,.ls__connect__in,.ls__road__in{
  position:relative;width:100%;max-width:1720px;margin-inline:auto;
  display:flex;flex-direction:column}
.ls__hero,.ls__video,.ls__stats,.ls__cap,.ls__conv,.ls__tabs,.ls__assoc,.ls__road{background:#000}
.ls__cs,.ls__connect{background:#fff}
.ls__cs,.ls__connect,.ls__road{overflow:hidden}
@media(max-width:1400px){
  .ls__hero,.ls__video,.ls__stats,.ls__cap,.ls__conv,.ls__tabs,.ls__assoc,
  .ls__cs,.ls__connect,.ls__road{padding:0 40px}}
@media(max-width:1200px){
  .ls__hero,.ls__video,.ls__stats,.ls__cap,.ls__conv,.ls__tabs,.ls__assoc,
  .ls__cs,.ls__connect,.ls__road{padding:0 15px}}

/* the two gradient text fills, verbatim from the page's custom CSS */
.p-ls .gradient{background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%);
  background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.p-ls .gradient2{background:linear-gradient(282deg,#0179F8 0%,#00B1DA 100%);
  background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}

/* type: kit-13's h1 60/72, h2 50/60, h3 36/43, each stepping once at 1024, plus the
   page's own em ladder on the display <span> inside an h1/h2. */
.ls__h1{font-size:60px;line-height:72px;font-weight:500;color:#fff;margin:0;text-wrap:balance}
.ls__h2{font-size:50px;line-height:60px;font-weight:500;color:#fff;margin:0}
.ls__h2--dark{color:#000}
.ls__h2 span{font-size:1.6em;line-height:1.15}
@media(max-width:1024px){.ls__h1{font-size:36px;line-height:45px}
  .ls__h2{font-size:30px;line-height:38px}}
@media(max-width:767px){.ls__h2 span{font-size:1em}}
.ls__h3{font-size:36px;line-height:43px;font-weight:500;color:#fff;margin:0}
.ls__h3--dark{color:#000}
@media(max-width:1024px){.ls__h3{font-size:24px;line-height:30px}}

/* 1 · hero — 940/520 columns that shrink to 721/399 at 1440 against the 80px gap.
   This page's hero :after carries NO content declaration upstream, so the blue/green
   wash the loomi-marketing-agent hero paints does not exist here. Do not add it. */
.ls__hero__in{flex-direction:row;justify-content:flex-start;align-items:flex-start;
  gap:100px;padding:100px 0 60px}
.ls__hero__l{position:relative;z-index:5;width:940px;
  display:flex;flex-direction:column;align-items:flex-start;gap:30px}
.ls__hero__r{position:relative;z-index:5;width:520px;
  display:flex;flex-direction:column;align-items:flex-start;gap:30px;padding-top:10px}
.ls__kicker{font-size:16px;line-height:16px;font-weight:500;text-transform:uppercase;margin:0}
.ls__hero__cta{display:flex;flex-direction:row;gap:16px}
/* the buttons shrink and their labels wrap, as upstream's widget wrappers do:
   with flex:none the 336px tour button ran 46px off a 320px screen. */
.ls__hero__cta .br-cta{max-width:100%}
.ls__lead{font-size:18px;line-height:29px;color:#EAFDFF;margin:0}
.ls__lead strong{color:#fff;font-weight:500}
@media(max-width:1800px){.ls__hero__in{gap:80px}}
@media(max-width:1400px){
  .ls__hero__in{flex-direction:column;align-items:center;gap:0}
  .ls__hero__l{align-items:center;justify-content:center}
  .ls__hero__l .ls__h1{text-align:center}
  .ls__hero__cta{justify-content:center}
  .ls__hero__r{width:100%;max-width:800px;align-items:center;text-align:center}}
@media(max-width:1024px){
  .ls__hero__in{padding:50px 0 30px}
  .ls__hero__l{width:100%}
  .ls__hero__cta{justify-content:center;align-items:center}
  .ls__hero__r{margin-top:20px}}
@media(max-width:767px){
  .ls__hero__in{padding:40px 0}
  /* Elementor's --flex-wrap-mobile on the CTA row */
  .ls__hero__cta{flex-wrap:wrap}
  .ls__hero__r{gap:20px;margin-top:20px}}
@media(max-width:580px){.ls__lead{font-size:15px;line-height:22.5px}}

/* 2 · the hero video. Elementor's .elementor-video is object-fit:cover; a bare
   <video> defaults to contain and pillarboxes a 16:9 file in this 1720/820 box. */
.ls__video__in{flex-direction:row;gap:0;padding:0}
.ls__video__v{position:relative;z-index:5;display:block;width:100%;
  aspect-ratio:1720/820;object-fit:cover;border-radius:24px}
@media(max-width:1024px){.ls__video__v{aspect-ratio:1720/1020}}

/* 3 · the three-up proof strip — upstream's .stats3, dividers included */
.ls__stats__in{flex-direction:row;gap:0;padding:40px 0 0}
.ls__stats__row{width:100%;display:flex;align-items:flex-start;justify-content:center}
.ls__stats__row > div{position:relative;display:flex;align-items:center;
  justify-content:flex-start;gap:10px;color:#fff;font-size:20px}
.ls__stats__row > div:not(:last-child){padding-right:40px;
  border-right:1px solid #606060;margin-right:40px}
.ls__stats__row strong{font-size:1.1em;font-weight:400}
@media(max-width:1199px){
  .ls__stats__row > div{font-size:16px}
  .ls__stats__row > div:not(:last-child){padding-right:20px;margin-right:20px}}
@media(max-width:1024px){
  .ls__stats__row{flex-direction:column;align-items:center}
  .ls__stats__row > div:not(:last-child){padding-right:0;border-right:none;margin-right:0;
    padding-bottom:20px;margin-bottom:20px}
  .ls__stats__row > div:not(:last-child)::after{content:"";position:absolute;bottom:0;
    width:80px;height:1px;background:#606060;left:50%;transform:translateX(-50%)}}
@media(max-width:767px){.ls__stats__in{padding:30px 0 0}}

/* 4 · the baseline caption. The section centres a shrink-to-fit widget. */
.ls__cap__in{flex-direction:row;gap:0;padding:20px 0 0;justify-content:center}
.ls__cap__p{font-size:16px;line-height:26px;color:#fff;text-align:center;margin:0}
@media(max-width:767px){.ls__cap__in{padding:30px 0 0}}

/* 5 · one conversation, one perfectly guided journey */
.ls__conv__in{align-items:center;justify-content:flex-start;gap:50px;padding:96px 0 0}
.ls__conv__h{position:relative;z-index:5;text-align:center}
.ls__conv__lead{position:relative;z-index:5;max-width:800px;
  font-size:16px;line-height:26px;color:#fff;text-align:center;margin:0}
@media(max-width:767px){.ls__conv__in{padding:60px 0 0}}

/* 6 + 8 · the two a-tabs panels */
.ls__tabs__in{gap:40px;padding:56px 0 0;z-index:15}
/* this page's tab strip is 18px where loomi-marketing-agent's is 16px */
.p-ls .a-tabs-tab{font-size:18px}
@media(max-width:1200px){.p-ls .a-tabs-tab{font-size:14px}}

/* 7 · the smartest associate on your site */
.ls__assoc__in{align-items:center;justify-content:flex-start;gap:50px;padding:96px 0 0}
.ls__assoc__h{position:relative;z-index:5;max-width:1060px;text-align:center}
@media(max-width:767px){.ls__assoc__in{padding:60px 0 0}}

/* 9 · transform conversations into conversions — the shared story component */
.ls__cs__in{gap:60px;padding:140px 0}
.ls__cs__h{width:100%;text-align:center}
.ls__cs__lead{max-width:800px;font-size:16px;line-height:26px;
  color:var(--text);text-align:center;margin:0 auto}
@media(max-width:1024px){.ls__cs__in{padding:60px 0}}

/* 10 · connect your commerce tools — a 42/58 row that reverses at 767 */
.ls__connect__in{flex-direction:row;gap:0;justify-content:space-between;align-items:center;padding:0 0 120px}
.ls__connect__row{width:100%;max-width:1400px;margin:0 auto;display:flex;flex-direction:row;
  justify-content:space-between;align-items:center;gap:160px}
.ls__connect__l{width:42%;display:flex;flex-direction:column;gap:30px}
.ls__connect__r{width:58%;display:flex;flex-direction:column;gap:30px}
.ls__connect__p{font-size:18px;line-height:29px;color:var(--text);margin:0}
.ls__connect__p strong{font-weight:500}
.ls__connect__r img{display:block;width:100%;height:auto;border-radius:20px}
@media(max-width:1024px){
  .ls__connect__in{padding:60px 0}
  .ls__connect__row{gap:40px}
  .ls__connect__l,.ls__connect__r{width:50%}}
@media(max-width:767px){
  .ls__connect__row{flex-direction:row-reverse;flex-wrap:wrap-reverse}
  .ls__connect__l,.ls__connect__r{width:100%}}

/* 11 · what's next + the demo block. Two glows, both from the page's custom CSS;
   both keep pointer-events:none for the reason given in SESSION_NOTES divergence 9. */
.ls__road__in{align-items:center;justify-content:flex-start;gap:96px;padding:160px 0}
.ls__road__head{position:relative;z-index:5;width:100%;max-width:1280px;
  display:flex;flex-direction:column;gap:40px}
.ls__road__head::before{content:"";pointer-events:none;position:absolute;z-index:1;
  top:-50%;left:110%;width:1300px;height:1100px;transform:translate(-50%,-50%);
  border-radius:50%;background:linear-gradient(269deg,#019ACE 42.21%,#01CE7F 55.13%);
  opacity:.6;filter:blur(270px)}
/* upstream puts position:relative;z-index:5 on the heading widget and on the lead's
   container, which is what keeps them above the head's own ::before glow (z-index 1
   inside the same stacking context). Without it the wash tints the white headline. */
.ls__road__h{position:relative;z-index:5;text-align:center}
.ls__road__sub{position:relative;z-index:5;
  display:flex;flex-direction:column;justify-content:center;align-items:center}
.ls__road__lead{max-width:900px;font-size:20px;line-height:29px;color:#fff;
  text-align:center;text-wrap:balance;margin:0}
.ls__road__row{position:relative;z-index:5;width:100%;display:flex;flex-direction:row;
  justify-content:space-between;align-items:flex-start;gap:24px}
.ls__road__row::before{content:"";pointer-events:none;position:absolute;z-index:1;
  top:80%;left:-10%;width:700px;height:550px;transform:translate(-50%,-50%);
  border-radius:50%;background:linear-gradient(269deg,#019ACE 42.21%,#01CE7F 55.13%);
  opacity:.6;filter:blur(210px)}
.ls__road__col{position:relative;z-index:5;width:100%;
  display:flex;flex-direction:column;align-items:flex-start;gap:20px}
.ls__road__col--3{width:70%}
.ls__road__when{display:flex;flex-direction:row;gap:8px;align-items:center;width:100%}
/* the gradient-masked pill/disc pair; .gradborder-grey is a plain white hairline */
.ls__gb{position:relative;flex-shrink:0;width:30px;aspect-ratio:1/1;border-radius:50%;
  padding-top:2px;white-space:nowrap;
  display:flex;flex-direction:column;justify-content:center;align-items:center}
.ls__gb--text{width:auto;height:30px;aspect-ratio:auto;border-radius:500px;
  padding-left:12px;padding-right:12px;
  font-size:16px;line-height:26px;font-weight:500;color:#fff}
.ls__gb:not(.ls__gb--grey)::before{content:"";position:absolute;inset:0;
  background:linear-gradient(256deg,#0461C8 19.75%,#14A1D0 69.08%);
  border-radius:inherit;padding:1px;
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.ls__gb--grey{border:1px solid #fff}
.ls__rule{flex:1;height:1px}
.ls__rule--grad{background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%)}
.ls__rule--white{background:#fff}
.ls__road__col .ls__h3{max-width:380px}
.ls__road__p{max-width:420px;font-size:18px;line-height:29px;color:#EAFDFF;margin:0}
.ls__road__col img{display:block;border-radius:0}
@media(max-width:1600px){.ls__road__col--3{width:100%}}
@media(max-width:1024px){.ls__road__in{gap:60px;padding:80px 0}
  .ls__road__lead{font-size:18px}}
@media(max-width:767px){
  .ls__road__in{gap:40px;padding:60px 0}
  .ls__road__head{gap:10px}
  .ls__road__row{gap:40px;flex-direction:column}
  .ls__road__col{gap:12px}
  .ls__road__col--1,.ls__road__col--2{padding-bottom:40px;
    border-bottom:1px solid rgba(255,255,255,.2)}
  .ls__rule{display:none}}
@media(max-width:1024px){.ls__road__head::before,.ls__road__row::before{opacity:.3}}

/* 11b · the demo block — 60/40 with a 500px form card */
.ls__demo{position:relative;z-index:5;width:100%;display:flex;flex-direction:row;
  justify-content:space-between;align-items:center;gap:160px}
.ls__demo__l{width:60%;display:flex;flex-direction:column;align-items:flex-start;gap:40px}
.ls__demo__h{text-wrap:balance}
.ls__demo__p{font-size:16px;line-height:26px;color:#EAFDFF;margin:0}
.ls__demo__boxes{width:100%;display:flex;flex-direction:row;gap:24px}
.ls__box{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:24px}
.ls__box__ico{position:relative;flex:none;width:40px;height:40px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:transparent}
.ls__box__ico::before{content:"";position:absolute;inset:0;
  background:linear-gradient(256deg,#0461C8 19.75%,#14A1D0 69.08%);
  border-radius:inherit;padding:1px;
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.ls__box__ico svg{display:block}
.ls__box p{font-size:16px;line-height:26px;color:#EAFDFF;margin:0}
.ls__box strong{display:block;color:#fff;font-size:1.1em;font-weight:500;margin-bottom:10px}
.ls__demo__card{width:40%;max-width:500px;box-sizing:border-box;
  display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
  padding:32px;border-radius:20px;
  background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.25)}
@media(max-width:1800px){
  .ls__demo{gap:80px}
  .ls__box{gap:12px}}
@media(max-width:1600px){.ls__box p{font-size:14px;line-height:1.5}}
@media(max-width:1199px){.ls__demo__boxes{flex-direction:column}}
@media(max-width:1024px){
  .ls__demo{flex-direction:column;padding:60px 0}
  .ls__demo__l{width:100%}
  .ls__demo__boxes{width:100%}
  .ls__demo__card{width:80%}}
@media(max-width:767px){
  .ls__demo__boxes{gap:32px}
  /* upstream's icon container is --width:40px above 768 and 50px below it */
  .ls__box__ico{width:50px;height:50px}
  .ls__demo__card{width:100%;padding:20px}}

/* 12 · FAQ — the shared .br-faq component in this page's own 1110/850 column */
.ls__faq{position:relative;padding:0 15px}
.ls__faq__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column;align-items:center;gap:60px;padding:100px 0 140px}
.ls__faq__h{max-width:600px;font-size:60px;line-height:72px;font-weight:500;
  color:#000;text-align:center;margin:0}
.ls__faq .br-faq{width:850px;max-width:100%}
.ls__faq .br-faq-answer{color:#333}
@media(max-width:1024px){
  .ls__faq__in{gap:30px;padding:80px 0 60px}
  .ls__faq__h{font-size:36px;line-height:45px}}
@media(max-width:767px){.ls__faq__in{padding:50px 0 100px}}

/* --- a-tabs: the image variants this page adds (loomi-marketing-agent ships videos).
   Source order kept, because these overrides tie on specificity across media. --- */
.a-tabs-slide-video img{pointer-events:none;position:absolute;top:0;left:0;
  width:100%;height:100%;object-fit:cover;border-radius:0;opacity:0;
  transform:translateX(30px);
  transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.a-tabs-slide-video img.active{pointer-events:auto;opacity:1;transform:translateX(0)}
.a-tabs--img .a-tabs-slide-video{left:920px;aspect-ratio:1/1;
  transform:translateY(-50%) scale(1.2)}
.a-tabs--reversed .a-tabs-slide-text{margin-left:auto}
.a-tabs--reversed .a-tabs-slide-arrows{justify-content:flex-end}
.a-tabs--reversed .a-tabs-slide-video{left:auto;right:800px}
.a-tabs--reversed.a-tabs--img .a-tabs-slide-video{left:auto;right:920px}
.a-tabs--reversed .a-tabs-slide-text__copy{transform:translateY(-50%) translateX(30px)}
.a-tabs--reversed .a-tabs-slide-text__copy.active{transform:translateY(-50%) translateX(0)}
.a-tabs--reversed .a-tabs-slide-video img{transform:translateX(-30px)}
.a-tabs--reversed .a-tabs-slide-video img.active{transform:translateX(0)}
@media(max-width:1800px){
  .a-tabs--img .a-tabs-slide-video{left:700px}
  .a-tabs--reversed.a-tabs--img .a-tabs-slide-video{left:auto;right:700px}}
@media(max-width:1400px){
  .a-tabs--img .a-tabs-slide-video{left:600px}
  .a-tabs--reversed.a-tabs--img .a-tabs-slide-video{left:auto;right:600px}}
@media(max-width:1199px){
  .a-tabs--img .a-tabs-slide-video{left:auto;right:0;transform:translateY(-50%) scale(1)}
  .a-tabs--img.a-tabs--reversed .a-tabs-slide-video{left:0;right:auto}}
@media(max-width:767px){
  .a-tabs--reversed .a-tabs-slide-text__copy{transform:translateY(0) translateX(30px)}
  .a-tabs--reversed .a-tabs-slide-text__copy.active{transform:translateY(0) translateX(0)}
  .a-tabs--img .a-tabs-slide-video,
  .a-tabs--img.a-tabs--reversed .a-tabs-slide-video{position:relative;top:0;left:0;right:auto;
    width:100%;height:auto;transform:translateY(0)}}

/* --- the story component's title-only slide (upstream .br-cs__content.onlytitle) --- */
.ma__cs__content.onlytitle{max-width:900px;flex-direction:column;gap:30px}

/* ============ iGAMING (industry page) ============
   Source: ndustries_igaming.html + ndustries_igaming_files/post-53519.css (page id
   53519, still at the ground-truth ROOT). Component CSS ported from the source's own
   sheets: .ind-hero from bloomreach-industry-hero.css, .br-swiper from
   bloomreach-swiper.css, .br-accord-new via the existing .em__kit, .smbr and every
   glow from post-53519.css's custom block.
   Shell: the shared .brcontainer gutter (120/40/15), 1720px inner cap, except the logo
   band (full-bleed) and the FAQ (15px gutter, 1110px inner), as upstream.
   Scoped to body.p-ig — site.css is shared by fourteen pages, post-53519.css by one.

   DELIBERATE, requested: the hero carries email-marketing's yellow gradient wash.
   Everything else — structure, elements, rhythm — is this page's own. */
.p-ig{background:#fff}
body.p-ig{overflow-x:hidden}

.ig__hero,.ig__panel,.ig__old,.ig__band,.ig__why,.ig__build,.ig__stats,.ig__gap,
.ig__cs,.ig__chat,.ig__rel{position:relative;padding:0 120px}
.ig__hero__in,.ig__panel__in,.ig__old__in,.ig__band__in,.ig__why__in,.ig__build__in,
.ig__stats__in,.ig__gap__in,.ig__cs__in,.ig__chat__in,.ig__rel__in{
  position:relative;width:100%;max-width:1720px;margin-inline:auto;
  display:flex;flex-direction:column}
.ig__old{background:#000;overflow:hidden}
.ig__cs{background:#FFEEF5;overflow:hidden}
.ig__build,.ig__rel{overflow:hidden}
@media(max-width:1400px){
  .ig__hero,.ig__panel,.ig__old,.ig__band,.ig__why,.ig__build,.ig__stats,.ig__gap,
  .ig__cs,.ig__chat,.ig__rel{padding:0 40px}}
@media(max-width:1200px){
  .ig__hero,.ig__panel,.ig__old,.ig__band,.ig__why,.ig__build,.ig__stats,.ig__gap,
  .ig__cs,.ig__chat,.ig__rel{padding:0 15px}}

/* type — kit-13's ladder, with this page's 1.2em display <span> on h2 and h3 */
.ig__h1{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}
.ig__h2{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}
.ig__h2--inv{color:#fff}
.ig__h3{font-size:36px;line-height:43px;font-weight:500;color:#000;margin:0}
/* the display <span> steps four times by viewport, measured on the source at
   1920/1800/1600/1500/1400/1300/1200: 1.6 -> 1.4 -> 1.2 -> 1em, with 1.15 line-height on
   h1/h2 and 1.25 on h3. Reading only the 1440 rendering would have frozen it at 1.2em. */
.ig__h1 span,.ig__h2 span,.ig__faq__h span{font-size:1.6em;line-height:1.15}
.ig__h3 span{font-size:1.6em;line-height:1.25}
@media(max-width:1800px){
  .ig__h1 span,.ig__h2 span,.ig__h3 span,.ig__faq__h span{font-size:1.4em}}
@media(max-width:1600px){
  .ig__h1 span,.ig__h2 span,.ig__h3 span,.ig__faq__h span{font-size:1.2em}}
@media(max-width:1200px){
  .ig__h1 span,.ig__h2 span,.ig__h3 span,.ig__faq__h span{font-size:1em}}
@media(max-width:1024px){
  .ig__h1,.ig__h2{font-size:30px;line-height:38px}
  .ig__h3{font-size:24px;line-height:30px}}
.ig__lead{font-size:18px;line-height:29px;color:#000;margin:0;text-wrap:pretty}

/* 1-3 · the yellow wash. email-marketing paints it as a blurred #FEED1B block on
   .ma__hero::before and lets it bleed into the logo band below. Here it has to carry
   across THREE sections — hero, .ind-hero panel and logo band — so it lives on a
   wrapper that spans exactly those three and stretches top-to-bottom inside it
   (requested 2026-09-05). The wrapper isolates, so the 120px blur run-out past its foot
   is covered by the black section that follows instead of bleeding on down the page. */
.ig__wash{position:relative;isolation:isolate}
.ig__wash::before{content:"";pointer-events:none;position:absolute;z-index:0;
  top:0;bottom:0;left:calc(50% - 1600px);width:934px;
  background:#0179F8;filter:blur(120px)}
/* the three sections must be positioned, or their backgrounds sit under the wash */
.ig__wash > .ig__hero,.ig__wash > .ig__panel,.ig__wash .ma__logos{position:relative;z-index:1}
.ig__hero{overflow:visible}
.ig__hero__in{padding:70px 0 0;gap:30px;align-items:center}

.ig__hero__col{position:relative;z-index:5;width:100%;max-width:960px;
  display:flex;flex-direction:column;gap:30px}
.ig__kicker{font-size:20px;line-height:29px;font-weight:500;color:#000;margin:0}
.ig__hero__h{text-wrap:balance}
.ig__hero__cta{display:flex;flex-direction:row;justify-content:center;gap:20px}
.ig__hero__cta .br-cta{max-width:100%}
@media(max-width:1024px){.ig__hero__in{padding:40px 0 0}
  .ig__kicker{font-size:18px}}
@media(max-width:767px){.ig__hero__cta{flex-wrap:wrap}}

/* 2 · the .ind-hero panel, verbatim from bloomreach-industry-hero.css */
.ig__panel__in{padding:70px 0 0;gap:30px;align-items:center}
.ig__panel__box{position:relative;z-index:5;width:100%}
.ind-hero{position:relative;width:100%;height:auto;aspect-ratio:1720/800;
  color:#000;background:#000;overflow:hidden;border-radius:30px}
.ind-hero-inner{position:absolute;z-index:2;top:0;left:0;width:100%;height:100%}
.ind-hero-inner::after{content:"";position:absolute;z-index:1;top:80%;left:50%;
  transform:translateX(-50%);width:1800px;height:574px;
  background:linear-gradient(250deg,#019ACE 28.92%,#01CE7F 50.56%);filter:blur(300px)}
.ind-hero-select{position:absolute;z-index:15;top:50%;right:100px;transform:translateY(-50%);
  width:540px;height:auto;padding:40px;background:#fff;border-radius:20px}
.ind-hero-select__content{display:flex;flex-direction:column;gap:30px}
h2.ind-hero-select__title{width:100%;font-size:26px;line-height:1;font-weight:500;
  text-align:center;margin:0}
.ind-hero-select__hovers{display:flex;flex-wrap:wrap;gap:10px}
.ind-hero-select__hover{width:calc(33% - 7px);height:auto;aspect-ratio:1/1;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  padding:0 20px;background:none;border-radius:20px;border:1px solid #DBDBDB;
  transition:background 200ms ease-in-out,border-color 200ms ease-in-out}
.ind-hero-select__hover:hover,.ind-hero-select__hover:focus-visible{background:#0461C8;border-color:#0179F8}
.ind-hero-select__hover h3{font-size:17px;line-height:1;font-weight:500;text-align:center;margin:0}
.ind-hero-select__hover h3,.ind-hero-select__hover img{pointer-events:none}
.ind-hero-select__hover img{display:block;width:68px;height:auto;border-radius:20px}
.ind-hero-select__cta{display:flex;align-items:center;justify-content:center}
.ind-hero-bg{position:absolute;z-index:5;top:50%;left:200px;transform:translateY(-50%);
  width:calc(100% - 200px);height:80%}
.ind-hero-bg img{position:absolute;top:0;left:0;width:auto;height:100%;z-index:1;
  object-fit:contain;object-position:left center;opacity:0;filter:blur(30px);
  transform:translateX(80px);border-radius:10px;
  transition:opacity 600ms ease-in-out,filter 600ms ease-in-out,transform 600ms ease-in-out}
.ind-hero-bg img.active{opacity:1;z-index:5;filter:blur(0);transform:translateX(0)}
.ind-hero-bg img.def{transition-delay:300ms}
.ind-hero-bg img.def.active{filter:blur(30px)}
.ind-hero-imgs{position:relative;height:0}
.ind-hero-img{position:absolute;z-index:10;left:120px;bottom:60px;max-height:90%;
  opacity:0;filter:blur(30px);transform:translateX(-80px);transition-delay:100ms;
  transition:opacity 600ms ease-in-out,filter 600ms ease-in-out,transform 600ms ease-in-out}
.ind-hero-img.active{opacity:1;z-index:11;filter:blur(0);transform:translateX(0)}
.ind-hero-img img{display:block;width:auto;max-width:100%;max-height:100%;border-radius:0}
@media(min-width:768px){.ind-hero-img{max-width:40%}}
@media(max-width:1860px){
  .ind-hero-select{right:50px}
  .ind-hero-select__content{gap:16px}
  .ind-hero-select__hover{aspect-ratio:7/6}}
@media(max-width:1720px){
  .ind-hero{aspect-ratio:1720/940}
  .ind-hero-select{width:480px;padding:30px}
  .ind-hero-select__hover{aspect-ratio:10/9}
  .ind-hero-bg{left:100px}
  .ind-hero-img{left:60px}
  .ind-hero-img img{max-height:400px}}
@media(max-width:1200px){
  .ind-hero{aspect-ratio:auto;background:transparent;border-radius:0}
  .ind-hero-inner{position:relative;height:520px;background:#000;overflow:hidden;border-radius:20px}
  .ind-hero-select{position:relative;top:0;right:0;width:100%;transform:none;padding:0 0 20px}
  .ind-hero-select__hovers{justify-content:center}
  .ind-hero-select__hover{width:calc(20% - 8px);aspect-ratio:auto;padding:0 10px 15px}
  .ind-hero-select__hover img{width:52px}
  .ind-hero-select__hover h3{font-size:15px}
  .ind-hero-select__cta{display:none}
  .ind-hero-bg{width:90%;height:90%}
  .ind-hero-bg img{top:50%;left:60%;width:auto;height:auto;max-width:90%;max-height:98%;
    object-position:center center;transform:translate(calc(-50% + 60px),-50%)}
  .ind-hero-bg img.active{transform:translate(-50%,-50%)}
  .ind-hero-img{max-width:50%}}
@media(max-width:640px){
  .ind-hero-inner{height:420px}
  .ind-hero-select__hover{width:calc(33.33% - 7px)}
  .ind-hero-img{max-width:70%;left:30px;bottom:30px}
  .ind-hero-img img{max-height:360px}}

/* 3 · the logo marquee — same component as the email band, this page's own rhythm:
   the section is edge-to-edge (no gutter) and its kicker is 12px/12px, not the
   email band's uppercase 12/1 with letter-spacing.
   The rail's 50px edge fades exist to blend the marquee into the page behind it, and
   upstream tints them #fff because its band is on white. This band sits ON the yellow
   wash, where a white fade paints a visible white block over the gradient at x=0 —
   the 2200px slider's `margin:0 auto` cannot go negative, so its left edge lands on
   screen. The fade's colour has to be the background it is fading into: none. */
.ma__logos.ig__logos{padding:80px 0 40px;gap:30px}
.ig__logos .ma__logos__rail{--fade-color:transparent}
.ig__logos .ma__logos__kicker{font-size:12px;line-height:12px;letter-spacing:normal}

/* 4 · the old game is broken — black, with the page's only glow */
.ig__old__in{padding:110px 0;gap:40px;align-items:flex-start}
.ig__old__head{position:relative;z-index:5;width:100%;
  display:flex;flex-direction:column;align-items:flex-start;gap:24px}
.ig__old__lead{align-self:flex-start;font-size:24px;line-height:34px;color:#fff;margin:0}
.ig__old::after{content:"";pointer-events:none;position:absolute;z-index:1;display:block;
  bottom:-300px;left:calc(50% + 400px);width:1811px;height:362px;
  background:linear-gradient(250deg,#019ACE 28.92%,#01CE7F 50.56%);filter:blur(302.634px)}
.ig__old .br-swiper{position:relative;z-index:5}
@media(max-width:1024px){.ig__old__in{padding:60px 0 80px}
  .ig__old__lead{font-size:18px;line-height:29px}}
@media(max-width:767px){.ig__old__in{padding:50px 0 60px}}

/* 5 · not quite your industry? */
.ig__band__in{padding:110px 0 0;gap:30px}
.ig__band__box{display:flex;flex-direction:row;justify-content:space-between;
  align-items:flex-end;gap:20px;padding:33px 44px;background:#E5F5FA;border-radius:10px}
.ig__band__l{display:flex;flex-direction:row;align-items:center;gap:12px}
.ig__band__l img{display:block;width:24px;height:24px;border-radius:0}
.ig__band__l p{font-size:20px;line-height:29px;color:#000;margin:2px 0 0}
.ig__band__links{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px 45px}
.ig__band__links a{font-size:20px;line-height:29px;font-weight:500;color:var(--text)}
.ig__band__links a:hover{text-decoration:none}
@media(max-width:1024px){.ig__band__in{padding:60px 0 0}
  .ig__band__l p,.ig__band__links a{font-size:18px}}
@media(max-width:767px){.ig__band__box{flex-wrap:wrap}}

/* 6 · why iGaming brands choose bloomreach — head row + the shared .em__kit accordion */
.ig__why__in{padding:100px 0 0;gap:30px}
.ig__why__head{display:flex;flex-direction:row;align-items:center;gap:60px}
.ig__why__head .ig__h1{width:1000px;flex:0 1 auto}
/* upstream's sub column carries --flex-shrink:0, so it holds its 551px and the
   headline column absorbs the whole deficit (589 + 60 + 551 = 1200 at 1440) */
.ig__why__sub{width:551px;flex:0 0 auto;font-size:18px;line-height:29px;color:#000;margin:0}
.ig__why .em__kit__row{background:#fff}
.ig__why .em__kit__title > span{display:block;width:100%}
.ig__why .em__kit__title em{display:block;color:#6F6F6F;font-size:12px;font-weight:400;
  font-style:normal;text-transform:uppercase;margin-bottom:10px}
@media(max-width:1024px){
  .ig__why__in{padding:60px 0 0}
  .ig__why__head{flex-direction:column;align-items:flex-start;gap:20px}
  .ig__why__head .ig__h1{width:100%}
  .ig__why__sub{width:600px;max-width:100%}}
@media(max-width:767px){.ig__why__sub{width:100%}}

/* 7 + 13 · the .br-swiper rail, ported from bloomreach-swiper.css. Upstream is a
   free-mode Swiper with overflow:visible; this is the same fixed-width card rail the
   rest of the site uses, so the arrows dim by state through maRail(). */
.br-swiper{position:relative;width:100%}
.br-swiper-track{display:flex;gap:40px;overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none}
.br-swiper-track::-webkit-scrollbar{display:none}
.br-swiper-slide{flex:0 0 640px;scroll-snap-align:start}
.br-swiper-a{cursor:pointer;display:block;color:inherit;
  transition:transform 200ms ease-in-out}
.br-swiper-a:hover{transform:scale(1.02)}
.br-swiper-img{width:100%;margin-bottom:40px;border-radius:40px;overflow:hidden}
.br-swiper-img img{display:block;width:100%;height:auto;aspect-ratio:600/510;object-fit:cover}
.br-swiper-img--h400 img{aspect-ratio:600/400}
.br-swiper-title h4,.br-swiper-title h5{margin:0;font-weight:500;line-height:1.2}
.br-swiper-title h4{font-size:30px}
.br-swiper-title h5{font-size:24px}
/* only the challenges rail carries body copy, and that section is black */
.br-swiper-content{color:#fff;margin-top:24px}
.br-swiper-content p{font-size:18px;line-height:1.8;margin:0}
.br-swiper-cta{margin-top:24px}
.br-swiper-cta span{color:#019ACE;font-size:18px}
.br-swiper-a:hover .br-swiper-cta span{text-decoration:underline}
.br-swiper-arrows{display:flex;gap:24px;width:100%;margin-top:40px}
.br-swiper-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;
  width:64px;height:64px;padding:0;margin:0;border:0;border-radius:50%;
  color:#fff;background:#0461C8;
  transition:transform 200ms ease-in-out,opacity 200ms ease-in-out}
.br-swiper-btn:hover{transform:scale(1.1)}
.br-swiper-btn.is-off{cursor:default;opacity:.35;pointer-events:none}
.br-swiper-btn svg{width:24px;height:24px}
@media(min-width:1701px){.br-swiper-title,.br-swiper-content{padding-right:80px}}
@media(min-width:1025px) and (max-width:1700px){
  .br-swiper-title h4{font-size:24px}
  .br-swiper-title h5{font-size:21px}}
@media(max-width:1024px){
  .br-swiper-title h4{font-size:22px}
  .br-swiper-title h5{font-size:20px}
  .br-swiper-cta span{font-size:16px}}
@media(max-width:1800px){
  .br-swiper-img{margin-bottom:20px}
  .br-swiper-content{margin-top:16px}
  .br-swiper-content p{font-size:16px}
  .br-swiper-arrows{gap:16px;margin-top:20px}
  .br-swiper-btn{width:48px;height:48px}}
@media(max-width:2000px){.br-swiper-slide{flex-basis:500px}}
@media(max-width:1700px){.br-swiper-slide{flex-basis:400px}}
/* every rail on this site shows exactly one full card at <=767 (divergence 4) */
@media(max-width:767px){
  .br-swiper-track{gap:20px}
  .br-swiper-slide{flex-basis:100%}
  .br-swiper-img{border-radius:20px}}
.ig__build__in{padding:120px 0 0;gap:40px}
@media(max-width:1024px){.ig__build__in{padding:50px 0 0;gap:30px}}
.ig__rel__in{padding:120px 0 140px;gap:30px}
@media(max-width:1024px){.ig__rel__in{padding:30px 0 100px;gap:20px}}

/* 8 · smarter marketing — the .smbr yellow cards */
.ig__stats__in{padding:120px 0 0;gap:24px;align-items:center}
.ig__stats__h{text-align:center}
.ig__stats__lead{font-size:24px;line-height:34px;color:var(--text);margin:0}
.ig__stats__row{width:100%;display:flex;flex-direction:row;gap:24px;margin-top:30px}
.smbr{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:24px}
.smbr-box{height:290px;display:flex;flex-direction:column;justify-content:center;
  align-items:center;gap:10px;padding:0 30px;background:#0461C8;color:#fff;border-radius:24px;
  text-align:center;text-wrap:pretty}
.smbr-box h3{font-size:100px;line-height:1;font-weight:500;color:#fff;margin:0}
.smbr-box p{font-size:18px;line-height:29px;color:#fff;margin:0}
.smbr-box p strong{font-weight:500}
.smbr__src{font-size:14px;line-height:20px;color:#000;margin:0;text-align:center}
.smbr__src a{color:var(--cyan)}
.ig__stats__cta{margin-top:40px}
@media(max-width:1800px){.smbr-box{height:240px}.smbr-box h3{font-size:80px}}
@media(max-width:1600px){.smbr-box{height:220px;gap:10px}.smbr-box h3{font-size:60px}}
@media(max-width:1024px){
  .ig__stats__in{padding:60px 0}
  .ig__stats__lead{font-size:18px;line-height:29px}
  .ig__stats__h,.ig__stats__lead{text-align:center}
  /* upstream drops the GAP INSIDE each card to 10 at 1024; the row keeps its 24 */
  .ig__stats__row{flex-direction:column}
  .smbr{gap:10px}
  /* margin-inline:auto shrink-to-fits a flex item -- width:100% restores
     fill-and-centre (the trap already recorded for the pu sections) */
  .smbr-box{height:auto;padding:20px;width:100%;max-width:440px;margin:0 auto}}

/* 9 · the source's own empty 220px section between the stats and the stories */
.ig__gap__in{padding:120px 0 100px;gap:24px;align-items:center}
@media(max-width:1024px){.ig__gap__in{padding:60px 0}}

/* 10 · customer stories — the shared component on this page's pink band */
.ig__cs__in{padding:100px 0;gap:60px}
.ig__cs__h{text-wrap:balance}
@media(max-width:1024px){.ig__cs__in{padding:60px 0}}
@media(max-width:767px){.ig__cs__in{gap:30px}}

/* 11 · FAQ — the shared .br-faq in this page's own 1110/850 column */
.ig__faq{position:relative;padding:0 15px}
.ig__faq__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column;align-items:center;gap:60px;padding:140px 0 0}
/* this page's FAQ heading is the h2 token (50/60 -> 30/38), not the 60/72 the product
   pages use -- measured on the source at 1440 and 1024 */
.ig__faq__h{font-size:50px;line-height:60px;font-weight:500;color:#000;
  text-align:center;margin:0}

.ig__faq .br-faq{width:850px;max-width:100%}
.ig__faq .br-faq-answer{color:#333}
.ig__faq .br-faq-answer a{color:var(--cyan)}
.ig__faq .br-faq-answer ul{margin:15px 0 5px;padding-left:20px}
.ig__faq .br-faq-answer li{margin-bottom:10px}
@media(max-width:1024px){
  .ig__faq__in{gap:30px;padding:80px 0 60px}
  .ig__faq__h{font-size:30px;line-height:38px}}
@media(max-width:767px){.ig__faq__in{gap:30px;padding:60px 0 20px}}

/* 12 · a 30-minute chat — the same shape as .ma__chat, this page's own rhythm */
.ig__chat__in{flex-direction:row;align-items:center;gap:160px;padding:140px 0 0}
.ig__chat__l{width:593px;flex:1 1 auto;
  display:flex;flex-direction:column;align-items:flex-start;gap:40px}
.ig__chat__steps{width:100%;display:flex;flex-direction:row;gap:24px}
.ig__chat__step{flex:1 1 auto;min-width:min-content;
  display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.ig__chat__steps .ig__chat__n{flex:none;width:40px;height:40px;border-radius:50%;background:#0461C8;
  display:flex;align-items:center;justify-content:center;
  font-size:16px;line-height:26px;font-weight:500;color:#fff}
.ig__chat__step p{font-size:18px;line-height:29px;color:#000;margin:0}
.ig__chat__step p strong{font-weight:500}
.ig__chat__r{width:547px;flex:0 1 auto;height:500px}
.ig__chat__r img{display:block;width:100%;height:100%;object-fit:cover;border-radius:20px}
@media(max-width:1800px){.ig__chat__in{gap:60px}
  .ig__chat__step{flex-direction:column;gap:12px}}
@media(max-width:1024px){
  .ig__chat__in{flex-direction:column;align-items:flex-start;padding:60px 0}
  .ig__chat__l,.ig__chat__r{width:100%}
  .ig__chat__r{height:auto}}
@media(max-width:767px){.ig__chat__steps{flex-wrap:wrap;gap:32px}}

/* ============ USE CASES (archive) ============
   Source: use_case.html + use_case_files/post-73965.css (page id 73965, still at the
   ground-truth ROOT). An archive page, not a wp-page: its content lives in
   .elementor-location-archive, and three of its eleven blocks are display:none in the
   saved copy — the value/effort matrix, the empty-search state and the JS card
   template — so they are not built (divergence 15).
   Shell: a 15px gutter at every width, NOT the .brcontainer 120/40/15. The hero and the
   listing cap at 1300; every later section at 1110, dropping to 768 between 768 and 1024.
   Scoped to body.p-uc — site.css is shared by fifteen pages, post-73965.css by one. */
.p-uc{background:#fff}
/* the shared header's mobile drawer is parked off-screen right; overflow-x on body does
   not clip a fixed descendant (trap 17), so the html element carries the clip */
body.p-uc{overflow-x:hidden}
html:has(body.p-uc){overflow-x:clip}
.uc__hero,.uc__list,.uc__top,.uc__grow,.uc__faq,.uc__video,.uc__cases,.uc__contact{
  position:relative;padding:0 15px}
.uc__hero__in,.uc__list__in,.uc__top__in,.uc__grow__in,.uc__faq__in,.uc__video__in,
.uc__cases__in,.uc__contact__in{position:relative;width:100%;margin-inline:auto;
  display:flex;flex-direction:column}
.uc__hero__in,.uc__list__in{max-width:1300px}
.uc__top__in,.uc__grow__in,.uc__faq__in,.uc__video__in,.uc__cases__in,.uc__contact__in{max-width:1110px}
@media(min-width:768px) and (max-width:1024px){
  .uc__top__in,.uc__grow__in,.uc__faq__in,.uc__video__in,.uc__cases__in,.uc__contact__in{max-width:768px}}
.uc-hide{display:none !important}

/* type */
.uc__h1{font-size:60px;line-height:72px;font-weight:400;color:#fff;margin:0}
.uc__h1 strong{font-weight:500}
.uc__h2{font-size:36px;line-height:43px;font-weight:500;color:#000;margin:0}
.uc__kicker{font-size:14px;line-height:26px;font-weight:500;color:#fff;margin:0;
  text-transform:uppercase;letter-spacing:1px}
@media(max-width:1024px){
  .uc__h1{font-size:36px;line-height:45px}
  .uc__h2{font-size:24px;line-height:30px}}

/* 1 · hero — #000D10 under a green radial, measured off the source, not the screenshot */
.uc__hero{background:#000D10;
  background-image:radial-gradient(159.68% 159.68% at 118.06% 100%,
    #019057 0%, rgba(1,154,206,.2) 55.86%)}
.uc__hero__in{align-items:center;gap:50px;padding:120px 0 0}
.uc__hero .uc-filter-top{margin-top:auto}
.uc__hero__head{display:flex;flex-direction:column;align-items:center;
  justify-content:flex-start;gap:26px;width:100%}
.uc__hero__h{text-align:center;text-wrap:balance}
.uc__hero__lead{font-size:16px;line-height:26px;color:#fff;text-align:center;margin:0}
.uc__hero__lead a{color:var(--cyan)}
/* the search takes the whole first line; the tag row and the prebuilt toggle share the
   second, pushed apart (860 = 67 + 20 + 25 tall at 1440) */
.uc__hero__tools{width:100%;max-width:860px;
  display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;
  gap:20px;margin-bottom:50px}
.uc__hero__tools .uc-search{flex:1 1 100%}
.uc-search{display:flex;width:100%}
.uc-search__content{position:relative;width:100%}
.uc-search__input{width:100%}
.uc-search__input input{width:100%;box-sizing:border-box;font:inherit;font-size:18px;
  line-height:1.5;color:#fff;background:rgba(255,255,255,.1);
  border:1px solid rgba(255,255,255,.15);border-radius:200px;padding:20px 150px 18px 30px}
.uc-search__input input::placeholder{color:rgba(255,255,255,.5);opacity:1}
.uc-search__input input:hover{border-color:rgba(255,255,255,.3)}
.uc-search__input input:focus{border-color:#0179F8;outline:none}
.uc-search__btn{cursor:pointer;position:absolute;top:50%;right:16px;z-index:1;
  transform:translateY(-50%);width:auto;height:40px;
  display:flex;align-items:center;justify-content:center;gap:8px;
  font:inherit;font-size:16px;line-height:16px;font-weight:500;color:#fff;
  background:#0461C8;border:0;border-radius:200px;padding:7px 24px 5px}
@media(max-width:1024px){.uc__hero__in{padding:60px 0 0}}
@media(max-width:992px){
  .uc-search__input input{font-size:14px;padding:16px 60px 14px 20px}
  .uc-search__btn{width:40px;padding:0;right:8px}
  .uc-search__btn span{display:none}}
@media(max-width:1024px){.uc__hero__tools{margin-bottom:0}}
@media(max-width:767px){
  .uc__hero__in{padding:40px 0 0}
  .uc__hero__head{gap:14px}
  /* upstream keeps the row+wrap and gives each child a full line rather than switching
     to a column, so the toggle stays content-width inside a full-width slot */
  .uc__hero__tools > *{flex:1 1 100%}}
@media(max-width:520px){.uc__kicker{font-size:12px;letter-spacing:0}}

/* 2 · the library — nine channel rows, each a blue tile beside a 3-up card grid.
   Component CSS ported from post-73965.css's custom block. */
.uc__list__in{gap:50px;padding:50px 0 0}
.def-channel-section{display:flex;flex-direction:row;gap:20px}
/* upstream sizes the pair 24%/76% and lets flex-shrink absorb the 20px gap -- a fixed
   307px only happens to be right at 1440 and ran the cards narrow at every width below */
.def-channel-info{width:24%;flex:0 1 auto;display:flex;flex-direction:column;gap:30px}
.def-channel-items{width:76%;min-width:0;flex:0 1 auto;
  display:flex;flex-direction:column;gap:30px}
.uc-tiles-all{width:100%}
.uc-tile,.uc-tile-blue{height:440px}
.uc-tile-blue{display:flex;flex-direction:column;align-items:flex-start;gap:14px;
  padding:30px 24px;background:#EAF7FE;border-radius:20px}
.uc-tile-blue-label{font-size:15px;line-height:15px;font-weight:500;color:#000;
  text-transform:uppercase;letter-spacing:3px;margin:0}
.uc-tile-blue-title{font-size:28px;line-height:33.6px;font-weight:500;color:#000;margin:0}
.uc-tile-blue-description{font-size:16px;line-height:26px;color:var(--text);margin:0}
.uc-tile-blue-link{display:flex;align-items:center;gap:10px;
  font-size:16px;line-height:26px;color:var(--cyan);margin-top:auto}
.uc-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.uc-tiles.uc-tiles-3{grid-template-columns:repeat(3,1fr)}
.uc-tile{position:relative;display:flex;flex-direction:column;justify-content:flex-end;
  color:inherit;border:1px solid #D1D1D1;border-radius:20px;
  transition:border 150ms linear,box-shadow 150ms linear}
.uc-tile:hover{border-color:#019ACE;outline:1px solid #019ACE;box-shadow:0 0 10px 0 #019ACE66}
.uc-tile.dontshow{display:none}
.uc-tile img.thumb{position:absolute;z-index:1;top:0;left:0;width:100%;height:auto;
  aspect-ratio:312/195;object-fit:cover;border-radius:20px 20px 0 0}
.uc-tile-content{position:relative;z-index:5;min-height:248px;
  display:flex;flex-direction:column;align-items:flex-start;gap:8px;
  padding:16px 20px 20px;background:#fff;border-radius:0 0 20px 20px}
.uc-tile-labels-wrap{display:flex;flex-wrap:wrap;gap:8px}
.uc-tile-label{font-size:12px;line-height:1.6;font-weight:500;color:#fff;background:#000;
  padding:1px 12px 0;border-radius:50px}
.uc-tile-label.uc-tile-label-prebuilt{color:#fff;background:#0461C8}
.uc-tile-title{font-size:22px;line-height:1.2;font-weight:500;color:#000}
.uc-tile-text{display:none;font-size:14px;line-height:1.5;color:#000}
.uc-tile-bot{width:100%;display:flex;align-items:flex-end;gap:8px;margin-top:auto}
.uc-tile-bot__channels{cursor:default;display:flex;flex-wrap:wrap;align-items:center;
  gap:4px;width:100%;color:#000}
.uc-tile-bot__channels > div{display:flex;align-items:center;justify-content:center;
  width:40px;height:auto;aspect-ratio:1/1;border-radius:50%;background:#ccc}
.uc-tile-bot__channels img{display:block;width:60%;height:auto}
.uc-tile-bot__hover{width:42px;flex:none}
.uc-tile-bot__hover svg{display:block;transform:scale(0);transition:transform 150ms linear}
.uc-tile:hover .uc-tile-bot__hover svg{transform:scale(1)}
.uc-tiles-showmore{display:flex;justify-content:flex-end;width:100%;margin-top:20px}
.uc-tiles-showmore-cta{cursor:pointer;width:auto;font:inherit;font-size:16px;
  color:#019ACE;background:none;border:0;padding:0;text-decoration:underline}
.uc-tiles-showmore-cta:hover{text-decoration:none}
/* Upstream's stack-at-1199 rule is `.elementor-element.def-channel-section`, and only
   the FIRST TWO of the nine rows actually carry that class — the other seven are plain
   containers and stay side by side, tile squeezed to 234px. Measured at 1024: rows are
   649, 623, then 366/314/400/366/360/360/348. Matching the rendering, not the intent. */
@media(max-width:1199px){
  .def-channel-section:nth-child(-n+2){flex-direction:column}
  .def-channel-section:nth-child(-n+2) .def-channel-info,
  .def-channel-section:nth-child(-n+2) .def-channel-items{width:100%}
  .uc-tile,.uc-tile-blue{height:auto}
  /* the thumb stops being absolute here, so it starts adding to the card's height */
  .uc-tile img.thumb{position:static}
  .uc-tile-text,.uc-tile-bot__hover{display:none}
  .uc-tile-title{font-size:18px}
  .uc-tile-content{min-height:155px}
  .uc-tile-bot__channels > div{width:30px}
  .uc-tiles{grid-template-columns:repeat(3,1fr)}}
@media(max-width:1024px){.uc__list__in{padding:0}}
/* Elementor's mobile breakpoint puts --flex-wrap-mobile:wrap and --width:100% on every
   row, so below 768 ALL nine stack -- not just the two that carry def-channel-section */
@media(max-width:767px){
  .def-channel-section{flex-direction:column}
  .def-channel-info,.def-channel-items{width:100%}}
@media(max-width:740px){
  .uc-tiles,.uc-tiles.uc-tiles-3{grid-template-columns:repeat(1,1fr)}
  .uc-tile-title{font-size:20px}
  .uc-tile-content{min-height:135px}
  .uc-tile-bot__channels > div{width:36px}}

/* 3 · top 10 prebuilt use cases, and 4 · grow faster — two black cards */
.uc__top__in,.uc__grow__in{flex-direction:row;justify-content:center;gap:30px;
  padding:60px 0 0;overflow:hidden}
/* the two cards are NOT the same skin: top-10 is #EAF7FE at 40px, grow is black at 60 */
.uc__card{width:100%;display:flex;flex-direction:column;gap:30px;border-radius:20px}
.uc__top .uc__card{background:#EAF7FE;padding:40px;color:var(--text)}
.uc__grow .uc__card{background:#000;padding:60px}
.uc__card__head{display:flex;flex-direction:row;justify-content:space-between;
  align-items:center;gap:30px}
.uc__top .uc__card__h{font-size:24px;line-height:30px;font-weight:500;color:#000;margin:0}
.uc__grow .uc__card__h{font-size:30px;line-height:36px;font-weight:500;color:#fff;margin:0}
.uc__top__body{display:flex;flex-direction:row;justify-content:space-between;
  align-items:flex-start;gap:30px}
.uc__top__list{flex:1 1 auto;display:flex;flex-direction:column;gap:10px}
/* upstream lays the number out as a fixed 40px column with no gap, not as a gap */
.uc__top__item{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:0}
.uc__top__n{width:40px;flex:none;font-size:16px;line-height:26px;font-weight:500;
  color:var(--text)}
.uc__top__item a{flex:1 1 0;min-width:0;font-size:16px;line-height:26px;color:var(--cyan);
  text-decoration:underline}
/* this card's CTA is the small variant: 14px in a 41px pill, not the site's 50px one */
.uc__top .br-cta{flex:none;white-space:nowrap;font-size:14px;padding:10px 25px 8px}
.uc__top__cta--m{display:none}
.uc__top .br-cta strong{font-size:14px}
.uc__top__foot{flex:none;width:220px;background:#0461C8;border-radius:20px;padding:20px 30px;
  display:flex;flex-direction:column;gap:10px;
  font-size:16px;line-height:26px;color:#fff}
.uc__top__foot strong{display:block;font-size:50px;line-height:60px;font-weight:500;color:#fff}
.uc__top__foot > span{display:block}
.uc__top__foot b{font-weight:500}
.uc__grow__row{display:flex;flex-direction:row;gap:80px;align-items:flex-start}
.uc__grow__col{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:8px}
.uc__grow__n{font-size:130px;line-height:130px;font-weight:500;color:#0179F8}
.uc__grow__t{font-size:20px;line-height:24px;font-weight:500;color:#fff;margin:0}
.uc__grow__p{font-size:16px;line-height:26px;color:#fff;margin:0}
/* upstream's link widget carries a 20px top margin above the 26px anchor */
.uc__grow__col a{font-size:16px;line-height:26px;color:#fff;text-decoration:underline;margin-top:20px}
/* the source keeps the top-10 body, the grow row and the cases grid in a ROW at 1024
   and 900 — measured, not assumed — and only stacks them at the 767 mobile breakpoint */
@media(max-width:1024px){
  .uc__top,.uc__grow,.uc__faq,.uc__video,.uc__cases,.uc__contact{padding:0 16px}
  .uc__top__in,.uc__grow__in{flex-direction:column;gap:36px;padding:36px 0 26px}
  /* upstream hides the third grow column below 1024 — verified display:none, not a
     wrap or an overflow */
  .uc__grow__col--3{display:none}
  .uc__top .uc__card__h{font-size:20px;line-height:26px}
  .uc__top__foot strong{font-size:30px;line-height:38px}
  .uc__grow .uc__card__h{font-size:24px;line-height:28px}}
@media(max-width:767px){
  .uc__card{padding:32px}
  .uc__top .uc__card{padding:25px 25px 40px}
  /* the head copy goes away and the body copy appears -- upstream swaps them, it does
     not move one element */
  .uc__top .uc__card__head .br-cta{display:none}
  .uc__top__cta--m{display:inline-flex;flex:0 0 auto;align-self:flex-start}
  .uc__card__head{flex-direction:column;align-items:flex-start;gap:16px}
  /* upstream stays row+wrap with full-width children -- a column with flex-start
     alignment shrink-wraps the list and ran the links 10px narrow */
  .uc__top__body{flex-wrap:wrap}
  .uc__top__body > *{flex:1 1 100%}
  .uc__top__foot{width:100%}
  /* upstream keeps the 130px numeral and the 80px row gap at mobile; only the
     direction changes, via row+wrap with full-width columns */
  .uc__grow .uc__card{padding:30px}
  .uc__grow__row{flex-wrap:wrap;gap:80px}
  .uc__grow__col{flex:1 1 100%}}

/* 5 · what the "Prebuilt" tag means. Upstream is Elementor's nested accordion, which is
   real <details>/<summary> with a 10px cyan chevron -- kept native rather than swapped
   for the site's .br-faq, so it needs no JS and keeps its own keyboard behaviour. */
.uc__faq__in{align-items:flex-start;gap:64px;padding:60px 0 0;overflow:hidden}
/* the six items live in ONE widget upstream, spaced 12px; the section's 64px gap
   applies to that widget, not between the items */
.uc__faq__acc{width:100%;display:flex;flex-direction:column;gap:10px}
/* upstream's accordion is borderless except for a 1px rule under each item, with a
   fixed 48x48 icon box that -- not the 26px title -- sets the closed height at 68 */
.uc__acc{width:100%;border:1px solid #E5E9EC;border-radius:16px;background:transparent}
.uc__acc > summary{cursor:pointer;display:flex;align-items:center;
  justify-content:space-between;gap:30px;list-style:none;
  font-size:16px;line-height:26px;font-weight:400;color:#002840;
  padding:10px 10px 10px 16px}
.uc__acc > summary::-webkit-details-marker{display:none}
.uc__acc > summary::after{content:"";flex:none;width:48px;height:48px;
  transition:transform 200ms ease-in-out;
  background:no-repeat center/10px 10px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10' fill='none'%3E%3Cpath d='M5 7.916a.62.62 0 0 1-.441-.183L.092 3.267A.31.31 0 0 1 0 3.046c0-.083.033-.162.092-.221a.31.31 0 0 1 .441 0L5 7.291l4.467-4.466a.31.31 0 0 1 .441 0 .31.31 0 0 1 0 .442L5.442 7.733a.62.62 0 0 1-.442.183Z' fill='%23019ACE'/%3E%3C/svg%3E")}
.uc__acc[open] > summary::after{transform:rotate(180deg)}
.uc__acc > p{font-size:16px;line-height:26px;color:#333;margin:0;padding:16px 16px 32px}
@media(max-width:1024px){.uc__faq__in{gap:32px;padding:26px 0}}

/* 6 · the Vidyard embed — rendered as its poster, as the saved page's <noscript> does */
.uc__video__in{align-items:flex-start;gap:64px;padding:60px 0 0;overflow:hidden}
.uc__video__frame{display:block;width:100%;height:auto;border-radius:20px}
@media(max-width:1024px){.uc__video__in{gap:32px;padding:26px 0}}

/* 7 · proof strip + three customer stories */
.uc__cases__in{gap:40px;padding:80px 0 0}
.uc__cases__head{display:flex;flex-direction:column;gap:20px}
.uc__cases__kick{font-size:14px;line-height:14px;font-weight:500;letter-spacing:1px;
  text-transform:uppercase;color:var(--text);text-align:center;margin:0}
.uc__cases__h{font-size:50px;line-height:60px;font-weight:500;color:var(--text);
  text-align:center;margin:0}
.uc__cases__row{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.uc__case{display:flex;flex-direction:column;gap:12px;color:inherit}
.uc__case img{display:block;width:100%;height:auto;aspect-ratio:350/232;
  object-fit:cover;border-radius:20px}
/* upstream keeps the pills on one line and lets a long label wrap INSIDE its pill */
.uc__case__pills{display:flex;flex-wrap:nowrap;gap:8px}
.uc__pill{font-size:12px;line-height:16px;font-weight:500;border-radius:20px;padding:2px 8px 3px}
.uc__pill--dark{color:#fff;background:#000}
.uc__pill--yellow{color:#fff;background:#0461C8}
.uc__case__t{font-size:22px;line-height:28px;font-weight:500;color:var(--text);margin:0}
.uc__case__more{font-size:16px;line-height:26px;color:var(--cyan);text-decoration:underline}
.uc__case:hover .uc__case__more{text-decoration:none}
@media(max-width:1024px){
  .uc__cases__in{padding:26px 0}
  .uc__cases__h{font-size:30px;line-height:38px}
  .uc__case__t{font-size:18px;line-height:24px}}
@media(max-width:767px){.uc__cases__row{grid-template-columns:1fr}}

/* 8 · let's discuss your specific use case — copy beside the HubSpot form */
.uc__contact__in{flex-direction:row;align-items:center;gap:30px;padding:120px 0;overflow:hidden}
.uc__contact__l{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:40px}
.uc__anchor{height:0}
.uc__contact__l .uc__h2{font-size:50px;line-height:60px}
.uc__contact__ps p{margin:0}
.uc__contact__p{font-size:16px;line-height:26px;color:var(--text);margin:0}
.uc__contact__h3{font-size:30px;line-height:43px;font-weight:500;color:#000;margin:0}
.uc__contact__list{margin:0;padding:0 0 0 40px;color:var(--text);
  font-size:16px;line-height:26px}
.uc__contact__list li{margin-bottom:0}
.uc__contact__card{flex:0 0 auto;width:540px;max-width:100%;box-sizing:border-box;
  display:flex;flex-direction:column;gap:30px;
  padding:32px;background:#EAF7FE;border-radius:20px}
/* mirrors HubSpot's own boxes: a 42px label over a 2-up list of 20px rows, 16px gap */
.uc__opts{border:0;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:16px}
.uc__opts legend{width:100%;font-size:16px;line-height:16px;font-weight:500;
  color:var(--text);padding:0 0 26px}
.uc__opts legend span{color:var(--text)}
.uc__opt{flex:1 1 calc(50% - 8px);min-width:0;display:flex;align-items:center;gap:8px;
  font-size:14px;line-height:20px;color:var(--text)}
.uc__opt input{flex:none;width:18px;height:18px;margin:0;accent-color:#019ACE}
.uc__contact__card .lm__legal,.uc__contact__card .lm__cbx{color:var(--text)}
/* HubSpot stacks the opt-in and the legal note with no space between them */
.uc__contact__card .lm__cbx{margin-bottom:8px;line-height:14px}
.uc__contact__card .lm__submit{margin-top:0}
.uc__contact__card .lm__legal{font-size:12px;line-height:14px}
/* upstream collapses this heading out of the flow with negative margins -- it paints
   but takes 4px, so the form sits right under the card edge */
.uc__contact__card h3{font-size:20px;line-height:34px;font-weight:400;color:#000;
  margin:-20px 0 -10px}
.uc__contact__card .lm__f input,
.uc__contact__card .lm__f textarea{border-color:#CCD4D9}
@media(max-width:1024px){
  .uc__contact__in{flex-direction:column;align-items:stretch;gap:36px;padding:36px 0 26px}
  .uc__contact__card{width:100%;padding:20px;gap:20px}
  .uc__contact__l{gap:32px}
  .uc__contact__l .uc__h2{font-size:30px;line-height:38px}
  .uc__contact__h3{font-size:24px;line-height:30px}
  /* the widget shrink-wraps at tablet, so the list is as wide as its longest line */
  .uc__contact__list{align-self:flex-start}
  .uc__contact__card h3{font-size:18px;line-height:29px;align-self:flex-start}}

/* the hero's tag row, prebuilt toggle and filter bar */
.uc-filter-tags-list{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.uc-filter-tag{cursor:pointer;display:block;font:inherit;font-size:12px;line-height:18px;
  font-weight:500;color:#fff;background:transparent;border:1px solid rgba(255,255,255,.2);
  border-radius:30px;padding:0 10px}
.uc-filter-tag:hover{background:rgba(255,255,255,.25);border-color:transparent}
.uc-filter-tag.active{color:#fff;background:#0461C8;border-color:#0461C8}
.uc-filter-tag.active::after{content:" x";position:relative;top:-1px;padding-left:3px}
.prebuilt-toggle{position:relative;display:flex;align-items:center;
  font-size:14px;line-height:24px;color:#fff;white-space:nowrap}
.prebuilt-toggle input{position:absolute;width:1px;height:1px;opacity:0}
.prebuilt-toggle label{cursor:pointer;position:relative;font-weight:500;padding:1px 0 0 30px}
.prebuilt-toggle label::before{content:"";position:absolute;left:0;top:4px;
  width:22px;height:14px;border-radius:14px;background:rgba(255,255,255,.3);
  transition:background 150ms linear}
.prebuilt-toggle label::after{content:"";position:absolute;left:2px;top:6px;
  width:10px;height:10px;border-radius:50%;background:#fff;transition:transform 150ms linear}
.prebuilt-toggle input:checked + label::before{background:#0461C8}
.prebuilt-toggle input:checked + label::after{transform:translateX(8px)}
.prebuilt-toggle input:focus-visible + label::before{outline:2px solid #0179F8;outline-offset:2px}
.uc-filter-top{position:relative;z-index:5;width:100%;display:flex;flex-wrap:wrap;
  align-items:center;justify-content:space-between;gap:30px;padding:35px;
  color:var(--text);background:#fff;border-radius:20px 20px 0 0}
.uc-filter-top__main{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;
  gap:16px;flex:0 0 auto;width:auto}
.filter-wrap{display:flex;gap:10px;justify-content:center}
.uc-filter-top__label{font-size:16px;line-height:26px;font-weight:500;color:var(--text);
  padding-top:2px}
/* a native <select> is as wide as its widest OPTION; upstream's control is as wide as
   its LABEL. The hidden span sizes the wrapper to the label and the select fills it. */
/* upstream's pill is padding + label + 10px gap + a 16x10 chevron; heights are
   padding*2 + a 1.1em line, so 49.6 / 43.4 / 35.4 at the three breakpoints */
.uc-filter-sel{position:relative;display:block;height:49.6px}
.uc-filter-sel__sr{display:block;visibility:hidden;height:0;overflow:hidden;
  white-space:nowrap;font-size:16px;line-height:1.1;font-weight:500;padding:0 51px 0 25px}
/* native select chrome adds ~20px per control and tipped the bar onto a second row;
   upstream draws its own chevron, so appearance:none + a background chevron it is */
.uc-filter-sel select{cursor:pointer;-webkit-appearance:none;appearance:none;
  position:absolute;inset:0;width:100%;box-sizing:border-box;
  font:inherit;font-size:16px;line-height:1.1;font-weight:500;color:#fff;
  border:0;border-radius:60px;padding:16px 51px 16px 25px;
  background:#019ACE no-repeat right 25px center/16px 10px
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10' fill='none'%3E%3Cpath d='M1 1.5L8 8.5L15 1.5' stroke='white' stroke-opacity='0.99' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.uc-filter-sel select:hover{border-color:#666}
.uc__empty{max-width:1300px;margin:0 auto;padding:48px 15px 0;
  font-size:16px;line-height:26px;color:#666;text-align:center}
@media(max-width:1400px){
  .uc-filter-top{padding:25px}
  .uc-filter-top__label{font-size:14px;line-height:16px}
  .uc-filter-sel{height:43.4px}
  .uc-filter-sel__sr{font-size:14px;padding:0 44px 0 18px}
  .uc-filter-sel select{padding:14px 44px 14px 18px;font-size:14px;
    background-position:right 18px center}}
/* upstream breaks the bar out of the 15px gutter below 1200 and parks a 70px right
   pad where the (now hidden) grid toggle used to sit */
@media(max-width:1199px){
  #scroll-filters{width:calc(100% + 30px);margin:0 -15px;border-radius:0;padding-right:70px}
  .filter-wrap{flex-wrap:wrap;justify-content:flex-start}}
@media(max-width:1024px){
  .uc-filter-top__main{flex-direction:column;align-items:flex-start;flex-shrink:1}}
@media(max-width:767px){
  .uc-filter-top__main{flex-wrap:wrap;width:100%}
  .uc-filter-tags-list{justify-content:center}
  .uc-filter-top{justify-content:flex-start}
  /* the pills keep their own width and wrap; full-width stacking made the bar 382
     tall against the source's 208 at 480 */
  .uc-filter-sel{height:35.4px}
  .uc-filter-sel__sr{padding:0 42px 0 16px}
  .uc-filter-sel select{padding:10px 42px 10px 16px;background-position:right 16px center}}

/* ---------------------------------------------------------------- PRIORITIZATION GRID
   Upstream's tooltip primitive, its eye toggle, and the 3430x780 value/effort board.
   The board is server-rendered: every pill's left/top is inline data, not computed. */
[data-tooltip]{position:relative}
[data-tooltip]:before{content:"";position:absolute;opacity:0;pointer-events:none;z-index:11;
  transition:opacity 250ms;transition-delay:100ms}
[data-tooltip][data-tooltip-right]:before{left:100%;top:50%;transform:translate(7px,-50%);
  border-width:6px 6px 6px 0;border-style:solid;
  border-color:transparent rgba(0,0,0,.8) transparent transparent}
[data-tooltip]:after{content:attr(data-tooltip);opacity:0;pointer-events:none;position:absolute;
  max-width:280px;background:rgba(0,0,0,.8);color:#fff;border-radius:5px;padding:6px 8px 4px;
  white-space:nowrap;font-size:13px;line-height:1.3;z-index:10;
  transition:opacity 250ms;transition-delay:100ms;left:50%;top:0;transform:translate(-50%,-110%)}
[data-tooltip-fixedw]:after{width:240px;white-space:normal}
[data-tooltip][data-tooltip-right]:after{left:100%;top:50%;transform:translate(10px,-50%)}
[data-tooltip]:hover:after,[data-tooltip]:focus:after,
[data-tooltip]:hover:before,[data-tooltip]:focus:before{opacity:1}
@media(max-width:1400px){
  [data-tooltip][data-tooltip-right]:before{top:100%;left:50%;transform:translate(-50%,4px);
    border-width:0 6px 6px 6px;border-color:transparent transparent rgba(0,0,0,.8) transparent}
  [data-tooltip][data-tooltip-right]:after{top:100%;left:50%;transform:translate(-50%,10px)}}
.uc-info{display:flex;align-items:center;line-height:0}

.uc-filter-top__grid{display:flex;flex-direction:row;align-items:center;gap:10px;width:auto}
.uc-filter-top__grid p{margin:0;padding-top:2px;font-size:16px;line-height:16px;
  font-weight:500;color:#000}
.matrix-toggle{cursor:pointer;position:relative;display:block;width:47px;height:47px;
  border-radius:50%;flex:none}
.matrix-toggle svg{display:block;position:absolute;top:0;left:0}
.matrix-toggle-off{opacity:0;z-index:5;transition:opacity 200ms}
.matrix-toggle.off .matrix-toggle-off{opacity:1}
@media(max-width:1400px){.uc-filter-top__grid p{font-size:14px}}
/* upstream drops the whole label+eye group below 1200 */
@media(max-width:1199px){.uc-filter-top__grid{display:none}}

.uc__matrix{overflow:hidden;padding:0 15px;transition:height 300ms ease}
.uc__matrix__in{max-width:1300px;width:100%;margin:0 auto}
.uc__matrix__hw{padding:20px 0 0 50px}
.uc__matrix__h{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#002840}
.uc-matrix__grid{padding-bottom:40px}
/* the pane is the horizontal scroller; site.js widens its padding to the window edges
   and cancels it with an equal negative margin, so the board bleeds full width */
.uc-matrix__grid-container{position:relative;overflow-x:scroll;scrollbar-width:none;
  -ms-overflow-style:none}
.uc-matrix__grid-container::-webkit-scrollbar{width:0;background:transparent}
.uc-matrix__grid-the-matrix{display:flex;justify-content:center;align-items:center;
  position:relative;width:3430px;height:780px;background:#fff;border-radius:20px}
.uc-matrix__grid-the-matrix-col{display:flex;flex-direction:column;justify-content:center;
  align-items:center;width:50px;height:780px}
.uc-matrix__grid-the-matrix-col.col-items{flex:1}
.uc-matrix__grid-the-matrix-row{display:flex;flex-direction:row;justify-content:center;
  align-items:center;width:100%;height:50px}
.uc-matrix__grid-the-matrix-row.row-items{position:relative;flex:1}
.uc-matrix__grid-the-matrix-legend-vertical{display:inline-block;font-size:20px;
  font-weight:500;color:#002840;transform:rotate(270deg)}
.uc-matrix__grid-the-matrix-legend-horizontal-col{display:flex;flex:1;
  justify-content:center;align-items:center}
.uc-matrix__grid-the-matrix-legend-horizontal{display:inline-block;font-size:20px;
  font-weight:500;color:#002840}
.uc-matrix__grid-the-matrix-items-bg{position:absolute;width:100%;height:100%;opacity:.5;
  background-size:74px;
  background-image:linear-gradient(to right,rgba(0,0,0,.1) 1px,transparent 1px);
  border-bottom:1px solid #000;border-left:1px solid #000;border-right:1px solid #000}
.uc-matrix__grid-the-matrix-items-dash-first,
.uc-matrix__grid-the-matrix-items-dash-second{position:absolute;display:block;width:1px;
  height:100%;background-image:linear-gradient(to bottom,#000 70%,rgba(255,255,255,0) 0);
  background-position:left;background-size:1px 10px;background-repeat:repeat-y;left:1110px}
.uc-matrix__grid-the-matrix-items-dash-second{left:2220px}
.uc-matrix__grid-the-matrix-items{position:absolute;width:100%;height:100%;overflow:hidden}
.uc-matrix-item{position:absolute;display:flex;gap:8px;align-items:center;width:200px;
  height:auto;font-size:11px;font-weight:500;line-height:1.2;border-radius:8px;
  padding:3px 10px;transition:transform 100ms}
.uc-matrix-item:hover{transform:scale(1.05)}
.uc-matrix-item img{border-radius:0;flex:none}
.uc-matrix-item span{padding-top:2px}
.uc-matrix__grid-scroll-container{width:100%;height:2px;border:none;border-radius:1px;
  background-color:#00284019;margin-top:9px}
.uc-matrix__grid-scroll{position:relative;width:calc(100% - 396px);height:2px;border:none;
  background-color:transparent;margin-left:198px}
.uc-matrix__grid-scroll-handle{position:absolute;display:flex;justify-content:center;
  align-items:center;width:396px;height:18px;background:#019ACE;border:none;
  border-radius:500px;top:-9px;margin-left:-198px;outline:none;cursor:grab;touch-action:none}
.uc-matrix__grid-scroll-handle:active{cursor:grabbing}
.uc-matrix__grid-scroll-handle span{font-size:7px;color:#fff;opacity:.4;letter-spacing:2px}
/* upstream hides the board itself below 1025 -- the eye that opens it is already gone
   below 1200, so the section can only be open on desktop */
@media(max-width:1024px){.uc-matrix__grid{display:none}}

/* ========================================================================== AI EMAIL
   The "Put the AI in Email" landing page (post 63532). A wp-page template: boxed
   sections on a 15px rail with a 1110px inner, except the hero and the tour embed,
   which run to 1400, and the use-case marquee, which is full-bleed. */
.p-ae{--ae-text:#002840;--ae-link:#019ACE;--ae-muted:#667E8C;--ae-ink:#000;--ae-yellow:#0461C8}
/* the shared header parks its mobile drawer off-screen right (trap 17); body alone,
   never an html clip beside it (trap 33) */
body.p-ae{overflow-x:hidden}
.p-ae{color:var(--ae-text)}
.ae__uc,.ae__lead,.ae__feat,.ae__rfp,.ae__tourhead,.ae__tour,.ae__stories,.ae__proven,
.ae__res,.ae__quotes,.ae__cta{padding:0 15px}
.ae__uc__in,.ae__lead__in,.ae__feat__in,.ae__rfp__in,.ae__tourhead__in,.ae__stories__in,
.ae__proven__in,.ae__res__in,.ae__quotes__in,.ae__cta__in{
  width:100%;max-width:1110px;margin:0 auto;box-sizing:border-box;
  display:flex;flex-direction:column;gap:30px}
.ae__head{display:flex;flex-direction:column;gap:5px}
.ae__stories .ae__head,.ae__proven .ae__head{padding:5px 0}
/* these three section headings are centred at every width upstream (verified by a
   text-matched alignment sweep against the source, not by eye) */
.ae__stories .ae__h2,.ae__proven .ae__h2,.ae__cta .ae__h2{text-align:center}
.ae__kicker{margin:0;font-size:20px;line-height:29px;font-weight:400;color:var(--ae-muted)}
.ae__h1{margin:0;font-size:120px;line-height:120px;font-weight:500;color:#fff}
.ae__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:var(--ae-text)}
.ae__h3{margin:0;font-size:36px;line-height:43px;font-weight:500;color:var(--ae-ink)}
.ae__rt p{margin:0;font-size:16px;line-height:26px;color:var(--ae-ink)}
.ae__rt a{color:var(--ae-link);text-decoration:underline}
.ae__rt a:hover{text-decoration:none}

/* --- 1 hero: copy over a full-bleed video ---------------------------------------- */
.ae__herom{display:none;padding:0 15px}
.ae__herom__in{width:100%;max-width:1110px;margin:0 auto;box-sizing:border-box;
  display:flex;flex-direction:column;gap:30px}
/* upstream centres the mobile hero's copy and lets each block shrink to its own text
   (measured: h1 360 wide, sub 500, inside a 994 column) */
.ae__herom__copy{display:flex;flex-direction:column;align-items:center;gap:20px}
.ae__herom__h1{margin:0;font-size:80px;line-height:80px;font-weight:500;color:#000}
.ae__herom__sub{margin:0;width:500px;max-width:100%;font-size:18px;line-height:29px;color:#000}
.ae__herom__video{display:block;width:100%;height:auto}
.ae__hero__in{position:relative;width:100%;max-width:1400px;margin:0 auto;height:642px}
.ae__hero__video{display:block;width:100%;height:100%;object-fit:cover}
.ae__hero__copy{position:absolute;inset:0;width:100%;max-width:1110px;margin:0 auto;
  box-sizing:border-box;padding:130px 0 150px;
  display:flex;flex-direction:column;gap:20px}
.ae__hero__copy > *{width:550px;max-width:100%}
.ae__hero__sub{margin:0;font-size:24px;line-height:34px;font-weight:400;color:#fff}

/* --- 2 use-case heading ----------------------------------------------------------- */
.ae__uc__in{padding:60px 0 0}

/* --- 3 the use-case marquee ------------------------------------------------------- */
.inf-slider{position:relative;z-index:1;width:100%;max-width:3200px;padding:50px 0 70px;
  margin:0 auto;overflow:hidden}
@media(min-width:3200px){
  .inf-slider::before,.inf-slider::after{content:"";position:absolute;z-index:10;top:0;
    left:0;width:250px;height:100%;
    background:linear-gradient(90deg,rgba(255,255,255,1) 0%,rgba(255,255,255,.3) 80%,rgba(255,255,255,0) 100%)}
  .inf-slider::after{left:auto;right:0;
    background:linear-gradient(270deg,rgba(255,255,255,1) 0%,rgba(255,255,255,.3) 80%,rgba(255,255,255,0) 100%)}}
.inf-slider-wrapper{display:flex;width:6516px;animation:infmove 60s linear infinite}
@keyframes infmove{0%{transform:translateX(0)}100%{transform:translateX(-33.3333%)}}
.inf-item{cursor:pointer;display:flex;flex-direction:column;gap:32px;margin-right:30px;
  color:inherit}
.inf-item img{display:block;width:332px;height:auto;transition:transform 300ms ease-in-out}
.inf-item:hover img{transform:scale(1.05) translateY(-10px)}
.inf-item__text{opacity:0;transform:translateY(20px);display:flex;flex-direction:column;
  gap:16px;width:332px;transition:transform 300ms ease-in-out,opacity 300ms ease-in-out}
.inf-item:hover .inf-item__text{opacity:1;transform:translateY(0)}
.inf-item h5{margin:0;font-size:24px;line-height:30px;font-weight:500;color:var(--ae-text)}
.inf-item__text__link{font-size:16px;line-height:26px;color:var(--ae-link);
  text-decoration:underline}
.inf-item:hover .inf-item__text__link{text-decoration:none}
@media(max-width:1199px){
  .inf-item__text{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.inf-slider-wrapper{animation:none}}

/* --- 4 the lead-in pair ----------------------------------------------------------- */
.ae__lead__in{flex-direction:row;gap:50px}
.ae__lead__h{width:583px;flex:0 1 auto;min-width:0}
.ae__lead__p{width:477px;flex:0 1 auto;min-width:0}
.ae__lead__p p{margin:0;font-size:18px;line-height:29px;color:var(--ae-text)}

/* --- 5 the three feature rows ----------------------------------------------------- */
.ae__feat__in{padding:100px 0 9px;gap:100px}
.ae__feat__row{display:flex;flex-direction:row;align-items:center;gap:100px}
.ae__feat__row--flip{flex-direction:row-reverse}
.ae__feat__media{flex:0 1 auto;width:657px;min-width:0;aspect-ratio:595/440;
  display:flex;flex-direction:column;justify-content:center;gap:30px}
/* the agent video is framed in a black rounded box; the other two rows are bare art */
.ae__feat__row:first-child .ae__feat__media{width:658px;background:#000;border-radius:20px;
  padding:20px;box-sizing:border-box}
.ae__feat__copy{flex:0 1 auto;width:354px;min-width:0;display:flex;flex-direction:column;gap:30px}
.ae__feat__row:first-child .ae__feat__copy{width:352px}
.ae__feat__img,.ae__feat__video{display:block;width:100%;height:100%;object-fit:cover;
  border-radius:20px}

/* --- 6 the RFP band --------------------------------------------------------------- */
.ae__rfp__in{padding:100px 0 0}
.ae__rfp__box{display:flex;flex-direction:row;align-items:center;gap:20px;
  background:#E5F5FA;border-radius:10px;padding:44px 55px}
.ae__rfp__copy{flex:0 1 600px;min-width:0;display:flex;flex-direction:column;gap:12px}
/* these two widgets -- and only these two on the whole page -- carry a 2px top margin
   on their Elementor widget-container upstream; that is the 4px the RFP band was short */
.ae__rfp__copy .ae__h3,.ae__rfp__p{margin-top:2px}
.ae__rfp__p{margin:0;font-size:18px;line-height:29px;color:var(--ae-ink)}
.ae__rfp__cta{flex:0 0 auto}

/* --- 7 tour heading --------------------------------------------------------------- */
.ae__tourhead__in{padding:100px 0 0;flex-direction:row;align-items:flex-start;gap:50px}
.ae__tourhead__in .ae__head{width:583px;flex:0 1 auto;min-width:0}
.ae__tourhead__p{width:477px;flex:0 1 auto;min-width:0}
.ae__tourhead__p p{margin:0;font-size:18px;line-height:29px;color:var(--ae-text)}

/* --- 8 the tour embed ------------------------------------------------------------- */
.ae__tour__in{width:100%;max-width:1400px;margin:0 auto;box-sizing:border-box;
  display:flex;flex-direction:column;gap:40px;padding:60px 0 0}
/* upstream's tour frame: a clipped 15px-radius wrapper whose aspect ratio steps down
   as the viewport narrows, with the lead gate laid over it */
.iframe-wrapper{position:relative;z-index:1;width:100%;border-radius:15px;
  overflow:hidden}
.iframe-box{border:1px solid #eee}
.iframe-box,.iframe-box iframe{display:block;width:100%;height:auto;aspect-ratio:16/10}
/* border:0 belongs to the frame only -- putting it in the shared rule above silently
   cancelled .iframe-box's own 1px border */
.iframe-box iframe{border:0}
@media(max-width:1200px){.iframe-box,.iframe-box iframe{aspect-ratio:16/12}}
@media(max-width:992px){.iframe-box,.iframe-box iframe{aspect-ratio:1/1}}
@media(max-width:768px){.iframe-box,.iframe-box iframe{aspect-ratio:2/3}}
@media(max-width:500px){.iframe-box,.iframe-box iframe{aspect-ratio:1/2}}
@media(max-width:400px){.iframe-box,.iframe-box iframe{aspect-ratio:1/3}}
.br-overlay-showhide{display:none}
.br-overlay-showhide.show{display:block}
.br-overlay{position:absolute;z-index:10000;top:0;left:0;width:100%;height:100%;
  display:flex;align-items:center;align-content:center;justify-content:center;
  background:rgba(0,0,0,.7)}
.br-overlay-content{display:flex;flex-wrap:wrap;align-items:flex-start;
  justify-content:space-between;width:100%;max-width:760px;padding:40px;background:#fff;
  border-radius:30px;margin:0 15px;box-sizing:border-box}
@media(max-width:1199px){.br-overlay-content{padding:25px}}
.br-overlay__left,.br-overlay__right{width:calc(50% - 10px)}
.br-overlay__g2{display:flex;align-items:center;justify-content:flex-start;
  margin-bottom:20px}
.br-overlay__g2 img{width:120px;height:auto;margin-right:15px}
.br-overlay__g2__score{font-size:20px;font-weight:500;margin-right:5px}
.br-overlay__g2__count{color:#555;font-size:14px}
.br-overlay h3{margin:0 0 20px;font-size:36px;line-height:43px;font-weight:500;
  color:var(--ae-text)}
.br-overlay__left p{margin:0;font-size:16px;line-height:26px;color:var(--ae-text)}
.br-overlay__g2 img{border-radius:20px}
/* the gate's own form rhythm: 12px legal type and a yellow shrink-to-fit submit,
   not the full-width one the page's other forms use */
.br-overlay .lm__consent{gap:8px}
.br-overlay .lm__cbx{align-items:flex-start;gap:8px;font-size:12px;line-height:14px;
  color:var(--ae-muted)}
.br-overlay .lm__cbx input{width:18px;height:18px;flex:0 0 auto}
.br-overlay .lm__legal{font-size:12px;line-height:14px;color:var(--ae-muted)}
.br-overlay .lm__submit{align-self:flex-start;width:auto;padding:11px 32px;
  border-radius:99px;background:#0461C8;color:#fff;
  font-size:16px;line-height:26px;font-weight:500;margin:0}
.br-overlay .lm__submit:hover{background:#0461C8}
@media(max-width:767px){
  .br-overlay__left,.br-overlay__right{width:100%}
  .br-overlay__left{margin-bottom:25px}}

/* --- 9 the customer-story carousel ------------------------------------------------ */
.ae__stories__in{padding:120px 0}
/* Upstream lays the swiper, then the arrows, then the dots out in one wrapping flex
   row: the arrows are 41px discs in normal flow at the bottom right, NOT floated over
   the slide, and the dots are absolutely centred on that last line. */
.ae__car{position:relative;display:flex;flex-wrap:wrap;justify-content:flex-end;
  gap:40px 0}
/* upstream's 12px sits as a margin on prev alone, so next->dots has no gap */
.ae__car__btn--prev{margin-right:12px}
.ae__car__view{flex:1 1 100%;overflow:hidden;padding-bottom:16px}
.ae__car__track{display:flex;flex-direction:row;
  transition:transform 500ms cubic-bezier(.25,.1,.25,1)}
.ae__car__track > *{flex:0 0 100%;width:100%;box-sizing:border-box}
.ae__story{display:flex;flex-direction:row;align-items:center;gap:30px;background:#fff}
/* the art sits in its own tinted, rounded, clipped box and is pinned to its right
   edge, so it bleeds off the left of the card */
.ae__story__img{flex:0 1 auto;width:604px;min-width:0;align-self:center;
  display:flex;flex-direction:column;align-items:flex-end;gap:30px;
  background:#F2F4F5;border-radius:20px;overflow:hidden}
.ae__story__img img{display:block;width:75%;height:auto;aspect-ratio:1/1;
  object-fit:cover;border-radius:20px}
.ae__story__body{flex:0 1 auto;width:476px;min-width:0;display:flex;
  flex-direction:column;gap:32px}
.ae__story__quote{margin:0;font-size:24px;line-height:34px;font-weight:500;
  color:var(--ae-text)}
.ae__story__by{display:flex;flex-direction:row;align-items:center;gap:24px}
.ae__story__who{display:flex;flex-direction:column;gap:0}
.ae__story__who h4{margin:0;font-size:14px;line-height:20px}
.ae__story__who h4:first-child{font-weight:500;color:var(--ae-link)}
.ae__story__who h4:last-child{font-weight:400;color:var(--ae-muted)}
/* the logo hangs off a hairline divider */
.ae__story__logo{display:block;padding-left:24px;border-left:1px solid #E5E9EC}
.ae__story__logo img{display:block;width:auto;height:40px}
/* "See case study" is a pill, and its round arrow lifts out of it on hover */
.ae__story__cta{align-self:flex-start;display:flex;flex-direction:row;
  align-items:flex-start;gap:32px;background:#E5E9EC;border-radius:20px;
  padding:12px 16px;color:var(--ae-link)}
.ae__story__cta__t{margin:0;font-size:16px;line-height:26px;font-weight:500;
  color:var(--ae-link);text-decoration:underline;text-decoration-color:transparent;
  transition:.4s}
.ae__story__cta:hover .ae__story__cta__t{text-decoration-color:var(--ae-link)}
.ae__story__cta__i{display:flex;align-items:center;justify-content:center;
  flex:1 0 auto;width:24px;height:24px;border-radius:50%;background:var(--ae-link);
  transition:.4s}
.ae__story__cta__i svg{display:block}
.ae__story__cta:hover .ae__story__cta__i{background:#0182ae;
  transform:translate(12px,-8px)}
.ae__car__btn{display:flex;align-items:center;justify-content:center;
  width:41px;height:41px;padding:8px;box-sizing:border-box;border:0;border-radius:50%;
  background:var(--ae-link);cursor:pointer}
.ae__car__btn svg{display:block}
/* the review rail's arrow is an eicon chevron glyph -- an 18.1px advance on a 25px
   line -- so its button is a 34.1x41 ellipse, not the story rail's 41x41 disc */
.ae__car--quote .ae__car__btn{width:34.1px}
.ae__car--quote .ae__car__btn svg{width:18.1px;height:25px}
.ae__car__dots{position:absolute;left:0;right:0;bottom:5px;margin:0 auto;
  width:fit-content;height:36px;
  display:flex;flex-direction:row;justify-content:center;align-items:center;gap:8px}
.ae__car__dots button{width:6px;height:6px;padding:0;border:0;border-radius:50%;
  background:var(--ae-text);opacity:.25;cursor:pointer}
.ae__car__dots button.is-on{opacity:1}

/* --- 10 the Forrester band -------------------------------------------------------- */
.ae__proven__cols{display:flex;flex-direction:row;gap:32px;
  background:#E5F5FA;border-radius:32px}
.ae__proven__copy{flex:0 1 auto;width:594px;min-width:0;box-sizing:border-box;
  padding:64px 32px;display:flex;flex-direction:column;gap:40px}
.ae__proven__copy .ae__h3{color:var(--ae-text)}
.ae__proven__copy .ae__rt p{color:var(--ae-text);font-size:18px;line-height:29px}
.ae__proven__art{flex:0 0 484px;min-width:0}
.ae__proven__art img{display:block;width:100%;height:auto}

/* --- 12/13/14 the three resource rails -------------------------------------------- */
.ae__res__in{gap:0}
.ae__res--1 .ae__res__in{padding:120px 0 0}
/* the only 15px widget margin on the page: upstream's sub-line widget carries it, so
   the head measures 203 not 188 */
/* 18px at EVERY width upstream -- unlike the kicker beside it, this line never steps.
   At 20px it took a third line below 480 and pushed the whole rail down 29px. */
.ae__res__sub{margin:15px 0 0;font-size:18px;line-height:29px;color:var(--ae-text)}
.ae__spacer{padding:0 15px}
/* Upstream clips the rail 30px outside the 1110 column, so the hover lift is not cut
   off but the off-screen cards are. The rail box is the clip; the swiper inside is the
   plain 1110 column. */
.ae__res__rail{margin:0;padding:30px 0 80px;overflow:hidden;
  display:flex;flex-direction:column;gap:30px}
@media(min-width:1200px){
  /* only here is there room to bleed the clip 30px outside the 1110 column so the
     card hover-lift is not cut off at the sides */
  .ae__res__rail{margin:0 -30px;padding:50px 30px 100px}
}
.ae__res .swiper-res{position:relative}
.swiper-res__track{display:flex;flex-direction:row;gap:30px;
  transition:transform 400ms cubic-bezier(.25,.1,.25,1)}
/* upstream wraps each card in a swiper-slide, so the SLIDE stretches to the tallest in
   the row and the card keeps its own height; here the card is the flex item itself, so
   it has to opt out of the stretch or it inherits the tallest card's trailing space */
.res-item{cursor:pointer;display:flex;flex-direction:column;align-items:flex-start;
  align-self:flex-start;
  gap:16px;flex:0 0 350px;width:350px;color:inherit;
  transition:transform 300ms ease-in-out}
.res-item img{display:block;width:100%;height:auto;border-radius:20px;
  transition:transform 300ms ease-in-out}
@media(min-width:1200px){
  .res-item:hover{transform:translateY(-10px)}
  .res-item:hover img{transform:scale(1.05) translateY(-10px)}}
.res-item__label{color:#fff;font-size:12px;font-weight:500;line-height:1.4;
  background:var(--ae-yellow);padding:3px 8px 1px;border-radius:50px}
.res-item h5{margin:0;font-size:24px;line-height:30px;font-weight:500;
  color:var(--ae-text)}
.res-item__link{color:var(--ae-link);font-size:16px;line-height:26px;
  text-decoration:underline}
.res-item:hover .res-item__link{text-decoration:none}
.swiper-res .swiper-buttons{position:absolute;right:0;bottom:-60px;display:flex;gap:10px}
.swiper-res .swiper-button-prev,.swiper-res .swiper-button-next{
  display:flex;align-items:center;justify-content:center;width:44px;height:44px;
  color:#fff;background:var(--ae-yellow);border:0;border-radius:50%;
  padding:0;margin:0;cursor:pointer}
.swiper-res .swiper-button-prev .ae__arw{transform:rotate(180deg)}

/* --- 15 the review carousel ------------------------------------------------------- */
.ae__quotes__in{padding:60px 0 0}
/* Upstream's slide IS the card (.carousel_box, background_background:classic):
   a pale tint (now #E6F3FE), 32px radius, 32px padding, 24px gap, and an e-con-boxed inner that caps
   at --content-width:730px and centres. */
.ae__quote{width:100%;box-sizing:border-box;display:flex;flex-direction:column;
  align-items:center;gap:24px;padding:32px;border-radius:32px;background:#E6F3FE}
.ae__quote > *{width:100%;max-width:730px;box-sizing:border-box}
/* the rating row shrinks to its stars and centres, like upstream's .e-rating-wrapper */
.ae__quote__rating{width:auto}
.ae__quote__rating{display:flex;flex-direction:row;justify-content:center}
/* upstream's star is an eicon glyph: a 14.5px advance in a 20px line, not a 20px box,
   and --e-rating-gap lands as a trailing margin on every icon INCLUDING the last, so
   the row measures 5x14.5 + 5x8 = 112.5, not 104.5 */
.ae__star{display:block;width:14.5px;height:20px;margin-right:8px}
.ae__quote__p{margin:0;font-size:24px;line-height:34px;font-weight:500;
  text-align:center;color:var(--ae-text)}
.ae__quote__by{display:flex;flex-direction:row;justify-content:center;
  align-items:center;gap:24px;padding:10px}
.ae__quote__person{display:flex;flex-direction:row;align-items:center;gap:10px;
  flex-wrap:nowrap}
.ae__quote__avatar{display:block;flex:0 0 40px;width:40px;height:40px;
  border-radius:50%;object-fit:cover}
.ae__quote__who{display:flex;flex-direction:column;gap:0;text-align:left;
  font-size:14px;line-height:20px}
.ae__quote__who strong{font-weight:500;color:var(--ae-link)}
.ae__quote__who span{font-weight:400;color:var(--ae-muted)}
/* the logo hangs off the same hairline divider the story card uses */
.ae__quote__logo{display:block;width:auto;height:40px;padding-left:24px;
  border-left:1px solid #E5E9EC}

/* --- 16 closing CTA --------------------------------------------------------------- */
.ae__cta__in{padding:120px 0}
.ae__cta__box{display:flex;flex-direction:column;align-items:center;gap:40px;
  padding:64px 32px;background:#E5F5FA;border-radius:32px}
.ae__cta__row{display:flex;flex-direction:row;gap:12px}

/* --- responsive -------------------------------------------------------------------
   1024 is the real hinge on this page: the hero swaps to its stacked twin, every
   two-column row folds, and the resource rail loses its 30px bleed. */
@media(max-width:1024px){
  .ae__hero{display:none}
  .ae__herom{display:block}
  .ae__herom__in{padding:40px 0 0}

  .ae__uc__in{padding:60px 0 0}
  .ae__lead__in{flex-direction:column;gap:20px}
  .ae__lead__h,.ae__lead__p{width:100%}
  .ae__feat__in{padding:60px 0 0;gap:100px}
  .ae__feat__row{gap:40px}
  /* upstream's --width here is 65/35 with flex:0 1 auto, so the 40px gap is taken out
     of both by shrink -- that lands on 620.7/333.3 in a 994 row, not 62/34 */
  .ae__feat__media,.ae__feat__row:first-child .ae__feat__media{flex:0 1 auto;width:65%}
  .ae__feat__copy,.ae__feat__row:first-child .ae__feat__copy{flex:0 1 auto;width:35%}
  .ae__tourhead__in{flex-direction:column;gap:20px;padding:60px 0 0}
  .ae__tourhead__in .ae__head,.ae__tourhead__p{width:100%}
  /* measured on the source: at 1025 these are 100 / 60-0 / 0 / 120, and every one of
     them steps at 1024 -- this is where the section-to-section spacing was drifting */
  .ae__rfp__in{padding:60px 0 0}
  .ae__tour__in{max-width:none;padding:26px 0}
  .ae__proven__in{padding:60px 0 0}
  .ae__spacer{height:60px}
  .ae__stories__in,.ae__cta__in{padding:60px 0}
  .ae__story{flex-direction:column;gap:30px}
  .ae__story__img,.ae__story__body{width:100%}
  /* the art stays 75% of the card and square at EVERY width upstream (measured 453/1110,
     576/768, 265/354, 338/450, 218/290) -- it never goes full-bleed.
     Once the card stacks, upstream keeps it pinned right, which leaves the tinted plate
     showing on ONE side only and reads as a misplaced image; centred here instead --
     divergence 24. Above 1024 the right pin is kept: the plate bleeds toward the card
     edge by design. */
  .ae__story__img{align-items:center}
  .ae__proven__cols{flex-direction:column;gap:30px}
  .ae__proven__copy,.ae__proven__art{width:100%;flex:0 0 auto}
  .ae__res--1 .ae__res__in{padding:60px 0 0}
  .ae__res--2 .ae__res__in,.ae__res--3 .ae__res__in{padding:20px 0 0}
  .ae__cta__row{flex-wrap:wrap}

  .ae__h2{font-size:30px;line-height:38px}
  .ae__h3{font-size:24px;line-height:30px}
  .ae__kicker{font-size:18px;line-height:29px}
  .ae__herom__sub,.ae__hero__sub{font-size:18px;line-height:29px}
  .inf-item h5,.res-item h5{font-size:20px;line-height:26px}
  .ae__story__quote,.ae__quote__p{font-size:18px;line-height:29px}
  .ae__herom__video{aspect-ratio:994/795;object-fit:cover}

  /* stories' inner and the two tinted boxes cap at 768 here; the quote rail does not */
  .ae__stories__in,.ae__cta__in{max-width:768px}
  .ae__stories__in{padding:0}
  /* NOT margin:0 auto -- an auto cross-axis margin on a flex item cancels the stretch
     and shrink-wraps the box to its own text (measured: the CTA box came out 366 wide
     inside a 768 column). The parent .._in already centres. */
  .ae__proven__cols,.ae__cta__box{max-width:768px}
  .ae__quotes__in{padding:9px 0 0}
  /* both rails tighten their swiper->controls gap here. Upstream ALSO drops the
     bullets out of the absolute centre into the control row, flush against the prev
     arrow; that is divergence 23 -- the dots stay centred at every width. */
  .ae__car{gap:24px 0}
  .ae__quote{gap:20px;border-radius:12px;padding:32px 64px 24px}
  .ae__quote__by{flex-direction:column;gap:10px}
  .ae__quote__person{flex-direction:column;gap:10px}
  .ae__quote__who{text-align:center}
  .ae__quote__logo{padding-left:0;border-left-width:0}
  .ae__cta__in{padding:60px 0 80px}
  .ae__story{gap:0}
  .ae__story__body{padding:16px;box-sizing:border-box;gap:20px}
  .ae__story__logo{padding-left:0;border-left:0}
  .ae__story__cta{border-radius:12px}
  .ae__proven__cols,.ae__cta__box{gap:0;border-radius:16px;padding:0 16px 16px}
  .ae__proven__copy,.ae__cta__box{gap:24px}
  .ae__proven__copy{padding:36px 20px 20px}
  /* upstream nests a 0/16/16 tinted shell around a 36/20/20 content box; one element
     carries both here, so the padding is their sum */
  .ae__cta__box{padding:36px}
  /* the art keeps upstream's 0/20/20 widget-container padding */
  .ae__proven__art{padding:0 20px 20px;box-sizing:border-box}
  /* the Forrester copy centres in the tablet band ONLY -- it is left-aligned again
     at 767 and below, so this cannot live in a plain max-width:1024 block */
}
@media(min-width:768px) and (max-width:1024px){
  .ae__proven__copy .ae__h3,.ae__proven__copy .ae__rt p{text-align:center}
}
@media(max-width:768px){
  /* upstream drops these headings' hard breaks here, so the lines reflow to fit
     (this is what made the uc heading 4 lines against the source's 3 at 390) */
  /* the four headings whose hard break upstream drops at <=768 (enumerated by walking
     every <br> on the source at 767 and reading its computed display, not by guessing):
     the use-case h2, both resource-rail h2s, and the closing CTA h2. The mobile hero's
     h1 keeps its break. */
  .ae__cta .ae__h2 br,.ae__uc__in .ae__h2 br,.ae__res .ae__h2 br{display:none}
}
@media(max-width:860px){
  /* upstream's .hide-mobile-tablet is on the player INSIDE the section, not the section
     itself -- so the band keeps its 26/26 inner padding and stays 52px tall here */
  .ae__tour .iframe-wrapper{display:none}
}
@media(max-width:767px){
  /* the hero h1 keeps 80/80 down to 441; its 60/60 step is at 440 (see below) */
  /* Elementor's --flex-wrap-mobile: these rows stay rows and wrap, they do not become
     columns. The RFP band keeps its 20px gap; the feature rows go to 30px. */
  .ae__rfp__box{padding:30px 20px;flex-wrap:wrap}
  .ae__rfp__copy{flex:0 0 auto;width:600px;max-width:100%}
  .ae__feat__row,.ae__feat__row--flip{flex-wrap:wrap;gap:30px}
  /* the :first-child variants must be repeated here: they beat a bare .ae__feat__copy
     on specificity, so listing only the short selector leaves row 0 at its 65/35 split */
  .ae__feat__media,.ae__feat__copy,
  .ae__feat__row:first-child .ae__feat__media,
  .ae__feat__row:first-child .ae__feat__copy{flex:0 0 100%;width:100%}
  .ae__quote{padding:24px 20px 12px}
  /* the Forrester heading swaps its 5/0 block padding for a 0/15 side rail here */
  .ae__proven .ae__head{padding:0 15px}
  /* the names block goes full width here, which pushes the logo onto its own line --
     that second line is the 36px the story card was missing below 768 */
  .ae__story__by{justify-content:center;gap:16px;flex-wrap:wrap}
  .ae__story__who{width:100%;text-align:center}
  /* the art's 0/20/20 widget padding is a tablet-only rule; below 768 the image is
     full-bleed inside the tinted box again */
  .ae__proven__art{padding:0}
  .ae__story__cta{flex-wrap:nowrap}
  /* these three sections lose their side rails and their rounded corners here */
  .ae__proven,.ae__cta{padding:0}
  .ae__proven__cols,.ae__cta__box{border-radius:0;max-width:none}
  .ae__cta__in{padding:26px 0 52px}
}
@media(max-width:440px){
  /* measured on the source: the mobile hero h1 is 80/80 down to 441 and 60/60 at 440 */
  .ae__herom__h1{font-size:60px;line-height:60px}
}


/* ================================================================= CASE STUDY DETAIL
   The single case-study template (post id 61831). Sections are e-con-boxed: 15px on the
   section, a 1110px inner that carries the vertical padding. The reading column is a
   fixed 612px beside a 200px sticky table of contents -- upstream's TOC widget, rebuilt
   on the same scroll spy the use-case template uses. */
.p-csd{--csd-text:#002840;--csd-link:#019ACE;--csd-muted:#667E8C}
/* The shared header parks its mobile drawer off-screen right (trap 17). body ALONE --
   never an html{overflow-x:clip} alongside it: that blocks body's overflow propagating
   to the viewport, makes body a real scroll container, and kills the sticky TOC below
   (trap 33). */
body.p-csd{overflow-x:hidden}
.csd__hero,.csd__body,.csd__rec,.csd__uc,.csd__crumb{padding:0 15px}
.csd__hero__in,.csd__body__in,.csd__rec__in,.csd__uc__in,.csd__crumb__in{
  width:100%;max-width:1110px;margin:0 auto;box-sizing:border-box;display:flex;
  flex-direction:column;gap:40px}
.csd__hero__in{padding:72px 0}
.csd__rec__in{padding:72px 0 36px}
.csd__uc__in{padding:36px 0}
.csd__crumb__in{padding:0 0 50px;gap:30px}
.p-csd,.p-csd .csd__hero,.p-csd .csd__body{color:var(--csd-text)}

/* --- hero ------------------------------------------------------------------------ */
.csd__back a{display:flex;flex-direction:row;align-items:center;gap:0;
  color:var(--csd-link);font-size:16px;line-height:26px}
.csd__back img{display:block;width:24px;height:24px;padding:5px 7px;box-sizing:border-box}
.csd__back strong{font-weight:400;text-decoration:underline}
.csd__back a:hover strong{text-decoration:none}
.csd__hero__cols{display:flex;flex-direction:row;align-items:flex-start;gap:64px}
.csd__hero__l{width:380px;flex:0 0 auto;display:flex;flex-direction:column;gap:30px}
.csd__hero__r{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:16px}
.csd__h1{margin:0;font-size:36px;line-height:43px;font-weight:500;color:var(--csd-text)}
.csd__lead p{margin:0;font-size:16px;line-height:26px}
.csd__lead a{color:var(--csd-link);text-decoration:underline}
.csd__lead a:hover{text-decoration:none}
.csd__hero__img{display:block;width:100%;height:auto;aspect-ratio:666/372;
  object-fit:cover;border-radius:20px}
.csd__products{display:flex;flex-direction:row;align-items:flex-start;
  justify-content:space-between;gap:30px;background:#E5F5FA;border-radius:16px;
  padding:16px 30px}
.csd__products__label{margin:0;flex:0 0 auto;font-size:16px;line-height:26px}
.csd__products__links{display:flex;flex-wrap:wrap;gap:12px 20px;
  font-size:16px;line-height:26px}
.csd__products__links a{color:var(--csd-link);font-weight:500;text-decoration:underline}
.csd__products__links a:hover{text-decoration:none}

/* the three yellow figures. Upstream ships a description under each title and then
   collapses it to zero height -- kept, because it is what the markup carries. */
.case-study__stats{display:flex;flex-direction:row;align-items:flex-start;gap:20px}
.case-study__stat{flex:1 1 0;min-width:0;box-sizing:border-box;background:#0461C8;color:#fff;
  border-radius:20px;padding:16px 20px;display:flex;flex-direction:column}
.case-study__stat-number-wrapper{display:flex;flex-direction:row;align-items:baseline;
  gap:4px}
.case-study__stat-number,.case-study__stat-unit{font-size:36px;line-height:43px;
  font-weight:500;color:inherit}
.case-study__stat-number{display:flex}
.case-study__stat-title{font-size:18px;line-height:29px;font-weight:500}
.case-study__stat-description{height:0;overflow:hidden;font-size:16px;line-height:26px}

/* --- body: sticky TOC + reading column -------------------------------------------- */
.csd__body__in{flex-direction:row;align-items:flex-start;justify-content:flex-start;
  gap:64px;padding:0}
.csd__toc{width:200px;max-width:200px;flex:0 0 auto;position:sticky;top:80px;
  display:flex;flex-direction:column;align-items:flex-start}
.csd__toc a{position:relative;display:block;font-size:18px;line-height:29px;
  font-weight:400;color:var(--csd-text);padding:8px 0 8px 16px;margin-bottom:9px}
.csd__toc a:last-child{margin-bottom:0}
.csd__toc a::before{content:"";position:absolute;left:0;top:0;width:2px;height:0;
  background:#000;transition:height 300ms ease-out}
.csd__toc a.active::before{height:100%}
.csd__col{width:612px;flex:0 0 auto;display:flex;flex-direction:column;gap:30px}
.csd__block{display:flex;flex-direction:column;gap:32px}
.csd__h2{margin:0;font-size:36px;line-height:43px;font-weight:500;color:var(--csd-text)}
.csd__rt p{margin:0 0 32px;font-size:16px;line-height:26px}
.csd__rt a{color:var(--csd-link);text-decoration:underline}
.csd__rt a:hover{text-decoration:none}

/* the pull quote leaves the 612px column and spans the 1110px inner: 264px back out
   past the TOC and its gap, 234px past the column's own right edge. */
.csd__quote{position:relative;margin:0 0 32px -264px;width:calc(100vw - 60px);
  max-width:1110px;
  display:flex;flex-direction:row;align-items:stretch;gap:32px;
  background:#F2F4F5;border-radius:32px}
.csd__quote__img{flex:0 1 40%;display:flex;flex-direction:column;gap:30px}
/* max-height is upstream's (wp-image, 420px): a landscape file takes the text's height and
   crops; a portrait file has no definite height to fill and would lay out at its own aspect
   — 646px at 431 wide — and stretch the whole figure to it. The cap stops that at 420. */
.csd__quote__img img{display:block;width:100%;height:100%;max-height:420px;object-fit:cover;
  border-radius:20px}
.csd__quote__body{flex:0 1 60%;min-width:0;display:flex;flex-direction:column;
  align-items:flex-start;justify-content:center;gap:30px;padding:32px 32px 32px 0}
.csd__quote blockquote{margin:0;padding:0}
.csd__quote blockquote p{margin:0;font-size:20px;line-height:29px;font-weight:500;
  color:var(--csd-text)}
.csd__quote__by{display:flex;flex-direction:row;align-items:flex-start;gap:10px}
.csd__quote__avatar{display:block;width:40px;height:40px;border-radius:50%;
  object-fit:cover;flex:0 0 auto}
.csd__quote__who{display:flex;flex-direction:column;gap:0;font-size:14px;line-height:20px}
.csd__quote__who strong{font-weight:500;color:var(--csd-link)}
.csd__quote__who span{font-weight:400;color:var(--csd-muted)}

/* Upstream's fourth TOC entry. It is NOT a visible section title: the widget is
   painted at opacity:0 and only survives as a 14px-tall anchor box, which is why the
   buttons below it sit hard against the Results copy. Keep the box, drop the ink. */
.csd__demo{display:flex;flex-direction:column;gap:0}
.csd__demo__h{margin:0;font-size:12px;line-height:14px;font-weight:400;
  color:var(--csd-text);opacity:0}
.csd__demo__cta{display:flex;flex-direction:row;gap:16px}

/* --- the two card grids ----------------------------------------------------------- */
.csd__sechead{display:flex;flex-direction:column;gap:4px;padding:5px 0}
.csd__kicker{margin:0;font-size:20px;line-height:29px;color:var(--csd-muted)}
.csd__h2big{margin:0;font-size:50px;line-height:60px;font-weight:500;
  color:var(--csd-text)}
.csd__uc .csd__h2big{max-width:680px}
.csd__grid{display:grid;grid-template-columns:repeat(3,1fr);column-gap:30px;row-gap:0;
  align-items:stretch;grid-auto-rows:1fr}
.csd__card{position:relative;display:flex;flex-direction:column;gap:16px;color:inherit}
.csd__card__img{width:100%;border-radius:20px;overflow:hidden}
.csd__card__img img{display:block;width:100%;height:auto;aspect-ratio:350/232;
  object-fit:cover;border-radius:20px;transition:transform 300ms ease-out}
.csd__card--uc .csd__card__img img{aspect-ratio:1000/562}
.csd__card:hover .csd__card__img img{transform:scale(1.1)}
.csd__card__body{display:flex;flex-direction:column;gap:12px}
.csd__card__tags{margin:0;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;
  font-size:12px;line-height:14px;font-weight:500}
.csd__card__tags span{display:block;color:#fff;background:var(--csd-text);
  padding:3px 8px;border-radius:99px}
.csd__card__title{margin:0;font-size:22px;line-height:28px;font-weight:500;
  color:var(--csd-text)}
.csd__card__more{font-size:16px;line-height:26px;font-weight:500;color:var(--csd-link);
  text-decoration:underline}
.csd__card:hover .csd__card__more{text-decoration:none}
.csd__card__pill{position:absolute;top:16px;left:16px;display:flex;flex-direction:row;
  align-items:center;gap:8px;background:#fff;color:var(--csd-text);border-radius:99px;
  padding:6px 16px 6px 8px;font-size:12px;line-height:14px;font-weight:500}
.csd__card__pill img{display:block;width:14px;height:14px}

/* --- request demo: the use-cases contact component, plus this template's art ------- */
.p-csd .uc__contact__in{max-width:1110px;padding:72px 0;gap:30px;align-items:flex-start}
.p-csd .uc__contact__l,.p-csd .uc__contact__card{flex:0 1 50%;min-width:0}
.p-csd .uc__contact__card{position:relative}
.p-csd .uc__contact__l{gap:24px}
.p-csd .uc__h2{font-size:60px;line-height:72px}
.p-csd .uc__contact__lead{margin:0;font-size:24px;line-height:34px}
.p-csd .uc__contact__p{margin:0;font-size:16px;line-height:26px}
.p-csd .uc__contact__h3{font-size:30px;line-height:43px}
.p-csd .uc__contact__list{padding-left:40px}
.csd__pattern{position:absolute;left:calc(100% + 15px);top:88px;width:1267px;
  height:266px;max-width:none;z-index:-1;pointer-events:none}

/* --- breadcrumb ------------------------------------------------------------------- */
.csd__crumb__nav{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;
  row-gap:8px;font-size:16px;line-height:26px;color:var(--csd-text)}
.csd__crumb__nav a{color:var(--csd-text);text-decoration:underline;
  text-decoration-color:transparent;transition:.4s}
.csd__crumb__nav a:hover{color:var(--csd-link);text-decoration-color:var(--csd-link)}
/* the first crumb is the mark itself: the label stays in the DOM for assistive tech
   and is painted transparent. It has to out-specify `.csd__crumb__nav a` above. */
/* url() resolves against the STYLESHEET: site.css moved from the project root to static/css/
   and these four relative paths (two here, the two pp-art fonts) went dead with it — the crumb
   lost its mark and its chevrons on every case-study page. The mark is the GameMantra icon now,
   the same file the header lockup uses; it was the yellow Bloomreach "b". */
.csd__crumb__nav a.csd__crumb__home{width:28px;height:28px;flex:0 0 auto;overflow:hidden;
  color:transparent;text-decoration:none;
  background:url(https://media.gamemantra.ai/static/img/gm.webp) center/contain no-repeat}
.csd__crumb__sep{width:16px;height:16px;margin:0 8px;flex:0 0 auto;
  background:url(https://media.gamemantra.ai/static/img/chevron-right.svg) center/contain no-repeat}

/* --- responsive --------------------------------------------------------------------
   Upstream drops --content-width to 768 at <=1024 and lets the boxed inner go full
   width below 768. The TOC is desktop-only, so the reading column takes the row. */
@media(max-width:1024px){
  .csd__hero__in,.csd__body__in,.csd__rec__in,.csd__uc__in,.csd__crumb__in,
  .p-csd .uc__contact__in{max-width:768px}
  .csd__hero__cols{flex-direction:column;gap:40px}
  .csd__hero__l,.csd__hero__r{width:100%;flex:0 0 auto}
  .csd__toc{display:none}
  .csd__col{width:100%;flex:1 1 auto;min-width:0}
  /* with the TOC gone the quote has nothing to break out of */
  .csd__quote{margin-left:0;width:100%;max-width:none}
  .case-study__stat{padding:12px 16px}
  .csd__grid{column-gap:16px}
  .p-csd .uc__contact__in{flex-direction:column;align-items:flex-start;gap:36px;
    padding:72px 0 26px}
  .p-csd .uc__contact__l,.p-csd .uc__contact__card{width:100%}
  .p-csd .uc__h2{font-size:36px;line-height:45px}
  .p-csd .uc__contact__lead{font-size:18px;line-height:29px}
  .p-csd .uc__contact__h3{font-size:24px;line-height:30px}
  .csd__pattern{display:none}
  /* the tablet type ladder -- and the stat description, which is collapsed to zero
     on desktop and only earns its height here */
  .csd__h1,.csd__h2{font-size:24px;line-height:30px}
  .csd__h2big{font-size:30px;line-height:38px}
  .csd__uc .csd__h2big{max-width:none}
  .csd__kicker{font-size:18px;line-height:29px}
  .case-study__stat-number,.case-study__stat-unit{font-size:24px;line-height:30px}
  .case-study__stat-description{height:auto;overflow:visible}
  .csd__quote blockquote p{font-size:18px;line-height:29px}
  .csd__card__title{font-size:18px;line-height:24px}
  /* the rounded corners tighten and the card rails gain a row gap */
  .case-study__stat,.csd__quote{border-radius:12px}
  .case-study__stats{align-items:stretch}
  .csd__grid{row-gap:16px}
  /* sections 3, 4 and 5 sit on 16px rails at tablet, not the 15px the hero uses */
  .csd__rec,.csd__uc{padding:0 16px}
  .csd__rec__in{padding:72px 0 26px}
  .csd__uc__in{padding:26px 0}
  .p-csd .uc__contact{padding:0 16px}
}
@media(max-width:767px){
  .csd__hero__in,.csd__body__in,.csd__rec__in,.csd__uc__in,.csd__crumb__in,
  .p-csd .uc__contact__in{max-width:none}
  .csd__products{flex-direction:column;gap:24px;padding:24px}
  .case-study__stats{flex-direction:column;gap:20px}
  .case-study__stat{flex:0 0 auto}
  .csd__quote{flex-wrap:wrap;gap:32px}
  .csd__quote__img{flex:1 1 100%}
  .csd__quote__img img{height:200px}
  .csd__quote__body{flex:1 1 100%;padding:0 20px 30px}
  .csd__grid{grid-template-columns:1fr;row-gap:16px}
  /* Elementor's --flex-wrap-mobile: every one of these rows wraps below 768 */
  .csd__hero__cols,.csd__hero__l,.csd__hero__r,.csd__body__in,.csd__col,.csd__block,
  .csd__quote,.csd__quote__img,.csd__quote__body,.csd__demo__cta,.csd__card,
  .csd__crumb__nav,.p-csd .uc__contact__in,.p-csd .uc__contact__l,
  .csd__hero__in,.csd__rec__in,.csd__uc__in,.csd__crumb__in,.csd__products{flex-wrap:wrap}
  .csd__demo__cta .br-cta{flex:1 1 100%}
  .csd__quote__img img{height:auto;max-height:200px}
  .csd__products__links{display:grid;grid-template-columns:1fr;gap:16px}
}

/* ==================================================================== USE CASE DETAIL
   The single-use-case template (post id 71485). Ported from post-71485.css; the two
   closing sections reuse the use-cases page's own .uc__contact and .uc__top. */
.ucd__crumb__in,.ucd__hero__in,.ucd__meta__in{width:100%;max-width:1380px;margin:0 auto;
  box-sizing:border-box;padding-left:40px;padding-right:40px}
.ucd__crumb__in{display:flex;flex-direction:row;align-items:center;gap:8px;
  padding-top:30px;padding-bottom:50px}
.ucd__crumb a{display:flex;flex-direction:row;align-items:center;gap:7px;
  font-size:16px;line-height:26px;color:#019ACE}
.ucd__crumb strong{font-weight:500;text-decoration:underline}
.ucd__crumb a:hover strong{text-decoration:none}

.ucd__hero__in{display:flex;flex-direction:row;align-items:flex-start;gap:50px}
.ucd__hero__l{width:45%;flex:0 1 auto;display:flex;flex-direction:column;gap:24px}
.ucd__hero__r{width:55%;flex:0 1 auto;display:flex;flex-direction:column;gap:30px}
.ucd__tags{display:flex;flex-direction:row;align-items:center;gap:6px;margin:0}
/* upstream fixes the pill at 20px and lets the 10px padding overflow it (border-box) */
.ucd__tags span{display:flex;align-items:center;justify-content:center;height:20px;
  font-size:12px;line-height:1;font-weight:500;color:#fff;background:rgba(0,0,0,.73);
  border-radius:100px;padding:10px 12px}
.ucd__h1{font-size:50px;line-height:60px;font-weight:500;color:#000;margin:0}
.ucd__sub{font-size:20px;line-height:29px;font-weight:400;color:#000;margin:0}
.ucd__body p{font-size:16px;line-height:26px;color:var(--text);margin:0}
.ucd__chan{width:auto;align-self:flex-start;display:flex;flex-direction:row;
  align-items:center;gap:30px;padding:12px 20px;background:#EAF7FE;border-radius:10px}
.ucd__chan__label{font-size:12px;line-height:14px;font-weight:500;color:#000;margin:0}
.ucd__chan__icons{display:flex;flex-direction:row;gap:10px}
/* max-height, not height: upstream lets an icon smaller than 24 keep its own size --
   whatsapp.svg is 20x20 there and was being stretched to 24 here */
.ucd__chan__icons img{display:block;max-height:24px;width:auto;height:auto}
.uc-gallery{display:flex;flex-direction:column;gap:10px}
.uc-gallery img{display:block;width:100%;height:auto;object-fit:contain;
  aspect-ratio:590/400;border-radius:20px;overflow:hidden}
.uc-gallery__featured{position:relative}

.ucd__meta__in{display:flex;flex-direction:row;justify-content:space-between;
  align-items:center;gap:50px;padding-top:40px}
.uc-detail-taxo-items{display:flex;flex-direction:column;gap:8px}
/* the meta row is an explicit 45/55 split that shrinks proportionally; leaving the
   taxonomy column content-sized made the ask block 38px narrow at 1200 */
@media(min-width:1025px){.uc-detail-taxo-items{width:45%}}
.uc-detail-taxo-item-wrap{display:flex;align-items:flex-start}
.uc-detail-taxo-icolabel{width:97px;flex:0 0 auto;display:flex;gap:8px;
  align-items:center;justify-content:flex-start}
.uc-detail-taxo-icolabel img{display:block;border-radius:0}
.uc-detail-taxo-icolabel strong{width:64px;display:block;font-size:12px;line-height:26px;
  font-weight:500;color:var(--text)}
.uc-detail-taxo-links{display:flex;gap:8px;flex-wrap:wrap;align-items:center;
  justify-content:flex-start}
.uc-detail-taxo-links a,.uc-detail-taxo-links span{display:block;color:#019ACE;
  font-size:12px;font-weight:500;line-height:1.6;border-radius:50px;background:#EAF7FE;
  padding:2px 8px;margin:1px 0;transition:background 150ms linear,color 150ms linear}
.uc-detail-taxo-links a:hover{color:#fff;background:#039ace}
.ucd__ask{width:55%;flex:0 1 auto;display:flex;flex-direction:row;
  justify-content:space-between;align-items:center;gap:30px;padding:30px 40px;
  background:#EAF7FE;border-radius:20px}
.ucd__ask__h{font-size:20px;line-height:29px;font-weight:500;color:#000;margin:0}
.ucd__ask__cta{flex:none;font-size:14px;line-height:21px;color:#fff;background:#039ACE;
  border:1px solid #039ACE;border-radius:50px;padding:10px 25px 8px;white-space:nowrap}
.ucd__ask__cta:hover{background:#01729f}

/* the sticky-nav body. Upstream lifts the nav out of the flow with position:absolute so
   it can sit beside five centred content blocks without taking a column of its own.
   The nav's box is NOT the 1110 content column -- it is its own centred 1300px box, one
   step wider on each side, which is what puts the rail out in the gutter level with the
   hero instead of on top of the case-study cards. So the containing block has to be the
   full-width section, not .ucd__wrap__in. */
.ucd__wrap{position:relative}
.ucd__wrap__in{width:100%;max-width:1110px;margin:0 auto;
  display:flex;flex-direction:column;gap:30px}
.ucd__nav{position:absolute;top:0;left:0;right:0;width:100%;max-width:1300px;
  margin-inline:auto;height:100%;pointer-events:none;padding-top:80px}
.sticky-menu-nav{position:sticky;top:200px;width:200px;height:auto;pointer-events:all}
.sticky-menu-nav a{cursor:pointer;position:relative;display:flex;align-items:center;
  justify-content:flex-start;width:100%;height:40px;color:#019ACE;font-size:17px;
  font-weight:500;line-height:1.2;padding:5px 0 3px 12px}
.sticky-menu-nav a::before{content:"";position:absolute;display:block;top:0;left:0;
  width:2px;height:100%;background:#000;transform:scaleY(0);transform-origin:center;
  transition:transform 300ms ease-out}
.sticky-menu-nav a:hover,.sticky-menu-nav a.active{color:#000}
.sticky-menu-nav a:hover::before,.sticky-menu-nav a.active::before{transform:scaleY(1)}
.ucd__wrap .scrollsection{position:relative;display:flex;flex-direction:row;
  align-items:center;justify-content:flex-start;gap:8px;padding:80px 0 0}
.w640{width:100%;max-width:640px;margin:0 auto;display:flex;flex-direction:column;gap:30px}
.w860{width:100%;max-width:860px;margin:0 auto;display:flex;flex-direction:row;
  align-items:center;gap:90px}
.ucd__h2{font-size:36px;line-height:43px;font-weight:500;color:#000;margin:0}
.ucd__h3{font-size:30px;line-height:36px;font-weight:500;color:#000;margin:0}
/* upstream spaces its paragraphs with its own empty <p>, not with a margin */
.ucd__rt p{font-size:16px;line-height:26px;color:var(--text);margin:0}
.ucd__rt a{color:#019ACE;text-decoration:underline}
.ucd__rt a:hover{text-decoration:none}

/* the three use-case variants: tabs over an absolutely-stacked cross-fade, whose
   container height site.js sets from the active panel */
.uc-campaign-variants{position:relative}
.uc-campaign-variants-tabs-wrap{position:relative;width:calc(100% + 20px);left:-20px;
  overflow:hidden;margin-bottom:40px}
.uc-campaign-variants-tabs-wrap::before,.uc-campaign-variants-tabs-wrap::after{
  pointer-events:none;position:absolute;content:"";top:0;left:0;width:20px;height:100%;
  z-index:50;background:linear-gradient(to right,#fff,transparent)}
.uc-campaign-variants-tabs-wrap::after{left:auto;right:0;width:70px;
  background:linear-gradient(to left,#fff,transparent)}
.uc-campaign-variants-tabs{position:relative;display:flex;gap:10px;width:100%;
  padding:0 70px 0 20px}
.uc-variant-tab{cursor:pointer;width:auto;flex:none;display:flex;align-items:center;
  justify-content:center;height:40px;line-height:1;border-radius:100px;
  border:1px solid #000;white-space:nowrap;padding:2px 16px 0;font-size:14px;
  font-weight:500;color:#000;transition:background 100ms linear,border 100ms linear}
.uc-variant-tab:hover,.uc-variant-tab.active{color:#fff;background:#0461C8;border-color:#0179F8}
.uc-campaign-variants-content{position:relative;width:100%;transition:height 300ms ease-in}
.uc-campaign-variant{display:flex;flex-direction:column;align-items:flex-start;
  justify-content:flex-start;gap:20px;pointer-events:none;position:absolute;width:100%;
  opacity:0;transform:translateY(10px);
  transition:opacity 300ms ease-out,transform 300ms ease-out}
.uc-campaign-variant.active{pointer-events:auto;opacity:1;transform:translateY(0)}
.uc-campaign-header{display:flex;gap:8px;align-items:center;justify-content:flex-start}
.uc-campaign-header img{display:block;width:24px;height:24px;flex:none}
.uc-variant-title{font-size:30px;line-height:36px;font-weight:500;color:#000;margin:0}
.uc-variant-prebuilt{width:auto;color:#fff;font-size:12px;font-weight:500;line-height:1;
  background:#0461C8;padding:4px 12px 3px;border-radius:50px}
.uc-variant-content p{font-size:16px;line-height:26px;color:var(--text);margin:0 0 20px}
.uc-variant-content a{color:#019ACE;text-decoration:underline}
.uc-variant-content a:hover{text-decoration:none}
.uc-variant-quote{display:flex;flex-direction:column;gap:24px;border-radius:20px;
  background:#EAF7FE;padding:50px 40px 40px;text-align:center;margin:20px -100px 0;
  width:calc(100% + 200px)}
.uc-variant-quote blockquote{color:#000;font-size:24px;font-weight:500;line-height:1.5;
  margin:0;padding:0;text-wrap:balance}
.uc-campaign-variants-bottom-media{margin-top:60px}
.uc-variant-vidyard{display:block}
.uc-variant-vidyard img{display:block;width:100%;height:auto;aspect-ratio:16/9;
  object-fit:cover;border-radius:20px}

.uc-how-it-works{display:flex;flex-direction:column;gap:20px}
.uc-how-it-works-item{display:flex;gap:20px;align-items:center;justify-content:flex-start}
.uc-how-it-works-number{display:flex;flex:0 0 auto;align-items:center;
  justify-content:center;font-size:17px;font-weight:500;color:#fff;width:46px;height:auto;
  aspect-ratio:1/1;border-radius:50%;background:#0461C8;padding:2px 0 0 1px}
.uc-how-it-works-content{font-size:16px;color:#000}
.uc-how-it-works-content p{margin:0}
.uc-how-it-works-content a{color:#019ace;text-decoration:underline}
.uc-how-it-works-content a:hover{text-decoration:none}

.uc-case-study-item{width:45%;flex:0 1 auto;display:flex;flex-direction:column;
  align-items:flex-start;justify-content:flex-start;gap:12px;color:inherit}
.uc-cs-featured-image{width:100%;border-radius:20px;overflow:hidden}
.uc-cs-featured-image img{display:block;width:100%;aspect-ratio:350/232;object-fit:cover;
  border-radius:20px;transition:transform 300ms ease-out}
.uc-case-study-item:hover .uc-cs-featured-image img{transform:scale(1.1)}
.uc-cs-labels{width:100%;font-size:12px;display:flex;gap:5px;flex-wrap:wrap;
  align-items:center;justify-content:flex-start;font-weight:500}
.uc-cs-labels span,.uc-cs-labels strong{display:block;line-height:1.25;padding:2px 8px;
  border-radius:50px}
.uc-cs-labels span{color:#fff;background:#000}
.uc-cs-labels strong{color:#fff;background:#0461C8}
.uc-cs-title{width:100%;color:#000;font-size:22px;font-weight:500;line-height:1.25}
.uc-cs-link{color:#019ace;text-decoration:underline}
.uc-case-study-item:hover .uc-cs-link{text-decoration:none}
.ucd__csr{width:55%;flex:0 1 auto;display:flex;flex-direction:column;gap:10px}

/* the two closing sections are the use-cases page components with this template's
   own vertical rhythm */
.p-ucd .uc__contact__in{padding:120px 0 0}
.p-ucd .uc__top__in{padding:120px 0}
/* here the Top-10 card is an 860px centred block, not the full 1110 it is on the
   use-cases page -- which is what wraps its heading onto a second line */
.p-ucd .uc__card{max-width:860px;margin-inline:auto}

/* The shared header parks its mobile drawer off-screen right (trap 17). The clip
   must live on body ALONE: body's overflow propagates to the viewport only while
   html's own overflow is visible, and that propagation is what leaves body itself
   non-scrolling. Adding html{overflow-x:clip} here blocks the propagation, makes
   body a real scroll container, and silently kills position:sticky inside it --
   which is what stopped .sticky-menu-nav from ever pinning. */
body.p-ucd{overflow-x:hidden}
@media(max-width:1199px){
  .ucd__crumb__in,.ucd__hero__in,.ucd__meta__in{padding-left:15px;padding-right:15px}
  /* the nav is desktop-only upstream, so the content blocks stop being offset */
  .ucd__nav{display:none}}

/* ---- the responsive ladder, measured off the source at 1440 / 1199 / 1024 / 900 /
   768 / 767 / 480 / 390. This template was built desktop-only; everything below was
   missing, which is why the page read correctly at 1440 and fell apart under it. ---- */

/* 1025 is Elementor's tablet breakpoint and where every heading steps */
@media(max-width:1024px){
  .ucd__h1{font-size:30px;line-height:38px}
  .ucd__h2{font-size:24px;line-height:30px}
  .ucd__h3,.uc-variant-title{font-size:22px;line-height:28px}
  .ucd__sub{font-size:18px}
  .uc-cs-title{font-size:18px}
  /* the meta row stacks and left-aligns */
  .ucd__meta__in{flex-direction:column;align-items:flex-start}
  /* both closing sections drop their 120px rhythm for a 36/26 one and stack */
  .p-ucd .uc__contact__in{flex-direction:column;align-items:center;gap:36px;padding:36px 0 26px}
  .p-ucd .uc__top__in{flex-direction:column;gap:36px;padding:36px 0 26px}
  /* the ask block stops being a 55% column and spans the meta row */
  .ucd__ask{width:100%}}
/* only the case-studies section carries a gutter in the tablet band; below 767 the wrap
   supplies one for every section instead */
@media(min-width:768px) and (max-width:1024px){
  #case-studies{padding-left:15px;padding-right:15px}}

/* upstream stops the quote bleeding out of its column here */
@media(max-width:900px){
  .uc-variant-quote{width:100%;margin:20px 0 0;padding:35px 25px 25px}
  .uc-variant-quote blockquote{font-size:20px;line-height:1.4}}

@media(max-width:767px){
  /* the hero keeps its row but wraps, so each column takes the full width */
  .ucd__hero__in{flex-wrap:wrap}
  .ucd__hero__l,.ucd__hero__r{width:100%}
  .ucd__crumb__in{padding-top:20px;padding-bottom:20px}
  /* the sections gain the 15px gutter the wrap does not have above this */
  .ucd__wrap__in{padding-left:15px;padding-right:15px;gap:0}
  #why-marketers-love-it,#campaign-variants,#case-studies{padding-top:60px}
  /* the channel strip and the ask block both stack */
  .ucd__chan{width:100%;gap:10px 20px}
  /* the taxonomy list fills the column instead of shrinking to fit, so its link rows
     wrap the way upstream's do -- shrink-to-fit never wraps, and the block came out
     100px short */
  .uc-detail-taxo-items{width:100%}
  /* and each row stacks its label above its links: 51px a row, not 26 */
  .uc-detail-taxo-item-wrap{flex-direction:column}
  .ucd__ask{width:100%;flex-direction:column;align-items:center;gap:16px;padding:20px 30px}
  /* the case-study pair turns into a column with the copy above the card */
  .w860{flex-direction:column-reverse;align-items:center;gap:40px}
  .uc-case-study-item,.ucd__csr{width:100%}}

/* ============ CASE STUDIES ============
   Source: case-studies.html + case-studies_files/post-65007.css, plus two component
   stylesheets the page loads whole — case-study-logo-carousel.css and
   case-study-shortcode.css. This is an Elementor post-type ARCHIVE template, not a
   wp-page: the cards come from a repeated loop-item, which is why they are data blocks
   here. The .vcarousel family, .slide-video, .vcard, .slide-story, .rating-box and
   .brplaybtn keep upstream's names because they are upstream's components. */
.p-cst{background:#fff}

.cst__hero,.cst__minds,.cst__finder,.cst__newest,.cst__reviews{position:relative;padding:0 15px}
/* the review wash is a blurred circle sized off the rail's height, so at 320 it is wider
   than the viewport on the source too (331px there, 323 here). Upstream clips it at its
   page wrapper; clipping at the section is the same pixels, since the wash is centred
   inside it and never bleeds past it vertically. */
.cst__reviews{overflow:hidden}
.cst__proven{position:relative;padding:80px 0}
.cst__cta{position:relative;padding:0 120px;overflow:hidden}
.cst__hero__in,.cst__minds__in,.cst__finder__in,.cst__newest__in,.cst__reviews__in,.cst__cta__in{
  position:relative;width:100%;margin-inline:auto;display:flex;flex-direction:column}
.cst__hero__in{max-width:1300px;flex-direction:row;justify-content:space-between;
  align-items:flex-start;gap:60px;padding:80px 0}
.cst__proven__in{display:flex;flex-direction:row;flex-wrap:wrap;gap:80px}
.cst__proven__in > *{width:100%}
.cst__minds__in{max-width:1600px;gap:60px;padding:60px 0 0}
.cst__finder__in{max-width:1110px;align-items:center;justify-content:space-between;gap:60px;padding:40px 0 0}
.cst__newest__in{max-width:1600px;align-items:center;gap:60px;padding:120px 0 0}
.cst__reviews__in{max-width:1110px;flex-direction:row;align-items:center;gap:20px;padding:80px 0 0}
.cst__cta__in{max-width:1680px;gap:30px;padding:120px 0}

/* type. Every heading drops at 1025 — Elementor's tablet breakpoint — and the two hero
   headings carry their display size on an inner span (1.1em and 0.9em). */
.cst__h1{font-size:60px;line-height:72px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.cst__h1 span{font-size:1.1em;line-height:72px}
.cst__h2sub{font-size:36px;line-height:43px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.cst__h2sub span{font-size:.9em}
.cst__h2{font-size:50px;line-height:60px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.cst__proven .cst__h2{font-size:48px;line-height:60px;text-align:center}
.cst__reviews__h,.cst__cta__h{font-size:60px;line-height:72px}
@media(max-width:1024px){
  .cst__h1{font-size:36px;line-height:45px}
  .cst__h1 span{line-height:45px}
  .cst__h2sub{font-size:24px;line-height:30px}
  .cst__h2{font-size:30px;line-height:38px}
  .cst__proven .cst__h2,.cst__reviews__h,.cst__cta__h{font-size:36px;line-height:45px}}

/* 1 · hero */
/* Both columns shrink together once they stop fitting: 530/640 at 1440 where there is
   room, 500/611 upstream at 1200. Declaring the cap as the flex BASIS rather than as a
   max-width over a 100% basis is what lets both give way -- with width:100% + max-width
   the copy column froze at 530 and the rail column absorbed the whole 60px overflow.
   Upstream shrinks the two by an equal 30px where this shrinks them 27/33, so the split
   lands 3px out at 1200 and is exact everywhere else. */
.cst__hero__l{min-width:0;display:flex;flex-direction:column;gap:32px;margin-top:50px}
.cst__hero__r{min-width:0;display:flex;flex-direction:column;gap:30px}
/* only while the hero is a ROW -- in the mobile column a flex-basis would size the
   HEIGHT. Upstream scopes its two caps to (min-width:1025px) for the same reason. */
@media(min-width:1025px){
  .cst__hero__l{flex:0 1 530px}
  .cst__hero__r{flex:0 1 640px}}
.cst__hero__stats{display:flex;flex-direction:row;justify-content:space-between;
  align-items:flex-start;gap:30px}
.cst__stat{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.cst__stat h5{font-size:24px;line-height:30px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.cst__stat p{font-size:13px;line-height:1.6;color:var(--gm-earth);margin:0}
.cst__stat strong{font-weight:500}
.cst__hero__cta{display:flex;flex-direction:row;gap:16px}
.cst__hero__cta .br-cta{flex:none}
@media(max-width:1024px){
  .cst__hero{padding:0 16px}
  .cst__hero__in{flex-direction:column;align-items:flex-start;gap:36px;padding:32px 0 26px}
  .cst__hero__l,.cst__hero__r{max-width:100%;margin-top:0}
  .cst__hero__l{gap:16px}
  .cst__stat h5{font-size:20px;line-height:26px}}
@media(max-width:767px){
  .cst__hero__stats{flex-wrap:wrap;gap:12px}
  .cst__stat{flex:none;width:100%}
  /* Elementor's --flex-wrap-mobile: the two buttons stack once they stop fitting */
  .cst__hero__cta{flex-wrap:wrap}}

/* the hero rail: one card in view, bullets bottom-left of the arrow pair */
.cst__rail{position:relative;width:100%;display:flex;flex-direction:column;row-gap:30px}
.cst__rail__view{width:100%;overflow:hidden;padding-bottom:16px}
.cst__rail__track{display:flex;gap:30px;transition:transform 400ms ease-in-out}
.cst__rail__slide{flex:0 0 100%;min-width:0}
/* one-up at 1024 and above, measured on the source: its slide is 992 wide at 1024 */
@media(min-width:768px) and (max-width:1023px){
  .cst__rail__slide{flex:0 0 calc(50% - 15px)}}
.cst__hcard{position:relative;display:flex;flex-direction:column;width:100%;
  border-radius:30px;overflow:hidden;text-decoration:none;background:var(--gm-shiva-indigo)}
/* no width here: the 800x445 attributes are a presentational hint, and any author
   width -- even auto -- overrides it, which let the 1024w file render at full size */
.cst__hcard img{display:block;max-width:100%;height:auto}
.cst__hcard__body{position:relative;display:flex;flex-direction:column;
  align-items:flex-start;gap:20px;padding:0 30px 30px}
.cst__hcard__t{color:#fff;font-size:24px;line-height:30px;font-weight:500;margin:0}
/* min-width:0 so the pill row can shrink: without it the card had a min-content floor
   and the hero's rail column refused to give way, which threw the 1200 split to 530/580
   where upstream shrinks both columns to 500/611 */
.numboxes{width:100%;min-width:0;display:flex;gap:12px}
/* no border upstream, and a 27px backdrop blur at 16% white */
.numbox{display:flex;align-items:center;gap:8px;color:#fff;
  padding:8px 16px;border-radius:16px;
  background:rgba(255,255,255,.16);backdrop-filter:blur(27px)}
.numbox-num{flex:none;font-size:18px;line-height:18px;font-weight:500}
.numbox-text{font-size:13px;line-height:15.6px;padding-top:2px}
/* Below 360 two pills no longer fit side by side. Upstream squeezes them anyway, down to
   a one-character-wide label 268px tall; mine wraps them instead, which is the same call
   already taken for the pill rows on loomi-marketing-agent. Without either, the second
   pill is simply clipped by the card's overflow:hidden. */
@media(max-width:360px){
  .numboxes{flex-wrap:wrap}
  .numbox{flex:1 1 100%}}
@media(max-width:1024px){.cst__hcard{border-radius:16px}
  .cst__hcard__t{font-size:20px;line-height:26px}}
.cst__rail__nav{display:flex;align-items:center;justify-content:flex-end;gap:12px}
.cst__rail__dots{display:flex;align-items:center;gap:8px;margin-right:auto;padding-left:32px}
.cst__rail__dot{width:6px;height:6px;padding:0;border:0;border-radius:50%;background:var(--gm-moon-silver);cursor:pointer}
.cst__rail__dot.is-on{background:var(--gm-shiva-indigo)}
.cst__rail__btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;
  padding:8px;border:0;border-radius:50%;background:var(--gm-himalayan-blue-on-white);color:#fff;cursor:pointer;
  transition:transform 200ms ease-in-out}
.cst__rail__btn:hover{transform:scale(1.2)}
@media(max-width:767px){
  .cst__rail{row-gap:8px}
  .cst__rail__dots{margin-right:auto;padding-left:0}}

/* 2 · the industry filter and the two logo marquees (case-study-logo-carousel.css) */
.case-study-logo-carousel{overflow:hidden;position:relative}
.case-study-logo-carousel__container{max-width:1200px;margin:0 auto;padding:0 20px;position:relative}
.case-study-logo-carousel__filters{display:flex;justify-content:center;flex-wrap:wrap;
  gap:30px;margin-bottom:30px}
.case-study-logo-carousel__filter-button{cursor:pointer;font:inherit;font-weight:500;font-size:18px;
  line-height:1em;text-align:center;color:var(--gm-himalayan-blue-on-white);background:none;padding:0 0 10px;
  border:none;border-bottom:2px solid transparent;transition:color .3s ease}
.case-study-logo-carousel__filter-button:hover{color:var(--gm-shiva-indigo)}
.case-study-logo-carousel__filter-button.active{color:var(--gm-shiva-indigo);
  border-bottom-color:var(--gm-himalayan-blue-on-white)}
.case-study-logo-carousel__logos{position:relative;overflow:hidden;margin-bottom:5px;
  width:100vw;margin-left:calc(-50vw + 50%);
  transition:opacity .25s ease,transform .25s ease}
.case-study-logo-carousel__logos:last-child{margin-bottom:0}
.case-study-logo-carousel__logos::before,.case-study-logo-carousel__logos::after{
  content:"";position:absolute;top:0;width:50px;height:100%;z-index:2;pointer-events:none}
.case-study-logo-carousel__logos::before{left:0;background:linear-gradient(to right,#fff,rgba(255,255,255,0))}
.case-study-logo-carousel__logos::after{right:0;background:linear-gradient(to left,#fff,rgba(255,255,255,0))}
.case-study-logo-carousel__track{display:flex;align-items:center;width:max-content}
/* 80s, not the component sheet's 40s: that is what the source computes to */
.case-study-logo-carousel__track--ltr{animation:scrollLogosLTR 80s linear infinite}
.case-study-logo-carousel__track--rtl{animation:scrollLogosRTL 80s linear infinite}
.case-study-logo-carousel__track:hover{animation-play-state:paused}
@keyframes scrollLogosLTR{0%{transform:translateX(0)}100%{transform:translateX(-33.33%)}}
@keyframes scrollLogosRTL{0%{transform:translateX(-33.33%)}100%{transform:translateX(0)}}
.case-study-logo-carousel__logo{display:flex;flex-direction:column;align-items:center;
  justify-content:space-between;margin:0 40px;min-width:150px;height:70px;
  text-align:center;flex-shrink:0}
.case-study-logo-carousel__logo-image-container{display:flex;align-items:center;
  justify-content:center;height:50px;width:100%}
.case-study-logo-carousel__logo-image{width:120px;height:80px;object-fit:contain;border-radius:0}
.case-study-logo-carousel__logo-button-container{display:flex;align-items:center;
  justify-content:center;height:32px;width:100%}
/* Himalayan-deep, not the white-ink blue: this label is 12px on the 8% Himalayan wash, where
   #007BC4 measures 4.26:1 -- under the floor -- and #0047FD measures 5.9:1 */
.case-study-logo-carousel__logo-button{background:rgba(14,165,255,.08);color:var(--gm-himalayan-deep);border:none;
  padding:3px 8px;border-radius:99px;font-size:12px;line-height:12px;font-weight:500;
  cursor:pointer;text-decoration:none;transition:all .3s ease}
.case-study-logo-carousel__logo-button:hover{background:var(--gm-himalayan-deep);color:#fff;transform:translateY(-1px)}
@media(max-width:1024px){.cst__proven{padding:32px 16px 26px}
  .cst__proven__in{gap:36px}}
@media(max-width:768px){
  .case-study-logo-carousel__filters{justify-content:flex-start;flex-wrap:nowrap;
    overflow-x:auto;overflow-y:hidden;padding:0 20px 10px;margin:0 -20px 30px;gap:20px;
    scrollbar-width:none;scroll-behavior:smooth}
  .case-study-logo-carousel__filters::-webkit-scrollbar{display:none}
  .case-study-logo-carousel__filter-button{flex-shrink:0;white-space:nowrap;font-size:16px;
    min-width:max-content}
  .case-study-logo-carousel__logo{margin:0 16px;min-width:80px}
  .case-study-logo-carousel__logo-image{width:130px;max-height:110px}}

/* 3, 5, 6 · the drag-scrolled rails. --h is the video row, --stories the newest-customer
   row, --v the two review columns; all three are the same component upstream. */
.vcarousel{position:relative;width:100%;margin:0 auto;display:flex;flex-direction:row;gap:var(--col-gap)}
.vcarousel__col{position:relative;z-index:5;width:50%;height:var(--col-height);
  overflow:hidden;cursor:grab;user-select:none}
.vcarousel__col.is-dragging{cursor:grabbing}
.vcarousel__track{display:flex;flex-direction:column;gap:var(--vcard-gap);height:max-content;
  will-change:transform}
.vcarousel.is-always-horizontal{flex-direction:column;gap:0;width:100%}
.vcarousel.is-always-horizontal .vcarousel__col{height:auto;width:100%}
.vcarousel.is-always-horizontal .vcarousel__track{flex-direction:row;width:max-content;
  height:auto;justify-content:flex-start}
@media(max-width:1024px){
  .vcarousel.is-always-horizontal{width:calc(100% + 30px);margin:0 -15px}
  .vcarousel{flex-direction:column;gap:0;width:100%}
  .vcarousel__col{height:auto;width:100%;padding:5px 0}
  .vcarousel__col + .vcarousel__col{margin-top:var(--col-gap)}
  .vcarousel__track{flex-direction:row;width:max-content;height:auto}}
.vcarousel--h{--vcard-gap:40px;--col-height:auto;--col-gap:0px}
.vcarousel--h::before,.vcarousel--h::after,
.vcarousel--stories::before,.vcarousel--stories::after{content:"";position:absolute;
  pointer-events:none;z-index:100;top:0;left:0;width:300px;height:100%;
  background:linear-gradient(90deg,#fff 0%,rgba(255,255,255,0) 100%)}
.vcarousel--h::after,.vcarousel--stories::after{left:auto;right:0;
  background:linear-gradient(270deg,#fff 0%,rgba(255,255,255,0) 100%)}
@media(max-width:1024px){
  .vcarousel--h::before,.vcarousel--h::after,
  .vcarousel--stories::before,.vcarousel--stories::after{content:none}}
.vcarousel--stories{--vcard-gap:40px;--col-height:auto;--col-gap:0px}
@media(max-width:1024px){.vcarousel--stories{--vcard-gap:20px}}
.vcarousel--v{--vcard-gap:20px;--col-height:860px;--col-gap:15px;max-width:100%}
.vcarousel--v::before,.vcarousel--v::after{content:'';pointer-events:none;position:absolute;
  top:0;left:0;width:100%;height:100px;z-index:10;
  background:linear-gradient(to top,rgba(255,255,255,0),#fff)}
.vcarousel--v::after{top:auto;bottom:0;background:linear-gradient(to bottom,rgba(255,255,255,0),#fff)}
@media(max-width:1024px){
  .vcarousel--v{max-width:none;width:calc(100% + 30px);margin:0 -15px}
  .vcarousel--v::before,.vcarousel--v::after{content:none}}
.vcarousel__bg{pointer-events:none;position:absolute;z-index:1;top:50%;left:50%;
  transform:translate(-50%,-50%);width:auto;height:60%;aspect-ratio:1/1;border-radius:50%;
  background:var(--gm-himalayan-blue);font-size:100px;filter:blur(1em)}

/* the video card */
.brplaybtn{--brplaybtn-size:46px;position:relative;width:var(--brplaybtn-size);height:auto;
  aspect-ratio:1/1;background:#fff;border-radius:50%}
.brplaybtn::after{content:"";position:absolute;top:50%;left:50%;
  transform:translate(-40%,-50%);width:0;height:0;
  border-top:calc(var(--brplaybtn-size) * .2) solid transparent;
  border-bottom:calc(var(--brplaybtn-size) * .2) solid transparent;
  border-left:calc(var(--brplaybtn-size) * .35) solid var(--gm-himalayan-blue)}
.slide-video{cursor:pointer;display:flex;flex-direction:column;align-items:center;
  justify-content:space-between;width:300px;border-radius:30px;
  transition:background 300ms ease-in-out}
.slide-video:hover{background:rgba(14,165,255,.08)}
.slide-video .brplaybtn{transition:transform 250ms ease-in-out;transform-origin:right bottom}
.slide-video:hover .brplaybtn{transform:scale(1.3)}
.slide-video__img{position:relative;width:300px;height:auto;aspect-ratio:300/375;
  border-radius:30px;overflow:hidden}
.slide-video__img img,.slide-video__img video{position:absolute;z-index:2;top:0;left:0;
  width:100%;height:auto;aspect-ratio:300/375;object-fit:cover;transition:opacity 300ms ease-in-out}
.slide-video__img video{z-index:1}
.slide-video:hover .slide-video__img img{opacity:0}
.slide-video__img__time{position:absolute;z-index:10;left:10px;bottom:10px;color:#fff;
  font-size:15px;font-weight:500;line-height:1.2;text-shadow:1px 1px 7px rgba(0,0,0,.2);
  padding:14px 20px 12px;border-radius:100px;border:1px solid rgba(255,255,255,.2);
  background:rgba(255,255,255,.2);backdrop-filter:blur(22px)}
.slide-video__img__play{position:absolute;z-index:10;right:10px;bottom:10px}
.slide-video__content{width:100%;display:flex;flex:1;flex-direction:column;align-items:center;
  justify-content:space-between;gap:5px;text-align:center;padding:30px 30px 40px}
.slide-video__content__name{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:16px}
.slide-video__content__name strong{font-weight:500}
.slide-video__content__name span{font-size:.9em;line-height:1.2}
.slide-video__content__logo{width:100%}
.slide-video__content__logo img{display:block;max-width:100%;margin:0 auto;border-radius:0}
.brsmallcta{color:#fff;font-size:14px;font-weight:500;border-radius:500px;
  padding:9px 20px 7px;background:var(--gm-himalayan-blue-on-white)}
.slide-video__content__cta{pointer-events:none;opacity:0;transform:translateY(10px);
  transition:opacity 300ms ease-in-out,transform 300ms ease-in-out}
.slide-video:hover .slide-video__content__cta{opacity:1;transform:translateY(0)}

/* the review card */
.vcard{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;
  width:100%;height:auto;padding:26px;border-radius:20px;background:#fff;
  text-decoration:none;color:inherit;flex-shrink:0}
@media(max-width:1024px){.vcard{width:80vw;max-width:400px}}
/* This was a review score with a star before it. The page carries workflow steps here now,
   so the slot is a step tag -- a star in front of one would read as a rating that does not
   exist. Same reason the three .rating-* colours below are no longer vendor colours. */
.vcard__rating{position:relative;color:var(--gm-himalayan-blue-on-white);font-size:13px;
  font-weight:500;line-height:1;letter-spacing:1.4px;margin-bottom:12px}
.vcard__quote{color:var(--gm-shiva-indigo);font-size:16px;font-weight:500;line-height:1.25}
.vcard__bot{width:100%;display:flex;align-items:center;gap:8px;margin-top:30px}
.vcard__bot img{flex-shrink:0;border-radius:0;margin-left:auto}
.vcard__bot__name{display:flex;flex-direction:column;gap:2px}
.vcard__bot__name strong{color:var(--gm-shiva-indigo);font-size:12px;font-weight:500;line-height:1.2}
.vcard__bot__name span{color:var(--gm-earth);font-size:10px;line-height:1.2}

/* the newest-customer card */
.slide-story{position:relative;display:flex;background:rgba(14,165,255,.08);border-radius:30px;
  overflow:hidden;flex-shrink:0}
.slide-story a{position:relative;display:flex;flex-direction:column;align-items:flex-start;
  justify-content:flex-start;width:300px;aspect-ratio:300/375;text-decoration:none;padding:30px 20px}
.slide-story a img{position:absolute;pointer-events:none;top:0;left:0;width:100%;height:100%;
  object-fit:cover;border-radius:30px;transition:opacity 400ms ease-in-out,transform 400ms ease-in-out}
.slide-story a:hover img{transform:translateX(100%)}
.slide-story__date{color:var(--gm-earth);font-size:11px;font-weight:500;line-height:1.2;letter-spacing:2px;
  text-transform:uppercase;margin-bottom:12px}
.slide-story__quote{color:var(--gm-shiva-indigo);font-size:18px;font-weight:500;line-height:1.2;margin-bottom:12px}
.slide-story__name{color:var(--gm-earth);font-size:14px;line-height:1.4}
.slide-story__name strong{display:block;font-size:14px;font-weight:500}
.slide-story__name span{display:block;font-size:13px}
.slide-story__cta{margin-top:auto}

/* 3 · minds */
.cst__minds__head{display:flex;flex-direction:column;align-items:center;gap:30px}
.cst__minds__h{text-align:center}

/* 4 · the library: a pale blue filter card over the 3-up card grid */
.cst__filterbar{width:100%;display:flex;flex-direction:column;align-items:center;gap:20px;
  padding:28px;border-radius:20px;background:rgba(14,165,255,.08)}
.cst__filterbar__h{font-size:24px;line-height:30px;font-weight:500;color:var(--gm-shiva-indigo);margin:0}
.cs-shortcode-filters .filter-wrap{display:flex;flex-wrap:wrap;align-items:center;
  justify-content:flex-start;gap:20px;padding-top:0}
.filter-group{display:flex;align-items:center;gap:10px}
.filter-prefix-label{color:var(--gm-shiva-indigo);font-size:16px;line-height:26px}
.input-wrap{position:relative}
.select-group{display:flex;align-items:center;gap:10px;cursor:pointer;color:#fff;
  font-size:16px;font-weight:500;line-height:1.2;padding:15px 24px 13px;
  border-radius:100px;background:var(--gm-himalayan-blue-on-white);white-space:nowrap}
.select-group svg{flex:none;transition:transform 200ms ease-in-out}
.input-wrap.is-open .select-group svg{transform:rotate(180deg)}
.options-wrap{display:none;position:absolute;z-index:60;top:calc(100% + 8px);left:0;
  min-width:100%;max-height:320px;overflow-y:auto;padding:8px;border-radius:16px;
  background:#fff;box-shadow:0 10px 40px rgba(0,0,0,.15)}
.input-wrap.is-open .options-wrap{display:block}
.option{cursor:pointer;white-space:nowrap;color:var(--gm-shiva-indigo);font-size:15px;line-height:1.3;
  padding:9px 14px;border-radius:100px}
.option:hover{background:rgba(14,165,255,.08)}
.option.selected{color:var(--gm-himalayan-blue-on-white);font-weight:500}
@media(max-width:1024px){
  .cst__finder{padding:0 16px}
  .cst__finder__in{gap:36px;padding:32px 0 26px}
  .cst__filterbar__h{font-size:20px;line-height:26px}}
@media(max-width:767px){.cs-shortcode-filters .filter-wrap{justify-content:center}
  .cst__filterbar{padding:20px 10px}}

.cs-listing{position:relative;width:100%;transition:opacity .25s ease}
.cs-listing__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
@media(max-width:1024px){.cs-listing__grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.cs-listing__grid{grid-template-columns:1fr}}
.cs-listing__pagination{margin-top:40px;display:flex;justify-content:center}
.cs-card{position:relative;aspect-ratio:35/46;border-radius:20px;overflow:hidden;
  background:var(--gm-shiva-indigo)}
@media(max-width:1199px){.cs-card{aspect-ratio:auto}}
.cs-card::after{content:"";position:absolute;z-index:10;left:0;bottom:0;width:100%;height:30px;
  background:linear-gradient(to bottom,rgba(11,31,77,0) 0%,rgba(11,31,77,1) 100%)}
.cs-card__inner{display:flex;flex-direction:column;height:100%;text-decoration:none;color:inherit}
.cs-card__image{position:absolute;z-index:1;top:0;left:0;width:100%;height:auto;aspect-ratio:7/6}
@media(max-width:1199px){.cs-card__image{position:static;aspect-ratio:3/2}}
.cs-card__image img{width:100%;height:100%;object-fit:cover;display:block}
.cs-card__content{position:relative;z-index:5;display:flex;flex-direction:column;
  align-items:flex-start;flex:1;gap:0;padding:24px 20px 30px;background:var(--gm-shiva-indigo);
  transform:translateY(calc(100% - 160px));transition:transform 400ms ease-out}
@media(max-width:1199px){.cs-card__content{transform:none}}
.cs-card:hover .cs-card__content{transform:translateY(0)}
.cs-card__content::before{content:"";position:absolute;top:0;transform:translateY(-100%);
  left:0;width:100%;height:80px;
  background:linear-gradient(to bottom,rgba(11,31,77,0) 0%,rgba(11,31,77,1) 100%)}
.cs-card__labels{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;
  gap:8px 6px;margin-bottom:12px}
.cs-card__label{color:#fff;font-size:12px;font-weight:500;line-height:1.2;padding:3px 8px;
  border-radius:50px;background:var(--gm-earth)}
.cs-card__content h3.cs-card__title{color:#fff;font-size:20px;font-weight:500;line-height:1.4;margin:0}
.cs-card__challenge{color:var(--gm-shiva-indigo);font-size:14px;line-height:1.6;margin-top:16px;
  transition:color 400ms ease-out}
@media(max-width:1199px){.cs-card__challenge{display:none}}
.cs-card:hover .cs-card__challenge{color:#fff}
.cs-card__button{color:#fff;font-size:16px;font-weight:500;line-height:1.2;
  padding:12px 24px 10px;background:var(--gm-himalayan-blue-on-white);border-radius:100px;margin-top:auto}
@media(max-width:1199px){.cs-card__button{display:none}}
.cs-pagination{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:8px}
.cs-pagination__page{display:inline-flex;align-items:center;
  justify-content:center;min-width:42px;height:42px;color:var(--gm-shiva-indigo);font-size:18px;font-weight:500;
  padding:2px 10px 0;border:0;background:none;font-family:inherit;border-radius:100px;
  text-decoration:none;cursor:pointer;
  transition:background .15s ease,color .15s ease,border-color .15s ease}
.cs-pagination__page:hover{background:rgba(0,123,196,.3)}
.cs-pagination__page--active{pointer-events:none;color:#fff;background:var(--gm-himalayan-blue-on-white)}
.cs-pagination__ellipsis{color:var(--gm-shiva-indigo);padding:0 6px;user-select:none}

/* 5 · newest customers */
.cst__newest__head{display:flex;flex-direction:column;align-items:center;gap:20px}
.cst__newest__h{text-align:center}
.cst__newest__lead{font-size:18px;line-height:29px;color:var(--text);text-align:center;margin:0}
/* the copy column of section 6 is left-aligned, so the lead follows the heading rather than
   the section's centred rhythm */
.cst__reviews__l .cst__newest__lead{text-align:left}
.cst__newest__lead a{color:var(--cyan)}

/* 6 · reviews */
.cst__reviews__l{width:100%;max-width:335px;flex:none;display:flex;flex-direction:column;gap:40px}
.cst__ratings{display:flex;flex-wrap:wrap;gap:8px}
.rating-box{flex:1 1 100%;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:0;
  padding:16px;border-radius:8px;border:1px solid var(--gm-moon-silver);
  transition:transform 200ms ease-in-out}
.rating-box:hover{transform:scale(1.05)}
/* the three vendor colour modifiers went with the vendor content: these are numbered proof
   blocks now, so the numeral takes one colour from the sheet */
.rating-num{font-size:36px;font-weight:500;line-height:1;color:var(--gm-shiva-indigo)}
.rating-name{font-size:12px;font-weight:500;line-height:1.2;margin-top:8px}
@media(max-width:1024px){
  .cst__reviews__in{flex-direction:column;align-items:flex-start}
  .cst__reviews__l{max-width:100%}
  .rating-box{flex:1 1 0}}

/* 7 · closing CTA */
.cst__cta__card{position:relative;width:100%;max-width:1400px;margin:0 auto;overflow:hidden;
  padding:120px 60px;border-radius:40px;background:var(--gm-shiva-indigo);
  display:flex;flex-direction:column;gap:30px}
.cst__cta__box{position:relative;z-index:5;width:100%;max-width:860px;margin:0 auto;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:50px;text-align:center}
/* the pair sits side by side, as the design guide's CTA row does -- .br-cta is display:block,
   so two of them in a plain div stacked */
.cst__cta__btn{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px}
.cst__cta__glow{pointer-events:none;position:absolute;z-index:1;opacity:.6;width:1280px;
  height:450px;left:calc(50% - 370px);bottom:-280px;transform:rotate(-180deg);border-radius:50%;
  background:linear-gradient(269deg,var(--gm-himalayan-blue) 42.21%,var(--gm-peacock-teal) 55.13%);filter:blur(180px)}
.cst__cta__img{display:block;width:100%;max-width:600px;height:auto;border-radius:20px}
.cst__cta__h{color:#fff}
.cst__cta__h span{font-size:1.2em;text-wrap:pretty}
.cst__cta__lead{font-size:20px;line-height:29px;color:var(--gm-moon-silver);margin:0;text-wrap:balance}
@media(max-width:1200px){.cst__cta{padding:0 15px}}
@media(max-width:1024px){
  .cst__cta__in{padding:60px 0 80px}
  .cst__cta__card{padding:40px 30px;border-radius:20px}
  .cst__cta__box{gap:20px}}

/* upstream's video modal */
#yt-modal-overlay{display:none;position:fixed;z-index:9999;inset:0;background:rgba(0,0,0,.7);
  align-items:center;justify-content:center;padding:5vw}
#yt-modal-overlay.is-open{display:flex}
#yt-modal-modal{position:relative;width:90vw;max-width:1200px;max-height:90vh;aspect-ratio:16/9;
  background:#000;border-radius:12px;overflow:hidden;box-shadow:0 30px 80px rgba(0,0,0,.6)}
#yt-modal-close{position:absolute;z-index:10;top:10px;right:10px;width:34px;height:34px;
  border-radius:50%;border:none;background:rgba(0,0,0,.6);color:#fff;font-size:18px;line-height:1;
  cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
#yt-modal-modal video{display:block;width:100%;height:100%;object-fit:contain}

/* ==========================================================================
   about-us  (.p-au)  --  final-web/about-us.html
   Every number here was measured off the saved source at 1920/1600/1440/1300/
   1200/1100/1024/900/767/480/390/320, not guessed. Breakpoints upstream uses:
   1366 (hero side padding), 1200, 1024, 767, 480.
   The odd explicit widths (210px, 254px, 741px) are upstream's own authored
   widget widths -- its head columns are align-items:center, so an unconstrained
   child is fit-content and a constrained one carries a literal width.
   ========================================================================== */

/* ---- 1  hero ---- */
.au__hero{position:relative;overflow:hidden;padding:0 120px;display:flex;flex-direction:column}
.au__hero::before,.au__hero::after{content:"";position:absolute;z-index:0;
  border-radius:50%;pointer-events:none}
.au__hero::before{inset-block:0;left:-569px;width:686px;background:#0179F8;filter:blur(48px)}
.au__hero::after{top:48px;height:75%;right:-296px;width:270px;filter:blur(64px);
  background:linear-gradient(200deg,#019ACE 0%,#01CE7F 100%)}
.au__hero__in{position:relative;width:100%;display:flex;flex-direction:column;align-items:center;
  gap:60px;padding:60px 0 80px}
.au__hero__row{display:flex;flex-direction:row;align-items:center;gap:56px;
  width:100%;max-width:1284px}
.au__hero__copy{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:8px}
.au__hero__media{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.au__hero__h{margin:0;font-size:64px;line-height:70.4px;font-weight:500;color:#000}
.au__hero__eye{margin:0;font-size:20px;line-height:58px;font-weight:500;color:#000;
  text-transform:uppercase;letter-spacing:13%}
.au__hero__video{display:block;width:100%;aspect-ratio:820/580;object-fit:cover;
  border-radius:24px;background-color:rgba(255,255,255,0)}
@media(max-width:1366px){.au__hero{padding:0 40px}}
@media(max-width:1200px){.au__hero{padding:0 15px}}
@media(max-width:1024px){
  .au__hero__in{padding:56px 0}
  .au__hero__copy{gap:16px}
  .au__hero__h{font-size:48px;line-height:45px}
  .au__hero__eye{font-size:16px;line-height:29px}}
@media(max-width:767px){
  .au__hero__in{padding:40px 0}
  .au__hero__row{flex-wrap:wrap}
  .au__hero__copy,.au__hero__media{flex-basis:100%}
  .au__hero__h{font-size:42px;line-height:40px;text-align:center}
  /* 10%, not 13%: the tracking loosens on desktop and tightens here. Worth 8.5px on
     "LOOMI BY BLOOMREACH" -- nothing a box sweep reads, but every glyph is off by it */
  .au__hero__eye{font-size:15px;text-align:center;letter-spacing:10%}}

/* ---- 2  Loomi personalizes ---- */
.au__loomi{position:relative;isolation:isolate;overflow:hidden;background:#000;
  padding:0 40px;display:flex;flex-direction:column}
.au__loomi::before,.au__loomi::after{content:"";position:absolute;z-index:-1;
  border-radius:50%;opacity:.32;pointer-events:none}
.au__loomi::before{bottom:-360px;left:-150px;width:700px;height:560px;
  background:#019ACE;filter:blur(120px)}
.au__loomi::after{top:0;right:-240px;width:450px;height:80%;
  background:#01CE7F;filter:blur(100px)}
@media(max-width:1024px){
  .au__loomi::before{bottom:-460px;left:0}
  .au__loomi::after{right:-390px}}
.au__loomi__in{position:relative;width:100%;max-width:1038px;margin:0 auto;padding:72px 0;
  display:flex;flex-direction:row;align-items:center;gap:34px}
.au__loomi__card{width:100%;display:flex;flex-direction:column;border-radius:32px}
.au__loomi__badge{margin:0;text-align:center;line-height:0;gap:0}
/* height:auto, not 41px: the mark is 41.141 tall at 108 wide from its own aspect
   ratio, and pinning the integer shifted every line below it up by 9/64 of a pixel
   -- invisible to a rounded box sweep, visible to the pixel diff on every glyph */
.au__loomi__badge img{display:inline-block;width:108px;height:auto;border-radius:20px}
.au__loomi__head{display:flex;flex-direction:column;align-items:center;gap:22px}
.au__loomi__hbox{width:100%;max-width:588px;padding:28px 0 22px}
.au__loomi__h{margin:0;font-size:48px;line-height:50.4px;font-weight:500;color:#fff;
  text-align:center}
.au__loomi__leadbox{width:100%;max-width:920px;padding:0 0 48px}
.au__loomi__lead{margin:0;font-size:16px;line-height:26px;font-weight:400;color:#fff;
  text-align:center}
.au__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.au__stat{padding:16px 24px;border-radius:20px}
.au__stat__in{display:flex;flex-direction:column-reverse;gap:8px}
.au__stat__label{margin:0;font-size:16px;line-height:19.68px;font-weight:400;color:#fff;
  text-align:center}
/* the figure is gradient-filled text, so the colour lives in the background */
.au__stat__num{margin:0;display:flex;text-align:center;
  font-size:60px;line-height:72px;font-weight:500;color:#002840;
  background-image:linear-gradient(82deg,#0179F8 15.09%,#00B1DA 76.5%,#0099CE 100%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
/* prefix and suffix each take the slack, which is what centres the number itself.
   `flex:1 1 auto`, NOT `flex:1` (= 1 1 0%): the basis is the content, so the empty
   prefix and the "+" suffix split the free space asymmetrically (59/95, not 121/121).
   With the wrong basis the figure sits ~18px right, and since the gradient is painted
   on this box with background-clip:text, the glyphs then sample the wrong part of it
   and the whole number comes out the wrong colour. Only a pixel diff sees that. */
.au__stat__pre,.au__stat__suf{flex:1 1 auto}
.au__stat__suf{text-align:start}
@media(max-width:1024px){
  .au__loomi__in{max-width:768px;padding:56px 0 40px;flex-direction:column;gap:32px}
  .au__loomi__head{gap:0}
  .au__loomi__h{font-size:24px;line-height:30px}
  .au__stats{grid-template-columns:repeat(2,1fr)}
  .au__stat__num{font-size:36px;line-height:45px}
  .au__stat__label{font-size:18px;line-height:29px}
  .au__loomi{padding:0 16px}}
@media(max-width:767px){
  .au__loomi{padding:0 15px}
  .au__loomi__in{padding:40px 0}
  .au__loomi__hbox{max-width:330px}
  .au__loomi__h{font-size:30px;line-height:38px}
  .au__loomi__leadbox{max-width:359px}
  .au__stats{grid-template-columns:1fr}
  .au__stat{padding:12px 16px}
  .au__stat__label{font-size:16px;line-height:26px}
  .au__stat__in{gap:4px}
  .au__loomi__card{border-radius:24px}
  .au__loomi__leadbox{padding:0 0 32px}}

/* ---- 4  history rail ---- */
/* overflow VISIBLE, matching upstream: this section's yellow glow is meant to bleed
   past it into the awards band below. Clipping it was a defensive habit, not a
   reading of the source, and it cost the top-left corner of the next section.
   The glow spans x -500..323, so left bleed never extends the scrollable width. */
.au__hist{position:relative;padding:0 15px;display:flex;flex-direction:column}
.au__hist::before{content:"";position:absolute;z-index:-1;border-radius:50%;
  pointer-events:none;top:80px;left:-500px;width:823px;height:600px;
  background:#0179F8;filter:blur(83px)}
@media(max-width:1024px){.au__hist::before{left:-350px;width:500px}}
@media(max-width:767px){.au__hist::before{left:-470px;width:500px}}
.au__hist__in{position:relative;width:100%;max-width:1110px;margin:0 auto;padding:40px 0 64px;
  display:flex;flex-direction:column;align-items:flex-start;gap:0}
.au__hist__head{width:100%;display:flex;flex-direction:column;align-items:center;gap:16px}
.au__hist__h{margin:0;font-size:60px;line-height:74.4px;font-weight:500;color:#000;
  text-align:center}
.au__hist__sub{margin:0;width:741px;max-width:100%;font-size:20px;line-height:26px;
  font-weight:400;color:#000;text-align:center}
.au__hist__car{position:relative;width:100%;padding:0}
.au__hist__carin{padding:32px 0 0}
.au__hist__view{overflow:hidden;padding-bottom:18px}
.au__hist__rail{display:flex;gap:30px;transition:transform .35s ease}
.au__hist__rail.is-instant{transition:none}
/* three cards per view above 1024, two down to 481, one below -- the JS reads the
   rendered card width rather than carrying its own copy of these numbers */
.au__hist__slide{flex:0 0 calc((100% - 60px)/3);border:1px solid #D6D6D6;border-radius:28px;
  background:#fff;display:flex;flex-direction:column;padding:0 40px}
.au__hist__slide__in{flex:1;display:flex;flex-direction:column;gap:88px;padding:40px 0 32px;
  width:100%}
/* the block is exactly the 60px inline box: without line-height:0 the 26px strut
   and the 60px glyph box union to 76 and every slide grows 16px */
.au__hist__year{margin:0;line-height:0}
.au__hist__year span{font-size:60px;line-height:60px;font-weight:500;color:#000}
.au__hist__body{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:18px}
.au__hist__title{margin:0;font-size:20px;line-height:26px;font-weight:500;color:#000}
/* collapsed with grid-template-rows so the copy can animate open from its real height */
.au__hist__text{display:grid;grid-template-rows:0fr;opacity:0;margin-top:-18px;
  transition:grid-template-rows .35s,opacity .25s,margin-top .35s}
.au__hist__text > div{overflow:hidden;min-height:0}
.au__hist__text p{margin:0;font-size:16px;line-height:24px;font-weight:400;color:#000}
.au__hist__slide.is-open .au__hist__text{grid-template-rows:1fr;opacity:1;margin-top:0}
.au__hist__more{margin-top:auto;font-size:16px;line-height:26px;color:#019ace;
  text-decoration:none;background:none;border:0;padding:0;cursor:pointer;font-family:inherit}
.au__hist__nav{position:absolute;inset:0;pointer-events:none}
/* upstream pairs top:182px with translateY(-24px), i.e. the disc is centred on 182
   rather than hung from it -- without the transform it sits 24px low */
.au__hist__btn{position:absolute;top:182px;transform:translateY(-24px);
  width:48px;height:48px;border:0;padding:12px;
  border-radius:200px;background:#000;color:transparent;cursor:pointer;
  display:flex;align-items:center;justify-content:center;pointer-events:auto}
/* The arrows hang -88px outside the rail on a wide screen, but upstream slides them
   back in as the viewport closes on the 1110px rail and floors them at -8px, so they
   never leave the screen. Measured: -88 to ~1330, then -75/-50/-25 at 1300/1250/1200,
   then a flat -8 from ~1160 down. That is a clamp, not a media query -- the value moves
   continuously with the width. Pinning a flat -88 put the next arrow at x=1268 in a
   1250 viewport, which is a real horizontal overflow (it was hidden until the section
   stopped being clipped). */
.au__hist__btn[data-au-h="prev"]{left:clamp(-88px, calc(5px - (100vw - 1140px) / 2), -8px)}
.au__hist__btn[data-au-h="next"]{right:clamp(-88px, calc(5px - (100vw - 1140px) / 2), -8px)}
.au__hist__btn svg{width:24px;height:24px;display:block;stroke:#fff}
.au__hist__dots{position:absolute;left:50%;transform:translateX(-50%);bottom:-24px;
  display:flex;justify-content:center;pointer-events:auto}
.au__hist__btn:disabled{opacity:0}
.au__hist__dot{position:relative;flex:none;width:8px;height:8px;margin:0 6px;padding:0;
  border:0;border-radius:50%;background:#ccc;cursor:pointer;
  transition:transform .2s ease,left .2s ease}
.au__hist__dot.is-on{background:#000}
@media(max-width:1024px){
  .au__hist{padding:0 16px}
  .au__hist__in{max-width:768px;padding:56px 0;align-items:center;gap:32px}
  .au__hist__year span{font-size:52px;line-height:52px}
  .au__hist__car{padding:0 0 56px}
  .au__hist__h{font-size:30px;line-height:38px}
  .au__hist__slide__in{gap:48px}
  .au__hist__year{font-size:52px;line-height:52px}
  .au__hist__nav{inset:0}
  .au__hist__btn{top:auto;bottom:-30px;transform:none}
  .au__hist__btn[data-au-h="prev"]{left:0;right:auto}
  .au__hist__btn[data-au-h="next"]{left:auto;right:0}
  .au__hist__dots{bottom:-12px}}
@media(max-width:1023px){
  .au__hist__slide{flex-basis:calc((100% - 30px)/2)}}
@media(max-width:767px){
  .au__hist{padding:0}
  .au__hist__in{max-width:none;padding:40px 0 64px;align-items:flex-start;gap:0}
  .au__hist__head{gap:20px}
  .au__hist__h{width:210px;margin-inline:auto}
  .au__hist__sub{width:254px;font-size:17px;margin-inline:auto}
  .au__hist__car{padding:0 16px 56px}
  .au__hist__slide{padding:16px 24px}
  .au__hist__slide__in{padding:24px 0}
  .au__hist__btn{width:44px;height:44px}
  .au__hist__btn[data-au-h="prev"]{left:16px;right:auto}
  .au__hist__btn[data-au-h="next"]{left:auto;right:16px}
  /* Below 767 upstream switches the pagination to swiper's DYNAMIC bullets: all 15 stay
     in the DOM but the strip is clipped to 161px and slid so only a five-bullet window
     shows, the outer two scaled to 0.66 and 0.33. Rendering all fifteen inline made a
     345px strip that ran under the arrow. This 161px box is what puts site.js into that
     mode -- it measures the rendered box rather than carrying its own breakpoint. */
  .au__hist__dots{width:161px;overflow:hidden;justify-content:flex-start}
  .au__hist__dot{width:11px;height:11px}}
@media(max-width:480px){
  .au__hist__slide{flex-basis:100%}}

/* ---- 5  awards ---- */
.au__awards{padding:0 40px;display:flex;flex-direction:column}
.au__awards__in{width:100%;max-width:1110px;margin:0 auto;padding:40px 0 80px;
  display:flex;flex-direction:column;align-items:center;gap:50px}
.au__awards__block{width:100%;display:flex;flex-direction:column;align-items:center;gap:56px}
.au__awards__head{width:100%;display:flex;flex-direction:column;align-items:center;gap:16px}
.au__awards__h{margin:0;font-size:60px;line-height:74.4px;font-weight:500;color:#000;
  text-align:center}
.au__awards__sub{margin:0;width:741px;max-width:100%;font-size:20px;line-height:26px;
  font-weight:400;color:#000;text-align:center}
/* DELIBERATE DIVERGENCE: minmax(0,243px), not a flat 243px. Upstream holds the
   grid at a rigid 793px, which does not fit its own 707px container between 768
   and 799 -- the saved source overflows there itself (at 787: doc 790, view 787).
   The tracks shrink here instead, so the page clears the no-overflow gate at
   every one of the 23 regression widths. Identical to upstream at every width
   where upstream is not already spilling. */
.au__awards__grid{width:793px;max-width:100%;display:grid;
  grid-template-columns:repeat(3,minmax(0,243px));grid-template-rows:repeat(2,1fr);
  column-gap:32px;row-gap:48px;justify-items:center;justify-content:center}
.au__award{width:214px;max-width:100%;display:flex;flex-direction:column;align-items:center;gap:48px}
.au__award--tall{gap:34px}
.au__award img{display:block;width:129px;height:auto;max-width:100%}
.au__award--tall img{width:122px}
.au__award__t{margin:0;font-size:16px;line-height:26px;font-weight:400;color:#000;
  text-align:center}
.au__award__t span{line-height:24px}
@media(max-width:1024px){
  .au__awards__h{font-size:30px;line-height:38px}
  .au__awards__sub{font-size:16px}
  .au__award img,.au__award--tall img{width:110px}}
@media(max-width:767px){
  .au__awards{padding:0 16px}
  .au__awards__in{padding:40px 0}
  .au__awards__h{font-size:32px;line-height:38px}
  .au__awards__sub{width:100%;font-size:17px}
  .au__awards__grid{width:100%;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:24px}
  .au__award{gap:32px}
  .au__award--tall{gap:16px}
  .au__award img,.au__award--tall img{width:100px}
  .au__award__t span{font-size:15px;line-height:20px}}

/* ---- 6  our mission ---- */
.au__mission{position:relative;isolation:isolate;overflow:hidden;background:#000;
  display:flex;flex-direction:column}
.au__mission::before,.au__mission::after{content:"";position:absolute;z-index:-1;
  border-radius:50%;pointer-events:none;
  background-image:linear-gradient(0deg,#019ACE 0%,#01CE7F 100%);filter:blur(144px)}
.au__mission::before{top:-430px;left:-490px;width:552px;height:797px;opacity:.9;
  transform:rotate(118.5deg)}
.au__mission::after{bottom:-210px;right:-160px;width:540px;height:110%;opacity:.85;
  transform:rotate(178.5deg)}
@media(max-width:767px){
  .au__mission::before{left:-480px;width:352px}
  .au__mission::after{top:200px;bottom:-200px;right:-140px;width:200px;height:auto}}
.au__mission__in{position:relative;width:100%;max-width:965px;margin:0 auto;padding:56px 0;
  display:flex;flex-direction:column;align-items:center;gap:52px}
.au__mission__grid{width:100%;display:grid;grid-template-columns:.76fr 1fr;gap:36px;align-items:center}
.au__mission__copy{display:flex;flex-direction:column;gap:16px}
.au__mission__kicker{margin:0;font-size:16px;line-height:19.84px;font-weight:500;
  color:#fff;text-transform:uppercase}
.au__mission__h{margin:0;font-size:46px;line-height:55.2px;font-weight:500;color:#fff}
.au__mission__h .no-break{white-space:nowrap}
.au__mission__panel{display:flex;flex-direction:column;gap:30px;padding:24px 32px;
  border-radius:32px;background:rgba(255,255,255,.1)}
.au__mission__panel img{display:block;width:100%;height:auto}
@media(max-width:1024px){
  .au__mission{padding:0 15px}
  .au__mission__in{max-width:768px;padding:56px 0;gap:32px}
  .au__mission__kicker{font-size:15px;line-height:18.6px}
  .au__mission__h{font-size:36px;line-height:42px}}
@media(max-width:767px){
  .au__mission{padding:0 16px}
  .au__mission__in{max-width:none;padding:40px 0 48px}
  .au__mission__grid{grid-template-columns:1fr}
  /* the copy centres below 767; upstream shrink-wraps the headline and centres the box,
     which puts the glyphs exactly where centring the text in a full-width box does */
  .au__mission__kicker{text-align:center}
  .au__mission__h{font-size:34px;line-height:42px;text-align:center}
  .au__mission__panel{padding:16px;flex-wrap:wrap}}

/* ---- 7  leaders / careers ---- */
.au__team{padding:0 15px;display:flex;flex-direction:column}
.au__team__in{width:100%;max-width:1050px;margin:0 auto;padding:80px 0;
  display:flex;flex-direction:column;align-items:center;gap:52px}
.au__team__row{width:100%;display:flex;flex-direction:row;gap:50px}
.au__card{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:20px;
  padding:26px 24px;border:1px solid #B5B5B5;border-radius:32px;background:#fff}
.au__card__media img{display:block;width:100%;height:auto;border-radius:20px}
.au__card__body{display:flex;flex-direction:column;align-items:flex-start}
.au__card__h{margin:0;font-size:48px;line-height:52.8px;font-weight:500;color:#000}
.au__card__text{width:412px;max-width:100%;gap:0}
.au__card__text p{margin:0 0 36px;font-size:16px;line-height:24px;font-weight:400;color:#000}
.au__card__cta{line-height:0}
.au__card__cta .br-cta{display:inline-block}
@media(max-width:1024px){
  .au__team{padding:0 16px}
  .au__team__in{max-width:768px;padding:80px 0 40px;gap:32px}
  .au__team__row{gap:32px}
  .au__card__h{font-size:40px;line-height:30px}}
@media(max-width:767px){
  .au__team{padding:0 15px}
  .au__team__in{max-width:none;padding:40px 0 80px}
  .au__team__row{flex-wrap:wrap;gap:36px}
  .au__card{flex-basis:100%;padding:24px 16px;border-radius:12px}
  .au__card__h{font-size:30px;line-height:38px}}

/* ==========================================================================
   contact-us-general  (.p-cg)  --  final-web/contact-us-general.html
   Measured off the saved source at 1920/1600/1440/1300/1200/1100/1024/900/767/
   480/390/320. The form fields reuse .lc__field, which already carries the same
   48px / 16px-radius / #CCD4D9 border / #99A9B3 placeholder spec upstream uses.
   ========================================================================== */

.cg__form,.cg__line,.cg__loc,.cg__crumb{display:flex;flex-direction:column;padding:0 15px}
.cg__form__in,.cg__line__in,.cg__loc__in,.cg__crumb__in{width:100%;max-width:1110px;margin:0 auto}

/* ---- 1  form ---- */
.cg__form__in{display:flex;flex-direction:column;align-items:center;gap:100px;padding:100px 0 50px}
.cg__form__head{width:100%;display:flex;flex-direction:column;gap:24px}
.cg__h1{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840;text-align:center}
.cg__lead{margin:0;font-size:20px;line-height:29px;font-weight:400;color:#002840;text-align:center}
/* ---- the landing chooser ---- */
/* a class's `display` beats the UA sheet's [hidden]{display:none}, so these two have to
   say it themselves or the hidden one keeps its box */
.cg__choose[hidden],.cg__form__box[hidden],.cg__row[hidden]{display:none}
.cg__choose{width:100%;display:flex;flex-direction:row;flex-wrap:nowrap;gap:30px}
.cg__choose__card{flex:1;min-width:0;display:flex;flex-direction:column;gap:24px;
  padding:24px 32px;border:0;border-radius:20px;background:#F2F4F5;cursor:pointer;
  text-align:left;text-decoration:none;font:inherit}
.cg__choose__disc{flex:none;display:flex;align-items:center;justify-content:center;
  width:66px;height:66px;border-radius:50%;background:#0461C8;color:#fff}
.cg__choose__disc svg{display:block;width:26px;height:26px}
.cg__choose__t{margin:0;width:160px;max-width:100%;font-size:22px;line-height:28px;
  font-weight:500;color:#002840}
.cg__choose__card:nth-child(3) .cg__choose__t{width:172px}
.cg__choose__card:nth-child(4) .cg__choose__t{width:191px}
.cg__form__box{width:100%;display:flex;flex-direction:column;align-items:center;gap:0}
.cg__hsform{width:100%;max-width:460px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}
.cg__row--full{width:100%;gap:8px}
.cg__row--half{width:calc((100% - 8px)/2)}
.cg__hsform .lc__field select{padding:8px 16px}
.cg__hsform .lc__field textarea{display:block;width:100%;height:74px;padding:10px 16px;border-radius:16px;
  border:1px solid #CCD4D9;background:#fff;color:var(--text);resize:vertical;
  font:inherit;font-size:16px;line-height:26px}
.cg__hsform .lc__field textarea::placeholder{color:#99A9B3;opacity:1}
.cg__consent{width:100%}
.cg__consent__row{display:flex;gap:8px;align-items:flex-start}
.cg__consent__box{display:flex;align-items:stretch;gap:8px;min-height:18px;margin-bottom:8px}
.cg__consent__box input{flex:none;display:block;width:18px;height:18px;margin:0;accent-color:#019ACE}
.cg__consent__box span{display:flex;align-items:center;font-size:12px;line-height:14px;color:#002840}
.cg__consent__legal{margin:0;font-size:12px;line-height:14px;color:#667E8C}
.cg__consent__legal a{color:#019ACE;text-decoration:underline}
.cg__submit{width:100%}
.cg__btn{padding:11px 32px;border:0;border-radius:99px;background:#0461C8;cursor:pointer;
  font:inherit;font-size:16px;line-height:26px;font-weight:500;color:#002840}
@media(max-width:1024px){
  .cg__form,.cg__line,.cg__loc,.cg__crumb{padding:0 16px}
  /* two per row here, then one full-width row per card below 767 */
  .cg__choose{flex-wrap:wrap;gap:16px}
  .cg__choose__card{flex:1 1 calc(50% - 8px)}
  .cg__choose__t{font-size:18px;line-height:24px}
  .cg__choose__card:nth-child(4) .cg__choose__t{width:312px}
  .cg__form__in{max-width:768px;padding:36px 0 20px;gap:32px}
  .cg__form__head{gap:16px}
  .cg__h1{font-size:30px;line-height:38px}
  .cg__lead{font-size:18px}
  .cg__hsform{gap:8px 0px}
  .cg__row--half{width:100%}
  /* upstream swaps the whole field spec below 1024: taller box, tighter radius,
     smaller face -- not just a reflow */
  .cg__hsform .lc__field input,.cg__hsform .lc__field select,
  .cg__hsform .lc__field textarea{height:50px;border-radius:10px;
    font-size:14px;line-height:20px}
  /* the select is not in this list: its 8px box is the same at every width */
  .cg__hsform .lc__field input,.cg__hsform .lc__field textarea{padding:14px 16px}
  .cg__hsform .lc__field textarea{height:70px}
  .cg__btn{width:100%}}
@media(max-width:767px){
  .cg__choose{flex-direction:column}
  .cg__choose__card{flex:none;flex-direction:row;align-items:center;gap:16px;
    padding:16px;border-radius:12px}
  .cg__choose__disc{width:48px;height:48px}
  .cg__choose__t{width:auto;flex:1}
  .cg__choose__card:nth-child(3) .cg__choose__t,
  .cg__choose__card:nth-child(4) .cg__choose__t{width:auto}
  .cg__form__in{max-width:none;gap:52px}
  .cg__form__head{gap:24px}
  .cg__h1{font-size:36px;line-height:44px}
}

/* ---- 2  drop us a line ---- */
.cg__line__in{display:flex;flex-direction:row;gap:30px;padding:50px 0}
.cg__line__copy{width:522px;display:flex;flex-direction:column;gap:32px}
.cg__line__cards{flex:1;display:flex;flex-direction:column;gap:16px;padding:0 34px}
.cg__h2--sm{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#002840}
.cg__card{position:relative;display:flex;flex-direction:column;gap:12px;padding:16px;
  border-radius:20px;background:#F2FAFC;text-decoration:none}
.cg__card__ico{position:absolute;top:16px;right:16px;width:24px;height:24px;gap:12px;
  display:flex;align-items:center;justify-content:center;color:#69727D}
.cg__card__h{margin:0;padding:0 40px 0 0;font-size:24px;line-height:34px;font-weight:500;color:#002840}
.cg__card__t{margin:0;font-size:14px;line-height:20px;font-weight:400;color:#019ACE}
@media(max-width:1024px){
  .cg__line__in{max-width:768px;flex-direction:column;gap:36px;padding:26px 0}
  .cg__line__copy{width:100%;gap:24px}
  .cg__line__cards{flex:none}
  .cg__h2--sm{font-size:24px;line-height:30px}
  .cg__card__h{font-size:18px;line-height:29px}}
@media(max-width:767px){
  .cg__line__in{max-width:none}
  .cg__line__cards{padding:0;gap:12px}
  .cg__card{padding:12px 16px;border-radius:12px}}

/* ---- 3  locations ---- */
.cg__loc__in{display:flex;flex-direction:column;gap:64px;padding:50px 0}
.cg__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
/* the arrow pair wraps onto its own line under the panel, which is what makes the
   block exactly panel + 36px tall with no gap between them */
.cg__loc__car{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0}
.cg__loc__view{width:100%;overflow:hidden}
.cg__loc__rail{display:flex;transition:transform .35s ease}
.cg__loc__rail.is-instant{transition:none}
.cg__loc__slide{flex:0 0 100%;display:flex;flex-direction:row;gap:32px}
.cg__loc__list{flex:0 0 50%;display:flex;flex-direction:column;gap:12px}
.cg__loc__tab{width:100%;position:relative;display:flex;align-items:center;
  padding:0;gap:0;border:0;border-bottom:1px solid #D9D9D9;background:rgba(255,255,255,0);cursor:pointer;
  font:inherit;line-height:30px;color:#002840;text-align:left}
.cg__loc__tab.is-on{padding-left:12px}
.cg__loc__tab.is-on::before{content:"";position:absolute;top:0;left:0;width:5px;height:38px;
  background:#0461C8}
.cg__loc__tab span{display:flex;align-items:center;padding:0 0 8px;
  font-size:20px;line-height:30px;font-weight:500;color:#002840}
/* centred: below 767 the photo is capped at its 730px intrinsic width inside a wider
   panel, and upstream centres the 2.5px of slack. Left-aligning it shifted the whole
   photograph 2.5px and lit up 15% of the section in the pixel diff. */
.cg__loc__panel{flex:1;min-width:0;display:flex;justify-content:center}
.cg__loc__panel img{display:block;width:100%;max-width:730px;height:430px;
  object-fit:cover;border-radius:20px}
.cg__loc__btn{order:3;width:36px;height:36px;padding:8px;border:0;border-radius:100px;
  background:#019ACE;color:#fff;cursor:pointer;display:flex;align-items:center;
  justify-content:center}
.cg__loc__btn[data-cg-loc="prev"]{margin-right:12px}
.cg__loc__btn svg{width:20px;height:20px;display:block}
@media(max-width:1024px){
  .cg__loc__in{max-width:768px;gap:36px;padding:26px 0}
  .cg__h2{font-size:30px;line-height:38px}
  .cg__loc__tab{line-height:29px}
  .cg__loc__tab span{font-size:18px;line-height:29px}}
@media(max-width:767px){
  /* The arrow pair moves INTO the 100px gap between the city list and the photo here.
     Upstream keeps it in flow at the foot of the wrapped row (which is what makes the
     block 782 tall, not 746) and lifts it with a relative offset. Same trick, same
     rendered y=426 and same block height. */
  .cg__loc__btn{position:relative;top:-320px}
  .cg__loc__in{max-width:none;gap:64px}
  /* upstream's tabs widget reserves 4px under the panel at this step */
  .cg__loc__rail{padding-bottom:4px}
  /* space-between, not just a gap: the second panel has 7 cities, not 8, and upstream
     still starts its photo at the same y -- the photo is anchored to the foot of the
     slide and the gap only sets a minimum. With a plain gap the shorter panel pulled
     its photo up under the arrows. */
  .cg__loc__slide{flex-direction:column;justify-content:space-between;gap:100px}
  .cg__loc__list{flex:none}
  /* flex:none here too, or the panel grows into the slack that space-between is meant
     to put ABOVE it, and the photo rides up under the arrows on the shorter panel */
  .cg__loc__panel{flex:none}
  .cg__loc__panel img{height:254px}}

/* ==========================================================================
   rank-math breadcrumb -- the SHARED skin  (<site-crumb> variants cg / es / pr / rm)
   --------------------------------------------------------------------------
   Upstream serves ONE global .rank-math-breadcrumb rule set to every page that
   carries a breadcrumb. This project had hand-written it three times and the copies
   had drifted apart, so tools/crumb_truth.mjs read it straight off four sources
   (ecommerce-search, contact-us, pricing, leadership-team). All four agree:

     nav                 display:block
     p, a                display:flex; align-items:center; flex-wrap:wrap;
                         row-gap:8px; text-align:left
     a                   #002840, underline painted transparent, #019ACE on hover
     a:first-child       28x28, text transparent, the Bloomreach mark as background
     .separator          16x16, margin 0 8px, text transparent, chevron background

   Two things the old copies got wrong, both fixed here at the root:
     - ecommerce-search's p/a were missing align-items, flex-wrap and row-gap, so a
       crumb that wrapped would have laid out differently there than anywhere else.
     - all three keyed the 28px mark off bare `a`, which is only harmless while the
       trail has exactly ONE link. leadership-team's trail is Home - About Us - page,
       and under the old rule "About Us" would have been painted transparent and
       squeezed into a 28px box carrying the Bloomreach logo.
   The icon rules key off :first-child exactly as upstream's own stylesheet does, so
   no page needs a marker class and the rendered DOM stays what the source emits.
   ========================================================================== */
.cg__crumb__nav,.es__crumbs,.pr__crumbs,.crumbs{font-size:16px;line-height:26px;color:#002840}
.cg__crumb__nav p,.es__crumbs p,.pr__crumbs p,.crumbs p,
.cg__crumb__nav a,.es__crumbs a,.pr__crumbs a,.crumbs a{display:flex;align-items:center;flex-wrap:wrap;row-gap:8px;text-align:left}
.cg__crumb__nav p,.es__crumbs p,.pr__crumbs p,.crumbs p{margin:0}
.cg__crumb__nav a,.es__crumbs a,.pr__crumbs a,.crumbs a{color:#002840;text-decoration:underline;
  text-decoration-color:rgba(255,255,255,0);transition:.4s}
.cg__crumb__nav a:hover,.es__crumbs a:hover,.pr__crumbs a:hover,.crumbs a:hover{color:#019ACE;text-decoration-color:#019ACE}
/* `text-decoration:none` on the icon link is upstream's own declaration
   (`.rank-math-breadcrumb a:first-child{...text-decoration:none !important}`) and was
   missing from every copy of this block: the mark carried an invisible underline. */
.cg__crumb__nav a:first-child,.es__crumbs a:first-child,.pr__crumbs a:first-child,.crumbs a:first-child{width:28px;height:28px;overflow:hidden;
  color:rgba(255,255,255,0);text-decoration:none;text-decoration-color:rgba(255,255,255,0);
  background:url("https://media.gamemantra.ai/static/img/gm.webp") no-repeat 50% 50%/contain}
.cg__crumb__sep,.es__crumbs__sep,.pr__crumbs__sep,.crumbs__sep{
  display:flex;width:16px;height:16px;margin:0 8px;color:rgba(255,255,255,0);
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5L10.5 8 6 12.5' fill='none' stroke='%23667E8C' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat 50% 50%}
.cg__crumb__last,.es__crumbs__last,.pr__crumbs__last,.crumbs__last{color:#002840}
/* The section shell for the rm skin. cg/es/pr keep their own because their wrappers
   were written per page and are snapshot-locked; every page built from here on gets
   this, which is contact-us's and leadership-team's measured geometry exactly. */
.crumb{display:flex;flex-direction:column;padding:0 15px}
.crumb__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column;gap:30px;padding:0 0 20px}
@media(max-width:1024px){.crumb{padding:0 16px}.crumb__in{max-width:768px}}
@media(max-width:767px){.crumb__in{max-width:none}}

/* ---- 4  breadcrumb ---- */
.cg__crumb__in{display:flex;flex-direction:column;gap:30px;padding:0 0 20px}
/* type, icons and separator: the shared rank-math block below */
@media(max-width:1024px){.cg__crumb__in{max-width:768px}}
@media(max-width:767px){.cg__crumb__in{max-width:none}}

/* ==========================================================================
   pricing  (.p-pr)  --  final-web/pricing.html
   Measured off the saved source at 1920/1440/1200/1024/900/767/480/390/320.
   Section rhythm: inner max-width 1110 + 50px 0; at <=1024 max-width 768 and
   26px 0; at <=767 the section pads 16px and the inner fills what is left.
   ========================================================================== */
.pr__hero,.pr__plans,.pr__awards,.pr__faq,.pr__advisor,.pr__brands,.pr__crumb{
  display:flex;flex-direction:column;padding:0 15px}
/* the decorative pattern hangs far outside its anchor; upstream clips it on the
   section, at the viewport edge, not on the card -- see .pr__pat below */
.pr__hero,.pr__awards,.pr__advisor{overflow:hidden}
.pr__hero__in,.pr__plans__in,.pr__awards__in,.pr__faq__in,.pr__advisor__in,
.pr__brands__in,.pr__crumb__in{width:100%;max-width:1110px;margin:0 auto}

/* shared type */
.pr__h1{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.pr__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.pr__h2--narrow{width:635px;max-width:100%;text-align:center}
.pr__lead{margin:0;font-size:24px;line-height:34px;font-weight:400;color:#335366}
.pr__lead--dark{color:#002840}
.pr__kick{margin:0;font-size:16px;line-height:26px;font-weight:500;color:#002840}

/* the yellow tick list, used in the hero, the advisor block and every plan card */
.pr__ticks{margin:0 4px;padding:0;list-style:none;width:calc(100% - 8px)}
.pr__ticks li{display:flex;flex-direction:row;align-items:center;padding-bottom:8px}
.pr__ticks li + li{margin-top:8px}
.pr__ticks li:last-child{padding-bottom:0}
.pr__check{flex:none;align-self:flex-start;display:flex;align-items:center;justify-content:center;
  width:32px;height:32px;margin-right:16px;border-radius:50%;background:#0461C8;color:#fff}
.pr__ticks li span:last-child{padding-left:5px;font-size:16px;line-height:26px;color:#335366}

/* ---- 1 & 5  the two form blocks (one HubSpot embed, rendered twice) ---- */
.pr__hero__in,.pr__advisor__in{display:flex;flex-direction:row;align-items:flex-start;
  gap:30px;padding:50px 0}
.pr__hero__copy{flex:0 1 539px;min-width:0;display:flex;flex-direction:column;gap:40px}
.pr__hero__head{display:flex;flex-direction:column;gap:24px}
.pr__advisor__logo{margin:0}
.pr__advisor__logo img{display:block;width:184px;height:40px}
.pr__formcard{position:relative;flex:0 1 541px;min-width:0;display:flex;
  flex-direction:column;gap:30px;padding:32px;border-radius:32px;background:#E5F5FA}
/* ---- the bloomreach_pattern art (upstream ca5063f / b51d55f / 9a37846) ----
   Three instances, all built the same way: absolutely positioned against a column,
   vertically centred on it (upstream writes that as bottom:50% on the widget plus a
   translateY(50%) transform effect on its container, which nets out to the same box),
   hanging off to the right and clipped by the section. Hidden at tablet and below
   via elementor-hidden-tablet/-mobile.
   max-width:none beats the sitewide img{max-width:100%}; upstream fights the same
   rule with its own `max-width: initial !important` on each of the three widgets. */
.pr__pat{position:absolute;z-index:1;bottom:50%;transform:translateY(50%);
  left:calc(100% + 15px);width:1267px;max-width:none;height:266px;pointer-events:none}
.pr__pat--shot{left:calc(100% - 220px);border-radius:20px}
.pr__form{position:relative;z-index:1;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}
.pr__row--full{width:100%}
.pr__row--half{width:calc((100% - 8px)/2)}
.pr__form .lc__field select{padding:8px 16px;background-image:none}
.pr__interest{width:683.625px;max-width:100%;margin:0;padding:0;border:0;display:block}
.pr__interest__grid{display:flex;flex-wrap:wrap;gap:16px}
.pr__interest legend{padding:0 0 16px;font-size:16px;line-height:26px;font-weight:500;color:#002840}
.pr__interest label{width:calc(50% - 8px);display:flex;align-items:flex-start;gap:8px;
  font-size:14px;line-height:20px;color:#002840}
.pr__interest input{flex:none;margin:0;width:18px;height:18px;accent-color:#019ACE}
.pr__consent{width:100%}
.pr__consent__box{display:flex;gap:8px;margin-bottom:8px;min-height:18px}
.pr__consent__box input{flex:none;width:18px;height:18px;margin:0;accent-color:#019ACE}
.pr__consent__box span{font-size:12px;line-height:14px;color:#667E8C}
.pr__consent__legal{margin:0;font-size:12px;line-height:14px;color:#667E8C}
.pr__consent__legal a{color:#019ACE;text-decoration:underline}
.pr__submit{width:100%}
.pr__btn{padding:11px 32px;border:0;border-radius:99px;background:#0461C8;cursor:pointer;
  font:inherit;font-size:16px;line-height:26px;font-weight:500;color:#fff}

/* ---- 2  the three plans ---- */
.pr__plans__in{display:flex;flex-direction:column;align-items:center;gap:40px;padding:50px 0}
.pr__plans__row{width:100%;display:flex;flex-direction:row;gap:32px;padding:16px 0}
.pr__plans__note{width:100%;text-align:center}
.pr__plans__note p{margin:0;font-size:16px;line-height:26px;color:#002840}
/* upstream caps this heading at 863px, so it would wrap there and not at 1110 */
.pr__faq__in > .pr__h2{width:863px;max-width:100%}
.pr__plan{flex:1;min-width:0;display:flex;flex-direction:column;gap:48px;
  padding:32px 16px;border-radius:20px;background:#F2FAFC}
.pr__plan__head{display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center}
.pr__plan__h{margin:0;font-size:30px;line-height:36px;font-weight:500;color:#002840}
.pr__plan__subbox{height:58px;font-size:18px;line-height:29px}
.pr__plan__sub{margin:0;font-size:18px;line-height:29px;font-weight:400;color:#002840}
.pr__plan__term{margin:0;font-size:22px;line-height:28px;font-weight:500;color:#002840;
  text-align:left}
.pr__plan__cta{line-height:0}
.pr__plan__cta .br-cta{display:inline-block}
.pr__plan__more{width:100%;margin:auto 0 0;text-align:center;
  font-size:16px;line-height:16px;font-weight:500;color:#002840}
.pr__plan__more a{color:#019ACE;text-decoration:underline}

/* ---- 3  awards ---- */
.pr__awards__in{display:flex;flex-direction:column;gap:40px;padding:50px 0}
.pr__awards__head{display:flex;flex-direction:column;gap:16px}
.pr__awards__row{display:flex;flex-direction:row;gap:30px}
.pr__awards__grid{flex:0 1 540px;min-width:0;display:flex;flex-direction:column;gap:40px}
.pr__awards__pair{display:flex;flex-direction:row;gap:40px}
.pr__award{width:250px;display:flex;flex-direction:column;align-items:center;gap:8px}
.pr__award img{display:block;height:100px;width:auto}
.pr__award__t{margin:0;font-size:16px;line-height:26px;color:#002840;text-align:center}
.pr__awards__shot{position:relative;flex:0 1 540px;min-width:0;display:flex;
  flex-direction:column;gap:30px}
.pr__awards__photo{position:relative;z-index:1;display:block;width:100%;max-width:540px;
  height:auto;border-radius:20px}

/* ---- 4  FAQs ---- */
.pr__faq__in{display:flex;flex-direction:column;gap:64px;padding:50px 0}
.pr__faq__tabs{display:flex;flex-direction:row;gap:0}
.pr__faq__rail{width:288px;flex:none;display:flex;flex-direction:column;gap:12px;
  padding:0 60px 0 0;background:#fff}
.pr__faq__tab{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;
  gap:32px;width:249px;padding:24px 32px;border:0;border-radius:18px;background:#E6F3FE;
  cursor:pointer;font:inherit;line-height:29px;color:#002840;text-align:left}
.pr__faq__tab.is-on{background:#9DCFFB}
.pr__faq__tabt{flex:1;display:flex;align-items:center;font-size:18px;line-height:29px;
  font-weight:500;color:#002840}
.pr__faq__chev{flex:none;display:flex;width:18px;height:18px;align-items:center;justify-content:center}
.pr__faq__chev svg{display:block;width:18px;height:18px}
.pr__faq__panels{flex:1;min-width:0;display:flex}
.pr__faq__panel{width:100%;display:flex;flex-direction:column;gap:30px}
.pr__faq__panel[hidden]{display:none}
.pr__faq__acc{width:100%;display:flex;flex-direction:column;gap:10px}
.pr__faq__item{display:flex;flex-direction:column;
  border:1px solid #E5E9EC;border-radius:16px;background:rgba(0,0,0,0)}
.pr__faq__item summary{display:flex;flex-direction:row;align-items:center;
  justify-content:space-between;gap:30px;padding:10px 10px 10px 16px;
  cursor:pointer;list-style:none}
.pr__faq__qt{font-size:16px;line-height:26px;font-weight:500;color:#002840}
.pr__faq__item[open] .pr__faq__qt{color:#1F2124}
.pr__faq__mark{flex:none;display:flex;align-items:center;justify-content:center;
  width:48px;height:48px;border-radius:50%;border:1px solid #E5E9EC}
.pr__faq__mark svg{display:block;width:20px;height:20px;transition:transform .2s ease}
.pr__faq__item[open] .pr__faq__mark svg{transform:rotate(180deg)}
.pr__faq__item summary::-webkit-details-marker{display:none}
.pr__faq__a{padding:16px 16px 32px;font-size:16px;line-height:26px;color:#002840}
.pr__faq__a p{margin:0 0 24px}
.pr__faq__a p:last-child{margin-bottom:0}
.pr__faq__a a{color:#019ACE;text-decoration:underline}

/* ---- 6  happy brands ---- */
.pr__brands__in{display:flex;flex-direction:column;gap:32px;padding:50px 0}
.pr__brands__kicker{margin:0;font-size:20px;line-height:29px;font-weight:500;color:#002840;
  text-align:center}
.pr__brands__row{display:flex;flex-direction:column;gap:0}
/* The logo strip, transcribed from the source widget's own custom CSS. Every cell is
   min(128px, one nth of the viewport less the gaps), with n = 8 on desktop and 3 below
   768 -- so the strip is 848 wide at 1440, 821 at 1100 and narrower still on a phone.
   Upstream's marquee script clones the whole six-logo set and shifts the pair left by
   49px once the strip stops fitting; the clone is in the markup here and is only shown
   at the widths where that script would have added it. */
.pr__brands__wrap{align-self:center;overflow:hidden;
  --slides:8;
  --logo-w:min(128px, calc((100vw - (var(--slides) - 1) * 16px) / var(--slides)))}
.pr__brands__strip{display:flex;flex-direction:row;gap:16px}
.pr__brands__set{display:flex;flex-direction:row;gap:16px}
.pr__brands__set + .pr__brands__set{display:none}
.pr__brand{flex:none;display:flex;height:32px;min-width:var(--logo-w);width:var(--logo-w);
  max-width:none}
.pr__brand img{display:block;width:100%;height:100%;max-height:32px;object-fit:contain}

/* ---- 7  breadcrumb (the shared <site-crumb>, pr skin) ---- */
.pr__crumb__in{display:flex;flex-direction:column;gap:30px;padding:50px 0 20px}
/* type, icons and separator: the shared rank-math block below */

@media(max-width:1024px){
  /* elementor-hidden-tablet + elementor-hidden-mobile on all three pattern widgets */
  .pr__pat{display:none}
  .pr__hero,.pr__plans,.pr__awards,.pr__faq,.pr__advisor,.pr__crumb{padding:0 16px}
  .pr__hero__in,.pr__plans__in,.pr__awards__in,.pr__faq__in,.pr__advisor__in,
  .pr__crumb__in{max-width:768px}
  .pr__hero__in,.pr__advisor__in{flex-direction:column;gap:36px;padding:26px 0}
  .pr__hero__copy,.pr__formcard{flex:none;width:100%}
  .pr__hero__copy{gap:28px}
  .pr__formcard{padding:20px;gap:20px}
  .pr__plans__in,.pr__awards__in{gap:36px;padding:26px 0}
  .pr__plans__row{flex-direction:column;gap:16px;padding:0}
  .pr__plan{padding:28px 16px;gap:36px}
  .pr__awards__row{flex-direction:column;gap:40px}
  .pr__awards__grid,.pr__award,.pr__awards__shot{flex:none;width:100%}
  .pr__award{flex:1;min-width:0}
  .pr__awards__photo{max-width:none}
  .pr__awards__shot{gap:20px;border-radius:20px}
  .pr__faq__in{gap:32px;padding:26px 0}
  .pr__faq__rail{padding:0 32px 0 0}
  .pr__brands__in{padding:26px 0}
  .pr__brands__wrap{width:100%;padding-top:16px}
  .pr__brands__set + .pr__brands__set{display:flex}
  .pr__crumb__in{padding:0 0 20px}

  /* type ladder */
  .pr__h1,.pr__h2{font-size:30px;line-height:38px;text-align:center}
  .pr__h2--narrow{max-width:100%}
  .pr__lead{font-size:18px;line-height:29px;text-align:center}
  .pr__kick{text-align:center}
  .pr__faq__in > .pr__h2{width:auto}
  .pr__plan__h{font-size:22px;line-height:28px}
  .pr__plan__term{font-size:18px;line-height:24px}
  .pr__brands__kicker{font-size:18px}

  /* components */
  .pr__formcard{border-radius:20px}
  .pr__submit .pr__btn{width:100%}
  .pr__plan__sub{max-width:570px;margin-left:auto;margin-right:auto}
  /* the plan tick block shrink-wraps and centres from 768 up, and goes flush left
     below that -- upstream flips its --align-self at the same breakpoint */
  .pr__ticks{width:fit-content;max-width:calc(100% - 8px);margin-left:auto;margin-right:auto}
  /* every field goes full width and grows to 50px, and the row gap loses its column part */
  .pr__form{gap:8px 0}
  .pr__row--half{width:100%}
  .pr__form .lc__field input,.pr__form .lc__field select{height:50px}
  /* the happy-brands band runs edge to edge below the desktop breakpoint */
  .pr__brands{padding:0}
  .pr__faq__tab{width:100%;height:58px;padding:16px 20px;border-radius:12px}
  .pr__faq__tabt{font-size:16px;line-height:26px}}

@media(max-width:767px){
  .pr__ticks{margin-left:4px;margin-right:4px}
  .pr__brands{padding:0}
  .pr__brands__wrap{--slides:3}
  /* the centring above belongs to the 768-1024 band only; at phone widths every
     heading, lead and note goes back to the left edge */
  .pr__h1,.pr__h2,.pr__lead,.pr__kick,.pr__plans__note{text-align:left}
  /* ...except the awards block, which stays centred all the way down */
  .pr__awards .pr__h2,.pr__awards .pr__lead{text-align:center}
  /* the six award badges stop pairing up and stack one per row */
  .pr__awards__pair,.pr__awards__grid{gap:28px}
  .pr__awards__pair{flex-direction:column}
  .pr__award{width:100%}
  /* consecutive tabs sit 12px apart; the open one clears 32px for its panel */
  .pr__faq__tab{margin-top:12px}
  .pr__faq__tab:first-of-type{margin-top:0}
  .pr__faq__rail{background:none}
  .pr__faq__tab.is-on{margin-bottom:32px}
  .pr__faq__panel{padding-bottom:24px}
  .pr__hero__in,.pr__plans__in,.pr__awards__in,.pr__faq__in,.pr__advisor__in,
  .pr__crumb__in{max-width:none}
  .pr__awards__in{gap:36px}
  .pr__awards__row{gap:36px}
  /* the rail dissolves so each tab sits directly above its own panel; equal `order`
     keeps a title and its panel together because the title comes first in the DOM */
  .pr__faq__tabs{flex-direction:column}
  .pr__faq__rail{display:contents}
  .pr__faq__panels{display:contents}
  .pr__faq__tab:nth-child(1){order:1} .pr__faq__panel[data-pr-panel="0"]{order:1}
  .pr__faq__tab:nth-child(2){order:2} .pr__faq__panel[data-pr-panel="1"]{order:2}
  .pr__faq__tab:nth-child(3){order:3} .pr__faq__panel[data-pr-panel="2"]{order:3}
  .pr__faq__tab:nth-child(4){order:4} .pr__faq__panel[data-pr-panel="3"]{order:4}
  .pr__faq__tab:nth-child(5){order:5} .pr__faq__panel[data-pr-panel="4"]{order:5}
  .pr__brands__row{flex-wrap:wrap;justify-content:center}}


/* ==========================================================================
   leadership-team  (.p-lt)  --  final-web/leadership-team.html
   --------------------------------------------------------------------------
   Seven sections: hero, executive team, board, investors, join-the-team,
   two link cards, breadcrumb. Every number here was read off the source with
   tools/lt_bp.mjs at a fresh load per width -- the two Elementor carousels size
   themselves at init and a resize sweep can report the previous width's slides.

   The two people rails are Elementor nested-carousels whose .swiper-wrapper
   computes to `display:grid` at EVERY width in the ladder: they never slide, so
   they are a grid here. The investors rail is the opposite -- a wrapped flex row
   at >=1024 and a genuinely sliding swiper below it.

   Breakpoints, all measured, and deliberately not all the same:
     people grid   3 cols >1024 | 2 cols 541-1024 | 1 col <=540
     investors     wrapped flex >=1024 | rail 2-up 767-1023 | rail 1-up <=766
     board + investors sections lose their RIGHT padding at <=1024, which is why
     their inner runs 16px wider than every other section's.
   ========================================================================== */
.lt__hero,.lt__team,.lt__inv,.lt__join,.lt__cards{
  display:flex;flex-direction:column;padding:0 15px}
.lt__hero__in,.lt__team__in,.lt__inv__in,.lt__join__in,.lt__cards__in{
  width:100%;max-width:1110px;margin-inline:auto;display:flex;flex-direction:column}

/* ---- 1  hero ---- */
.lt__hero__in{flex-direction:row;align-items:center;gap:34px;padding:100px 0 50px}
.lt__hero__copy{flex:1 1 auto;display:flex;flex-direction:column;gap:24px}
.lt__h1{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.lt__lead{margin:0;font-size:20px;line-height:29px;font-weight:400;color:#335366}
.lt__hero__art{flex:0 0 442px;text-align:center}
.lt__hero__art img{display:block;width:442px;height:442px}

/* ---- 2 + 3  people grids ---- */
.lt__team__in{gap:36px;padding:50px 0;align-items:center}
.lt__team--board .lt__team__in{gap:52px}
.lt__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.lt__grid{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:52px 30px;
  justify-content:center}
.lt__p{display:flex;flex-direction:column;gap:16px}
.lt__p__shot img{display:block;width:100%;height:auto;aspect-ratio:350/232;
  object-fit:fill;border-radius:20px}
.lt__p__meta{display:flex;flex-direction:column;gap:0}
.lt__p__name{margin:0;font-size:22px;line-height:28px;font-weight:500;color:#002840}
.lt__p__role{font-size:14px;line-height:20px;font-weight:500;color:#002840}
/* Collapsed by max-height, not height, and only inside a card: the same class is used
   uncollapsed on the join card and on the two link cards, where upstream's script never
   touches it (it only walks `.swiper-slide .read-more-section`). */
.lt__p__bio{max-height:0;overflow:hidden;transition:max-height .4s;
  font-size:14px;line-height:20px;color:#002840}
.lt__p__bio > :first-child{margin-top:0;padding-top:16px}
.lt__p__bio p{margin:0 0 20px}
.lt__p.is-open .lt__p__bio{max-height:var(--lt-bio,2000px)}
.lt__p__more{align-self:flex-start;padding:0;border:0;background:none;
  font:inherit;font-size:16px;line-height:26px;color:#019ACE;
  text-decoration:underline;cursor:pointer}

/* ---- 4  investors ---- */
.lt__inv__in{gap:52px;padding:50px 0;align-items:center}
.lt__inv__grid{width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:52px 40px}
.lt__inv__t{flex:0 0 246px;display:flex;flex-direction:column;gap:8px;text-align:center}
.lt__inv__mark{margin-bottom:8px}
.lt__inv__mark img{display:block;width:369px;max-width:100%;height:auto;
  aspect-ratio:246/144;object-fit:fill}
.lt__inv__name{margin:0;font-size:18px;line-height:29px;font-weight:500;color:#002840}
.lt__inv__link{margin-inline:auto}
.lt__inv__link a{display:flex;align-items:center;justify-content:center;
  font-size:16px;line-height:26px;font-weight:500;color:#019ACE;text-decoration:underline}
.lt__inv__link a::after{content:"";display:block;width:24px;height:24px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 5l7 7-7 7' fill='none' stroke='%23019ACE' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")
    no-repeat 50% 50%/contain}

/* ---- 5  join the team ---- */
.lt__join__in{gap:52px;padding:50px 0;align-items:center}
.lt__join__card{width:100%;display:flex;flex-direction:row;align-items:center;gap:20px;
  background:#E6F3FE;border-radius:32px}
.lt__join__shot{flex:0 0 500px}
.lt__join__shot img{display:block;width:100%;height:auto;aspect-ratio:1/1;border-radius:20px}
.lt__join__copy{flex:1 1 auto;display:flex;flex-direction:column;gap:40px;padding:64px 32px}
.lt__join__body{display:flex;flex-direction:column;gap:28px}
.lt__join__cta{align-self:flex-start}
.lt__join__p p{margin:0;font-size:18px;line-height:29px;color:#000}

/* ---- 6  about / partner cards ---- */
.lt__cards__in{gap:52px;padding:50px 0 100px}
.lt__cards__row{width:100%;display:flex;flex-direction:row;gap:30px}
.lt__card{flex:1 1 0;display:flex;flex-direction:column;gap:8px;
  background:#F2F4F5;border-radius:32px}
.lt__card__shot img{display:block;width:100%;height:auto;aspect-ratio:540/320;
  object-fit:fill;border-radius:20px}
.lt__card__body{display:flex;flex-direction:column;padding:0 32px}
.lt__card__in{display:flex;flex-direction:column;gap:24px;padding:32px 0}
.lt__card__h{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#002840}
.lt__card__p p{margin:0;font-size:18px;line-height:29px;color:#000}

@media(max-width:1024px){
  .lt__hero,.lt__team,.lt__inv,.lt__join,.lt__cards{padding:0 16px}
  /* upstream drops the RIGHT padding on these two only, so their grids run to the edge */
  .lt__team--board,.lt__inv{padding:0 0 0 16px}
  .lt__hero__in,.lt__team__in,.lt__inv__in,.lt__join__in,.lt__cards__in{max-width:768px}

  .lt__hero__in{flex-direction:column;gap:32px;padding:36px 0 20px}
  .lt__hero__copy{width:100%}
  .lt__h1{font-size:30px;line-height:38px;text-align:center}
  .lt__lead{font-size:18px;line-height:29px;text-align:center}
  .lt__hero__art{flex:0 0 auto}
  .lt__hero__art img{width:357px;height:357px}

  .lt__team__in,.lt__team--board .lt__team__in,.lt__inv__in,.lt__join__in{
    gap:32px;padding:20px 0}
  .lt__h2{font-size:30px;line-height:38px}
  .lt__grid{grid-template-columns:repeat(2,1fr);gap:20px}
  .lt__p__name{font-size:18px;line-height:24px}

  /* column-REVERSE: below 1024 upstream puts the copy above the photo */
  .lt__join__card{flex-direction:column-reverse;align-items:center;gap:20px;
    padding:0 0 20px}
  .lt__join__shot{flex:0 0 auto;width:500px;max-width:100%}
  .lt__join__copy{width:100%;padding:24px 20px 20px}

  .lt__cards__in{gap:32px;padding:20px 0 40px}
  .lt__card__h{font-size:24px;line-height:30px}
}

@media(max-width:1023px){
  /* Upstream's investors swiper takes its tablet setting one pixel below the point where
     the people grid drops to two columns -- the grid follows Elementor's tablet
     breakpoint (max-width:1024) and the swiper its own min-width:1024. Two full tiles
     24px apart, dragged rather than paged: upstream gives it no arrows and no dots. */
  .lt__inv__grid{flex-wrap:nowrap;justify-content:flex-start;
    row-gap:normal;column-gap:normal;
    overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}
  .lt__inv__grid::-webkit-scrollbar{display:none}
  .lt__inv__t{flex:0 0 calc((100% - 24px)/2);margin-right:24px;scroll-snap-align:start}
  .lt__inv__t:last-child{margin-right:0}
}

@media(max-width:767px){
  .lt__hero__in,.lt__team__in,.lt__inv__in,.lt__join__in,.lt__cards__in{max-width:none}
  .lt__hero__in,.lt__team__in,.lt__inv__in,.lt__join__in,.lt__cards__in{align-items:flex-start}
  .lt__h1{font-size:36px;line-height:42px}
  .lt__hero__art{align-self:center}
  .lt__hero__art img{width:236px;height:236px}
  .lt__team--board .lt__team__in,.lt__inv__in{gap:36px}
  /* still a row -- it WRAPS, and each card takes the full width */
  .lt__cards__row{flex-wrap:wrap;gap:36px}
  .lt__card{flex:0 0 100%;gap:0;border-radius:12px}
  .lt__cards__in{padding:20px 0 40px}
  .lt__card__h{font-size:30px;line-height:38px}
  .lt__card__p p,.lt__join__p p{font-size:16px;line-height:26px}
  .lt__card__body{padding:0 20px}
  .lt__card__in{gap:20px}
  .lt__join__body{gap:16px}
  .lt__join__shot{width:100%;padding:0 20px}
  .lt__join__copy{gap:20px}
}

@media(max-width:766px){
  /* one investor tile per view */
  .lt__inv__t{flex:0 0 100%;margin-right:24px}
}

@media(max-width:540px){
  .lt__grid{grid-template-columns:1fr}
}


/* ==========================================================================
   product_tours  (.p-pt)  --  final-web/product_tours.html
   --------------------------------------------------------------------------
   Two sections: a hero, and `.br-demo-hub` -- a hand-written component (not the
   usual Elementor widget soup), so the class names here are upstream's own.

   The hub is GATED: `.is-locked` puts a fixed overlay over the whole thing until
   the form is submitted. That is the state the capture is in, so it is the state
   this build renders; site.js unlocks it on submit and remembers the choice, as
   upstream's own inline script does with the `brtr-opn` cookie.

   Its 8 demos come from the `data-config` JSON upstream hangs off the hub -- the
   sidebar buttons carry only `data-item` ids, so reading the DOM alone loses every
   poster, tour URL and duration.

   Container: 1360 wide with 40px sides, dropping to 16px at 767. Not the 1110 the
   rest of the site uses.
   ========================================================================== */
.pt__hero,.pt__hub{padding:0 40px}
.pt__hero__in,.pt__hub__in{width:100%;max-width:1360px;margin-inline:auto}
.pt__hero__in{display:flex;flex-direction:column;gap:20px}
.pt__hero__stack{display:flex;flex-direction:column;gap:8px}
.pt__hero__logo{display:block;width:128px;height:49px;object-fit:contain;border-radius:20px}
.pt__h1{margin:0;font-size:80px;line-height:99px;font-weight:500;color:#000}
.pt__lead{margin:0;font-size:19px;line-height:29px;font-weight:400;color:#002840}
.pt__hub{padding-top:30px;padding-bottom:80px}

/* ---- the hub shell ---- */
.br-demo-hub{position:relative}
.br-demo-hub__layout{display:flex;flex-direction:row;gap:40px;align-items:flex-start}

/* ---- sidebar ---- */
.br-demo-hub__sidebar{flex:0 0 380px}
.br-demo-hub__sidebar-head{display:flex;flex-direction:row;justify-content:space-between;
  align-items:baseline;padding:0 6px 14px}
.br-demo-hub__sidebar-label{font-size:13px;line-height:26px;font-weight:500;color:#002840;
  letter-spacing:1.82px;text-transform:uppercase}
.br-demo-hub__sidebar-count{font-size:12px;line-height:26px;color:#99A9B3}
.br-demo-hub__group-label{padding:6px 6px 10px;font-size:11px;line-height:26px;font-weight:500;
  color:#002840;letter-spacing:1.54px;text-transform:uppercase}
.br-demo-hub__group + .br-demo-hub__group .br-demo-hub__group-label{margin-top:18px}
.br-demo-hub__row{display:flex;flex-direction:row;gap:14px;align-items:center;width:100%;
  margin:0 0 8px;padding:12px;border:0;border-radius:18px;background:transparent;
  font-size:16px;line-height:19.2px;color:#002840;text-align:left;cursor:pointer}
.br-demo-hub__row.is-active{background:#D3E9FD}
.br-demo-hub__row-thumb{position:relative;flex:0 0 140px;width:140px;height:91px;
  border-radius:12px;background:#F2F4F5;overflow:hidden}
.br-demo-hub__row-thumb img{display:block;width:140px;height:91px;object-fit:cover}
.br-demo-hub__row-thumb-icon{position:absolute;right:8px;bottom:8px;
  display:flex;width:28px;height:28px;align-items:center;justify-content:center;
  border-radius:999px;background:#0461C8;color:#fff}
.br-demo-hub__row-thumb-icon svg{display:block;width:14px;height:14px}
.br-demo-hub__row-body{flex:1 1 0;min-width:0}
.br-demo-hub__row-title{display:block;margin:0 0 7px;
  font-size:15px;line-height:18.75px;font-weight:500;color:#002840}
.br-demo-hub__row-badges{display:flex;flex-direction:row;flex-wrap:wrap;gap:7px;align-items:center}
.br-demo-hub__badge{display:flex;flex-direction:row;gap:5px;align-items:center;
  padding:3px 10px;border-radius:999px;font-size:11.5px;line-height:16.1px;font-weight:500;color:#000}
.br-demo-hub__badge--video{background:#0461C8;color:#fff}
.br-demo-hub__badge--tour{border:1px solid #99A9B3}
.br-demo-hub__row-meta{font-size:12px;line-height:14.4px;color:#99A9B3}
.br-demo-hub__sidebar-cta{margin:22px 0 0;padding:16px 30px;border-radius:20px;background:#0461C8}
.br-demo-hub__sidebar-cta-title{margin:0 0 8px;font-size:18px;line-height:26px;font-weight:500;color:#fff}
.br-demo-hub__sidebar-cta-text{margin:0 0 18px;font-size:14px;line-height:20.3px;color:#fff}
.br-demo-hub__btn{display:inline-flex;flex-direction:row;gap:10px;align-items:center;
  padding:13px 26px;border:0;border-radius:999px;
  font-size:15px;line-height:18px;font-weight:500;text-decoration:none;cursor:pointer}
.br-demo-hub__btn--dark{background:#000;color:#fff}
.br-demo-hub__btn--yellow{background:#0461C8;color:#fff}
.br-demo-hub__btn--outline{border:1px solid #555;background:#fff;color:#002840}
.br-demo-hub__btn-icon{display:block;width:16px;height:16px}

/* ---- main stage ---- */
.br-demo-hub__main{flex:1 1 0;min-width:0}
.br-demo-hub__stage{position:relative;aspect-ratio:940/529;border-radius:16px;
  background:#F2F4F5;overflow:hidden}
.br-demo-hub__stage-thumb{position:absolute;inset:0;background-size:cover;background-position:50% 50%}
.br-demo-hub__poster{position:absolute;inset:0;display:flex;flex-direction:row;gap:14px;
  align-items:center;justify-content:center;background:rgba(0,0,0,.55)}
.br-demo-hub__info{padding:100px 2px 0}
.br-demo-hub__info-meta{display:flex;flex-direction:row;gap:10px;align-items:center;margin:0 0 14px}
.br-demo-hub__info-duration{font-size:13px;line-height:26px;color:#99A9B3}
.br-demo-hub__info-title{margin:0 0 12px;font-size:32px;line-height:36.8px;font-weight:500;color:#002840}
.br-demo-hub__info-desc{max-width:720px;margin:0 0 18px;font-size:16px;line-height:24.8px;color:#335366}
.br-demo-hub__info-link-wrap{display:flex;flex-direction:row;gap:12px;align-items:center}
.br-demo-hub__q-icon{display:flex;width:30px;height:30px;align-items:center;justify-content:center;
  border-radius:999px;background:#0461C8;font-size:15px;line-height:26px;font-weight:500;color:#fff}
.br-demo-hub__info-link-wrap a{font-size:15px;line-height:26px;font-weight:500;color:#039ACE;
  text-decoration:none}

/* ---- the gate ---- */
.br-demo-hub__gate{position:fixed;inset:0;z-index:120;
  display:flex;flex-direction:row;align-items:center;justify-content:center;
  padding:150px 24px 40px;background:rgba(0,26,41,.35)}
.br-demo-hub:not(.is-locked) .br-demo-hub__gate{display:none}
.br-demo-hub.is-locked .br-demo-hub__inner{filter:blur(6px);pointer-events:none;user-select:none}
.br-demo-hub__gate-box{display:flex;flex-direction:row;width:1000px;max-width:100%;
  margin:auto;border-radius:24px;background:#fff;overflow:hidden}
.br-demo-hub__gate-left{flex:0 0 560px;padding:52px 48px}
.br-demo-hub__gate-eyebrow{margin:0 0 18px;font-size:12px;line-height:26px;font-weight:500;
  color:#667E8C;letter-spacing:1.68px;text-transform:uppercase}
.br-demo-hub__gate-heading{max-width:420px;margin:0 0 18px;
  font-size:38px;line-height:42.56px;font-weight:500;color:#002840}
.br-demo-hub__gate-text{max-width:400px;margin:0 0 30px;font-size:17px;line-height:25.5px;color:#335366}
.br-demo-hub__gate-trusted{margin:0 0 22px;font-size:14px;line-height:26px;font-weight:500;color:#667E8C}
.br-demo-hub__gate-logos{display:grid;grid-template-columns:repeat(4,1fr);gap:26px 22px;
  align-items:center;max-width:440px;margin:0 0 30px}
.br-demo-hub__gate-logo{display:flex;height:32px;align-items:center}
.br-demo-hub__gate-logo img{display:block;max-width:100%;max-height:32px;object-fit:contain}
.br-demo-hub__gate-g2{display:flex;flex-direction:row;gap:14px;align-items:center;
  max-width:440px;padding:24px 0 0;border-top:1px solid #E5E9EC}
.br-demo-hub__gate-g2-badge{display:block;width:48px;height:48px;object-fit:contain}
.br-demo-hub__gate-g2-body{display:flex;flex-direction:column;gap:2px}
.br-demo-hub__gate-g2-row{display:flex;flex-direction:row;gap:10px;align-items:center;
  font-size:17px;line-height:26px;font-weight:500;color:#002840}
.br-demo-hub__gate-g2-stars{color:#0179F8}
.br-demo-hub__gate-g2-sub{font-size:14.5px;line-height:26px;color:#99A9B3}
.br-demo-hub__gate-form{flex:0 0 440px;display:flex;flex-direction:column;justify-content:center;
  padding:52px 48px}
/* the form is ONE wrapping flex row with an 8px gap, as upstream's is: four fields
   two-up, then the consent block and the submit, each taking their own line */
.br-demo-hub__gate-form form{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}
.br-demo-hub__gate-field{flex:0 0 calc(50% - 4px);min-width:0}
.br-demo-hub__gate-field input{box-sizing:border-box;width:100%;height:48px;padding:10px 16px;
  border:1px solid #CCD4D9;border-radius:16px;background:#fff;
  font:inherit;font-size:16px;line-height:26px;color:#002840}
.br-demo-hub__gate-field input::placeholder{color:#99A9B3}
.br-demo-hub__gate-consentbox{flex:0 0 100%}
/* 12/14, not 16/26: the row's height is max(the 18px checkbox, the wrapped text), which
   is 28 at 1440 where the sentence takes two lines and 18 at 1024 where it takes one.
   At 16/26 it was 34 and the consent block came out 8px tall everywhere. */
.br-demo-hub__gate-consent{display:flex;flex-direction:row;gap:10px;align-items:flex-start;
  margin:0 0 8px;font-size:12px;line-height:14px;color:#002840}
.br-demo-hub__gate-consent input{flex:0 0 18px;width:18px;height:18px;margin:0}
.br-demo-hub__gate-legal{margin:0;font-size:12px;line-height:14px;color:#667E8C}
.br-demo-hub__gate-legal a{color:#667E8C;text-decoration:underline}
.br-demo-hub__gate-submit{flex:0 0 auto;padding:11px 32px;border:0;border-radius:99px;
  background:#0461C8;font-size:16px;line-height:26px;font-weight:500;color:#fff;cursor:pointer}
.br-demo-hub__gate-footnote{margin:16px 0 0;font-size:12.5px;line-height:18.125px;color:#99A9B3}

@media(max-width:1024px){
  .pt__hero__in{gap:20px}
  .pt__h1{font-size:30px;line-height:38px}
  .pt__lead{font-size:18px;line-height:29px}
  /* the sidebar drops BELOW the stage and becomes a two-up grid */
  /* align-items must go back to stretch here: the desktop rule's flex-start sizes the
     stacked columns to their CONTENT, which left the stage 721 wide instead of 944 */
  .br-demo-hub__layout{flex-direction:column-reverse;gap:36px;align-items:stretch}
  .br-demo-hub__sidebar{flex:0 0 auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 16px}
  .br-demo-hub__sidebar-head,.br-demo-hub__group-label,.br-demo-hub__sidebar-cta{grid-column:1/-1}
  .br-demo-hub__group{display:contents}
  .br-demo-hub__row{margin:0 0 4px}
  /* the gap above the second group tightens from 18 to 16 */
  .br-demo-hub__group + .br-demo-hub__group .br-demo-hub__group-label{margin-top:16px}
  .br-demo-hub__sidebar-cta{margin:26px 0 0;padding:34px 28px}
  .br-demo-hub__info-title{font-size:26px;line-height:29.9px}
  .br-demo-hub__gate{padding:150px 24px 40px}
  .br-demo-hub__gate-box{flex-direction:column;width:100%}
  .br-demo-hub__gate-left,.br-demo-hub__gate-form{flex:0 0 auto;padding:32px 28px}
  .br-demo-hub__gate-heading{font-size:28px;line-height:31.36px}
  /* the fields, and the submit with them, go full width here -- at 1024, not 767 --
     and the input grows 2px on a tighter font */
  .br-demo-hub__gate-field,.br-demo-hub__gate-submit{flex:0 0 100%}
  .br-demo-hub__gate-field input{height:50px;padding:14px 16px;border-radius:10px;
    font-size:14px;line-height:20px}
  /* the trusted line and the brand logos go; the G2 rating STAYS */
  .br-demo-hub__gate-trusted,.br-demo-hub__gate-logos{display:none}
  /* with the logos gone the G2 row loses its rule and its lead-in too */
  .br-demo-hub__gate-g2{padding-top:0;border-top:0}
}
@media(max-width:767px){
  .pt__hero,.pt__hub{padding-left:16px;padding-right:16px}
  .pt__hero__logo{width:80px;height:31px}
  /* minmax(0,1fr): a bare 1fr will not shrink below the row's min-content, so the
     single column came out 310 wide inside a 288 container */
  .br-demo-hub__sidebar{grid-template-columns:minmax(0,1fr)}
  .br-demo-hub__stage{border-radius:12px}
  .br-demo-hub__gate{padding:110px 12px 24px}
  .br-demo-hub__gate-box{border-radius:16px}
  .br-demo-hub__gate-left,.br-demo-hub__gate-form{padding:26px 22px}
  .br-demo-hub__gate-heading{font-size:24px;line-height:26.88px}
}

/* ==========================================================================
   news_details  (.p-nd)  --  final-web/news_details.html
   --------------------------------------------------------------------------
   A single-post template: hero (crumb + title + still), the article beside a
   sticky share rail, "More Bloomreach News", and the shared <site-subs> band.

   Its breadcrumb is at the TOP, inside the hero above the title -- NOT in a band
   before the footer, which is what these notes said until it was measured. That
   is why it takes the `rmin` skin: the rank-math trail with no section of its own.

   The related grid reuses .nw__card from news.html verbatim -- same Elementor
   loop-item template, down to the element ids -- but its own column counts: 3
   from 768, 1 below, where the news listing goes 3 / 2 / 1.
   ========================================================================== */
.nd__hero,.nd__body,.nd__rel{display:flex;flex-direction:column;padding:0 15px}
.nd__hero__in,.nd__body__in,.nd__rel__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column}
.nd__hero__in{gap:30px;padding:72px 0}

/* the reading-progress bar: fixed under the header, full viewport width, and its
   fill tracks how much of the ARTICLE has been scrolled past -- not the document.
   At rest it already reads ~10% because the fold is inside the article. */
.nd__prog{position:fixed;top:60px;left:50%;transform:translateX(-50%);
  width:100vw;height:4px;z-index:99;pointer-events:none}
.nd__prog__fill{height:4px;width:0;background:#0461C8}

.nd__hero__row{display:flex;flex-direction:row;gap:30px;align-items:center}
.nd__hero__copy{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:24px}
.nd__h1{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.nd__meta{margin:0;display:flex;flex-direction:row;gap:24px;
  font-size:16px;line-height:26px;color:#99A9B3}
/* the <time> stays INLINE inside its item -- as a direct flex child it blocks out to
   26px where upstream's is a 19px inline run */
.nd__meta__i{display:block}
.nd__hero__shot{flex:1 1 0;min-width:0}
.nd__hero__shot img{display:block;width:100%;height:auto;aspect-ratio:540/432;
  object-fit:cover;border-radius:20px}

.nd__body__in{flex-direction:row;gap:24px;align-items:flex-start}
/* the ASIDE is the fixed column (355) and the article takes what is left -- 731 at
   1440 but 691 at 1100, which a fixed 731 got wrong by 40px in that band */
.nd__art{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:32px}
/* flow-root, and the LAST paragraph keeps its 32px margin: upstream's widget is 32px
   taller than the block inside it, which is that margin contained rather than
   collapsed out. Zeroing it made the article 32px short. */
.nd__post{display:flow-root;gap:32px}
.nd__post p{margin:0 0 32px;font-size:16px;line-height:26px;color:#002840}
.nd__post a{color:#019ACE}
.nd__post strong{font-weight:500}
.nd__cta{display:flex;flex-direction:row;gap:30px;align-items:center;
  justify-content:space-between;padding:32px;background:#F2F4F5;border-radius:32px}
/* the heading takes a fixed width per breakpoint (335 / 250 / 240, upstream's own) and
   the button column takes the rest and right-aligns inside it */
.nd__cta__h{flex:0 1 auto;width:335px;margin:0;
  font-size:30px;line-height:36px;font-weight:500;color:#002840}
.nd__cta__btn{flex:1 0 auto;text-align:right}
/* the 1px border is upstream's and load-bearing for the box: 191x50, not 189x48 */
.nd__cta a{display:inline-block;padding:11px 32px;border:1px solid transparent;
  border-radius:99px;
  background:#019ACE;color:#fff;font-size:16px;line-height:26px;font-weight:500;
  text-decoration:none}

.nd__aside{flex:0 0 355px;position:sticky;top:80px;
  display:flex;flex-direction:column;gap:24px;align-items:center}
.nd__aside__in{width:320px;display:flex;flex-direction:column;gap:16px;padding:16px 0}
.nd__share__h{margin:0;font-size:20px;line-height:29px;font-weight:500;color:#002840}
.nd__share{display:flex;flex-direction:row;gap:30px;align-items:center}
/* inline-block, not flex: upstream's share grid is 33px tall, not 28, because the
   28px items sit on a text baseline and the line box adds the descender space. A flex
   row would be exactly 28 and five pixels short. */
/* font-size stays 16 here. With font-size:0 the strut has 13px of half-leading below
   the baseline and the line box comes out 41 instead of 33 -- the descent of a real
   16/26 strut is what makes upstream's row 5px taller than its 28px icons. The anchors
   are emitted with no whitespace between them, so the width is still 3x28 + 2x24. */
/* The row is 33px tall around 28px icons because upstream's icons are inline-blocks on
   a text baseline and the strut's descent adds ~5px. Reproducing that by matching font
   metrics is fragile -- font-size:0 gave 41, 16/26 gave 36 -- so the line box is pinned
   at the measured 33 and the icons are centred in it. That is the source's rendered box,
   stated rather than re-derived. */
.nd__share__net{display:inline-block;font-size:16px;line-height:33px}
/* out-specify the .nd__share a { display:flex } below, which otherwise stacks these */
.nd__share .nd__share__net a{display:inline-block;vertical-align:middle;margin-right:24px}
.nd__share .nd__share__net a:last-child{margin-right:0}
.nd__share a{display:flex;width:28px;height:28px;align-items:center;justify-content:center;
  color:#002840}
.nd__share a.nd__share__copy{position:relative;color:#019ACE}
/* upstream's tooltip: yellow, 12/14 at 500, 6px radius, shown after a copy */
.nd__share__copy::after{content:'Copied!';position:absolute;left:100%;top:50%;
  transform:translateY(-50%);margin-left:8px;padding:6px 12px;border-radius:6px;
  background:#0461C8;color:#fff;font-size:12px;line-height:14px;font-weight:500;
  white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s}
.nd__share__copy.is-copied::after{opacity:1}
.nd__share svg{display:block;width:28px;height:28px;fill:currentColor}

.nd__rel__in{gap:40px;padding:72px 0}
.nd__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
/* grid-auto-rows:1fr -- upstream's rows are all the height of the tallest card, which
   only shows once the grid stacks and a short card sits in its own row */
.nd__rel__grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:0 30px}

@media(max-width:1024px){
  .nd__hero,.nd__body,.nd__rel{padding:0 16px}
  .nd__hero__in,.nd__body__in,.nd__rel__in{max-width:768px}
  .nd__hero__in{gap:32px;padding:24px 0 32px}
  .nd__hero__row{flex-direction:column;gap:32px;align-items:flex-start}
  .nd__hero__copy,.nd__hero__shot{flex:0 0 auto;width:100%}
  .nd__h1,.nd__h2{font-size:30px;line-height:38px}
  /* the share rail moves ABOVE the article here -- column-reverse, not a reorder */
  .nd__body__in{flex-direction:column-reverse;gap:24px}
  .nd__art{flex:0 0 auto;width:100%}
  .nd__aside{flex:0 0 auto;position:static;width:100%;gap:32px;align-items:flex-start}
  .nd__aside__in{width:100%;padding:4px 0}
  .nd__cta{border-radius:20px}
  .nd__cta__h{width:250px;font-size:22px;line-height:28px}
  .nd__share__h{font-size:18px}
  .nd__rel__in{padding:52px 0}
  .nd__rel__grid{gap:16px}
}
@media(max-width:767px){
  .nd__hero__in,.nd__body__in,.nd__rel__in{max-width:min(100%,767px)}
  /* the button drops to its own full-width row here */
  .nd__cta{flex-wrap:wrap;gap:20px;padding:20px}
  .nd__cta__h{width:240px}
  .nd__cta__btn{flex:1 0 100%;text-align:left}
  .nd__cta a{display:block}
  .nd__rel__grid{grid-template-columns:1fr}
}

/* ==========================================================================
   news  (.p-nw)  --  final-web/news.html
   --------------------------------------------------------------------------
   Two sections: the listing, and the shared <site-subs> band. No breadcrumb --
   `rank-math-breadcrumb` appears in this page's <style> but never in its DOM
   (measured with tools/crumb_scan.mjs, not grepped).

   The grid is Elementor's loop grid: 3 columns from 1025, 2 at 1024, 1 at and
   below 767, with the column/row gaps changing at 1024 as well. The card art
   is aspect-ratio 350/232 and object-fit:cover at every width, which is what
   keeps the shot 232 / 244 / 487 / 237 as the column narrows.
   ========================================================================== */
.nw__list,.nw__subs{display:flex;flex-direction:column;padding:0 15px}
.nw__subs{padding-bottom:72px}
.nw__list__in{width:100%;max-width:1110px;margin-inline:auto;
  display:flex;flex-direction:column;gap:40px;padding:72px 0 80px}
.nw__head{display:flex;flex-direction:column;gap:4px;padding:5px 0}
.nw__kicker{margin:0;font-size:16px;line-height:26px;font-weight:400;color:#002840}
.nw__h1{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
/* two levels, as upstream has: the wrapper carries the section's 40px gap (inert on a
   single child, and nw_geo re-proves that) and the grid inside it does the columns */
.nw__gridwrap{display:block;gap:40px}   /* upstream's wrapper is a block; the gap is inert on both */
.nw__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:80px 30px}
.nw__item{display:flex}
.nw__card{display:flex;flex-direction:column;gap:16px;width:100%}
.nw__card__shot{border-radius:20px}
.nw__card__shot a{display:flex}
.nw__card__shot img{display:block;width:100%;height:auto;aspect-ratio:350/232;
  object-fit:cover;border-radius:20px}
.nw__card__body{display:flex;flex-direction:column;gap:12px}
.nw__card__date{margin:0;font-size:14px;line-height:20px;font-weight:500;color:#99A9B3}
.nw__card__h{margin:0;font-size:22px;line-height:28px;font-weight:500}
.nw__card__h a{color:#002840;text-decoration:none}
.nw__card__more{margin:0;font-size:16px;line-height:26px}
.nw__card__more a{color:#019ACE}

@media(max-width:1024px){
  .nw__list,.nw__subs{padding:0 16px}
  .nw__subs{padding-bottom:72px}
  .nw__list__in{max-width:768px;padding:32px 0 40px}
  .nw__h1{font-size:30px;line-height:38px}
  .nw__grid{grid-template-columns:repeat(2,1fr);gap:40px 32px}
  /* the radius swaps here: the WIDGET takes 12 and the image keeps 20 */
  .nw__card__shot{border-radius:12px}
  .nw__card__h{font-size:18px;line-height:24px}
}
@media(max-width:767px){
  .nw__list__in{max-width:min(100%,767px)}
  .nw__grid{grid-template-columns:1fr}
}

/* ==========================================================================
   experiments-ab-testing  (.p-ab)  --  final-web/experiments-ab-testing.html
   --------------------------------------------------------------------------
   Eleven sections. Measured with tools/ab_bp.mjs at a fresh load per width.

   Three sections deliberately break the page's own shell rhythm, and all three
   are upstream's doing, not a slip here:
     .pp__evo   keeps padding:0 15px and takes NO max-width below 1024
     .pp__cta   loses its side padding entirely at and below 767
     .pp__channels goes column-REVERSE below 1024, so the video climbs above the cards

   Icons: upstream draws these three ways -- an inline SVG, an icomoon glyph and a
   FontAwesome glyph. Neither webfont is inside the saved capture (its @font-face points
   at a path outside the folder), so both glyph sets render as tofu THERE. The real font
   files answer on bloomreach.com, so they are loaded by name below and the glyphs paint
   as they do in production. This changes no geometry: every glyph sits inside a fixed
   32px or 48px box, and the box is what the layout measures.
   ========================================================================== */
/* The two icon fonts are served LOCALLY from static/font/ (moved out of pp-art/ 2026-09-15,
   where they sat beside page art), unlike every image on these pages, which is
   pulled from bloomreach.com. Fonts are CORS-restricted: a cross-origin @font-face from a
   file:// document is refused, `document.fonts` reports the family `unloaded`, and every
   glyph box measures 0x0 -- the yellow pucks render empty with no error anywhere. Images
   have no such restriction, which is why the same trick works for them and not here. */
@font-face{font-family:'icomoon';font-display:block;font-weight:400;font-style:normal;
  src:url("/static/font/icomoon.woff") format("woff")}
@font-face{font-family:'Font Awesome 5 Free';font-display:block;font-weight:400;font-style:normal;
  src:url("/static/font/fa-regular-400.woff2") format("woff2")}
.pp__ico [class*=" icon-"]{font-family:'icomoon'!important;font-style:normal;
  font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}
.pp__ico .far{font-family:'Font Awesome 5 Free';font-weight:400;font-style:normal;line-height:1}
/* The codepoints. Declaring the family is not enough: without a `content` the <i> has
   nothing to render, measures 0x0, and the browser never requests the font at all --
   `document.fonts` sits at `unloaded` and the pucks come out empty with no error. Read
   out of the saved page's own style.css / fontawesome.min.css. */
.pp__ico .icon-synchronize-arrows-1:before{content:"\f6eb"}
.pp__ico .icon-monitor-graph:before{content:"\f0f9"}
.pp__ico .icon-ui-webpage-check:before{content:"\f784"}
.pp__ico .icon-multiple-man-woman-1-1:before{content:"\f1a8"}
.pp__ico .icon-email-action-unread:before{content:"\ed4c"}
.pp__ico .icon-phone-type:before{content:"\f30e"}
.pp__ico .icon-ui-webpage-slider:before{content:"\f788"}
.pp__ico .icon-browser-page-layout:before{content:"\ea8f"}
.pp__ico .icon-mobile-phone:before{content:"\f0c0"}
.pp__ico .icon-light-mode-flash-on:before{content:"\efda"}
.pp__ico .icon-hierarchy-9:before{content:"\eedb"}
.pp__ico .fa-chart-bar:before{content:"\f080"}
.pp__ico .icon-layout-6:before{content:"\efb3"}
.pp__ico .icon-mobile-qr-code:before{content:"\f0c1"}
.pp__ico .icon-single-man-time:before{content:"\f4fd"}
.pp__ico .icon-messages-bubble-double:before{content:"\f057"}
.pp__ico .icon-award-badge-3:before{content:"\ea30"}
.pp__ico .icon-messages-people-user-heart:before{content:"\f09f"}   /* control-trust: Team Approval */
/* mobile-messaging's four */
.pp__ico .icon-messages-bubble-square-image:before{content:"\f076"}
.pp__ico .icon-database:before{content:"\ec7b"}
.pp__ico .icon-app-window-layout-1:before{content:"\e943"}
.pp__ico .icon-single-neutral-actions-mobilephone-1:before{content:"\f533"}

.pp__hero,.pp__channels,.pp__features,.pp__names,.pp__pow,.pp__evo,
.pp__uc,.pp__blogs,.pp__rel,.pp__cs,.pp__faq,.pp__cta{display:flex;flex-direction:column;padding:0 15px}
/* overflow:hidden is upstream's, and it is load-bearing: the two patterns hang 123px
   outside each edge, so without it the page scrolls sideways at 1200 and 1300. */
.pp__hero{position:relative;overflow:hidden}
.pp__hero__in,.pp__channels__in,.pp__features__in,.pp__names__in,.pp__pow__in,.pp__evo__in,
.pp__uc__in,.pp__blogs__in,.pp__rel__in,.pp__cs__in,.pp__faq__in,.pp__cta__in{
  width:100%;max-width:1110px;margin-inline:auto;display:flex;flex-direction:column}

/* shared type */
.pp__h1{margin:0;font-size:60px;line-height:72px;font-weight:500;color:#002840;text-align:center}
.pp__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#002840}
.pp__h3{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#002840}
.pp__kicker{margin:0;font-size:20px;line-height:29px;font-weight:400;color:#667E8C}
.pp__eyebrow{margin:0;font-size:24px;line-height:30px;font-weight:500;color:#8873FF;text-align:center}

/* the yellow icon puck. 32px in a row card, 48px in a tile -- both fixed, so the glyph
   inside never moves the copy beside it */
.pp__ico{display:flex;align-items:center;justify-content:center;flex:0 0 auto;
  border-radius:50%;background:#0461C8;color:#fff}
.pp__ico--sm{width:32px;height:32px;font-size:16px}
.pp__ico--lg{width:48px;height:48px;font-size:24px}
.pp__ico svg{display:block;width:16px;height:16px}
/* an inline svg glyph takes the puck's ink like the font glyphs do. The saved svgs carry
   fill="#002840", navy, drawn for the yellow puck upstream; on the themed blue puck that was
   invisible — on experiments-ab-testing's first card as well as control-trust's. Strokes
   and fill="none" are left alone. */
.pp__ico svg [fill]:not([fill="none"]){fill:currentColor}
.pp__ico--lg svg{width:24px;height:24px}   /* a large puck with an inline svg (the Experiments tile) draws it at the glyph size */

/* Upstream keeps BOTH of these invisible at rest and reveals them on hover -- the corner
   arrow scales up from 0 and the Learn More row fades in. A geometry sweep cannot see
   either: opacity and transform leave every box exactly where it was, which is why
   ab_geo read clean with both painted permanently on. ab_behave asserts them now. */
/* align-self is load-bearing: in a column flex parent an inline-flex child still
   stretches, so without it the row is the card's full width instead of its own
   152/138px. opacity:0 hid that from every sweep until mobile-app-marketing. */
.pp__link{display:inline-flex;align-self:flex-start;align-items:center;gap:0;
  font-size:16px;line-height:26px;font-weight:500;color:#019ACE;
  opacity:0;transition:opacity .4s}
.pp__pbox:hover .pp__link,.pp__stat:hover .pp__link{opacity:1}
.pp__link__mark{display:flex;width:24px;height:24px}
.pp__link__mark svg{width:25px;height:24px}
.pp__pbox__mark svg,.pp__stat__mark svg{display:block;width:auto;height:24px;
  transform:scale(0);transition:transform .4s}
.pp__pbox:hover .pp__pbox__mark svg,.pp__stat:hover .pp__stat__mark svg{transform:scale(1)}

.pp__vid{display:block;width:100%;height:auto;border-radius:20px}

/* ---- 1  hero ---- */
.pp__hero__in{position:relative;padding:100px 0 50px;gap:0}
/* Upstream's pattern rail is a zero-height relative box at the top of the inner, and the
   two images hang 123px OUTSIDE each edge, 60px down. The right one is its own artwork,
   not a mirrored copy of the left.
   The 123 is worth spelling out: upstream's absolute WRAPPER sits at left:-40px, and the
   <img> inside it paints a further 83px outward again. Measuring the wrapper -- which is
   what every element sweep here reaches first -- gives -40 and puts the art 83px too far
   in. Only the pixel diff saw it; the DOM box and the painted artwork genuinely disagree
   on that page. Verified against the IMG's own rect at 1920/1600/1440/1300/1200/1100/1025. */
.pp__hero__art{position:relative;height:0;pointer-events:none}
.pp__hero__art img{position:absolute;display:block;width:166px;height:159px;top:60px}
.pp__hero__art--l{left:-123px}
.pp__hero__art--r{right:-123px}
.pp__hero__copy{width:100%;max-width:900px;margin-inline:auto;
  display:flex;flex-direction:column;gap:40px;align-items:center}
.pp__hero__stack{width:100%;display:flex;flex-direction:column;gap:24px}
.pp__hero__title{display:flex;flex-direction:column;gap:8px}
.pp__hero__lead{margin:0;font-size:24px;line-height:34px;color:#335366;text-align:center}

/* ---- 2  channel cards + video ---- */
.pp__channels__in{flex-direction:row;gap:30px;justify-content:space-between;padding:50px 0}
.pp__channels__list{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.pp__channels__media{flex:1 1 0;min-width:0}
.pp__pbox{display:flex;text-decoration:none;color:inherit;background:#F2F4F5;border-radius:20px}
.pp__pbox--row{flex-direction:row;gap:24px;align-items:flex-start;padding:16px 8px}
.pp__pbox__body{display:flex;flex-direction:column;gap:16px}
.pp__pbox--row .pp__pbox__h{margin:0;font-size:24px;line-height:34px;font-weight:500;
  color:#002840;padding:0 40px 0 0}
.pp__pbox--row .pp__pbox__p{margin:0;font-size:16px;line-height:26px;color:#335366}

/* ---- 3  product features ---- */
.pp__features__in{gap:100px;padding:50px 0}
.pp__features__rows{display:flex;flex-direction:column;gap:100px}
.pp__feat{display:flex;flex-direction:row;gap:40px;align-items:center}
.pp__feat--rev{flex-direction:row-reverse}
.pp__feat__media{flex:1 1 0;min-width:0}
.pp__feat__video{display:block;width:100%;height:auto;border-radius:20px}
.pp__feat__copy{flex:0 0 50%;display:flex;flex-direction:column;gap:16px;
  align-items:flex-start;padding:32px}
/* A row whose media is an IMAGE widget rather than a container: upstream gives BOTH
   children width:50% (the widget's own, not a container flex), so the pair overflows
   the inner by exactly the 40px gap and shrinks back into it -- 536.2/533.8 at 1440,
   not the 555/515 a flex:1 media produces. Copied as declarations, not as numbers. */
.pp__feat--w50 .pp__feat__copy{flex:0 1 auto;width:50%}
.pp__feat--w50 .pp__feat__media{flex:0 1 auto;width:50%;max-width:50%}
.pp__feat__h{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#002840}
/* A feature row's copy can be more than one paragraph -- mobile-messaging's WhatsApp
   row ends with a link on its own line -- so the block is styled whether it is a <p>
   or a wrapper holding several. Upstream stacks them with no margin between. */
.pp__feat__p{margin:0;font-size:16px;line-height:26px;color:#002840}
.pp__feat__p p{margin:0}
.pp__feat__p a{color:#019ACE}

/* ---- 4  we help big names ---- */
.pp__names__in{gap:30px;padding:50px 0}
.pp__names__panel{display:flex;flex-direction:column;gap:40px;align-items:center;
  padding:30px 40px;background:#E6F3FE;border-radius:32px}
.pp__names__grid{display:flex;flex-direction:row;flex-wrap:wrap;gap:30px}
.pp__stat{position:relative;flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:32px;
  padding:16px 24px;border-radius:20px;text-decoration:none;color:#019ACE;
  background:rgba(255,255,255,0)}
/* upstream's counter widget: column-REVERSE, so the title sits first in the DOM and the
   number paints above it, and the empty prefix + the suffix are flex:1 spacers */
.pp__stat__count{display:flex;flex-direction:column-reverse;gap:0;justify-content:center}
.pp__stat__fig{display:flex;font-size:60px;line-height:72px;font-weight:500;color:#002840}
.pp__names__grid{width:100%}
/* Three counter cards instead of two: upstream sizes them calc(33.33% - 20px) from
   768 up and lets them stack below. experiments-ab-testing's pair keeps its own. */
.pp__stat--3up{flex:0 0 calc(33.33% - 20px)}
/* basis auto, not 0: upstream's spacers grow from their OWN content, so the '%' costs
   the prefix its 51.6px and the figure sits left of the box's centre (182.2/36/233.8,
   not 208/36/208). With basis 0 the number was ~26px right of upstream's. Only the
   pixel diff could see it -- every box in the row is the same size either way. */
.pp__stat__pre,.pp__stat__suf{flex:1 1 auto}
.pp__stat__n{text-align:center}   /* a figure that wraps (control-trust's "On demand") centres its lines; one-line numbers are unaffected */
/* A figure WITH a prefix ("+71%", "-30%"): upstream's pre/suf are spacers that grow from their
   own content, so a prefix with text sat at the card's left edge, detached from its number.
   With content in the prefix the three parts hug and centre as one unit; the empty-prefix
   figures on every other page keep upstream's spacer geometry. */
.pp__stat__fig:has(.pp__stat__pre:not(:empty)){justify-content:center}
.pp__stat__fig:has(.pp__stat__pre:not(:empty)) > *{flex:0 0 auto}
/* text-align as well as justify-content: centring the flex line only centres a
   SINGLE line. experiments-ab-testing's labels are one line each, so this read clean
   there; mobile-app-marketing's wrap to two and both ran ragged-left. */
.pp__stat__label{display:flex;align-items:center;justify-content:center;text-align:center;
  font-size:18px;line-height:29px;color:#002840}
.pp__stat__mark{position:absolute;top:16px;right:16px;width:24px;height:24px}
/* flex:1 0 auto -- upstream's foot ABSORBS the card's leftover height (grow 1,
   shrink 0) on every product page. It only shows when the cards are stretched to a
   common height, which is why the flat grids read clean without it and the rail did
   not. The distribution inside is per-card Elementor config: notino and mayborn use
   space-around, the rest space-between. */
.pp__stat__foot{display:flex;flex:1 0 auto;flex-direction:column;gap:4px;
  justify-content:space-between}
.pp__stat__foot--around{justify-content:space-around}
.pp__stat__logo{display:flex;gap:4px;justify-content:center;align-items:center}
/* No height here: upstream lets the logo keep its own width/height ratio and caps it
   per page (experiments-ab-testing at 260px, mobile-app-marketing not at all). The
   108px that used to live here was ab's rendered number, not a shared rule. */
.pp__stat__logo img{display:block;width:auto;height:auto;max-width:100%}
/* The two pages cap this differently, and it is NOT one rule with two numbers:
   experiments-ab-testing caps the IMG at a bare 260px, which out-specifies Elementor's
   own max-width:100% -- so its logo genuinely overflows a narrower card (260px inside
   a 200px box at 320, measured on the source). mobile-messaging caps a 250px WRAPPER
   instead and the image fills it, so there the cap does combine with the container.
   Writing min(100%, ...) for both looked like a tidy generalisation and broke ab at
   320 by 25px. */
.p-ab .pp__stat__logo img{max-width:260px}
/* control-trust (.p-ct): the same pp__ template, two content-driven differences. Upstream's two
   columns are flex:0 1 auto, so a 768px image in the media column resolves to 453/627 where
   ab's 1000px video and mobile-app-marketing's 540px image both resolve to 540/540 (which is
   what the 1:1 split above reproduces). And the pow shot is the full 648px column, a video,
   where ab's is a 525px image. Above the tablet breakpoint only; below it the shared
   column-reverse rules apply unchanged. */
@media(min-width:1025px){
  .p-ct .pp__channels__list{flex:0 1 auto;width:453px}
  .p-ct .pp__channels__media{flex:0 1 auto;width:627px}}
.p-ct .pp__pow__shot{width:100%}
.p-mms .pp__stat__logo img{max-width:min(100%,250px)}

/* ---- the stats rail ----
   mobile-messaging puts the counter cards in a looping carousel where
   mobile-app-marketing lays the same cards out flat. Read off upstream's Swiper:
   slidesPerView 3 from 1024, 2 from 767, 1 below; spaceBetween 30; loop; autoplay
   5000ms; speed 500ms. The per-view steps are at 1024 and 767 as MIN-widths, so the
   breakpoints below are 1023 and 766 -- one pixel off this page's usual ladder, and
   deliberately: at exactly 1024 upstream still shows three.
   The slides carry margin-right rather than a track gap, as upstream's do, so the
   track's own width matches too. */
/* Two levels, as upstream has: the RAIL is a plain block that carries the 40px gap
   (inert on a block, but it is what the source computes), and the ROW inside it is the
   flex line holding the view, the dots and the arrows. width:100% is load-bearing --
   the panel centres its children, so without it the rail sizes to the track's content
   and comes out 2144px wide. */
.pp__names__rail{position:relative;width:100%;gap:40px}
.pp__names__row{display:flex;flex-wrap:wrap;justify-content:flex-end;
  row-gap:40px;column-gap:0}
.pp__names__view{width:100%;overflow:hidden;padding:0 0 16px}
.pp__names__track{display:flex;flex-direction:row;will-change:transform}
.pp__names__track.is-anim{transition:transform .5s}
.pp__names__track .pp__names__slide{flex:0 0 calc((100% - 60px)/3);margin-right:30px}
.pp__names__dots{position:absolute;left:50%;bottom:4px;transform:translateX(-50%);
  display:flex;flex-direction:row;gap:8px;align-items:center;height:36px}
.pp__names__dot{width:6px;height:6px;padding:0;border:0;border-radius:50%;
  background:#CCD4D9;cursor:pointer}
.pp__names__dot.is-on{background:#002840}
.pp__names__arw{display:flex;align-items:center;justify-content:center;
  width:41px;height:41px;padding:8px;border:0;border-radius:50%;
  background:#019ACE;color:rgba(238,238,238,.9);cursor:pointer}
.pp__names__arw--prev{margin-right:12px}
.pp__names__arw svg{display:block;width:25px;height:25px}

/* ---- 5  powerful experimentation ---- */
.pp__pow__in{flex-direction:row;gap:30px;align-items:flex-start;padding:50px 0}
.pp__pow__l{flex:60 1 0;min-width:0;display:flex;flex-direction:column;gap:40px}
.pp__pow__shot{width:525px;max-width:100%}
.pp__pow__shot img,.pp__pow__shot video{display:block;width:100%;height:auto;border-radius:20px}
.pp__pow__r{flex:40 1 0;min-width:0;display:flex;flex-direction:column;gap:32px}
.pp__pt{display:flex;flex-direction:row;gap:24px;align-items:flex-start}
.pp__pt__body{display:flex;flex-direction:column;gap:8px}
.pp__pt__h{margin:0;font-size:24px;line-height:30px;font-weight:500;color:#002840}
.pp__pt__p{margin:0;font-size:18px;line-height:29px;color:#335366}
.pp__pt__p a{color:#019ACE;text-decoration:underline}   /* inline links in a point (control-trust); upstream #019ACE underlined */
.pp__pt__p a:hover{text-decoration:none}

/* ---- 6  the next evolution ---- */
.pp__evo__in{flex-direction:row;gap:60px;align-items:center;padding:50px 0 80px}
.pp__evo__copy{flex:46 1 0;min-width:0;display:flex;flex-direction:column;gap:30px}
.pp__evo__p{margin:0;font-size:18px;line-height:29px;color:#002840}
.pp__evo__link{margin:0;font-size:18px;line-height:29px}
.pp__evo__link a{color:#019ACE;text-decoration:none}
.pp__evo__media{flex:54 1 0;min-width:0}

/* ---- 7  current trends ---- */
.pp__blogs__in{gap:40px;padding:0}
.pp__blogs__head{display:flex;flex-direction:column;gap:4px;padding:5px 0}
.pp__blogs__cta{align-self:center}
.pp__blogs__grid{display:flex;flex-direction:row;gap:30px}
.pp__bcard{flex:1 1 0;display:flex;flex-direction:column;gap:16px;
  border-radius:20px 20px 0 0}
/* the ratio comes from each page's own <img width height>, not from a rule here */
.pp__bcard__shot img{display:block;width:100%;height:auto;border-radius:20px}
.pp__bcard__body{display:flex;flex-direction:column;gap:12px}
.pp__bcard__tags{margin:0;display:flex;flex-direction:row;gap:8px;justify-content:flex-start;align-items:flex-start}
/* Upstream's tag is a dark PILL, not a text run -- 12/14 at 500, white on #002840,
   3px 8px, fully rounded. It read as plain text here on experiments-ab-testing too;
   the box is 20px tall either way, which is why no geometry pair saw it. */
.pp__tag{display:flex;align-items:center;padding:3px 8px;border-radius:99px;
  background:#002840;color:#fff;font-size:12px;line-height:14px;font-weight:500}
.pp__bcard__h{margin:0;font-size:22px;line-height:28px;font-weight:500}
.pp__bcard__h a{color:#002840;text-decoration:none}
.pp__bcard__more{margin:0;font-size:16px;line-height:26px}
.pp__bcard__more a{color:#019ACE;text-decoration:none}

/* ---- 8  explore related products, and the identical use-case grid ----
   .pp__uc is the same upstream widget with a grey tile skin and one centred pill
   instead of a pill row, so it joins these rules rather than copying them. */
.pp__rel__in,.pp__uc__in{gap:40px;padding:50px 0}
.pp__rel__head,.pp__uc__head{display:flex;flex-direction:column;gap:4px}
.pp__rel__grid,.pp__uc__grid{display:flex;flex-direction:row;flex-wrap:wrap;gap:30px}
.pp__uc__cta{align-self:center}
.pp__pbox--tile{position:relative;flex:0 0 calc((100% - 60px)/3);flex-direction:column;gap:16px;
  padding:32px;background:#F2FAFC}
.pp__pbox__head{display:flex;flex-direction:row;gap:16px;align-items:center;
  justify-content:space-between}
.pp__pbox--tile .pp__pbox__h{margin:0;flex:1 1 auto;font-size:22px;line-height:28px;
  font-weight:500;color:#002840;padding:0 40px 0 0}
.pp__pbox--tile .pp__pbox__p{margin:0;font-size:18px;line-height:29px;color:#002840}
.pp__pbox__mark{position:absolute;top:16px;right:16px;width:24px;height:24px}
/* the grey tile skin: the same tile, #F2F4F5 instead of #F2FAFC. It has to come
   after .pp__pbox--tile, which sets the blue. */
.pp__pbox--tile.pp__pbox--grey{background:#F2F4F5}
/* the grey tile's body copy is 16/26, where the blue tile's is 18/29 */
.pp__pbox--tile.pp__pbox--grey .pp__pbox__p{font-size:16px;line-height:26px}
.pp__rel__pills{display:flex;flex-direction:row;gap:12px;flex-wrap:wrap}

/* ---- customer story (mobile-app-marketing) ----
   Upstream is a one-slide Elementor loop carousel around a Vidyard player. The two
   column widths are copied as upstream's own calc()s rather than as the numbers they
   resolve to: 50% of the slide, plus/minus the same 15/16/48 the source writes.
   The player: Vidyard's script never runs under file://, so the saved page shows an
   empty 453x408 box; the poster below is the source's OWN <noscript> fallback URL. The
   play mark is NOT in the capture -- it is sized off the live page and is a deliberate
   divergence, see SESSION_NOTES. It is an overlay, so it moves no box. */
.pp__cs__in{gap:30px;padding:50px 0}
.pp__cs__rail{padding:0 0 16px}   /* upstream's swiper pads under the slide */
.pp__cs__slide{display:flex;flex-direction:row;gap:30px;align-items:center;background:#fff}
.pp__cs__media{position:relative;width:calc(50% - 15px + 16px + 48px);align-self:center;
  display:flex;flex-direction:column;align-items:flex-end;gap:30px;
  overflow:hidden;border-radius:20px;background:#F2F4F5}
.pp__cs__play{display:block;width:75%;max-width:75%}
.pp__cs__play img{display:block;width:100%;height:auto;aspect-ratio:10/9;object-fit:cover}
/* The mark hangs off the MEDIA box, not the link -- upstream's player box has exactly
   one child and mam_geo only excuses its inherited gap while that stays true. The video
   is 75% wide and right-aligned, so its centre is 37.5% in from the right edge. */
.pp__cs__play__mark{position:absolute;top:50%;right:37.5%;width:60px;height:60px;
  transform:translate(50%,-50%);pointer-events:none}
.pp__cs__play__mark svg{display:block;width:100%;height:100%}
.pp__cs__copy{width:calc(50% - 15px - 16px - 48px);display:flex;flex-direction:column;gap:32px}
.pp__cs__quote{margin:0;font-size:24px;line-height:34px;font-weight:500;color:#002840}
.pp__cs__person{display:flex;flex-direction:row;gap:24px;align-items:center}
.pp__cs__who{display:flex;flex-direction:column;gap:0}
.pp__cs__name{font-size:14px;line-height:20px;font-weight:500;color:#019ACE}
.pp__cs__role{font-size:14px;line-height:20px;font-weight:400;color:#667E8C}
.pp__cs__logo{padding:0 0 0 24px;border-left:1px solid #E5E9EC}
.pp__cs__logo img{display:block;width:auto;height:40px}
.pp__cs__cta{align-self:flex-start;display:flex;flex-direction:row;gap:32px;
  align-items:flex-start;padding:12px 16px;border-radius:20px;background:#E5E9EC;
  text-decoration:none}
.pp__cs__cta__t{font-size:16px;line-height:26px;font-weight:500;color:#019ACE;
  text-decoration:underline}
.pp__cs__cta__i{flex:1 0 auto;display:flex;width:24px;max-width:24px;height:24px;
  align-items:center;justify-content:center;border-radius:50%;background:#019ACE}
.pp__cs__cta__i svg{display:block;width:16px;height:16px}

/* ---- 9  faq ---- */
.pp__faq__in{gap:60px;padding:50px 0}
.pp__faq__in .pp__h2{max-width:730px}
.pp__faq__list{display:flex;flex-direction:column;gap:10px}
.pp__faq__item{display:flex;flex-direction:column;background:rgba(0,0,0,0);
  border:1px solid #E4E8EA;border-radius:16px}
.pp__faq__item summary{display:flex;flex-direction:row;gap:30px;align-items:center;
  justify-content:space-between;padding:10px 10px 10px 16px;cursor:pointer;
  list-style:none;font-size:16px;line-height:26px}
.pp__faq__item summary::-webkit-details-marker{display:none}
/* upstream's chevron paints 16x15 inside the 48px hit box */
.pp__faq__mark svg{display:block;width:16px;height:15px}
/* 500, not 400: upstream carries the weight on .e-n-accordion-item-title-TEXT, one
   level below the header span both gates were reading, so the type pair compared
   400 against 400 and the questions rendered a weight light on every page. */
/* The colour is STATE-dependent: a shut question is #002840, the open one #1F2124.
   Both gates only ever read item 0, which is the open one, so a flat #1F2124 matched
   there and every shut question on every page rendered the wrong colour. */
.pp__faq__qt{font-weight:500;color:#002840}
.pp__faq__item[open] .pp__faq__qt{color:#1F2124}
/* flex:0 0 48px, not just width -- the chevron shrank to 24px at 320 and handed the
   question 23px it does not have, so the trail wrapped one line short */
.pp__faq__mark{display:flex;flex:0 0 48px;width:48px;height:48px;box-sizing:border-box;
  align-items:center;justify-content:center;border-radius:50%;transition:transform .3s}
/* Upstream rings the chevron while the item is SHUT and drops the ring once it opens:
   1px #E5E9EC on a 48px circle. Missing here on every page until the mobile-app-marketing
   pixel diff; a bare chevron and a ringed one occupy the same 48px box, so no geometry
   pair could ever have caught it. */
.pp__faq__item:not([open]) .pp__faq__mark{border:1px solid #E5E9EC}
.pp__faq__item[open] .pp__faq__mark{transform:rotate(180deg)}
.pp__faq__a{padding:16px 16px 32px;font-size:16px;line-height:26px;color:#002840}
.pp__faq__a p{margin:0 0 16px}
.pp__faq__a p:last-child{margin:0}

/* ---- 10  closing cta ---- */
.pp__cta__in{gap:30px;padding:50px 0 100px}
.pp__cta__card{display:flex;flex-direction:row;gap:32px;
  background:#E5F5FA;border-radius:32px}
/* box-sizing matters here: with a 0 flex-basis and content-box, the 32px side padding is
   added OUTSIDE the grown share, so a 60/40 split rendered 672/406 instead of 648/430. */
/* 60/40 of the card's free space, written as a calc rather than flex-grow: with grow the
   copy's own min-content width won the negotiation and it came out 672 against upstream's
   648. Verified against 648/430 at 1440 and 624/414 at 1100. */
.pp__cta__copy{flex:0 0 calc((100% - 32px) * 0.6);min-width:0;box-sizing:border-box;
  display:flex;flex-direction:column;gap:40px;padding:64px 32px}
.pp__cta__p{margin:0;font-size:18px;line-height:29px;color:#002840}
.pp__cta__btns{display:flex;flex-direction:row;gap:12px;align-items:center;flex-wrap:wrap}
.pp__cta__shot{flex:1 1 0;min-width:0}
.pp__cta__shot img{display:block;width:100%;height:100%;object-fit:cover;border-radius:20px}

/* Swiper's own breakpoints: min-width 1024 -> 3 per view, min-width 767 -> 2,
   otherwise 1. Written as max-width 1023/766 so 1024 and 767 keep the larger count. */
@media(max-width:1023px){.pp__names__track .pp__names__slide{flex:0 0 calc((100% - 30px)/2)}}
@media(max-width:766px){.pp__names__track .pp__names__slide{flex:0 0 100%}}

@media(max-width:1024px){
  .pp__hero,.pp__channels,.pp__features,.pp__names,.pp__pow,
  .pp__uc,.pp__blogs,.pp__rel,.pp__cs,.pp__faq,.pp__cta{padding:0 16px}
  .pp__hero__in,.pp__channels__in,.pp__features__in,.pp__names__in,.pp__pow__in,
  .pp__uc__in,.pp__blogs__in,.pp__rel__in,.pp__cs__in,.pp__faq__in,.pp__cta__in{max-width:768px}
  /* the evolution section keeps 15px side padding and takes no max-width */

  .pp__hero__in{padding:72px 0 32px}
  /* Below 1024 the two <img> patterns are hidden. Upstream ALSO carries a ::before on
     this section -- bloomreach_pattern.svg, no-repeat 50% 50%/contain, inset 0 -- and it
     is the only thing painting the yellow here (at 1440 the reverse holds: forcing that
     background to none changes nothing, while hiding the two <img>s empties the hero).
     NOT reproduced yet: upstream's paints only thin slivers at the extreme edges (~2.4k
     yellow pixels at 767) where the same declaration here floods the band (~59k), and
     opacity, z-index, blend mode and geometry all read identical. Copying it naively took
     the mobile hero from 1.05% to 26.53%, so it is left out and written down instead.
     See "Open / not yet done" in SESSION_NOTES. */
  .pp__hero__art{display:none}
  .pp__hero__copy{max-width:none;gap:32px}
  .pp__hero__stack{gap:20px}
  .pp__hero__title{gap:20px}
  .pp__h1{font-size:36px;line-height:45px}
  .pp__eyebrow{font-size:20px;line-height:26px}
  .pp__hero__lead{font-size:18px;line-height:29px}
  .pp__h2{font-size:30px;line-height:38px}
  .pp__h3{font-size:24px;line-height:30px}
  .pp__kicker{font-size:18px;line-height:29px}

  /* video above the cards, and it takes half the container's width */
  .pp__channels__in{flex-direction:column-reverse;gap:32px;padding:0 0 26px}
  .pp__channels__list{flex:0 0 auto;gap:24px}
  .pp__channels__media{flex:0 0 auto;width:50%}
  /* mobile-app-marketing's shot takes the full width here where ab's stays at 50% */
  .pp__channels__media--full{width:100%}
  .pp__pbox{border-radius:12px}
  .pp__pbox--row .pp__pbox__h{font-size:18px;line-height:29px}

  .pp__features__in{gap:36px;padding:26px 0}
  .pp__features__rows{gap:36px}
  .pp__feat{gap:30px}
  .pp__feat__copy{flex:0 0 49%;padding:0;border-radius:12px}
  /* the copy loses 8px here, the media keeps its 50%, and the pair shrinks to fit */
  .pp__feat--w50 .pp__feat__copy{width:calc(50% - 8px);padding:0}
  .pp__feat__h{font-size:24px;line-height:30px}

  .pp__names__in{gap:30px;padding:26px 0}
  /* the controls centre and the dots rejoin the flow at 1024, not at 767 */
  .pp__names__row{justify-content:center;row-gap:24px}
  .pp__names__dots{position:static;transform:none;bottom:auto;left:auto;height:41px}
  .pp__stat{flex:1 1 300px}
  .pp__stat--3up{flex:0 0 calc(33.33% - 20px)}
  .pp__stat__fig{font-size:36px;line-height:45px}

  .pp__pow__in{flex-direction:column;gap:36px;padding:26px 0}
  .pp__pow__l,.pp__pow__r{flex:0 0 auto;width:100%}
  .pp__pow__l{gap:36px}
  .pp__pow__r{flex-direction:row;flex-wrap:wrap;gap:32px}
  .pp__pt{flex:0 0 calc((100% - 32px)/2);gap:20px}
  .pp__pt .pp__ico--sm{width:28px;height:28px}
  .pp__pt__h{font-size:20px;line-height:26px}

  .pp__evo__in{gap:60px;padding:40px 0 60px;align-items:center}
  /* still 46/54 -- only the gap and padding change */

  .pp__blogs__in{gap:40px}
  .pp__blogs__grid{gap:16px}
  .pp__bcard__h{font-size:18px;line-height:24px}

  .pp__rel__in,.pp__uc__in{gap:36px;padding:26px 0}
  .pp__rel__grid,.pp__uc__grid{gap:16px}
  .pp__pbox--tile{flex:0 0 calc((100% - 16px)/2);border-radius:20px}
  .pp__pbox--tile .pp__pbox__h{font-size:18px;line-height:24px}

  /* the story stacks: both columns take the full width, the video with them, the
     logo loses its divider rule and the CTA takes the tighter radius */
  .pp__cs__in{padding:26px 0}
  .pp__cs__slide{flex-direction:column;gap:0}
  .pp__cs__media,.pp__cs__copy{width:100%}
  .pp__cs__play{width:100%;max-width:100%}
  .pp__cs__play__mark{right:50%}
  .pp__cs__copy{gap:20px;padding:16px}
  .pp__cs__logo{padding:0;border-left:0}
  .pp__cs__cta{border-radius:12px}
  .pp__cs__quote{font-size:18px;line-height:29px}

  .pp__faq__in{gap:24px;padding:26px 0}

  /* the closing card stacks, loses its 32px gap and takes a tighter radius */
  .pp__cta__in{padding:26px 0 52px}
  .pp__cta__card{flex-direction:column;gap:0;padding:0 16px 16px;border-radius:16px}
  .pp__cta__copy{flex:0 0 auto;width:100%;gap:24px;padding:36px 20px 20px}
  .pp__cta__shot{flex:0 0 auto;width:100%;padding:0 20px 20px}
}

@media(max-width:767px){
  .pp__hero__in,.pp__channels__in,.pp__features__in,.pp__names__in,.pp__pow__in,
  .pp__uc__in,.pp__blogs__in,.pp__rel__in,.pp__cs__in,.pp__faq__in{max-width:none}
  .pp__cta{padding:0}
  .pp__cta__in{max-width:none}

  .pp__hero__in{padding:32px 0}
  .pp__channels__media{width:50%}
  .pp__channels__media--full{width:100%}
  .pp__pbox--row{gap:12px}
  /* the heading widget is capped at 75% of the card body below 767 */
  .pp__pbox--row .pp__pbox__h{width:75%}

  /* the feature rows stay ROW and WRAP -- each child simply takes the full width, which
     is why ft1 still computes row-reverse here rather than column */
  .pp__feat{flex-wrap:wrap;gap:24px}
  .pp__feat__media{flex:0 0 100%}
  .pp__feat__copy{flex:0 0 100%;gap:12px}
  .pp__feat--w50 .pp__feat__media,.pp__feat--w50 .pp__feat__copy{width:100%;max-width:100%}

  /* the controls row centres and the dots rejoin the flow beside the arrows */
  .pp__names__rail{gap:26px}
  .pp__names__panel{gap:26px;padding:24px 20px}
  .pp__names__grid{gap:24px}
  .pp__stat,.pp__stat--3up{flex:1 1 100%;gap:12px;padding:12px 24px}
  .pp__stat__foot{gap:8px}

  .pp__pow__r{gap:32px}
  .pp__pt{flex:0 0 100%}

  .pp__evo__in{flex-wrap:wrap;gap:30px;padding:20px 0 60px}
  .pp__evo__copy,.pp__evo__media{flex:0 0 100%}

  /* upstream pins the card at 290 and the image box at 180 and clips the overflow on the
     CARD -- the picture genuinely runs over the meta row here. Reproduced, not corrected;
     see SESSION_NOTES. */
  .pp__blogs__grid{flex-direction:column}
  .pp__bcard{flex:0 0 auto;overflow:hidden}
  /* the clipped height is the page's own: ab 180, mobile-app-marketing 430 */
  .pp__bcard__shot{max-height:var(--pp-bcard-shot-h,180px)}

  .pp__pbox--tile{flex:1 1 100%;gap:12px;padding:24px;border-radius:12px}
  /* the person row centres and wraps -- name/role above, logo below */
  .pp__cs__person{justify-content:center;gap:16px;flex-wrap:wrap}
  .pp__cs__name,.pp__cs__role{text-align:center}
  /* both fill the copy column here, which is what wraps the person row to two lines */
  .pp__cs__who,.pp__cs__cta{width:100%}
  .pp__cs__cta{flex-wrap:nowrap}

  .pp__cta__card{flex-direction:column}
  .pp__cta__shot{padding:0}
}

/* ============ WHY BLOOMREACH ============
   Sources: final-web/why-bloomreach.html, its Elementor sheet why-bloomreach_files/
   post-62626.css, and the two shared component sheets bloomreach-swiper.css and
   bloomreach-quotes.css. Numbers below are those files' own, not measurements of the
   render -- where a rule looks odd (the deck's aspect-ratio ladder keys off viewport
   HEIGHT, the products rail is wider than the screen) it is odd upstream too.

   The whole block is scoped to .p-wb. The heading <span> ladder in particular MUST stay
   scoped: upstream ships it as a bare `h1 span, h2 span` rule in the page's inline
   <style>, and letting that loose would resize headings on all thirty built pages. */

/* the page's own em-scale on heading spans: 1.2 from 580, 1.4 from 1400, 1.6 from 1800 */
@media(min-width:580px){.p-wb h1 span,.p-wb h2 span{font-size:1.2em;line-height:1.25}}
@media(min-width:1400px){.p-wb h1 span,.p-wb h2 span{font-size:1.4em;line-height:1.25}}
@media(min-width:1800px){.p-wb h1 span,.p-wb h2 span{font-size:1.6em;line-height:1.25}}

.p-wb{background:#fff}
/* upstream's .page-content -- the only element that clips the hero's bleeding blobs */
.wb__page{overflow:hidden}
.wb__h1{margin:0;font-family:"Plus Jakarta Sans",sans-serif;font-size:60px;line-height:1;
  font-weight:500;color:#000}
.wb__h2{margin:0;font-size:50px;line-height:60px;font-weight:500;color:#000}
/* inside the blue stat card the same heading has to invert */
.wb__df__card .wb__h2{color:#fff}
.wb__h3{margin:0;font-size:36px;line-height:43px;font-weight:500;color:#000}
@media(max-width:1024px){
  .wb__h1{font-size:36px}
  .wb__h2{font-size:30px;line-height:38px}
  .wb__h3{font-size:24px;line-height:30px}}

/* 1 · hero ------------------------------------------------------------------ */
.wb__hero{position:relative;display:flex;flex-direction:column;padding:0 15px}
@media(min-width:1200px){.wb__hero{padding:0 80px}}
/* the yellow blob and the blue/green wash. Both z-index -1, both anchored off calc(50%)
   so they spill past the section on purpose; the section stays overflow:visible. */
.wb__hero::before,.wb__hero::after{content:"";position:absolute;z-index:-1;display:block}
.wb__hero::before{top:120px;left:calc(50% - 1070px);transform:translateX(-50%);
  width:1000px;height:780px;background:#0179F8;border-radius:50%;filter:blur(150px)}
.wb__hero::after{top:520px;left:calc(50% + 500px);transform:rotate(60deg);
  width:920px;height:640px;filter:blur(200px);
  background:linear-gradient(250deg,rgba(1,154,206,.65) 28.92%,rgba(1,206,127,.65) 50.56%)}
@media(max-width:1200px){
  .wb__hero::before{top:100px;left:calc(50% - 80vw)}
  .wb__hero::after{left:calc(50% + 25vw)}}
@media(max-width:768px){
  .wb__hero::before,.wb__hero::after{top:200px;width:400px;height:180px;filter:blur(100px)}
  .wb__hero::before{left:calc(50% - 80vw)}
  .wb__hero::after{left:calc(50% + 30vw)}}
.wb__hero__in{width:100%;max-width:1720px;margin:0 auto;display:flex;flex-direction:row;
  gap:140px;justify-content:center;align-items:center;padding:120px 0}
@media(max-width:1024px){.wb__hero__in{padding:80px 0 60px}}
@media(max-width:767px){.wb__hero__in{flex-wrap:wrap;padding:60px 0 20px}}
.wb__hero__col{position:relative;z-index:5;width:1000px;max-width:100%;
  display:flex;flex-direction:column;align-items:flex-start;gap:30px}
@media(max-width:1024px){.wb__hero__col{width:100%}}
/* the heading widget shrinks to its text inside a flex-start column, then re-centres */
.wb__h1{margin:0 auto;text-align:center}

/* 2 · brand band (the third <site-logos> rhythm) ---------------------------- */
.ma__logos.wb__logos{padding:40px 0;gap:10px}
.wb__logos .ma__logos__kicker{line-height:18px}
.wb__logos .ma__logos__slider{width:2400px}
.wb__logos .ma__logo{margin-right:0}
.wb__logos .ma__logo img{transform:scale(.7)}
@media(max-width:1024px){.ma__logos.wb__logos{padding:20px 0}}
@media(max-width:768px){.wb__logos .ma__logo{width:30vw}}
@media(max-width:576px){
  .wb__logos .ma__logo{width:35vw}
  .wb__logos .ma__logo img{transform:scale(1)}}

/* 3 · the white gap upstream ships as a section --------------------------- */
.wb__gap{min-height:120px;padding:40px 0;background:#fff;
  display:flex;flex-direction:column;gap:10px;overflow:hidden}
@media(max-width:1024px){.wb__gap{min-height:80px}}
@media(max-width:767px){.wb__gap{min-height:60px}}

/* 4 · go beyond disconnected clicks ---------------------------------------- */
.wb__gb{position:relative;display:flex;flex-direction:column;padding:0 15px;background:#fff}
@media(min-width:1200px){.wb__gb{padding-left:80px;padding-right:80px}}
.wb__gb__in{width:100%;max-width:1110px;margin:0 auto;display:flex;flex-direction:column;
  align-items:center;justify-content:flex-start;gap:60px;padding:0 0 190px}
.wb__gb__move{position:relative;display:flex;flex-direction:column;align-items:center;
  gap:30px;width:100%}
/* pinned while the deck plays, then parked at the bottom of the run */
.wb__gb__move.is-fixed{position:fixed;top:0;width:1110px}
.wb__gb__move.is-end{position:absolute;bottom:0;width:1110px}
@media(max-width:1140px){
  .wb__gb__move.is-fixed,.wb__gb__move.is-end{width:calc(100% - 30px)}}
.wb__gb__head{width:100%;max-width:900px;text-align:center}
.wb__h2--gb{line-height:1}
.p-wb .wb__h2--gb span{font-size:1.1em}
.wb__cards{position:relative;display:flex;flex-direction:column;gap:0;width:100%}
.wb__card{position:absolute;top:0;left:0;box-sizing:border-box;display:flex;
  flex-direction:row;justify-content:space-between;gap:30px;width:100%;
  aspect-ratio:1110/460;border-radius:32px;padding:40px;font-weight:500;
  color:var(--fg);background:var(--bg);
  transition:transform 300ms ease-out,opacity 300ms ease-out}
.wb__card--1{position:static}
.wb__card--2{top:20%}
.wb__card--3{top:40%}
.wb__card--4{top:60%}
/* cards 2-4 start a screen below and invisible; the script drives them in */
.wb__card--off{opacity:0;transform:translateY(100vh)}
@media(max-height:1100px){.wb__card{aspect-ratio:1110/380}}
@media(max-height:960px){.wb__card{aspect-ratio:1110/360}}
@media(max-height:800px){.wb__card{aspect-ratio:1110/300}}
@media(max-width:767px){.wb__card{aspect-ratio:4/3}}
@media(max-width:520px){.wb__card{aspect-ratio:1/1}}
@media(max-width:400px){.wb__card{aspect-ratio:5/4;padding:30px}}
.wb__card__num{display:flex;align-items:flex-start;gap:30px}
.wb__card__num p{margin:0;font-size:300px;line-height:.8;transform-origin:0 0;
  transition:transform 300ms ease-out}
@media(max-height:960px){.wb__card__num p{font-size:240px}}
@media(max-width:1140px){.wb__card__num p{font-size:240px}}
@media(max-width:767px){.wb__card__num p{font-size:180px}}
@media(max-width:520px){.wb__card__num p{font-size:140px}}
@media(max-width:400px){.wb__card__num p{font-size:100px}}
.wb__card__body{display:flex;flex-direction:column;justify-content:center;gap:30px;width:40%}
@media(max-width:1024px) and (min-width:768px){.wb__card__body{width:60%}}
@media(max-width:767px){
  /* Elementor's --flex-wrap-mobile:wrap -- the number takes the first line and the
     sentence the second, and the two lines share the card's height between them. */
  .wb__card{flex-wrap:wrap}
  .wb__card__body{width:100%;justify-content:flex-start}}
.wb__card__text p{margin:0;color:#000;font-size:36px;line-height:1.25;
  transition:opacity 300ms ease-out}
@media(max-height:960px){.wb__card__text p{font-size:30px}}
@media(max-width:980px){.wb__card__text p{font-size:30px}}
@media(max-width:767px){.wb__card__text p{font-size:24px}}
@media(max-width:520px){.wb__card__text p{font-size:20px}}
@media(max-width:400px){.wb__card__text p{font-size:18px}}
/* the card behind the top one keeps only its number, shrunk into the corner */
.wb__card--back .wb__card__num p{transform:scale(.2) translateY(-40%)}
.wb__card--back .wb__card__text p{opacity:0}
.wb__until{pointer-events:none;width:100%;max-width:900px;gap:30px;text-align:center;
  padding:300px 0 100px;transition:opacity 600ms ease-out}
/* upstream ends the moving block with an empty widget that holds the deck's script; it
   is invisible but it is 26px of real column height, and the deck's whole scroll length
   is 5x this block, so dropping it would shorten the section by 280px. */
.wb__gb__tail{height:26px}
.wb__until .wb__h2{line-height:1}
.wb__until.is-hidden{opacity:0}
@media(max-height:1100px) and (min-width:1140px){.wb__until{padding-top:240px}}
@media(max-height:800px) and (min-width:1140px){.wb__until{padding-top:180px}}
@media(max-width:1140px){.wb__until{padding-top:220px}}
@media(max-width:767px){.wb__until{padding-top:45vw;padding-bottom:80px}}
@media(max-width:520px){.wb__until{padding-top:55vw;padding-bottom:60px}}
@media(max-width:400px){.wb__until{padding-top:45vw}}

/* 5 · see the whole picture ------------------------------------------------- */
.wb__wp{display:flex;flex-direction:column;overflow:hidden;padding:0 15px}
@media(min-width:1200px){.wb__wp{padding-left:80px;padding-right:80px}}
.wb__wp__in{width:100%;max-width:1720px;margin:0 auto;display:flex;flex-direction:column;
  align-items:center;justify-content:flex-start;gap:60px;padding:0 0 80px}
.wb__wp__head{width:100%;max-width:1100px}
.wb__wp__rail{position:relative;width:100%}
/* the track is allowed out of the rail -- upstream sets overflow:visible on the swiper
   and clips on the SECTION, so a slide leaving to the left is still painted until the
   section edge */
.wb__wp__track{display:flex;flex-direction:row;align-items:flex-start}
.wb__wp__track.is-anim{transition:transform 300ms ease-out}
.wb__wp__slide{flex:0 0 auto;width:640px;margin-right:30px;opacity:1;
  transition:opacity .3s ease-in-out}
@media(max-width:2000px){.wb__wp__slide{width:500px}}
@media(max-width:1700px){.wb__wp__slide{width:400px}}
@media(max-width:767px){.wb__wp__slide{width:90%}}
.wb__wp__slide.is-past{pointer-events:none}
@media(min-width:1720px){.wb__wp__slide.is-past{opacity:0}}
.wb__wp__img{width:100%;margin-bottom:40px;border-radius:40px;overflow:hidden}
@media(max-width:1800px){.wb__wp__img{margin-bottom:20px}}
@media(max-width:767px){.wb__wp__img{border-radius:20px}}
.wb__wp__img img{display:block;width:100%;aspect-ratio:600/510;height:auto;object-fit:cover}
.wb__wp__title h4{margin:0;line-height:1.2;color:#000;font-size:30px;font-weight:500}
@media(min-width:1025px) and (max-width:1700px){.wb__wp__title h4{font-size:24px}}
@media(max-width:1024px){.wb__wp__title h4{font-size:22px}}
@media(min-width:1701px){.wb__wp__title,.wb__wp__body{padding-right:80px}}
.wb__wp__body{color:#000;margin-top:24px}
@media(max-width:1800px){.wb__wp__body{margin-top:16px}}
.wb__wp__body p{margin:0;font-size:18px;line-height:1.8}
@media(max-width:1800px){.wb__wp__body p{font-size:16px}}
.wb__wp__arws{display:flex;gap:24px;width:100%;margin-top:40px}
@media(max-width:1800px){.wb__wp__arws{gap:16px;margin-top:20px}}
.wb__wp__arw{display:flex;align-items:center;justify-content:center;width:64px;height:64px;
  padding:0;border:0;border-radius:50%;background:#0461C8;color:#fff;cursor:pointer;
  transition:transform 200ms ease-in-out,opacity 200ms ease-in-out}
@media(max-width:1800px){.wb__wp__arw{width:48px;height:48px}}
.wb__wp__arw:hover{transform:scale(1.1)}
.wb__wp__arw svg{width:24px;height:24px}
.wb__wp__arw[disabled]{opacity:.35;cursor:default}
.wb__wp__arw[disabled]:hover{transform:none}

/* 6 · hear from our customers ---------------------------------------------- */
.wb__q{display:flex;flex-direction:column;padding:0 15px;background:#FFEEF5}
@media(min-width:1200px){.wb__q{padding-left:80px;padding-right:80px}}
.wb__q__in{width:100%;max-width:1720px;margin:0 auto;display:flex;flex-direction:column;
  gap:60px;padding:80px 0 100px}
@media(max-width:1024px){.wb__q__in{gap:40px}}
@media(max-width:767px){.wb__q__in{gap:20px;padding:60px 0}}
.wb__q__head{text-align:center}
.wb__q__wrap{display:flex;flex-direction:column;align-items:flex-start;width:100%;gap:60px;
  color:#000}
@media(max-width:767px){.wb__q__wrap{gap:30px}}
.wb__q__tabs__wrap{overflow-x:auto;width:calc(100% + 30px);display:flex;margin:0 -15px;padding:0 15px}
.wb__q__tabs{display:flex;gap:8px;color:#fff;padding:8px;border-radius:100px;
  background:#0461C8;margin:0 auto}
.wb__q__tab{cursor:pointer;font:inherit;font-weight:500;text-align:center;white-space:nowrap;
  padding:13px 32px 11px;border:0;border-radius:100px;background:transparent;color:inherit;
  transition:background 200ms ease-in-out,box-shadow 200ms ease-in-out}
@media(max-width:1200px){.wb__q__tab{font-size:14px;padding:9px 20px 7px}}
.wb__q__tab:hover{color:#050505;background:rgba(255,255,255,.5)}
.wb__q__tab.is-on{cursor:default;color:#050505;background:#fff;box-shadow:0 2px 4px 0 rgba(4,97,200,.8)}
.wb__q__stack{width:100%;position:relative;transition:height 500ms ease-in-out}
.wb__q__item{pointer-events:none;position:absolute;top:0;left:0;width:100%;display:flex;
  align-items:center;gap:100px;opacity:0;transform:translateY(30px);
  transition:opacity 500ms ease-in-out,transform 500ms ease-in-out}
@media(max-width:1400px){.wb__q__item{gap:40px}}
@media(max-width:767px){.wb__q__item{flex-wrap:wrap;gap:20px}}
.wb__q__item.is-on{pointer-events:all;opacity:1;transform:translate(0)}
.wb__q__text{display:flex;flex-direction:column;align-items:flex-start;gap:40px;width:47%}
@media(max-width:767px){.wb__q__text{width:100%;gap:20px}}
.wb__q__quote{width:100%;font-size:24px;line-height:1.5}
@media(max-width:1024px){.wb__q__quote{font-size:22px}}
@media(max-width:767px){.wb__q__quote{font-size:16px;line-height:1.7}}
.wb__q__quote p{margin:0}
.wb__q__person{display:flex;align-items:center;justify-content:flex-start;gap:20px;width:100%}
.wb__q__person img{display:block;width:60px;aspect-ratio:1/1;object-fit:cover;border-radius:50%}
.wb__q__who strong{display:block;color:#000;font-size:18px;font-weight:500}
@media(max-width:767px){.wb__q__who strong{font-size:16px}}
.wb__q__who span{display:block;color:#86868B;font-size:16px}
@media(max-width:767px){.wb__q__who span{font-size:14px;line-height:1.2}}
.wb__q__img{width:53%}
@media(max-width:767px){.wb__q__img{width:100%}}
.wb__q__img img{display:block;width:100%;aspect-ratio:848/600;object-fit:cover;border-radius:24px}

/* 7 · AI that takes initiative ---------------------------------------------- */
.wb__ai{display:flex;flex-direction:column;overflow:hidden;padding:0 15px}
@media(min-width:1200px){.wb__ai{padding-left:80px;padding-right:80px}}
.wb__ai__in{width:100%;max-width:1720px;margin:0 auto;display:flex;flex-direction:column;
  gap:60px;padding:100px 0 140px}
@media(max-width:1024px){.wb__ai__in{gap:40px}}
@media(max-width:767px){.wb__ai__in{padding:60px 0}}
.wb__ai__head{width:100%;display:flex;flex-direction:column}
.wb__ai__head__in{width:100%;max-width:760px;margin:0 auto;display:flex;
  flex-direction:column;gap:30px;text-align:center}
/* the heading widget is padded 15px a side, which is what wraps this h2 to two lines */
.wb__ai__head .wb__h2{padding:0 15px}
.wb__ai__lead p{margin:0;font-size:18px;line-height:29px;color:#000}
.wb__ai__row{display:flex;flex-direction:row;align-items:center;gap:0}
.wb__ai__row--rev{flex-direction:row-reverse}
@media(max-width:1024px){.wb__ai__row{gap:40px}.wb__ai__row--rev{gap:50px}}
@media(max-width:767px){
  .wb__ai__row,.wb__ai__row--rev{flex-direction:column-reverse;gap:30px}}
.wb__ai__copy{width:50%;display:flex;flex-direction:column;gap:30px;padding:0 200px}
@media(max-width:1800px){.wb__ai__copy{padding:0 calc(10vw - 20px)}}
@media(max-width:1024px){.wb__ai__copy{padding:0}}
@media(max-width:767px){.wb__ai__copy{width:100%}}
.wb__ai__body p{margin:0;font-size:18px;line-height:29px;color:#000}
.wb__ai__media{width:50%;display:flex;flex-direction:column;gap:30px}
@media(max-width:767px){.wb__ai__media{width:100%}}
.wb__ai__media video{display:block;width:100%;aspect-ratio:860/600;object-fit:cover;
  border-radius:24px}
.p-wb video{background-color:rgba(255,255,255,0)}
.p-wb a{color:#019ACE;text-decoration:none}
.p-wb a:hover{text-decoration:underline}

/* 8 · the Bloomreach difference -------------------------------------------- */
.wb__df{display:flex;flex-direction:column;overflow:hidden;padding:0 15px}
.wb__df__in{width:100%;max-width:1110px;margin:0 auto;display:flex;flex-direction:column;
  gap:40px;padding:0 0 100px}
@media(max-width:767px){.wb__df__in{gap:20px;padding-bottom:60px}}
.wb__df__head{padding:0 15px;text-align:center}
.wb__df__grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);
  gap:24px}
@media(max-width:767px){.wb__df__grid{grid-template-columns:repeat(1,1fr);gap:10px}}
.wb__df__card{display:flex;flex-direction:column;justify-content:center;align-items:center;
  gap:10px;padding:40px;border-radius:24px;background:#0461C8;color:#fff}
@media(max-width:767px){.wb__df__card{padding:20px}}
.wb__df__val{text-align:center;gap:10px}
.wb__df__label{text-align:center;font-size:18px;line-height:29px}
.wb__df__label p{margin:0;font-size:18px;line-height:29px;color:#fff}

/* 9 · the future is agentic ------------------------------------------------- */
.wb__ag{position:relative;display:flex;flex-direction:column;overflow:hidden;
  padding:0 15px;background:#000}
/* the same wash as the hero, but clipped by the section, so it reads as two soft
   pools of blue/green on the black rather than a bleed */
.wb__ag::before,.wb__ag::after{content:"";position:absolute;z-index:1;width:1240px;
  height:250px;filter:blur(210px);
  background:linear-gradient(250deg,#019ACE 28.92%,#01CE7F 50.56%)}
.wb__ag::before{top:-250px;left:calc(50% - 1600px)}
.wb__ag::after{top:auto;bottom:50px;left:calc(50% - 100px);transform:rotate(-179.965deg);
  filter:blur(208.15px)}
.wb__ag__in{position:relative;z-index:2;width:100%;max-width:1110px;margin:0 auto;
  display:flex;flex-direction:column;gap:40px;padding:100px 0}
@media(max-width:767px){.wb__ag__in{padding:60px 0}}
.wb__ag__head{position:relative;z-index:5;display:flex;flex-direction:column;gap:30px}
.wb__ag__head .wb__h2{padding:0 15px;text-align:center;color:#fff}
.wb__ag__lead{text-align:center;color:#fff}
.wb__ag__lead p{margin:0;font-size:18px;line-height:29px}
.wb__ag__media{position:relative;z-index:5}
.wb__ag__media video{display:block;width:100%;border-radius:24px}

/* 10 · ready for what's next ------------------------------------------------ */
.wb__rd{display:flex;flex-direction:column;overflow:hidden;padding:0 15px}
.wb__rd__in{width:100%;max-width:1110px;margin:0 auto;display:flex;flex-direction:column;
  gap:60px;padding:100px 0 9px}
@media(max-width:767px){.wb__rd__in{padding:60px 0 0}}
.wb__rd__row{display:flex;flex-direction:row;align-items:center;gap:80px}
@media(max-width:767px){.wb__rd__row{flex-wrap:wrap;gap:30px}}
.wb__rd__copy{width:40%;display:flex;flex-direction:column;gap:30px}
@media(max-width:767px){.wb__rd__copy{width:100%}}
.wb__rd__lead p{margin:0;font-size:18px;line-height:29px;color:#000}
/* the image is centred at its own size, not stretched -- below 768 the column is
   wider than the file (662) and upstream leaves the gap either side */
.wb__rd__media{width:60%;display:flex;flex-direction:column;align-items:center;gap:30px}
@media(max-width:767px){.wb__rd__media{width:100%}}
.wb__rd__media img{display:block;width:auto;max-width:100%;height:auto;border-radius:20px}

/* 11 · explore our products ------------------------------------------------- */
.wb__pr{display:flex;flex-direction:column;gap:60px;overflow:hidden;padding:100px 0 40px}
@media(max-width:1024px){.wb__pr{padding:60px 15px 20px}}
@media(max-width:767px){.wb__pr{gap:30px;padding:60px 0 0}}
.wb__pr__head{display:flex;flex-direction:column;padding:0 15px}
.wb__pr__head__in{width:100%;max-width:1110px;margin:0 auto;display:flex;
  flex-direction:column;gap:30px}
@media(max-width:767px){.wb__pr__head__in{gap:20px}}
.wb__pr__h{padding:0 15px;text-align:center}
.wb__pr__lead{padding:0 15px;text-align:center}
.wb__pr__lead p{margin:0;font-size:20px;line-height:29px;color:#000}
@media(max-width:1024px){.wb__pr__lead p{font-size:18px}}
/* the rail is deliberately wider than the viewport and centred on it */
.wb__pr__rail{position:relative;width:3030px;left:50%;transform:translateX(-50%);
  border-radius:20px;overflow:hidden}
@media(max-width:1800px){.wb__pr__rail{width:2600px}}
@media(max-width:1600px){.wb__pr__rail{width:2200px}}
@media(max-width:1024px){.wb__pr__rail{width:250vw}}
.wb__pr__view{width:100%;overflow:hidden}
/* Swiper's own breakpoints: spaceBetween 20 below 1024, 40 from 1024, 180 from 1600,
   with slidesPerView:3 -- so a slide is a third of what the gaps leave. */
.wb__pr__track{display:flex;flex-direction:row;will-change:transform}
.wb__pr__track.is-anim{transition:transform 500ms ease-out}
.wb__pr__slide{flex:0 0 calc((100% - 2 * var(--wb-pr-gap,40px)) / 3);
  margin-right:var(--wb-pr-gap,40px)}
@media(max-width:1023px){.wb__pr{--wb-pr-gap:20px}}
@media(min-width:1600px){.wb__pr{--wb-pr-gap:180px}}
.wb__pr__slide video{display:block;width:100%;aspect-ratio:890/500;object-fit:cover;
  border-radius:20px}
.wb__pr__foot{display:flex;flex-direction:column;padding:0}
@media(max-width:767px){.wb__pr__foot{padding:0 15px}}
.wb__pr__foot__in{width:100%;max-width:1720px;margin:0 auto;display:flex;
  flex-direction:column;align-items:center;gap:36px}
.wb__pr__tabs{display:flex;gap:8px;color:#fff;padding:8px;border-radius:100px;background:#0461C8}
@media(max-width:1024px){.wb__pr__tabs{max-width:100%;flex-wrap:wrap;gap:5px;border-radius:28px}}
.wb__pr__tab{cursor:pointer;font:inherit;font-weight:500;text-align:center;
  padding:13px 32px 11px;border:0;border-radius:100px;background:transparent;color:inherit;
  transition:background 200ms ease-in-out,box-shadow 200ms ease-in-out}
@media(max-width:1024px){.wb__pr__tab{width:100%;text-align:center;padding:9px 20px 7px}}
.wb__pr__tab:hover{color:#050505;background:rgba(255,255,255,.5)}
.wb__pr__tab.is-on{cursor:default;color:#050505;background:#fff;box-shadow:0 2px 4px 0 rgba(4,97,200,.8)}
.wb__pr__texts{position:relative;width:700px;max-width:100%;height:240px;
  display:flex;flex-direction:column;align-items:center;gap:30px}
.wb__pr__text{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;
  opacity:0;transform:translateY(10px);gap:30px;text-align:center;font-size:16px;
  line-height:26px;color:#000;
  transition:opacity 200ms ease-in-out,transform 200ms ease-in-out}
.wb__pr__text.is-on{pointer-events:all;opacity:1;transform:translateY(0)}
@media(max-width:767px){.wb__pr__texts{width:100%}}
.wb__pr__text p{margin:0}

/* ==========================================================================
   bloomreach vs salesforce  (.p-ca)  --  final-web/competitor_analysis.html
   Elementor template 78064. Every number below is read off the source: its own
   post-78064.css and the widget stylesheets it links (bloomreach-tabs-*.css,
   style(1).css), plus tools/ca_type.mjs for the type ladder. The component class
   names are the SOURCE's, so tools/ca_geo.mjs compares identical selectors on
   both pages -- only the twelve sections carry a ca__ prefix.
   ========================================================================== */

/* ---- shared page primitives -------------------------------------------- */
/* `.lc-content` is this template's container: 1300, not the 1110 the rest of
   the site uses. `.sfmctitle` caps a heading at 1000. */
.p-ca{background:#000}
/* upstream's main.site-main -- see the comment in the page markup */
.ca__main{overflow:hidden}
.p-ca .lc-content{width:100%;max-width:1300px}
.p-ca .sfmctitle{max-width:1000px;text-wrap:balance}
/* the gradient-clipped text: two angles, one for light type and one for dark */
.gmtext{background:linear-gradient(282deg,#0179F8 39.09%,#00B1DA 76.5%,#0099CE 86.29%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.gmtext-dark{background:linear-gradient(269deg,#0179F8 6.67%,#00B1DA 69.19%,#0099CE 85.54%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
/* the class ships line-height:22px; the section kickers are heading widgets that override
   it to 16, but the tab block's panel title is a plain div and keeps the 22 */
.loomilabel{font-size:16px;line-height:22px;font-weight:500;letter-spacing:1.6px;
  text-align:center;text-transform:uppercase;text-wrap:balance;margin:0}
.ca__kick,.ca__hero__kick p,.ca__logos__kick{line-height:16px}
.brcontainer{padding-left:120px;padding-right:120px}
@media(max-width:1400px){.brcontainer{padding-left:40px;padding-right:40px}}
@media(max-width:1200px){.brcontainer{padding-left:15px;padding-right:15px}}

.p-ca .section{display:flex;flex-direction:column;align-items:center;position:relative}
/* The leading is UNITLESS on purpose. Upstream ships a global
   `@media(min-width:768px){h1 span,h2 span,h3 span,h4 span{font-size:1.3em}}` and three of
   this page's headings wrap their text in a span -- 60px becomes 78px and the line box has
   to grow with it. 66/60 = 1.1, and 45/36 = 1.25 below 768. */
.ca__h1{font-size:60px;line-height:1.1;font-weight:500;color:#fff;margin:0;
  text-align:center;text-wrap:balance}
.ca__h2{font-size:60px;line-height:1.1;font-weight:500;color:#000;margin:0;text-wrap:balance}
@media(min-width:768px){.p-ca h1 span,.p-ca h2 span,.p-ca h3 span,.p-ca h4 span{font-size:1.3em}}
.ca__road .ca__h2,.ca__migrate .ca__h2{color:#fff}
@media(max-width:1024px){
  .ca__h1,.ca__h2{font-size:36px;line-height:1.1}
  .loomilabel{text-align:left}
}
/* h1 keeps its 1.1 all the way down; only the h2s open up to 1.25 below 768 */
@media(max-width:767px){.ca__h2{font-size:36px;line-height:1.25}}

/* the section head every band below the hero shares */
.ca__head{display:flex;flex-direction:column;align-items:flex-start;gap:40px}
.ca__kick{text-align:left}
.ca__head__sub{font-size:16px;line-height:26px;color:var(--text);margin:0;max-width:1000px}
.ca__ctarow{display:flex;flex-direction:row;align-items:center;gap:30px}


/* The five CTA colour triples this page uses, read off the rendered buttons: upstream
   colours each one from a per-widget-id rule, so there is no name to copy. */
.br-cta--ca-y{color:#fff;background:#0461C8;border-color:#0179F8}
.br-cta--ca-y span{background-color:#03448C}
.br-cta--ca-y:hover{color:#000;border-color:#03448C}
.br-cta--ca-ghosty{color:#fff;background:rgba(255,255,255,0);border-color:#0179F8}
.br-cta--ca-ghosty span{background-color:#0461C8}
.br-cta--ca-ghosty:hover{color:#000;border-color:#0179F8}
.br-cta--ca-yk{color:#fff;background:#0461C8;border-color:#000}
.br-cta--ca-yk span{background-color:#000}
.br-cta--ca-yk:hover{color:#fff;border-color:#000}
.br-cta--ca-ghostk{color:#000;background:rgba(255,255,255,0);border-color:#000}
.br-cta--ca-ghostk span{background-color:#000}
.br-cta--ca-ghostk:hover{color:#fff;border-color:#000}

/* ---- 0  hero ------------------------------------------------------------ */
/* The two blurred blobs are the section's own ::before/::after -- 934x802 circles
   translated half off their anchor, blur 200/255, opacity .3 at <=1024. No element
   sweep can see them; tools/ca_glow.mjs gates them against the source. */
.ca__hero{padding:80px 15px 0;gap:30px;z-index:10}
.ca__hero::before,.ca__hero::after{content:"";display:block;position:absolute;z-index:1;
  width:934px;height:802px;transform:translate(-50%,-50%);border-radius:50%;pointer-events:none}
.ca__hero::before{top:-10%;left:100%;background:rgba(1,121,248,.6);filter:blur(200px)}
.ca__hero::after{top:140%;left:-10%;filter:blur(255px);
  background:linear-gradient(25deg,rgba(1,154,206,.8) 56.87%,rgba(1,206,127,.8) 76.42%)}
.ca__hero > .lc-content{position:relative;z-index:5;
  display:flex;flex-direction:column;justify-content:center;align-items:center;gap:50px}
.ca__hero__kick,.ca__hero__head,.ca__hero .ca__ctarow{width:100%}
.ca__hero__kick{display:flex;flex-direction:column;align-items:center;gap:10px}
.ca__hero__head{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:30px}
.ca__hero__head .ca__h1{max-width:1040px}
.ca__hero .ca__ctarow{justify-content:center}
.ca__hero__sub{font-size:18px;line-height:29px;color:#fff;margin:0;max-width:640px;text-align:center}
@media(max-width:1024px){.ca__hero::before,.ca__hero::after{opacity:.3}}
@media(max-width:767px){.ca__hero{padding:40px 15px 0}}

/* ---- 1  the "brands that switched" marquee ------------------------------ */
/* The seven marks have no remote URL in the source (no srcset, no noscript twin,
   no data-lazy-src), so they are served from ca-art/ -- the pt-art/ precedent.
   The "PREVIOUS SFMC" caption under each is drawn inside the SVG. */
.ca__logos{padding:120px 15px 0;gap:30px}
.ca__logos > .lc-content{display:flex;flex-direction:column;gap:40px}
.ca__logos__kick{color:#fff}
.br-logo-slider__wrapper{position:relative;overflow:hidden;display:flex;width:100%}
.br-logo-slider__wrapper.slide-me::before,.br-logo-slider__wrapper.slide-me::after{
  content:"";pointer-events:none;position:absolute;z-index:5;top:0;left:0;width:50px;height:100%;
  background:linear-gradient(to left,rgba(255,255,255,0),var(--fade-color))}
.br-logo-slider__wrapper.slide-me::after{left:auto;right:0;
  background:linear-gradient(to right,rgba(255,255,255,0),var(--fade-color))}
.br-logo-slider__content{position:relative;display:flex;width:100%}
.br-logo-slider__content.slide-add{position:absolute;top:0;left:100%;width:100%}
.br-logo-slider__item{flex:1;display:flex;align-items:center}
.br-logo-slider__item img{display:block;width:100%;border-radius:0}
@media(min-width:769px){
  .br-logo-slider__wrapper.slide-me-desktop > .br-logo-slider__content{animation:ca-logo-slide 36s linear infinite}
}
@media(max-width:768px){
  .br-logo-slider__wrapper.slide-me-mobile > .br-logo-slider__content{animation:ca-logo-slide 36s linear infinite}
  .br-logo-slider__wrapper.slide-me-desktop:not(.slide-me-mobile)::before,
  .br-logo-slider__wrapper.slide-me-desktop:not(.slide-me-mobile)::after{content:none}
  .br-logo-slider__content{width:auto;flex-wrap:wrap;justify-content:center}
  .br-logo-slider__item{flex:none;width:33.33%}
  /* This wrapper carries slide-me-mobile, so the strip stays ONE row and the items take a
     viewport width -- 30vw is 230px at 767, which is the whole of the difference the
     geometry gate was reporting on this block. */
  .br-logo-slider__wrapper.slide-me-mobile .br-logo-slider__content{flex-wrap:nowrap}
  .br-logo-slider__wrapper.slide-me-mobile .br-logo-slider__item{flex:none;width:30vw}
}
@media(max-width:576px){
  .br-logo-slider__item{width:50%}
  .br-logo-slider__wrapper.slide-me-mobile .br-logo-slider__item{width:45vw}
}
@keyframes ca-logo-slide{from{transform:translateX(0)}to{transform:translateX(-100%)}}

/* ---- 2  the four headline numbers --------------------------------------- */
.ca__keys{padding:120px 15px;gap:30px}
.ca__keys__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-start;gap:30px}
.key-box{flex:1 1 0;min-width:0;display:flex;flex-direction:column;justify-content:flex-start;
  align-items:flex-start;gap:16px;padding-right:60px}
@media(max-width:1199px){.key-box{padding-right:0}}
.key-box-num{font-size:50px;line-height:60px;font-weight:500}
@media(max-width:1024px){.key-box-num{font-size:30px;line-height:38px}}
.key-box-text p{font-size:16px;line-height:29px;color:#fff;margin:0}
.key-box-link a{color:#fff;font-size:16px;line-height:26px}
.key-box-link a:hover{color:#fff;text-decoration:none}
@media(max-width:767px){.ca__keys__row{flex-wrap:wrap}.key-box{width:calc(50% - 15px)}}
@media(max-width:480px){.key-box{width:100%}}

/* ---- 3 + 4  the two tab blocks (bloomreach_tabs_numbers) ---------------- */
/* The panels are absolutely positioned and cross-faded, so the panel container's
   height has to be set to the active panel's -- site.js does that and re-does it on
   resize. At <=1024 the pill row is hidden and each panel title becomes its own
   accordion header with a +/- drawn from two 20x2 bars. */
.ca__pain{background:#fff;padding:120px 15px;gap:30px}
.ca__only{background:#fff;padding:0 15px 120px;gap:30px}
.ca__pain__in,.ca__only__in{display:flex;flex-direction:column;gap:40px}
.br-tbs{display:flex;flex-direction:column;align-items:flex-start;width:100%;gap:60px}
@media(max-width:767px){.br-tbs{gap:30px}}
.br-tbs__tabs-wrap{overflow-x:auto;width:calc(100% + 30px);display:flex;margin:0 -15px;padding:0 15px}
.br-tbs__tabs{display:flex;gap:8px;color:#fff;padding:8px;border-radius:100px;background:#0461C8;margin:0 auto}
.br-tbs__tab{cursor:pointer;font-weight:500;text-align:center;padding:13px 32px 11px;border-radius:100px;
  white-space:nowrap;transition:background 200ms ease-in-out,box-shadow 200ms ease-in-out}
.br-tbs__tab:hover{color:#050505;background:rgba(255,255,255,.5)}
.br-tbs__tab.active{cursor:default;color:#050505;background:#fff;box-shadow:0 2px 4px 0 rgba(4,97,200,.8)}
@media(max-width:1200px){.br-tbs__tab{font-size:14px;padding:9px 20px 7px}}
.br-tbs__panels{width:100%;position:relative;transition:height 500ms ease-in-out}
.br-tbs__panel{pointer-events:none;position:absolute;top:0;left:0;width:100%;display:flex;
  align-items:flex-start;justify-content:space-between;gap:40px;opacity:0;transform:translateY(30px);
  transition:opacity 500ms ease-in-out,transform 500ms ease-in-out}
.br-tbs__panel.active{pointer-events:all;opacity:1;transform:translate(0)}
.br-tbs__panel.bullets{align-items:stretch}
@media(max-width:1400px){.br-tbs__panel{gap:20px}}
@media(max-width:1024px){.br-tbs__panel{flex-direction:column;align-items:center}}
.br-tbs__content{display:flex;flex-direction:column;align-items:flex-start;gap:32px;
  width:50%;max-width:520px;padding-top:20px}
.br-tbs__panel.bullets .br-tbs__content{max-width:100%;padding:50px;border-radius:20px;border:1px solid #BEBEBE}
@media(max-width:1024px){.br-tbs__panel.bullets .br-tbs__content{order:1;gap:0;width:100%;padding:30px}}
@media(max-width:767px){
  .br-tbs__content{width:100%;gap:20px;max-width:100%}
  .br-tbs__panel.bullets .br-tbs__content{padding:20px}
}
/* the widget only sets colour and alignment; the 50px comes from the h2 it is used on,
   and the bullets block uses a plain div with .loomilabel instead */
.br-tbs__title{color:#000;text-align:left;margin:0}
h2.br-tbs__title{font-size:50px;line-height:1.1;font-weight:500}
@media(max-width:1024px){h2.br-tbs__title{font-size:30px;line-height:1.1}}
@media(max-width:767px){h2.br-tbs__title{font-size:30px;line-height:38px}}
.br-tbs__title.loomilabel::before,.br-tbs__title.loomilabel::after{position:absolute;top:50%;right:0;
  width:20px;height:2px;background:#222;border-radius:2px;transform:translateY(-50%);
  transition:transform 200ms ease-in-out}
.br-tbs__title.loomilabel::after{transform:translateY(-50%) rotate(90deg)}
@media(max-width:1024px){
  .br-tbs__title.loomilabel::before,.br-tbs__title.loomilabel::after{content:""}
  .br-tbs__title.loomilabel{position:relative;cursor:pointer;top:1px;left:-5px;width:100%;padding:5px 35px 5px 5px}
  .br-tbs__title.loomilabel.active::after{transform:translateY(-50%)}
}
.br-tbs__text p{font-size:16px;line-height:26px;color:#000;margin:0}
.br-tbs__text p:not(:last-child){margin-bottom:16px}
.br-tbs__panel.bullets .br-tbs__text p{font-size:20px;line-height:1.8}
@media(max-width:1024px){
  .br-tbs__panel.bullets .br-tbs__text{display:none;padding-top:24px}
  .br-tbs__panel.bullets .br-tbs__text p{font-size:16px;line-height:1.6}
}
@media(min-width:1025px){.br-tbs__text{display:block!important}}
.br-tbs__link{color:#019ACE}
.br-tbs__link:hover{color:#019ACE;text-decoration:underline}
.br-tbs__numbers{display:flex;align-items:flex-start;gap:24px;border-radius:20px;
  border:1px solid #BEBEBE;padding:20px 40px 24px 30px}
.br-tbs__panel.bullets .br-tbs__numbers{width:100%;border-radius:0;border:none;
  border-top:1px solid #BEBEBE;padding:32px 0 0;margin-top:auto}
@media(max-width:1024px){.br-tbs__panel.bullets .br-tbs__numbers{display:none;margin:32px 0 0}}
@media(max-width:767px){
  .br-tbs__numbers{width:100%;padding:16px 20px}
  .br-tbs__panel.bullets .br-tbs__numbers{margin:16px 0 0;padding:16px 0 0}
}
@media(max-width:575px){.br-tbs__numbers{flex-direction:column;gap:0}}
@media(min-width:1025px){.br-tbs__numbers{display:flex!important}}
.br-tbs__number{font-size:48px;font-weight:500;line-height:normal;white-space:nowrap}
@media(max-width:1199px){.br-tbs__number{font-size:38px}}
@media(max-width:1024px){.br-tbs__number{font-size:30px}}
.br-tbs__number-item{display:flex;flex-direction:column;align-items:flex-start;gap:10px}
.br-tbs__number-text{max-width:160px;color:#000;font-size:12px;line-height:160%}
@media(max-width:1024px){
  .br-tbs__number-item{gap:0}
  .br-tbs__number-item:not(:last-child){margin-bottom:16px}
  .br-tbs__number-text{max-width:100%}
}
.br-tbs__img{width:50%}
.br-tbs__img img{display:block;width:100%;object-fit:cover;border-radius:24px}
@media(max-width:767px){.br-tbs__img{width:100%}}
.br-tbs__bullets{position:relative;display:flex;flex-direction:column;align-items:flex-start;
  gap:32px;width:50%;padding:40px;border-radius:20px;background:#000;overflow:hidden}
.br-tbs__bullets::before{content:"";pointer-events:none;position:absolute;z-index:1;top:100%;left:50%;
  transform:translate(-50%,-50%);width:140%;height:60%;filter:blur(200px);
  background:linear-gradient(265deg,rgba(1,154,206,1) 56.87%,rgba(1,206,127,1) 76.42%)}
@media(max-width:1024px){.br-tbs__bullets{order:5;width:100%;padding:30px}}
@media(max-width:767px){.br-tbs__bullets{padding:20px}}
.br-tbs__bullet{position:relative;z-index:5;display:flex;flex-direction:column;align-items:flex-start;
  gap:10px;padding-left:30px}
.br-tbs__bullet svg{position:absolute;top:1px;left:0}
.br-tbs__bullet-title{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:10px}
.br-tbs__bullet-title strong{display:block;color:#fff;font-size:18px;font-weight:500;line-height:120%}
.br-tbs__bullet-description,.br-tbs__bullet-description p{color:#fff;font-size:15px;font-weight:400;line-height:150%}

/* ---- 5  the yellow "Seen Enough?" band ---------------------------------- */
.ca__midcta{background:#fff;padding:0 15px;gap:30px}
.ca__band{display:flex;gap:0;background:#0461C8;border-radius:40px;overflow:hidden;position:relative}
.ca__band__in{flex:1 1 auto}
.ca__band__in{display:flex;flex-direction:row;align-items:center;justify-content:space-between;
  gap:30px;padding:40px 60px}
.ca__band__copy{display:flex;flex-direction:column;gap:16px}
/* the band's and the closing card's button rows are their own containers: full width,
   their own alignment, and a 10px gap rather than the hero's 30 */
/* Full width only once the band is STACKED. Above 1024 it sits beside the copy, and
   giving it 100% there squeezed the paragraph onto a third line at 1100. */
.ca__band .ca__ctarow{justify-content:flex-end}
@media(max-width:1024px){.ca__band .ca__ctarow{width:100%;gap:10px}}
.ca__endcta .ca__ctarow{width:100%;justify-content:center;gap:10px}
.ca__band__h{font-size:36px;line-height:1.1;font-weight:500;color:#fff;margin:0}
.ca__band p{font-size:18px;line-height:29px;color:#fff;margin:0}
@media(max-width:1024px){
  .ca__band,.ca__band__in{flex-direction:column}
  .ca__band__in{align-items:center;gap:30px}
  /* stacked, the copy and the button row still span the padded box */
  .ca__band__copy,.ca__band .ca__ctarow{width:100%}
  .ca__band__copy{text-align:center}
  .ca__band .ca__ctarow{justify-content:center}
  .ca__band__h{font-size:24px;line-height:1.1}
}
/* the band keeps its 40px 60px padding all the way down -- upstream ships no mobile
   override for it, and assuming one cost 20px at 767 */
@media(max-width:767px){.ca__band__h{line-height:1.25}}

/* ---- 6  the G2 comparison table ----------------------------------------- */
.ca__g2{background:#fff;padding:120px 15px;gap:30px}
.ca__g2__in{display:flex;flex-direction:column;gap:40px}
.ca__g2__tablewrap{overflow-x:auto}
.comparison-table{width:100%;border-collapse:collapse;border:1px solid #000;table-layout:fixed;
  font-size:16px;margin:0 0 15px}
.comparison-table th:nth-child(1),.comparison-table td:nth-child(1){width:50%}
.comparison-table th:nth-child(2),.comparison-table td:nth-child(2),
.comparison-table th:nth-child(3),.comparison-table td:nth-child(3){width:25%}
.comparison-table img{border-radius:0}
.comparison-table th,.comparison-table td{padding:22px 28px;text-align:center;border:1px solid #000}
.comparison-table thead th{background-color:#000;color:#fff;border-bottom:none;padding:16px 28px;
  vertical-align:middle;font-size:12px;line-height:18px;font-weight:700;letter-spacing:.5px}
.comparison-table thead th:first-child{text-align:left}
.brand-name{font-size:12px;letter-spacing:.3px}
.brand-subtitle{font-size:9px;line-height:1.5;font-weight:400;color:#ccc;letter-spacing:.3px;margin-top:2px}
.bloomreach-header{display:flex;align-items:center;justify-content:center;gap:8px}
.comparison-table tbody td{font-size:16px;line-height:24px;font-weight:500;color:#111}
.comparison-table tbody td:first-child{text-align:left;background:#fff}
.comparison-table tbody tr td:nth-child(2){border-left:1px solid #000;border-right:1px solid #000;background:#fff}
.comparison-table tbody tr td:nth-child(3){color:#fff;background-color:#0461C8;border-right:1px solid #000}
.comparison-table tbody tr:last-child td{border-bottom:none}
@media(max-width:1024px){
  .comparison-table th,.comparison-table td{padding:12px 10px}
  .comparison-table thead th{padding:12px 10px}
}
.ca__g2__source{font-size:16px;line-height:26px;color:var(--text);margin:0}
.ca__g2__source a{color:#000}

/* ---- 7  the roadmap section and its reveal ------------------------------ */
.ca__road{padding:120px 15px;gap:0;overflow:hidden;z-index:20}
.ca__road::before,.ca__road::after{content:"";display:block;position:absolute;z-index:1;
  width:934px;height:802px;transform:translate(-50%,-50%);border-radius:50%;pointer-events:none}
.ca__road::before{top:30%;left:100%;filter:blur(200px);
  background:linear-gradient(25deg,rgba(1,154,206,.8) 56.87%,rgba(1,206,127,.8) 76.42%)}
.ca__road::after{top:80%;left:-10%;background:rgba(1,121,248,.6);filter:blur(255px)}
@media(max-width:1024px){.ca__road::before,.ca__road::after{opacity:.3}}
.ca__road__in{position:relative;z-index:5;display:flex;flex-direction:column;gap:40px;align-items:flex-start}
.ca__road .ca__head__sub{color:#fff;max-width:none}
.ca__road__btn{display:flex}
/* the caret is a ::after carrying the character itself -- 15.7px wide with a 10px
   margin, which is 26 of the button's 300px width */
#show-left-right::after{content:"\25BC";display:inline-block;margin-left:10px}
/* upstream slides the button away as the block opens, so there is no open state to style */
#show-left-right[hidden]{display:none}
.ca__road__wrap{position:relative;z-index:5;display:flex;flex-direction:row;gap:120px;margin-top:80px}
.ca__road__wrap[hidden]{display:none}
.ca__road__left,.ca__road__right{display:flex;flex-direction:column;gap:30px;width:50%}
.ca__road__h3{font-size:36px;line-height:45px;font-weight:500;color:#fff;margin:0}
.ca__road__p,.ca__road__p p{font-size:16px;line-height:26px;color:#fff;margin:0}
.ca__road__pair{display:flex;flex-direction:column;gap:5px;color:#fff}
.ca__road__left svg,.ca__road__right svg{display:block;max-width:100%;height:auto}
@media(max-width:1024px){
  .ca__road__wrap{flex-direction:column;gap:40px}
  .ca__road__left,.ca__road__right{width:100%}
}

/* ---- 8  the three quote cards ------------------------------------------- */
.ca__quotes{background:#fff;padding:120px 15px;gap:30px}
.ca__quotes__in{display:flex;flex-direction:column;gap:80px}
.ca__quotes__row{display:flex;flex-direction:row;gap:30px}
.colz{display:flex;flex-direction:column;gap:20px;width:100%}
.colz-img img{display:block;width:100%;height:auto;border-radius:20px}
/* The chip row is nowrap by default -- the two pills share the line and shrink, wrapping
   their own text. It is Elementor's --flex-wrap-mobile:wrap that lets it break, below 768. */
.colz-labels{display:flex;flex-direction:row;flex-wrap:nowrap;gap:10px}
/* Elementor resets min-width:0 on its containers, so a chip wrapper SHRINKS to share the
   row and its pill wraps inside. With min-width:auto the wrapper keeps its max-content and
   the ROW wraps instead -- a 10px difference at 900 and the wrong shape besides. */
.colz-labels > div{min-width:0;max-width:100%}
.colz-labels span{color:#fff;font-size:12px;font-weight:500;line-height:12px;
  padding:3px 8px 2px;background:#0461C8;border-radius:100px}
.colz-text,.colz-text p{color:#000;font-size:24px;line-height:1.6;margin:0}
/* the block's own 14px/2 sets the ROLE row's line box (28px); the name row carries its
   own 15/24. Without it the role row inherits 16/26 and the card is 2px short. */
.colz-name{display:flex;flex-direction:column;gap:0;font-size:14px;line-height:2}
.colz-name p{color:#010101;font-size:15px;font-weight:500;line-height:160%;margin:0}
.colz-name span{color:#929292;font-size:15px;font-weight:400;line-height:160%}
.colz-name span a{color:inherit;text-decoration:underline}
.colz-name span a:hover{text-decoration:none}
.ca__badges{display:grid;grid-template-columns:repeat(4,1fr);gap:30px}
.ca__badge img{display:block;width:100%;height:auto}

@media(max-width:575px){.ca__badges{grid-template-columns:1fr}}

/* ---- 9  the migration block and its form -------------------------------- */
/* `--content-width:1720px` at >=768, `--width:48%` on the form, and a gap ladder of
   96/60/40 on the section and 100/30 on the row -- all declared, not measured. */
/* Elementor puts the section's HORIZONTAL padding on the outer box and its vertical
   padding on the inner, so `--padding:120px 15px` lands as 0/15 and 120/0. */
.ca__migrate{background:#000;padding:0 15px}
.ca__migrate__in{width:100%;max-width:1720px;margin-inline:auto;display:flex;flex-direction:column;
  align-items:center;justify-content:flex-start;gap:96px;padding:120px 0}
.ca__migrate__row{display:flex;flex-direction:row;justify-content:space-evenly;align-items:center;
  gap:100px;width:100%;max-width:1200px;margin-inline:auto}
/* Upstream gives the columns `--width:52%` / `--width:48%` with `flex:0 1 auto`; the two
   percentages plus the 100px gap overflow the 1200 row, so both shrink to fit. */
.ca__migrate__left{flex:0 1 auto;width:52%;display:flex;flex-direction:column;
  align-items:flex-start;gap:24px}
.ca__migrate .ca__h2{font-size:50px;line-height:55px}
@media(max-width:1024px){.ca__migrate .ca__h2{font-size:30px;line-height:33px}}
@media(max-width:767px){.ca__migrate .ca__h2{font-size:30px;line-height:38px}}
.ca__migrate__text p{font-size:16px;line-height:26px;color:#fff;margin:0}
.ca__migrate__list{margin:0;padding-left:20px;display:flex;flex-direction:column}
.ca__migrate__list li{font-size:16px;line-height:26px;color:#EAFDFF}
.ca__migrate__list li a{color:#EAFDFF;text-decoration:underline}
.ca__form{flex:0 1 auto;width:48%;display:flex;flex-direction:column;justify-content:center;
  align-items:flex-start;gap:20px;padding:32px;border-radius:20px;background:rgba(255,255,255,.2);
  border:1px solid rgba(255,255,255,.25);max-width:100%}
.ca__form__h{font-size:30px;line-height:33px;font-weight:500;color:#fff;margin:0}
.ca__form__note{font-size:16px;line-height:26px;color:#fff;margin:0}
/* the embed's rhythm, measured off the source: 8px between rows, 18 before the submit */
.ca__form__body{display:flex;flex-direction:column;gap:8px;width:100%}
.ca__form__grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ca__form__submit{margin-top:10px}
.ca__form__in{width:100%;font:inherit;font-size:16px;line-height:26px;color:var(--text);
  padding:10px 16px;background:#fff;border:1px solid #fff;border-radius:16px}
.ca__form__in::placeholder{color:var(--meta)}
.ca__form__in:focus{outline:2px solid #00ACE5;outline-offset:1px}
/* Two grouped fields, 98px each -- the label's own 16px bottom margin does the spacing
   inside the first, and the consent row's 24px does it inside the second. */
.ca__form__interest,.ca__form__consent{display:block}
.ca__form__label{font-size:16px;line-height:26px;font-weight:700;color:#fff;margin:0 0 16px}
.ca__form__choices{display:grid;grid-template-columns:1fr 1fr;gap:16px}
/* the row is 16px leading, but its LABEL SPAN is 14/20 -- which is why "Conversational
   Shopping" still fits one line in a 194px column at 1100 */
.ca__form__check{display:flex;align-items:center;gap:8px;font-size:16px;line-height:16px;color:#fff}
.ca__form__check span{display:flex;align-items:center;font-size:14px;line-height:20px}
/* 18px, not 16 -- it leaves the label 165px at 1024, which is exactly where
   "Conversational Shopping" wraps to a second line and the field becomes 118 tall */
.ca__form__check input{flex:0 1 auto;width:18px;height:18px;min-width:18px;margin:0}
.ca__form__check--consent{width:fit-content;align-items:center;font-size:12px;line-height:16px;margin:0 0 24px}
.ca__form__check--consent span{display:flex;align-items:center;font-size:12px;line-height:14px;
  color:rgba(255,255,255,.8)}
.ca__form__legal,.ca__form__legal p{font-size:12px;line-height:14px;color:#fff;margin:0}
.ca__form__legal a{color:#00ACE5;text-decoration:underline}
.ca__form__submit{width:100%;font:inherit;font-size:16px;line-height:26px;font-weight:500;color:#fff;
  padding:11px 32px;background:#00ACE5;border:0;border-radius:99px;cursor:pointer}
@media(max-width:1024px){
  .ca__migrate__in{gap:60px}
  .ca__migrate__row{gap:30px}
  .ca__form__h{font-size:22px;line-height:1.1}
  .ca__form__in{font-size:14px;line-height:20px;padding:14px 16px}
  .ca__form__grid{grid-template-columns:1fr}
}
@media(max-width:767px){
  .ca__migrate__in{gap:40px;padding:60px 0}
  .ca__form{padding:24px}
  .ca__form__h{font-size:22px;line-height:1.2727}
  /* the choice list stays TWO columns all the way down -- collapsing it to one was 72px
     of extra height at 767 */
}

/* ---- 10  the FAQ --------------------------------------------------------- */
/* the br-faq block this build already ships; only the section shell is new */
.ca__faq{background:#fff;padding:0 15px}
.ca__faq__in{width:100%;max-width:1110px;margin-inline:auto;display:flex;flex-direction:column;
  align-items:center;gap:60px;padding:100px 0 120px}
@media(max-width:1024px){.ca__faq__in{gap:30px;padding:80px 0 60px}}
@media(max-width:767px){.ca__faq__in{gap:30px;padding:60px 0 20px}}
.ca__faq__head{width:100%;max-width:1110px;text-align:center}
.ca__faq .ca__h2{text-align:center}
.ca__faq .br-faq{width:100%;max-width:1000px}

/* ---- 11  the closing CTA -------------------------------------------------- */
/* upstream paints the card with a ::before overlay, not a background on the box */
.ca__endcta{background:#000;display:flex;flex-direction:column}
.ca__endcta__in{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  gap:96px;padding:120px 0 160px}
.ca__endcta__card{position:relative;z-index:5;display:flex;flex-direction:row;justify-content:center;
  padding:100px;border-radius:40px}
.ca__endcta__card::before{content:"";position:absolute;inset:0;z-index:-1;
  background-color:#0461C8;border-radius:40px}
.ca__endcta__copy{display:flex;flex-direction:column;align-items:center;gap:30px;max-width:900px}
.ca__endcta__h{font-size:60px;line-height:1.1;font-weight:500;color:#000;margin:0;text-align:center}
.ca__endcta p{font-size:24px;line-height:34px;color:#000;margin:0;text-align:center}
@media(max-width:1024px){
  .ca__endcta__in{gap:60px}
  .ca__endcta__h{font-size:36px;line-height:1.1}
  .ca__endcta p{font-size:18px;line-height:29px}
}
@media(max-width:767px){
  .ca__endcta__h{font-size:36px;line-height:1.25}
  .ca__endcta__card{flex-wrap:wrap;padding:40px 20px}
  .ca__endcta__in{padding:60px 0;gap:40px}
}

/* ---- the mobile ladder, section by section, from post-78064.css ---------- */
@media(max-width:767px){
  .ca__hero{padding:40px 15px 0}
  .ca__logos{padding:40px 15px 0}
  .ca__keys{padding:40px 15px 60px}
  .ca__pain{padding:40px 15px 0}
  .ca__only{padding:40px 15px 0}
  .ca__midcta{padding:60px 15px 0}
  .ca__g2{padding:60px 15px}
  .ca__road{padding:60px 15px}
  .ca__quotes{padding:60px 15px}
  /* Elementor's --flex-wrap-mobile:wrap with the children at 100%: both of these rows
     stack below 768, and neither does anything at 1024 */
  .ca__keys__row,.ca__quotes__row,.ca__migrate__row{flex-wrap:wrap}
  /* flex:0 0 100%, not width:100% -- these items carry a flex-basis that would win */
  .key-box,.colz,.ca__migrate__left,.ca__form{flex:0 0 100%;width:100%}
  .ca__quotes__in{gap:40px}
  /* Elementor's --flex-wrap-mobile:wrap -- one button per line below 768, rather than
     squeezing both and letting the labels wrap inside them */
  .ca__ctarow,.colz-labels{flex-wrap:wrap}
  /* the badge row is a single column with a 10px gap below 768, not a 30px grid */
  .ca__badges{grid-template-columns:1fr;gap:10px}
}


/* ============================================================
   22. GAMEMANTRA AI  (.p-ai)
   The AI platform page, rebuilt from loomi-ai.htm. The three component families
   below — .ltabs, .lswitch, .lanim — are the SOURCE'S OWN hand-written CSS, ported
   verbatim (only the orb URL repointed at static/img/gm-ai-orb-dark.webp). They are not a new
   invention: matching this page means carrying its components, as every other page in
   this project carries its source's. Everything after them is measured off the source:
   hero 48/52.8 centred on a 1075px orb at .2 opacity, intent head 60/66 with the
   highlight, the dashed/gradient comparison panels, the quote, the yellow CTA and the
   wordmark band.
   ============================================================ */
/* ---- source block 40 ---- */
    .ltabs {
        --anim-def: 200ms ease-in-out;
        --anim-long: 600ms ease-out;
        display: flex;
        flex-direction: column;
        gap: 0;
        width: 100%;
        max-width: calc(1240px + 15vw);
        margin: 0 auto;
        color: #fff;
        padding-left: 7.5vw;
        padding-right: 7.5vw;
    }
@media (max-width: 1500px) {
        .ltabs {
            max-width: calc(1240px + 80px);
            padding-left: 40px;
            padding-right: 40px;
        }
    }
@media (max-width: 1340px) {
        .ltabs {
            max-width: calc(1240px + 40px);
            padding-left: 20px;
            padding-right: 20px;
        }
    }
@media (max-width: 1199px) {
        .ltabs {
            max-width: 100%;
            padding-left: 15px;
            padding-right: 15px;
            padding-bottom: var(--pad-def);
        }
    }
.ltabs-tabs {
        position: relative;
        z-index: 10;
        display: flex;
        gap: 0;
        margin: 0 auto;
    }
@media (max-width: 1199px) {
        .ltabs-tabs {
            order: 20;
            gap: 8px;
            width: calc(100% + 30px);
            overflow-x: auto;
            overflow-y: hidden;
            padding: 0 15px;
            margin-bottom: 20px;
            margin-left: -15px;
        }
    }
.ltabs-tab {
        position: relative;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 16px;
        width: 270px;
        height: 70px;
        font-size: 14px;
        font-weight: 500;
    }
@media (max-width: 1199px) {
        .ltabs-tab {
            white-space: nowrap;
            width: auto;
            height: 40px;
            padding: 2px 30px 0;
            border-radius: 100px;
        }
    }
@media (max-width: 767px) {
        .ltabs-tab {
            white-space: nowrap;
            width: auto;
            height: 30px;
            padding: 2px 12px 0;
            border-radius: 100px;
        }
    }
.ltabs-tab span {
        opacity: .5;
        transition: opacity var(--anim-def);
    }
.ltabs-tab:hover span {
        opacity: .8;
    }
.ltabs-tab.active span {
        opacity: 1;
    }
@media (max-width: 1199px) {
        .ltabs-tab span {
            display: none;
        }
    }
.ltabs-tab:after {
        content: '';
        position: absolute;
        z-index: 5;
        top: 100%;
        left: 0;
        width: 100%;
        height: 1px;
        background: rgba(255,255,255,.2);
        transform-origin: center bottom;
        transition: background var(--anim-def);
    }
.ltabs-tab:hover:after {
        transform: scale(1,2);
        background: rgba(255,255,255,.6);
    }
.ltabs-tab.active:after {
        transform: scale(1,2);
        background: var(--gm-kartikeya-gold);
    }
@media (max-width: 1199px) {
        .ltabs-tab:after {
            content: none !important;
        }
        .ltabs-tab:before {
            content: "";
            position: absolute;
            inset: 0;
            background: #fff;
            border-radius: inherit;
            padding: 1px;
            -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
            mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
            -webkit-mask-composite: xor;
            mask-composite: exclude;
        }
        .ltabs-tab {
            opacity: .7;
        }
        .ltabs-tab.active {
            opacity: 1;
        }
        .ltabs-tab.active:before {
            background: var(--gm-coin-ring);
        }
    }
.ltabs-contents {
        position: relative;
        z-index: 10;
        aspect-ratio: 1200/860;
    }
@media (max-width: 1199px) {
        .ltabs-contents {
            order: 30;
            aspect-ratio: auto;
        }
    }
.ltabs-content {
        pointer-events: none;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        opacity: 0;
        transition: opacity var(--anim-long);  
    }
@media (max-width: 1199px) {
        .ltabs-content {
            height: auto;
        }
    }
.ltabs-content.active {
        pointer-events: auto;
        opacity: 1;
    }
.ltabs-content__text {
        position: absolute;
        left: 0;
        bottom: 250px;
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        justify-content: flex-end;
        width: 100%;
        max-width: 480px;
        height: auto;
    }
@media (max-width: 1199px) {
        .ltabs-content__text {
            position: static;
            max-width: none;
        }
    }
.ltabs-content__label {
        position: relative;
        font-size: 13px;
        font-weight: 500;
        line-height: 2.3;
        padding: 3px 16px 0;
        border-radius: 100px;
        margin-bottom: 48px;
        opacity: 0;
        transform: translateX(-30px);
        transition: opacity var(--anim-long), transform var(--anim-long);
        transition-delay: 200ms;
    }
@media (max-width: 1199px) {
        .ltabs-content__label {
            display: none !important;
        }
    }
.ltabs-content.active .ltabs-content__label {
        opacity: 1;
        transform: translateX(0);
    }
.ltabs-content__label:before {
        content: "";
        position: absolute;
        inset: 0;
        background: var(--gradient);
        border-radius: inherit;
        padding: 1px;
        -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
        mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
        -webkit-mask-composite: xor;
        mask-composite: exclude;
    }
.ltabs-content__h {
        color: #fff !important;
        max-width: 310px;
        opacity: 0;
        transform: translateX(-30px);
        transition: opacity var(--anim-long), transform var(--anim-long);
        transition-delay: 400ms;
    }
@media (max-width: 1199px) {
        .ltabs-content__h {
            max-width: none;
        }
    }
.ltabs-content.active .ltabs-content__h {
        opacity: 1;
        transform: translateX(0);
    }
.ltabs-content__p {
        margin-top: 32px;
        opacity: 0;
        transform: translateX(-30px);
        transition: opacity var(--anim-long), transform var(--anim-long);
        transition-delay: 600ms;
    }
@media (max-width: 1199px) {
        .ltabs-content__p {
            margin-top: 16px;
        }
    }
.ltabs-content.active .ltabs-content__p {
        opacity: 1;
        transform: translateX(0);
    }
.ltabs-content__img {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        right: 0;
        width: 100%;
        max-width: 488px;
        height: auto;
    }
.ltabs-content__img img {
        display: block;
        width: 100%;
        height: auto;
        object-fit: contain;
    }
.ltabs-arrows {
        position: absolute;
        z-index: 50;
        left: calc(50% - 620px);
        bottom: 160px;
        display: flex;
        align-items: center;
        justify-content: flex-start;
        gap: 8px;
    }
@media (max-width: 1280px) {
        .ltabs-arrows {
            left: 20px;
        }
    }
@media (max-width: 1199px) {
        .ltabs-arrows {
            order: 40;
            position: static;
            margin-top: 20px;
        }
    }
.ltabs-arrow {
        padding: 0;
        border: 0;   /* ours are <button>; upstream used <div> */
        display: flex;
        align-items: center;
        justify-content: center;
        width: 52px;
        height: auto;
        aspect-ratio: 1/1;
        background: var(--gm-himalayan-blue-on-white);
        border-radius: 50%;
        cursor: pointer;
        transition: transform var(--anim-def);
    }
.ltabs-arrow:hover {
        transform: scale(1.1);
    }
.ltabs-arrow svg {
        width: 19px;
    }
.ltabs-bgs {
        pointer-events: none;
        position: absolute;
        z-index: 1;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
    }
@media (max-width: 1199px) {
        .ltabs-bgs {
            order: 10;
            position: relative;
            width: 100%;
            height: 400px;
            transform: translateY(-10%);
        }
    }
@media (max-width: 767px) {
        .ltabs-bgs {
            height: auto;
            aspect-ratio: 5/4;
        }
    }
.ltabs-bg {
        position: absolute;
        opacity: 0;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        transition: opacity var(--anim-long);
    }
@media (max-width: 1199px) {
        .ltabs-bg {
            transform: scale(1.3);
        }
    }
.ltabs-bg.active {
        opacity: 1;
    }
.ltabs-bg img {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        object-fit: contain;
        border-radius: 0 !important;
    }
@media (max-width: 767px) {
        .ltabs-bg img {
            object-position: 70% 50%;
        }
    }
/* ---- source block 42 ---- */
.lanim {
    --lanim-transition: 600ms ease-out;
    display: flex;
    align-items: stretch;
    justify-content: space-between;
}
@media (max-width: 1199px) {
    .lanim {
        flex-direction: column;
    }
}
.lanim-circle {
    flex: 1 1 0;
}
@media (min-width: 1200px) and (max-width: 1300px) {
  .lanim-circle {
      left: calc(100vw - 1300px);
  }
}
@media (max-width: 1199px) {
    .lanim-circle {
        flex: 1;
    }
}
.lanim-text {
    position: relative;
    z-index: 10;
    flex: 0 0 500px;
}
@media (max-width: 1199px) {
    .lanim-text {
        flex: 1;
    }
}
@media (max-width: 767px) {
    .lanim-text {
        display: flex;
        flex-direction: column;
    }
}
.lanim-text .br-cta {
    float: left;
    margin-bottom: 100px;
}
@media (max-width: 767px) {
    .lanim-text .br-cta {
        float: none;
        margin: 0 auto 60px;
    }
}
.lanim-text-item {
    opacity: .6;
    filter: blur(5px);
    margin: 150px 0;
    transition: opacity var(--lanim-transition), filter var(--lanim-transition);
}
@media (max-width: 1199px) {
    .lanim-text-item {
      padding-right: calc(40vw - 30px);
      margin: 100px 0;
    }
}
.lanim-text-item.active {
    opacity: 1;
    filter: blur(0);
}
.lanim-text-item h3 {
    color: #fff;
    font-size: 24px;
    margin-bottom: 24px;
}
.lanim-text-item p {
    color: var(--gm-moon-silver);
    font-size: 16px;
    line-height: 1.6;
    margin-bottom: 24px;
}
.lanim-text-item-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    opacity: 0;
    transition: opacity var(--lanim-transition);
}
.lanim-text-item.active .lanim-text-item-tags {
    opacity: 1;
}
.lanim-text-item-tags span {
    position: relative;
    display: block;
    color: #fff;
    font-size: 16px;
    font-weight: 500;
    line-height: 1;
    padding: 8px 10px 6px;
    border-radius: 100px;
}
.lanim-text-item-tags span:before {
    content: "";
    position: absolute;
    inset: 0;
    background: var(--gm-coin-ring);   /* the site's pill ring, as .ai__pill and .hero__copy .caps */
    border-radius: inherit;
    padding: 1px;
    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor;
    mask-composite: exclude;
}
.lanim-text-item-logos {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: 16px;
    margin-top: 20px;
}
.lanim-text-item-logos img {
    height: auto !important;
    border-radius: 0 !important;
}
.lanim-circle {
    position: relative;
    z-index: 1;
}
.lanim-circle-bg {
    position: absolute;
    z-index: 1;
    left: -120px;
    width: 680px;
    height: auto;
    aspect-ratio: 1/1;
}
@media (max-width: 1199px) {
  .lanim-circle-bg {
      left: auto !important;
      right: -120px !important;
      width: 60vw;
  }
}
.lanim-circle-move-rotate {
    position: absolute;
    z-index: 5;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    animation: lanimcirclerotate 5s linear infinite;
}
.lanim-circle-move {
    position: absolute;
    z-index: 5;
    top: 0;
    left: 0;
    transform: scale(.2);
    width: 100%;
    height: 100%;
    /* it no longer paints: the veil on .lanim-circle-static is the effect now, and this
       element is what carries the zoom step for it. */
    border-radius: 100%;
    transition: transform var(--lanim-transition);
}
.lanim-circle-move.zoom-2 {
    transform: scale(.4);
}
.lanim-circle-move.zoom-3 {
    transform: scale(.6);
}
.lanim-circle-move.zoom-4 {
    transform: scale(.8);
}
.lanim-circle-move.zoom-5 {
    transform: scale(1);
}
.lanim-circle-static {
    position: absolute;
    z-index: 10;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url(https://media.gamemantra.ai/static/img/gm-ai-orb-dark.webp) no-repeat left center;
    background-size: contain;
    animation: lanimbgrotate 160s linear infinite;
}
.lanim-circle-line {
    position: absolute;
    z-index: 15;
    width: 40%;
    height: 1px;
    top: 50%;
    left: 66%;
    background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,1));
}
@media (max-width: 1199px) {
    .lanim-circle-line {
        display: none;
    }
}
.lanim-circle-line:after {
    content: "";
    position: absolute;
    z-index: 15;
    top: -3px;
    left: 100%;
    width: 7px;
    height: 7px;
    background: #fff;
    border-radius: 100%;
}
.lanim-circle-line span {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    left: 120%;
    color: #fff;
    font-size: 24px;
    font-weight: 500;
    line-height: 1;
}
/* ---- source block 43 ---- */
.lswitch-wrapper{background:#fff;color:var(--gm-earth);padding-bottom:96px}
/* mirrors the .bragents rule below so the light state beats the page's own white type
   (.p-ai .ai__h2 is #fff, .ai__sub var(--gm-moon-silver)); .bragents is the more specific of the two
   and both are !important, so the dark state still wins when the class is on. */
.lswitch-wrapper h1,
.lswitch-wrapper h2,
.lswitch-wrapper h3,
.lswitch-wrapper h4,
.lswitch-wrapper p{color:var(--gm-earth)!important}
    .lswitch-wrapper.bragents {
        background: var(--gm-shiva-indigo) !important;
    }
.lswitch-wrapper.bragents h1,
    .lswitch-wrapper.bragents h2,
    .lswitch-wrapper.bragents h3,
    .lswitch-wrapper.bragents h4,
    .lswitch-wrapper.bragents p {
        color: #fff !important;
    }
.lswitch {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 16px;
        cursor: pointer;
        /* upstream takes this 64 from the Elementor container's gap; measured on the
           source at 1440: sub bottom 8047 -> switch top 8111 */
        margin-top: 64px;
    }
@media (max-width: 600px) {
      .lswitch {
          gap: 10px;
      }
    }
.lswitch-item {
        opacity: 1;
        color: var(--gm-earth);
        font-size: 16px;
        font-weight: 500;
        line-height: 1;
        padding-top: 2px;
        transition: opacity 300ms ease-in-out;
    }
@media (max-width: 600px) {
      .lswitch-item {
          font-size: 12px;
          text-align: right;
      }
    }
.lswitch-item--agents {
        opacity: .4;
    }
@media (max-width: 600px) {
      .lswitch-item.lswitch-item--agents {
          text-align: left;
      }
    }
.lswitch-section .lslider-arrows {
      display: none;
    }
@media (max-width: 767px) {
      .lswitch-section .lslider-arrows {
        display: flex;
        margin-top: 20px;
      }
    }
.lswitch-wrapper.bragents .lswitch-item {
        opacity: .4;
        color: #fff;
    }
.lswitch-wrapper.bragents .lswitch-item--agents {
        opacity: 1;
        background: var(--gradient);
        background-clip: text;
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
    }
.lswitch-toggle {
        position: relative;
        width: 52px;
        height: 28px;
        background: var(--gm-shiva-indigo);
        border-radius: 100px;
        transform: rotate(180deg);
    }
@media (max-width: 600px) {
      .lswitch-toggle {
          position: relative;
          width: 40px;
          height: 24px;
          background: var(--gm-shiva-indigo);
          border-radius: 100px;
      }
    }
.lswitch-wrapper.bragents .lswitch-toggle {
        background: linear-gradient(140deg,var(--gm-peacock-teal) 5%, var(--gm-himalayan-blue) 40%, var(--gm-kartikeya-gold) 90%);
    }
.lswitch-toggle span {
        position: absolute;
        top: 4px;
        left: 4px;
        width: 20px;
        height: auto;
        aspect-ratio: 1/1;
        background: #fff;
        border-radius: 100px;
        transition: transform 300ms ease-in-out;
    }
@media (max-width: 600px) {
        .lswitch-toggle span {
            top: 3px;
            left: 3px;
            width: 18px;
        }
    }
.lswitch-wrapper.bragents .lswitch-toggle span {
        transform: translateX(24px);
    }
@media (max-width: 600px) {
        .lswitch-wrapper.bragents .lswitch-toggle span {
            transform: translateX(16px);
        }
    }
.lswitch-sections {
        width: 100%;
        margin-top: 56px;
    }
@media (max-width: 767px) {
        .lswitch-sections {
            width: calc(100% + 30px);
            margin: 30px -15px 0;
            padding: 0 15px;
        }
        .lswitch-sections .lswiper-def,
        .lswitch-sections .lswiper-agents {
            overflow: visible !important;
        }
    }
.lswitch-section {
        display: block;
    }
.lswitch-section--agents {
        display: none;
    }
.lswitch-wrapper.bragents .lswitch-section {
        display: none;
    }
.lswitch-wrapper.bragents .lswitch-section--agents {
        display: block;
    }
@media (min-width: 768px) {
      .lswitch-section .swiper-wrapper {
          display: flex;
          align-items: flex-start;
          justify-content: center;
          gap: 24px;
      }
    }

/* The source's .ltabs-bg is a full-bleed image that overhangs its box; upstream the whole
   page sits inside an Elementor container with overflow:hidden. Ours clips at the section. */
/* Three of the source's pieces overhang their own box: the .ltabs background image, the hero
   orb, and the .lanim circle. Upstream each sits in an Elementor container with
   overflow:hidden; the sections carry it here. */
.p-ai .ltabs,.p-ai .ltabs-contents,.p-ai .ltabs-bgs,.p-ai .ai__hero,.p-ai .ai__wrap{overflow:hidden}
/* .ltabs-bgs is absolute at desktop and belongs to the SECTION, not to .ltabs-contents --
   upstream gets that containing block from the Elementor container wrapping .ltabs. It was
   nested inside .ltabs-contents here, so below 1200, where the ported rule turns it into a
   400px block ordered first, it was sealed inside a 108px box with overflow:hidden and the
   tab photo never appeared on tablet or phone at all. */
/* The tab photo showed a hard rectangle, and the reason is IN THE FILE: all three assets carry
   a black vignette — the outer 6px average 0.7 to 5.7 luminance against centre means of 63 to 70.
   On upstream's black page that vignette IS the page and the shot merges invisibly; on Shiva
   Indigo it is darker than the ground, so it reads as a dark box, and fading its alpha only
   turns the hard edge into a dark band. Screen fixes it at the root: black is a no-op under
   screen, so the baked vignette disappears into whatever the ground is and only the lit part of
   the shot shows. It goes on .ltabs-bgs, not the img — .ltabs-bgs has z-index 1 and is therefore
   a stacking context, so a blend inside it would have no backdrop to work against (the same trap
   as the orb veil). The feather stays for the corners the vignette does not reach. */
/* Give the photo the ground it was exported for, and feather the GROUP. Screen was the first
   try and it washed the picture out: over Shiva Indigo screen lifts every dark pixel toward the
   ground, so the shot came back milky — upstream gets away with screen-like merging only because
   its ground is black, where screen is a no-op. A black plate behind the shot restores exactly
   the condition the vignette was baked for, and masking the plate and the image together fades
   the pair into the page. Full contrast, no rectangle, no wash, no extra bytes. */
.p-ai .ltabs{position:relative;
  /* upstream puts a 96px spacer section between the head and the tabs (80 below 1200);
     without it the mobile .ltabs-bgs, which is pulled up 10%, sits on the heading */
  margin-top:96px}
@media(max-width:1199px){.p-ai .ltabs{margin-top:80px}}

/* .br-cta is display:block on this site, so a centred section stretches it; the source's
   buttons are inline pills. Width to content, centred where the section centres. */
.p-ai .ai__hero .br-cta,.p-ai .ai__cta__card .br-cta,.p-ai .lanim-text .br-cta,.p-ai .ai__future__shot .br-cta{
  display:inline-flex;width:fit-content;margin-inline:auto}
/* The closing CTA's button sits ON the gold panel, so the site's gold button had nothing to
   separate from. Himalayan Blue in its WHITE-INK value: the guide sends white-ink fills to
   #007BC4 (4.54:1 against white, where #0EA5FF is 2.68:1 and fails). Flat, because the gold
   button's top-light gradient would carry the fill up to #0EA5FF where the label stops
   clearing. The ripple takes Shiva Indigo, which white clears at 15.94:1. */
.p-ai .ai__cta__card .br-cta{color:#fff;background:var(--gm-himalayan-blue-on-white);
  border-color:var(--gm-himalayan-blue-on-white);
  box-shadow:0 7px 20px rgba(0,123,196,.28),inset 0 1px 0 rgba(255,255,255,.22)}
.p-ai .ai__cta__card .br-cta span{background-color:var(--gm-shiva-indigo)}
.p-ai .ai__cta__card .br-cta:hover{color:#fff;border-color:var(--gm-shiva-indigo);
  box-shadow:0 10px 26px rgba(0,123,196,.34),inset 0 1px 0 rgba(255,255,255,.28)}
/* the source sets .ltabs-content__h from a viewport unit that assumes its own page scale;
   these are its 1440 numbers, held. */
.p-ai .ltabs-content__h{font-size:36px;line-height:39.6px}   /* the source's 1440 numbers */
/* .ltabs-bgs is z-index 1 and the copy has none, so the photo painted over the words.
   Upstream the copy sits in a later Elementor layer; here it needs its own stacking.
   z-index ONLY -- the element is already absolutely positioned by the ported rule, and
   re-declaring position:relative here stacked the three contents in flow instead of
   overlapping them, so tabs 2 and 3 rendered 889px and 1777px below the clipped box. */
.p-ai .ltabs-content{z-index:2}
/* .lanim wants the source's full 1240 inner width (circle 740 + text 500): in a padded wrap
   the circle loses 80px and the connector's number lands on the copy. The section supplies
   the padding, the row keeps the source's box. */
.p-ai .ai__wrap.ai__wrap--flush{padding-inline:0;max-width:none}
/* Without Swiper the three .lslide boxes stack and the two hidden ones leave a hole. Stack
   them on top of each other instead: the active one sets the height, the others fade over it,
   which keeps the source's 400ms opacity transition. */
/* the moving disc goes OVER the ring art and lights it rather than hiding behind it --
   see the note in SESSION_NOTES; screen keeps the artwork at full strength. */
/* ---- the orb veil (user's design, 2026-09-14) ----------------------------------------
   The artwork wears the theme by default -- stone var(--gm-stone) into earth var(--gm-earth) -- and each step
   forward OPENS that veil over the area the moving circle covers, so the artwork's own colour
   comes back through the hole. The earlier build screened the circle over the art, which added
   white to that area; this removes the veil instead, which is what was asked for.

   The veil is a pseudo-element of the art, so `mix-blend-mode:color` has the artwork as its
   backdrop (both live in .lanim-circle-static's own stacking context) -- the same trap as
   before: on the moving circle it would have had no backdrop at all.

   The hole is a radial mask whose SIZE is animated; a gradient's stops are not animatable but
   mask-size is, so the reveal runs on the component's own 600ms. The step lives on
   .lanim-circle-move, where the source's JS puts it, and :has() reads it from here -- the
   circle itself no longer paints, it is the state carrier for the reveal. */
/* The glow un-pins at the last item and scrolls up out of the viewport while the rest of the
   section is still on screen — upstream does exactly the same, and the section's tail is only
   378px, so a 680px disc cannot stay whole there either way. What makes OUR cut read as a fault
   is the artwork: upstream's fractal fades to nothing at its rim, ours has a hard luminous edge,
   so the same geometry draws a straight bright line across the top of the disc. The rim is
   feathered to match, and the cut stops being visible. */
.p-ai .lanim-circle-static{
  -webkit-mask-image:radial-gradient(circle,#000 38%,rgba(0,0,0,0) 50%);
          mask-image:radial-gradient(circle,#000 38%,rgba(0,0,0,0) 50%)}
.p-ai .lanim-circle-move-rotate{z-index:12}
.p-ai .lanim-circle-static::after{
  content:"";position:absolute;inset:0;border-radius:100%;pointer-events:none;
  background:linear-gradient(198deg,var(--gm-stone) 10.06%,var(--gm-earth) 89.69%);
  /* a plain overlay at .78, so the area actually wears the two colours. Two blend modes
     were tried and rejected on the render: `color` keeps the artwork's luminance and this
     art is bright, so a low-saturation veil read as SILVER; `multiply` only dimmed the
     art's own hues instead of laying stone and earth over them. */
  opacity:.78;
  /* two mask layers, XORed: a full-cover layer minus the growing disc = a hole. A single
     no-repeat layer does NOT work -- everything outside a mask image is masked out, so the
     veil would have existed only inside the 20% box instead of everywhere but it. */
  -webkit-mask-image:radial-gradient(circle,#000 35%,#0000 50%),linear-gradient(#000 0 0);
          mask-image:radial-gradient(circle,#000 35%,#0000 50%),linear-gradient(#000 0 0);
  -webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;
  -webkit-mask-position:center,center;mask-position:center,center;
  -webkit-mask-size:20% 20%,100% 100%;mask-size:20% 20%,100% 100%;
  -webkit-mask-composite:xor;mask-composite:exclude;
  transition:-webkit-mask-size var(--lanim-transition),mask-size var(--lanim-transition)}
.p-ai .lanim-circle-bg:has(.zoom-2) .lanim-circle-static::after{-webkit-mask-size:44% 44%,100% 100%;mask-size:44% 44%,100% 100%}
.p-ai .lanim-circle-bg:has(.zoom-3) .lanim-circle-static::after{-webkit-mask-size:68% 68%,100% 100%;mask-size:68% 68%,100% 100%}
.p-ai .lanim-circle-bg:has(.zoom-4) .lanim-circle-static::after{-webkit-mask-size:92% 92%,100% 100%;mask-size:92% 92%,100% 100%}
.p-ai .lanim-circle-bg:has(.zoom-5) .lanim-circle-static::after{-webkit-mask-size:140% 140%,100% 100%;mask-size:140% 140%,100% 100%}
/* Upstream's carousel section is a LIGHT one — white ground, dark ink — on an otherwise dark
   page, exactly as .lswitch-wrapper's default state is. This build had it on indigo with the
   ported type colours flipped to white; the colours go back to dark and the wrapper carries the
   ground, which has to be full width (.ai__wrap caps at 1320). */
.p-ai .lslider-wrapper{background:#fff;color:var(--gm-earth);padding-bottom:96px}
/* upstream wraps this section in 96px white spacers top and bottom; the head's own 96px
   top padding is the first one, this is the second. The white ran 1024 against its 1232. */
.p-ai .lslider-wrapper h2,.p-ai .lslider-wrapper h3{color:var(--gm-shiva-indigo)}
.p-ai .lslider-wrapper p{color:var(--gm-earth)}
.p-ai .lslider{position:relative}
.p-ai .lslide{position:absolute;top:0;left:0;width:100%;pointer-events:none}
.p-ai .lslide.swiper-slide-active{position:relative;pointer-events:auto}
/* the slide copy is black upstream because that section is white; this page is dark */
.p-ai .lslide-txt__h{font-size:50px;line-height:55px;font-weight:500;margin:0}   /* the source's */
.p-ai .ai__wrap--flush .lanim{max-width:1240px;margin-inline:auto}
.p-ai .ltabs-content__p{font-size:16px;line-height:26px}


/* the source's .lslide carousel and the two orb keyframes, ported with the rest */
/* ---- source block 41 ---- */
.lslider {
    overflow: visible !important;
}
.lslider img {
    border-radius: 0 !important;
}
.lslide-wrapper {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 40px;
}
@media (max-width: 767px) {
    .lslide-wrapper {
        flex-direction: column-reverse;
        gap: 20px;
    }
}
.lslide {
    opacity: 0;
    transition: opacity 400ms ease-out;
}
.lslide.swiper-slide-active {
    opacity: 1;
}
.lslide-txt {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 28px;
    width: 50%;
    max-width: 500px;
    padding-bottom: 20px;
}
@media (max-width: 767px) {
    .lslide-txt {
        gap: 16px;
        width: 100%;
        max-width: none;
    }
}
.lslide-txt__logo {
    margin-bottom: -10px;
}
@media (max-width: 767px) {
    .lslide-txt__logo {
        transform: scale(.8);
        transform-origin: left center;
        margin-bottom: 0;
    }
}
.lslide-txt__h {
    color: var(--gm-shiva-indigo) !important;
    text-wrap: balance;
}
.lslide-txt__labels {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: 4px;
}
.lslide-txt__labels span {
    color: var(--gm-earth);
    font-size: 12px;
    font-weight: 500;
    line-height: 1;
    padding: 5px 8px 4px;
    background: var(--gm-kartikeya-gold);
    border-radius: 100px;
}
.lslide-txt__p {
    color: var(--gm-earth);
    font-size: 15px;
    line-height: 1.8;
}
.lslide-txt__stat {
    position: relative;
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    width: 290px;
    gap: 8px;
    padding: 20px 0;
}
@media (max-width: 767px) {
    .lslide-txt__stat {
        width: 200px;
    }
}
.lslide-txt__stat:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: var(--gradient);
}
.lslide-txt__stat strong {
    color: var(--gm-shiva-indigo);
    font-size: 48px;
    line-height: 1;
}
@media (max-width: 767px) {
    .lslide-txt__stat strong {
        font-size: 24px;
    }
}
.lslide-txt__stat span {
    color: var(--gm-earth);
    font-size: 15px;
    line-height: 1.5;
}
@media (max-width: 767px) {
    .lslide-txt__stat span {
        font-size: 14px;
    }
}
.lslide-img {
    width: 50%;
    max-width: 600px;
}
@media (max-width: 767px) {
    .lslide-img {
        width: 100%;
        max-width: none;
    }
}
.lslider .lslide-img img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 600/720;
    object-fit: cover;
    border-radius: 20px !important;
}
@media (max-width: 767px) {
    .lslider .lslide-img img {
        aspect-ratio: 1/1;
    }
}
.lslider-arrows {
    position: absolute;
    left: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;
}
@media (max-width: 1199px) {
    .lslider-arrows {
        position: static;
    }
}
.lslider-arrow {
    padding: 0;
    border: 0;   /* ours are <button>; upstream used <div> */
    cursor: pointer;
    position: static;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: auto;
    aspect-ratio: 1 / 1;
    background: var(--gm-himalayan-blue-on-white);
    border-radius: 50%;
    margin: 0 !important;
    transition: transform 200ms ease-out, opacity 200ms ease-out;
}
.lslider-arrow:hover {
    transform: scale(1.1);
}
.lslider-arrow:before,
.lslider-arrow:after {
    content: none !important;
}
.lslider-arrow svg {
    width: 19px;
}
.lslider-arrow svg path {
    stroke: #fff;
}
@keyframes lanimcirclerotate {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}
@keyframes lanimbgrotate {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(-360deg);
    }
}

/* --- the page's own frame ------------------------------------------------------- */
.p-ai{background:var(--gm-shiva-indigo);color:#fff;
  /* the source's :root token, which three of the ported rules read */
  /* WRONG REGISTER, caught in the gradient sweep: the bulk swap sent all three #019ACE to the
     white-ink value, and one of them was this decorative ramp. #007BC4 is for fills that carry
     white text; a gradient stop takes the token itself, or the ramp goes muddy in the middle. */
  --gradient:linear-gradient(90deg,var(--gm-peacock-teal) 0%,var(--gm-himalayan-blue) 12.98%,var(--gm-kartikeya-gold) 41.35%);
  /* the source's other :root token, and it was missing too: `.ltabs` reads it for its bottom
     padding below 1200, so the tab section had NO bottom padding on tablet or phone (measured
     0px against the source's 80 and 60). Upstream puts it on main.site-main. */
  --pad-def:96px}
@media(max-width:1199px){.p-ai{--pad-def:80px}}
@media(max-width:767px){.p-ai{--pad-def:60px}}
/* upstream: .lsec pads 40px and its INNER caps at 1240, so the content box is 1240 --
   a 1240 max-width on a border-box wrap leaves 1160 and every section on this page ran
   80px narrow (carousel, comparison, switch). */
.p-ai .ai__wrap{width:100%;max-width:1320px;margin-inline:auto;padding-inline:40px}
@media(max-width:767px){.p-ai .ai__wrap{padding-inline:15px}}

/* hero: the orb is a 1075px disc at 20%, the source's own gradient and position */
.p-ai .ai__hero{position:relative;overflow:hidden;background:var(--gm-shiva-indigo);padding:223px 15px 163px;text-align:center}
/* the source's hero stack is pill 48 / copy 271 / cta 50 with a 30px gap between the three */
/* The source's hero orb is a 1073px gradient disc at 20% with a BLACK disc blurred 45.9px
   inset 11px on top of it — which is why it reads as a dark halo, not a lit ball. Without the
   inner disc the gradient shows through whole and the hero glares. It was the same
   construction upstream uses for .lanim-circle-move, which has since stopped painting here —
   the veil on .lanim-circle-static took over that job — so this is the only copy of it left.
   Palette: the gold/amber/blue sampled off gm-ai-orb-dark.png, so both orbs match. */
/* The source's own rule (post-32019.css, .elementor-element-38472a63): the orb BREATHES,
   scale 1 -> .94 -> 1 over 7s. My 1073px at scale(.977) was that 1100px orb measured
   mid-breath and frozen there -- the trap is that a still of an animated element reads as
   a static number. Centred on the hero, sized by viewport, inset disc in percentages. */
.p-ai .ai__hero__orb{position:absolute;z-index:0;top:50%;left:50%;width:1400px;height:auto;
  aspect-ratio:1/1;transform:translate(-50%,-50%);border-radius:1110px;opacity:.2;pointer-events:none;
  background:linear-gradient(198deg,var(--gm-kartikeya-gold) 10.06%,var(--gm-shakti-orange) 27.18%,var(--gm-himalayan-blue) 89.69%);
  animation:bgcircle 7s ease-in-out infinite}
@media(max-width:1600px){.p-ai .ai__hero__orb{width:1100px}}
/* upstream also sends it to width:1740px/top:880px below 1200 -- that belongs to a 100vh
   hero, and this one is 770 tall, so it stays centred here. Deliberate divergence. */
@keyframes bgcircle{
  0%{transform:translate(-50%,-50%) scale(1)}
  50%{transform:translate(-50%,-50%) scale(.94)}
  100%{transform:translate(-50%,-50%) scale(1)}}
.p-ai .ai__hero__orb::after{content:"";position:absolute;top:1%;left:1%;width:98%;height:98%;
  border-radius:1090.779px;background:var(--gm-shiva-indigo);filter:blur(45.9px)}
.p-ai .ai__hero > *:not(.ai__hero__orb){position:relative;z-index:2}   /* the orb must keep its own absolute position */
.p-ai .ai__hero::after{content:"";position:absolute;z-index:1;left:var(--mx,50%);top:var(--my,50%);
  width:540px;height:450px;border-radius:50%;pointer-events:none;transform:translate(-50%,-50%);
  /* the orb palette, on upstream's own angle and stops: the artwork's two halves are blue
     and amber, and the glow now reads as the same light as the orbs rather than the
     site's blue/green. */
  background:linear-gradient(269deg,var(--gm-himalayan-blue) 42.21%,var(--gm-shakti-orange) 55.13%);filter:blur(115px);
  opacity:var(--mo,0);transition:opacity 2s}
.p-ai .ai__hero::before{content:"";position:absolute;z-index:2;left:0;bottom:0;width:100%;height:20vh;  /* z2, not the source's 20: their hero is 100vh so the fade clears the copy, mine is 770 and
     the CTA's bottom 17px fell under it. A ::before paints before the element's own children,
     so at 2 it still veils the orb and the glow and never touches the copy. */
  pointer-events:none;background:linear-gradient(180deg,rgba(11,31,77,0),var(--gm-shiva-indigo))}
/* the eyebrow pill: the ring technique the site already uses for .acc__num and the hero eyebrow */
/* the site's eyebrow pill, measured off .hero__copy .caps on index.html: 13/13 w500, the
   indigo wash with a 3px backdrop blur, and the conic --gm-coin-ring rather than the ported
   linear sweep. Uppercased here because the house pill's caps come from its typed copy. */
.p-ai .ai__pill{position:relative;display:inline-block;padding:9px 18px 7px;border-radius:100px;
  font-size:13px;font-weight:500;line-height:13px;color:#fff;text-transform:uppercase;
  background:rgba(11,31,77,.34);backdrop-filter:blur(3px)}
.p-ai .ai__pill::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  pointer-events:none;background:var(--gm-coin-ring);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.p-ai .ai__h1{max-width:800px;margin:32px auto 0;font-size:48px;line-height:52.8px;font-weight:500;color:#fff}
.p-ai .ai__lead{max-width:580px;margin:24px auto 0;font-size:16px;line-height:26px;color:#fff}
.p-ai .ai__hero .br-cta{margin-top:32px}

/* the dark logo wall */
/* the source's wall is 162 tall: a 26px label, 40px gap, the 96px row */
.p-ai .ai__wall{background:var(--gm-shiva-indigo);padding:0 40px;text-align:center}
.p-ai .ai__wall p{margin:0 0 40px;font-size:16px;line-height:26px;color:#fff}
.p-ai .ai__wall__grid{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:16px}
/* the source's cell: 187x96, 20px side padding, 12px radius on rgba(156,156,156,.15),
   16px between cells, and the mark itself capped at 20px tall inside a 147px slot */
.p-ai .ai__wall__grid{gap:16px}
/* one row, as upstream: the cells share the width rather than wrapping (upstream fits eight
   at 187; seven share the same 1360 here) */
.p-ai .ai__wall__grid{flex-wrap:nowrap}
.p-ai .ai__wall__cell{flex:1 1 0;min-width:0;max-width:187px;display:flex;align-items:center;
  justify-content:center;height:96px;padding:0 20px;border-radius:12px;background:rgba(156,156,156,.15)}
.p-ai .ai__wall__cell img{max-width:min(147px,100%);max-height:40px;width:auto;height:auto;object-fit:contain;
  filter:brightness(0) invert(1)}
/* seven cells cannot share a phone's width: the row wraps below 1024 and the section pads
   to 15 like every other on this page */
@media(max-width:1023px){.p-ai .ai__wall{padding-inline:15px}
  .p-ai .ai__wall__grid{flex-wrap:wrap}
  .p-ai .ai__wall__cell{flex:0 1 auto;width:calc(33.33% - 11px);height:72px}}
@media(max-width:575px){.p-ai .ai__wall__cell{width:calc(50% - 8px)}}

/* section heads on the dark ground */
/* overflow:hidden because the mark ROTATES: a 244px square turns an axis-aligned bbox of
   244*sqrt(2) = 345, wider than a 320 viewport's 290px content box, and the page grew a
   10px horizontal scrollbar at 320. What gets clipped is the canvas corners, which are
   fully transparent (21.5% of the file, exactly 1 - pi/4) -- the disc itself never reaches
   them, so nothing visible is lost and the mark keeps its size. */
.p-ai .ai__head{padding:96px 40px 0;text-align:center;overflow:hidden}
.p-ai .ai__head img{display:block;width:244px;height:auto;margin:0 auto 40px;
  animation:rotate360 110s linear infinite}
@keyframes rotate360{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
/* source: .the-future{transition:transform 1s cubic-bezier(.14,.12,.47,.99)} -- the two
   halves of the closing headline slide in from opposite sides as the section scrolls up.
   Upstream each half is its own container, hence the display:block. */
/* width:fit-content, not a full-width block: upstream's halves sit in a max-800 container,
   so their 10% offset is 80px. Full-width halves pushed 136px past the viewport at 1440
   and gave the page a horizontal scrollbar. */
.the-future{display:block;width:fit-content;margin-inline:auto;
  transition:transform 1s cubic-bezier(.14,.12,.47,.99)}
/* The closing headline is display type. Upstream's own ladder for THIS page, measured off it:
   120px at 1920, then 7vw / 10vw / 13vw, with line-height:.8. (The 204px in post-32019.css
   belongs to two containers that hold PARAGRAPHS on this page, not the headline — dead rules
   inherited from another template.) Those vw steps are sized for "of Loomi AI"; "for GameMantra
   AI" is half as long again, and measured against the content box the 10vw step overflows from
   1199 down — the line plus its 10% slide needs size <= avail/9.8. min(120px,7.5vw) holds
   upstream's cap at 1600 and up and clears that bound at every gate width, in one declaration. */
.p-ai .ai__future .ai__h2{font-size:min(120px,7.5vw);line-height:.8}
.p-ai .ai__h2{margin:0;font-size:60px;line-height:66px;font-weight:500;color:#fff}
.p-ai .ai__h2 strong{font-weight:500;color:var(--gm-kartikeya-gold)}
.p-ai .ai__sub{max-width:640px;margin:24px auto 0;font-size:16px;line-height:26px;color:var(--gm-moon-silver)}
@media(max-width:767px){.p-ai .ai__h1{font-size:32px;line-height:36px}.p-ai .ai__h2{font-size:32px;line-height:38px}}

/* the two comparison panels */
.p-ai .ai__cmp{display:flex;flex-direction:row;gap:0;margin-top:60px}
.p-ai .ai__cmp__col{flex:1 1 0;min-width:0;padding:0 32px}
.p-ai .ai__cmp__col + .ai__cmp__col{border-left:1px solid rgba(229,231,235,.14)}
.p-ai .ai__cmp__kicker{margin:0 0 24px;font-size:13px;font-weight:500;letter-spacing:.12em;
  text-transform:uppercase;color:#fff;text-align:center}
.p-ai .ai__cmp__panel{position:relative;padding:32px;border-radius:20px;border:1px dashed var(--gm-stone)}
.p-ai .ai__cmp__panel--on{border:0}
.p-ai .ai__cmp__panel--on::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;
  background:var(--gm-coin-ring);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.p-ai .ai__cmp__panel h3{margin:0 0 24px;font-size:24px;line-height:34px;font-weight:500;color:#fff}
.p-ai .ai__cmp__panel p{margin:0 0 16px;font-size:16px;line-height:26px;color:var(--gm-moon-silver)}
.p-ai .ai__cmp__panel--off .ai__cmp__box{display:inline-block;width:calc(50% - 8px);vertical-align:top;
  margin:0 4px 16px 0;padding:16px;border-radius:12px;border:1px dashed var(--gm-stone)}
.p-ai .ai__cmp__panel--off .ai__cmp__box p{margin:0}
@media(max-width:900px){.p-ai .ai__cmp{flex-direction:column;gap:32px}
  .p-ai .ai__cmp__col{padding:0}.p-ai .ai__cmp__col + .ai__cmp__col{border-left:0}}
/* two 50% chips inside a 375-wide panel leave ~108px of content box and the copy spilled
   past the dashed border -- they stack on a phone */
@media(max-width:767px){.p-ai .ai__cmp__panel{padding:24px}
  .p-ai .ai__cmp__panel--off .ai__cmp__box{display:block;width:100%}}

/* the quote */
/* The two ambient glows the source carries and this build did not: post-32019.css puts a
   774x450 blur(255px) wash on the container that holds the quote and the .lanim block, and a
   2100x420 blur(250px) one across the future section. Upstream's pair is
   `rgba(1,154,206,.8) -> rgba(1,206,127,.8)`, which the guide's table sends to Himalayan Blue
   and Peacock Teal. Both sections clip them (upstream leans on main{overflow:hidden}) and
   both lift their own content above, or the wash sits on top of the type. */
.p-ai .ai__quote{background:transparent;padding:96px 40px;text-align:center;position:relative;z-index:2}
/* The bands are upstream's own grouping: its section 10 is the quote AND the .lanim block in one
   2949px container, its section 12 is the future block AND the closing CTA. The glow lives inside
   the group and the GROUP clips it — which is why it washes across two of our sections upstream
   and stopped dead at one section boundary here. */
.p-ai .ai__band{position:relative;background:var(--gm-shiva-indigo);overflow:hidden}
.p-ai .ai__band > *{position:relative;z-index:2}
.p-ai .ai__band:first-of-type::before{content:"";position:absolute;z-index:1;top:150px;
  left:calc(50% - 1000px);width:774px;height:450px;pointer-events:none;filter:blur(255px);
  background:linear-gradient(250deg,rgba(14,165,255,.8) 28.92%,rgba(0,194,168,.8) 50.56%)}
.p-ai .ai__quote img.ai__stars{display:block;width:160px;height:auto;margin:0 auto 32px}
.p-ai .ai__quote blockquote{max-width:900px;margin:0 auto;padding:0;font-size:24px;line-height:34px;color:#fff}
.p-ai .ai__quote figcaption{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:32px}
.p-ai .ai__quote figcaption img{width:56px;height:56px;border-radius:50%;object-fit:cover}
.p-ai .ai__quote figcaption span{display:block;text-align:left;font-size:14px;line-height:20px;color:var(--gm-moon-silver)}
.p-ai .ai__quote figcaption strong{display:block;font-weight:500;color:var(--gm-kartikeya-gold)}

/* the future band and its video */
.p-ai .ai__future{background:transparent;padding:96px 40px;text-align:center;position:relative;z-index:2}
.p-ai .ai__future__shot::before{content:"";position:absolute;z-index:-1;top:50%;left:0;
  width:2100px;height:420px;transform:translate(-50%,-50%);pointer-events:none;filter:blur(250px);
  background:linear-gradient(250deg,var(--gm-himalayan-blue) 28.92%,var(--gm-peacock-teal) 50.56%)}
.p-ai .ai__future__shot{position:relative;display:block;width:100%;max-width:680px;margin:40px auto 0}
.p-ai .ai__future__shot img{display:block;width:100%;height:auto;border-radius:20px}
.p-ai .ai__future__shot .br-cta{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}

/* the closing yellow card and the wordmark */
.p-ai .ai__cta{background:transparent;padding:0 40px 96px;position:relative;z-index:2}
.p-ai .ai__cta__card{max-width:1240px;margin-inline:auto;padding:96px 40px;border-radius:40px;
  background:var(--gm-kartikeya-gold);color:var(--gm-shiva-indigo);text-align:center}
.p-ai .ai__cta__card h2{margin:0;font-size:48px;line-height:52.8px;font-weight:500;color:var(--gm-shiva-indigo)}
.p-ai .ai__cta__card p{max-width:640px;margin:24px auto 32px;font-size:16px;line-height:26px;color:var(--gm-shiva-indigo)}
@media(max-width:767px){.p-ai .ai__cta__card{padding:48px 20px;border-radius:20px}
  .p-ai .ai__cta__card h2{font-size:32px;line-height:36px}}
