/* PLAB Showcase Suite v1.1.9 */
.plab-ss-controller {
  display: none !important;
}

.plab-ss-root {
  --plab-ss-speed: 650ms;
  --plab-ss-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --plab-ss-nav-size: 42px;
  --plab-ss-nav-tablet-size: 38px;
  --plab-ss-nav-mobile-size: 34px;
  --plab-ss-nav-gap: 8px;
  --plab-ss-nav-offset-x: 0px;
  --plab-ss-nav-offset-y: 0px;
  --plab-ss-nav-split-left: 16px;
  --plab-ss-nav-split-right: 16px;
  --plab-ss-nav-bg: rgba(255,255,255,0.72);
  --plab-ss-nav-color: #111;
  --plab-ss-nav-border: rgba(0,0,0,.14);
  --plab-ss-nav-border-width: 1px;
  --plab-ss-nav-radius: 999px;
  --plab-ss-progress-size: 1px;
  --plab-ss-progress-gap: 16px;
  --plab-ss-progress-track: rgba(0,0,0,.12);
  --plab-ss-progress-fill: #111;
  --plab-ss-backdrop-color: #C89A5B;
  --plab-ss-backdrop-lead: 14%;
  --plab-ss-backdrop-speed: .65;
  --plab-ss-backdrop-duration: 420ms;
  position: relative;
  outline: none;
}

.plab-ss-root *,
.plab-ss-root *::before,
.plab-ss-root *::after {
  box-sizing: border-box;
}

.plab-ss-stage {
  position: relative;
  width: 100%;
  overflow: hidden;
  transition: height var(--plab-ss-speed) var(--plab-ss-ease);
}

.plab-ss-stage {
  isolation: isolate;
}

.plab-ss-stage-backdrop {
  position: absolute;
  inset: 0;
  z-index: 4;
  display: block;
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  background: var(--plab-ss-backdrop-color, #C89A5B);
  border-radius: var(--plab-ss-clip-radius, 0px);
  clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius, 0px));
  -webkit-clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius, 0px));
  transform: translate3d(0,0,0);
  will-change: clip-path, -webkit-clip-path, opacity;
}

.plab-ss-stage-backdrop.is-active {
  visibility: visible;
  opacity: 1;
}

.plab-ss-slide {
  display: block !important;
  width: 100%;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute !important;
  inset: 0 auto auto 0;
  transform: translate3d(0, 0, 0);
  transition-property: opacity, transform, filter, visibility;
  transition-duration: var(--plab-ss-speed), var(--plab-ss-speed), var(--plab-ss-speed), 0s;
  transition-timing-function: var(--plab-ss-ease), var(--plab-ss-ease), var(--plab-ss-ease), linear;
  transition-delay: 0s, 0s, 0s, var(--plab-ss-speed);
  z-index: 1;
}


.plab-ss-slide.is-entering {
  visibility: visible;
  position: relative !important;
  pointer-events: none;
  z-index: 3;
}

.plab-ss-slide.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  position: relative !important;
  transition-delay: 0s;
  z-index: 3;
}

.plab-ss-slide.is-leaving {
  opacity: 0;
  visibility: visible;
  position: absolute !important;
  pointer-events: none;
  transition-delay: 0s;
  z-index: 2;
}

.plab-ss-effect-none .plab-ss-slide,
.plab-ss-effect-none .plab-ss-slide.is-active,
.plab-ss-effect-none .plab-ss-slide.is-leaving {
  transition: none !important;
  transform: none !important;
  filter: none !important;
}

.plab-ss-effect-fade .plab-ss-slide {
  transform: none;
}

.plab-ss-effect-fade-slide .plab-ss-slide {
  transform: translate3d(0, 18px, 0) scale(.985);
  filter: blur(.2px);
}
.plab-ss-effect-fade-slide .plab-ss-slide.is-active {
  transform: translate3d(0, 0, 0) scale(1);
  filter: blur(0);
}
.plab-ss-effect-fade-slide[data-plab-ss-direction="next"] .plab-ss-slide.is-leaving {
  transform: translate3d(0, -14px, 0) scale(.99);
}
.plab-ss-effect-fade-slide[data-plab-ss-direction="prev"] .plab-ss-slide.is-leaving {
  transform: translate3d(0, 14px, 0) scale(.99);
}

