/* FactorPrint CMS 1.2.57 — 39 optional scroll reveals + 4 hover and 3 decorative accents.
 * CSS Snapshot 2026. Defaults remain fully visible without JS and with reduced motion.
 * Only composited transform/opacity are used for most entrance effects. */
.fp-motion{
  --fp-motion-duration:700ms;--fp-motion-delay:0ms;
  --fp-motion-distance:32px;--fp-motion-origin:center center;
  --fp-motion-opacity:0;--fp-motion-transform:none;
  --fp-motion-filter:none;--fp-motion-clip:inset(0);
}
.content-block.fp-motion-distance-small{--fp-motion-distance:16px}
.content-block.fp-motion-distance-large{--fp-motion-distance:64px}
/* JS only marks eligible elements when IntersectionObserver exists. Never hide on a static preview. */
html.fp-motion-enabled .content-block.fp-motion-pending:not(.fp-motion-running){opacity:0}
html.fp-motion-enabled .content-block.fp-motion-running{
  transform-origin:var(--fp-motion-origin);
  animation:fp-block-reveal var(--fp-motion-duration) cubic-bezier(.2,.7,.15,1) var(--fp-motion-delay) both;
  will-change:opacity,transform;
}
@keyframes fp-block-reveal{
  from{opacity:var(--fp-motion-opacity,0);transform:var(--fp-motion-transform,none);filter:var(--fp-motion-filter,none);clip-path:var(--fp-motion-clip,inset(0))}
  to{opacity:1;transform:none;filter:none;clip-path:inset(0)}
}
/* Fade families: 9; transform direction mirrors Elementor's physical movement semantics. */
.fp-motion-fade-in{--fp-motion-opacity:0}
.fp-motion-fade-up{--fp-motion-transform:translate3d(0,var(--fp-motion-distance),0)}
.fp-motion-fade-down{--fp-motion-transform:translate3d(0,calc(-1 * var(--fp-motion-distance)),0)}
.fp-motion-fade-left{--fp-motion-transform:translate3d(var(--fp-motion-distance),0,0)}
.fp-motion-fade-right{--fp-motion-transform:translate3d(calc(-1 * var(--fp-motion-distance)),0,0)}
.fp-motion-fade-up-big{--fp-motion-transform:translate3d(0,calc(2 * var(--fp-motion-distance)),0)}
.fp-motion-fade-down-big{--fp-motion-transform:translate3d(0,calc(-2 * var(--fp-motion-distance)),0)}
.fp-motion-fade-left-big{--fp-motion-transform:translate3d(calc(2 * var(--fp-motion-distance)),0,0)}
.fp-motion-fade-right-big{--fp-motion-transform:translate3d(calc(-2 * var(--fp-motion-distance)),0,0)}
/* Zoom: 6. */
.fp-motion-zoom-in{--fp-motion-transform:scale(.78)}
.fp-motion-zoom-out{--fp-motion-transform:scale(1.16)}
.fp-motion-zoom-up{--fp-motion-transform:translate3d(0,var(--fp-motion-distance),0) scale(.78)}
.fp-motion-zoom-down{--fp-motion-transform:translate3d(0,calc(-1 * var(--fp-motion-distance)),0) scale(.78)}
.fp-motion-zoom-left{--fp-motion-transform:translate3d(var(--fp-motion-distance),0,0) scale(.78)}
.fp-motion-zoom-right{--fp-motion-transform:translate3d(calc(-1 * var(--fp-motion-distance)),0,0) scale(.78)}
/* Slides: 4. No opacity change, instead slide inside the section with full visibility. */
.fp-motion-slide-up,.fp-motion-slide-down,.fp-motion-slide-left,.fp-motion-slide-right{--fp-motion-opacity:1}
.fp-motion-slide-up{--fp-motion-transform:translate3d(0,calc(2 * var(--fp-motion-distance)),0)}
.fp-motion-slide-down{--fp-motion-transform:translate3d(0,calc(-2 * var(--fp-motion-distance)),0)}
.fp-motion-slide-left{--fp-motion-transform:translate3d(calc(2 * var(--fp-motion-distance)),0,0)}
.fp-motion-slide-right{--fp-motion-transform:translate3d(calc(-2 * var(--fp-motion-distance)),0,0)}
/* Flip: 4 (perspective is only active during the reveal). */
.fp-motion-flip-up{--fp-motion-transform:perspective(900px) rotateX(-75deg);--fp-motion-origin:center bottom}
.fp-motion-flip-down{--fp-motion-transform:perspective(900px) rotateX(75deg);--fp-motion-origin:center top}
.fp-motion-flip-left{--fp-motion-transform:perspective(900px) rotateY(-75deg);--fp-motion-origin:right center}
.fp-motion-flip-right{--fp-motion-transform:perspective(900px) rotateY(75deg);--fp-motion-origin:left center}
/* Rotations: 3. */
.fp-motion-rotate-in{--fp-motion-transform:rotate(-9deg) scale(.85)}
.fp-motion-rotate-left{--fp-motion-transform:translate3d(var(--fp-motion-distance),0,0) rotate(-15deg);--fp-motion-origin:left bottom}
.fp-motion-rotate-right{--fp-motion-transform:translate3d(calc(-1 * var(--fp-motion-distance)),0,0) rotate(15deg);--fp-motion-origin:right bottom}
/* Blur: 2. Only a small number of blocks should use blur on mobile. */
.fp-motion-blur-in{--fp-motion-filter:blur(8px)}
.fp-motion-blur-up{--fp-motion-transform:translateY(var(--fp-motion-distance));--fp-motion-filter:blur(8px)}
/* Bounce / swing / roll: 5. The easing is intentionally restrained, preventing long bouncing pages. */
.fp-motion-bounce-in{--fp-motion-transform:scale(.5)}
.fp-motion-bounce-up{--fp-motion-transform:translateY(calc(2 * var(--fp-motion-distance))) scale(.86)}
.fp-motion-bounce-down{--fp-motion-transform:translateY(calc(-2 * var(--fp-motion-distance))) scale(.86)}
.fp-motion-swing-in{--fp-motion-transform:rotate(25deg);--fp-motion-origin:top center}
.fp-motion-roll-in{--fp-motion-transform:translateX(calc(-2 * var(--fp-motion-distance))) rotate(-100deg)}
html.fp-motion-enabled .fp-motion-running.fp-motion-bounce-in,
html.fp-motion-enabled .fp-motion-running.fp-motion-bounce-up,
html.fp-motion-enabled .fp-motion-running.fp-motion-bounce-down{animation-timing-function:cubic-bezier(.18,1.35,.38,1)}
/* Light-speed: 2. */
.fp-motion-light-speed-left{--fp-motion-transform:translateX(calc(2 * var(--fp-motion-distance))) skewX(-18deg)}
.fp-motion-light-speed-right{--fp-motion-transform:translateX(calc(-2 * var(--fp-motion-distance))) skewX(18deg)}
/* Wipes: 4. Reveal progressively; no opacity fade is necessary. */
.fp-motion-wipe-left,.fp-motion-wipe-right,.fp-motion-wipe-up,.fp-motion-wipe-down{--fp-motion-opacity:1}
.fp-motion-wipe-left{--fp-motion-clip:inset(0 0 0 100%)}
.fp-motion-wipe-right{--fp-motion-clip:inset(0 100% 0 0)}
.fp-motion-wipe-up{--fp-motion-clip:inset(100% 0 0 0)}
.fp-motion-wipe-down{--fp-motion-clip:inset(0 0 100% 0)}
/* Decoration remains an independent option, does not require JS or motion setting. */
.content-block.fp-decoration-top-line{border-top:3px solid var(--fp-accent,#1685bb)}
.content-block.fp-decoration-side-line{border-inline-start:4px solid var(--fp-accent,#1685bb)}
.content-block.fp-decoration-corner{position:relative}
.content-block.fp-decoration-corner::before{
  content:"";pointer-events:none;position:absolute;z-index:1;inset-block-start:0;inset-inline-start:0;
  width:32px;height:32px;border-block-start:3px solid var(--fp-accent,#1685bb);
  border-inline-start:3px solid var(--fp-accent,#1685bb);
}
@media(hover:hover) and (pointer:fine){
  .content-block.fp-hover-lift,.content-block.fp-hover-scale,.content-block.fp-hover-glow,.content-block.fp-hover-border{
    transition:transform .23s ease,box-shadow .23s ease,border-color .23s ease;
  }
  .content-block.fp-hover-lift:hover{transform:translateY(-5px)}
  .content-block.fp-hover-scale:hover{transform:scale(1.015)}
  .content-block.fp-hover-glow:hover{box-shadow:0 10px 32px -12px rgb(24 115 170 / .38)}
  .content-block.fp-hover-border:hover{outline:2px solid var(--fp-accent,#1685bb);outline-offset:1px}
}
/* On compact screens, allow effects only if explicitly enabled for the individual block. */
@media(max-width:767px){
  html.fp-motion-enabled .fp-motion:not(.fp-motion-mobile).fp-motion-pending{opacity:1}
  html.fp-motion-enabled .fp-motion:not(.fp-motion-mobile).fp-motion-running{animation:none;transform:none;opacity:1;filter:none;clip-path:none}
}
/* Accessibility: no hidden blocks, no sudden movement and no hover movement when requested. */
@media(prefers-reduced-motion:reduce){
  html.fp-motion-enabled .content-block.fp-motion-pending{opacity:1!important}
  html.fp-motion-enabled .content-block.fp-motion-running{animation:none!important;transform:none!important;filter:none!important;clip-path:none!important;opacity:1!important}
  .content-block.fp-hover-lift,.content-block.fp-hover-scale,.content-block.fp-hover-glow,.content-block.fp-hover-border{transition:none!important}
  .content-block.fp-hover-lift:hover,.content-block.fp-hover-scale:hover{transform:none!important}
}
