.nuvem-banner-slideshow {
    background: #000;
    width: 100%;
    position: relative;
    overflow: hidden;
}
.nuvem-banner-slideshow--desktop-fullscreen {
    /* Full viewport minus the host header, so the slider bottom lands at the
       real screen bottom. The host sets --nuvem-banner-offset to its header
       height; standalone it defaults to 0 (true 100dvh). */
    height: calc(100dvh - var(--nuvem-banner-offset, 0px));
}
.nuvem-banner-slideshow--desktop-ratio {
    aspect-ratio: 16/9;
    max-height: 100vh;
}
.nuvem-banner-slideshow__slides {
    width: 100%;
    height: 100%;
    position: relative;
}
.nuvem-banner-slideshow__slide {
    opacity: 0;
    visibility: hidden;
    z-index: 1;
    width: 100%;
    height: 100%;
    transition:
        opacity 0.6s,
        visibility 0.6s;
    position: absolute;
    top: 0;
    left: 0;
}
.nuvem-banner-slideshow__slide--active {
    opacity: 1;
    visibility: visible;
    z-index: 2;
}
.nuvem-banner-slideshow--transition-fade .nuvem-banner-slideshow__slide {
    transition:
        opacity 0.6s,
        visibility 0.6s;
}
.nuvem-banner-slideshow--transition-slide .nuvem-banner-slideshow__slides {
    backface-visibility: hidden;
    will-change: transform;
    transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    transform: translate(0, 0);
}
.nuvem-banner-slideshow--transition-slide .nuvem-banner-slideshow__slide {
    opacity: 1;
    visibility: visible;
    will-change: auto;
    flex: 0 0 100%;
    position: relative;
}
.nuvem-banner-slideshow__image,
.nuvem-banner-slideshow__video,
.nuvem-banner-slideshow__poster {
    object-fit: cover;
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}
.nuvem-banner-slideshow__video {
    background: #000;
}
/* Poster layer: sits behind the video (frontend.js crossfades the video in over
   it). Since the still and the video differ in grade, swapping them hard used to
   flash. The video keeps its own poster attribute for the no-JS path, where this
   fade never starts and the video simply shows over the layer as before. */
.nuvem-banner-slideshow__poster {
    z-index: 0;
}
.nuvem-banner-slideshow__video.is-crossfade {
    opacity: 0;
    transition: opacity 0.5s ease;
}
.nuvem-banner-slideshow__video.is-crossfade.is-visible {
    opacity: 1;
}
@media ( prefers-reduced-motion: reduce ) {
    .nuvem-banner-slideshow__video.is-crossfade {
        transition: none;
    }
}
.nuvem-banner-slideshow__gradient {
    z-index: 5;
    pointer-events: none;
    backface-visibility: hidden;
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    transform: translate(0, 0);
}
.nuvem-banner-slideshow__overlay {
    box-sizing: border-box;
    z-index: 10;
    pointer-events: none;
    backface-visibility: hidden;
    justify-content: center;
    align-items: center;
    width: 100%;
    height: 100%;
    padding: 5vw;
    display: flex;
    position: absolute;
    top: 0;
    left: 0;
    transform: translate(0, 0);
}
.nuvem-banner-slideshow__overlay--top-left {
    justify-content: flex-start;
    align-items: flex-start;
}
.nuvem-banner-slideshow__overlay--top-center {
    justify-content: center;
    align-items: flex-start;
}
.nuvem-banner-slideshow__overlay--top-right {
    justify-content: flex-end;
    align-items: flex-start;
}
.nuvem-banner-slideshow__overlay--center-left {
    justify-content: flex-start;
    align-items: center;
}
.nuvem-banner-slideshow__overlay--center {
    justify-content: center;
    align-items: center;
}
.nuvem-banner-slideshow__overlay--center-right {
    justify-content: flex-end;
    align-items: center;
}
.nuvem-banner-slideshow__overlay--bottom-left {
    justify-content: flex-start;
    align-items: flex-end;
}
.nuvem-banner-slideshow__overlay--bottom-center {
    justify-content: center;
    align-items: flex-end;
}
.nuvem-banner-slideshow__overlay--bottom-right {
    justify-content: flex-end;
    align-items: flex-end;
}
.nuvem-banner-slideshow__overlay--top-left .nuvem-banner-slideshow__overlay-content,
.nuvem-banner-slideshow__overlay--center-left .nuvem-banner-slideshow__overlay-content,
.nuvem-banner-slideshow__overlay--bottom-left .nuvem-banner-slideshow__overlay-content {
    text-align: left;
}
.nuvem-banner-slideshow__overlay--top-right .nuvem-banner-slideshow__overlay-content,
.nuvem-banner-slideshow__overlay--center-right .nuvem-banner-slideshow__overlay-content,
.nuvem-banner-slideshow__overlay--bottom-right .nuvem-banner-slideshow__overlay-content {
    text-align: right;
}
.nuvem-banner-slideshow__overlay-content {
    text-align: center;
    color: #fff;
    pointer-events: auto;
    width: auto;
    max-width: 90vw;
}