.plab-ss-effect-slide-up .plab-ss-slide {
  transform: translate3d(0, 34px, 0);
}
.plab-ss-effect-slide-up .plab-ss-slide.is-active {
  transform: translate3d(0, 0, 0);
}
.plab-ss-effect-slide-up .plab-ss-slide.is-leaving {
  transform: translate3d(0, -30px, 0);
}

.plab-ss-effect-slide-left .plab-ss-slide {
  transform: translate3d(44px, 0, 0);
}
.plab-ss-effect-slide-left .plab-ss-slide.is-active {
  transform: translate3d(0, 0, 0);
}
.plab-ss-effect-slide-left[data-plab-ss-direction="next"] .plab-ss-slide.is-leaving {
  transform: translate3d(-44px, 0, 0);
}
.plab-ss-effect-slide-left[data-plab-ss-direction="prev"] .plab-ss-slide {
  transform: translate3d(-44px, 0, 0);
}
.plab-ss-effect-slide-left[data-plab-ss-direction="prev"] .plab-ss-slide.is-active {
  transform: translate3d(0, 0, 0);
}
.plab-ss-effect-slide-left[data-plab-ss-direction="prev"] .plab-ss-slide.is-leaving {
  transform: translate3d(44px, 0, 0);
}

.plab-ss-effect-scale .plab-ss-slide {
  transform: scale(.965);
  filter: blur(.35px);
}
.plab-ss-effect-scale .plab-ss-slide.is-active {
  transform: scale(1);
  filter: blur(0);
}
.plab-ss-effect-scale .plab-ss-slide.is-leaving {
  transform: scale(1.025);
}


/* GSAP engine: disable class-based CSS transitions/animations so GSAP owns timing. */
.plab-ss-engine-gsap .plab-ss-slide,
.plab-ss-engine-gsap .plab-ss-slide.is-active,
.plab-ss-engine-gsap .plab-ss-slide.is-entering,
.plab-ss-engine-gsap .plab-ss-slide.is-leaving {
  transition: none !important;
  animation: none !important;
}

.plab-ss-engine-gsap .plab-ss-progress-fill {
  transition-duration: var(--plab-ss-speed);
}

.plab-ss-ui {
  position: relative;
  z-index: 20;
  width: 100%;
  pointer-events: none;
}

.plab-ss-ui--top-right,
.plab-ss-ui--inline,
.plab-ss-ui--bottom-right {
  margin-bottom: var(--plab-ss-progress-gap);
}

.plab-ss-progress--bottom {
  margin-top: var(--plab-ss-progress-gap);
  margin-bottom: 0;
}

.plab-ss-bar {
  display: flex;
  align-items: center;
  gap: 14px;
  min-width: 0;
  width: 100%;
  pointer-events: none;
}

.plab-ss-progress {
  flex: 1 1 auto;
  min-width: 44px;
  height: max(var(--plab-ss-progress-size), 1px);
  pointer-events: none;
}

.plab-ss-progress-track {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--plab-ss-progress-track);
  overflow: hidden;
}

.plab-ss-progress-fill {
  display: block;
  width: 0%;
  height: 100%;
  background: var(--plab-ss-progress-fill);
  transition: width var(--plab-ss-speed) var(--plab-ss-ease);
}

.plab-ss-count {
  flex: 0 0 auto;
  white-space: nowrap;
  font-size: clamp(12px, .82vw, 14px);
  line-height: 1;
  letter-spacing: .02em;
  color: currentColor;
  opacity: .82;
  pointer-events: none;
}

.plab-ss-nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--plab-ss-nav-gap);
  flex: 0 0 auto;
  pointer-events: auto;
}

.plab-ss-arrow {
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--plab-ss-nav-size);
  height: var(--plab-ss-nav-size);
  min-width: var(--plab-ss-nav-size);
  padding: 0;
  border-radius: var(--plab-ss-nav-radius);
  border: var(--plab-ss-nav-border-width) solid var(--plab-ss-nav-border);
  background: var(--plab-ss-nav-bg);
  color: var(--plab-ss-nav-color);
  line-height: 1;
  font: inherit;
  cursor: pointer;
  box-shadow: none;
  transition:
    opacity 220ms ease,
    transform 220ms ease,
    visibility 220ms ease,
    background-color 220ms ease,
    border-color 220ms ease;
}

