/* ==========================================================================
   Summit "Gathering Detail" page revamp (Figma: Gathering Detail Page,
   node 40000567:25989, same file as the home-page revamp).
   Scoped under .summit-revamp / .smt- prefixed classes so nothing bleeds
   into the legacy app.css selectors the hidden sections still depend on.
   Reuses the .hr-btn/.hr-icon-btn/.hr-diamond primitives and --hr-* tokens
   already established by home-revamp.css / layout-revamp.css.
   ========================================================================== */
.summit-revamp {
    --hr-green-400: #338a81;
    --hr-green-500: #006d62;
    --hr-yellow-400: #e19d33;
    --hr-yellow-500: #d98500;
    --hr-cream-50: #fefefd;
    --hr-cream-300: #fbfaf0;
    --hr-cream-400: #faf9ed;
    --hr-cream-500: #f9f7e9;
    --hr-brown-300: #66655c;
    --hr-brown-400: #49473d;
    --hr-brown-500: #1b190c;
    --hr-brown-700: #131209;
    --hr-brown-900: #0b0b05;
    --hr-blue-50: #e6eef3;
    --hr-blue-400: #33739f;
    --hr-blue-500: #005087;
    --hr-purple-500: #8e3b78;
    /* Shared side gutter for the hero + all four content sections, so every
       heading down the page lines up on one left edge.

       Proportional (vw), not a fixed px step. These sections cap their inner
       content at 1400px, which means above ~1667px the cap creates the
       gutter and the page sits comfortably inset (13.5% each side at 1920).
       Below that the viewport is the constraint, so any FIXED gutter shrinks
       as a share of the screen - at 80px on a 1440 laptop it was only 5.8%,
       i.e. content running nearly edge-to-edge, while the same page on a
       wide monitor looked correctly inset. 8vw holds that ~8-13% inset
       across the whole laptop range instead, converging on the cap's own
       proportion rather than fighting it. The 200px ceiling stops it
       growing past the point where max-width takes over anyway. */
    /* BIL-817: the page's sections share the HEADER's container geometry, so
       section content starts at the BilAraby logo's left edge and ends at the
       right edge of the language pill. .header-revamp .container-xl
       (layout-revamp.css) is a flat 160px inline padding with max-width:none
       from 992px up, and Bootstrap's own 12px half-gutter below that - so this
       token is those two values rather than a fluid ramp of its own.

       It replaces `clamp(40px, 8vw, 200px)`, which resolved to 115px at 1440
       and 154px at 1920 - always inside the header's 160px, so every section
       sat 45px wide of the logo on one side and short of the language pill on
       the other. The section inners' 1400px caps came off at the same time for
       the same reason: the header has no cap, so above ~1720px a capped inner
       pulled away from it again even with the gutter matched. */
    --smt-gutter: 12px;
    /* The --smt-glass-* fill/stroke tokens that used to live here are gone.
       They held colours sampled off Figma's renders, because a literal
       rgba(255,255,255,.2) fill composites LIGHTER than the cream band in CSS
       (Figma paints drop shadows behind a translucent layer; CSS clips them to
       outside the border box). Every user - .smt-performance-nav,
       .smt-community-nav and .smt-agenda-head's "View Full Schedule" - now
       takes its home-page counterpart's recipe instead, where the shared glass
       rim in layout-revamp.css supplies the edge the sampled stroke stood in
       for. .smt-attend-btn was never pointed at them. */
    font-family: 'Almarai', 'Helvetica Neue', Arial, sans-serif;
}

/* The header switches to its 160px container at exactly this width
   (@media (min-width: 992px) on .header-revamp .container-xl), so the page
   switches with it - matching breakpoint, matching value. */
@media (min-width: 992px) {
    .summit-revamp { --smt-gutter: 160px; }
}