/* Each text element controls its own width through the per-element Max Width
   field (applied inline on the element). The content block above no longer
   imposes a fixed width, so a per-element max-width now takes effect; centre the
   elements so a narrower one stays aligned under the others (the position
   classes still set text-align). The descendant selector keeps this above the
   element's own `margin: 0`. */
.nuvem-banner-slideshow__overlay-content .nuvem-banner-slideshow__pre-title,
.nuvem-banner-slideshow__overlay-content .nuvem-banner-slideshow__title,
.nuvem-banner-slideshow__overlay-content .nuvem-banner-slideshow__subtitle {
    margin-left: auto;
    margin-right: auto;
}
@media (width<=768px) {
    .nuvem-banner-slideshow__overlay {
        padding: 5vw;
    }
}
.nuvem-banner-slideshow__pre-title {
    margin-bottom: 3.125rem;
    font-size: 1.25rem;
    font-weight: 300;
    display: block;
}
.nuvem-banner-slideshow__pre-title--small {
    font-size: 1rem;
}
.nuvem-banner-slideshow__title {
    text-shadow: 0 2px 20px #0000004d;
    margin: 0;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.03em;
    display: block;
}
.nuvem-banner-slideshow__title.nuvem-banner-slideshow__title--h1,
.nuvem-banner-slideshow__title.nuvem-banner-slideshow__title--h2,
.nuvem-banner-slideshow__title.nuvem-banner-slideshow__title--h3 {
    /* Fluid title size: scales from 40px on small phones up to 84px on large
       screens with the viewport (the staging rendered size). */
    font-size: clamp(40px, 7.4vw, 84px);
}
.nuvem-banner-slideshow__subtitle {
    margin-top: 3.125rem;
    font-size: 1.25rem;
    font-weight: 300;
    display: block;
}
.nuvem-banner-slideshow__subtitle--small {
    font-size: 1rem;
}
/* CTA button: white fill with a dark (fg) label + icon, the optional arrow
   sliding right on hover (the gap grows). */
.nuvem-banner-slideshow__cta {
    display: inline-flex;
    align-items: center;
    gap: 0.625rem;
    background: #fff;
    color: var(--color-fg, #0a0a0a);
    font-weight: 500;
    font-size: 15px;
    margin-top: 2.5rem;
    padding: 14px 22px;
    border-radius: 2px;
    text-decoration: none;
    backface-visibility: hidden;
    transition: gap 0.2s cubic-bezier(0.25, 1, 0.5, 1);
}
.nuvem-banner-slideshow__cta:hover {
    gap: 1rem;
}
.nuvem-banner-slideshow__cta:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 2px;
}
.nuvem-banner-slideshow__cta-icon {
    width: 18px;
    height: 10px;
    flex: none;
}
.nuvem-banner-slideshow__arrow {
    z-index: 20;
    border: 1px solid #fff;
    cursor: pointer;
    backface-visibility: hidden;
    will-change: transform;
    background: 0 0;
    border-radius: 5px;
    justify-content: center;
    align-items: center;
    width: 40px;
    height: 40px;
    padding: 0;
    transition: all 0.3s;
    display: flex;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}