.plab-ss-arrow svg {
  width: 52%;
  height: 52%;
  display: block;
}

.plab-ss-arrow.is-disabled {
  cursor: default;
  pointer-events: none;
  opacity: .32;
}

.plab-ss-arrow.is-hidden-disabled {
  opacity: 0;
  visibility: hidden;
}

.plab-ss-nav-hover--lift .plab-ss-arrow:not(.is-disabled):hover {
  transform: translateY(-2px);
}

.plab-ss-nav-hover--scale .plab-ss-arrow:not(.is-disabled):hover {
  transform: scale(1.055);
}

.plab-ss-ui--top-right .plab-ss-bar,
.plab-ss-ui--bottom-right .plab-ss-bar {
  justify-content: flex-end;
}

.plab-ss-ui--inline .plab-ss-bar {
  justify-content: flex-start;
}

.plab-ss-ui--split {
  position: static;
  margin: 0;
}

.plab-ss-ui--split .plab-ss-bar {
  display: block;
}

.plab-ss-ui--split .plab-ss-progress,
.plab-ss-ui--split .plab-ss-count {
  display: none;
}

.plab-ss-ui--split .plab-ss-nav {
  position: absolute;
  inset: 50% 0 auto 0;
  transform: translateY(-50%);
  display: block;
  z-index: 40;
  pointer-events: none;
}

.plab-ss-ui--split .plab-ss-arrow {
  position: absolute;
  pointer-events: auto;
}

.plab-ss-ui--split .plab-ss-prev {
  left: calc(var(--plab-ss-nav-split-left) + var(--plab-ss-nav-offset-x));
  transform: translateY(var(--plab-ss-nav-offset-y));
}

.plab-ss-ui--split .plab-ss-next {
  right: calc(var(--plab-ss-nav-split-right) - var(--plab-ss-nav-offset-x));
  transform: translateY(var(--plab-ss-nav-offset-y));
}

.plab-ss-ui--split .plab-ss-nav-hover--lift .plab-ss-prev:not(.is-disabled):hover,
.plab-ss-ui--split .plab-ss-nav-hover--lift .plab-ss-next:not(.is-disabled):hover {
  transform: translateY(calc(var(--plab-ss-nav-offset-y) - 2px));
}

.plab-ss-ui--split .plab-ss-nav-hover--scale .plab-ss-prev:not(.is-disabled):hover,
.plab-ss-ui--split .plab-ss-nav-hover--scale .plab-ss-next:not(.is-disabled):hover {
  transform: translateY(var(--plab-ss-nav-offset-y)) scale(1.055);
}

.plab-ss-navpos-top-right .plab-ss-nav,
.plab-ss-navpos-bottom-right .plab-ss-nav,
.plab-ss-navpos-inline .plab-ss-nav {
  transform: translate(var(--plab-ss-nav-offset-x), var(--plab-ss-nav-offset-y));
}

/* Gentle reference-style inner helpers. These are optional classes, not required. */
.plab-showcase-media,
.plab-case-image {
  display: block;
  overflow: hidden;
}

.plab-showcase-media img,
.plab-case-image img {
  display: block;
  width: 100%;
  height: auto;
}

.plab-quote-text,
.plab-showcase-title,
.plab-case-title {
  text-wrap: balance;
}

@media (max-width: 980px) {
  .plab-ss-arrow {
    width: var(--plab-ss-nav-tablet-size);
    height: var(--plab-ss-nav-tablet-size);
    min-width: var(--plab-ss-nav-tablet-size);
  }
  .plab-ss-no-nav-tablet .plab-ss-nav,
  .plab-ss-no-progress-tablet .plab-ss-progress,
  .plab-ss-no-count-tablet .plab-ss-count {
    display: none !important;
  }
}

