/* ══════════════════════════════════════════════════════════════════════
   NOVA · lo que el módulo del asistente le cambia a su panel

   Dos bloques: el ancho en escritorio y la hoja en móvil.

   POR QUÉ ESTO NO PUEDE IR EN EL CSS QUE INYECTA `conecta.js`. Ese se añade
   a `<head>`, y los estilos de Nova viven en el `<body>` de index.html
   —`</head>` está en la línea 12935 y `.nova-panel{` en la 68655—. A igual
   especificidad decide el orden del documento, así que lo inyectado en la
   cabeza PIERDE contra lo que hay más abajo. Este `<link>` va al final del
   body, después de todo, y por eso gana.

   Las clases `.nv-*` sí van inyectadas: son nuestras y nadie más las
   define, así que no compiten con nada.
   ══════════════════════════════════════════════════════════════════════ */

/* El panel pasa de 370 a 440. Cabe el gráfico sin comerse la pantalla, y en
   un portátil de 1440 la tabla de detrás se sigue viendo al lado.

   El hueco que la página reserva NO hay que tocarlo: `reservar()` mide el
   panel pintado en vez de copiar el número, precisamente para que cambiar
   esta línea no deje descuadrado un valor escrito a mano en otro sitio.

   ACOTADO A ESCRITORIO, y no es cosmético. Sin el `@media`, estos 440 px se
   colaban en el teléfono: index.html ya manda `left:0; right:0; width:auto`
   para que la hoja ocupe el ancho, pero lo hace desde un `@media` —que no
   suma especificidad— y este `<link>` va DESPUÉS, así que ganaba el 440.
   Medido a 390: el panel salía de 440 y la cabecera, la ✕, los atajos y el
   campo de escribir se salían 50 px por la derecha. */
@media (min-width: 901px) {
  .nova-panel { width: 440px; }
}

/* ══════════════════════════════════════════════════════════════════════
   NOVA · la hoja del asistente en móvil
   ──────────────────────────────────────────────────────────────────────
   El panel de Nova vive en index.html y ahí, en móvil, ya es una hoja —
   pero la de escritorio con medidas de escritorio: 86vh, tipografías de
   9,5 a 11,5 px, y el estado vacío flotando en mitad de un hueco de
   200 px. Aquí se rehace SIN TOCAR index.html.

   CÓMO GANA LA CASCADA. Estas reglas tienen la MISMA especificidad que
   las de index.html —(0,1,0) contra (0,1,0)—, así que decide el orden:
   este <link> va DESPUÉS de aquel <style>. Si alguien sube la etiqueta,
   la hoja deja de aplicarse y el fallo no se verá en este fichero. Ni un
   !important hace falta.

   ES INDEPENDIENTE DE `movil/`. El módulo del asistente se lleva su
   propio responsive para poder ir a producción solo. Las tres variables
   de la capa móvil se leen con respaldo —`var(--mv-barra, 0px)`— en vez
   de redefinirse: si esa capa está cargada manda ella, y si no, el
   respaldo. Redefinirlas aquí sobre `:root` sería pelearse con ella a
   igualdad de especificidad, y ganaría la que cargue más tarde.

   DOS TRAMPAS DE CASCADA, antes de añadir una línea aquí:

   · `transform` NO SE TOCA. index tiene `.nova-panel{transform:
     translateY(105%)}` y `.nova-panel.abierto{transform:none}`. Cualquier
     `transform` de más aquí, al ir después, le ganaría TAMBIÉN al estado
     abierto: la hoja no volvería a subir nunca.

   · `display` en `.nova-vacio` NO LLEVA !important. El JS lo apaga con
     `vacio.style.display='none'` al primer mensaje. Un !important aquí
     deja el saludo pegado encima del hilo para siempre, y el fallo se
     buscaría en el JS, que está bien.
   ══════════════════════════════════════════════════════════════════════ */