.summit-revamp .hr-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    align-self: flex-start;
    gap: 8px;
    padding: 16px 24px;
    border-radius: 61px;
    font-weight: 700;
    font-size: 16px;
    border: 1.5px solid transparent;
    text-decoration: none;
    white-space: nowrap;
    transition: transform .2s ease, box-shadow .2s ease;
}
.summit-revamp .hr-btn:hover { transform: translateY(-2px); text-decoration: none; }
.summit-revamp .hr-btn-primary {
    background: var(--hr-yellow-500);
    color: var(--hr-cream-50);
    border-color: #fff;
    /* Figma (node 40001286:67970): the inset highlight alone read as flat -
       it's paired with a stacked ambient shadow for actual glass depth,
       same treatment as the home page's equivalent button (BIL-539). */
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
.summit-revamp .hr-btn-primary:hover { color: var(--hr-cream-50); box-shadow: 0 8px 20px rgba(217,133,0,.35); }
/* The hero's "Register Now" is the same button as the home page's, and is asked
   to match it exactly. .summit-revamp's primitives differ from .home-revamp's in
   five ways, each restated here rather than changed page-wide - the page-wide
   rules also dress Discover More, Watch Highlights, View Full Schedule and the
   FAQ's Send Email, none of which should move:
     padding     16/24 -> 14.5/22.5. Home subtracts its own border so the pill
                 is Figma's 56px; the flat 16/24 here rendered 59px.
     border      1.5px solid #fff -> 2px outset #ffffff9c with bottom 0, i.e.
                 the home HERO's "Culture" button (.hr-hero-ctas). Home has two
                 .hr-btn-primary treatments: .hr-gathering-ctas overrides the
                 colour to fully transparent, which drops the lit outer ring -
                 the hero/partners instances keep it, and that ring is the
                 "outer layer" this button is meant to have.
     align-self  deliberately NOT copied. Home computes 'auto', but its button
                 sits in a flex ROW (.hr-gathering-ctas), where that stretches
                 only the height. .smt-hero-copy is a flex COLUMN, so 'auto'
                 stretched the pill to the full 666px column. The page's own
                 flex-start (center on mobile) is what reproduces home's
                 hug-the-content width here, so it is left alone.
     type        held at 16/24 everywhere; home has no mobile step-down, so the
                 one .smt-hero-copy .hr-btn applies is overridden here.
     hover       home keeps the five-layer ambient shadow and lights the shared
                 ::before glow instead of swapping in the amber drop-shadow
                 above, which home-revamp.css records as invented.
   The glow itself lives in layout-revamp.css; this selector is added to its
   list there, which that rule's comment asks to be kept explicit. */
.summit-revamp .smt-hero-copy .hr-btn-primary {
    padding: 14.5px 22.5px;
    border: 2px outset #ffffff9c;
    border-bottom-width: 0;
    font-size: 16px;
    line-height: 24px;
}
.summit-revamp .smt-hero-copy .hr-btn-primary:hover {
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
/* Missing the inset glass highlight .hr-btn-primary already has just above,
   so it read as a flat translucent chip rather than glass ("Send Email",
   BIL-598). */
/* "Send Email" in the FAQ contact card - the only .hr-btn-ghost-light on this
   page - given the home buttons' treatment, same as the agenda head's "View
   Full Schedule" and the speakers head's "View More":
     padding 14.5/22.5, because this variant keeps .hr-btn's 1.5px border and
       CSS stacks border on top of padding, so 16/24 rendered 59px against the
       design's 56;
     home's full five-layer ambient stack rather than the inset highlight alone;
     hover holds the resting fill and lights the shared ::before ellipse
       (added for this selector in layout-revamp.css) instead of tinting
       .2 -> .3, which is what the glow is there to do. */
.summit-revamp .hr-btn-ghost-light {
    padding: 14.5px 22.5px;
    background: rgba(255,255,255,.2);
    color: #fff;
    border-color: transparent;
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
.summit-revamp .hr-btn-ghost-light:hover {
    color: #fff;
    background: rgba(255,255,255,.2);
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
.summit-revamp .hr-btn-ghost-dark {
    background: #fff;
    color: var(--hr-brown-900);
    border-color: rgba(27,25,12,.08);
    box-shadow: 0 4px 14px rgba(27,25,12,.06);
}
.summit-revamp .hr-btn-ghost-dark:hover { color: var(--hr-brown-900); background: #fff; box-shadow: 0 8px 20px rgba(27,25,12,.12); }
.summit-revamp .hr-icon-btn {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: rgba(255,255,255,.15);
    border: 1.5px solid rgba(255,255,255,.3);
    flex-shrink: 0;
}
.summit-revamp .hr-icon-btn img { width: 20px; height: 20px; }
.summit-revamp .hr-accent { color: var(--hr-yellow-400); }

/* Several existing icon assets are exported white/cream-only (built for dark
   surfaces), which makes them invisible on this page's light icon chips.
   Recolor via mask-image (same technique already used for the header's
   language-globe icon) instead of hunting for a differently-colored export. */
.smt-icon-mask {
    display: inline-block;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: contain;
    mask-size: contain;
    background-color: currentColor;
}

/* ---------- Hero ---------- */
.smt-hero {
    position: relative;
    /* Figma (node 40000567:25991): the hero content block starts at y=536 and
       the frame ends 120px after the highlight block. Those two values plus the
       content's own height reproduce Figma's 1276px hero exactly
       (536 + 280 content + 64 gap + 276 highlight + 120 = 1276). The hero sits
       under the fixed 133px header, so 536px of top padding is measured from
       the viewport top, matching the design's clearance. */
    /* Side gutter matches the four content sections below — see .smt-agenda
       for the proportional-gutter rationale — so the hero title lines up
       with every section heading down the page. */
    padding: 536px var(--smt-gutter) 120px;
    background-size: cover;
    background-position: center top;
    background-repeat: no-repeat;
    overflow: hidden;
    color: var(--hr-cream-500);
}
.smt-hero-bg-video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center top;
    z-index: 0;
}
.smt-hero-scrim {
    position: absolute;
    inset: 0;
    z-index: 1;
    /* A background VIDEO can be bright at any given frame (unlike a fixed
       photo), so the whole hero needs a legibility floor, not just a bottom
       gradient tuned for a specific still image. */
    background:
        linear-gradient(0deg, var(--hr-blue-500) 22%, rgba(16,79,131,0) 65%),
        linear-gradient(180deg, rgba(9,25,38,.55) 0%, rgba(9,25,38,.25) 40%, rgba(9,25,38,.15) 100%);
    pointer-events: none;
}
/* Decorative diamond+line divider between the stats row and the "Watch
   Highlights" block below it. The line is a flex-grow element (not a
   fixed-aspect-ratio image) so it genuinely reaches the container's true
   edge regardless of viewport width, instead of stopping partway.
   .smt-hero-inner is centered with max-width:1400px, so on wide viewports
   its own right edge sits well inside the true section/viewport edge —
   the negative margin below bleeds the divider past that cap to reach it. */
.smt-hero-divider {
    /* Bumped from 16px on review. Gap and line offset follow it automatically. */
    --smt-diamond: 20px;
    display: flex;
    align-items: center;
    /* No gap meant the two diamonds sat flush edge-to-edge as unrotated
       boxes - but rotated 45deg each one's visual width is size * sqrt(2), so
       their points overlapped into each other instead of reading as two
       distinct diamonds. size * (sqrt(2)-1) is exactly that overlap, so the
       tips sit flush - touching, not merged.

       Derived from --smt-diamond rather than hardcoded: the size, this gap and
       the line's offset below are one relationship, and the previous literals
       (16 / 6.627 / -3.314) had to be recomputed together every time the size
       changed. */
    gap: calc(var(--smt-diamond) * 0.414214);
    width: 55%;
    margin-inline-start: auto;
    /* Bleeds past .smt-hero-inner's 1400px cap to the true viewport edge.
       Percentages in margin resolve against the containing block (that
       capped inner), so 50% is half the content width and 50vw is half the
       viewport: the difference is exactly the distance from the inner's
       right edge to the viewport's. Derived rather than hardcoded, so it
       stays correct as --smt-gutter changes with the viewport - the previous
       fixed "-80px - (100vw - 1560px)/2" had to be re-derived by hand every
       time the padding or the cap moved. */
    margin-inline-end: calc(50% - 50vw);
    pointer-events: none;
}
.smt-hero-diamond {
    width: var(--smt-diamond);
    height: var(--smt-diamond);
    transform: rotate(45deg);
    background: var(--hr-cream-500);
    flex-shrink: 0;
}
.smt-hero-divider-line {
    flex: 1 1 auto;
    height: 1px;
    background: rgba(249, 247, 233, .5);
    /* Same tip-vs-layout-box offset as the listing page's hero divider: the
       6.627px flex gap also separates this line from the last diamond, but
       that diamond's rotated tip already reaches 3.314px into the gap, so
       pull back the difference to meet it. */
    margin-inline-start: calc(var(--smt-diamond) * -0.207107);
}
@media (max-width: 991.98px) {
    .smt-hero-divider { display: none; }
}
.smt-hero-inner {
    position: relative;
    z-index: 2;
    max-width: none;
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: 64px;
}
.smt-hero-row {
    display: flex;
    flex-wrap: wrap;
    gap: 40px;
    justify-content: space-between;
    /* flex-end bottom-aligned the two columns, so whenever the stats column
       (esp. a wrapping location string) ran taller than .smt-hero-copy, its
       top - and the first stat's icon - sat noticeably above the title
       instead of level with it. flex-start keeps the title and the first
       stat on the same line regardless of how either column's content
       wraps. */
    align-items: flex-start;
}
.smt-hero-copy {
    display: flex;
    flex-direction: column;
    gap: 32px;
    max-width: 840px;
}
.smt-hero-title {
    font-size: 48px;
    font-weight: 700;
    line-height: 1.15;
    /* Figma (node 40001286:67967): 24px gap between title and description -
       both sit in the same unwrapped <div>, so .smt-hero-copy's own 32px
       flex gap (which only separates that div from the Register button)
       never applied between them, leaving them flush (BIL-595). */
    margin: 0 0 24px;
}
/* Figma (node 40001286:67969): 24px/32px regular, solid brown/brown-100
   (#b8b8b4) - not this page's cream token faded with opacity, which is both
   the wrong size and the wrong color family. */
.smt-hero-desc {
    font-size: 24px;
    line-height: 32px;
    color: #b8b8b4;
}
/* $heroDescription is rendered raw and typically comes wrapped in a <p> from
   the rich-text editor - its default 16px bottom margin stacked on top of
   .smt-hero-copy's own 32px flex gap to the button below, inflating it to
   48px (BIL-602). */
.smt-hero-desc > p:last-child { margin-bottom: 0; }
.smt-hero-closed { border-radius: 16px; }
.smt-hero-stats {
    display: flex;
    flex-direction: column;
    gap: 24px;
}
.smt-hero-stat {
    display: flex;
    /* center (against a long-wrapping value like the venue address) makes
       this stat's own row taller than its 52px icon, then centers the icon
       inside that extra height - pushing it down and out of line with the
       title above and the other two stats' icons. flex-start keeps every
       icon pinned to its row's top regardless of how many lines its text
       wraps to (same fix as .evtd-stat in event-detail-revamp.css). */
    align-items: flex-start;
    gap: 14px;
}
/* The date is one line now that the duration under it is gone, so flex-start
   pinned it to the top of the 52px icon tile. Centred against the icon instead.
   Scoped to this stat: the location beside it still needs flex-start, since a
   long address wraps and centring would push its icon out of line. */
.smt-hero-stat-date { align-items: center; }
/* Figma caps this at 164.373px so a long value (e.g. the venue's full
   address) wraps onto its own lines instead of running wide on one - without
   it, a long location string forced the whole stats column wide enough to
   overflow the row and drop onto its own line below .smt-hero-copy instead
   of sitting beside it (BIL-595, "content and location not showing two
   sides"). */
.smt-hero-stat > div { max-width: 180px; }
/* Figma (node 40000567:26003): a 52px white tile = 28px icon + 12px padding,
   with a white hairline border and a slight backdrop blur so it lifts off the
   hero photo. */
.smt-hero-stat-icon {
    width: 52px;
    height: 52px;
    border-radius: 10px;
    background: #fff;
    border: 1px solid #fff;
    backdrop-filter: blur(7.25px);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
/* 28px per Figma. The exported glyphs are already blue-500 (#005087); they
   only read faint because they were previously drawn at 20px inside the 52px
   tile, leaving too much white around them. */
.smt-hero-stat-icon img { width: 28px; height: 28px; object-fit: contain; }
.smt-hero-stat strong {
    display: block;
    font-size: 20px;
    font-weight: 700;
}
/* :not(.smt-hero-stat-icon) matters — the icon chip is also a <span> inside
   .smt-hero-stat, so without this it inherited the sub-label's opacity:.7
   ("2 Days" is the intended target). That let the blue hero behind it show
   through the chip's own background:#fff, so the square rendered as a pale
   cream/lavender tint instead of the white the design calls for. Same
   sibling-span trap already documented on .smt-agenda-badge below. */
.smt-hero-stat span:not(.smt-hero-stat-icon) {
    display: flex;
    font-size: 16px;
    color: var(--hr-cream-400);
    opacity: .7;
}

/* Watch-highlights block: thumbnail + text, same "reuse the home hero's
   watch-story modal" pattern, just laid out side-by-side per this design. */
.smt-hero-highlight {
    display: flex;
    align-items: center;
    /* Sized so the figure beside it can take a share of THIS row rather than of
       the viewport - see --smt-hl-w. A container cannot query itself, so the gap
       below stays in vw. */
    container-type: inline-size;
    /* Figma's 60px gap in a 1600 container = 3.75%, i.e. 3.15vw of the 84vw
       row - kept proportional to the figure so the text column lands on its own
       spec share (1107/1600 = 69.19%) with no width of its own. Capped at 3.75%
       of .smt-hero-inner's own 1400px ceiling, which 3.15vw reaches at 1667px. */
    gap: min(52.5px, 3.15vw);
    flex-wrap: wrap;
}
/* ---- Highlight figure: Figma node 40001967:59618, a 433x276 composition ----
   Rebuilt straight from that node. Three pieces, each positioned by its CENTRE
   and then rotated, because CSS rotates about centre too - centre-placement is
   what makes the angles land exactly where Figma's do:

     bracket   204.034 x 180.684   centre (312.49, 170.81)   rotate  -3.92deg
     diamonds  119.049 x  99.4473  centre (381.90,  61.67)   rotate -91.71deg
     card      400 x 250, r24      centre (200.00, 138.00)   rotate  -3.79deg

   The card paints last, over both decorations - that layer order is what makes
   the bracket peek out along the right edge while the diamonds sit clear of the
   top-right corner. All three artworks are Figma's own exports and were already
   in this repo; note the diamond cluster is ONE shape (a ribbon with diamond
   tassels), not the two rotated squares this block used to fake.

   --smt-hl-w is the figure's WIDTH, and every length above is written as
   Figma's own value over 433 times it, so the composition scales as a single
   piece and stays exact at any size.

   BIL: it used to be a unitless multiplier pinned at .625, which meant the
   figure stayed ~271px while the hero row grew with the viewport - by 1512 it
   was 21.4% of the row against Figma's 27.06%, so it read as a small thumbnail
   beside a long title/description instead of the design's large one. A length
   fixes that, because the share Figma draws IS expressible in vw:

     row      = 100vw - 2 * --smt-gutter = 100vw - 16vw = 84vw   (in the 8vw band)
     figure   = 433 / 1600 of the row    = 27.0625% * 84vw = 22.7325vw

   The earlier note here said a fluid scale was not expressible because CSS
   cannot divide a length by a length to get a unitless number; that is true,
   and is exactly why the token is now the length itself rather than a
   multiplier. */
.smt-hero-highlight-figure {
    /* Fallback for browsers without container queries: the same share worked
       out against the viewport. --smt-gutter is 8vw through this whole range,
       so the row is 84vw and the figure 27.0625% of it = 22.7325vw, capped at
       27.0625% of the 1400px ceiling (reached at 1667px, where 84vw hits 1400). */
    --smt-hl-w: min(378.875px, 22.7325vw);
    /* Preferred: a share of the row itself, so it needs to know neither the
       gutter nor the 1400px cap, and is not thrown off by the scrollbar the way
       vw is. Dropped whole by browsers that do not parse cqw. */
    --smt-hl-w: min(433px, 27.0625cqw);
    position: relative;
    flex-shrink: 0;
    width: var(--smt-hl-w);
    height: calc(276 / 433 * var(--smt-hl-w));
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    transition: transform .2s ease;
}
.smt-hero-highlight-figure:hover { transform: translateY(-4px); }
.smt-hl-bracket,
.smt-hl-diamond {
    position: absolute;
    pointer-events: none;
    background-repeat: no-repeat;
    background-size: 100% 100%;
}
.smt-hl-bracket {
    inset-inline-start: calc(210.47 / 433 * var(--smt-hl-w));
    top: calc(80.47 / 433 * var(--smt-hl-w));
    width: calc(204.034 / 433 * var(--smt-hl-w));
    height: calc(180.684 / 433 * var(--smt-hl-w));
    transform: rotate(-3.92deg);
    background-image: url("../images/summit-revamp/thumb-outline-vector.svg");
}
.smt-hl-diamond {
    inset-inline-start: calc(322.38 / 433 * var(--smt-hl-w));
    top: calc(11.95 / 433 * var(--smt-hl-w));
    width: calc(119.049 / 433 * var(--smt-hl-w));
    height: calc(99.4473 / 433 * var(--smt-hl-w));
    transform: rotate(-91.71deg);
    background-image: url("../images/summit-revamp/thumb-accent-vector.svg");
}
.smt-hl-card {
    position: absolute;
    inset-inline-start: 0;
    top: calc(13 / 433 * var(--smt-hl-w));
    width: calc(400 / 433 * var(--smt-hl-w));
    height: calc(250 / 433 * var(--smt-hl-w));
    border-radius: calc(24 / 433 * var(--smt-hl-w));
    overflow: hidden;
    transform: rotate(-3.79deg);
    box-shadow: 0 20px 40px rgba(0,0,0,.35);
}
.smt-hl-media { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Figma exports this vignette as an SVG radialGradient whose matrix works out
   to semi-axes of 913.65px horizontal and 125px vertical about the card centre
   - so it shades the top and bottom edges only, never the sides.
   Softened from Figma's literal two-stop 0 -> .9 ramp, which was far too harsh
   against the reference render: ramping from dead centre meant the darkening
   started immediately and the photo was already visibly grey by mid-card, with
   the edges going near-black. Holding fully clear through the middle 45% and
   capping at .45 keeps the subject bright and leaves a light edge shade. */
.smt-hl-vignette {
    position: absolute;
    inset: 0;
    background: radial-gradient(
        calc(913.65 / 433 * var(--smt-hl-w)) calc(125 / 433 * var(--smt-hl-w)) at 50% 50%,
        rgba(0,0,0,0) 0%,
        rgba(0,0,0,0) 45%,
        rgba(0,0,0,.45) 100%);
    pointer-events: none;
}
/* left/top rather than inset-inline-start: these two live INSIDE the card,
   whose photo is not mirrored in RTL, so they must not flip with it. */
.smt-hl-play {
    position: absolute;
    left: calc(171.81 / 433 * var(--smt-hl-w));
    top: calc(96.77 / 433 * var(--smt-hl-w));
    width: calc(56 / 433 * var(--smt-hl-w));
    height: calc(56 / 433 * var(--smt-hl-w));
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    overflow: hidden;
    /* Above .smt-hl-bar. Both sat at z-index:auto and the bar comes later in the
       DOM, so it painted OVER the disc's bottom 15px - a third of a 47px button
       - frosting it into a flat-bottomed blob. The note on the bar calls the
       overlap "~4px"; measured against the live render it is 15.1px, because the
       disc ends at 132.3 in the card and the bar starts at 117.3. Raising the
       disc keeps Figma's layer order everywhere it actually matters (the bar
       still frosts the photo) while leaving the button a whole circle. */
    z-index: 1;
    /* Figma's export reports rgba(255,255,255,.1) for this disc, but its own
       render measures ~rgb(225,205,203) over a backdrop running rgb(189,189,189)
       above it to rgb(15,13,25) below - 10% white cannot produce that. It
       resolves to a heavy blur plus white. .64 is measured, not judged by eye:
       sampling Figma's render puts the disc's interior at rgb(215,197,196)
       against a local backdrop of rgb(113,106,113), which is 0.64 white. It was
       briefly .92 here on the assumption the disc looked too transparent - that
       was backwards, and rendered it as a near-flat white puck. */
    background: rgba(255,255,255,.64);
    /* 5px on the same std-dev convention as the haze below; the previous 10
       was estimated by eye, not taken from the design. */
    -webkit-backdrop-filter: blur(calc(5 / 433 * var(--smt-hl-w)));
    backdrop-filter: blur(calc(5 / 433 * var(--smt-hl-w)));
}
.smt-hl-play img {
    width: calc(24 / 433 * var(--smt-hl-w));
    height: calc(24 / 433 * var(--smt-hl-w));
    display: block;
}
/* Frosted bar across the card's lower third - painted after the play disc,
   matching Figma's layer order (the two overlap by ~4px). */
.smt-hl-bar {
    position: absolute;
    left: calc(-2 / 433 * var(--smt-hl-w));
    /* Figma's own numbers. Profiling its render down two unrelated columns
       shows the lightening begin ~62% down the card and climb monotonically to
       the foot (+88 and +100 luminance over the same span), which is this
       148.76 / 250 = 59.5% onset. An attempt to start it at the midpoint was
       eyeballed and wrong. */
    top: calc(148.76 / 433 * var(--smt-hl-w));
    width: calc(402.024 / 433 * var(--smt-hl-w));
    height: calc(102.246 / 433 * var(--smt-hl-w));
    /* 3px, not the 6 Figma's panel shows: CSS blur() takes the Gaussian
       STANDARD DEVIATION, while Figma's blur field is ~2x that. This project's
       own exports prove the ratio - performance-card-glow.svg carries
       stdDeviation="18.37" for a Figma blur of ~37. Transcribing the 6 straight
       across made this twice as thick as the design. */
    /* 1.6, down from 3. At 3 the haze read as a milky band swallowing the
       bottom half of the photo; the design keeps the audience legible right to
       the foot of the card, with only a light frosting over it. */
    -webkit-backdrop-filter: blur(calc(1.6 / 433 * var(--smt-hl-w)));
    backdrop-filter: blur(calc(1.6 / 433 * var(--smt-hl-w)));
    /* The exported stops. At the foot Figma measures ~0.42 effective alpha
       (a dark frame at L=10 lifting to L=100), which .5 through the mask below
       lands on; .34 was too light and lost the haze entirely. */
    background: linear-gradient(to top,
        rgba(243,236,241,.34) 0%,
        rgba(243,236,241,.13) 50.401%,
        rgba(243,236,241,0) 100%);
    /* backdrop-filter switches on at full strength the instant the element
       starts, so the tint faded in but the BLUR cut in on a hard horizontal
       line across the photo. The mask ramps the whole bar - blur and tint
       together - over its top half, so the frame dissolves into the caption
       instead of stepping into it. */
    /* Full strength held over the bottom 30% of the bar rather than 55%, so the
       frosting hugs the card's foot instead of climbing to the middle of the
       photo. The rest of the ramp is unchanged in shape - it still dissolves
       upward rather than cutting in on a hard line. */
    -webkit-mask-image: linear-gradient(to top,
        #000 0%, #000 30%, rgba(0,0,0,.45) 65%, rgba(0,0,0,0) 100%);
    mask-image: linear-gradient(to top,
        #000 0%, #000 30%, rgba(0,0,0,.45) 65%, rgba(0,0,0,0) 100%);
    pointer-events: none;
}
/* RTL mirrors the composition. inset-inline-start already flips the three
   outer offsets, so only the rotations need negating - plus scaleX on the two
   decorative artworks, which are asymmetric. The card's photo stays unmirrored. */
[dir="rtl"] .smt-hl-bracket { transform: scaleX(-1) rotate(-3.92deg); }
[dir="rtl"] .smt-hl-diamond { transform: scaleX(-1) rotate(-91.71deg); }
[dir="rtl"] .smt-hl-card { transform: rotate(3.79deg); }
/* Figma: this column is flex-[1_0_0] - it grows to fill whatever space is
   left beside the 250px thumb, not a fixed max-width. Without flex-grow the
   column fell back to auto-sizing in the wrapping row and got crushed down
   to ~116px, forcing the title/description to wrap mid-word (BIL-595). */
.smt-hero-highlight-text { flex: 1 1 0; min-width: 260px; }
/* Figma gives the title its own narrower width so it deliberately wraps
   onto two lines instead of running the full column width like the
   paragraph does - without this it stretched the full flex width and,
   together with the crushed column above, is what read as "cut" against the
   row above. Figma's own example text ("Watch Highlights of Annual
   Gathering 2025") fits its spec width of 282px in two lines, but this
   title interpolates the summit's own (longer) name - widened to 360px so
   the real copy ("Watch Highlights of BilAraby Annual Gathering
   April-2026") still wraps to exactly two lines instead of three. */
.smt-hero-highlight-text h3 { font-size: 24px; font-weight: 700; margin-bottom: 8px; max-width: 360px; }
/* Figma (node 40001286:68000): solid brown/brown-100 (#b8b8b4), not this
   page's cream token faded with opacity. Matched to .smt-hero-desc's 24px/
   32px rather than this node's own 20px/28px - the two descriptions read as
   inconsistently sized against each other on the same page otherwise. */
.smt-hero-highlight-text p,
.smt-hero-highlight-desc { font-size: 16px; line-height: 32px; color: #b8b8b4; margin: 0; }
.smt-hero-highlight-desc > p:last-child { margin-bottom: 0; }

/* Step the hero's Figma-spec 536px top clearance down as the viewport
   shortens, so the title doesn't start below the fold on laptop screens. */
@media (max-width: 1399.98px) {
    .smt-hero { padding-top: 400px; }
}
@media (max-width: 1199.98px) {
    .smt-hero { padding-top: 300px; padding-bottom: 80px; }
}
@media (max-width: 991.98px) {
    .smt-hero { padding-top: 200px; }
    .smt-hero-title { font-size: 34px; }
}
/* ---- Mobile hero (Figma node 40002887:105575, the 402px "Annual Gathering"
   artboard). A different composition from the desktop hero, not just a
   narrower one: the banner/video shrinks to a ~200px strip across the top
   with the rest of the section on flat blue beneath it, everything centres,
   and the three stats turn from a right-hand column of icon-beside-text
   rows into one across-the-width row of icon-above-text. --------------- */
@media (max-width: 767.98px) {
    .smt-hero {
        /* 20px page gutter and content starting at y=190, both Figma's. */
        padding: 200px var(--smt-gutter) 60px;
        /* The media no longer fills the section, so the section itself has to
           carry the colour the rest of it sits on. */
        background-color: var(--hr-blue-500);
        background-size: 100% 220px;
        background-position: top center;
    }
    .smt-hero-bg-video { height: 220px; }
    /* Darkens the strip for legibility, then hard-lands on the section's blue
       by 200px so the media stops exactly where Figma's does (the desktop
       scrim's percentage stops can't do this - as a % of a ~1200px-tall
       mobile hero they'd leave the video showing through the middle). */
    .smt-hero-scrim {
        background: linear-gradient(180deg, rgba(9,25,38,.5) 0px, rgba(9,25,38,.18) 140px, var(--hr-blue-500) 200px);
    }
    .smt-hero-inner { gap: 60px; }
    /* Copy and stats stack instead of sitting side by side. */
    .smt-hero-row { flex-direction: column; gap: 40px; align-items: stretch; }
    /* Set from the leading edge, matching the summits LISTING page (which
       carries no mobile centring at all) and the events listing. `start` /
       `flex-start`, never `left`: in a column flex container the cross axis is
       horizontal and both resolve per direction, so Arabic aligns right off the
       same declarations. */
    .smt-hero-copy { align-items: flex-start; text-align: start; gap: 32px; max-width: none; }
    /* .summit-revamp .hr-btn hard-sets align-self:flex-start, and a child's own
       align-self always beats the parent's align-items - so the button needs its
       own declaration to follow the column, exactly as it did when this was
       centred. */
    .smt-hero-copy .hr-btn { align-self: flex-start; padding: 12px 20px; font-size: 14px; line-height: 20px; }
    .smt-hero-title { font-size: 32px; line-height: 40px; margin-bottom: 16px; }
    .smt-hero-desc { font-size: 16px; line-height: 24px; }
    /* Row of three, spread across the full content width. */
    .smt-hero-stats { flex-direction: row; justify-content: space-between; align-items: flex-start; gap: 12px; }
    /* flex:1 1 0 (equal thirds), not content-sized: Figma's placeholder venue
       is the short "Doha, Qatar", but a real CMS location can be the full
       "Multaqa (Education City Student Center), Doha, Qatar." - content-sized
       columns let that one string eat most of the row and squash the other
       two. Equal thirds keep the three icons evenly spaced whatever the copy
       length, and the long value just wraps inside its own third. */
    .smt-hero-stat { flex: 1 1 0; flex-direction: column; align-items: flex-start; gap: 8px; text-align: start; min-width: 0; }
    /* The desktop 180px cap is there to stop a long venue string widening the
       side column - here the three share the row, so let them size to it. */
    .smt-hero-stat > div { max-width: none; display: flex; flex-direction: column; gap: 4px; }
    /* 40px tile = 20px icon + 10px padding (desktop is 52/28/12). */
    .smt-hero-stat-icon { width: 40px; height: 40px; }
    .smt-hero-stat-icon img { width: 20px; height: 20px; }
    .smt-hero-stat strong { font-size: 14px; line-height: 20px; }
    /* flex-start with the column above: this span is itself a flex row, so its
       own main-axis alignment has to move too or the label stays centred inside
       a left-aligned stat. */
    .smt-hero-stat span:not(.smt-hero-stat-icon) { font-size: 12px; line-height: normal; justify-content: flex-start; }
    /* Shown again below 991.98px (see the hide rule above, which is aimed at
       the tablet band): mobile has its own divider, diamonds at the START
       with the rule running off the right edge - the mirror of desktop's.

       Every number below derives from ONE fact: these diamonds are 12px, not
       desktop's 16px. A square rotated 45deg is w*sqrt(2) across, so its point
       overhangs its own layout box by w*(sqrt(2)-1)/2 per side - 2.485px here,
       3.314px on desktop. Each inherited desktop value is that bit too large
       and has to come down with the diamonds, or the motif opens up gaps:
         gap        w*(sqrt(2)-1)      = 4.971px  (was 6.627px -> 1.65px of
                                         daylight between the two points)
         pull-back  half the gap       = 2.485px  (was 3.314px -> the rule
                                         stopped 0.83px clear of each point)
       The gap cancels the two neighbouring points' overhang exactly, so they
       meet tip to tip; the pull-back cancels one point's overhang, so the rule
       meets the point rather than the box behind it. */
    .smt-hero-divider {
        display: flex;
        width: auto;
        /* gap stays derived from --smt-diamond (set below); restating it as a
           literal here is what left the tips overlapping by 1.2px after the
           size changed. */
        /* Both ends cancel the hero's own page gutter so the rule runs the full
           width of the screen. Derived from the token rather than restating it:
           the gutter is 12px here since BIL-817 aligned it to the header, and a
           literal -20px now overshoots by 8px a side - clipped by .smt-hero's
           overflow:hidden, so invisible, but the rule no longer ends where it
           means to. */
        margin-inline-start: calc(-1 * var(--smt-gutter));
        margin-inline-end: calc(-1 * var(--smt-gutter));
    }
    /* The rule continues BEFORE the diamond pair too, so the pair reads as
       sitting ON a full-width line rather than capping its start. Desktop has
       no counterpart - there the divider begins mid-row at 55% - so this is a
       pseudo-element here instead of a second <span> in the markup. The
       divider itself has already bled to the screen edge above, so the stub
       spans exactly the 20px that bleed opened up - it takes no start margin
       of its own, which would pull a second 20px clean off-screen. */
    .smt-hero-divider::before {
        content: "";
        flex: 0 0 auto;
        width: 20px;
        height: 1px;
        margin-inline-end: calc(var(--smt-diamond) * -0.207107);
        background: rgba(249, 247, 233, .5);
    }
    /* Set the variable, not the box: gap and the line/::before offsets all
       derive from it, so overriding width/height alone left those at their
       desktop values. 15px keeps the 0.75 ratio to desktop that 12:16 had. */
    .smt-hero-divider { --smt-diamond: 15px; }
    /* Figure above, centred copy below (desktop is side by side). */
    .smt-hero-highlight { flex-direction: column; gap: 32px; align-items: stretch; }
    /* Stacked, so the screen is the constraint rather than the text column
       beside it. The hero drops to 20px gutters at this width, so the figure
       simply fills what they leave, capped at Figma's own 433px (reached at
       473px wide). This replaced four discrete scale steps that existed only
       because the old token had to be unitless - see the note on
       .smt-hero-highlight-figure. They also overflowed slightly: .76 was
       329.1px on a 350px column at 390px wide. */
    .smt-hero-highlight-figure {
        --smt-hl-w: min(433px, calc(100vw - 40px));
        --smt-hl-w: min(433px, 100cqw);
        margin-inline: auto;
    }
    .smt-hero-highlight-text { text-align: start; min-width: 0; }
    .smt-hero-highlight-text h3 { font-size: 20px; line-height: 28px; max-width: none; margin-bottom: 16px; }
    .smt-hero-highlight-text p { font-size: 16px; line-height: 24px; }
}

/* ==========================================================================
   Gathering stats: "BilAraby Gathering in Numbers" (Figma node 40001967:59633).
   Sits right after the hero, before Video/Why-attend. Card recipe (border+
   shadow on odd cards, borderless on even) and the .counter/data-target
   count-up are this page's own conventions - see .smt-agenda-corner-diamond
   above for the corner-asset pattern and the bottom of summit.js for the
   counter animation (shared site-wide, no extra JS needed here).
   ========================================================================== */
.smt-stats { position: relative; background: var(--hr-cream-500); padding: 100px var(--smt-gutter); overflow: hidden; }
.smt-stats-inner { position: relative; z-index: 1; max-width: none; margin-inline: auto; display: flex; flex-direction: column; gap: 80px; }
.smt-stats-head h2 { font-size: 48px; line-height: 56px; font-weight: 700; color: var(--hr-brown-500); margin: 0 0 16px; }
/* Figma paints this word #d98500 (yellow/yellow-500), a full step darker than
   the --hr-yellow-400 the page's shared .hr-accent uses - scoped here rather
   than changing .hr-accent, same reasoning as .smt-performance-accent above. */
.smt-stats-accent { color: var(--hr-yellow-500); }
.smt-stats-head p { font-size: 24px; line-height: 32px; color: var(--hr-brown-300); max-width: 900px; margin: 0; }
/* gap:0 - Figma lays the four panels edge to edge (400px each at x=0/400/
   800/1200 within the 1600px row), same as the homepage's .hr-voices-grid. */
.smt-stats-grid { display: flex; gap: 0; }
/* 40px radius, 32px backdrop blur, 243px tall, all verbatim from the Figma
   node spec.

   No border and no drop-shadow, despite the node spec listing
   `1px solid #33739f` + `0 4px 4px rgba(0,0,0,.25)` on the odd panels: the
   design's own render shows neither, and a literal blue stroke reads far
   heavier than the design - exactly the call home-revamp.css already made
   for the identical .hr-voices-grid panels. What separates the cards is the
   gradient alone, fading out into the cream.

   No margin stagger either: Figma has all four at y=0, same 243px height.
   The up/down "float" in the design is an optical effect of the alternating
   gradient direction below - odd panels are shaded at the TOP and fade out
   before their bottom edge (so they read as sitting high), even panels are
   transparent at the top and shade in toward the BOTTOM (so they read as
   dropped). Adding a real margin on top of that double-counts the offset. */
.smt-stat-card {
    flex: 1 1 0;
    min-width: 0;
    height: 243px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 48px;
    text-align: center;
    padding: 24px;
    border: 0;
    border-radius: 40px;
    -webkit-backdrop-filter: blur(32px);
    backdrop-filter: blur(32px);
}
.smt-stat-card:nth-child(odd) {
    background: linear-gradient(180deg, rgba(84,138,175,.18) 0%, rgba(51,115,159,0) 61.523%);
}
.smt-stat-card:nth-child(even) {
    background: linear-gradient(180deg, rgba(51,115,159,0) 23.251%, rgba(51,115,159,.08) 100%);
}
.smt-stat-card > span { font-size: 24px; font-weight: 700; line-height: 32px; color: var(--hr-brown-300); }
.smt-stat-card strong { display: flex; align-items: center; justify-content: center; font-size: 80px; font-weight: 800; line-height: 100px; color: var(--hr-blue-400); }
.smt-stat-card strong .counter { font-size: inherit; line-height: inherit; }
/* .counter-plus (not a span authored in this blade file) is injected by the
   shared count-up in summit.js - it wraps the "+" so it can be coloured
   separately from the number, matching Figma's two-tone digit/plus. */
/* Same treatment the homepage's .hr-plus already carries (home-revamp.css
   .hr-voices-grid .hr-voice-stat strong .hr-plus), so both "in Numbers" blocks
   render identically. The "+" does NOT share the number's type style: Figma
   gives it Headings/H1/Bold (node 40001286:67933) at 64px/72px weight 700,
   against the number's 80px/100px ExtraBold - here it was inheriting the full
   80px/800, which is why it read oversized next to the digits.
   Held in em so the ratio carries through the mobile step-down below without a
   value per breakpoint. Colour stays this section's own yellow-400. */
.smt-stat-card .counter-plus {
    /* inline-block, and this matters: summit.js injects the "+" INSIDE the
       .counter span (counter.innerHTML = value + '<span class="counter-plus">'),
       so unlike the homepage - where .hr-plus is a sibling flex item of
       .hr-counter - this one is inline text in the number's own line box. Two
       consequences the first pass at this missed: `align-items: center` on the
       parent never reaches it, and `transform` is ignored outright on a
       non-replaced inline box, so the lift below was in the computed style but
       never painted. inline-block makes both apply.
       vertical-align:top then does what align-items did on the homepage - puts
       the "+" box top on the line box top - and the small lift lands it at the
       same -2.9px offset from the digits' box top that the homepage measures. */
    display: inline-block;
    vertical-align: top;
    font-size: .8em;
    font-weight: 700;
    line-height: 1.125;
    /* The "+" rides high against the digits rather than sitting on their
       baseline. In Figma that comes out of the text box being shorter than the
       line it holds (38.266px box, 72px line-height, bottom-aligned), which
       lifts the glyph by half the difference: (72 - 38.266) / 2 = 16.87px, or
       .264em of the "+"'s own 64px. */
    transform: translateY(-.045em);
    color: var(--hr-yellow-400);
}
/* The edge-to-edge gap:0 above is a ROW-only arrangement: side by side, the
   alternating top-shaded / bottom-shaded gradients read as four distinct
   panels even while touching. Once the row wraps, cards stack with a shaded
   edge meeting a shaded edge, which merges neighbours into one continuous
   band and loses that rhythm entirely - so the wrapped layouts get a real
   gap back to keep each card reading as its own box. */
@media (max-width: 1199.98px) {
    .smt-stats-grid { flex-wrap: wrap; gap: 24px; }
    /* 45%, not 50% - leaves room for the gap so it still lands 2 per row. */
    .smt-stat-card { flex: 1 1 45%; }
}
@media (max-width: 767.98px) {
    .smt-stats-inner { gap: 48px; }
    .smt-stats-head h2 { font-size: 32px; line-height: 40px; }
    .smt-stats-head p { font-size: 18px; line-height: 26px; }
    .smt-stats-grid { gap: 20px; }
    .smt-stat-card { flex: 1 1 100%; height: auto; padding: 32px 24px; gap: 24px; }
    .smt-stat-card strong { font-size: 56px; }
}

/* ---------- Agenda: "Two Days of Ideas & Impact" ---------- */
.smt-agenda {
    position: relative;
    background: var(--hr-cream-500);
    /* Was 24px: .smt-agenda-inner's 1400px cap only starts creating real
       margins once the viewport clears ~1450px, so on every laptop width
       below that the content ran within 24px of the screen edges while wide
       monitors looked correct. See --smt-gutter for why this is now
       proportional rather than a fixed px value. */
    padding: 100px var(--smt-gutter);
    overflow: hidden;
}
.smt-agenda-inner { position: relative; z-index: 1; max-width: none; margin-inline: auto; }
/* Decorative corner shape (Figma). Figma's own frame has 160px of side
   padding around the content, giving this shape room to bleed in without
   touching anything — this section's padding is much tighter, so at
   Figma's literal size/offset the shape reaches down into the head row
   and collides with the button. The head row starts exactly at this
   section's own padding-top (100px), so height is capped just under that
   (with a small buffer) rather than shrunk further than necessary — keeps
   it a visible corner accent instead of nearly hiding it. */
.smt-agenda-corner-shape {
    position: absolute;
    top: 0;
    inset-inline-end: -40px;
    width: 316px;
    height: 100px;
    transform: scaleX(-1);
    pointer-events: none;
}
[dir="rtl"] .smt-agenda-corner-shape { transform: none; }
/* Mobile counterpart. Hidden by default so only one of the pair ever shows;
   it takes over at exactly the width the desktop shape switches off. */
.smt-agenda-corner-shape-mobile { display: none; }
@media (max-width: 991.98px) {
    .smt-agenda-corner-shape-mobile {
        display: block;
        position: absolute;
        top: 0;
        inset-inline-end: 0;
        width: 109px;
        height: 64px;
        /* 180deg, not a plain scaleY(-1). The source file draws the solid band
           along its BOTTOM edge, two diamonds spiking UP out of it at x~23/49,
           and the mass tapering to nothing at the RIGHT. The design needs all
           three inverted at once - solid edge against the hero above, diamonds
           hanging below, and the mass weighted toward the right - which is a
           rotation, not a mirror. Flipping only vertically fixed the first two
           but left the taper on the wrong side, so the shape read as twisted. */
        transform: rotate(180deg);
        pointer-events: none;
    }
    /* The horizontal mirror of rotate(180deg) is scaleY(-1). */
    [dir="rtl"] .smt-agenda-corner-shape-mobile { transform: scaleY(-1); }
}
/* The matching bottom-left corner diamond (.smt-agenda-corner-diamond,
   agenda-corner-bottom.svg) was removed: this section was immediately followed
   by .smt-diamond-divider + the stats section's own corner artwork, and the two
   motifs sitting back to back at that seam read as redundant clutter rather
   than two intentional accents.
   NOTE: that stats artwork has since gone too (BIL-818), so the clash this
   describes no longer exists - the agenda diamond could be reinstated on its
   own merits if wanted. Left out for now: removing it was a separate decision
   and BIL-818 does not ask for it back. */
@media (max-width: 991.98px) {
    .smt-agenda-corner-shape { display: none; }
}
.smt-agenda-head {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 64px;
}
.smt-agenda-head h2 { font-size: 40px; font-weight: 700; color: var(--hr-brown-500); margin: 0; }
/* The design breaks this heading before its highlighted words ("Two Days of" /
   "Ideas & Impact."). That used to be a <br> in the blade, but the title is
   admin-authored plain text now, so the break belongs here - on the accent
   span, the only part the markup still identifies. */
.smt-agenda-head h2 .hr-accent { display: block; }
/* BIL-596: Figma (node 40002408:52500) draws this button as a translucent
   glass chip (matching the Button glass recipe used across the revamped
   pages), not the solid-white .hr-btn-ghost-dark treatment shared with the
   speakers section below — scoped here so that other .hr-btn-ghost-dark
   usages on this page/home are untouched.

   Now carries the home hero's "Watch the story" treatment
   (.home-revamp .hr-btn-ghost-light): the .2 white fill behind a 20px backdrop
   blur, a real 1.5px border, the five-layer ambient shadow, and the shared
   glass rim + hover ellipse from layout-revamp.css, which this selector is
   added to there.

   Two things deliberately NOT copied from it:
     colour - that button sits on the home hero's dark VIDEO and paints its
       label #fff. This band is cream, so #fff would be invisible; the existing
       brown-400 label stays.
     align-self - left to the page's own flex-start, as .smt-agenda-head is a
       centred flex row and vertical placement here is a layout choice rather
       than part of the effect.
   Padding drops to home's 14.5/22.5 so that the 1.5px border stacked on top
   still totals the design's 56px - a flat 16/24 plus the border made it 59px,
   which is why this rule previously used an inset ring and border:0. */
.smt-agenda-head .hr-btn-ghost-dark {
    padding: 14.5px 22.5px;
    border: 1.5px solid transparent;
    background: rgba(255,255,255,.2);
    color: var(--hr-brown-400);
    -webkit-backdrop-filter: blur(20px);
    backdrop-filter: blur(20px);
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
/* Both properties are restated, not inherited: .summit-revamp
   .hr-btn-ghost-dark:hover (above) paints background:#fff and swaps in a lifted
   shadow, and it has the same specificity as this rule, so dropping them here
   let a solid white lozenge through on hover. Home holds its resting fill and
   shadow and lights the ::before ellipse instead - which is only visible if the
   fill underneath stays translucent. */
.smt-agenda-head .hr-btn-ghost-dark:hover {
    color: var(--hr-brown-400);
    background: rgba(255,255,255,.2);
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
.smt-agenda-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 80px;
}
/* Figma's 80px is a two-column gutter measured at its full 1400px+ frame.
   Below that it's a fixed 80px bite out of a shrinking row, so the two day
   cards lose width much faster than the section does — taper it instead. */
@media (max-width: 1399.98px) {
    .smt-agenda-grid { gap: 56px; }
}
.smt-agenda-card {
    flex: 1 1 340px;
    min-width: 0;
}
.smt-agenda-card-head {
    border-bottom: 1px dashed var(--hr-brown-400);
    padding-bottom: 24px;
    margin-bottom: 24px;
}
.smt-agenda-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255,255,255,.4);
    border: 1px solid rgba(176,201,218,.3);
    border-radius: 56px;
    padding: 8px 8px 8px 12px;
    margin-bottom: 24px;
}
[dir="rtl"] .smt-agenda-badge { padding: 8px 12px 8px 8px; }
.smt-agenda-badge .smt-icon-mask { width: 18px; height: 18px; color: var(--hr-blue-500); flex-shrink: 0; }
/* :not(.smt-icon-mask) matters — without it this pill styling (background,
   padding) hijacks the icon span too, since it's also a <span> here, which
   overrides the icon's own background-color:currentColor and stretches its
   box via padding, making the star look washed-out/wrong-sized. */
.smt-agenda-badge span:not(.smt-icon-mask) {
    background: var(--hr-blue-50);
    color: var(--hr-blue-500);
    border-radius: 56px;
    padding: 8px 16px;
    font-weight: 700;
    font-size: 14px;
}
.smt-agenda-card-head h3 { font-size: 28px; font-weight: 700; color: var(--hr-brown-700); margin: 0 0 16px; }
.smt-agenda-time {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 20px;
    color: var(--hr-brown-700);
}
.smt-agenda-time .smt-icon-mask { width: 20px; height: 20px; color: var(--hr-yellow-500); }
.smt-agenda-desc { font-size: 18px; color: var(--hr-brown-400); line-height: 1.6; margin-bottom: 16px; }
/* The card title doubles as the schedule-modal trigger, so it's a <button>
   reset back to looking exactly like the heading text it replaced. */
.smt-agenda-card-title {
    background: transparent;
    border: 0;
    padding: 0;
    margin: 0;
    font: inherit;
    color: inherit;
    text-align: inherit;
    cursor: pointer;
}
.smt-agenda-card-title:hover,
.smt-agenda-card-title:focus-visible { color: var(--hr-blue-500); text-decoration: underline; }

/* ---------- Speakers ---------- */
/* 80px gutter for the same reason as .smt-agenda above — these four sections
   share one 1400px inner cap, so they have to share the same gutter or the
   page's left edge visibly jogs from section to section on a laptop. */
.smt-speakers { background: var(--hr-brown-500); padding: 100px var(--smt-gutter); }
.smt-speakers-inner { max-width: none; margin-inline: auto; }
.smt-speakers-head {
    display: flex;
    flex-wrap: wrap;
    gap: 24px;
    align-items: flex-end;
    justify-content: space-between;
    margin-bottom: 64px;
}
.smt-speakers-head h2 { font-size: 40px; font-weight: 700; color: var(--hr-cream-500); margin: 0 0 12px; }
.smt-speakers-head p { font-size: 20px; color: var(--hr-brown-300); margin: 0; max-width: 700px; }
/* justify-content:space-between on the parent only pushes this to the right
   while it shares a line with the heading - once the row wraps (long
   description, narrow viewport) it's alone on its own line and space-between
   has nothing to space it from, so it fell back to the start (left) edge.
   margin-inline-start:auto pushes it to the end of whichever line it's on,
   wrapped or not (BIL-603). */
.smt-speakers-head-actions { display: flex; align-items: center; gap: 12px; margin-inline-start: auto; }
/* Figma (node 40002476:87705): this "View More" is the translucent glass pill
   with CREAM text, not the solid-white .hr-btn-ghost-dark it was inheriting.
   That default is built for light surfaces — on .smt-speakers' near-black
   #1b190c background it rendered as a solid white lozenge with dark text and
   a black-filtered arrow, which is the opposite of the design. Same override
   the agenda head already carries (BIL-596), scoped here so other
   .hr-btn-ghost-dark users are untouched. The two 0-alpha shadow layers
   Figma lists (7px/63px, 4px/40px) are dead weight and dropped, as
   elsewhere in this file. */
.smt-speakers-head-actions .hr-btn-ghost-dark {
    /* 14.5/22.5, not the page's 16/24: this variant keeps .hr-btn's 1.5px
       border (the glass rim below is positioned against it), and CSS stacks
       border on top of padding, so 16/24 was rendering 59px against the
       design's 56. Same correction as the agenda head's "View Full Schedule".
       Home's own buttons subtract the border for exactly this reason. */
    padding: 14.5px 22.5px;
    background: rgba(255,255,255,.2);
    border-color: transparent;
    color: var(--hr-cream-50);
    /* Home's full five-layer ambient stack - the 7px/63px layer was dropped
       here as "dead weight", but it is in the home button this now matches. */
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
/* Both properties are restated, not inherited: .summit-revamp
   .hr-btn-ghost-dark:hover (above) paints background:#fff and swaps in a lifted
   shadow, and it has the same specificity as this rule, so dropping them here
   let a solid white lozenge through on hover. Home holds its resting fill and
   shadow and lights the ::before ellipse instead - which is only visible if the
   fill underneath stays translucent. */
.smt-speakers-head-actions .hr-btn-ghost-dark:hover {
    color: var(--hr-cream-50);
    background: rgba(255,255,255,.2);
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,.02),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
}
/* BIL-597: the "View More" arrow icon had no RTL handling at all, so it kept
   pointing right (as if "forward" were still rightward) instead of mirroring
   for the Arabic reading direction — same fix as every other arrow icon on
   this page. */
[dir="rtl"] .smt-speakers-head-actions a img { transform: scaleX(-1); }
/* Swiper controls slide width via slidesPerView (see the init script in
   sections/speakers.blade.php) — the card just fills its slide. */
.smt-speakers-swiper { width: 100%; overflow: hidden; }
/* Figma: 382x507 (node 40002710:61757 and its 3 colour siblings). The base
   colour is set inline per-card from a 4-colour cycle (speakers.blade.php),
   so it keeps looping no matter how many speakers a summit has.
   aspect-ratio rather than a fixed height: the card is a fluid Swiper slide,
   and every decorative layer below is positioned as a % of the card, so the
   whole composition has to scale in both axes together to stay true to the
   382x507 reference. */
.smt-speaker-card {
    position: relative;
    width: 100%;
    aspect-ratio: 382 / 507;
    border-radius: 30px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 24px;
    isolation: isolate;
}
/* The speaker cut-out. Per the agreed content rule these uploads are
   background-removed PNGs (subject only), which is what lets the card's own
   colour and motif read around the person instead of being covered by a
   photo's own rectangle.
   contain + bottom, not cover: cover crops whatever doesn't fit, and on a
   portrait cut-out that means slicing the head off. contain guarantees the
   whole subject is visible at any upload dimension while still standing on
   the card's bottom edge, matching the design's framing. */
.smt-speaker-card-bg {
    position: absolute;
    inset: 0;
    background-size: contain;
    background-position: bottom center;
    background-repeat: no-repeat;
}
/* No headshot uploaded: the generic avatar is a square icon, not a
   full-bleed photo — `cover` would crop most of it away, so it's shown at
   a fixed size, centred, over the card's own background colour instead. */
.smt-speaker-card-bg-placeholder {
    background-size: 140px !important;
    background-repeat: no-repeat;
    background-position: center !important;
}
/* Large logo-mark motif behind the photo (Figma's own exported asset, reused
   on the speakers-listing cards).
   Sized at the asset's NATURAL landscape 557.42x240.98 — Figma's 240.98x557.42
   figure is the box the art occupies *after* its 90deg turn, not the art's own
   size, so setting those dims on the image itself squashed a landscape motif
   into a portrait box and rendered it visibly stretched.

   Percentages of the 382x507 card, not fixed px, so the motif tracks the
   fluid slide width instead of drifting out of place at every breakpoint.
   Derived from Figma directly: the art's own box is 557.424 x 240.982
   (145.923% x 47.531%) and rotate() pivots about the centre, so placing that
   box's centre at Figma's (70.509, 105.212) = (18.46%, 20.75%) puts the
   rotated result exactly where the design has it. Hence the negative
   offsets: centre minus half the unrotated box.

   `left`, deliberately PHYSICAL rather than inset-inline-start, and no
   [dir="rtl"] override: this background is meant to render identically in
   Arabic instead of mirroring with the layout. A logical offset would swap it
   to the other edge, and re-mirroring the art (dropping the scaleY(-1)) would
   flip the motif itself — so both are avoided here on purpose. Note this is
   the opposite of .smt-agenda-corner-shape, which DOES mirror; don't
   "consistency-fix" one into the other.

   Opacity stays 1 — the exported asset already carries Figma's own 0.3 on
   the path, so dimming it here would double-apply it. */
.smt-speaker-card-pattern {
    position: absolute;
    top: -3.014%;
    left: -54.503%;
    width: 145.923%;
    height: 47.531%;
    background: url("../images/summit-revamp/speaker-card-pattern.svg") no-repeat center / contain;
    transform: rotate(90deg) scaleY(-1);
    /* Sits BEHIND the speaker photo, as in Figma — visible around the
       cut-out subject rather than behind an opaque photo rectangle. */
    pointer-events: none;
}
/* Second motif placement. Figma alternates the SAME asset between two
   placements down the row (cards 1/3 use the rule above, cards 2/4 use this
   one), so four cards in a row never repeat the same background. Confirmed
   per-instance: nodes 40002710:61757/:61759 carry the inner frame
   1612:15940 (placement above), while :61758/:61760 carry 1612:15981 —
   this one, which is the art scaled ~1.6x and spun a half turn so it reads
   as a wide band across the top with a large diamond under it, rather than
   a vertical band down the leading edge.
   Same derivation as above: art box 894.174 x 386.564 (234.077% x 76.245%)
   with its centre at Figma's (190.998, 55.798) = (50%, 11.005%) of the
   382x507 card — dead centre horizontally, hence the symmetric offset.
   Physical `left` and no RTL override, for the same reason as placement A. */
.smt-speaker-card-pattern-alt {
    top: -27.117%;
    left: -67.039%;
    width: 234.077%;
    height: 76.245%;
    transform: rotate(-179.43deg) scaleY(-1);
}
/* Video preview: sits over the static photo, invisible until hover/focus.
   JS (speakers.blade.php) does the actual play()/pause(); this just handles
   the visual cross-fade so it doesn't just snap into view mid-frame. */
.smt-speaker-card-video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0;
    transition: opacity .25s ease;
    pointer-events: none;
}
.smt-speaker-card:hover .smt-speaker-card-video,
.smt-speaker-card:focus-within .smt-speaker-card-video { opacity: 1; }

/* ---- Hover expand (speakers with a video only) ----
   Only the WIDTH changes - no scale, no zoom - so the video plays at its own
   proportions instead of a magnified portrait crop.

   The width goes on the SLIDE, not the card. The wrapper is a flex row of
   slides, so growing one pushes its neighbours along and every other card keeps
   its full size. An earlier attempt widened the card itself and pulled the
   difference back with negative margins; that opened the card ON TOP of its
   neighbours, which is not what the design does. The card just fills whatever
   width its slide has.

   !important is required, not sloppiness: Swiper writes each slide's width
   inline, and an inline declaration beats a normal stylesheet rule. This is
   also why the widening is CSS rather than JS - the JS version had to stash and
   restore Swiper's inline value around every hover, which was fragile.

   The base width is re-derived per breakpoint from the same slidesPerView /
   spaceBetween the Swiper init uses (see sections/speakers.blade.php); keep the
   two in step. Percentages resolve against the flex container, i.e. the
   wrapper, so these track the container at any viewport. */
.smt-speakers-swiper .swiper-slide { transition: width .35s ease; }
.smt-speaker-card { transition: aspect-ratio .35s ease; }
@media (min-width: 992px) and (max-width: 1299.98px) {
    /* 3 per view, 24px gaps */
    .smt-speakers-swiper .swiper-slide:has(.smt-speaker-card-has-video:hover),
    .smt-speakers-swiper .swiper-slide:has(.smt-speaker-card-has-video:focus-within) {
        width: calc(((100% - 48px) / 3) * var(--smt-speaker-expand, 1.48)) !important;
    }
}
@media (min-width: 1300px) {
    /* 4 per view, 24px gaps */
    .smt-speakers-swiper .swiper-slide:has(.smt-speaker-card-has-video:hover),
    .smt-speakers-swiper .swiper-slide:has(.smt-speaker-card-has-video:focus-within) {
        width: calc(((100% - 72px) / 4) * var(--smt-speaker-expand, 1.48)) !important;
    }
}
@media (min-width: 992px) {
    /* The card's height comes from aspect-ratio: 382/507, so widening the slide
       would scale the height up with it and the card would grow in BOTH
       directions. Re-ratio by exactly the same factor the width grows by, and
       the height lands back on its resting value: at a 332px base the card is
       332 x 507/382 = 440.6px, and 491.4 x 507/565.36 is the same 440.6px.
       Expressed as a ratio rather than a fixed height so it needs no percentage
       of the wrapper and holds at every breakpoint. */
    .smt-speaker-card-has-video:hover,
    .smt-speaker-card-has-video:focus-within {
        aspect-ratio: calc(382 * var(--smt-speaker-expand, 1.48)) / 507;
    }
    /* Expanded, the card reads as the video itself - the darkening scrim and
       the name block fade out. The arrow stays: it is the only route through
       to the speaker's page, so it must not disappear under the cursor. */
    .smt-speaker-card-has-video:hover .smt-speaker-card-scrim,
    .smt-speaker-card-has-video:focus-within .smt-speaker-card-scrim,
    .smt-speaker-card-has-video:hover .smt-speaker-card-body > div,
    .smt-speaker-card-has-video:focus-within .smt-speaker-card-body > div {
        opacity: 0;
        transition: opacity .25s ease;
    }
}
/* Figma (node I40002710:61757;40001144:66834): a 285.661px-tall bottom
   gradient on a 507px card = 56.34%, running transparent -> black .65.
   Black, not the card's own colour as this previously used: the design
   darkens the photo behind the text for legibility rather than tinting it,
   and a currentColor wash over e.g. the orange card left the white name
   text sitting on near-full-brightness yellow. Figma's own layer is wider
   than the card and centred, but the gradient axis is vertical so that
   overhang has no visual effect — a full-width band is equivalent. */
.smt-speaker-card-scrim {
    position: absolute;
    inset-inline: 0;
    bottom: 0;
    height: 56.34%;
    background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,.65) 100%);
}
.smt-speaker-card-body {
    position: relative;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 8px;
    width: 100%;
    color: var(--hr-cream-500);
}
/* Figma type ramp for this card: name 24/32 Bold (Headings/H6/Bold), field
   20/28 Regular (Body/Body Medium), country 20/28 Bold (Labels/Label
   Medium/Bold), all in cream #f9f7ea with an 8px stack gap. Was 22/18 with
   an opacity fade on both sub-lines. */
.smt-speaker-card-body > div { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.smt-speaker-card-body strong { display: block; font-size: 24px; line-height: 32px; font-weight: 700; }
.smt-speaker-card-body span { display: block; font-size: 20px; line-height: 28px; font-weight: 400; }
.smt-speaker-card-location { font-weight: 700 !important; }
/* Links through to the speaker's own page. Same circular glass button as the
   speakers-listing cards (.spk-card-arrow) so both surfaces match. */
/* BIL-597: matches Figma's own "Button" component (type=icon) exactly —
   56px (16px padding around a 24px icon, not a fixed 48px), solid white
   border (not 85% opacity), and the same glass ambient+inset-highlight
   shadow recipe used for every other glass button on this page. */
/* Whole-card link, under the arrow and over everything else — same treatment as
   .spk-card-link on the listing, and rendered on video cards only for the same
   reason (their arrow fades out under the preview; a card without one keeps the
   arrow as its only click target). .smt-speaker-card-body is positioned but has
   no z-index, so this overlay covers the name block too; the arrow inside it is
   lifted past the overlay below and keeps its own hover state and click. */
.smt-speaker-card-link {
    position: absolute;
    inset: 0;
    z-index: 1;
}
.smt-speaker-card-arrow {
    flex-shrink: 0;
    z-index: 2;
    width: 56px;
    height: 56px;
    border-radius: 61px;
    border: 1.5px solid transparent;
    background: rgba(255,255,255,.2);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        7px 63px 18px rgba(0,0,0,0),
        4px 40px 16px rgba(0,0,0,0),
        2px 23px 14px rgba(0,0,0,.02),
        1px 10px 10px rgba(0,0,0,.03),
        0 3px 6px rgba(0,0,0,.03);
    transition: background-color .2s ease, transform .2s ease;
}
.smt-speaker-card-arrow:hover { background: rgba(255,255,255,.35); }
.smt-speaker-card-arrow img { width: 24px; height: 24px; }
[dir="rtl"] .smt-speaker-card-arrow img { transform: scaleX(-1); }
/* The arrow steps aside while the preview is running, on the same .25s as the
   video's cross-fade. Faded rather than hidden: this arrow is the card's only
   link, so its target has to stay clickable for as long as the card is hovered.
   Scoped to has-video, so a card without a preview keeps its arrow. The card
   itself is tabbable (tabindex=0) and plays the preview on focus, hence
   focus-within here — but a focus ring on the arrow itself wins outright, so a
   focused control is never the invisible one. */
.smt-speaker-card-arrow { transition: opacity .25s ease, transform .2s ease; }
.smt-speaker-card-has-video:hover .smt-speaker-card-arrow,
.smt-speaker-card-has-video:focus-within .smt-speaker-card-arrow { opacity: 0; }
.smt-speaker-card-has-video .smt-speaker-card-arrow:focus-visible { opacity: 1; }
/* The .smt-speaker-bio hover overlay that used to sit here is gone: on hover it
   covered the card's own photo, name and country with a near-opaque panel of
   body text. The card already links through to the speaker's page, which is
   where the description belongs. Its markup came out of
   sections/speakers.blade.php at the same time. */

/* ---------- FAQ ---------- */
/* cream-500, not cream-400. This page's base tone IS cream-500: <main> paints
   it, and .smt-agenda / .smt-stats / .smt-community all sit on it. These three
   sections were the only cream-400 surfaces, one step lighter (#faf9ed vs
   #f9f7e9), so every boundary they touched showed a faint full-width band -
   the shading still visible after the divider's own fill came off. One tone
   down the whole page removes all of them. */
.smt-faq { background: var(--hr-cream-500); padding: 100px var(--smt-gutter); }
.smt-faq-inner {
    max-width: none;
    margin-inline: auto;
    display: flex;
    gap: 120px;
    flex-wrap: wrap;
}
.smt-faq-col-left { flex: 1 1 460px; display: flex; flex-direction: column; gap: 80px; min-width: 0; }
.smt-faq-col-right { flex: 1 1 460px; min-width: 0; }
/* The title spans the row rather than sitting in a half column. That is what
   lets it hold ONE line: "Frequently Asked Questions" needs 586px at 48px and
   the column is 497px, so in the old layout it wrapped whatever the break rule
   said. Spanning gives it the full 1114px at the same type size, in both
   languages.

   The card and the questions then share row 2, so they also share a top edge -
   which is what makes summit.js's "end the list level with the card" rule land
   the list at the card's own height (about four questions) instead of the 460px
   CSS fallback.

Questions sit in the reading-FIRST position in both languages: left in
   English, right in Arabic. One template does both - in a grid with
   direction:rtl the first column IS the right one - so there is no [dir="rtl"]
   override to keep in step.

   No markup change: .smt-faq-col-left is display:contents so its two children
   become grid items in their own right, and summit.js still finds
   .smt-faq-col-right .faq-lists and .smt-faq-contact.

   Gated at 1366px because that is where .smt-faq-inner stops fitting two 460px
   columns and the flex layout wraps to a single stack - below it there is one
   column and nothing to place. */
@media (min-width: 1366px) {
    .smt-faq-inner {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 120px;
        /* The h2 already carries 32px beneath it; more on top of that left a
           visible empty band between the title and the two columns. */
        row-gap: 8px;
        grid-template-areas:
            "head    head"
            "answers contact";
        align-items: start;
    }
    .smt-faq-col-left { display: contents; }
    .smt-faq-head { grid-area: head; }
    .smt-faq-contact { grid-area: contact; }
    .smt-faq-col-right { grid-area: answers; }

}
/* The list shows six questions and scrolls the rest, so it can't run far
   past the "Still have questions?" card the way an unbounded list does.

   460px is only the PRE-JS FALLBACK - roughly six rows, enough to stop a long
   list flashing at full height before it's sized. summit.js then measures the
   first six rendered rows and sets an exact inline max-height, because the
   rows aren't a uniform height: the first question renders expanded, and its
   answer wraps to a different number of lines per locale and column width, so
   any single number here lands mid-row in some locale (460px was exactly six
   rows in English but left a sliver of a seventh in Arabic).

   It's a max-height, not a height, so a summit with only three or four
   questions still shrinks to its content instead of leaving dead space below
   the last card.

   Only applies where the two columns are genuinely side by side. They wrap
   once .smt-faq-inner drops below 1040px (460 + 120 gap + 460), i.e. below
   ~1200px of viewport plus however wide the OS scrollbar is - 1220px clears
   that ambiguity band for the widest common scrollbars. Below it the columns
   stack and the list flows at full height, where a nested scroll region
   would just fight the page scroll. */
@media (min-width: 1220px) {
    .smt-faq-col-right .faq-lists {
        max-height: 460px;
        overflow-y: auto;
        overscroll-behavior: contain;
        /* Keeps the scrollbar off the cards' rounded end edge. */
        padding-inline-end: 10px;
        scrollbar-width: thin;
        /* Thumb takes the page's own accent - the same --hr-yellow-400 that
           paints "Questions" in the heading above and the open question's
           title. The second value is the TRACK, and it stays transparent on
           purpose: only the moving bar is coloured, so the groove it runs in
           doesn't draw an orange rule down the side of the list. */
        scrollbar-color: var(--hr-yellow-400) transparent;
    }
    .smt-faq-col-right .faq-lists::-webkit-scrollbar { width: 6px; }
    .smt-faq-col-right .faq-lists::-webkit-scrollbar-track { background: transparent; }
    .smt-faq-col-right .faq-lists::-webkit-scrollbar-thumb {
        background: var(--hr-yellow-400);
        border-radius: 3px;
    }
}
/* Type and spacing below are Figma's own (node 40000567:26088), which the
   first pass built a uniformly undersized copy of - 40px/20px type, 24px
   gaps, 40px card padding against the design's 48px/24px, 32px gaps and
   42px/39px. That shortfall is why this column ended ~57px above the
   question list beside it instead of level with it. */
.smt-faq-head h2 { font-size: 48px; line-height: 56px; font-weight: 700; color: var(--hr-brown-500); margin: 0 0 32px; }
.smt-faq-head h2 .hr-accent-purple { color: var(--hr-purple-500); }
/* The Figma artboard breaks this title after "Asked", and this rule forced that
   break by putting the highlighted half on its own line. Dropped per request -
   the title reads on ONE line now, in both languages. Restore the declaration
   below to bring the two-line treatment back.
.smt-faq-head h2 .hr-accent { display: block; } */
.smt-faq-head p { font-size: 24px; line-height: 32px; color: var(--hr-brown-300); }
.smt-faq-contact {
    border-radius: 30px;
    padding: 42px 39px;
    color: var(--hr-cream-500);
    background: radial-gradient(120% 120% at 0% 0%, var(--hr-blue-400) 0%, var(--hr-blue-500) 60%, #0b5787 100%);
}
.smt-faq-contact h3 { font-size: 32px; line-height: 40px; font-weight: 700; margin-bottom: 24px; }
.smt-faq-contact p { font-size: 20px; line-height: 28px; opacity: .7; margin-bottom: 32px; }

/* Figma's own two variants: closed = plain textured cream, no border; open
   ("Variant2") = lighter cream-300 card with a visible border and orange
   question text — NOT a dark/blue card, which is what this used to build
   (looked plausible on its own but didn't match the actual spec at all). */
.summit-revamp .faq-lists .accordion-item {
    /* app.css's legacy .accordion-faq .accordion-item rule (built for a
       different, border-separated accordion style) sets padding:24px 0 with
       :first-child{padding-top:0}/:last-child{padding-bottom:0} exceptions.
       This card-based redesign never overrides `padding` on the item itself
       (the button and body below already carry their own padding), so that
       legacy rule was still winning the cascade - giving the first/last
       cards ~24px less height than every middle one instead of all five
       matching. Zero it out here so every card's height comes only from its
       button/body content, identically. */
    padding: 0;
    background: linear-gradient(90deg, rgba(0,0,0,.02), rgba(0,0,0,.02)), var(--hr-cream-500);
    border: 2px solid transparent;
    border-radius: 24px;
    /* Figma's gap is 8px. summit.js flexes it a few px either way so that six
       cards land exactly on the "Still have questions?" card's bottom edge -
       see sizeFAQList() for why the two columns drift apart at our widths. */
    margin-bottom: var(--smt-faq-gap, 8px);
    overflow: hidden;
}
/* The 8px gap above belongs BETWEEN items - left on the last one too, it's
   dead space stacking on top of .smt-faq's own bottom padding before the
   diamond divider below. */
.summit-revamp .faq-lists .accordion-item:last-child { margin-bottom: 0; }
.summit-revamp .faq-lists .accordion-item:has(.accordion-button:not(.collapsed)) {
    background: var(--hr-cream-300);
    border-color: #f4f2e4;
}
.summit-revamp .faq-lists .accordion-header { margin: 0; }
/* Figma (node 40000567:26100): 24px padding around a 32px-tall content row
   (the toggle circle sets that height, not the 28px text line), giving an
   80px closed card. The first pass built these at 12px/20px padding and 18px
   text - a 56px card - which is what left six questions ~140px short of the
   left column beside them. */
.summit-revamp .faq-lists .accordion-button {
    position: relative;
    padding: 24px;
    font-size: 20px !important;
    line-height: 28px !important;
    font-weight: 700 !important;
    color: var(--hr-brown-400) !important;
    background: transparent !important;
    box-shadow: none !important;
}
.summit-revamp .faq-lists .accordion-button:not(.collapsed) { color: var(--hr-yellow-400) !important; }
.summit-revamp .faq-lists .accordion-button::after,
.summit-revamp .faq-lists .accordion-button:not(.collapsed)::after {
    /* Bootstrap's own accordion icon rules set a background-color here that
       was showing through as a solid orange fill on the circle — override
       both the base and :not(.collapsed) variants explicitly. */
    background-color: transparent !important;
    background-image: none;
    width: 32px;
    height: 32px;
    border-radius: 61px;
    border: 1.5px solid rgba(0,0,0,.15);
    display: flex;
    align-items: center;
    justify-content: center;
    content: "";
    position: relative;
}
/* Without .accordion-button having position:relative (added above), this
   anchored to whatever positioned ancestor happened to be further up the
   DOM instead of the button itself, and with no `top` at all it landed at
   its default static position rather than centred in the 28px circle -
   between the two, the chevron wasn't reliably in the circle's middle. */
.summit-revamp .faq-lists .accordion-button::before {
    content: "";
    position: absolute;
    top: 50%;
    /* Circle sits flush at the button's padding-inline-end (24px) and is
       32px wide, so its horizontal centre is 24 + 16 = 40px from the
       button's edge. inset-inline-end positions THIS element's own edge,
       not its centre, so to land this 8px box's centre on that 40px mark
       its edge needs to sit 4px (half its own width) further out, at 36px -
       not 40px, which would centre the box 4px too far inward instead. */
    inset-inline-end: 36px;
    width: 8px;
    height: 8px;
    /* Physical side, not border-inline-end: this chevron is an open/close
       state indicator (always up/down), not a leading/trailing icon that
       should mirror in RTL - border-inline-end flips to the LEFT side in
       Arabic, which combined with the same rotate() turned the corner into
       a sideways "<"/">" instead of the intended up/down "^"/"v". */
    border-right: 2px solid var(--hr-brown-400);
    border-bottom: 2px solid var(--hr-brown-400);
    transform: translateY(-50%) rotate(45deg);
    transition: transform .2s ease;
}
.summit-revamp .faq-lists .accordion-button:not(.collapsed)::before {
    transform: translateY(-50%) rotate(-135deg);
    border-right-color: var(--hr-yellow-400);
    border-bottom-color: var(--hr-yellow-400);
}
/* !important because the shared faq-lists.blade.php partial hardcodes a
   .text-primary class (legacy, from the pre-revamp accordion styling) that
   resolves to white somewhere in app.css's cascade — unreadable on this
   light card. */
.summit-revamp .faq-lists .accordion-body { padding: 0 20px 16px; font-size: 16px; color: var(--hr-brown-300) !important; }
/* $faq->answer is rendered raw and typically comes wrapped in a <p> from
   the rich-text editor - its default browser margin (~1em) added visible
   extra space above/below the text on top of .accordion-body's own
   padding, independent of it. */
.summit-revamp .faq-lists .accordion-body > p:first-child { margin-top: 0; }
.summit-revamp .faq-lists .accordion-body > p:last-child { margin-bottom: 0; }

/* ---------- Partners ---------- */
/* Same corner-motif technique as the home page's .hr-partners/.hr-partners-motif
   (home-revamp.css) — reused as-is rather than reinvented: plain
   overflow:hidden on the section, motif anchored to the section's own
   bottom edge with a small negative offset so overflow:hidden clips it
   naturally, with no bleed past the section into whatever comes after
   (this page's shared footer partial sits flush against this section with
   no gap, and previous attempts to bleed past it collided with the
   footer's own "Join the BilAraby Community" card art). */
/* cream-500, not cream-400. This page's base tone IS cream-500: <main> paints
   it, and .smt-agenda / .smt-stats / .smt-community all sit on it. These three
   sections were the only cream-400 surfaces, one step lighter (#faf9ed vs
   #f9f7e9), so every boundary they touched showed a faint full-width band -
   the shading still visible after the divider's own fill came off. One tone
   down the whole page removes all of them. */
/* Box copied from the home page's .hr-partners, which is the reference for this
   block: 80px/160px padding rather than 100px/--smt-gutter, and no max-width on
   the inner wrapper. The gutter token and the 1400px cap are what put this
   section's heading and logo row on a different left edge than home's - 115px
   against 160px at 1440, and further apart again above 1720 where the cap
   starts to bite and centres the content. The rest of this page's sections keep
   --smt-gutter; this one deliberately does not. */
.smt-partners { background: var(--hr-cream-500); padding: 80px 160px; position: relative; overflow: hidden; }
.smt-partners-inner { max-width: none; margin-inline: auto; position: relative; z-index: 1; }
/* Same fade-up-on-scroll as the home page's partners section. .hr-reveal is
   home-revamp.css's class, but its opacity pair is scoped to .home-revamp, so
   the same two rules are restated for this page's wrapper; the observer that
   adds animate.css's classes lives in summit.js. */
.summit-revamp .hr-reveal { opacity: 0; }
.summit-revamp .hr-reveal.animate__animated { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
    .summit-revamp .hr-reveal { opacity: 1; }
}
.smt-partners-corner {
    position: absolute;
    left: -117px;
    bottom: -46px;
    width: 578px;
    height: 198px;
    max-width: none;
    pointer-events: none;
    /* Figma's own canvas shows this asset flipped vertically (same as the
       home page's identical motif) — the flat exported file doesn't carry
       that, so it's re-applied by hand. */
    transform: scaleY(-1);
}
[dir="rtl"] .smt-partners-corner { left: auto; right: -117px; transform: scaleY(-1) scaleX(-1); }
/* BIL-819: the same wave at every width, scaled down - NOT a different shape.
   This used to hide the wave below 768px and swap in the stats section's
   teal-with-blue-diamond "Intersect" instead. The home page's identical motif
   is the reference (.hr-partners-motif in home-revamp.css), and it keeps its
   wave and scales it: every figure below is the desktop one multiplied by the
   same 0.25 (578x198 at left:-117/bottom:-46), so the shape holds its
   proportions and the same share of itself hangs off the corner.
   .smt-partners' overflow:hidden clips that overhang, as it does on desktop.
   Scaled from 992px, the width home scales at, rather than this page's old
   768px switch. */
@media (max-width: 991.98px) {
    .smt-partners-corner {
        width: 145px;
        height: 50px;
        left: -30px;
        bottom: -12px;
    }
    /* The mirrored offset in the base rule is the desktop figure, so RTL needs
       the scaled one too - otherwise 117px of a 145px shape hangs off the
       corner and only a sliver shows. */
    [dir="rtl"] .smt-partners-corner { right: -30px; }
}
.smt-partners-head {
    display: flex;
    flex-wrap: wrap;
    gap: 24px;
    align-items: flex-end;
    justify-content: space-between;
    margin-bottom: 64px;
}
.smt-partners-head h2 { font-size: 40px; font-weight: 700; color: var(--hr-brown-900); margin: 0 0 12px; }
.smt-partners-head h2 .hr-accent-purple { color: var(--hr-purple-500); }
.smt-partners-head p { font-size: 20px; color: var(--hr-brown-300); margin: 0; max-width: 700px; }
/* Continuous loop marquee — no arrows, no pagination. Identical mechanism to
   the home page's .hr-partners-marquee/.hr-partners-track (pure CSS, no JS).
   margin-bottom clears .smt-partners-corner: that motif is anchored to the
   section's own bottom edge (bottom:-46px) regardless of content height, and
   its wave peaks reach the very top of its 198px box — with this page's
   shorter 110px-tall logo row (vs. the 140px row the same motif sits behind
   on the home page) the peak reached ~52px into the moving logos as they
   scrolled past it. 64px pushes the track clear of that peak with a little
   to spare, without touching the heading-to-logos gap above it. */
.smt-partners-marquee {
    position: relative;
    /* Matching .hr-partners-marquee: keeps the logo row above the corner
       artwork rather than relying on the two being painted in source order. */
    z-index: 1;
    overflow: hidden;
    margin-bottom: 84px;
    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 6%, #000 94%, transparent 100%);
    mask-image: linear-gradient(to right, transparent 0, #000 6%, #000 94%, transparent 100%);
}
/* At the scaled 50px the motif sits well below the logo row, so the 64px above
   that clears its peak on desktop is no longer needed - same as home. Has to
   live after the base rule rather than up with the other corner rules: equal
   specificity, so source order is what decides. */
@media (max-width: 991.98px) {
    .smt-partners-marquee { margin-bottom: 0; }
}
.smt-partners-track {
    display: flex;
    align-items: center;
    width: max-content;
    animation: smtPartnersLoop 34s linear infinite;
}
.smt-partners-marquee:hover .smt-partners-track { animation-play-state: paused; }
/* Travels left -> right. Because the set is duplicated, -50% is visually
   identical to 0 (the second copy sits exactly where the first began), so
   starting there and sliding to 0 loops with no seam. */
@keyframes smtPartnersLoop { from { transform: translateX(-50%); } to { transform: translateX(0); } }
/* RTL follows its own reading direction: right -> left. The offsets are the
   MIRROR of the LTR pair, not a reversal of them - this ran 0 -> -50% and
   showed the failure the home page's .hr-partners-track already documents.
   Under direction:rtl the flex track is laid out from the right edge, so the
   duplicate set sits to the LEFT of the original and the whole track's spare
   content hangs off that side. A negative translate therefore slides the only
   content there is further left and drags an empty band in from the right -
   half way through the cycle the logos were bunched into the left of the
   container with nothing beside them. Translating positively pulls the
   off-screen duplicate rightwards into view instead, and at +50% it lands
   exactly where the original started. */
[dir="rtl"] .smt-partners-track { animation-name: smtPartnersLoopRtl; }
@keyframes smtPartnersLoopRtl { from { transform: translateX(50%); } to { transform: translateX(0); } }
@media (prefers-reduced-motion: reduce) {
    .smt-partners-track { animation: none; }
}
/* Same cell as the home page's .hr-partner-logo, deliberately: at 260x110 with
   a 76px logo cap this row had a different pitch and far less air around each
   mark than home's, so with the same sponsor set the two strips sat at
   different offsets and read as two different treatments - most obvious in
   Arabic, where they scroll from the opposite edge. The marquee's -50% wrap is
   proportional to the track, so matching the cell is what makes the two pages
   line up, not the animation (which was already identical). */
.smt-partner-logo {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 320px;
    height: 140px;
}
.smt-partner-logo img { max-height: 100px; max-width: 100%; object-fit: contain; }
@media (max-width: 991.98px) {
    .smt-partner-logo { width: 220px; height: 110px; }
    .smt-partner-logo img { max-height: 80px; }
}

@media (max-width: 767.98px) {
    .smt-agenda, .smt-speakers, .smt-faq, .smt-partners { padding: 60px var(--smt-gutter); }
    .smt-speakers-head, .smt-partners-head { margin-bottom: 32px; }
    /* Agenda type is sized for a ~570px-wide desktop card; at 375px the
       40px/28px pair left the heading and each card title eating 2-3 lines
       apiece. Sizes below are Figma's own mobile scale (40002887:105625). */
    .smt-agenda-head h2 { font-size: 28px; }
    .smt-agenda-card-head h3 { font-size: 20px; line-height: 28px; margin-bottom: 8px; }
    .smt-agenda-time { font-size: 16px; }
    .smt-agenda-time .smt-icon-mask { width: 16px; height: 16px; }
    .smt-agenda-desc { font-size: 16px; line-height: 24px; margin-bottom: 0; }
    /* Once the cards stack, this gap stops being a column gutter and becomes
       80px of dead vertical space between Day 01 and Day 02. */
    .smt-agenda-grid { gap: 16px; }
    /* Each day becomes a real card on mobile - on desktop it's bare text in a
       column, here Figma gives it a translucent white panel. */
    .smt-agenda-card {
        flex: 1 1 100%;
        background: rgba(255,255,255,.6);
        border-radius: 16px;
        padding: 20px;
    }
    .smt-agenda-card-head { padding-bottom: 16px; margin-bottom: 16px; }
    .smt-agenda-badge { margin-bottom: 16px; gap: 4px; padding: 4px 4px 4px 8px; }
    [dir="rtl"] .smt-agenda-badge { padding: 4px 8px 4px 4px; }
    .smt-agenda-badge .smt-icon-mask { width: 16px; height: 16px; }
    .smt-agenda-badge span:not(.smt-icon-mask) { padding: 8px 12px; font-size: 12px; }
    /* Figma mobile (40002887:105619) re-sequences this section: heading
       centred at the top, the two day cards, then "View Full Schedule"
       centred BELOW them - on desktop the button instead shares the
       heading's row via justify-content:space-between. The button is a
       child of .smt-agenda-head, so it can't be ordered around
       .smt-agenda-grid (its sibling) from there; display:contents dissolves
       that wrapper so its h2 and button become direct children of the
       column and all three can be sequenced together - the same trick
       .smt-faq-col-left uses just below. */
    .smt-agenda-inner { display: flex; flex-direction: column; }
    .smt-agenda-head { display: contents; }
    .smt-agenda-head h2 { order: 1; text-align: start; margin-bottom: 32px; }
    .smt-agenda-grid { order: 2; }
    .smt-agenda-head .hr-btn-ghost-dark { order: 3; align-self: flex-start; margin-top: 40px; }
    /* Keep the natural DOM order on mobile too: View More leads, then the
       prev/next controls, so the arrows end up as the last two items of the
       row (1st and 2nd from its trailing edge). This previously forced
       `order: 1` on the link to push it behind the arrows; the row reads
       better with the primary action first, and it now matches the wide
       layout instead of re-sequencing at one breakpoint. */
    .smt-faq-inner { gap: 40px; }
    /* "Still have questions?" is nested inside .smt-faq-col-left alongside
       the section heading, so stacking the two columns put it ABOVE the FAQ
       list (.smt-faq-col-right) instead of below it (BIL-604). display:contents
       drops the wrapper from the box model so its two children become direct
       flex items of .smt-faq-inner, sitting alongside .smt-faq-col-right -
       letting order sequence all three independently of the original nesting. */
    .smt-faq-col-left { display: contents; }
    .smt-faq-head { order: 1; width: 100%; }
    .smt-faq-col-right { order: 2; }
    .smt-faq-contact { order: 3; width: 100%; }
}

/* Inner-page "jump to section" bar (.summit-section-list) - COMMENTED OUT.
   The bar it styles is disabled in resources/views/front/cms/summit/show.blade.php,
   and its legacy base rules are commented out in app.css. Kept here rather than
   deleted so the three can be restored together; the inner comment delimiters were
   dropped because CSS comments cannot nest.

app.css's legacy .summit-section-list (the in-page "jump to section" bar,
   unique to this page) is fixed at z-index:999 below 991.98px — it predates
   the header revamp making .main-header position:fixed at z-index:99, so it
   now sits on top of and completely hides the global site header/nav at
   mobile and tablet widths. Drop it below the header instead.
@media (max-width: 991.98px) {
    .summit-section-list { z-index: 10; top: 72px; }
    Same frosted-glass treatment as .header-revamp.header-overlay just
       above it (layout-revamp.css), instead of the legacy solid #0E6057
       fill — this bar reads as a continuation of that header, not a
       separate, visually inconsistent block underneath it.
    .summit-section-list {
        background-color: rgba(28, 26, 18, .22);
        -webkit-backdrop-filter: blur(16px);
        backdrop-filter: blur(16px);
        border-top: 1px solid rgba(255,255,255,.15);
    }
    The expanded jump-to-section list reads as its own frosted card (lighter
       than the bar above it, since it sits over the busy hero photo) rather
       than a plain list sharing the bar's own background.
    .summit-section-list .summit-menu-items {
        background: rgba(255,255,255,.14);
        -webkit-backdrop-filter: blur(20px);
        backdrop-filter: blur(20px);
        border: 1px solid rgba(255,255,255,.18);
        border-radius: 20px;
        padding: 4px 20px;
    }
    .summit-section-list .summit-menu-items li {
        border-bottom: 1px solid rgba(255,255,255,.15);
    }
    .summit-section-list .summit-menu-items li:last-child { border-bottom: 0; }
    .summit-section-list .summit-menu-items li .nav-link {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding-block: 14px;
        font-weight: 700;
    }
    .summit-section-list .summit-menu-items li .nav-link::after { position: static; }
}
*/

/* ==========================================================================
   Performance Session (Figma: node 40002476:87318 "Frame 2147241747").
   Sits between the FAQ and Partners sections, each pair separated by the
   .smt-diamond-divider below. Same cream band + shared gutter as its
   neighbours, so all three read as one column down the page.
   ========================================================================== */
/* cream-500, not cream-400. This page's base tone IS cream-500: <main> paints
   it, and .smt-agenda / .smt-stats / .smt-community all sit on it. These three
   sections were the only cream-400 surfaces, one step lighter (#faf9ed vs
   #f9f7e9), so every boundary they touched showed a faint full-width band -
   the shading still visible after the divider's own fill came off. One tone
   down the whole page removes all of them. */
.smt-performance {
    background: var(--hr-cream-500);
    padding: 100px var(--smt-gutter);
    /* Clips the third card's peek (see the swiper note further down) at the
       page edge, the way Figma's artboard does. */
    overflow: hidden;
}
.smt-performance-inner { max-width: none; margin-inline: auto; }

/* ---------- Head: title block left, pager right ---------- */
.smt-performance-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 32px;
    /* Figma stacks the head and the card row 80px apart. */
    margin-bottom: 80px;
}
.smt-performance-head-copy { min-width: 0; }
.smt-performance-head-copy h2 {
    font-size: 48px;
    line-height: 56px;
    font-weight: 700;
    color: var(--hr-brown-500);
    margin: 0 0 16px;
}
/* Figma paints this word #d98500 (yellow/yellow-500), a full step darker than
   the --hr-yellow-400 the page's shared .hr-accent uses — scoped here rather
   than changing .hr-accent, which every other heading on this page shares. */
.smt-performance-accent { color: var(--hr-yellow-500); }
.smt-performance-head-copy p {
    font-size: 24px;
    line-height: 32px;
    color: var(--hr-brown-300);
    margin: 0;
}
/* 8px, matching .smt-attend-nav - the other carousel nav pair on this page.
   20px left a visible gully between the two arrows that no other section
   has, so the pair read as two separate controls rather than one unit. */
.smt-performance-nav-group { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
/* 56px square from 16px padding around a 24px icon, a 61px pill radius, a
   1.5px stroke and the same inset-highlight + ambient-shadow stack as the
   page's .hr-btn — the shadow's two widest layers are transparent in this
   variant, so only the three tightest are drawn.

   Fill and stroke follow the home page's buttons now (the --smt-glass-*
   tokens are gone); see
   the note there for why they are measured colours rather than the
   translucent white the component declares. */
/* Restyled to the home page's memories-and-stories filmstrip arrows
   (.hr-memories-filmstrip .hr-icon-btn): a real 1.5px border instead of an
   inset ring, the translucent .2 fill, and one soft shadow instead of the
   five-layer stack. The lit rim and the hover "ellipse from the bottom" are
   the shared effects in layout-revamp.css - these two selectors are added to
   its lists there rather than re-copied here. Hover no longer swaps the fill
   or lifts the button: the filmstrip does neither, the glow IS the effect. */
.smt-performance-nav {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Was padding 16px around a 24px icon, which also came to 56 - but the
       target sets the box, so set the box. */
    width: 56px;
    height: 56px;
    padding: 0;
    border-radius: 50%;
    border: 1.5px solid rgba(27,25,12,.08);
    background: rgba(225,255,255,.2);
    color: var(--hr-brown-900);
    cursor: pointer;
    flex-shrink: 0;
    box-shadow: 0 4px 14px rgba(27,25,12,.06);
}
/* .35 dimmed the disc back down to roughly the cream it sits on, which threw
   away the glass read the fill above exists to give. .55 still says "you
   cannot page this way" while the button keeps its edge and shadow. */
.smt-performance-nav.swiper-button-disabled { opacity: .55; cursor: default; pointer-events: none; }
/* Reuses the project's existing vuesax arrow rather than shipping a second
   copy of it: the file is stroked cream for dark surfaces, so it's recoloured
   through .smt-icon-mask (mask-image + currentColor) to Figma's #0b0b05. */
.smt-performance-nav-icon {
    width: 24px;
    height: 24px;
    -webkit-mask-image: url("../images/home-revamp/icon-arrow-right.svg");
    mask-image: url("../images/home-revamp/icon-arrow-right.svg");
}
.smt-performance-nav-prev .smt-performance-nav-icon { transform: scaleX(-1); }
/* Mirror the whole circular button for RTL — a true reflection instead of
   re-deriving each arrow's direction. */
[dir="rtl"] .smt-performance-nav { transform: scaleX(-1); }


/* ---------- Slider ---------- */
/* overflow stays visible so a slide can bleed past the content column into
   the gutter (Figma's third-card peek); .smt-performance above is what
   actually clips it at the page edge. */
.smt-performance-swiper { width: 100%; overflow: visible; }
/* Fixed-width slides (slidesPerView:'auto' in the init script), not a
   slidesPerView count: Figma sizes the card itself, and 688 + 24 + 688 is
   exactly the 1400px content column - so wide viewports land on two cards
   with the third peeking, and narrower ones simply show fewer without ever
   squeezing the card's own proportions. max-width keeps it inside the
   column once the viewport is narrower than one card. */
.smt-performance-swiper .swiper-slide { width: 688px; max-width: 100%; height: auto; }

/* ---------- Card ---------- */
.smt-performance-card {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 32px;
    height: 339px;
    padding: 8px;
    border-radius: 30px;
    border: 1px solid rgba(255,255,255,.5);
    /* Figma's own gradient angle and stops, over the cream band. */
    background-image: linear-gradient(-43.405deg, rgba(255,255,255,.56) 25.704%, rgba(255,255,255,.7) 62.362%, rgba(255,255,255,.7) 75.217%);
    -webkit-backdrop-filter: blur(53.55px);
    backdrop-filter: blur(53.55px);
    box-shadow:
        0 3px 6px rgba(0,0,0,.03),
        1px 10px 10px rgba(0,0,0,.03),
        2px 23px 14px rgba(0,0,0,.02);
    overflow: hidden;
}
/* Blurred wash in the bottom-right corner (Figma node 40002817:92040). The
   blur is baked into the exported SVG, and the asset is larger than the box
   Figma clips it to - hence the negative offsets, which put the shape's own
   edges outside the card so only the wash shows through. */
.smt-performance-card-glow {
    position: absolute;
    right: -37.24px;
    bottom: -37.24px;
    width: 319.486px;
    height: 263.743px;
    transform: scaleY(-1);
    pointer-events: none;
}
[dir="rtl"] .smt-performance-card-glow {
    right: auto;
    left: -37.24px;
    transform: scale(-1, -1);
}
.smt-performance-card-media {
    position: relative;
    z-index: 1;
    flex-shrink: 0;
    width: 289px;
    height: 323px;
    border-radius: 24px;
    overflow: hidden;
}
.smt-performance-card-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* No inline padding: Figma runs the copy the full width of this column, out
   to the card's own 8px padding edge. */
.smt-performance-card-body {
    position: relative;
    z-index: 1;
    flex: 1 1 0;
    min-width: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    padding-block: 32px;
}
.smt-performance-card-copy { display: flex; flex-direction: column; gap: 16px; }
.smt-performance-card-copy h3 {
    font-size: 24px;
    line-height: 32px;
    font-weight: 700;
    color: var(--hr-brown-700);
    margin: 0;
}
/* Figma sets four lines of body copy against a fixed 339px card. Clamping
   keeps a longer, admin-entered description from pushing the author row out
   of the card instead of ellipsing. */
.smt-performance-card-copy p {
    font-size: 18px;
    line-height: 28px;
    color: var(--hr-brown-700);
    opacity: .6;
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.smt-performance-card-author { display: flex; align-items: center; gap: 16px; min-width: 0; }
.smt-performance-card-avatar {
    flex-shrink: 0;
    width: 56px;
    height: 56px;
    border-radius: 50px;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}
.smt-performance-card-author-text { display: flex; flex-direction: column; min-width: 0; }
.smt-performance-card-author-text strong {
    font-size: 18px;
    line-height: 28px;
    font-weight: 700;
    color: var(--hr-brown-900);
}
.smt-performance-card-author-text span {
    font-size: 14px;
    line-height: 20px;
    color: var(--hr-brown-300);
}

@media (max-width: 1399.98px) {
    .smt-performance-head-copy h2 { font-size: 38px; line-height: 46px; }
    .smt-performance-head-copy p { font-size: 20px; line-height: 28px; }
    .smt-performance-head { margin-bottom: 56px; }
}
/* Below 992px the content column is narrower than one 688px card, so the
   side-by-side layout would start compressing the 289px media panel against
   the copy. Stack instead, and let the height follow the content. */
@media (max-width: 991.98px) {
    /* The swiper row already stretches every SLIDE to the tallest one, but a
       block-level card inside only ever grew to its own content - so the card
       with the longest title or author line was the only one filling its slide
       and the rest, the peeking next card included, stopped short of it and
       hung visibly higher/lower than their neighbours. Making the slide a flex
       container hands its stretched height straight to the card, so every card
       matches the longest content in the set however long that runs.

       Stretch rather than height:100%: the slide's own height is auto (it is
       itself a stretched flex item), and a percentage height against that is
       not reliably resolvable. .smt-performance-card-body already does
       justify-content:space-between, so the extra height opens up between the
       copy and the author row instead of pooling under it. */
    .smt-performance-swiper .swiper-slide { display: flex; }
    .smt-performance-card { flex: 1 1 auto; flex-direction: column; height: auto; gap: 16px; }
    .smt-performance-card-media { width: 100%; height: 240px; }
    .smt-performance-card-body { padding: 0 8px 16px; gap: 20px; }
}
/* Phone type and the 60px/20px section padding the sibling sections
   (.smt-agenda / .smt-speakers / .smt-faq / .smt-partners) switch to at this
   same breakpoint, so the whole page steps down together. */
@media (max-width: 767.98px) {
    .smt-performance { padding: 60px var(--smt-gutter); }
    /* This slider is slidesPerView:'auto', so its peek is set here rather than
       in the Swiper config like the other three. 90% + the 24px gap puts the
       next card's edge ~12px inside the frame - the same sliver they show. */
    .smt-performance-swiper .swiper-slide { width: 90%; }
    .smt-performance-head { flex-direction: column; align-items: flex-start; gap: 24px; margin-bottom: 32px; }
    .smt-performance-head-copy h2 { font-size: 28px; line-height: 36px; margin-bottom: 12px; }
    .smt-performance-head-copy p { font-size: 16px; line-height: 24px; }
    .smt-performance-card-media { height: 200px; }
    .smt-performance-card-copy h3 { font-size: 20px; line-height: 28px; }
    .smt-performance-card-copy p { font-size: 15px; line-height: 24px; -webkit-line-clamp: 3; }
}

/* ==========================================================================
   What Our Community Says (Figma: node 40002476:87433).

   The CARD here is the home page's testimonial card, reproduced under this
   page's prefix rather than shared: this page loads summit-revamp.css and not
   home-revamp.css, and the partners marquee is already duplicated across the
   two the same way (.hr-partners-* / .smt-partners-*). Geometry, gradient,
   dashed rule, corner pattern and quote mark all match .hr-testimonial-card
   exactly — the two differ only in the BAND behind them, dark brown on the
   home page against this one's cream. The image assets are shared, not copied.

   Like the home page's band, this one has NO bottom padding: the cards are
   rounded on their top corners only and overflow:hidden cuts them at the
   section's bottom edge, so they read as running under the boundary with the
   divider below rather than each ending at its own content height.
   ========================================================================== */
.smt-community {
    position: relative;
    background: var(--hr-cream-500);
    /* Bottom padding stays 0 on desktop deliberately - this section is last on
       the page and is designed to run flush into the footer's dark band. The
       phone breakpoint adds a bottom gap of its own, where the pager sits much
       closer to that edge and needed the breathing room. */
    padding: 100px var(--smt-gutter) 0;
    overflow: hidden;
}
.smt-community-inner { position: relative; z-index: 1; max-width: none; margin-inline: auto; }
/* Figma anchors this 2219x687 artwork 149px past the frame's left edge and
   lets it run 227px below the bottom, so the shapes bleed off three sides and
   only their upper silhouette shows. Kept proportional (115.5% — the artwork's
   own width as a share of Figma's 1922 frame) and centred, so both corner
   clusters stay symmetric about the page instead of drifting apart as the
   viewport widens. */
.smt-community-shapes {
    position: absolute;
    left: 50%;
    bottom: -227px;
    width: 115.5%;
    height: 687px;
    max-width: none;
    transform: translateX(-50%);
    pointer-events: none;
    z-index: 0;
}
/* Faint diamond accents at the band's edges, same motif and placement as the
   home page's .hr-testimonials::before/::after — retinted for a cream band,
   where the home page's rgba(255,255,255,.04) would be invisible.

   Positioned so the WHOLE diamond clears the band's edges - it is not meant to
   be clipped by them. That takes a positive inset, not a negative one, because
   the rotation makes the shape wider than its own box: a 74px square turned
   45deg measures 74*sqrt(2) ≈ 104.7px across its diagonal, i.e. ~15.4px beyond
   each side of the 74px box it occupies. Anything less than that inset and the
   tip crosses the edge and gets cut. 20px leaves the full diamond visible with
   a few px to spare. (Earlier values of -26/-30, then -37, all put part or half
   of the shape off-screen.) */
.smt-community::before,
.smt-community::after {
    content: "";
    position: absolute;
    /* The real motif is a 170px vertical line running down into two diamonds
       (attend-deco.svg, the same file .smt-attend-deco uses) - not the bare
       rotated square this section had, which drew the diamonds but dropped the
       line entirely. Painted through mask-image rather than as a background so
       the artwork's baked-in #B1AFA5 can be retinted to this cream band's
       #f2f0e2; the same technique .smt-icon-mask uses elsewhere on this page. */
    width: 74px;
    height: 306px;
    background-color: #f2f0e2;
    -webkit-mask: url("../images/summit-revamp/attend-deco.svg") no-repeat center / 100% 100%;
    mask: url("../images/summit-revamp/attend-deco.svg") no-repeat center / 100% 100%;
    pointer-events: none;
    z-index: 0;
}
/* Full width sits inside the inset, so nothing is clipped by the band's edge.
   No box-shadow duplicate any more either - the asset already carries both
   diamonds, which is what that shadow was faking. */
.smt-community::before { left: 20px; bottom: 0; }
.smt-community::after { right: 20px; top: 0; }

/* ---------- Head: title left, pager right ---------- */
.smt-community-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    flex-wrap: wrap;
    margin-bottom: 56px;
}
.smt-community-head h2 {
    font-size: 50px;
    line-height: 72px;
    font-weight: 700;
    color: var(--hr-brown-500);
    margin: 0;
}
/* Figma paints these two words #d98500 (yellow/yellow-500), a step darker than
   the --hr-yellow-400 this page's shared .hr-accent uses — scoped here for the
   same reason .smt-performance-accent is. */
.smt-community-accent { color: var(--hr-yellow-500); }
/* justify-content:space-between only spaces items apart on a shared row — once
   the heading forces the pager onto its own wrapped line, a solo flex item
   defaults to the line's start, so the auto margin pins it to the trailing
   edge regardless of wrap (same fix as the home page's equivalent). */
.smt-community-nav-group { display: flex; align-items: center; gap: 8px; margin-inline-start: auto; flex-shrink: 0; }
/* Identical to .smt-performance-nav above — the same Figma "Button" component
   (56px from 16px padding around a 24px icon, 61px pill radius, a 1.5px inside
   stroke drawn as the first inset shadow so the button stays 56px rather than
   59px, plus the inset highlight and ambient shadow stack), and the same
   home's translucent fill/stroke: this band is cream-500 rather than cream-400,
   but Figma renders the disc within a level or two of the same colour on
   both. */
/* Same recipe as .smt-performance-nav above - see its note. */
.smt-community-nav {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Was padding 16px around a 24px icon, which also came to 56 - but the
       target sets the box, so set the box. */
    width: 56px;
    height: 56px;
    padding: 0;
    border-radius: 50%;
    border: 1.5px solid rgba(27,25,12,.08);
    background: rgba(225,255,255,.2);
    color: var(--hr-brown-900);
    cursor: pointer;
    flex-shrink: 0;
    box-shadow: 0 4px 14px rgba(27,25,12,.06);
}
/* .35 dimmed the disc back down to roughly the cream it sits on, throwing away
   the glass read the fill above exists to give — see .smt-performance-nav. */
.smt-community-nav.swiper-button-disabled { opacity: .55; cursor: default; pointer-events: none; }
/* Reuses the project's existing vuesax arrow rather than shipping another copy:
   the file is stroked cream for dark surfaces, so it's recoloured through
   .smt-icon-mask (mask-image + currentColor) to Figma's #0b0b05. */
.smt-community-nav-icon {
    width: 24px;
    height: 24px;
    -webkit-mask-image: url("../images/home-revamp/icon-arrow-right.svg");
    mask-image: url("../images/home-revamp/icon-arrow-right.svg");
}
.smt-community-nav-prev .smt-community-nav-icon { transform: scaleX(-1); }
/* Mirror the whole circular button for RTL, same approach as
   .smt-performance-nav — a true reflection rather than re-deriving each
   arrow's direction. */
[dir="rtl"] .smt-community-nav { transform: scaleX(-1); }


/* ---------- Slider ---------- */
/* Equal-height slides so every card reaches the band's bottom edge and is cut
   there, rather than each ending at its own content height. */
.smt-community-swiper { overflow: hidden; }
.smt-community-swiper .swiper-slide { height: auto; display: flex; }
.smt-community-swiper .swiper-slide > * { width: 100%; }

/* ---------- Card ---------- */
.smt-community-card {
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    /* Tightened from 54px gap / 56-40-100 padding / 540px min-height, which
       together held the card at 605px against only ~341px of actual content -
       roughly 260px of it was empty. The bottom padding is still the largest
       of the three because this card is deliberately clipped by the footer
       (see the squared bottom corners below) and the copy needs clearance
       before that cut; it just no longer needs to be 100px. min-height is
       gone entirely - the slides are already equal-height via
       .smt-community-swiper .swiper-slide, so it was only ever padding out
       the shortest testimonial. */
    /* One type scale for the whole card, with every length below written as a
       ratio of it - the technique .hr-testimonial-card uses on the home page.
       The vw coefficient is fitted to THIS card's own width curve, not copied
       from home's (its card is a different width at every viewport):
         1920 -> 447px   1512 -> 402px   1280 -> 337px   1200 -> 315px
       which is ~0.28vw - 21px through the 1200-1512 band. Holding the type at
       a flat 24px there let the quote wrap to 12 lines and ran the card to
       821px tall at 992 against 485px at 1920; scaling with the card keeps
       card-width/font-size at 18.6 from 1200 all the way up, so the card's
       height stays put. Caps at 24px from 1672px up, which is where
       .smt-community-inner's 1400px max-width stops the card growing anyway,
       so every calc() below still resolves to its Figma value on a wide
       monitor. Floors at 16px, as home's does. */
    /* BIL-816: this card is now the HOMEPAGE component's values verbatim
       (.hr-testimonial-card, home-revamp.css) - scale, gap, padding, min-height,
       and the accent's anchoring below. The ticket asks for the two to match
       exactly, so the locally-fitted numbers that used to live here are gone
       rather than re-tuned.
       Home's `@media (min-width:992px) and (max-width:1199.98px)
       { --hr-tc-fs: 18px }` is copied too - see below. It is fitted to a 2-up
       card through that band, so testimonials.blade.php's carousel now drops to
       2-up at the same 1200 home does rather than 992; otherwise the flat 18px
       would land on a 3-up card this section alone has. */
    --smt-tc-fs: clamp(16px, 1.108vw + 2.7px, 24px);
    gap: calc(var(--smt-tc-fs) * 2.25);
    /* Top corners only — the bottom is squared off and clipped by the band.
       Rounded again on mobile, where the band closes under the card (BIL-816). */
    border-radius: 40px 40px 0 0;
    padding: calc(var(--smt-tc-fs) * 2.3333) calc(var(--smt-tc-fs) * 1.6667) calc(var(--smt-tc-fs) * 4.1667);
    min-height: calc(var(--smt-tc-fs) * 22.5);
    color: var(--hr-cream-50);
    background: linear-gradient(180deg, #1e6096 0%, #104f83 62%, #104f83 100%);
    /* Fills the equal-height slide, as home's card does. Without it the card
       stops at its own content height and short testimonials sit shorter than
       their neighbours. */
    height: 100%;
    box-shadow: 0 13px 14.7px rgba(0,0,0,.02);
}
/* home-revamp.css carries this verbatim: through 992-1199 the carousel is 2-up,
   so the card runs wider than the 3-up formula the clamp is fitted to and a flat
   ratio suits it better. */
@media (min-width: 992px) and (max-width: 1199.98px) {
    .smt-community-card { --smt-tc-fs: 18px; }
}

/* Faint accent shape bled from the top-right corner (Figma "Vector 4"), the
   exported asset rather than a hand-rolled pattern. */
/* Anchored to the card's TRAILING edge, as on the homepage. `left: 83px` was
   the pre-BIL-742 formulation: 83 is 518 - 578.5 + 143, i.e. correct only for
   the 518px card on the 1922 board. This card measures 447px at 1920 and 402px
   at 1512, so an absolute left slid the shape inward off the corner and parked
   it over the quote mark. Pinning the 143px overhang instead reproduces every
   board at every width, and is what lets it survive the crop on a phone -
   which is why it no longer needs hiding there (BIL-816). */
.smt-community-card::after {
    content: "";
    position: absolute;
    inset-inline-end: -143px;
    top: -162px;
    width: 578.5px;
    height: 449.432px;
    background: url("../images/home-revamp/testimonial-pattern.svg") no-repeat;
    background-size: 100% 100%;
    pointer-events: none;
}
.smt-community-card > * { position: relative; z-index: 1; }
/* Text column and quote-mark share the row via space-between rather than
   absolute positioning, so the mark can never overlap the name or the
   description at any card width or text length. */
.smt-community-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; width: 100%; }
.smt-community-card-info { display: flex; flex-direction: column; gap: 12px; min-width: 0; flex: 1 1 auto; }
.smt-community-card-info h3 { font-size: calc(var(--smt-tc-fs) * 1.3333); line-height: 1.25; font-weight: 700; margin: 0; }
.smt-community-designation { font-size: calc(var(--smt-tc-fs) * 0.8333); line-height: 1.4; opacity: .6; margin: 0; }
.smt-community-quote {
    flex: 0 0 calc(var(--smt-tc-fs) * 4.75);
    width: calc(var(--smt-tc-fs) * 4.75);
    height: calc(var(--smt-tc-fs) * 4.75);
    position: relative;
}
/* The exported asset's 133px canvas includes its drop-shadow bleed, so it is
   centred slightly larger than the 114px layout box instead of clipped to it. */
.smt-community-quote img {
    position: absolute;
    top: 50%;
    left: 50%;
    width: calc(var(--smt-tc-fs) * 5.5417);
    height: calc(var(--smt-tc-fs) * 5.5417);
    transform: translate(-50%, -50%);
    pointer-events: none;
}
/* Figma exports this divider as an SVG stroke-dasharray of "9 9" — a plain
   `border-top: dashed` renders a browser-dependent dash length, so the exact
   9px-on/9px-off rhythm is reproduced with a repeating gradient instead. */
.smt-community-card hr {
    border: 0;
    height: 1px;
    margin: 0;
    background-image: repeating-linear-gradient(to right, rgba(255,255,255,.6) 0 9px, transparent 9px 18px);
}
.smt-community-card p { font-size: var(--smt-tc-fs); line-height: 1.3333; margin: 0; }

@media (max-width: 991.98px) {
    .smt-community-card { padding: 40px 28px 20px; min-height: 0; gap: 36px; }
    /* BIL-816 (1): the accent no longer disappears on mobile. It was hidden
       because the old absolute `left` pushed it off the card entirely at this
       width; anchored to the trailing edge it crops correctly, exactly as
       home's does. */
    .smt-community-quote { flex-basis: 62px; width: 62px; height: 62px; }
    .smt-community-quote img { width: 72px; height: 72px; }
    .smt-community-card-info h3 { font-size: 24px; line-height: 30px; }
    .smt-community-designation { font-size: 16px; line-height: 24px; }
    /* The quote DOES step down here, matching home's phone board. The note that
       used to sit here claimed this card was "a fixed 382px in the slider
       regardless of viewport" and so had nothing narrower to fit into - that is
       not what it renders: measured, it is 447px at 1920, 402px at 1512, 315px
       at 1200 and 256px at 992. Holding the quote at 24px was what ran the card
       to 609px tall at 768 on a 9-line quote, against home's 353px on 5. */
    .smt-community-card p { font-size: 16px; line-height: 26px; }
    /* No flex-basis override here any more. It re-set the basis to 80px AFTER
       the 991.98 block had taken the quote to home's 62px, and on a flex item
       the basis is what sizes the box - so the width:62px above was silently
       ignored and the diamond stayed 80px on a phone (BIL-816). */
}
/* Steps down with the four sibling sections at this same breakpoint so the
   whole page scales together. */
@media (max-width: 767.98px) {
    /* BIL-816: rounded bottom, at home's own breakpoint for it (767.98, not
       991.98) - below here the band closes under the card instead of clipping
       it, so the squared-off bottom has nothing to sit against. */
    .smt-community-card { border-radius: 40px; }
    /* Home's own phone-board figures (.hr-testimonials is 64px 16px 0 from
       992px down, with the bottom going back to 64px here), NOT this page's
       shared --smt-gutter, which is 12px at this width. The 4px per side is
       what made the slide 304px against home's 296px and showed 2pp more of
       the card's corner pattern - the slider itself already matches. */
    .smt-community { padding: 64px 16px; }
    .smt-community-head { gap: 24px; margin-bottom: 32px; }
    .smt-community-head h2 { font-size: 28px; line-height: 40px; }
    .smt-community-shapes { display: none; }
    .smt-community::before,
    .smt-community::after { display: none; }
}

/* Decorative diamond+line divider between the FAQ and Partners sections
   (Figma): a cluster of 5 touching diamonds at each end, connected by a
   thin full-width line. Reuses the .smt-hero-diamond shape, recolored. */
/* The rotated diamonds' own bounding box is wider than their 20px base
   size (~28px), so with no horizontal inset at all the first/last diamond
   overflowed past the viewport edge - the far corner clipped off rather
   than reading as part of the divider ("connecting dots... overlapped",
   BIL-598). A small side inset keeps every diamond fully on-screen.
   That inset only needs to cover the rotated corner's own overhang beyond
   the 20px box - 20 * (sqrt(2)-1) / 2 ≈ 4.14px - not an arbitrary 24px:
   Figma's own frame (node 1755:11399) has the diamond clusters flush
   against the true page edges, and the previous 24px value left a large
   visible gap on both sides instead of the diamonds reading as edge-to-edge. */
.smt-diamond-divider {
    display: flex;
    align-items: center;
    /* No fill of its own. This used to paint --hr-cream-400 (#faf9ed) while the
       sections it separates (.smt-agenda, .smt-stats) paint --hr-cream-500
       (#f9f7e9), so the divider read as a pale full-width stripe cutting across
       the page - the "white band" behind the line. It is a flat colour, not a
       gradient; the gradient look is just that lighter strip against the darker
       cream on both sides.
       Transparent rather than hard-coding cream-500: <main> already paints
       cream-500 behind the whole page, so the row now picks the page tone up
       automatically and the agenda -> divider -> stats run is seamless. */
    background: transparent;
    padding: 20px 4.14px;
}
/* Zero gap between the 5 diamonds' unrotated 20px layout boxes puts their
   centres only 20px apart - but each rotated diamond's visual point extends
   4.14px beyond its own box on every side (see the divider padding above),
   so with no gap those points overlapped by 8.284px and the whole cluster
   read as one blended blob instead of 5 distinct touching points. Same
   fix/formula already used for the event-detail hero's diamond pair
   (evtd-hero-divider, event-detail-revamp.css): gap = 20 * (sqrt(2)-1) ≈
   8.284px separates the boxes by exactly the overlap amount, so the
   rotated points meet edge-to-edge instead of overlapping. */
.smt-diamond-divider-cluster { display: flex; align-items: center; flex-shrink: 0; gap: 8.284px; }
/* Figma (node 40001286:68074): diamonds are 20px squares (not 14px) in a
   solid, full-opacity #F3D9B0 (yellow/yellow-100) — not --hr-yellow-400
   faded with opacity, which is both the wrong size and the wrong color. */
.smt-diamond-divider .smt-hero-diamond {
    width: 20px;
    height: 20px;
    background: #f3d9b0;
}
.smt-diamond-divider-line {
    flex: 1 1 auto;
    height: 2px;
    background: #f3d9b0;
}
@media (max-width: 767.98px) {
    .smt-diamond-divider-cluster .smt-hero-diamond:nth-child(n+4) { display: none; }
}

/* ---------- Highlights video popup ---------- */
/* Same fix as the home page's #watchStoryModal (home-revamp.css): .custom-modal
   is a generic popup style with no video sizing at all, so the <video> rendered
   at its intrinsic default size in the top-left corner of a plain white
   modal-lg box instead of filling it (BIL-595). */
#summitHighlightsModal .modal-content { background: #000; border-radius: 20px; overflow: hidden; }
#summitHighlightsModal video { width: 100%; display: block; }

/* ==========================================================================
   Why Attend (Figma: node 40002490:88557 "Main Content Workspace", 1920x868)
   Section is a flat brown-500 field - the 2219x687 "Frame 2147239214" that
   Figma layers behind the content carries no fill (sampled: the render is a
   uniform rgb(27,25,12) everywhere the cards and decorations don't cover), so
   there is deliberately no background wash here. The only background art is the
   two line-and-diamond decorations, at 10% opacity.
   Prefix: .smt-attend-
   ========================================================================== */
.smt-attend {
    position: relative;
    /* Clips the two decorations, which Figma hangs past the frame's top and
       bottom edges (-67.94px and -75.06px). */
    overflow: hidden;
    padding: 120px var(--smt-gutter);
    background: var(--hr-brown-500, #1b190c);
}
/* Light variant: applied from show.blade.php when the section that renders
   immediately BEFORE this one is itself dark (in practice: Performance and
   Partners both switched off, leaving Speakers directly above). Two dark bands
   back to back merge into one slab, so this one takes the page cream instead
   and the alternation down the page survives.
   Only the four things that actually depend on a dark ground are flipped - the
   cards keep their light type because they sit on their own photo + scrim, not
   on the section background. */
.smt-attend--light { background: var(--hr-cream-500); }
.smt-attend--light .smt-attend-copy h2 { color: var(--hr-brown-500, #1b190c); }
/* On cream these take .smt-community-nav's recipe verbatim - the other
   cream-ground carousel nav on this page - rather than a glassier variant of
   the dark-ground button. The dark version's whole treatment (20% white fill,
   the shared gradient rim, the plus-lighter bloom) exists to read as glass
   against brown-500; over cream the fill vanishes, the white rim disappears
   and the bloom blows out, which is what left these looking like soft blobs.
   The DARK variant is untouched: this only applies under .smt-attend--light. */
.smt-attend--light .smt-attend-btn {
    padding: 0;                                  /* community sets the box, not padding */
    border: 1.5px solid rgba(27, 25, 12, .08);
    background: rgba(225, 255, 255, .2);
    color: var(--hr-brown-900);
    box-shadow: 0 4px 14px rgba(27, 25, 12, .06);
    /* The dark button clips its overflow for the Ellipse bloom and pulls the
       shared rim inward (--hr-ring-inset:0) to survive that clip. With the bloom
       gone here, both revert: overflow opens back up and the rim sits on the
       BORDER box at the shared default, which is where the homepage's own glass
       circles carry it. */
    overflow: visible;
    --hr-ring-inset: -1.5px;
}
.smt-attend--light .smt-attend-btn:hover { background: rgba(225, 255, 255, .45); }
/* Rim KEPT - this is the homepage's glass edge. .home-revamp .hr-icon-btn (and
   so .hr-memories-filmstrip's circles) carries this same shared gradient ring
   over cream, which is what gives the disc its glassy edge rather than a flat
   stroke. It is the rim, not the bloom: the glow that used to sit on ::after is
   the separate thing, and stays off. */
/* No glow on the cream variant, at rest or on hover. ::after is Figma's
   Ellipse 262 bloom on the dark button - always on there - and ::before is the
   shared gradient rim; both are built to read as glass against brown-500 and
   both blow out to white over cream. This variant is a flat disc with a
   hairline border, so neither is wanted.
   (An earlier pass borrowed .smt-performance-nav's shared hover glow here.
   That is deliberately NOT the case any more - no glow on white.) */
.smt-attend--light .smt-attend-btn::after { display: none; }
/* attend-arrow-{left,right}.svg are stroke="white" and would vanish on cream.
   brightness(0) takes the stroke to near-black, matching community's
   --hr-brown-900 icon; the project's icon set has no left-facing dark variant
   to pair with speaker-detail/icon-arrow-right-dark.svg. */
.smt-attend--light .smt-attend-btn img { filter: brightness(0); }

.smt-attend-inner {
    position: relative;
    z-index: 1;
    max-width: none;
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: 80px;
}

/* ---- Line + two diamonds, #B1AFA5 at 10%. Figma anchors these to the frame
   edges, not the content column: the left one's centre sits 80px in from the
   left edge, the right one's 90px in from the right. ---- */
.smt-attend-deco {
    position: absolute;
    z-index: 0;
    width: 74px;
    height: 307px;
    opacity: .1;
    pointer-events: none;
    background: url("../images/summit-revamp/attend-deco.svg") no-repeat center / 100% 100%;
}
.smt-attend-deco-start { inset-inline-start: 43px; bottom: -75.06px; transform: rotate(180deg); }
.smt-attend-deco-end { inset-inline-end: 53px; top: -67.94px; }
[dir="rtl"] .smt-attend-deco-start { transform: rotate(180deg) scaleX(-1); }
[dir="rtl"] .smt-attend-deco-end { transform: scaleX(-1); }

/* ---- Header ---- */
.smt-attend-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}
.smt-attend-copy { display: flex; flex-direction: column; gap: 16px; max-width: 1059px; }
.smt-attend-copy h2 {
    margin: 0;
    font-size: 48px;
    line-height: 56px;
    font-weight: 700;
    color: var(--hr-cream-100, #fdfdf8);
}
.smt-attend-copy p {
    margin: 0;
    max-width: 933px;
    font-size: 24px;
    line-height: 32px;
    color: var(--hr-brown-300, #66655c);
}

/* ---- Glass nav buttons: 56x56 (16px padding + a 24px icon). The 1.5px stroke
   is an inset ring rather than a border because Figma draws strokes inside the
   frame - a real border would push these to 59px. Unlike the cream-page
   buttons elsewhere in this codebase, the exported white overlays are correct
   here: on brown-500 they lighten as reported (measured fill rgb(71,69,61),
   which is white at 19.3% over rgb(27,25,12) - i.e. the spec's 20%). ---- */
.smt-attend-nav { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.smt-attend-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    padding: 16px;
    box-sizing: border-box;
    border: 0;
    border-radius: 61px;
    overflow: hidden;
    cursor: pointer;
    background: rgba(255,255,255,.2);
    /* --hr-ring-inset: 0 because this button has no border and clips its
       own overflow (the ::after glow below); the shared gradient ring in
       layout-revamp.css therefore paints on ::before at inset 0, replacing
       the flat `inset 0 0 0 1.5px` stroke that used to stand in for it. */
    --hr-ring-inset: 0;
    box-shadow:
        inset 0 4px 6.1px rgba(255,255,255,.23),
        0 3px 6px rgba(0,0,0,.03),
        1px 10px 10px rgba(0,0,0,.03),
        2px 23px 14px rgba(0,0,0,.02);
    transition: background-color .2s ease, transform .2s ease;
}
.smt-attend-btn:hover { background: rgba(255,255,255,.3); }
.smt-attend-btn:disabled,
.smt-attend-btn.swiper-button-disabled { opacity: .4; cursor: default; }
.smt-attend-btn img { width: 24px; height: 24px; display: block; position: relative; z-index: 1; }
/* Figma's "Ellipse 262" glow - a white circle at 40% under an 18.55 blur,
   parked just below the button so only its top fringe lands inside the clip.
   Same treatment as the listing page's buttons; the dial keeps plus-lighter
   from blowing out, since additively it would otherwise clip to white. */
.smt-attend-btn::after {
    content: "";
    position: absolute;
    left: calc(50% + .5px);
    bottom: -139.65px;
    width: 174.2px;
    height: 174.2px;
    transform: translateX(-50%);
    background: radial-gradient(circle 87.1px at 50% 50%,
        rgba(255,255,255,.39) 0%,
        rgba(255,255,255,.33) 31%,
        rgba(255,255,255,.20) 54%,
        rgba(255,255,255,.11) 66%,
        rgba(255,255,255,.06) 77%,
        rgba(255,255,255,.02) 88%,
        rgba(255,255,255,0) 100%);
    mix-blend-mode: plus-lighter;
    opacity: var(--smt-attend-glow, .1);
    pointer-events: none;
}
[dir="rtl"] .smt-attend-btn img { transform: scaleX(-1); }

/* ---- Cards ---- */
/* min-width:0 is load-bearing: as a flex child of .smt-attend-inner this
   defaults to min-width:auto, so the slide row's intrinsic width wins and the
   container blows out to tens of thousands of px - Swiper then sizes every
   slide off that. width:100% pins it to the column instead. */
.smt-attend-swiper { overflow: hidden; width: 100%; min-width: 0; }
.smt-attend-swiper .swiper-slide { height: auto; }
.smt-attend-card {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    height: 444px;
    padding: 24px;
    box-sizing: border-box;
    border: 2px solid #49473e;
    border-radius: 40px;
    overflow: hidden;
    isolation: isolate;
}
.smt-attend-card-media {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
}
/* Figma layers two things over the photo: a diagonal scrim that darkens the
   lower-left corner toward brown-500, then a blurred panel across the bottom
   fading to brown-900. The panel is deliberately ~2x the card's width
   (785.586px against 382px) so its blur has clean edges to sample - the card's
   own overflow:hidden crops the overhang. */
.smt-attend-card-scrim {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(215.13deg, rgba(0,0,0,0) 37.5%, var(--hr-brown-500, #1b190c) 81.25%);
    pointer-events: none;
}
.smt-attend-card-fade {
    position: absolute;
    left: 50%;
    bottom: -16.08px;
    z-index: 2;
    width: 205.6%;
    height: 270.902px;
    transform: translateX(-50%);
    /* Tint only. Its gradient already starts fully transparent, so it needs no
       mask of its own to ease in. */
    background: linear-gradient(to bottom, rgba(27,25,12,0) 0%, var(--hr-brown-900, #0b0b05) 100%);
    pointer-events: none;
}
/* The blur is a SEPARATE layer from the tint above, deliberately. Sharing one
   mask meant the blur only reached full strength around 62% down the panel, by
   which point the tint is nearly opaque - so the blur was doing its work under
   near-black and read as nothing at all. This layer starts 90px higher and is
   fully on by 55%, inside the band where the photo is still visible, which is
   what makes the softening actually show. Blur radius stays a single knob.

   backdrop-filter also switches on at full strength the instant an element
   starts, so this needs its own ramp regardless, or it draws a hard seam. */
.smt-attend-card-fade::before {
    content: "";
    position: absolute;
    inset: -90px 0 0 0;
    -webkit-backdrop-filter: blur(var(--smt-attend-blur, 26px));
    backdrop-filter: blur(var(--smt-attend-blur, 26px));
    -webkit-mask-image: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,.3) 26%, rgba(0,0,0,.75) 42%, #000 55%);
    mask-image: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,.3) 26%, rgba(0,0,0,.75) 42%, #000 55%);
    pointer-events: none;
}
.smt-attend-card-body { position: relative; z-index: 3; display: flex; flex-direction: column; gap: 12px; }
.smt-attend-card-body h3 {
    margin: 0;
    font-size: 24px;
    line-height: 32px;
    font-weight: 700;
    color: var(--hr-cream-200, #fcfbf5);
}
.smt-attend-card-body p {
    margin: 0;
    font-size: 16px;
    line-height: 24px;
    color: var(--hr-cream-100, #fdfdf8);
    opacity: .7;
    /* Figma truncates the blurb at two lines with an ellipsis. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ---- Responsive. Figma's 1600px content cap holds on the widest monitors,
   so above 1920 the section simply centres rather than stretching. ---- */
@media (max-width: 1599.98px) {
    .smt-attend { padding: 100px var(--smt-gutter); }
    .smt-attend-inner { gap: 64px; }
    /* The decorations are pinned 43px/53px from the section's edges, which is
       Figma's spec at 1920 where the gutter is a full 160px - each one is 74px
       wide and clears the content column by ~33px. This breakpoint halves the
       gutter to 80px, which cannot hold 74 + 33, so they start overlapping the
       nav buttons and the cards (measured -47px and -37px into the column at
       1434). There is no position that fits, so they come off here rather than
       collide. This threshold is tied to the padding change above - move one
       and the other has to move with it. */
    .smt-attend-deco { display: none; }
}
@media (max-width: 1199.98px) {
    .smt-attend { padding: 88px var(--smt-gutter); }
    .smt-attend-copy h2 { font-size: 40px; line-height: 48px; }
    .smt-attend-copy p { font-size: 20px; line-height: 30px; }
    .smt-attend-card { height: 420px; }
}
@media (max-width: 991.98px) {
    .smt-attend-inner { gap: 48px; }
}
@media (max-width: 767.98px) {
    .smt-attend { padding: 64px var(--smt-gutter); }
    .smt-attend-head { flex-direction: column; align-items: flex-start; gap: 24px; }
    .smt-attend-copy { gap: 12px; }
    .smt-attend-copy h2 { font-size: 32px; line-height: 40px; }
    .smt-attend-copy p { font-size: 16px; line-height: 26px; }
    .smt-attend-card { height: 380px; padding: 20px; border-radius: 32px; }
    .smt-attend-card-body h3 { font-size: 20px; line-height: 28px; }
    /* The nav sits under the copy on phones; Figma has no phone frame for this
       section, so this follows the same pattern the other sliders use here. */
    .smt-attend-nav { align-self: flex-end; }
}

/* ==========================================================================
   Mobile pass, sections 3-9 (Figma "Annual Gathering" 402px artboard,
   node 40002887:105572). Sections 1-2 (hero, agenda) are handled up with
   their own rules; everything below shares one recurring shape in that
   artboard, so it is expressed once here rather than per section:

     - 60px/20px section padding, content 362px wide
     - the head centres: title 24/32 bold, description 16/24, 16px apart,
       32px clear of the content beneath it (Figma node 40002887:105669)
     - any "View more" button or prev/next pager leaves the head row and
       re-appears CENTRED BELOW the content

   That last move is why several rules use display:contents: those actions
   are markup children of their section's head, so from inside it they
   cannot be ordered against the slider/grid, which is the head's SIBLING.
   Dissolving the head's box promotes both to children of the section's
   flex column, where order can sequence all three. Same technique already
   used by .smt-faq-col-left and .smt-agenda-head above.
   ========================================================================== */
@media (max-width: 767.98px) {
    /* Sections whose padding still came from --smt-gutter (40px at this
       width) or a one-off value - bring them onto the artboard's 20px. */
    .smt-stats, .smt-performance { padding: 60px var(--smt-gutter); }
    .smt-attend { padding-inline: var(--smt-gutter); }
    /* Figma keeps this corner on mobile (node 40002887:105702) at 100x82 -
       the same asset as desktop, just smaller - so undo the blanket
       display:none it picks up at 1199.98px. The 21px-tuck sizing used on
       desktop doesn't apply here: the cards are full-width at this size, so
       the artwork simply sits behind their bottom-left corner as drawn. */

    /* ---- Shared centred head ---- */
    .smt-stats-head,
    /* :not() matters - .smt-speakers-head-actions is also a direct div child,
       and ".smt-speakers-head > div" (class+type) outranks its own single-class
       selector, so without this the actions block inherits the copy's centring
       AND its order:1, landing back above the slider. */
    .smt-speakers-head > div:not(.smt-speakers-head-actions),
    .smt-performance-head-copy,
    .smt-partners-head > div,
    .smt-attend-copy,
    .smt-faq-head,
    .smt-community-head {
        text-align: start;
        align-items: flex-start;
    }
    .smt-stats-head h2,
    .smt-speakers-head h2,
    .smt-performance-head-copy h2,
    .smt-partners-head h2,
    .smt-attend-copy h2,
    .smt-faq-head h2,
    .smt-community-head h2 {
        font-size: 24px;
        line-height: 32px;
        margin: 0 0 16px;
    }
    .smt-stats-head p,
    .smt-speakers-head p,
    .smt-performance-head-copy p,
    .smt-partners-head p,
    .smt-attend-copy p,
    .smt-faq-head p {
        font-size: 16px;
        line-height: 24px;
        margin: 0;
        max-width: none;
    }

    /* ---- Speakers: actions drop below the slider ---- */
    .smt-speakers-inner { display: flex; flex-direction: column; }
    .smt-speakers-head { display: contents; }
    .smt-speakers-head > div:not(.smt-speakers-head-actions) { order: 1; margin-bottom: 32px; }
    .smt-speakers-swiper { order: 2; }
    .smt-speakers-head-actions {
        order: 3;
        justify-content: center;
        margin: 40px 0 0;
        margin-inline-start: 0;
    }

    /* ---- Performance: pager drops below the slider ---- */
    .smt-performance-inner { display: flex; flex-direction: column; }
    .smt-performance-head { display: contents; }
    .smt-performance-head-copy { order: 1; margin-bottom: 32px; }
    .smt-performance-swiper { order: 2; }
    .smt-performance-nav-group { order: 3; justify-content: center; margin-top: 40px; }

    /* ---- Why Attend: pager drops below the slider ---- */
    .smt-attend-inner { display: flex; flex-direction: column; }
    .smt-attend-head { display: contents; }
    .smt-attend-copy { order: 1; margin-bottom: 32px; }
    /* Without this the slider keeps the default order:0 and, since the head
       is display:contents, sorts ABOVE the order:1 heading. */
    .smt-attend-swiper { order: 2; }
    .smt-attend-nav {
        order: 3;
        align-self: center;
        justify-content: center;
        margin-top: 40px;
    }

    /* ---- Testimonials: pager drops below the slider ---- */
    .smt-community-inner { display: flex; flex-direction: column; }
    .smt-community-head { display: contents; }
    .smt-community-head h2 { order: 1; margin-bottom: 32px; }
    /* Same default-order:0 trap as .smt-attend-swiper above. */
    .smt-community-swiper { order: 2; }

    /* Turning each section's inner into a flex column (above) made every
       slider a flex ITEM, and a flex item defaults to min-width:auto - it
       cannot shrink below its content's intrinsic width. Swiper measures the
       container on init, so instead of 362px it read a runaway width and
       blew the card clean past the viewport (the community slider came out
       at 16777216px - Swiper's overflow sentinel - which also left its
       arrows dead, since there was no real track to page through).
       min-width:0 + an explicit width give it a definite box to measure. */
    .smt-speakers-swiper,
    .smt-performance-swiper,
    .smt-attend-swiper,
    .smt-community-swiper {
        min-width: 0;
        width: 100%;
    }
    /* 4px of the previous and next card show at the track's edges, as on the
       home page. With slidesPerView:'auto' + centeredSlides + loop in the init
       below, the slide takes this width and Swiper centres it:
       4 + 24 + slide + 24 + 4 fills the track, so 56px comes off the full
       width - the two 24px spaceBetween gaps plus the two 4px slivers. */
    .smt-community-swiper .swiper-slide { width: calc(100% - 56px); }
    .smt-community-nav-group {
        order: 3;
        justify-content: center;
        margin-top: 40px;
        margin-inline-start: 0;
    }

    /* ---- Partners: head centres; the marquee below is already full-bleed ---- */
    .smt-partners-head { flex-direction: column; align-items: flex-start; margin-bottom: 32px; }

    /* ---- FAQ: already ordered above (head / list / contact); centre the
       contact card's own copy and button to match the artboard. ---- */
    .smt-faq-head { margin-bottom: 32px; }
    .smt-faq-contact { text-align: start; }
    .smt-faq-contact .hr-btn { align-self: flex-start; }

    /* ---- Dead space between sections ----
       The sections themselves butt directly together and their 60px/60px
       padding is already Figma's, so the excess was never a gap - it was
       these three things.

       1. The divider. Figma's mobile band (node 40002887:105653) is 16px
          tall: 16px diamonds, no vertical padding. Ours inherited desktop's
          20px padding around 20px diamonds = 60px, i.e. ~44px of dead
          height at each of the three section seams. The rotated diamonds
          overhang the 16px band by ~3px either side, exactly as they do in
          Figma - the band is deliberately shorter than its own artwork. */
    .smt-diamond-divider {
        padding-block: 0;
        /* A 16px square rotated 45deg is ~22.6px across its diagonal, so the
           diamonds overhang this 16px band by ~3.3px top and bottom - which
           is exactly what Figma draws (they straddle the seam). Without a
           stacking context of its own, the following section's background
           painted over that overhang and the diamonds came out flat-topped,
           reading as hexagons. Lifting the divider makes the points show. */
        position: relative;
        z-index: 1;
    }
    .smt-diamond-divider .smt-hero-diamond { width: 16px; height: 16px; }
    /* Re-derived for 16px boxes: 16 * (sqrt(2) - 1). Same reasoning as the
       20px version above - separates the boxes by exactly the amount each
       rotated point overhangs, so the tips touch instead of overlapping. */
    .smt-diamond-divider-cluster { gap: 6.627px; }
    /* 2. Why Attend was on a one-off 64px; every other section is on 60. */
    .smt-attend { padding-block: 60px; }
    /* 3. Figma sets 32px between a section head and its content, not 48. */
    .smt-stats-inner { gap: 32px; }
}

/* ==========================================================================
   Mobile "BilAraby Gathering in Numbers" (Figma node 40002817:91819).
   MOBILE ONLY - desktop keeps its own composition untouched.

   This section deliberately breaks the mobile pattern the rest of the page
   follows, so it needs its own block AFTER the shared one above:
     - its head stays LEFT-aligned, where every other mobile head centres
     - the four cards run edge to edge with NO gap
     - all four carry the SAME top-anchored wash, with none of desktop's
       alternating direction or 34px stagger
   ========================================================================== */
@media (max-width: 767.98px) {
    /* Undo the shared centred-head rule for this one section. */
    .smt-stats-head { text-align: start; align-items: stretch; }
    .smt-stats-head h2 { margin-bottom: 16px; }
    .smt-stats-inner { gap: 32px; }

    /* Figma stacks the cards at y 0/194/388/582, each exactly 194 tall - so
       they are contiguous. What reads as space between them is each card's
       own wash fading out at 61.5%, leaving its lower third transparent
       against the cream; it is not a gap, and adding one double-counts it. */
    .smt-stats-grid { gap: 0; }
    /* 194px = 48px padding x2 + 28px label + 24px gap + 46px number. Setting
       the padding/gap rather than a fixed height keeps it correct if a
       label wraps to two lines on a narrow phone. */
    .smt-stat-card {
        height: auto;
        padding: 48px 32px;
        gap: 24px;
        border-radius: 40px;
        /* Blur off on mobile: what it sits over here is flat cream, so it has
           nothing to blur. (It also used to smear .smt-stats-corner's artwork
           under the last card into a white haze - that artwork is gone as of
           BIL-818, but the flat-cream reason stands on its own.) */
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
    }
    .smt-stat-card:nth-child(odd),
    .smt-stat-card:nth-child(even) {
        margin-top: 0;
        border: 0;
        box-shadow: none;
        background: linear-gradient(180deg, rgba(84,138,175,.18) 0%, rgba(51,115,159,0) 61.523%);
    }
    /* Border and shadow are dropped for the same reason as desktop: the node
       spec lists 1px #33739f + a 4px shadow, but the design's own render
       shows neither - the card edge is the wash fading into the cream. */
    .smt-stat-card > span { font-size: 18px; line-height: 28px; }
    /* 46px line box, not the font's own ~56px: Figma draws these digits in a
       46px-tall frame at 56.62px, and that 10px difference per card is what
       put the card at 204px instead of the artboard's 194px. Digits have no
       descender, so the tighter box clips nothing. */
    .smt-stat-card strong { font-size: 56px; line-height: 46px; }
    /* Matches home-revamp.css's .hr-plus override at this same breakpoint:
       at 46px the line box is already tight, so the lift would clip. */
    .smt-stat-card .counter-plus { line-height: 46px; transform: none; }
}

/* ==========================================================================
   Why Attend decoration on mobile (Figma node 40002887:105842).
   The pair is display:none from 1399.98px down, because at those widths the
   desktop artwork collided with the nav buttons and cards. Mobile brings ONE
   of them back - the top-right one only - at its own size: 39x161 with a
   short line above two diamonds, where desktop's is 74x307 with a long one.
   Different proportions, so it needs its own file rather than a squashed
   desktop asset. Placed last so it wins over that blanket hide.
   ========================================================================== */
@media (max-width: 767.98px) {
    .smt-attend-deco-end {
        display: block;
        width: 39px;
        height: 161px;
        /* Sits fully inside the right edge, on the same 20px gutter as the
           content - NOT bleeding off it. Running it off the edge clipped the
           diamonds' left tips, which is what made the pair read as one
           merged blob instead of two.

           top:-62px is deliberate: the artwork is a 90px line above the two
           diamonds, but the design only shows ~28px of that line before the
           section's top edge cuts it off. Pulling the box up by
           (90 - 28) = 62px reproduces that crop, so the diamonds land at the
           same height as the artboard's. .smt-attend has overflow:hidden, so
           the rest of the line is clipped rather than escaping upward. */
        inset-inline-end: 20px;
        top: -62px;
        background-image: url("../images/summit-revamp/attend-deco-mobile.svg");
    }

    /* Drop the frosted band over the lower half of the Why Attend cards. The
       tint layer (.smt-attend-card-fade itself) stays - that is what keeps the
       title/description legible - but the 26px backdrop-blur on top of it goes.
       At desktop card sizes it reads as a soft focus-fade into the copy; at
       phone width the card is short enough that it just smears the photo. */
    .smt-attend-card-fade::before {
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
    }
}