@media (max-width: 767px) {
  .plab-ss-arrow {
    width: var(--plab-ss-nav-mobile-size);
    height: var(--plab-ss-nav-mobile-size);
    min-width: var(--plab-ss-nav-mobile-size);
  }
  .plab-ss-bar {
    gap: 10px;
  }
  .plab-ss-count {
    font-size: 12px;
  }
  .plab-ss-no-nav-mobile .plab-ss-nav,
  .plab-ss-no-progress-mobile .plab-ss-progress,
  .plab-ss-no-count-mobile .plab-ss-count {
    display: none !important;
  }
}

/* v1.1.1 Clip Path Reveal
   Optional masking/reveal layer for premium showcase transitions. */
.plab-ss-clip {
  --plab-ss-clip-radius: 0px;
  --plab-ss-clip-open: inset(0 0 0 0 round var(--plab-ss-clip-radius));
  --plab-ss-clip-start: inset(0 100% 0 0 round var(--plab-ss-clip-radius));
  --plab-ss-clip-end: inset(0 0 0 100% round var(--plab-ss-clip-radius));
}

.plab-ss-clip-dir-right-to-left {
  --plab-ss-clip-start: inset(0 0 0 100% round var(--plab-ss-clip-radius));
  --plab-ss-clip-end: inset(0 100% 0 0 round var(--plab-ss-clip-radius));
}

.plab-ss-clip-dir-top-to-bottom {
  --plab-ss-clip-start: inset(0 0 100% 0 round var(--plab-ss-clip-radius));
  --plab-ss-clip-end: inset(100% 0 0 0 round var(--plab-ss-clip-radius));
}

.plab-ss-clip-dir-bottom-to-top {
  --plab-ss-clip-start: inset(100% 0 0 0 round var(--plab-ss-clip-radius));
  --plab-ss-clip-end: inset(0 0 100% 0 round var(--plab-ss-clip-radius));
}

.plab-ss-clip-target-slide .plab-ss-slide {
  overflow: hidden;
  clip-path: var(--plab-ss-clip-start);
  -webkit-clip-path: var(--plab-ss-clip-start);
  transition:
    opacity var(--plab-ss-speed) var(--plab-ss-ease),
    transform var(--plab-ss-speed) var(--plab-ss-ease),
    filter var(--plab-ss-speed) var(--plab-ss-ease),
    clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    -webkit-clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    visibility 0s linear var(--plab-ss-speed);
}

.plab-ss-clip-target-slide .plab-ss-slide.is-active {
  clip-path: var(--plab-ss-clip-open);
  -webkit-clip-path: var(--plab-ss-clip-open);
}

.plab-ss-clip-target-slide .plab-ss-slide.is-leaving {
  clip-path: var(--plab-ss-clip-end);
  -webkit-clip-path: var(--plab-ss-clip-end);
}

.plab-ss-clip-target-media .plab-ss-slide,
.plab-ss-clip-target-content .plab-ss-slide,
.plab-ss-clip-target-both .plab-ss-slide {
  clip-path: none;
  -webkit-clip-path: none;
}

.plab-ss-clip-target-media .plab-ss-slide :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-both .plab-ss-slide :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-content .plab-ss-slide :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content),
.plab-ss-clip-target-both .plab-ss-slide :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content) {
  overflow: hidden;
  clip-path: var(--plab-ss-clip-start);
  -webkit-clip-path: var(--plab-ss-clip-start);
  transition:
    clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    -webkit-clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    transform var(--plab-ss-speed) var(--plab-ss-ease),
    opacity var(--plab-ss-speed) var(--plab-ss-ease);
}

.plab-ss-clip-target-media .plab-ss-slide.is-active :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-both .plab-ss-slide.is-active :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-content .plab-ss-slide.is-active :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content),
.plab-ss-clip-target-both .plab-ss-slide.is-active :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content) {
  clip-path: var(--plab-ss-clip-open);
  -webkit-clip-path: var(--plab-ss-clip-open);
}