@media (max-width: 900px) {

  /* «Casi pantalla completa» = todo menos una franja FIJA de 24 px de velo.
     Fija y no un porcentaje: esa franja es lo unico que queda para tocar
     fuera y cerrar, y ese gesto no debe encoger con la pantalla. 24 = los
     20 del radio + 4; por debajo del radio la esquina no se lee.

     `dvh` y no `vh`: en movil `vh` es el viewport GRANDE, el de la barra
     del navegador retraida. Por eso los 86vh se veian distintos segun el
     scroll. `dvh` sigue al viewport de verdad.

     `bottom:0` tapa las pestañas: el velo (z-855) ya esta por encima de
     ellas (z-130) y se come sus clics, asi que dejarlas asomando solo
     enseña una navegacion apagada que invita a tocarla. */
  .nova-panel {
    bottom: 0;
    height: calc(100dvh - 24px);
    border-radius: 20px 20px 0 0;                    /* la medida de `.mv-hoja` */
    box-shadow: 0 -10px 40px rgba(16, 24, 40, .22);  /* la sombra de `.mv-hoja` */
    /* La curva de `.mv-hoja`. `visibility` va en el mismo atajo: si se lista
       solo `transform`, al cerrar salta a hidden en el primer fotograma y la
       hoja desaparece de golpe en vez de bajar. */
    transition: transform .26s cubic-bezier(.32, .72, 0, 1), visibility .26s;
  }

  /* El asa. `.mv-hoja` la pinta con un <div> (armazon.js:338); aqui el
     marcado esta en index.html, asi que sale de un ::before — y ABSOLUTO,
     porque `.nova-panel` es flex column y en flujo seria un item mas. */
  .nova-panel::before {
    content: '';
    position: absolute;
    top: 8px; left: 50%;
    transform: translateX(-50%);
    width: 38px; height: 4px;                  /* las medidas de `.mv-hoja-asa` */
    border-radius: 999px;
    background: rgba(255, 255, 255, .55);      /* debajo hay banda azul, no papel */
    pointer-events: none;
    z-index: 2;
  }

  .nova-cab { padding: 19px 12px 12px 14px; gap: 12px; }
  .nova-cab-av { width: 36px; height: 36px; }
  .nova-cab-txt strong { font-size: 14px; }
  .nova-cab-txt span { font-size: 10.5px; }
  /* 44x44 de verdad: la ✕ esta en la excepcion de la linea 210
     (`min-height:0`), que la dejaba en 27 px de area tactil. */
  .nova-cab-x { width: 44px; height: 44px; font-size: 16px; }

  /* EL HUECO DE LA CAPTURA. index deja `.nova-vacio{margin:auto 0}`
     (index.html:68347) dentro de un flex column: con los DOS margenes en
     auto el bloque se centra y el sobrante se parte en dos huecos de ~100
     px. Con solo el de arriba en auto, todo el aire se junta bajo la
     cabecera —donde se lee como margen— y retrato, saludo y chips caen
     pegados al escritor, en el tercio inferior, que es donde llega el
     pulgar. Seguro porque cuando hay conversacion este bloque ya esta en
     display:none: nunca coexisten un hilo largo y un margen auto. */
  .nova-vacio {
    margin-top: auto;
    margin-bottom: 0;
    padding: 0 0 2px;
  }
  /* El retrato crece hasta comerse el aire que sobra. Se manda por ANCHO
     porque el archivo es vertical (344x440) y asi no se deforma; el tope en
     dvh lo protege en pantallas cortas y en horizontal. */
  .nova-vacio img {
    width: min(62%, 228px);
    height: auto;
    max-height: 32dvh;
    margin: 0 auto 14px;
  }
  .nova-saludo { font-size: 16.5px; line-height: 1.4; margin-bottom: 6px; }
  .nova-donde { font-size: 12px; margin-bottom: 16px; }

  /* Tres preguntas de 30 caracteres no caben en pildoras centradas: salian
     tres filas rotas, de anchos distintos y con la ultima huerfana. En
     columna y a ancho completo son la misma pieza que `.mv-acc`, y el
     `min-height:44px` de `button` (linea 196) ya les da el area
     tactil sin escribir nada. */
  .nova-chips { flex-direction: column; align-items: stretch; gap: 8px; }
  .nova-chip {
    text-align: left;
    font-size: 14px;
    line-height: 1.35;
    padding: 12px 16px;
    border-radius: 14px;
    box-shadow: var(--mv-sombra, 0 2px 10px rgba(0, 0, 0, .06));
    -webkit-tap-highlight-color: transparent;
  }
  .nova-chip:active { transform: scale(.985); }

  /* El hilo: tipografia de movil, no de panel lateral. */
  .nova-cuerpo {
    padding-top: 10px;             /* 4 px bajo una banda azul es un corte, no un margen */
    overscroll-behavior: contain;  /* al acabar el hilo no arrastra la pagina de detras */
  }
  .nova-hilo { gap: 12px; }
  .nova-msg-av { width: 26px; height: 26px; }
  .nova-burbuja { font-size: 14.5px; padding: 10px 13px; max-width: 84%; }

  /* El escritor. El hueco seguro lo pone el pie porque la hoja ya no se
     apoya en la barra de pestañas —que traia `padding-bottom:var(--mv-seguro, env(safe-area-inset-bottom, 0px))`
     puesto—: ahora llega al borde, y el indicador de inicio del iPhone cae
     justo encima del boton de enviar.
     El `font-size:16px` del textarea NO se escribe aqui: la linea 190 ya se
     lo pone a todo textarea con !important, por la misma razon (bajo 16 px
     iOS hace zoom al enfocar).
     ponytail: con el teclado abierto iOS desplaza el viewport visual en vez
     de encoger el dvh, y la hoja puede quedar parcialmente debajo. Eso no se
     arregla en CSS: pide `interactive-widget=resizes-content` en el meta
     viewport, y eso toca index.html. */
  .nova-pie { padding: 6px 14px calc(10px + var(--mv-seguro, env(safe-area-inset-bottom, 0px))); }
  .nova-entrada { border-radius: 24px; padding: 5px 5px 5px 16px; }
  .nova-enviar { width: 44px; height: 44px; font-size: 17px; }
  .nova-aviso { font-size: 11px; margin: 8px 6px 0; }

  /* La burbuja flotante. Se queda en z-125, POR DEBAJO de las pestañas
     (130), y no es un descuido: nunca coincide con nada que este encima.
     Con Nova abierta la apaga index (`body.nova-abierto .nova-fab{display:
     none}`, index.html:68253); con una hoja del armazon abierta, la regla de
     aqui; y en reposo flota 12 px POR ENCIMA de la barra, no sobre ella.
     Subirla a 131 seria una regla que no se puede demostrar rota. */
  #novaFab {
    bottom: calc(var(--mv-barra, 0px) + 12px) !important;
    z-index: 125 !important;
  }

  /* D04 en el teléfono. Esto se resolvía RETRAYENDO la burbuja al borde
     (movil/nova.js): se encogía a 44 y asomaba 14, el resto fuera de
     pantalla. Medido en pantalla, lo que asoma es un trozo de la cara de
     Nova contra el borde; y en el Resumen se quedaba retraída SIEMPRE,
     porque las tarjetas ocupan todo el ancho y debajo siempre hay contenido.
     El asistente acababa escondido casi todo el tiempo.

     Se queda entera y visible, y el problema que motivó aquello —tapar la
     última fila— se arregla por el otro lado: la zona de scroll reserva su
     alto, igual que ya se hace en escritorio.

     54 es el alto de la burbuja en el teléfono (index.html:86698, dentro del
     @media de 900) y 12 su separación de la barra; +20 de respiro. Medido en
     pantalla a 390, no deducido del `.nova-fab` de escritorio, que son 60.

     #scrollArea.scroll-area: tiene que ganarle a la regla de los marcos de
     movil/estilos.css (`.scroll-area:has(> #sec-progmeta.active)`, 32 px). */
  html.mv body.nova-on #scrollArea.scroll-area {
    padding-bottom: calc(54px + 12px + 20px) !important;
  }

  /* El @media de index.html:68482 apaga la transicion con
     `transition-duration:.01ms` sobre `.nova-panel`, especificidad (0,1,0).
     El atajo `transition` de arriba puntua (0,2,1) y se lo comeria: sin esta
     repeticion, quien pidio menos movimiento vuelve a ver la hoja deslizarse. */
  @media (prefers-reduced-motion: reduce) {
    .nova-panel { transition: none; }
  }
}

