/* Toolbelt Motion Engine Phase 1 — viewport entrance effects.
   Progressive enhancement: elements are visible unless JavaScript explicitly
   adds .tb-motion-pending after the engine has successfully initialised. */
[data-tb-motion="entrance"]{
  --tb-motion-duration:850ms;
  --tb-motion-delay:0ms;
  --tb-motion-distance:24px;
  --tb-motion-ease:cubic-bezier(.25,.46,.45,.94);
}
[data-tb-motion-speed="fast"]{--tb-motion-duration:600ms}
[data-tb-motion-speed="standard"]{--tb-motion-duration:850ms}
[data-tb-motion-speed="slow"]{--tb-motion-duration:1100ms}
[data-tb-motion-delay="none"]{--tb-motion-delay:0ms}
[data-tb-motion-delay="short"]{--tb-motion-delay:80ms}
[data-tb-motion-delay="medium"]{--tb-motion-delay:160ms}
[data-tb-motion-delay="long"]{--tb-motion-delay:240ms}

/* v2.18.6 — Replay gets an explicit leaving state with its own transition.
   The base pending state intentionally has no transition so JavaScript can
   prime an element as hidden without making it visibly fade out on page load. */
[data-tb-motion="entrance"].tb-motion-pending{
  opacity:0;
  will-change:opacity;
}
[data-tb-motion="entrance"][data-tb-motion-effect="fade-up"].tb-motion-pending{
  transform:translate3d(0,var(--tb-motion-distance),0);
  backface-visibility:hidden;
  will-change:opacity,transform;
}
[data-tb-motion="entrance"].tb-motion-pending.is-motion-visible,
[data-tb-motion="entrance"].tb-motion-pending.is-motion-leaving{
  transition-property:opacity,transform;
  transition-duration:var(--tb-motion-duration),var(--tb-motion-duration);
  transition-timing-function:var(--tb-motion-ease),var(--tb-motion-ease);
}
[data-tb-motion="entrance"].tb-motion-pending.is-motion-visible{
  opacity:1;
  transition-delay:var(--tb-motion-delay),var(--tb-motion-delay);
}
[data-tb-motion="entrance"][data-tb-motion-effect="fade-up"].tb-motion-pending.is-motion-visible{
  transform:translate3d(0,0,0);
}
[data-tb-motion="entrance"].tb-motion-pending.is-motion-leaving{
  /* Reverse immediately; entrance delay is for revealing content, not hiding it. */
  transition-delay:0ms,0ms;
}

/* v2.18.17 — scroll-linked Centre focus.
   Used by selected Feature Image text/action targets to mirror the calm Large
   Open Quote treatment: full prominence at viewport centre, then a smooth fade
   in both scroll directions. JavaScript supplies scroll-linked CSS variables. */
[data-tb-motion="entrance"][data-tb-motion-trigger="centre-focus"].tb-motion-centre-focus{
  opacity:var(--tb-motion-focus-opacity,1);
  transform:translate3d(0,var(--tb-motion-focus-y,0px),0) scale(var(--tb-motion-focus-scale,1));
  transform-origin:center center;
  transition:none!important;
  backface-visibility:hidden;
  will-change:opacity,transform;
}

@media(max-width:1023px){
  [data-tb-motion="entrance"]{--tb-motion-distance:18px}
}

@media(max-width:767px){
  [data-tb-motion="entrance"]{--tb-motion-distance:14px}
}

@media(prefers-reduced-motion:reduce){
  [data-tb-motion="entrance"],
  [data-tb-motion="entrance"].tb-motion-pending,
  [data-tb-motion="entrance"].tb-motion-pending.is-motion-visible,
  [data-tb-motion="entrance"].tb-motion-centre-focus{
    opacity:1!important;
    transform:none!important;
    transition:none!important;
    animation:none!important;
    will-change:auto!important;
  }
}

/* v2.13.2 device overrides. JavaScript avoids initialising motion on disabled
   viewports; these rules are a defensive fallback so content cannot remain
   hidden if a viewport/device preference changes mid-session. */