.plab-ss-clip-target-media .plab-ss-slide.is-leaving :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-both .plab-ss-slide.is-leaving :is(.plab-showcase-media, .plab-case-image, .plab-panel-media, .plab-module-media),
.plab-ss-clip-target-content .plab-ss-slide.is-leaving :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content),
.plab-ss-clip-target-both .plab-ss-slide.is-leaving :is(.plab-showcase-content, .plab-quote-content, .plab-case-content, .plab-panel-content, .plab-module-content) {
  clip-path: var(--plab-ss-clip-end);
  -webkit-clip-path: var(--plab-ss-clip-end);
}

/* Allow effect="none" to still run the clip reveal when clip_target="slide". */
.plab-ss-clip.plab-ss-effect-none.plab-ss-clip-target-slide .plab-ss-slide {
  transition:
    clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    -webkit-clip-path var(--plab-ss-speed) var(--plab-ss-ease),
    visibility 0s linear var(--plab-ss-speed) !important;
}

/* v1.1.3 Accordion-style direct keyframe transition engine.
   The previous transition-class method could collapse timing inside nested Divi
   Group modules. Direct keyframes mirror the proven PLAB Column Accordion media
   swap strategy, so 1100ms/1500ms speeds are visibly respected. */
.plab-ss-root .plab-ss-slide {
  animation: none;
  transition: visibility 0s linear var(--plab-ss-speed) !important;
  will-change: opacity, transform, clip-path, -webkit-clip-path;
}

.plab-ss-root .plab-ss-slide.is-active,
.plab-ss-root .plab-ss-slide.is-entering,
.plab-ss-root .plab-ss-slide.is-leaving {
  transition: none !important;
}

.plab-ss-root .plab-ss-slide.is-entering {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  z-index: 6;
}

.plab-ss-root .plab-ss-slide.is-leaving {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  z-index: 3;
}


/* v1.1.5 Accordion media-swap effects port.
   Reveal effects, colour backdrop, and motion wrapper are adapted from
   PLAB Column Accordion v2.1.4 so Divi nested Group Modules animate reliably. */
.plab-ss-motion {
  position: relative;
  z-index: 2;
  width: 100%;
  min-height: inherit;
  transform: translate3d(0, 0, 0) scale(1);
  transform-origin: center center;
  will-change: transform, opacity, clip-path, -webkit-clip-path;
  animation: none;
}

.plab-ss-backdrop-on .plab-ss-slide {
  overflow: hidden;
  isolation: isolate;
}

/* v1.1.9 Layer fix:
   the colour wipe must sit between the outgoing slide and the incoming module content.
   Divi modules can create their own positioned layers, so keep the backdrop at the
   bottom of the entering slide and force all direct slide content above it. */
.plab-ss-backdrop-on .plab-ss-slide::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  display: block;
  background: var(--plab-ss-backdrop-color, #C89A5B);
  border-radius: var(--plab-ss-clip-radius, 0px);
  pointer-events: none;
  opacity: 1;
  visibility: hidden;
  clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius, 0px));
  -webkit-clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius, 0px));
  will-change: clip-path, -webkit-clip-path;
}

.plab-ss-backdrop-on .plab-ss-slide > * {
  position: relative;
  z-index: 2;
}

.plab-ss-backdrop-on .plab-ss-slide > .plab-ss-motion {
  position: relative;
  z-index: 2 !important;
}

.plab-ss-backdrop-on .plab-ss-slide.is-entering::before {
  visibility: visible;
  animation-duration: var(--plab-ss-backdrop-duration, 420ms);
  animation-timing-function: var(--plab-ss-ease);
  animation-fill-mode: both;
}

.plab-ss-backdrop-on.plab-ss-effect-reveal-ltr .plab-ss-slide.is-entering::before { animation-name: plabSSBackdropRevealLTR; }
.plab-ss-backdrop-on.plab-ss-effect-reveal-rtl .plab-ss-slide.is-entering::before { animation-name: plabSSBackdropRevealRTL; }
.plab-ss-backdrop-on.plab-ss-effect-reveal-ttb .plab-ss-slide.is-entering::before { animation-name: plabSSBackdropRevealTTB; }
.plab-ss-backdrop-on.plab-ss-effect-reveal-btt .plab-ss-slide.is-entering::before { animation-name: plabSSBackdropRevealBTT; }

