@charset "utf-8";
/* ============================================================
   modulos/traductor.css

   Se carga después de base.css, panel.css y app.css. Solo lo que es de
   esta área: todo lo común (tarjetas, botones, campos, cifras, tablas,
   avisos, cabecera de pantalla) ya viene de ahí.

   El color es el de la sección: `route()` pone `t-traductor` y app.css lo
   viste de jade (`--acierto`). Aquí no se escribe ni un color de familia a
   mano salvo los que significan algo por sí mismos: el ámbar del aviso de
   falso amigo y el coral del error, que dicen «cuidado» en cualquier sección.
   ============================================================ */

/* ---------- el reparto ----------
   Por el ancho del CONTENEDOR y no de la ventana: la columna lateral de la
   aplicación se come 15rem a partir de 60rem, así que una consulta por
   ventana partía en dos columnas una pantalla de 1024 px que por dentro solo
   tenía 720 px útiles, y la ficha quedaba en un pasillo de 400. */
.tk-traductor { container-type: inline-size; }

.tk-tr-rejilla {
  display: grid;
  gap: var(--e-5);
  grid-template-columns: minmax(0, 1fr);
  grid-template-areas: "consulta" "salida" "guardadas";
}
.tk-tr-consulta  { grid-area: consulta; }
.tk-tr-salida    { grid-area: salida; min-width: 0; }
.tk-tr-guardadas { grid-area: guardadas; min-width: 0; }
.tk-tr-guardadas:empty { display: none; }

@container (min-width: 52rem) {
  .tk-tr-rejilla {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    grid-template-rows: auto 1fr;
    grid-template-areas: "consulta salida" "guardadas salida";
    align-items: start;
  }
}

/* app.css separa el icono de lo que le sigue con un margen; dentro de un
   botón o de un aviso ya lo separa su propio hueco y salían dos espacios. */
.tk-traductor :is(.btn, .aviso, .tk-tr-nota-breve) .tk-icono + * { margin-left: 0; }

/* ============================================================
   1. La consulta
   ============================================================ */
.tk-tr-consulta { display: grid; gap: var(--e-4); }
.tk-tr-consulta .campo { margin-bottom: 0; }

/* Los dos idiomas y el intercambio entre ellos, a la altura de los
   selectores. Mientras llega la lista del servidor la fila ya ocupa lo que
   va a ocupar: si no, la caja de texto bajaba de golpe medio segundo después
   de pintarse, con el cursor ya dentro. */
.tk-tr-idiomas {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: end;
  gap: var(--e-2);
}
.tk-tr-idiomas:empty { min-height: 4.75rem; }
/* min-width: 0 en el campo Y en el selector: un <select> mide de mínimo su
   opción más larga, y con treinta y siete idiomas eso desbordaba a 320 px. */
.tk-tr-idioma, .tk-tr-idioma select { min-width: 0; }
.tk-tr-cambiar { margin-bottom: .1875rem; }
/* En un móvil, tres piezas en una fila dejaban cada selector en 130 px y
   «Detectar idioma» salía cortado. Apilados, cada uno tiene la línea entera y
   el intercambio queda a la derecha, entre los dos, que es lo que hace. */
@container (max-width: 30rem) {
  .tk-tr-idiomas {
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas: "desde cambiar" "hacia cambiar";
    align-items: end; row-gap: var(--e-3);
  }
  .tk-tr-idioma.es-desde { grid-area: desde; }
  .tk-tr-idioma.es-hacia { grid-area: hacia; }
  .tk-tr-cambiar { grid-area: cambiar; align-self: center; margin-bottom: 0; margin-top: 1.5rem; }
  .tk-tr-idiomas:empty { min-height: 10rem; }
}
.tk-tr-cambiar:hover { border-color: var(--seccion); color: var(--seccion-tinta); background: var(--seccion-lavado); }
.tk-tr-cambiar svg { width: 1.125rem; height: 1.125rem; }

.tk-tr-aviso-par { padding: var(--e-3) var(--e-4); gap: var(--e-3); }
.tk-tr-aviso-par svg { width: 1.25rem; height: 1.25rem; }
.tk-tr-aviso-par p { margin-top: 0; }

.tk-tr-campo textarea { min-height: 7.5rem; line-height: 1.5; }

