/* ============================================================
   movimiento.css — animaciones, carrusel y barra de contacto fija.

   REGLA DE ORO: todo lo que se anima está detrás de `.js`, una
   clase que pone un script diminuto en el <head>. Si el
   JavaScript no corre, esta hoja no esconde absolutamente nada
   y la página se ve completa. Nunca escondas contenido con CSS
   confiando en que el JS lo va a revelar.

   Y todo respeta `prefers-reduced-motion`: si el visitante pidió
   menos movimiento en su teléfono, no hay animaciones.
   ============================================================ */

/* ---------- 1. Aparecer al bajar ---------------------------- */

@media (prefers-reduced-motion: no-preference){
  .js .aparece{
    opacity:0;
    transform:translateY(22px);
    transition:opacity .62s cubic-bezier(.22,.61,.36,1),
               transform .62s cubic-bezier(.22,.61,.36,1);
    will-change:opacity, transform;
  }
  .js .aparece.visible{opacity:1; transform:none;}

  /* Escalonado: las tarjetas de una fila entran una tras otra */
  .js .aparece[data-retraso="1"]{transition-delay:.09s;}
  .js .aparece[data-retraso="2"]{transition-delay:.18s;}
  .js .aparece[data-retraso="3"]{transition-delay:.27s;}
  .js .aparece[data-retraso="4"]{transition-delay:.36s;}
}

/* ---------- 1b. Barra de progreso de lectura ---------------- */

/* Una línea fina arriba que se va llenando conforme se baja. Cuesta
   nada y le da al sitio el aire de página cuidada. Sin JS no existe. */