.plab-ss-backdrop-on .plab-ss-slide.is-entering > .plab-ss-motion {
  animation-duration: var(--plab-ss-speed);
  animation-timing-function: var(--plab-ss-ease);
  animation-fill-mode: both;
  overflow: hidden;
  border-radius: var(--plab-ss-clip-radius, 0px);
}

@keyframes plabSSEnterFade {
  0% { opacity: 0; transform: translate3d(0,0,0) scale(1); }
  100% { opacity: 1; transform: translate3d(0,0,0) scale(1); }
}

@keyframes plabSSLeaveFade {
  0% { opacity: 1; transform: translate3d(0,0,0) scale(1); }
  100% { opacity: 0; transform: translate3d(0,0,0) scale(1); }
}

@keyframes plabSSEnterFadeSlideUp {
  0% { opacity: 0; transform: translate3d(0, 30px, 0) scale(.985); filter: blur(.25px); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); filter: blur(0); }
}

@keyframes plabSSEnterFadeSlideDown {
  0% { opacity: 0; transform: translate3d(0, -30px, 0) scale(.985); filter: blur(.25px); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); filter: blur(0); }
}

@keyframes plabSSLeaveFadeSlideDown {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); filter: blur(0); }
  100% { opacity: 0; transform: translate3d(0, -18px, 0) scale(.995); filter: blur(.15px); }
}

@keyframes plabSSLeaveFadeSlideUp {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); filter: blur(0); }
  100% { opacity: 0; transform: translate3d(0, 18px, 0) scale(.995); filter: blur(.15px); }
}