.tk-tr-pie {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-3);
}
.tk-tr-cuenta { font-size: var(--t-sm); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
@container (max-width: 30rem) {
  .tk-tr-pie .btn { flex: 1 1 100%; }
}

/* ============================================================
   2. El resultado
   ============================================================ */
.tk-tr-resultado { display: grid; gap: var(--e-4); align-content: start; }
.tk-tr-resultado > * { min-width: 0; }

/* Lo primero que se lee es de dónde sale. El chip admite dos renglones: a
   320 px «Traducción automática, sin revisar por un profesor» no cabe en uno,
   y cortarla dejaría justo la parte que importa fuera de la vista. */
.tk-tr-procedencia { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); }
.tk-tr-origen { white-space: normal; line-height: 1.3; }
.tk-tr-origen svg { width: 1rem; height: 1rem; }
.tk-tr-sentido { letter-spacing: .06em; font-variant-numeric: tabular-nums; }

.tk-tr-par { display: grid; gap: var(--e-1); }
.tk-tr-original { color: var(--tinta-2); font-size: var(--t-md); overflow-wrap: anywhere; }
.tk-tr-destino {
  font-family: var(--display); font-size: var(--t-2xl); font-weight: 600;
  letter-spacing: -.025em; line-height: 1.1;
  overflow-wrap: anywhere; text-wrap: balance;
}
.tk-tr-destino.es-larga { font-size: var(--t-lg); line-height: 1.4; letter-spacing: -.01em; text-wrap: pretty; }

.tk-tr-nota-breve {
  display: flex; align-items: baseline; gap: var(--e-2);
  font-size: var(--t-sm); color: var(--tinta-2);
}
.tk-tr-nota-breve svg { color: var(--seccion-tinta); flex: none; align-self: center; }

/* La pronunciación va sobre el lavado de la sección: es lo que un traductor
   cualquiera no da, y tiene que distinguirse del resto sin necesidad de raya
   de separación. La tinta de jade sobre su lavado pasa de 4,5:1 en los dos
   temas (base.css §1). */
.tk-tr-pron {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-3) var(--e-4);
  padding: var(--e-3) var(--e-4);
  background: var(--seccion-lavado); border-radius: var(--r-md);
}
.tk-tr-pron .unidad-ipa { margin-top: 0; overflow-wrap: anywhere; }
.tk-tr-pron .unidad-pron { color: var(--tinta-2); }
.tk-tr-oir { min-height: 2.75rem; padding: .5rem 1rem; }

.tk-tr-resultado .unidad-cita,
.tk-tr-resultado .unidad-nota { margin-top: 0; }
.tk-tr-ejemplo { margin: 0; }

/* El aviso del desglose son dos frases con dueños distintos —por qué no hay
   traducción automática, y qué se enseña en su lugar—, y van en dos párrafos
   porque el servidor las manda por separado: la segunda lleva las dos cifras
   en huecos que rellena el cliente. Pegadas contra el borde de arriba la
   primera, y con aire entre ellas. */
.tk-tr-parcial p { margin-top: 0; }
.tk-tr-parcial p + p { margin-top: var(--e-2); }

/* Lo que acompaña: rótulo y dato. `display: contents` en el envoltorio para
   que los rótulos de todas las filas compartan columna y queden alineados. */
.tk-tr-datos {
  display: grid; grid-template-columns: max-content minmax(0, 1fr);
  gap: var(--e-3) var(--e-4); margin: 0;
}
.tk-tr-datos > div { display: contents; }
.tk-tr-datos dt {
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  color: var(--tinta-3); padding-top: .15rem;
}
.tk-tr-datos dd { margin: 0; font-size: var(--t-sm); color: var(--tinta-2); line-height: 1.5; }
@container (max-width: 26rem) {
  .tk-tr-datos { grid-template-columns: minmax(0, 1fr); gap: var(--e-1); }
  .tk-tr-datos dd { margin-bottom: var(--e-2); }
}

.tk-tr-cifra {
  font-family: var(--display); font-size: var(--t-md); font-weight: 600;
  color: var(--tinta); font-variant-numeric: tabular-nums;
}
.tk-tr-fonemas { display: inline-flex; flex-wrap: wrap; gap: var(--e-1); vertical-align: middle; }

.tk-tr-alternativas { list-style: none; display: grid; gap: var(--e-1); color: var(--tinta); }

.tk-tr-piezas { list-style: none; display: flex; flex-wrap: wrap; gap: var(--e-2); }
.tk-tr-piezas li {
  padding: .1875rem .5rem; border-radius: var(--r-sm);
  background: var(--papel-2); color: var(--tinta-2);
}
.tk-tr-piezas b { color: var(--tinta); }
/* La palabra que el curso no tiene se ve, pero apagada y sin relleno: no es
   un error del alumno, es un hueco del material. */
.tk-tr-piezas li.sin-cubrir { background: none; border: 1px solid var(--linea); color: var(--tinta-3); }

