/* =============================================================
   LT Elementor Animations — CSS v2.1.1
   Lemon Think · https://lemonthink.com
   ============================================================= */

/* ── Variables ──────────────────────────────────────────────── */
:root {
  --lt-dur: 0.8s;
}

/* ── Reveal containers ──────────────────────────────────────── */
.lt-line-reveal,
.lt-word-reveal {
  overflow: hidden;
  display: block;
  margin-bottom: 0;
}

.lt-word-reveal {
  display: inline-block;
  vertical-align: top;
  margin-right: 0.3em;
}

.lt-line-reveal > span,
.lt-word-reveal > span {
  display: inline-block;
  line-height: inherit;
  padding-bottom: 0.1em;
}

/* Imágenes / vídeos */
.lt-media-reveal {
  overflow: visible;
  display: block;
}

.lt-media-reveal > span {
  display: block;
  width: 100%;
}

/* ── Estados iniciales (pre-animación) ──────────────────────── */

/* Fade Up */
.lemon-fade-up > span {
  transition:
    transform var(--lt-dur, 0.6s) ease,
    opacity   var(--lt-dur, 0.6s) ease;
}
.lt-line-reveal.lemon-fade-up:not(.active) > span,
.lt-word-reveal.lemon-fade-up:not(.active) > span {
  transform: translateY(30px);
  opacity: 0;
}

/* Reveal Up */
.lemon-reveal-up > span {
  transition: transform var(--lt-dur, 0.8s) cubic-bezier(0.77, 0, 0.175, 1);
}
.lt-line-reveal.lemon-reveal-up:not(.active) > span,
.lt-word-reveal.lemon-reveal-up:not(.active) > span {
  transform: translateY(100%);
}

/* Reveal Down */
.lemon-reveal-down > span {
  transition: transform var(--lt-dur, 0.8s) cubic-bezier(0.77, 0, 0.175, 1);
}
.lt-line-reveal.lemon-reveal-down:not(.active) > span,
.lt-word-reveal.lemon-reveal-down:not(.active) > span {
  transform: translateY(-100%);
}

/* Fade + Reveal Up */
.lemon-fade-reveal-up > span {
  transition:
    transform var(--lt-dur, 0.8s) cubic-bezier(0.77, 0, 0.175, 1),
    opacity   var(--lt-dur, 0.8s) ease;
}
.lt-line-reveal.lemon-fade-reveal-up:not(.active) > span,
.lt-word-reveal.lemon-fade-reveal-up:not(.active) > span {
  transform: translateY(50%);
  opacity: 0;
}

/* Fade + Reveal Down */
.lemon-fade-reveal-down > span {
  transition:
    transform var(--lt-dur, 0.8s) cubic-bezier(0.77, 0, 0.175, 1),
    opacity   var(--lt-dur, 0.8s) ease;
}
.lt-line-reveal.lemon-fade-reveal-down:not(.active) > span,
.lt-word-reveal.lemon-fade-reveal-down:not(.active) > span {
  transform: translateY(-50%);
  opacity: 0;
}

/* ── Estado activo ──────────────────────────────────────────── */
.lt-line-reveal.active > span,
.lt-word-reveal.active > span {
  transform: translateY(0) !important;
  opacity: 1 !important;
}

/* ── Efectos de scroll por carácter ────────────────────────── */
.lt-scroll .lt-word {
  display: inline-block;
  white-space: nowrap;
}

.lt-scroll .lt-char {
  display: inline-block;
  opacity: 0;
  filter: none;
  /* will-change solo en chars activos evita capas de composición innecesarias */
  transition: opacity 0.3s linear, filter 0.3s linear;
  will-change: opacity, filter;
}

/* Block-fade: el bloque completo */
.lt-scroll.lt-block-fade {
  opacity: 0;
  transition: opacity 0.5s ease-out;
  will-change: opacity;
}

/* ── Ocultar elementos Elementor antes de animar (antiflash) ── */
.elementor-invisible {
  visibility: hidden;
}

/* =============================================================
   ANIMACIONES ESTÁNDAR DE ELEMENTOR
   Incluidas aquí para garantizar que estén disponibles
   independientemente de cómo Elementor gestione sus CSS.
   ============================================================= */

.animated {
  animation-duration: 1.25s;
  animation-fill-mode: both;
}
.animated.animated-slow  { animation-duration: 2s; }
.animated.animated-fast  { animation-duration: 750ms; }
.animated.infinite       { animation-iteration-count: infinite; }

/* Fading */
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.fadeIn { animation-name: fadeIn; }

@keyframes fadeInDown {
  from { opacity: 0; transform: translate3d(0, -30px, 0); }
  to   { opacity: 1; transform: none; }
}
.fadeInDown { animation-name: fadeInDown; }

@keyframes fadeInUp {
  from { opacity: 0; transform: translate3d(0, 30px, 0); }
  to   { opacity: 1; transform: none; }
}
.fadeInUp { animation-name: fadeInUp; }

@keyframes fadeInLeft {
  from { opacity: 0; transform: translate3d(-30px, 0, 0); }
  to   { opacity: 1; transform: none; }
}
.fadeInLeft { animation-name: fadeInLeft; }

@keyframes fadeInRight {
  from { opacity: 0; transform: translate3d(30px, 0, 0); }
  to   { opacity: 1; transform: none; }
}
.fadeInRight { animation-name: fadeInRight; }

/* Zooming */
@keyframes zoomIn {
  from { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); }
  50%  { opacity: 1; }
  to   { transform: none; }
}
.zoomIn { animation-name: zoomIn; }

@keyframes zoomInDown {
  from { opacity: 0; transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
  60%  { opacity: 1; transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); }
  to   { transform: none; }
}
.zoomInDown { animation-name: zoomInDown; }