@keyframes plabSSEnterSlideUp {
  0% { opacity: 0; transform: translate3d(0, 56px, 0); }
  100% { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes plabSSEnterSlideDown {
  0% { opacity: 0; transform: translate3d(0, -56px, 0); }
  100% { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes plabSSLeaveSlideDown {
  0% { opacity: 1; transform: translate3d(0, 0, 0); }
  100% { opacity: 0; transform: translate3d(0, -42px, 0); }
}

@keyframes plabSSLeaveSlideUp {
  0% { opacity: 1; transform: translate3d(0, 0, 0); }
  100% { opacity: 0; transform: translate3d(0, 42px, 0); }
}

@keyframes plabSSEnterSlideLeft {
  0% { opacity: 0; transform: translate3d(70px, 0, 0); }
  100% { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes plabSSEnterSlideRight {
  0% { opacity: 0; transform: translate3d(-70px, 0, 0); }
  100% { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes plabSSLeaveSlideRight {
  0% { opacity: 1; transform: translate3d(0, 0, 0); }
  100% { opacity: 0; transform: translate3d(-56px, 0, 0); }
}

@keyframes plabSSLeaveSlideLeft {
  0% { opacity: 1; transform: translate3d(0, 0, 0); }
  100% { opacity: 0; transform: translate3d(56px, 0, 0); }
}

@keyframes plabSSEnterScale {
  0% { opacity: 0; transform: scale(.94); filter: blur(.35px); }
  100% { opacity: 1; transform: scale(1); filter: blur(0); }
}

@keyframes plabSSLeaveScale {
  0% { opacity: 1; transform: scale(1); filter: blur(0); }
  100% { opacity: 0; transform: scale(1.035); filter: blur(.25px); }
}

@keyframes plabSSEnterClipLTR {
  0% { opacity: 1; clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterClipRTL {
  0% { opacity: 1; clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterClipTTB {
  0% { opacity: 1; clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterClipBTT {
  0% { opacity: 1; clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}


/* Accordion-style reveal and backdrop keyframes */
@keyframes plabSSEnterZoom {
  0% { opacity: 0; transform: translate3d(0, 0, 0) scale(.68); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSLeaveZoom {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 0; transform: translate3d(0, 0, 0) scale(1.035); }
}

@keyframes plabSSEnterRevealLTR {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterRevealRTL {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterRevealTTB {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterRevealBTT {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSEnterBackdropHolder {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSBackdropRevealLTR {
  0% { clip-path: inset(-1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px round var(--plab-ss-clip-radius)); }
  100% { clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSBackdropRevealRTL {
  0% { clip-path: inset(-1px -1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) round var(--plab-ss-clip-radius)); }
  100% { clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSBackdropRevealTTB {
  0% { clip-path: inset(-1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px round var(--plab-ss-clip-radius)); }
  100% { clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSBackdropRevealBTT {
  0% { clip-path: inset(calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px -1px round var(--plab-ss-clip-radius)); }
  100% { clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSImageRevealLTR {
  0% { opacity: 1; clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px 100% -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSImageRevealRTL {
  0% { opacity: 1; clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px 100% round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSImageRevealTTB {
  0% { opacity: 1; clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px 100% -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}

@keyframes plabSSImageRevealBTT {
  0% { opacity: 1; clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(100% -1px -1px -1px round var(--plab-ss-clip-radius)); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); -webkit-clip-path: inset(-1px -1px -1px -1px round var(--plab-ss-clip-radius)); }
}


/* v1.1.9 Full Accordion v2.1.4 Effects Review / Port
   -----------------------------------------------------
   The showcase effects below intentionally mirror PLAB Column Accordion v2.1.4
   synced media transitions:
   - outgoing slide = fade only underneath
   - incoming slide = chosen enter animation
   - no direction-reverse slide-out motion
   - direct keyframes, no normal transition-class movement
   This avoids the bad jumpy/ultra-fast transitions seen in v1.1.2-v1.1.5. */
.plab-ss-root.plab-ss-engine-css .plab-ss-slide {
  transition: none !important;
  animation: none;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute !important;
  inset: 0 auto auto 0;
  width: 100%;
  transform: translate3d(0, 0, 0);
  filter: none;
  will-change: opacity, transform, clip-path, -webkit-clip-path;
  z-index: 1;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  position: relative !important;
  z-index: 3;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  position: relative !important;
  z-index: 6;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-leaving {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  position: absolute !important;
  left: 0;
  top: 0;
  width: 100%;
  z-index: 2;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-active,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-leaving {
  transition-property: none !important;
  transition-duration: 0s !important;
  transition-delay: 0s !important;
}

@keyframes plabSSEnterFade {
  0% { opacity: 0; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSLeaveFade {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 0; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSEnterSlideUp {
  0% { opacity: 0; transform: translate3d(0, var(--plab-ss-media-move-y, 120px), 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSEnterSlideLeft {
  0% { opacity: 0; transform: translate3d(var(--plab-ss-media-move-x, 140px), 0, 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSEnterSlideRight {
  0% { opacity: 0; transform: translate3d(calc(var(--plab-ss-media-move-x, 140px) * -1), 0, 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSEnterZoom {
  0% { opacity: 0; transform: translate3d(0, 0, 0) scale(var(--plab-ss-media-zoom-from, 0.68)); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSEnterRevealLTR {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px 100% -1px -1px); -webkit-clip-path: inset(-1px 100% -1px -1px); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSEnterRevealRTL {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px 100%); -webkit-clip-path: inset(-1px -1px -1px 100%); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSEnterRevealTTB {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px 100% -1px); -webkit-clip-path: inset(-1px -1px 100% -1px); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSEnterRevealBTT {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(100% -1px -1px -1px); -webkit-clip-path: inset(100% -1px -1px -1px); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSEnterBackdropHolder {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes plabSSBackdropRevealLTR {
  0% { clip-path: inset(-1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px); -webkit-clip-path: inset(-1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px); }
  100% { clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSBackdropRevealRTL {
  0% { clip-path: inset(-1px -1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%))); -webkit-clip-path: inset(-1px -1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%))); }
  100% { clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSBackdropRevealTTB {
  0% { clip-path: inset(-1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px); -webkit-clip-path: inset(-1px -1px calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px); }
  100% { clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSBackdropRevealBTT {
  0% { clip-path: inset(calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px -1px); -webkit-clip-path: inset(calc(100% - var(--plab-ss-backdrop-lead, 14%)) -1px -1px -1px); }
  100% { clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSImageRevealLTR {
  0% { opacity: 1; clip-path: inset(-1px 100% -1px -1px); -webkit-clip-path: inset(-1px 100% -1px -1px); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSImageRevealRTL {
  0% { opacity: 1; clip-path: inset(-1px -1px -1px 100%); -webkit-clip-path: inset(-1px -1px -1px 100%); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSImageRevealTTB {
  0% { opacity: 1; clip-path: inset(-1px -1px 100% -1px); -webkit-clip-path: inset(-1px -1px 100% -1px); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}

@keyframes plabSSImageRevealBTT {
  0% { opacity: 1; clip-path: inset(100% -1px -1px -1px); -webkit-clip-path: inset(100% -1px -1px -1px); }
  100% { opacity: 1; clip-path: inset(-1px -1px -1px -1px); -webkit-clip-path: inset(-1px -1px -1px -1px); }
}


/* v1.1.9 audit cleanup: full PLAB Column Accordion v2.1.4 media-effects port
   -------------------------------------------------------------------------
   These final rules intentionally override the older transition-class slider
   styles above. The effect model now matches Accordion media swap:
   old slide fades underneath, new slide enters above with selected keyframe. */
.plab-ss-root.plab-ss-engine-css .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-effect-fade .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-effect-slide-up .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-effect-slide-left .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-effect-slide-right .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-effect-zoom .plab-ss-slide,
.plab-ss-root.plab-ss-engine-css.plab-ss-reveal-effect .plab-ss-slide {
  transition: none !important;
  animation: none;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute !important;
  inset: 0 auto auto 0;
  width: 100%;
  transform: translate3d(0, 0, 0) scale(1);
  filter: none;
  will-change: opacity, transform, clip-path, -webkit-clip-path;
  z-index: 1;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  position: relative !important;
  z-index: 3;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  position: relative !important;
  z-index: 6;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-leaving {
  opacity: 1;
  visibility: visible;
  pointer-events: none;
  position: absolute !important;
  left: 0;
  top: 0;
  width: 100%;
  z-index: 2;
}

.plab-ss-root.is-transition-locked .plab-ss-arrow {
  pointer-events: none !important;
  cursor: wait;
}

.plab-ss-backdrop-on .plab-ss-slide {
  overflow: hidden;
  isolation: isolate;
}

.plab-ss-backdrop-on .plab-ss-slide::before {
  z-index: 1 !important;
}

.plab-ss-backdrop-on .plab-ss-slide > *,
.plab-ss-backdrop-on .plab-ss-slide > .plab-ss-motion {
  position: relative;
  z-index: 2 !important;
}

.plab-ss-motion {
  position: relative;
  z-index: 2;
  width: 100%;
  min-height: inherit;
  display: block;
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
  transform-origin: center center;
  will-change: transform, opacity, clip-path, -webkit-clip-path;
  animation: none;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-leaving,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering > .plab-ss-motion {
  animation-duration: var(--plab-ss-speed) !important;
  animation-timing-function: var(--plab-ss-ease) !important;
  animation-fill-mode: both !important;
}

.plab-ss-root.plab-ss-engine-css.plab-ss-backdrop-on .plab-ss-slide.is-entering::before {
  animation-duration: var(--plab-ss-backdrop-duration, 420ms) !important;
  animation-timing-function: var(--plab-ss-ease) !important;
  animation-fill-mode: both !important;
}


/* v1.1.9 Stage-level Reveal Colour Backdrop
   --------------------------------------------------
   The colour wipe is now a dedicated stage sibling instead of a ::before layer
   inside the incoming Divi module. This avoids Divi z-index/stacking conflicts:
   outgoing slide z2 < backdrop z4 < incoming clipped slide z6. */
.plab-ss-root.plab-ss-backdrop-on .plab-ss-slide::before {
  content: none !important;
  display: none !important;
  animation: none !important;
  visibility: hidden !important;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-stage-backdrop {
  z-index: 4 !important;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-leaving {
  z-index: 2 !important;
}

.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-entering,
.plab-ss-root.plab-ss-engine-css .plab-ss-slide.is-active {
  z-index: 6 !important;
}

.plab-ss-root.plab-ss-backdrop-on .plab-ss-slide,
.plab-ss-root.plab-ss-backdrop-on .plab-ss-slide > *,
.plab-ss-root.plab-ss-backdrop-on .plab-ss-slide > .plab-ss-motion {
  isolation: auto !important;
}