.progreso{
  position:fixed; top:0; left:0; right:0; height:3px; z-index:120;
  background:transparent; pointer-events:none;
}
.progreso span{
  display:block; height:100%; width:0;
  background:linear-gradient(90deg, var(--amber), #FFD98A, var(--teal));
  box-shadow:0 0 12px rgba(255,178,56,.55);
  transition:width .12s linear;
}
html:not(.js) .progreso{display:none;}
@media (prefers-reduced-motion: reduce){
  .progreso span{transition:none;}
}

/* ---------- 2. Micro-interacciones -------------------------- */

@media (hover:hover) and (prefers-reduced-motion: no-preference){
  .tarjeta, .cosa, .trabajo, .pregunta, .plan{
    transition:transform .22s ease, box-shadow .22s ease, border-color .22s ease;
  }
  .tarjeta:hover, .cosa:hover, .pregunta:hover{
    transform:translateY(-3px);
    box-shadow:0 10px 26px rgba(18,21,43,.10);
    border-color:#CFC9B8;
  }
  .plan:hover{transform:translateY(-3px); box-shadow:0 14px 34px rgba(18,21,43,.12);}
  .btn{transition:transform .16s ease, box-shadow .16s ease, background .16s ease, filter .16s ease;}
  .btn:hover{transform:translateY(-2px); filter:brightness(1.04);}
}
.btn:active{transform:translateY(1px) !important;}

/* Foco visible para quien navega con teclado */
a:focus-visible, button:focus-visible, input:focus-visible{
  outline:3px solid var(--amber);
  outline-offset:3px;
  border-radius:6px;
}

/* ---------- 3. Carrusel de trabajos reales ------------------ */

/* Se desliza con el dedo aunque no haya JavaScript: es scroll
   nativo con puntos de anclaje. El JS solo agrega los botones
   y los puntitos. */

.carrusel-caja{position:relative; margin-top:26px;}

.carrusel{
  display:flex;
  gap:16px;
  overflow-x:auto;
  scroll-snap-type:x mandatory;
  scroll-behavior:smooth;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  padding:4px 0 8px;
}
.carrusel::-webkit-scrollbar{display:none;}

/* La tarjeta tiene dos caras. Sin JavaScript se apilan una debajo de
   otra (todo el contenido queda legible); con JavaScript se voltea. */

/* Las capturas son de 390px de ancho. Cuanto más se achica la tarjeta,
   más se comprime la pantalla de dentro y peor se lee — se nota y resta
   profesionalidad. En pantalla grande van casi a tamaño real. */
.diapo{
  flex:0 0 auto;
  width:min(300px, 78vw);
  scroll-snap-align:center;
  border-radius:18px;
}
@media (min-width:900px){  .diapo{width:340px;} }
@media (min-width:1180px){ .diapo{width:376px;} }
.diapo .cara{
  background:var(--navy-soft);
  border:1px solid #39406B;
  border-radius:18px;
  overflow:hidden;
  display:flex;
  flex-direction:column;
}
html:not(.js) .diapo .cara + .cara{margin-top:12px;}

/* La cara de delante manda la altura y el reverso se le encima. Así la
   tarjeta mide exactamente lo que necesita en cualquier pantalla — con
   una altura fija se recortaba el pie de la tarjeta. */
.js .diapo{
  position:relative;
  perspective:1400px;
}
.js .diapo .cara{
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transition:transform .55s cubic-bezier(.3,.7,.4,1);
  transform-style:preserve-3d;
}
.js .diapo .frente{position:relative;}
.js .diapo .reverso{position:absolute; inset:0; margin-top:0; transform:rotateY(180deg);}

/* Con ratón: se voltea al pasar por encima y vuelve al salir. No hay que
   hacer clic en nada. En pantalla táctil no existe :hover, así que ahí
   manda el botón (clase .volteada). */
@media (hover:hover) and (pointer:fine){
  .js .diapo:hover .frente,
  .js .diapo:focus-within .frente{transform:rotateY(-180deg);}
  .js .diapo:hover .reverso,
  .js .diapo:focus-within .reverso{transform:rotateY(0);}
}

/* Va después de :hover a propósito: con el mismo peso, gana la última. */
.js .diapo.volteada .frente{transform:rotateY(-180deg);}
.js .diapo.volteada .reverso{transform:rotateY(0);}

@media (prefers-reduced-motion: reduce){
  .js .diapo .cara{transition:none;}
}

/* Cara de atrás: OTRA pantalla del mismo sitio, arriba, y debajo qué se
   construyó. Antes era solo texto y quedaba medio recuadro vacío; ahora
   al voltear se ve otra parte del trabajo, que es de lo que se trata. */
.diapo .reverso{
  justify-content:flex-start;
  background:
    radial-gradient(circle at 85% 0%, #333B72 0%, transparent 60%),
    var(--navy-soft);
}
.diapo .pantalla.chica{
  background:#0D1024; padding:16px 16px 0;
  max-height:58%; overflow:hidden; flex-shrink:0;
}
.diapo .pantalla.chica img{
  border-radius:12px 12px 0 0;
  box-shadow:0 -2px 0 #39406B inset, 0 8px 22px rgba(0,0,0,.45);
}
.diapo .reverso .pie-diapo{
  display:flex; flex-direction:column; flex:1;
  padding:18px 20px 20px;
}
.diapo .reverso h3{color:var(--paper); font-size:1.25rem; margin-top:4px;}
.diapo .reverso ul{list-style:none; margin:14px 0 0; padding:0;}
.diapo .reverso li{
  font-size:.92rem; color:#D6D8EC; line-height:1.55;
  padding:13px 0 13px 22px; position:relative; border-top:1px solid #39406B;
}
.diapo .reverso li:first-child{border-top:none; padding-top:0;}
.diapo .reverso li:first-child::before{top:7px;}
.diapo .reverso li::before{
  content:""; position:absolute; left:0; top:20px;
  width:7px; height:7px; border-radius:50%; background:var(--amber);
}

/* El enlace al sitio real, pegado abajo */
.diapo .reverso .liga{
  margin-top:auto; align-self:stretch; text-align:center;
  background:var(--amber); color:var(--navy-deep);
  border-radius:100px; padding:13px 16px;
  font:700 .82rem var(--body); letter-spacing:0;
  word-break:normal;
}
.diapo .reverso .liga:hover{filter:brightness(1.06); text-decoration:none;}

.voltear{
  align-self:flex-start; margin-top:12px;
  background:transparent; border:1px solid #4A5183; border-radius:100px;
  color:var(--amber); cursor:pointer;
  font:700 .76rem 'Space Mono', ui-monospace, monospace;
  padding:8px 14px; letter-spacing:.04em;
}
.voltear:hover{background:#12152B; border-color:var(--amber);}
.voltear.atras{margin-top:12px; align-self:center;}
html:not(.js) .voltear{display:none;}

/* Con ratón el flip es automático, así que los botones sobran.
   En táctil son la única forma de voltear, ahí sí se ven. */
@media (hover:hover) and (pointer:fine){
  .js .voltear{
    opacity:.55; font-size:.7rem; padding:6px 12px;
    transition:opacity .2s ease;
  }
  .js .diapo:hover .voltear{opacity:1;}
  .js .voltear.atras{display:none;}
}
.diapo .pantalla{
  background:#0D1024;
  padding:18px 18px 0;
  display:flex;
  justify-content:center;
}
.diapo .pantalla img{
  width:100%;
  border-radius:14px 14px 0 0;
  box-shadow:0 -2px 0 #39406B inset, 0 10px 26px rgba(0,0,0,.45);
  background:#0D1024;
}
.diapo .pie-diapo{padding:16px 18px 20px;}
.diapo .rubro{
  font-family:var(--mono); font-size:.6rem; letter-spacing:.12em;
  text-transform:uppercase; color:var(--teal); display:block; margin-bottom:5px;
}
.diapo h3{color:var(--paper); font-size:1.02rem;}
.diapo p{font-size:.84rem; color:#B9BBD6; margin-top:6px; min-height:2.6em;}
.diapo .liga{
  display:inline-block; margin-top:11px;
  font-family:var(--mono); font-size:.72rem; font-weight:700;
  color:var(--amber); text-decoration:none;
}
.diapo .liga:hover{text-decoration:underline;}

/* Flechas — solo en pantallas con ratón */
.carrusel-flecha{
  display:none;
  position:absolute; top:38%; z-index:5;
  width:44px; height:44px; border-radius:50%;
  background:var(--amber); color:var(--navy-deep);
  border:0; cursor:pointer; font-size:1.15rem; font-weight:700;
  box-shadow:0 6px 18px rgba(0,0,0,.35);
  align-items:center; justify-content:center;
}
.carrusel-flecha:disabled{opacity:.3; cursor:default;}
.carrusel-flecha.izq{left:-14px;}
.carrusel-flecha.der{right:-14px;}
@media (hover:hover) and (min-width:760px){
  .js .carrusel-flecha{display:flex;}
}

/* Puntitos */
.carrusel-puntos{
  display:flex; justify-content:center; gap:8px; margin-top:16px;
}
.carrusel-puntos button{
  width:8px; height:8px; padding:0; border-radius:50%;
  background:#4A5183; border:0; cursor:pointer;
  transition:width .25s ease, background .25s ease;
}
.carrusel-puntos button[aria-current="true"]{
  width:26px; border-radius:100px; background:var(--amber);
}

.pista-desliza{
  text-align:center; margin-top:12px;
  font-family:var(--mono); font-size:.68rem; letter-spacing:.06em; color:#8E93BC;
}
@media (min-width:760px){ .pista-desliza{display:none;} }

/* ---------- 4. Barra de contacto fija ----------------------- */

.cta-fija{
  position:fixed; left:0; right:0; bottom:0; z-index:90;
  background:rgba(18,21,43,.97);
  backdrop-filter:blur(12px);
  border-top:1px solid #2C3157;
  padding:11px 16px calc(11px + env(safe-area-inset-bottom));
  display:flex; align-items:center; gap:13px;
  transform:translateY(110%);
  transition:transform .34s cubic-bezier(.22,.61,.36,1);
}
.cta-fija.arriba{transform:none;}
.cta-fija .texto{flex:1; min-width:0; line-height:1.3;}
.cta-fija .texto b{
  display:block; color:var(--paper); font-size:.88rem; font-weight:700;
}
.cta-fija .texto span{font-size:.75rem; color:#9BA0C4;}
.cta-fija .btn{padding:12px 20px; font-size:.88rem; flex-shrink:0;}

/* Sin JS nunca aparece — y así no tapa nada */
html:not(.js) .cta-fija{display:none;}

@media (prefers-reduced-motion: reduce){
  .cta-fija{transition:none;}
}

/* Espacio para que la barra no tape el pie */
.js body{padding-bottom:0;}
.js footer.pie{padding-bottom:96px;}

/* ---------- 5. Comparativa animada -------------------------- */

.barras-comp{margin-top:22px; display:grid; gap:16px;}
.barra-comp .encabezado{
  display:flex; justify-content:space-between; align-items:baseline;
  gap:12px; margin-bottom:7px;
}
.barra-comp .quien{font-size:.92rem; font-weight:600;}
.barra-comp .quien small{
  display:block; font-weight:400; font-size:.78rem; color:#9BA0C4; margin-top:2px;
}
.barra-comp .cifra{
  font-family:var(--mono); font-weight:700; font-size:1.15rem; white-space:nowrap;
}
.barra-comp .riel{
  height:13px; border-radius:100px; background:#2C3157; overflow:hidden;
}
.barra-comp .relleno{
  height:100%; border-radius:100px; width:0;
  transition:width 1.1s cubic-bezier(.22,.61,.36,1);
}
html:not(.js) .barra-comp .relleno{width:var(--hasta) !important;}
@media (prefers-reduced-motion: reduce){
  .barra-comp .relleno{transition:none;}
}
.barra-comp.ellos .relleno{background:linear-gradient(90deg,#7C4DFF,#B388FF);}
.barra-comp.ellos .cifra{color:#C7B0FF;}
.barra-comp.tu .relleno{background:linear-gradient(90deg,var(--amber),#FFD98A);}
.barra-comp.tu .cifra{color:var(--amber);}