.nuvem-banner-slideshow__arrow:hover {
    background: #ffffff1a;
    border-color: #fff;
}
.nuvem-banner-slideshow__arrow:focus {
    outline-offset: 2px;
    outline: 2px solid #ffffff80;
}
.nuvem-banner-slideshow__arrow svg {
    fill: #fff;
}
.nuvem-banner-slideshow__arrow:hover svg {
    stroke: #fff;
}
.nuvem-banner-slideshow__arrow--prev {
    left: 3.75rem;
}
.nuvem-banner-slideshow__arrow--next {
    right: 3.75rem;
}
.nuvem-banner-slideshow[data-arrows-desktop="false"] .nuvem-banner-slideshow__arrow {
    display: none;
}
.nuvem-banner-slideshow__dots {
    z-index: 20;
    opacity: 0.6;
    gap: 12px;
    padding: 10px;
    display: flex;
    position: absolute;
    bottom: 30px;
    left: 50%;
    transform: translate(-50%);
}
.nuvem-banner-slideshow__dot {
    cursor: pointer;
    backface-visibility: hidden;
    background: 0 0;
    border: 1px solid #ffffffb3;
    border-radius: 50%;
    width: 12px;
    height: 12px;
    padding: 0;
    transition: all 0.3s;
}
.nuvem-banner-slideshow__dot:hover {
    background: #ffffff4d;
    border-color: #fff;
}
.nuvem-banner-slideshow__dot:focus {
    outline-offset: 2px;
    outline: 1px solid #fff;
}
.nuvem-banner-slideshow__dot--active {
    background: #fff;
    border-color: #fff;
}
.nuvem-banner-slideshow[data-dots-desktop="false"] .nuvem-banner-slideshow__dots {
    display: none;
}
@media (width<=1023px) {
    .nuvem-banner-slideshow__subtitle {
        font-size: 1.125rem;
    }
}
@media (width<=767px) {
    .nuvem-banner-slideshow--mobile-fullscreen {
        height: calc(100dvh - var(--nuvem-banner-offset, 0px));
        aspect-ratio: unset;
        max-height: none;
    }
    .nuvem-banner-slideshow--mobile-ratio {
        aspect-ratio: 16/9;
        height: 37.5rem;
        max-height: 70vh;
    }
    .nuvem-banner-slideshow__pre-title {
        font-size: 1.25rem;
    }
    .nuvem-banner-slideshow__pre-title--small {
        font-size: 1rem;
    }
    .nuvem-banner-slideshow__subtitle {
        font-size: 1.25rem;
    }
    .nuvem-banner-slideshow__subtitle--small {
        font-size: 1rem;
    }
    .nuvem-banner-slideshow[data-arrows-mobile="false"] .nuvem-banner-slideshow__arrow {
        display: none;
    }
    .nuvem-banner-slideshow[data-arrows-mobile="true"] .nuvem-banner-slideshow__arrow {
        display: flex;
    }
    .nuvem-banner-slideshow__arrow--prev {
        top: auto;
        bottom: 20%;
        left: 10px;
    }
    .nuvem-banner-slideshow__arrow--next {
        top: auto;
        bottom: 20%;
        right: 10px;
    }
    .nuvem-banner-slideshow__arrow svg {
        width: 18px;
        height: 18px;
    }
    .nuvem-banner-slideshow[data-dots-mobile="false"] .nuvem-banner-slideshow__dots {
        display: none;
    }
    .nuvem-banner-slideshow[data-dots-mobile="true"] .nuvem-banner-slideshow__dots {
        display: flex;
    }
}
@media (width<=480px) {
    .nuvem-banner-slideshow__subtitle {
        font-size: 0.9rem;
    }
}
@media (hover: none) and (pointer: coarse) {
    .nuvem-banner-slideshow__arrow,
    .nuvem-banner-slideshow__dot {
        -webkit-tap-highlight-color: transparent;
        touch-action: manipulation;
    }
  .nuvem-banner-slideshow__overlay--mobile-top-left    { justify-content: flex-start; align-items: flex-start; }
  .nuvem-banner-slideshow__overlay--mobile-top-center  { justify-content: center;     align-items: flex-start; }
  .nuvem-banner-slideshow__overlay--mobile-top-right   { justify-content: flex-end;   align-items: flex-start; }
  .nuvem-banner-slideshow__overlay--mobile-center-left { justify-content: flex-start; align-items: center; }
  .nuvem-banner-slideshow__overlay--mobile-center      { justify-content: center;     align-items: center; }
  .nuvem-banner-slideshow__overlay--mobile-center-right{ justify-content: flex-end;   align-items: center; }
  .nuvem-banner-slideshow__overlay--mobile-bottom-left { justify-content: flex-start; align-items: flex-end; }
  .nuvem-banner-slideshow__overlay--mobile-bottom-center{justify-content: center;     align-items: flex-end; }
  .nuvem-banner-slideshow__overlay--mobile-bottom-right{ justify-content: flex-end;   align-items: flex-end; }
  .nuvem-banner-slideshow__overlay--mobile-top-left .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-center-left .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-bottom-left .nuvem-banner-slideshow__overlay-content { text-align: left; }
  .nuvem-banner-slideshow__overlay--mobile-top-right .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-center-right .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-bottom-right .nuvem-banner-slideshow__overlay-content { text-align: right; }
  .nuvem-banner-slideshow__overlay--mobile-top-center .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-center .nuvem-banner-slideshow__overlay-content,
  .nuvem-banner-slideshow__overlay--mobile-bottom-center .nuvem-banner-slideshow__overlay-content { text-align: center; }
}