/* El falso amigo. `.aviso b` es de bloque en base.css, pensado para el
   titular del aviso; dentro de la frase la palabra en negrita tiene que seguir
   en su renglón. */
.tk-tr-falso { font-size: var(--t-sm); }
.tk-tr-falso b { display: inline; color: var(--tinta); }
.tk-tr-falso s { color: var(--tinta-3); }
.tk-tr-falso span { display: block; margin-top: .125rem; color: var(--tinta-2); }

/* Dónde se estudia: una franja de papel con el nivel, la lección y el botón,
   que es la salida de la consulta hacia el programa. */
.tk-tr-curso {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-3);
  padding: var(--e-3) var(--e-4);
  background: var(--papel-2); border-radius: var(--r-md);
}
.tk-tr-curso p { flex: 1 1 9rem; font-size: var(--t-sm); color: var(--tinta-2); }
.tk-tr-curso p b { color: var(--tinta); }
.tk-tr-curso .btn { min-height: 2.75rem; padding: .5rem 1rem; }

.tk-tr-acciones { margin-top: var(--e-1); }

/* ---------- mientras traduce ---------- */
.tk-tr-esperando { gap: var(--e-3); }
.tk-tr-hueso { display: block; height: 1rem; min-width: 0; }
.tk-tr-hueso.es-chip { width: 15rem; max-width: 70%; height: 1.75rem; border-radius: var(--r-full); }
.tk-tr-hueso.es-titulo { width: 65%; height: 2.5rem; }
.tk-tr-hueso.es-linea { width: 40%; }
.tk-tr-hueso.es-corta { width: 28%; }
.tk-tr-esperando-texto { margin-top: var(--e-2); font-size: var(--t-sm); color: var(--tinta-3); }

/* ---------- el fallo ---------- */
.tk-tr-fallo .aviso b { overflow-wrap: anywhere; }

/* ============================================================
   3. Antes de la primera consulta
   ============================================================ */
.tk-tr-vacio .app-titulo { font-size: var(--t-xl); }
.tk-tr-vacio .app-pasos-ico { background: var(--seccion-lavado); color: var(--seccion-tinta); }
.tk-tr-vacio .app-pasos-ico svg { width: 1.25rem; height: 1.25rem; }

.tk-tr-pruebas {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2);
  font-size: var(--t-sm); color: var(--tinta-2);
}
.tk-tr-pruebas > span { margin-right: var(--e-1); }
/* Son botones con cara de chip: 44 px de alto para el pulgar, y al pasar por
   encima el filo toma el color entero, que es la misma respuesta que da una
   tarjeta de sección. */
.tk-tr-prueba {
  font-family: var(--texto); border: 0; cursor: pointer;
  min-height: 2.75rem; padding-inline: .875rem;
}
.tk-tr-prueba:hover { box-shadow: inset 0 0 0 2px var(--seccion); }

/* ============================================================
   4. Tus consultas
   ============================================================ */
.tk-tr-lista-bloque { margin-bottom: 0; }
.tk-tr-lista { list-style: none; }
.tk-tr-fila {
  display: flex; align-items: center; gap: var(--e-3);
  padding: var(--e-2) var(--e-2) var(--e-2) var(--e-4);
  border-top: 1px solid var(--linea-suave);
}
.tk-tr-fila:first-child { border-top: 0; }
.tk-tr-fila-txt { flex: 1; min-width: 0; display: grid; line-height: 1.35; }
.tk-tr-fila-txt b { font-size: var(--t-sm); font-weight: 700; overflow-wrap: anywhere; }
.tk-tr-fila-txt span { font-size: var(--t-sm); color: var(--tinta-2); overflow-wrap: anywhere; }
.tk-tr-fila-txt .tk-tr-fila-ipa { font-size: var(--t-xs); color: var(--seccion-tinta); }
.tk-tr-quitar { color: var(--tinta-3); }
.tk-tr-quitar:hover { color: var(--racha-tinta); border-color: var(--racha); }
.tk-tr-quitar svg { width: 1.125rem; height: 1.125rem; }

/* ============================================================
   5. El móvil estrecho
   ============================================================ */
/* A 320 px el aviso con su relleno de escritorio dejaba el texto en una
   columna de dieciséis letras, y el botón de guardar partía su rótulo en dos
   renglones con el icono suelto a un lado. Se aprieta el relleno, no el
   texto. */
@container (max-width: 24rem) {
  .tk-traductor .aviso { padding: var(--e-3) var(--e-4); column-gap: var(--e-3); }
  .tk-traductor .aviso svg { width: 1.25rem; height: 1.25rem; }
  .tk-tr-acciones .btn { padding-inline: 1rem; }
}
