/* Movimiento propio del sitio, portado del estatico:
   1) barra de progreso de lectura   2) cursor propio   3) reveal on scroll
   Todo se desactiva con prefers-reduced-motion. */

/* ── 1. Barra de progreso de lectura ── */
.ts-progress {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  z-index: 10000;
  background: #C6FF3D;
  transform-origin: 0 50%;
  transform: scaleX(0);
  pointer-events: none;
  will-change: transform;
}

/* ── 2. Cursor propio ── */
.ts-cursor {
  position: fixed;
  top: 0;
  left: 0;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 1px solid rgba(198, 255, 61, .55);
  background: transparent;
  pointer-events: none;
  z-index: 10001;
  transition: width .18s ease, height .18s ease, border-color .18s ease, background .18s ease, opacity .2s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
}
.has-custom-cursor .ts-cursor { opacity: 1; }
/* Elementor pone cursor:pointer con mas especificidad en enlaces y botones,
   asi que aqui hace falta la fuerza bruta o el cursor nativo reaparece. */
.has-custom-cursor,
.has-custom-cursor * { cursor: none !important; }

.ts-cursor-dot {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #C6FF3D;
  transition: transform .18s ease, opacity .18s ease;
}
.ts-cursor.is-hover {
  width: 52px;
  height: 52px;
  border-color: #C6FF3D;
  background: rgba(198, 255, 61, .06);
}
.ts-cursor.is-hover .ts-cursor-dot { transform: scale(0); opacity: 0; }
.ts-cursor.is-hidden { opacity: 0; }

@media (pointer: coarse) { .ts-cursor { display: none; } }

/* ── 3. Reveal on scroll ── */
.ts-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity .7s cubic-bezier(.4, 0, .2, 1), transform .7s cubic-bezier(.4, 0, .2, 1);
}
/* Al terminar se suelta la capa y el texto vuelve a rasterizarse nitido */
.ts-reveal.is-visible {
  will-change: auto;
}
.ts-reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}
.ts-reveal-1 { transition-delay: .1s; }
.ts-reveal-2 { transition-delay: .2s; }
.ts-reveal-3 { transition-delay: .3s; }
.ts-reveal-4 { transition-delay: .4s; }

/* Si el usuario pide menos movimiento no hay cursor, ni barra, ni reveal:
   el contenido se ve directamente, nunca oculto. */
@media (prefers-reduced-motion: reduce) {
  .ts-cursor,
  .ts-progress { display: none; }
  .has-custom-cursor,
  .has-custom-cursor * { cursor: auto !important; }
  .ts-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* -- 4. Interaccion de botones y enlaces, portada del estatico -- */
.elementor-button{transition:transform .15s ease,background-color .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease;}
.elementor-button:hover{transform:translateY(-1px);}
/* El secundario no cambia de fondo: solo se le aclara el contorno */
.ts-btn-outline .elementor-button:hover{background-color:transparent;border-color:#FFFFFF;color:#FFFFFF;}
/* Enlace de texto con flecha: lima y la flecha avanza */
.ts-link-arrow .elementor-heading-title{transition:color .2s ease,gap .2s ease;}
.ts-link-arrow:hover .elementor-heading-title{color:#C6FF3D;gap:14px;}
.ts-link-arrow .elementor-heading-title span{transition:transform .25s ease;display:inline-block;}
.ts-link-arrow:hover .elementor-heading-title span{transform:translateX(4px);}
/* Las tarjetas enlazadas responden al puntero con el filo lima */
.ts-card-link{transition:border-color .2s ease,background-color .2s ease,transform .2s ease;}
.ts-card-link:hover{border-color:rgba(198,255,61,.35);transform:translateY(-2px);}
@media (prefers-reduced-motion: reduce){
  .elementor-button:hover,.ts-card-link:hover{transform:none;}
  .ts-link-arrow:hover .elementor-heading-title span{transform:none;}
}

/* Red de seguridad: ningun elemento a sangre puede provocar scroll lateral.
   clip en vez de hidden, que hidden rompe position:sticky. */
html { overflow-x: clip; }