/* Scroll-down "continue" cue (per slide). Converted from the staging Tailwind:
   absolute bottom-6 left-1/2 -translate-x-1/2 z-[2] hidden sm:flex flex-col
   items-center gap-3 font-mono text-[11px] tracking-[0.18em] uppercase
   text-white/60, plus a 1px gradient cue line whose ::after repeats it. */
.nuvem-banner-slideshow__continue {
    z-index: 15;
    pointer-events: none;
    flex-direction: column;
    align-items: center;
    gap: 0.75rem;
    font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 11px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: #ffffff99;
    display: none;
    position: absolute;
    bottom: 4.5rem;
    left: 50%;
    transform: translateX(-50%);
}
@media (min-width: 640px) {
    .nuvem-banner-slideshow__continue {
        display: flex;
    }
}
.nuvem-banner-slideshow__continue-line {
    width: 1px;
    height: 3rem;
    background: linear-gradient(to bottom, #ffffff99, #ffffff00);
    display: block;
}
.nuvem-banner-slideshow__continue-line::after {
    content: "";
    width: 1px;
    height: 3rem;
    background: linear-gradient(to bottom, #ffffff99, #ffffff00);
    display: block;
    animation: nuvem-banner-scrollcue 2.6s cubic-bezier(0.65, 0, 0.35, 1) infinite;
}

/* Scroll cue animation (from staging): the lower line segment draws downward
   from the top, then collapses into the bottom, repeating. */
@keyframes nuvem-banner-scrollcue {
    0%   { transform: scaleY(0); transform-origin: top; opacity: 0; }
    15%  { opacity: 1; }
    50%  { transform: scaleY(1); transform-origin: top; opacity: 1; }
    51%  { transform: scaleY(1); transform-origin: bottom; opacity: 1; }
    85%  { opacity: 1; }
    100% { transform: scaleY(0); transform-origin: bottom; opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .nuvem-banner-slideshow__continue-line::after {
        animation: none;
    }
}