@media(min-width:768px) and (max-width:1023px){
  body[data-tb-motion-tablet="off"] [data-tb-motion="entrance"],
  body[data-tb-motion-tablet="off"] [data-tb-motion="entrance"].tb-motion-pending,
  body[data-tb-motion-tablet="off"] [data-tb-motion="entrance"].tb-motion-pending.is-motion-visible{
    opacity:1!important;
    transform:none!important;
    transition:none!important;
    animation:none!important;
    will-change:auto!important;
  }
}

@media(max-width:767px){
  body[data-tb-motion-mobile="off"] [data-tb-motion="entrance"],
  body[data-tb-motion-mobile="off"] [data-tb-motion="entrance"].tb-motion-pending,
  body[data-tb-motion-mobile="off"] [data-tb-motion="entrance"].tb-motion-pending.is-motion-visible{
    opacity:1!important;
    transform:none!important;
    transition:none!important;
    animation:none!important;
    will-change:auto!important;
  }
}

/* v2.16.23 — Image Parallax.
   Progressive enhancement: the crop/scale/transform is only applied after
   motion.js successfully initialises the target. */
[data-tb-parallax].tb-parallax-active .tb-parallax-image{
  transform:translate3d(0,var(--tb-parallax-y,0px),0) scale(var(--tb-parallax-scale,1.07));
  transform-origin:center center;
  backface-visibility:hidden;
  transition:none!important;
}
[data-tb-parallax="subtle"].tb-parallax-active{--tb-parallax-scale:1.08}
[data-tb-parallax="medium"].tb-parallax-active{--tb-parallax-scale:1.13}
[data-tb-parallax="strong"].tb-parallax-active{--tb-parallax-scale:1.16}
[data-tb-parallax].tb-parallax-near .tb-parallax-image{will-change:transform}

@media(max-width:1023px){
  [data-tb-parallax="subtle"].tb-parallax-active{--tb-parallax-scale:1.05}
  [data-tb-parallax="medium"].tb-parallax-active{--tb-parallax-scale:1.07}
  [data-tb-parallax="strong"].tb-parallax-active{--tb-parallax-scale:1.10}
}

@media(max-width:767px){
  [data-tb-parallax].tb-parallax-active{--tb-parallax-scale:1.035}
  [data-tb-parallax="strong"].tb-parallax-active{--tb-parallax-scale:1.05}
}

@media(prefers-reduced-motion:reduce){
  [data-tb-parallax].tb-parallax-active .tb-parallax-image{
    transform:none!important;
    transition:none!important;
    will-change:auto!important;
  }
}


/* ================================================================
   V2.18.5 Heading Scroll Colour
   JS applies the effect to the first semantic heading inside an enabled
   Motion target. Without JS, with reduced motion, or on a disabled device,
   the original heading colour remains untouched.
   ================================================================ */
.tb-heading-scroll-heading{
  will-change:color,background-position;
}
.tb-heading-scroll-heading.tb-heading-scroll-gradient{
  color:transparent!important;
  -webkit-text-fill-color:transparent;
  background-image:var(--tb-heading-gradient,none);
  background-repeat:no-repeat;
  background-clip:text;
  -webkit-background-clip:text;
  background-size:var(--tb-heading-bg-size,100% 100%);
  background-position:var(--tb-heading-bg-position,50% 50%);
}
@media(prefers-reduced-motion:reduce){
  .tb-heading-scroll-heading{
    color:inherit!important;
    -webkit-text-fill-color:currentColor!important;
    background-image:none!important;
    will-change:auto!important;
  }
}
@media(min-width:768px) and (max-width:1023px){
  body[data-tb-motion-tablet="off"] .tb-heading-scroll-heading{
    color:inherit!important;-webkit-text-fill-color:currentColor!important;background-image:none!important;will-change:auto!important;
  }
}
@media(max-width:767px){
  body[data-tb-motion-mobile="off"] .tb-heading-scroll-heading{
    color:inherit!important;-webkit-text-fill-color:currentColor!important;background-image:none!important;will-change:auto!important;
  }
}