/* ── El compositor: dos filas y flotando ──────────────────────────────────
   El texto ocupa su propia fila entera y los botones caen debajo. Sin tocar
   el marcado: la fila envuelve y el textarea se lleva el 100 %. */
.nova-entrada {
  flex-wrap: wrap;
  align-items: center;
  padding: 10px 12px 8px;
  border-radius: 20px;
  row-gap: 6px;
}
.nova-entrada > textarea {
  flex: 1 0 100%;
  max-height: 140px !important;
  padding: 4px 2px !important;
  /* El mínimo táctil de 44 en un campo que crece deja un hueco muerto debajo
     del texto. Lo tocable aquí es el compositor entero, no la línea. */
  min-height: 30px !important;
}
.nova-entrada > .nova-enviar { margin-left: auto; }

/* Flota SOBRE la conversación: el pie se superpone al cuerpo y los mensajes
   pasan por debajo. `sticky` no vale — el pie es hermano del cuerpo, no va
   dentro de su scroll. */
.nova-panel { position: fixed; }
.nova-pie {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 0 12px 12px;
  background: linear-gradient(to bottom, transparent 0%,
    var(--shell-bg, #F4F7FA) 46%);
  pointer-events: none;
}
.nova-entrada, .nova-aviso { pointer-events: auto; }
/* El sitio que reserva el cuerpo lo MIDE el compositor, no un número fijo:
   crece hasta seis líneas y cualquier constante se queda corta. Lo publica
   `conecta.js` en --nova-pie-h. */
.nova-cuerpo { padding-bottom: calc(var(--nova-pie-h, 96px) + 14px) !important; }
.nova-entrada {
  background: color-mix(in srgb, var(--shell-panel, #fff) 88%, transparent);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  box-shadow: 0 2px 6px rgba(16, 24, 40, .06), 0 16px 32px -22px rgba(0, 50, 90, .45);
}
@media (max-width: 900px) {
  .nova-entrada { padding: 8px 10px; row-gap: 4px; }
  /* La capa móvil pone 44 de mínimo a todo campo, y con más especificidad que
     la regla de arriba. Aquí lo tocable es el compositor entero, no la línea:
     44 en un campo que crece deja un hueco muerto debajo del texto. */
  html.mv .nova-entrada > textarea { min-height: 30px !important; }
  .nova-pie { padding: 0 10px calc(10px + var(--mv-seguro, 0px)); }
}

/* ══════════════════════════════════════════════════════════════════════
   NOVA · rediseño del panel (01/10)
   ──────────────────────────────────────────────────────────────────────
   Del modelo «Después»: cabecera en degradado con el estado «● En línea»,
   cuerpo blanco con un resplandor azul que sube desde abajo, saludo en dos
   líneas, atajos como píldoras a lo ancho y compositor en UNA fila con el
   destello a la izquierda y el avión a la derecha.

   Va al final de este fichero porque gana por orden (ver la cabecera): no
   hay un solo !important que no nombre a qué le gana.
   ══════════════════════════════════════════════════════════════════════ */

.nova-panel {
  /* EL MISMO GRIS DEL VIDEO. Nova saluda en un video con fondo propio
     (media de sus bordes: #DEDEDC); con el panel en ese color el recuadro
     del video no se ve. El resplandor azul queda abajo, tras el compositor,
     lejos del video. */
  background-color: #DEDEDC;
  background-image: radial-gradient(120% 42% at 50% 100%,
      rgba(150, 200, 247, .55) 0%, rgba(180, 215, 248, .28) 40%, rgba(222, 222, 220, 0) 74%);
  border: 0;
  border-radius: 24px;
  box-shadow: 0 0 0 7px rgba(255, 255, 255, .34), 0 24px 60px -24px rgba(0, 50, 90, .45);
}
:root[data-theme="dark"] .nova-panel {
  background-color: #141A24;
  background-image: radial-gradient(120% 55% at 50% 100%,
      rgba(33, 113, 201, .34) 0%, rgba(33, 113, 201, .14) 40%, rgba(20, 26, 36, 0) 72%);
  box-shadow: 0 0 0 7px rgba(255, 255, 255, .06), 0 24px 60px -24px rgba(0, 0, 0, .7);
}

/* ── Cabecera ── */
.nova-cab {
  min-height: 72px;                  /* un poco más alta: el retrato en círculo respira */
  padding: 13px 14px 13px 16px;
  gap: 12px;
  background: linear-gradient(100deg, #2B83E3 0%, #2171C9 55%, #1D66BC 100%);
}
/* El busto de Nova dentro de un círculo: la cara y el casco arriba, el corte
   del pecho lo hace el propio círculo. Fondo claro para que el casco blanco
   no se pierda contra el azul de la cabecera. */
.nova-cab-av {
  width: 46px; height: 46px;
  align-self: center;
  margin: 0;
  border: 2px solid rgba(255, 255, 255, .75);
  border-radius: 50%;
  background: #DCEBFA;
  object-fit: cover; object-position: 50% 12%;
}
.nova-cab-txt strong { font-size: 14px; letter-spacing: .4px; }
/* La sección se sigue anunciando, pero no se pinta: a la vista va el estado. */
#novaCabSub {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap;
}
/* `.nova-cab-txt span` (index.html) pone cada span en bloque, en mayúsculas y
   espaciado: con eso el estado salía en dos líneas y sin el punto. Estas dos
   reglas llevan una clase más para ganarle. */
.nova-cab-txt .nova-estado {
  display: flex; align-items: center; gap: 5px;
  margin-top: 2px;
  font-size: 11.5px; line-height: 1.3; color: rgba(255, 255, 255, .92);
  text-transform: none; letter-spacing: 0;
  white-space: nowrap; overflow: visible;
}
.nova-cab-txt .nova-estado span {
  display: inline; font-size: inherit; color: inherit;
  text-transform: none; letter-spacing: 0; overflow: visible;
}
.nova-estado i {
  width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: #34D27B;
  box-shadow: 0 0 0 2px rgba(52, 210, 123, .28);
}
.nova-estado-txt::before { content: '· En línea'; }
/* Mientras el servicio no contesta, el pie lleva el aviso de vista previa:
   la cabecera no puede decir «En línea» encima de eso. */
.nova-panel:has(.nova-aviso) .nova-estado i { background: #F5B942; box-shadow: 0 0 0 2px rgba(245, 185, 66, .28); }
.nova-panel:has(.nova-aviso) .nova-estado-txt::before { content: '· Vista previa'; }
.nova-cab-x {
  width: 34px; height: 34px;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .22);
  border: 1px solid rgba(255, 255, 255, .5);
  /* La ✕ dibujada, no el carácter: cada fuente lo pinta distinto (salía una
     «X» de letra). El texto del botón se apaga y el trazo va en ::before. */
  font-size: 0; color: #fff;
}
.nova-cab-x::before {
  content: '';
  width: 12px; height: 12px;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
}
.nova-cab-x:hover { background: rgba(255, 255, 255, .36); }

/* ── Estado vacío ── */
.nova-vacio { padding: 10px 2px; }
/* El video: alto fijo y ancho libre, para que NUNCA se deforme (la imagen de
   antes llevaba el ancho de la regla móvil y un alto mío: salía estirada).
   Los bordes se funden con una máscara: el gris del video varía de #D8 a #E3
   hacia las esquinas y un corte seco se notaría; abajo se desvanece porque
   el encuadre corta a Nova por la cintura. */
.nova-video {
  display: block;
  height: 200px; width: auto; max-width: 100%;
  margin: 0 auto 6px;
  object-fit: contain;
  pointer-events: none;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 14%, #000 86%, transparent 100%),
                      linear-gradient(to bottom, transparent 0, #000 8%, #000 80%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0, #000 14%, #000 86%, transparent 100%),
                      linear-gradient(to bottom, transparent 0, #000 8%, #000 80%, transparent 100%);
  -webkit-mask-composite: source-in; mask-composite: intersect;
}
.nova-vacio img { display: none; }
:root[data-theme="dark"] .nova-video { display: none; }
:root[data-theme="dark"] .nova-vacio img { display: block; width: auto; height: 150px; margin: 0 auto 14px; }
.nova-saludo {
  margin: 0;
  font-size: 18px; font-weight: 700; line-height: 1.3;
  color: #2278DA;                    /* sobre el gris, un punto más oscuro para que se lea */
}
.nova-ayuda {
  margin: 2px 0 20px;
  font-size: 14px; line-height: 1.4;
  color: #6B7482;
}
/* Dónde está la persona: Nova lo sabe y lo usa, pero el diseño no lo pinta. */
.nova-donde {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap; margin: 0;
}
.nova-chips { flex-direction: column; align-items: center; gap: 10px; }
.nova-chip {
  width: min(100%, 270px);
  min-height: 40px;
  padding: 9px 16px;
  font-size: 12.5px;
  color: #7C8798;
  background: #FFFFFF;
  border: 1px solid #C9DDF2;
  box-shadow: none;
}
.nova-chip:hover, .nova-chip:focus-visible {
  background: #0B7BD3; border-color: #0B7BD3; color: #FFFFFF;
  box-shadow: 0 6px 16px -8px rgba(11, 123, 211, .7);
}
:root[data-theme="dark"] .nova-chip { background: #1B2330; border-color: #2E3D52; color: #B4C0D0; }
:root[data-theme="dark"] .nova-saludo { color: #6FB5F3; }

/* ── Compositor: una fila ── */
.nova-entrada {
  position: relative;
  flex-wrap: nowrap;
  align-items: center;
  gap: 6px;
  padding: 6px 6px 6px 40px;
  border-radius: 999px;
  border: 1px solid #C6DDF5;
  background: #EAF3FC;
  box-shadow: 0 0 0 4px rgba(198, 221, 245, .35);
  backdrop-filter: none; -webkit-backdrop-filter: none;
}
.nova-entrada:focus-within {
  border-color: #2B83E3;
  box-shadow: 0 0 0 4px rgba(43, 131, 227, .18);
}
/* El destello: una estrella de cuatro puntas, dibujada con máscara. */
.nova-entrada::before {
  content: '';
  position: absolute; left: 14px; top: 50%;
  width: 18px; height: 18px; transform: translateY(-50%);
  background: #1D6FD0;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c.6 5.600 4.400 9.400 10 10-5.600.6-9.400 4.400-10 10-.6-5.600-4.400-9.400-10-10 5.600-.6 9.400-4.400 10-10z'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c.6 5.600 4.400 9.400 10 10-5.600.6-9.400 4.400-10 10-.6-5.600-4.400-9.400-10-10 5.600-.6 9.400-4.400 10-10z'/%3E%3C/svg%3E") center / contain no-repeat;
  pointer-events: none;
}
.nova-entrada > textarea {
  flex: 1 1 auto;
  min-width: 0;
  padding: 6px 2px !important;       /* le gana al relleno de dos filas de arriba */
  font-size: 13px;
}
.nova-entrada > textarea::placeholder { color: #8FA0B5; }
.nova-entrada > .nova-enviar { margin-left: 0; }
/* ENVIAR Y LA ONDA SON EL MISMO BOTÓN A LA VISTA: mismo círculo, mismo
   tamaño; solo cambia el icono (y lo que hace al pulsar). Antes enviar
   llevaba 32 de ancho y el mínimo táctil le daba 44 de alto: al escribir, el
   círculo pasaba a un óvalo recortado. Los cuatro lados se fijan juntos. */
.nova-entrada > .nova-enviar,
.nova-entrada > .nv-conversar {
  flex: none;
  width: 36px; height: 36px; min-width: 36px; min-height: 36px;
  padding: 0; border-radius: 50%;
}
.nova-enviar svg {
  width: 15px; height: 15px; fill: none; stroke: currentColor;
  stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
}
.nova-pie {
  padding: 0 14px 14px;
  background: none;                  /* el resplandor del panel ya está detrás */
}
:root[data-theme="dark"] .nova-entrada { background: #1B2636; border-color: #2E435E; box-shadow: 0 0 0 4px rgba(46, 67, 94, .35); }

/* En voz la cabecera pasa al fondo claro (conversar.js cambia el
   background-color): el degradado es una imagen y se quedaba encima, con el
   texto ya en oscuro sobre azul. */
.nova-panel.nova-voz .nova-cab { background-image: none; }
.nova-panel.nova-voz .nova-estado i { box-shadow: none; }

@media (max-width: 900px) {
  .nova-panel { border-radius: 24px 24px 0 0; box-shadow: 0 -10px 40px rgba(16, 24, 40, .22); }
  /* La hoja móvil de arriba pinta los atajos como filas a la izquierda;
     el diseño los lleva en píldora y centrados también aquí. */
  .nova-chips .nova-chip { border-radius: 999px; text-align: center; justify-content: center; }
  /* El bloque vuelve al centro del hueco: pegado abajo dejaba media pantalla
     vacía bajo la cabecera. */
  .nova-vacio { margin: auto 0; padding: 6px 0; }
  .nova-video { height: min(30dvh, 240px); }
  .nova-entrada > .nova-enviar,
  .nova-entrada > .nv-conversar { width: 44px; height: 44px; min-width: 44px; min-height: 44px; }
  .nova-entrada { padding: 5px 5px 5px 40px; }
  .nova-chip { min-height: 44px; font-size: 14px; width: min(100%, 320px); }
  .nova-saludo { font-size: 20px; }
  .nova-ayuda { font-size: 15px; }
  .nova-estado { font-size: 12.5px; }
  .nova-cab-x { width: 44px; height: 44px; }
  .nova-cab-av { width: 48px; height: 48px; }
}

/* ═══════════════════════════════════════════════════════════════════
   NOVA · archivos adjuntos (01/10) — lo pinta asistente/adjuntar.js
   ═══════════════════════════════════════════════════════════════════ */
/* El clip ocupa el sitio del destello: mismo hueco, ahora sirve para algo. */
.nova-entrada:has(> .nv-clip) { padding-left: 6px; }
.nova-entrada:has(> .nv-clip)::before { display: none; }
.nv-clip {
  flex: none;
  width: 36px; height: 36px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%;
  background: transparent; color: #1D6FD0; cursor: pointer;
  transition: background .15s;
}
.nv-clip:hover, .nv-clip:focus-visible { background: rgba(29, 111, 208, .12); }
.nv-clip svg, .nv-adj-op svg {
  width: 19px; height: 19px; fill: none; stroke: currentColor;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
}

/* El menú. Sale del clip hacia arriba; `--nv-x/--nv-y` los mide adjuntar.js. */
.nv-adj-menu {
  position: fixed; inset: auto auto var(--nv-y, 80px) var(--nv-x, 16px);
  margin: 0; padding: 6px;
  width: 316px; max-width: calc(100vw - 24px);
  border: 1px solid #D5E3F3; border-radius: 16px;
  background: #FFFFFF; color: #16243A;
  box-shadow: 0 18px 44px -16px rgba(16, 40, 80, .38), 0 2px 6px rgba(16, 40, 80, .08);
}
.nv-adj-menu::backdrop { background: transparent; }
.nv-adj-op {
  display: flex; align-items: center; gap: 12px;
  width: 100%; padding: 9px 10px;
  border: 0; border-radius: 11px; background: none;
  font: inherit; color: inherit; text-align: left; cursor: pointer;
}
.nv-adj-op:hover, .nv-adj-op:focus-visible { background: #EAF3FC; }
.nv-adj-op svg {
  flex: none; width: 34px; height: 34px; padding: 7px;
  border-radius: 10px; background: #EAF3FC; color: #1D6FD0;
}
.nv-adj-op strong { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.3; }
.nv-adj-op small { display: block; font-size: 11.5px; line-height: 1.35; color: #6B7482; }

/* Las fichas van DENTRO de la cápsula, en su primera fila. Con archivos la
   cápsula deja de ser una píldora: pasa a tarjeta de dos filas. */
.nova-entrada:has(> .nv-adjuntos:not([hidden])) {
  flex-wrap: wrap; border-radius: 22px; padding-top: 8px;
}
.nv-adjuntos {
  flex: 0 0 100%;
  display: flex; gap: 8px; flex-wrap: wrap; align-items: flex-end;
  max-height: 196px; overflow-y: auto;
  margin: 0 0 2px; padding: 2px 2px 4px;
}
.nv-adjuntos[hidden] { display: none; }
.nv-adj {
  display: flex; align-items: center; gap: 8px;
  max-width: 100%; padding: 6px 6px 6px 7px;
  border: 1px solid #C9DDF5; border-radius: 12px;
  background: #FFFFFF;
  box-shadow: 0 1px 2px rgba(16, 40, 80, .05);
}
.nv-adj-tipo {
  flex: none; width: 30px; height: 30px; border-radius: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 9px; font-weight: 700; letter-spacing: .02em; color: #fff;
  background: #7A5AD9;
}
.nv-adj-tipo.t-pdf { background: #D9463B; }
.nv-adj-tipo.t-doc { background: #2B6CD4; }
.nv-adj-tipo.t-xls { background: #1E8E4E; }
.nv-adj-tipo.t-ppt { background: #D8632A; }
.nv-adj-txt { min-width: 0; display: grid; }
.nv-adj-txt strong {
  max-width: 168px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 12.5px; font-weight: 600; line-height: 1.3; color: #16243A;
}
.nv-adj-txt small { font-size: 11px; line-height: 1.35; color: #6B7482; }
.nv-adj-x {
  flex: none; width: 24px; height: 24px; padding: 0;
  border: 0; border-radius: 50%; background: none; color: #7C8798; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.nv-adj-x:hover, .nv-adj-x:focus-visible { background: #EEF2F7; color: #16243A; }
.nv-adj-x::before {
  content: ''; width: 9px; height: 9px; background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
}
/* Leyéndose: el cuadro del tipo late. */
.nv-adj.cargando .nv-adj-tipo { animation: nv-adj-late 1.1s ease-in-out infinite; }
.nv-adj.cargando small { color: #1D6FD0; }
@keyframes nv-adj-late { 50% { opacity: .45; } }
.nv-adj.nv-toque { animation: nv-adj-toque .45s; }
@keyframes nv-adj-toque { 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }
/* Rechazada: ámbar, y el motivo entero. */
.nv-adj.no { align-items: flex-start; width: 100%; background: #FFF8EC; border-color: #F0DCB4; }
.nv-adj.no .nv-adj-tipo { background: #C9860F; }
.nv-adj.no .nv-adj-txt { flex: 1; }
.nv-adj.no .nv-adj-txt strong { max-width: none; }
.nv-adj.no small { color: #8A5B12; white-space: normal; }
@media (prefers-reduced-motion: reduce) {
  .nv-adj.cargando .nv-adj-tipo, .nv-adj.nv-toque { animation: none; }
}

/* Lo enviado: encima de la burbuja de quien pregunta, a su derecha. */
.nova-msg.nv-con-adj { flex-direction: column; align-items: flex-end; gap: 6px; }
.nv-minis { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: flex-end; gap: 6px; max-width: 86%; }

/* LA TEJA. El mismo cuadrado en el campo y sobre la burbuja: una imagen se
   ve a sí misma; un documento lleva su nombre arriba y su formato abajo. */
.nv-teja {
  position: relative; flex: none;
  width: 92px; height: 92px; padding: 9px;
  display: flex; flex-direction: column; justify-content: space-between; align-items: flex-start; gap: 4px;
  border: 1px solid #C9DDF5; border-radius: 14px;
  background: #FFFFFF; color: #16243A;
  font: inherit; text-align: left; overflow: hidden;
  box-shadow: 0 1px 2px rgba(16, 40, 80, .05);
}
button.nv-teja { cursor: pointer; }
button.nv-teja:hover, button.nv-teja:focus-visible { border-color: #2B83E3; }
.nv-teja.img { padding: 0; }
.nv-teja.img img { width: 100%; height: 100%; object-fit: cover; display: block; background: #E6EDF6; }
.nv-teja-nom {
  font-size: 11.5px; font-weight: 600; line-height: 1.3;
  overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.nv-teja-ext {
  padding: 2px 6px; border-radius: 6px;
  font-size: 9.5px; font-weight: 700; letter-spacing: .03em; color: #fff;
  background: #7A5AD9;
}
.nv-teja-ext.t-pdf { background: #D9463B; }
.nv-teja-ext.t-doc { background: #2B6CD4; }
.nv-teja-ext.t-xls { background: #1E8E4E; }
.nv-teja-ext.t-ppt { background: #D8632A; }
/* En el campo: la ✕ en la esquina y, mientras se lee, en qué va. */
.nv-teja .nv-adj-x {
  position: absolute; top: 4px; right: 4px; width: 22px; height: 22px;
  background: rgba(20, 28, 42, .62); color: #fff;
}
.nv-teja .nv-adj-x:hover, .nv-teja .nv-adj-x:focus-visible { background: rgba(20, 28, 42, .9); color: #fff; }
.nv-teja-est {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 3px 6px; text-align: center;
  font-size: 10px; font-weight: 600; color: #fff;
  background: rgba(29, 111, 208, .92);
  animation: nv-adj-late 1.1s ease-in-out infinite;
}
:root[data-theme="dark"] .nv-teja { background: #1B2330; border-color: #2E3D52; color: #E6EDF6; }
@media (prefers-reduced-motion: reduce) { .nv-teja-est { animation: none; } }

/* El visor de imágenes. */
.nv-visor {
  padding: 0; border: 0; background: none;
  max-width: 100vw; max-height: 100dvh; width: 100vw; height: 100dvh;
  display: none; align-items: center; justify-content: center;
}
.nv-visor[open] { display: flex; }
.nv-visor::backdrop { background: rgba(10, 16, 28, .88); }
.nv-visor img {
  max-width: calc(100vw - 32px); max-height: calc(100dvh - 32px);
  border-radius: 10px; object-fit: contain;
  box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
}
.nv-visor-x {
  position: fixed; top: max(14px, env(safe-area-inset-top)); right: 14px;
  width: 44px; height: 44px; padding: 0;
  border: 1px solid rgba(255, 255, 255, .45); border-radius: 50%;
  background: rgba(20, 28, 42, .7); color: #fff; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.nv-visor-x:hover, .nv-visor-x:focus-visible { background: rgba(40, 52, 72, .9); }
.nv-visor-x::before {
  content: ''; width: 14px; height: 14px; background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M1.5 1.5l11 11M12.5 1.5l-11 11' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* Soltar un archivo sobre el panel. */
.nova-panel.nv-soltando::after {
  content: 'Suelta el archivo para adjuntarlo';
  position: absolute; inset: 8px; z-index: 5;
  display: flex; align-items: center; justify-content: center;
  border: 2px dashed #2B83E3; border-radius: 18px;
  background: rgba(234, 243, 252, .94);
  font-size: 14px; font-weight: 600; color: #1D6FD0;
  pointer-events: none;
}

:root[data-theme="dark"] .nv-adj-menu { background: #1B2330; border-color: #2E3D52; color: #E6EDF6; }
:root[data-theme="dark"] .nv-adj-op:hover, :root[data-theme="dark"] .nv-adj-op:focus-visible,
:root[data-theme="dark"] .nv-adj-op svg { background: #243248; }
:root[data-theme="dark"] .nv-adj-op small, :root[data-theme="dark"] .nv-adj-txt small { color: #9FB0C6; }
:root[data-theme="dark"] .nv-adj, :root[data-theme="dark"] .nv-mini { background: #1B2330; border-color: #2E3D52; }
:root[data-theme="dark"] .nv-adj-txt strong { color: #E6EDF6; }
:root[data-theme="dark"] .nv-clip { color: #6FB5F3; }
:root[data-theme="dark"] .nv-adj.no { background: #33290F; border-color: #5E4A17; }
:root[data-theme="dark"] .nv-adj.no small { color: #E8C77A; }
:root[data-theme="dark"] .nova-panel.nv-soltando::after { background: rgba(27, 38, 54, .95); color: #6FB5F3; }

@media (max-width: 900px) {
  .nv-clip { width: 44px; height: 44px; }
  .nova-entrada:has(> .nv-clip) { padding-left: 5px; }
  /* En el teléfono el menú es una hoja que sube desde abajo. */
  .nv-adj-menu {
    inset: auto 0 0 0; width: 100%; max-width: none;
    padding: 10px 10px calc(12px + env(safe-area-inset-bottom));
    border: 0; border-radius: 22px 22px 0 0;
    box-shadow: 0 -12px 40px rgba(16, 24, 40, .25);
  }
  .nv-adj-menu::backdrop { background: rgba(16, 24, 40, .38); }
  .nv-adj-op { padding: 12px 10px; }
  .nv-adj-op strong { font-size: 15px; }
  .nv-adj-op small { font-size: 12.5px; }
  .nv-adj-x { width: 34px; height: 34px; }
  .nv-adj-txt strong { font-size: 13.5px; max-width: 190px; }
  .nv-adj-txt small { font-size: 12px; }
}
/* La capa móvil da 44 de alto mínimo a todo botón: la ✕ de una ficha salía
   ovalada. Su zona táctil ya la da la ficha. */
#novaPanel .nv-adj .nv-adj-x { min-width: 0; min-height: 0; }

/* ═══════════════════════════════════════════════════════════════════
   NOVA · historial de conversaciones (01/10) — asistente/historial.js
   ═══════════════════════════════════════════════════════════════════ */
/* Cabecera: historial y nueva conversación, hermanos de la ✕. */
.nv-cab-b {
  flex: none; width: 34px; height: 34px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid rgba(255, 255, 255, .5); border-radius: 50%;
  background: rgba(255, 255, 255, .22); color: #fff; cursor: pointer;
  transition: background .15s;
}
.nv-cab-b:hover, .nv-cab-b:focus-visible, .nv-cab-b[aria-pressed="true"] { background: rgba(255, 255, 255, .42); }
.nv-cab-b svg, .nv-hist svg {
  width: 17px; height: 17px; fill: none; stroke: currentColor;
  stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round;
}
.nova-panel.nova-voz .nv-cab-b { opacity: 0; pointer-events: none; }
/* El título de la conversación ocupa la línea de estado, tras el punto. */
.nova-panel.nv-con-titulo .nova-cab-txt .nova-estado { overflow: hidden; }
.nova-panel.nv-con-titulo .nova-cab-txt .nova-estado-rol {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis;
}
.nova-panel.nv-con-titulo .nova-estado-txt { display: none; }

/* El historial es un estado del panel: ocupa el sitio del chat. */
.nv-hist { display: none; flex: 1; min-height: 0; flex-direction: column; gap: 8px; padding: 12px 14px 14px; }
.nova-panel.nv-en-historial .nv-hist { display: flex; }
.nova-panel.nv-en-historial .nova-cuerpo,
.nova-panel.nv-en-historial .nova-pie { display: none; }

.nv-hist-buscar {
  display: flex; align-items: center; gap: 8px;
  padding: 0 12px; height: 40px; flex: none;
  border: 1px solid #C6DDF5; border-radius: 999px;
  background: #FFFFFF; color: #6B7482;
}
.nv-hist-buscar:focus-within { border-color: #2B83E3; box-shadow: 0 0 0 4px rgba(43, 131, 227, .18); }
.nv-hist-buscar input {
  flex: 1; min-width: 0; border: 0; outline: 0; background: none;
  font: inherit; font-size: 13px; color: #16243A;
}
.nv-hist-buscar input:focus-visible { box-shadow: none !important; }
.nv-hist-nueva {
  display: flex; align-items: center; gap: 10px; flex: none;
  padding: 9px 12px; border: 0; border-radius: 12px;
  background: none; color: #1D6FD0; font: inherit; font-size: 13.5px; font-weight: 600;
  text-align: left; cursor: pointer;
}
.nv-hist-nueva:hover, .nv-hist-nueva:focus-visible { background: rgba(255, 255, 255, .7); }
.nv-hist-rotulo {
  margin: 4px 12px 0; flex: none;
  font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: #7C8798;
}
.nv-hist-lista { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 4px; padding: 2px; }

.nv-hist-fila {
  position: relative; display: flex; align-items: center; gap: 2px; flex: none;
  border: 1px solid transparent; border-radius: 12px; background: rgba(255, 255, 255, .55);
}
.nv-hist-fila:hover, .nv-hist-fila:focus-within { background: #FFFFFF; }
.nv-hist-fila.abierta { background: #FFFFFF; border-color: #9CC6F2; }
.nv-hist-abre {
  flex: 1; min-width: 0; display: grid; gap: 2px;
  padding: 10px 4px 10px 12px; border: 0; background: none;
  font: inherit; color: #16243A; text-align: left; cursor: pointer; border-radius: 12px;
}
.nv-hist-linea { display: flex; align-items: center; gap: 6px; min-width: 0; }
.nv-hist-linea strong {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 13.5px; font-weight: 600;
}
.nv-hist-linea time { flex: none; font-size: 11.5px; color: #8793A5; }
.nv-hist-estrella { flex: none; display: inline-flex; color: #E0A21A; }
.nv-hist-estrella svg { width: 14px; height: 14px; fill: currentColor; }
.nv-hist-abre small {
  display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 12px; line-height: 1.4; color: #6B7482;
}
.nv-hallado { background: rgba(242, 201, 76, .55); color: inherit; border-radius: 3px; padding: 0 1px; }
.nv-hist-puntos {
  flex: none; width: 34px; height: 34px; margin-right: 4px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%; background: none; color: #6B7482; cursor: pointer;
}
.nv-hist-puntos:hover, .nv-hist-puntos:focus-visible { background: #EAF3FC; color: #1D6FD0; }
.nv-hist-puntos svg { fill: currentColor; stroke: none; }

/* El menú de los tres puntos, colgado de su fila. */
.nv-hist-menu {
  position: absolute; z-index: 3; right: 6px; top: calc(100% - 4px);
  min-width: 196px; padding: 5px;
  border: 1px solid #D5E3F3; border-radius: 14px; background: #FFFFFF;
  box-shadow: 0 18px 44px -16px rgba(16, 40, 80, .38), 0 2px 6px rgba(16, 40, 80, .08);
}
.nv-hist-menu.arriba { top: auto; bottom: calc(100% - 4px); }
.nv-hist-op {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 9px 10px; border: 0; border-radius: 9px; background: none;
  font: inherit; font-size: 13px; color: #16243A; text-align: left; cursor: pointer;
}
.nv-hist-op:hover, .nv-hist-op:focus-visible { background: #EAF3FC; }
.nv-hist-op.peligro { color: #C0392B; }
.nv-hist-op.peligro:hover, .nv-hist-op.peligro:focus-visible { background: #FDECEA; }

/* Renombrar y confirmar, en la propia fila. */
.nv-hist-fila.editando .nv-hist-abre, .nv-hist-fila.editando .nv-hist-puntos { display: none; }
.nv-hist-renombrar {
  flex: 1; min-width: 0; margin: 5px; padding: 8px 10px;
  border: 1px solid #2B83E3; border-radius: 9px; background: #FFFFFF;
  font: inherit; font-size: 13.5px; font-weight: 600; color: #16243A; outline: 0;
}
.nv-hist-fila.confirmando { gap: 6px; padding: 7px 8px 7px 12px; background: #FDF3F2; border-color: #F2C9C4; }
.nv-hist-pregunta {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 13px; color: #7A2A22;
}
.nv-hist-si, .nv-hist-no {
  flex: none; padding: 7px 12px; border-radius: 999px;
  font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer;
}
.nv-hist-no { border: 1px solid #D9C2BF; background: #FFFFFF; color: #5C4441; }
.nv-hist-si { border: 1px solid #C0392B; background: #C0392B; color: #FFFFFF; }
.nv-hist-si:disabled { opacity: .6; }

.nv-hist-nota { margin: 18px 12px; text-align: center; font-size: 13px; line-height: 1.5; color: #6B7482; }
.nv-hist-link, .nv-hist-mas {
  border: 0; background: none; padding: 0; font: inherit; font-weight: 600; color: #1D6FD0; cursor: pointer;
}
.nv-hist-mas { flex: none; padding: 10px; font-size: 13px; }
.nv-hist-hueso {
  flex: none; height: 42px; border-radius: 12px;
  background: linear-gradient(90deg, rgba(255,255,255,.45) 25%, rgba(255,255,255,.85) 37%, rgba(255,255,255,.45) 63%);
  background-size: 400% 100%; animation: nv-hueso 1.3s ease infinite;
}
@keyframes nv-hueso { from { background-position: 100% 0; } to { background-position: 0 0; } }
@media (prefers-reduced-motion: reduce) { .nv-hist-hueso { animation: none; } }

:root[data-theme="dark"] .nv-hist-buscar, :root[data-theme="dark"] .nv-hist-menu,
:root[data-theme="dark"] .nv-hist-renombrar { background: #1B2330; border-color: #2E3D52; color: #E6EDF6; }
:root[data-theme="dark"] .nv-hist-buscar input, :root[data-theme="dark"] .nv-hist-abre,
:root[data-theme="dark"] .nv-hist-op { color: #E6EDF6; }
:root[data-theme="dark"] .nv-hist-fila { background: rgba(27, 35, 48, .6); }
:root[data-theme="dark"] .nv-hist-fila:hover, :root[data-theme="dark"] .nv-hist-fila:focus-within,
:root[data-theme="dark"] .nv-hist-fila.abierta { background: #1B2330; }
:root[data-theme="dark"] .nv-hist-op:hover, :root[data-theme="dark"] .nv-hist-op:focus-visible,
:root[data-theme="dark"] .nv-hist-puntos:hover { background: #243248; }
:root[data-theme="dark"] .nv-hist-abre small, :root[data-theme="dark"] .nv-hist-nota { color: #9FB0C6; }
:root[data-theme="dark"] .nv-hist-fila.confirmando { background: #3A1F1C; border-color: #6B332C; }
:root[data-theme="dark"] .nv-hist-pregunta { color: #F2B8B0; }
:root[data-theme="dark"] .nv-hist-nueva:hover { background: #243248; }

@media (max-width: 900px) {
  .nv-cab-b { width: 40px; height: 40px; }
  .nv-hist-buscar { height: 46px; }
  .nv-hist-buscar input { font-size: 16px; }      /* menos de 16 y el iPhone hace zoom */
  .nv-hist-nueva { padding: 12px; font-size: 15px; }
  .nv-hist-abre { padding: 13px 4px 13px 12px; }
  .nv-hist-linea strong { font-size: 15px; }
  .nv-hist-linea time { font-size: 12.5px; }
  .nv-hist-abre small { font-size: 13px; }
  .nv-hist-puntos { width: 44px; height: 44px; margin-right: 2px; }
  .nv-hist-op { padding: 12px 10px; font-size: 15px; }
  .nv-hist-si, .nv-hist-no { padding: 10px 14px; font-size: 14px; }
  .nv-hist-renombrar { font-size: 16px; }
}
/* La capa móvil da 44 de alto mínimo a todo botón. */
#novaPanel .nv-hist-abre, #novaPanel .nv-hist-op, #novaPanel .nv-hist-link { min-height: 0; }