@keyframes zoomInUp {
  from { opacity: 0; transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
  60%  { opacity: 1; transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); }
  to   { transform: none; }
}
.zoomInUp { animation-name: zoomInUp; }

@keyframes zoomInLeft {
  from { opacity: 0; transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
  60%  { opacity: 1; transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); }
  to   { transform: none; }
}
.zoomInLeft { animation-name: zoomInLeft; }

@keyframes zoomInRight {
  from { opacity: 0; transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }
  60%  { opacity: 1; transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); }
  to   { transform: none; }
}
.zoomInRight { animation-name: zoomInRight; }

/* Bouncing */
@keyframes bounceIn {
  from, 20%, 40%, 60%, 80%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
  from  { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); }
  20%   { transform: scale3d(1.1, 1.1, 1.1); }
  40%   { transform: scale3d(0.9, 0.9, 0.9); }
  60%   { opacity: 1; transform: scale3d(1.03, 1.03, 1.03); }
  80%   { transform: scale3d(0.97, 0.97, 0.97); }
  to    { opacity: 1; transform: none; }
}
.bounceIn { animation-name: bounceIn; animation-duration: 0.75s; }

@keyframes bounceInDown {
  from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
  from  { opacity: 0; transform: translate3d(0, -3000px, 0); }
  60%   { opacity: 1; transform: translate3d(0, 25px, 0); }
  75%   { transform: translate3d(0, -10px, 0); }
  90%   { transform: translate3d(0, 5px, 0); }
  to    { transform: none; }
}
.bounceInDown { animation-name: bounceInDown; }

@keyframes bounceInUp {
  from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
  from  { opacity: 0; transform: translate3d(0, 3000px, 0); }
  60%   { opacity: 1; transform: translate3d(0, -20px, 0); }
  75%   { transform: translate3d(0, 10px, 0); }
  90%   { transform: translate3d(0, -5px, 0); }
  to    { transform: none; }
}
.bounceInUp { animation-name: bounceInUp; }

@keyframes bounceInLeft {
  from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
  from  { opacity: 0; transform: translate3d(-3000px, 0, 0); }
  60%   { opacity: 1; transform: translate3d(25px, 0, 0); }
  75%   { transform: translate3d(-10px, 0, 0); }
  90%   { transform: translate3d(5px, 0, 0); }
  to    { transform: none; }
}
.bounceInLeft { animation-name: bounceInLeft; }

@keyframes bounceInRight {
  from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
  from  { opacity: 0; transform: translate3d(3000px, 0, 0); }
  60%   { opacity: 1; transform: translate3d(-25px, 0, 0); }
  75%   { transform: translate3d(10px, 0, 0); }
  90%   { transform: translate3d(-5px, 0, 0); }
  to    { transform: none; }
}
.bounceInRight { animation-name: bounceInRight; }

/* Sliding */
@keyframes slideInDown {
  from { transform: translate3d(0, -100%, 0); visibility: visible; }
  to   { transform: none; }
}
.slideInDown { animation-name: slideInDown; }

@keyframes slideInUp {
  from { transform: translate3d(0, 100%, 0); visibility: visible; }
  to   { transform: none; }
}
.slideInUp { animation-name: slideInUp; }

@keyframes slideInLeft {
  from { transform: translate3d(-100%, 0, 0); visibility: visible; }
  to   { transform: none; }
}
.slideInLeft { animation-name: slideInLeft; }

@keyframes slideInRight {
  from { transform: translate3d(100%, 0, 0); visibility: visible; }
  to   { transform: none; }
}
.slideInRight { animation-name: slideInRight; }

/* Rotating */
@keyframes rotateIn {
  from { transform-origin: center; transform: rotate3d(0, 0, 1, -200deg); opacity: 0; }
  to   { transform-origin: center; transform: none; opacity: 1; }
}
.rotateIn { animation-name: rotateIn; }

/* Attention seekers */
@keyframes bounce {
  from, 20%, 53%, 80%, to { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); transform: none; }
  40%, 43% { animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); transform: translate3d(0, -30px, 0); }
  70%       { animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); transform: translate3d(0, -15px, 0); }
  90%       { transform: translate3d(0, -4px, 0); }
}
.bounce { animation-name: bounce; transform-origin: center bottom; }

@keyframes flash {
  from, 50%, to { opacity: 1; }
  25%, 75%      { opacity: 0; }
}
.flash { animation-name: flash; }

@keyframes pulse {
  from { transform: scale3d(1, 1, 1); }
  50%  { transform: scale3d(1.05, 1.05, 1.05); }
  to   { transform: scale3d(1, 1, 1); }
}
.pulse { animation-name: pulse; }

@keyframes shake {
  from, to          { transform: none; }
  10%, 50%, 90%     { transform: translate3d(-10px, 0, 0); }
  20%, 60%          { transform: translate3d(10px, 0, 0); }
  30%, 50%, 70%, 90%{ transform: translate3d(-10px, 0, 0); }
  40%, 60%, 80%     { transform: translate3d(10px, 0, 0); }
}
.shake { animation-name: shake; }

/* Light Speed */
@keyframes lightSpeedIn {
  from { transform: translate3d(100%, 0, 0) skewX(-30deg); opacity: 0; }
  60%  { transform: skewX(20deg); opacity: 1; }
  80%  { transform: skewX(-5deg); }
  to   { transform: none; opacity: 1; }
}
.lightSpeedIn { animation-name: lightSpeedIn; animation-timing-function: ease-out; }

/* Roll */
@keyframes rollIn {
  from { opacity: 0; transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }
  to   { opacity: 1; transform: none; }
}
.rollIn { animation-name: rollIn; }

