/* ============================================================
   Voz — lo poco que es de la APP y no del sistema. Prefijo .vz-

   Este archivo es corto a propósito, y su brevedad es el resultado que hay
   que conservar: la criatura, sus siete estados, su motor de geometría, el
   paso y el silenciador viven completos en `design-system/ron.css § 34` y
   `ron.js § 34`, porque son dos superficies desde el primer día —el centro y
   la pastilla de ⌥Space— y `CLAUDE.md` manda que eso suba. Si algún día este
   archivo crece, la pregunta correcta no es «cómo lo ordeno» sino «¿esto le
   pasaría también a la pastilla?». Si la respuesta es sí, sube.

   Cero overrides de `.r-`: las reglas de abajo tocan clases `.os-` o ponen
   `--comp-size` en el hueco que el sistema ya declara, nunca redeclaran la
   pieza. Lo que la criatura necesitaba para vivir sola —paso y silenciador
   fuera del flujo— subió como `data-comp-solo` (`ron.css § 34f`).
   ============================================================ */

/* ============================================================
   1 · CASA VOZ-PRIMERO — CoO 2026-09-06

   El companion es el gesto de Home, no un adorno al lado del teclado.

     · BIENVENIDA (`data-comp-sitio="centro"`): grande y centrado, sin mensajes.
       `--comp-size-casa` (176). Es la cara que se ve al abrir el OS.
     · CONVERSACIÓN (`data-comp-sitio="muelle"`): baja justo sobre el prompt.
       `--comp-size` (88). Su lugar en el flujo mantiene libres los mensajes.
     · El prompt es una BARRA FINA que crece con el texto, no una caja vacía.
       Eso vive en `os.css`. Un toque doble en la criatura lo enfoca.

   LÁPIDA del anclaje 2026-08-26: la criatura era hermana de `.os-composer`
   dentro de `.os-col`, `right: 100% + aire`, y `sitio()` la devolvía al
   renglón cuando el canal libre era cero (MacBook + panel). Eso era
   teclado-primero: la caja mandaba y la cara se apartaba. Casa voz-primero
   no mete la criatura en el renglón — ni en ventana angosta. El nodo vive
   en `.os-center`; la verdad de dónde está es `data-comp-sitio`.
   ============================================================ */

.os-companion {
  position: absolute;
  z-index: 1;
  right: auto;
  bottom: auto;
  translate: -50% -50%;
  transition: left var(--d-slow) var(--ease), top var(--d-slow) var(--ease);
}

/* Grande y centrado: el reposo de Casa.

   `left: 50%` es el centro de `.os-center` (inset:0 = la ventana), NO el
   centro de la región libre. Con un módulo abierto el companion se quedaba
   encima del split. El centro visual es
   `(ancho + pad-izq − pad-der) / 2`, y `--os-libre-end` es el pad derecho
   que `.os-center` ya reserva. Viaja con `--d-slow` / `--ease` igual que
   el padding del centro: abrir corre; arrastrar el canto no pelea
   (`data-flyout-resizing` apaga la transición); cerrar no salta. */
.os-companion[data-comp-sitio="centro"] {
  left: 50%;
  top: 50%;
  right: auto;
  bottom: auto;
  translate: -50% -50%;
  --comp-size: var(--comp-size-casa);
}
[data-flyout-open] .os-companion[data-comp-sitio="centro"] {
  left: calc((100% + var(--flyout-pad) - var(--os-libre-end)) / 2);
}
/* Muelle sobre el compositor: coordenadas medidas, sólo la geometría cambia.
   Los 56px de arriba reservan paso y silenciador del componente del sistema. */
.vz-muelle {
  flex: 0 0 auto;
  height: calc(var(--comp-size) + var(--s-6) + var(--s-8));
  pointer-events: none;
}
.os-companion[data-comp-sitio="muelle"] {
  left: var(--vz-muelle-x);
  top: calc(var(--vz-muelle-y) - var(--comp-size) / 2);
  /* Si el prompt crece, seguirlo al instante evita pasar encima del texto. */
  transition: left var(--d-slow) var(--ease);
}
.os-companion[data-vz-viaje] {
  transition: left var(--d-slow) var(--ease), top var(--d-slow) var(--ease);
}
[data-flyout-resizing] .os-companion { transition: none; }
@media (prefers-reduced-motion: reduce) {
  .os-companion { transition: none; }
}

/* LÁPIDA: `.os-composer__row > .os-companion`. Era el fallback del canal
   cero — criatura de 44 en el renglón, alineada con Enviar. Casa no vuelve
   al renglón. Si un día otra superficie la necesita en una fila, el sistema
   ya sabe: `--comp-size-min` y `data-comp-solo` ausente. */

/* ---- 2 · Con el micrófono abierto, la ayuda del teclado se calla ----

   `.os-hint` dice «↩ envía · ⇧↩ salto · /tarea · /nota». Mientras estás
   hablando eso no es ayuda: es una instrucción para un gesto que no estás
   haciendo. Se va, y vuelve sola en cuanto la sesión de voz termina.

   El ancla es `.os-center` y no `.os-col`: la criatura es hija del centro.
   Un `:has()` sobre `.os-col` dejaría de empatar — el mismo modo de fallar
   que ya mordió cuando salió del renglón (2026-08-26). */
.os-center:has(.r-companion[data-comp="hear"]) .os-hint,
.os-center:has(.r-companion[data-comp="think"]) .os-hint,
.os-center:has(.r-companion[data-comp="talk"]) .os-hint {
  opacity: 0;
  pointer-events: none;
}
/* `exec` y `needs` NO se listan: pueden levantarse sin sesión de voz, y
   ahí el teclado sigue siendo la herramienta. */

/* Con el teclado o en landscape corto, la cara conserva el mínimo táctil.
   Los controles usan la disposición inline del componente del sistema. */
.os-shell[data-os-mobile][data-os-compact] { --comp-size: var(--comp-size-min); }
.os-shell[data-os-mobile][data-os-compact] .vz-muelle { height: var(--comp-size); }

/* VC1/VC4: renglón quieto sobre el prompt. No es burbuja; no scrollea el hilo. */
.vz-linea {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s-2);
  margin: 0;
  padding: 0 var(--s-3);
  min-height: var(--s-6);
  font-size: var(--t-micro);
  color: var(--ink-3);
}
.vz-linea[hidden] { display: none; }
.vz-linea__txt { min-width: 0; flex: 1 1 auto; }
.vz-linea .r-seg { flex: 0 0 auto; }
