/*
 * NUEVAUNO UI — https://branding.nuevauno.com/kit/nuevauno-ui.css
 *
 * EL CSS único de las pantallas de NUEVAUNO OS. Una app lo importa con
 *   <link rel="stylesheet" href="https://branding.nuevauno.com/kit/nuevauno-ui.css">
 * y queda con el estilo: Urbanist 400 (nunca negrita), etiquetas de sistema en Ubuntu Mono,
 * radio 0, un solo acento #FE4A23, superficies blancas sobre el fondo de puntos.
 *
 * Patrones, anatomía, reglas y HTML exacto: https://branding.nuevauno.com/kit/ y /kit/kit.json.
 * Guía: /UI.md · Tokens: /ui-tokens.json · Logo e iconos: /brand-spec.json, /icons/manifest.json.
 *
 * Origen: lo que ya funciona en NUEVAUNO OS (shell, Inicio, Módulos instalados, chat y panel de
 * Kōdo) y en la plataforma 20 (menú lateral, Inicio, fondo de puntos). Clases nu-* en español,
 * igual que en el OS, para que migrar sea copiar. Modo oscuro: atributo data-mode="dark" en un
 * ancestro, o el sistema en oscuro salvo data-mode="light".
 */

@font-face {
  font-family: "Urbanist";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("https://branding.nuevauno.com/fonts/urbanist-var.woff2") format("woff2");
}

@font-face {
  font-family: "Ubuntu Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("https://branding.nuevauno.com/fonts/ubuntu-mono-400.woff2") format("woff2");
}

/* ── Tokens ────────────────────────────────────────────────────────────── */

:root {
  --nu-acento: #fe4a23;
  --nu-acento-hover: #e53d18;
  --nu-tinta: #11183a;
  --nu-tinta-profunda: #0a0e27;
  --nu-gris: #6b7080;
  --nu-tenue: #9a9ca8;
  --nu-superficie: #ffffff;
  --nu-linea: #e8e6e0;
  --nu-linea-suave: #efede8;
  --nu-hover: #f7f6f3;
  --nu-hover-calido: #fff4f0;
  --nu-activo: #fff1ec;
  --nu-tecla: #f7f6f3;
  --nu-punto-vacio: #e8e6e0;
  --nu-persona: #11183a;
  --nu-persona-texto: #ffffff;
  --nu-en-linea: #2f9e5b;
  /* Fondo del contenido (plataforma 20, nuevauno_brand background.scss): gris muy claro con una
     grilla de puntos cada 18 px. Aprobado por el founder el 2026-10-02. */
  --nu-fondo: #f8f9fa;
  --nu-fondo-punto: #e1e5e8;
  --nu-sombra-flotante: 0 12px 32px rgba(17, 24, 58, 0.08);
  --nu-letra: "Urbanist", system-ui, -apple-system, sans-serif;
  --nu-mono: "Ubuntu Mono", ui-monospace, monospace;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-mode="light"]) {
    --nu-tinta: #f1f3f8;
    --nu-gris: #9aa3b5;
    --nu-tenue: #7d8499;
    --nu-superficie: #151a33;
    --nu-linea: rgba(255, 255, 255, 0.1);
    --nu-linea-suave: rgba(255, 255, 255, 0.06);
    --nu-hover: rgba(255, 255, 255, 0.06);
    --nu-hover-calido: rgba(255, 255, 255, 0.06);
    --nu-activo: rgba(254, 74, 35, 0.14);
    --nu-tecla: rgba(255, 255, 255, 0.06);
    --nu-punto-vacio: rgba(255, 255, 255, 0.12);
    --nu-persona: #f4f2ec;
    --nu-persona-texto: #11183a;
    --nu-fondo: #0e1226;
    --nu-fondo-punto: rgba(255, 255, 255, 0.07);
    --nu-sombra-flotante: 0 12px 32px rgba(0, 0, 0, 0.4);
  }
}

[data-mode="dark"] {
  --nu-tinta: #f1f3f8;
  --nu-gris: #9aa3b5;
  --nu-tenue: #7d8499;
  --nu-superficie: #151a33;
  --nu-linea: rgba(255, 255, 255, 0.1);
  --nu-linea-suave: rgba(255, 255, 255, 0.06);
  --nu-hover: rgba(255, 255, 255, 0.06);
  --nu-hover-calido: rgba(255, 255, 255, 0.06);
  --nu-activo: rgba(254, 74, 35, 0.14);
  --nu-tecla: rgba(255, 255, 255, 0.06);
  --nu-punto-vacio: rgba(255, 255, 255, 0.12);
  --nu-persona: #f4f2ec;
  --nu-persona-texto: #11183a;
  --nu-fondo: #0e1226;
  --nu-fondo-punto: rgba(255, 255, 255, 0.07);
  --nu-sombra-flotante: 0 12px 32px rgba(0, 0, 0, 0.4);
}

/* ── Base: la raíz de una app NUEVAUNO ─────────────────────────────────── */

.nu-ui,
.nu-ui * {
  box-sizing: border-box;
  font-weight: 400;
}

.nu-ui {
  margin: 0;
  background: var(--nu-fondo);
  font-family: var(--nu-letra);
  font-size: 15px;
  line-height: 1.45;
  color: var(--nu-tinta);
  -webkit-font-smoothing: antialiased;
}

.nu-ui button,
.nu-ui input,
.nu-ui select,
.nu-ui textarea {
  font: inherit;
  font-weight: 400;
  color: inherit;
  border-radius: 0;
}

/* Lo oculto se oculta aunque su clase diga display: flex (menús del selector y desplegables). */
.nu-ui [hidden] {
  display: none !important;
}

.nu-ui b,
.nu-ui strong,
.nu-ui h1,
.nu-ui h2,
.nu-ui h3,
.nu-ui h4,
.nu-ui th {
  font-weight: 400;
}

/* ═════ Del shell de NUEVAUNO OS: iconos, menú lateral, miga, Inicio ═════ */

/* Iconos del kit en línea: el trazo toma el color del texto. 20 px salvo que el contexto diga otra cosa. */
.nu-icono {
  display: inline-flex;
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
}

.nu-icono--chico { width: 16px; height: 16px; }
.nu-icono--grande { width: 32px; height: 32px; }

.nu-icono svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* Etiqueta de sistema. */
.nu-etiqueta {
  font-family: var(--nu-mono);
  font-size: 11px;
  line-height: 14px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-gris);
}

/* Etiqueta de un bloque del Inicio ("TUS APPS · 3", "ACTIVIDAD"). */
.nu-etiqueta--bloque {
  font-size: 12px;
}

/* Enlace de texto naranja ("Configurar", "Ver toda la actividad"). */
.nu-enlace {
  display: inline-flex;
  min-height: 24px;
  align-items: center;
  border: 0;
  padding: 0;
  background: none;
  font-size: 14px;
  color: var(--nu-acento);
  text-align: left;
  cursor: pointer;
}

.nu-enlace:hover {
  color: var(--nu-acento-hover);
  text-decoration: underline;
}

/* El cursor naranja del logo: uno solo visible a la vez. */
.nu-cursor {
  display: inline-block;
  width: 0.42em;
  height: 0.78em;
  margin-left: 0.14em;
  background: var(--nu-acento);
  vertical-align: -0.04em;
  animation: nu-parpadeo 1.05s steps(1, end) infinite;
}

@keyframes nu-parpadeo {
  50% {
    opacity: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .nu-cursor,
  .nu-kodo__cursor {
    animation: none;
  }
}

/* ── Menú lateral (theme.scss: .nu_sb) ────────────────────────────────────── */

.nu-lateral {
  position: relative;
  z-index: 10;
  display: flex;
  height: 100%;
  width: 256px;
  flex-shrink: 0;
  flex-direction: column;
  gap: 14px;
  border-right: 1px solid var(--nu-linea);
  padding: 18px 14px 14px;
  background: var(--nu-superficie);
  color: var(--nu-tinta);
  transition: width 0.2s ease;
}

.nu-lateral[data-recogido="true"] {
  width: 72px;
  padding-right: 12px;
  padding-left: 12px;
}

/* Logo grande y claro: 30 px abierto y 28 px el isotipo recogido. */
.nu-lateral__cabeza {
  display: flex;
  min-height: 44px;
  flex: 0 0 auto;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 0 4px;
}

/* Recogido (72 px): el isotipo arriba y el botón debajo, centrados. */
.nu-lateral[data-recogido="true"] .nu-lateral__cabeza {
  flex-direction: column;
  justify-content: center;
  padding: 8px 0 0;
}

.nu-lateral__logo {
  display: flex;
  align-items: center;
}

.nu-lateral__logo img {
  display: block;
  width: auto;
}

/* Botón a la derecha del logo, dentro del menú: abre o recoge el menú. */
.nu-lateral__recoger {
  position: relative;
  display: flex;
  flex: none;
  width: 24px;
  height: 24px;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--nu-linea);
  padding: 0;
  background: var(--nu-superficie);
  color: var(--nu-tinta);
  cursor: pointer;
}

.nu-lateral__recoger .nu-icono {
  transition: transform 0.2s ease;
}

.nu-lateral[data-recogido="true"] .nu-lateral__recoger .nu-icono {
  transform: scaleX(-1);
}

.nu-lateral__recoger:hover,
.nu-lateral__recoger:focus-visible {
  border-color: var(--nu-acento);
  outline: 0;
}

/* Área táctil más grande sin cambiar el dibujo. */
.nu-lateral__recoger::after {
  position: absolute;
  inset: -10px;
  content: "";
}

/* Buscador fijo bajo el logo, con las teclas del atajo. */
.nu-lateral__buscar {
  display: flex;
  width: 100%;
  height: 40px;
  flex: 0 0 auto;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--nu-linea);
  padding: 0 8px 0 12px;
  background: var(--nu-superficie);
  font-size: 14px;
  color: var(--nu-tenue);
  text-align: left;
  cursor: pointer;
}

.nu-lateral__buscar .nu-icono {
  color: var(--nu-tinta);
}

.nu-lateral[data-recogido="true"] .nu-lateral__buscar {
  justify-content: center;
  padding: 0;
}

.nu-lateral__buscar:hover,
.nu-lateral__buscar:focus-visible {
  border-color: var(--nu-acento);
  outline: 0;
}

.nu-lateral__buscar-texto {
  flex: 1 1 auto;
}

.nu-lateral__teclas {
  display: flex;
  gap: 4px;
}

.nu-lateral__teclas kbd {
  display: inline-flex;
  min-width: 22px;
  height: 22px;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--nu-linea);
  padding: 0 5px;
  background: var(--nu-tecla);
  font-family: var(--nu-mono);
  font-size: 11px;
  color: var(--nu-gris);
}

/* Zona que se desplaza: PRINCIPAL y TU NEGOCIO, 18 px entre secciones. */
.nu-lateral__lista {
  display: flex;
  min-height: 0;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 18px;
  margin: 0 -6px;
  padding: 0 6px;
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-width: thin;
}

.nu-menu__grupo {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.nu-menu__seccion {
  padding: 0 10px 6px;
  font-family: var(--nu-mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--nu-tenue);
}

.nu-menu__item {
  position: relative;
  display: flex;
  width: 100%;
  height: 40px;
  align-items: center;
  gap: 12px;
  border: 0;
  padding: 0 10px;
  background: transparent;
  font-size: 15px;
  white-space: nowrap;
  color: var(--nu-tinta);
  text-align: left;
  text-decoration: none;
  cursor: pointer;
}

.nu-menu__item:hover,
.nu-menu__item:focus-visible {
  background: var(--nu-hover);
  outline: 0;
}

.nu-menu__item[data-activo="true"] {
  background: var(--nu-activo);
}

.nu-menu__item[data-activo="true"]::before {
  position: absolute;
  top: 8px;
  bottom: 8px;
  left: 0;
  width: 2px;
  background: var(--nu-acento);
  content: "";
}

.nu-menu__item[data-recogido="true"] {
  justify-content: center;
  padding: 0;
}

.nu-menu__item[data-con-arbol="true"] {
  padding-right: 36px;
}

.nu-menu__texto {
  min-width: 0;
  flex: 1 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* La marca de Kōdo ocupa el mismo cuadro de 20 px que los iconos. */
.nu-menu__kodo {
  display: inline-flex;
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
}

/* Flecha → de las apps de TU NEGOCIO (el icono "next" del kit, 12 px). */
.nu-menu__flecha {
  display: inline-flex;
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  margin-right: -8px;
}

/* Fila con árbol: botón ↓/→ a la derecha (gira 90° abierto). */
.nu-menu__app {
  position: relative;
}

.nu-menu__abrir {
  position: absolute;
  top: 4px;
  right: 2px;
  display: flex;
  width: 32px;
  height: 32px;
  align-items: center;
  justify-content: center;
  border: 0;
  padding: 0;
  background: transparent;
  color: var(--nu-tinta);
  cursor: pointer;
}

.nu-menu__abrir .nu-icono {
  transition: transform 0.15s ease;
}

.nu-menu__app[data-abierto="true"] .nu-menu__abrir .nu-icono {
  transform: rotate(90deg);
}

.nu-menu__abrir:hover,
.nu-menu__abrir:focus-visible {
  background: var(--nu-hover);
  outline: 0;
}

/* Árbol: línea fina vertical con marcas horizontales. */
.nu-menu__arbol {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin: 0 0 0 22px;
  border-left: 1px solid var(--nu-linea);
  padding: 2px 0 6px;
  list-style: none;
}

.nu-menu__sub {
  position: relative;
  display: flex;
  min-height: 32px;
  align-items: center;
  overflow: hidden;
  padding: 0 10px 0 14px;
  font-size: 14px;
  white-space: nowrap;
  color: var(--nu-gris);
  text-decoration: none;
  text-overflow: ellipsis;
}

.nu-menu__sub::before {
  position: absolute;
  top: 50%;
  left: 0;
  width: 10px;
  height: 1px;
  background: var(--nu-linea);
  content: "";
}

.nu-menu__sub:hover,
.nu-menu__sub:focus-visible {
  background: var(--nu-hover);
  color: var(--nu-tinta);
  outline: 0;
}

.nu-menu__sub[data-activo="true"] {
  color: var(--nu-tinta);
}

.nu-menu__subseccion {
  padding: 8px 10px 2px 14px;
  font-family: var(--nu-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-tenue);
}

/* ── Pie del menú: separador, Ajustes y la persona (.nu_sb_foot) ─────────── */

.nu-perfil {
  display: flex;
  flex: 0 0 auto;
  flex-direction: column;
  gap: 8px;
  margin: 0 -14px;
  border-top: 1px solid var(--nu-linea-suave);
  padding: 10px 14px 0;
}

.nu-lateral[data-recogido="true"] .nu-perfil {
  margin: 0 -12px;
  padding: 10px 12px 0;
}

.nu-persona {
  display: flex;
  width: 100%;
  align-items: center;
  gap: 10px;
  border: 1px solid var(--nu-linea);
  padding: 8px;
  background: var(--nu-superficie);
  color: var(--nu-tinta);
  text-align: left;
  cursor: pointer;
}

.nu-persona:hover,
.nu-persona:focus-visible,
.nu-persona[data-popup-open] {
  border-color: var(--nu-acento);
  outline: 0;
}

.nu-persona[data-recogido="true"] {
  justify-content: center;
  border-color: transparent;
  padding: 6px 0;
}

.nu-persona__cuadro {
  display: flex;
  width: 36px;
  height: 36px;
  flex: 0 0 36px;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: var(--nu-persona);
  font-size: 15px;
  color: var(--nu-persona-texto);
}

.nu-persona__cuadro img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.nu-persona__datos {
  display: flex;
  min-width: 0;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 2px;
}

.nu-persona__nombre {
  overflow: hidden;
  font-size: 14px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nu-persona__rol {
  overflow: hidden;
  font-size: 10px;
  color: var(--nu-tenue);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nu-persona__mas {
  color: var(--nu-tinta);
}

/* ── Miga de pan (theme.scss: .nu_navbar_company y .o_menu_brand) ────────── */

/* Cabecera blanca como el menú lateral; el contenido va sobre el fondo de puntos de la 20. */
.nu-cabecera {
  background: var(--nu-superficie);
}

.nu-fondo {
  background-color: var(--nu-fondo);
  background-image: radial-gradient(var(--nu-fondo-punto) 1px, transparent 1px);
  background-size: 18px 18px;
  background-position: 0 0;
}

.nu-miga {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: 10px;
  white-space: nowrap;
}

/* Nombre de la empresa = selector de empresa (.nu_navbar_company de la 20). */
.nu-miga__empresa {
  position: relative;
  min-width: 0;
  align-items: center;
}

.nu-miga__org {
  overflow: hidden;
  max-width: 280px;
  padding: 4px 0;
  border: 0;
  background: none;
  font: inherit;
  font-size: 15px;
  color: var(--nu-gris);
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}

.nu-miga__org:hover,
.nu-miga__org[aria-expanded="true"] {
  color: var(--nu-tinta);
}

.nu-miga__menu {
  position: absolute;
  top: calc(100% + 10px);
  left: -12px;
  z-index: 60;
  display: flex;
  min-width: 260px;
  flex-direction: column;
  padding: 8px 0;
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
  box-shadow: 0 12px 32px rgba(17, 24, 58, 0.08);
}

.nu-miga__menu-titulo {
  padding: 6px 16px 8px;
}

.nu-miga__menu-vacio {
  padding: 8px 16px;
  font-size: 15px;
  color: var(--nu-gris);
}

.nu-miga__opcion {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px;
  border: 0;
  background: none;
  font: inherit;
  font-size: 15px;
  color: var(--nu-tinta);
  text-align: left;
  cursor: pointer;
}

.nu-miga__opcion:hover {
  background: var(--nu-hover-calido);
}

.nu-miga__opcion[aria-checked="true"] {
  color: var(--nu-acento);
}

.nu-miga__opcion-actual {
  width: 6px;
  height: 6px;
  flex-shrink: 0;
  background: var(--nu-acento);
}

.nu-miga__barra {
  font-size: 15px;
  color: var(--nu-tenue);
}

.nu-miga__seccion {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: 0.45em;
  font-size: 20px;
  color: var(--nu-tinta);
}

.nu-miga__seccion .nu-icono {
  width: 1.05em !important;
  height: 1.05em !important;
}

/* ── Inicio (home.scss) ───────────────────────────────────────────────────── */

.nu-saludo {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.nu-saludo__fecha {
  font-family: var(--nu-mono);
  font-size: 13px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-acento);
}

.nu-saludo__titulo {
  margin: 0;
  font-size: 40px;
  line-height: 1.1;
  letter-spacing: -0.4px;
  color: var(--nu-tinta);
}

.nu-saludo__donde {
  margin: 0;
  font-size: 15px;
  color: var(--nu-gris);
}

.nu-saludo__org {
  color: var(--nu-acento);
}

/* Avisos: tarjeta con cuadrado naranja, texto y acción. */
.nu-avisos {
  display: flex;
  flex-direction: column;
  gap: 1px;
  border: 1px solid var(--nu-linea);
  background: var(--nu-linea);
}

.nu-aviso {
  display: flex;
  min-height: 48px;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  padding: 10px 18px;
  background: var(--nu-superficie);
  font-size: 14px;
  color: var(--nu-tinta);
}

.nu-aviso__marca {
  width: 8px;
  height: 8px;
  flex: none;
  background: var(--nu-acento);
}

.nu-aviso__texto {
  min-width: 0;
  flex: 1 1 260px;
}

/* Pídele algo a Kōdo. */
.nu-kodo {
  display: flex;
  flex-direction: column;
  gap: 16px;
  border: 1px solid var(--nu-linea);
  padding: 24px 28px;
  background: var(--nu-superficie);
}

.nu-kodo__encabezado {
  display: flex;
  align-items: center;
  gap: 10px;
}

.nu-kodo__encabezado .nu-etiqueta {
  font-size: 12px;
}

/* Fila: cursor + campo + "Enviar →", sobre una línea navy. */
.nu-kodo__fila {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  border-bottom: 1px solid var(--nu-tinta);
  padding-bottom: 4px;
}

/* El cursor naranja sólo con el campo vacío y sin foco (como la plataforma actual). */
.nu-kodo__cursor {
  display: none;
  width: 10px;
  height: 22px;
  flex: none;
  margin-top: 15px;
  background: var(--nu-acento);
  animation: nu-parpadeo 1.05s steps(1, end) infinite;
}

.nu-kodo__fila:has(textarea:placeholder-shown):not(:focus-within) .nu-kodo__cursor {
  display: inline-block;
}

.nu-kodo__campo {
  min-width: 0;
  flex: 1 1 auto;
}

/*
 * El campo propio de "Pídele algo a Kōdo" (InicioNuevauno.tsx): una línea a todo el ancho, sin borde
 * ni manija de redimensionar, sobre la línea navy de la fila. Vive aquí y no en chatKodo.css: ese
 * archivo baja con la vista del chat (/kodo, trozo aparte) y el Inicio quedaba con el textarea del
 * navegador.
 */
.nu-kodo__texto {
  display: block;
  width: 100%;
  min-width: 0;
  border: 0;
  border-radius: 0;
  padding: 12px 0 4px;
  background: transparent;
  font: inherit;
  font-size: 20px;
  line-height: 28px;
  color: var(--nu-tinta);
  resize: none;
  outline: none;
  box-shadow: none;
  appearance: none;
}

.nu-kodo__texto::placeholder {
  color: var(--nu-tenue);
  opacity: 1;
}

/* Botón principal: naranja lleno siempre, 52 px. */
.nu-kodo__enviar {
  display: inline-flex;
  height: 52px;
  flex: none;
  align-items: center;
  gap: 10px;
  border: 0;
  padding: 0 28px;
  background: var(--nu-acento);
  font-size: 16px;
  color: #ffffff;
  cursor: pointer;
}

.nu-kodo__enviar:hover {
  background: var(--nu-acento-hover);
}

.nu-kodo__enviar svg {
  width: 18px;
  height: 18px;
}

.nu-kodo__enviar:disabled {
  cursor: default;
  opacity: 0.5;
}

.nu-fichas {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.nu-ficha {
  display: inline-flex;
  min-height: 36px;
  align-items: center;
  border: 1px solid var(--nu-linea);
  padding: 0 14px;
  background: var(--nu-superficie);
  font-size: 14px;
  color: var(--nu-tinta);
  text-align: left;
  cursor: pointer;
}

.nu-ficha:hover,
.nu-ficha:focus-visible {
  border-color: var(--nu-acento);
  outline: 0;
}

/* Franja de datos: flex con quiebre, bordes arriba/izquierda y en cada celda. */
.nu-franja {
  display: flex;
  flex-wrap: wrap;
  border-top: 1px solid var(--nu-linea);
  border-left: 1px solid var(--nu-linea);
}

.nu-dato {
  display: flex;
  min-width: 0;
  flex: 1 1 150px;
  flex-direction: column;
  gap: 10px;
  border-right: 1px solid var(--nu-linea);
  border-bottom: 1px solid var(--nu-linea);
  padding: 20px 22px;
  background: var(--nu-superficie);
}

.nu-dato__etiqueta {
  overflow: hidden;
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--nu-gris);
}

.nu-dato__valor {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nu-dato__numero {
  font-size: 30px;
  line-height: 1;
  color: var(--nu-tinta);
}

.nu-dato__unidad {
  margin-left: 6px;
  font-size: 14px;
  color: var(--nu-gris);
}

.nu-puntos {
  display: grid;
  grid-template-columns: repeat(20, minmax(0, 6px));
  gap: 3px;
}

.nu-punto {
  aspect-ratio: 1;
  background: var(--nu-punto-vacio);
}

.nu-punto[data-lleno="true"] {
  background: var(--nu-acento);
}

/* Tus apps. */
.nu-bloque {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.nu-bloque__cabeza {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.nu-buscar-apps {
  min-width: 0;
  flex: 0 1 260px;
  margin: 0;
}

.nu-buscar-apps input {
  width: 100%;
  height: 36px;
  border: 1px solid var(--nu-linea);
  padding: 0 12px;
  background: var(--nu-superficie);
  font-size: 14px;
  color: var(--nu-tinta);
  outline: 0;
}

.nu-buscar-apps input:focus {
  border-color: var(--nu-acento);
}

.nu-buscar-apps input::placeholder {
  color: var(--nu-tenue);
}

.nu-apps {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  border-top: 1px solid var(--nu-linea);
  border-left: 1px solid var(--nu-linea);
}

.nu-app {
  display: flex;
  min-width: 0;
  height: 56px;
  align-items: center;
  gap: 12px;
  border: 0;
  border-right: 1px solid var(--nu-linea);
  border-bottom: 1px solid var(--nu-linea);
  padding: 0 16px;
  background: var(--nu-superficie);
  font-size: 15px;
  color: var(--nu-tinta);
  text-align: left;
  cursor: pointer;
}

.nu-app:hover {
  background: var(--nu-hover-calido);
}

.nu-app:focus-visible {
  outline: 1px solid var(--nu-acento);
  outline-offset: -1px;
  background: var(--nu-hover-calido);
}

.nu-app__nombre {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nu-menus {
  margin: 0;
  padding: 0;
  list-style: none;
}

.nu-menus__fila {
  display: flex;
  width: 100%;
  min-height: 44px;
  align-items: center;
  border: 0;
  border-top: 1px solid var(--nu-linea-suave);
  padding: 8px 0;
  background: none;
  font-size: 14px;
  color: var(--nu-tinta);
  text-align: left;
  cursor: pointer;
}

.nu-menus__fila:hover {
  background: var(--nu-hover-calido);
}

.nu-vacio {
  margin: 0;
  padding: 6px 0;
  font-size: 14px;
  color: var(--nu-gris);
}

/* Actividad. */
.nu-actividad {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--nu-linea);
  padding: 20px 28px 12px;
  background: var(--nu-superficie);
}

.nu-actividad__cabeza {
  padding-bottom: 8px;
}

.nu-actividad__lista {
  margin: 0;
  padding: 0;
  list-style: none;
}

.nu-suceso {
  display: grid;
  min-height: 48px;
  grid-template-columns: 90px minmax(0, 1fr) minmax(0, 220px);
  align-items: center;
  gap: 16px;
  border-top: 1px solid var(--nu-linea-suave);
  font-size: 15px;
}

.nu-suceso__cuando {
  font-family: var(--nu-mono);
  font-size: 13px;
  white-space: nowrap;
  color: var(--nu-gris);
}

.nu-suceso__texto {
  min-width: 0;
  overflow: hidden;
  border: 0;
  padding: 0;
  background: none;
  font-size: 15px;
  color: var(--nu-tinta);
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}

.nu-suceso__texto:hover {
  color: var(--nu-acento);
}

.nu-suceso__area {
  overflow: hidden;
  font-size: 13px;
  color: var(--nu-gris);
  text-align: right;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nu-actividad__mas {
  min-height: 12px;
  border-top: 1px solid var(--nu-linea-suave);
  padding-top: 12px;
}

.nu-actividad__mas:not(:has(> *)) {
  border-top-color: transparent;
  padding-top: 0;
}

/* Tablet: 4 apps por fila, franja en 3 columnas. */
@media (max-width: 1279.98px) {
  .nu-apps {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .nu-dato {
    flex-basis: 28%;
  }

  .nu-saludo__titulo {
    font-size: 34px;
  }
}

/* Táctil: objetivos de 44 px o más. */
@media (max-width: 1279.98px), (pointer: coarse) {
  .nu-ficha,
  .nu-enlace,
  .nu-buscar-apps input,
  .nu-suceso__texto {
    min-height: 44px;
  }
}

/* Teléfono: franja en 2 columnas, apps 3 por fila (2 en angostas), actividad en dos líneas. */
@media (max-width: 767.98px) {
  .nu-saludo__titulo {
    font-size: 30px;
  }

  .nu-kodo {
    padding: 18px 16px;
  }

  .nu-kodo__fila {
    gap: 10px;
  }

  .nu-kodo__texto {
    font-size: 17px;
  }

  .nu-kodo__enviar {
    height: 48px;
    padding: 0 16px;
  }

  .nu-dato {
    flex-basis: 40%;
    padding: 16px;
  }

  .nu-dato__numero {
    font-size: 26px;
  }

  .nu-bloque__cabeza {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  .nu-buscar-apps {
    flex: auto;
  }

  .nu-apps {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .nu-app {
    gap: 10px;
    padding: 0 12px;
    font-size: 14px;
  }

  .nu-actividad {
    padding: 16px 16px 8px;
  }

  .nu-suceso {
    grid-template-areas: "cuando area" "texto texto";
    grid-template-columns: auto minmax(0, 1fr);
    gap: 2px 12px;
    padding: 10px 0;
  }

  .nu-suceso__cuando {
    grid-area: cuando;
  }

  .nu-suceso__area {
    grid-area: area;
  }

  .nu-suceso__texto {
    grid-area: texto;
    white-space: normal;
  }
}

@media (max-width: 479.98px) {
  .nu-apps {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .nu-kodo__enviar-texto {
    display: none;
  }
}

.nu-kodo-pensando {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 4px 6px;
  font-size: 14px;
  color: var(--nu-gris);
}

/* ═════ Módulos instalados ═════ */


.nu-modulos {
  width: 100%;
  max-width: 1120px;
  margin: 0 auto;
  padding: 32px 16px 64px;
}

@media (min-width: 640px) {
  .nu-modulos {
    padding: 40px 32px 64px;
  }
}

.nu-modulos__titulo {
  margin: 0 0 16px;
  font-size: 1.35rem;
  font-weight: 400;
  color: var(--nu-tinta);
}

.nu-modulos__buscar {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  padding: 0 12px;
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
  color: var(--nu-tinta);
}

.nu-modulos__buscar:focus-within {
  border-color: var(--nu-acento);
}

.nu-modulos__buscar input {
  flex: 1 1 auto;
  min-width: 0;
  height: 44px;
  border: 0;
  outline: 0;
  background: transparent;
  color: var(--nu-tinta);
  font-size: 1rem;
}

.nu-modulos__buscar input::placeholder {
  color: var(--nu-tenue);
}

.nu-modulos__ayuda {
  margin: 10px 0 16px;
  font-size: 0.85rem;
  color: var(--nu-gris);
}

.nu-modulos__aviso {
  margin: -6px 0 16px;
  font-size: 0.85rem;
  color: var(--nu-acento);
}

.nu-modulos__grilla {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
  gap: 8px;
}

@media (max-width: 767px) {
  .nu-modulos__grilla {
    grid-template-columns: repeat(auto-fill, minmax(104px, 1fr));
  }
}

.nu-modulo {
  position: relative;
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
}

.nu-modulo:hover,
.nu-modulo:focus-within {
  border-color: var(--nu-acento);
}

.nu-modulo__abrir {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 22px 10px 14px;
  color: var(--nu-tinta);
  text-align: center;
  text-decoration: none;
}

.nu-modulo__abrir:hover,
.nu-modulo__abrir:focus-visible {
  outline: 0;
  background: var(--nu-hover);
  color: var(--nu-tinta);
}

.nu-modulo__abrir .nu-marca {
  object-fit: contain;
}

.nu-modulo__nombre {
  max-width: 100%;
  overflow-wrap: anywhere;
  font-size: 0.9rem;
  line-height: 1.2;
}

.nu-modulo__estrella {
  position: absolute;
  top: 4px;
  right: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--nu-gris);
  cursor: pointer;
}

.nu-modulo__estrella:hover,
.nu-modulo__estrella:focus-visible {
  outline: 0;
  color: var(--nu-acento);
}

.nu-modulo__estrella:focus-visible {
  outline: 1px solid var(--nu-acento);
  outline-offset: -1px;
}

.nu-modulo__estrella[aria-pressed="true"] {
  color: var(--nu-acento);
}

.nu-modulo__estrella[aria-pressed="true"] svg path {
  fill: var(--nu-acento);
  stroke: var(--nu-acento);
}

.nu-modulos__vacio {
  grid-column: 1 / -1;
  margin: 12px 0;
  color: var(--nu-gris);
}

/* ═════ Kōdo: chat, aprobaciones y panel derecho ═════ */


.nu-chat {
  display: flex;
  width: 100%;
  max-width: 880px;
  min-height: 100%;
  flex-direction: column;
  gap: 16px;
  margin: 0 auto;
  padding: 32px 16px 24px;
  color: var(--nu-tinta);
}

.nu-chat * {
  font-weight: 400;
}

.nu-chat__cabeza {
  display: flex;
  align-items: center;
  gap: 12px;
  border-bottom: 1px solid var(--nu-linea);
  padding-bottom: 16px;
}

.nu-chat__quien {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.nu-chat__nombre {
  font-size: 20px;
  line-height: 28px;
}

.nu-chat__estado {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  padding: 24px 0;
}

.nu-chat__error {
  margin: 0;
  color: var(--nu-acento);
}

.nu-chat__mensajes {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 16px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.nu-chat__vacio {
  color: var(--nu-gris);
}

.nu-chat__fila {
  display: flex;
  max-width: 100%;
  flex-direction: column;
  gap: 8px;
}

.nu-chat__fila--persona {
  align-self: flex-end;
  max-width: 80%;
  border: 1px solid var(--nu-linea);
  padding: 10px 14px;
  background: var(--nu-hover);
}

.nu-chat__fila--kodo {
  align-self: flex-start;
}

.nu-chat__texto {
  margin: 0;
  font-size: 16px;
  line-height: 24px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.nu-chat__texto--kodo {
  white-space: normal;
}

.nu-chat__texto--kodo > :first-child {
  margin-top: 0;
}

.nu-chat__texto--kodo > :last-child {
  margin-bottom: 0;
}

.nu-chat__texto--kodo a {
  color: var(--nu-acento);
}

.nu-chat__herramienta {
  margin: 0;
  font-family: var(--nu-mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--nu-tenue);
}

.nu-aprobacion {
  display: flex;
  flex-direction: column;
  gap: 12px;
  border: 1px solid var(--nu-linea);
  border-left: 2px solid var(--nu-acento);
  padding: 16px 20px;
  background: var(--nu-superficie);
}

.nu-aprobacion__accion {
  margin: 0;
  font-size: 16px;
}

.nu-aprobacion__datos {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 0;
}

.nu-aprobacion__dato {
  display: grid;
  grid-template-columns: minmax(96px, max-content) 1fr;
  gap: 12px;
}

.nu-aprobacion__dato dt {
  font-family: var(--nu-mono);
  font-size: 12px;
  text-transform: uppercase;
  color: var(--nu-gris);
}

.nu-aprobacion__dato dd {
  margin: 0;
  overflow-wrap: anywhere;
}

.nu-aprobacion__botones {
  display: flex;
  gap: 8px;
}

.nu-aprobacion__aprobar,
.nu-aprobacion__rechazar {
  height: 40px;
  border: 1px solid var(--nu-acento);
  border-radius: 0;
  padding: 0 20px;
  font-size: 15px;
  cursor: pointer;
}

.nu-aprobacion__aprobar {
  background: var(--nu-acento);
  color: #ffffff;
}

.nu-aprobacion__rechazar {
  background: transparent;
  color: var(--nu-tinta);
  border-color: var(--nu-linea);
}

.nu-aprobacion__aprobar:disabled,
.nu-aprobacion__rechazar:disabled {
  cursor: default;
  opacity: 0.5;
}

.nu-chat__redactor {
  position: sticky;
  bottom: 0;
  display: flex;
  align-items: flex-end;
  gap: 12px;
  border: 1px solid var(--nu-linea);
  padding: 12px 12px 12px 20px;
  background: var(--nu-superficie);
}

.nu-chat__campo {
  min-width: 0;
  flex: 1 1 auto;
  border: 0;
  border-radius: 0;
  padding: 12px 0 4px;
  background: transparent;
  font: inherit;
  color: var(--nu-tinta);
  resize: none;
  outline: none;
}

.nu-chat__campo {
  font-size: 18px;
  line-height: 26px;
}

@media (max-width: 640px) {
  .nu-chat {
    padding-top: 16px;
  }

  .nu-chat__fila--persona {
    max-width: 100%;
  }

  .nu-chat__redactor .nu-kodo__enviar-texto {
    display: none;
  }

  .nu-chat__redactor .nu-kodo__enviar {
    padding: 0 16px;
  }
}

/* Mientras llega el historial de Kōdo (sin copia guardada): la forma de una conversación. */
.nu-chat__esqueleto {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.nu-chat__esqueleto-linea {
  display: block;
  width: 72%;
  height: 14px;
  background: var(--nu-hover);
  animation: nu-chat-esqueleto 1.2s ease-in-out infinite alternate;
}

.nu-chat__esqueleto-linea--persona {
  width: 40%;
  align-self: flex-end;
}

.nu-chat__esqueleto-linea--corta {
  width: 48%;
}

@keyframes nu-chat-esqueleto {
  from { opacity: 1; }
  to { opacity: 0.45; }
}

@media (prefers-reduced-motion: reduce) {
  .nu-chat__esqueleto-linea {
    animation: none;
  }
}

/* ── Panel derecho de Kōdo (PanelKodo.tsx) ───────────────────────────────── */

.nu-panel-kodo {
  display: flex;
  width: 400px;
  min-width: 0;
  flex-shrink: 0;
  flex-direction: column;
  overflow-y: auto;
  border-left: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
}

.nu-chat--panel {
  max-width: none;
  gap: 12px;
  padding: 0 16px 16px;
}

.nu-chat--panel .nu-chat__cabeza {
  position: sticky;
  top: 0;
  z-index: 1;
  padding: 14px 0 12px;
  background: var(--nu-superficie);
}

.nu-chat--panel .nu-chat__nombre {
  font-size: 16px;
  line-height: 22px;
}

.nu-chat--panel .nu-chat__fila--persona {
  max-width: 92%;
}

.nu-chat--panel .nu-chat__texto {
  font-size: 15px;
  line-height: 22px;
}

.nu-chat--panel .nu-chat__campo {
  font-size: 16px;
  line-height: 24px;
}

.nu-chat--panel .nu-chat__redactor {
  padding: 8px 8px 8px 14px;
}

.nu-chat--panel .nu-kodo__enviar-texto {
  display: none;
}

.nu-chat__cerrar {
  display: inline-flex;
  width: 32px;
  height: 32px;
  align-items: center;
  justify-content: center;
  margin-left: auto;
  border: 0;
  border-radius: 0;
  background: none;
  color: var(--nu-gris);
  cursor: pointer;
}

.nu-chat__cerrar:hover {
  background: var(--nu-hover);
  color: var(--nu-tinta);
}

.nu-chat__cerrar svg {
  width: 16px;
  height: 16px;
}

/* La ficha de lo que la persona está viendo: viaja con cada mensaje. */
.nu-chat__viendo {
  display: flex;
  min-width: 0;
  align-items: baseline;
  gap: 8px;
  margin: 0;
  border-left: 2px solid var(--nu-acento);
  padding: 6px 10px;
  background: var(--nu-hover);
}

.nu-chat__viendo-que {
  overflow: hidden;
  font-size: 14px;
  color: var(--nu-tinta);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Botón de Kōdo en la cabecera. */
.nu-boton-kodo {
  display: inline-flex;
  height: 32px;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--nu-linea);
  border-radius: 0;
  padding: 0 12px;
  background: var(--nu-superficie);
  font: inherit;
  font-size: 14px;
  font-weight: 400;
  color: var(--nu-tinta);
  cursor: pointer;
}

.nu-boton-kodo:hover,
.nu-boton-kodo[aria-pressed="true"] {
  border-color: var(--nu-acento);
}

@media (max-width: 900px) {
  .nu-panel-kodo {
    position: fixed;
    inset: 56px 0 0 auto;
    z-index: 45;
    width: min(400px, 100%);
    box-shadow: -12px 0 32px rgba(17, 24, 58, 0.08);
  }
}

@media (max-width: 640px) {
  .nu-boton-kodo__texto {
    display: none;
  }
}

/* ═════ Kit: piezas nuevas (propuestas, ver /kit/kit.json) ═════ */

/* ── Shell: riel · menú lateral · (cabecera / pestañas / contenido) · panel derecho · barra inferior ── */

.nu-shell {
  display: grid;
  height: 100vh;
  height: 100dvh;
  grid-template-columns: auto auto minmax(0, 1fr) auto;
  grid-template-rows: minmax(0, 1fr) auto;
  grid-template-areas:
    "riel lateral centro panel"
    "barra barra barra barra";
  overflow: hidden;
  background: var(--nu-fondo);
}

.nu-shell > .nu-riel { grid-area: riel; }
.nu-shell > .nu-lateral { grid-area: lateral; height: auto; }
.nu-shell > .nu-panel-kodo { grid-area: panel; }
.nu-shell > .nu-barra { grid-area: barra; }

.nu-shell__centro {
  display: flex;
  min-width: 0;
  min-height: 0;
  grid-area: centro;
  flex-direction: column;
}

.nu-shell__contenido {
  min-height: 0;
  flex: 1 1 auto;
  overflow-y: auto;
}

/* Ancho de lectura del contenido: ~1120 px centrado, 16 px de margen en teléfono. */
.nu-pagina {
  display: flex;
  width: 100%;
  max-width: 1152px;
  flex-direction: column;
  gap: 28px;
  margin: 0 auto;
  padding: 48px 16px 64px;
}

/* Cabecera blanca de 56 px: miga a la izquierda, acciones (Kōdo, avisos) a la derecha. */
.nu-cabecera {
  display: flex;
  height: 56px;
  flex: 0 0 auto;
  align-items: center;
  gap: 12px;
  border-bottom: 1px solid var(--nu-linea);
  padding: 0 16px;
}

.nu-cabecera__acciones {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
}

.nu-cabecera__menu {
  display: none;
}

/* Riel izquierdo: espacios de trabajo y accesos globales en 56 px (opcional). */
.nu-riel {
  display: flex;
  width: 56px;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  border-right: 1px solid var(--nu-linea);
  padding: 12px 0;
  background: var(--nu-superficie);
}

.nu-riel__item {
  position: relative;
  display: flex;
  width: 40px;
  height: 40px;
  align-items: center;
  justify-content: center;
  border: 0;
  padding: 0;
  background: none;
  color: var(--nu-tinta);
  cursor: pointer;
}

.nu-riel__item:hover,
.nu-riel__item:focus-visible {
  background: var(--nu-hover);
  outline: 0;
}

.nu-riel__item[aria-current="true"] {
  background: var(--nu-activo);
}

.nu-riel__item[aria-current="true"]::before {
  position: absolute;
  top: 8px;
  bottom: 8px;
  left: -8px;
  width: 2px;
  background: var(--nu-acento);
  content: "";
}

.nu-riel__pie {
  margin-top: auto;
}

/* Barra inferior: estado del sistema en etiquetas de sistema, 28 px. */
.nu-barra {
  display: flex;
  height: 28px;
  align-items: center;
  gap: 16px;
  border-top: 1px solid var(--nu-linea);
  padding: 0 16px;
  background: var(--nu-superficie);
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--nu-gris);
}

.nu-barra__derecha {
  display: flex;
  gap: 16px;
  margin-left: auto;
}

/* ── Pestañas bajo la cabecera ── */

.nu-pestanas {
  display: flex;
  flex: 0 0 auto;
  gap: 0;
  overflow-x: auto;
  border-bottom: 1px solid var(--nu-linea);
  padding: 0 16px;
  background: var(--nu-superficie);
  scrollbar-width: none;
}

.nu-pestana {
  position: relative;
  display: inline-flex;
  height: 44px;
  flex: none;
  align-items: center;
  gap: 8px;
  border: 0;
  padding: 0 16px;
  background: none;
  font-size: 15px;
  white-space: nowrap;
  color: var(--nu-gris);
  text-decoration: none;
  cursor: pointer;
}

.nu-pestana:hover {
  color: var(--nu-tinta);
}

.nu-pestana[aria-selected="true"] {
  color: var(--nu-tinta);
}

.nu-pestana[aria-selected="true"]::after {
  position: absolute;
  right: 16px;
  bottom: -1px;
  left: 16px;
  height: 2px;
  background: var(--nu-acento);
  content: "";
}

.nu-pestana__cuenta {
  font-family: var(--nu-mono);
  font-size: 12px;
  color: var(--nu-tenue);
}

/* ── Botones ── */

.nu-boton {
  display: inline-flex;
  height: 44px;
  align-items: center;
  justify-content: center;
  gap: 10px;
  border: 1px solid var(--nu-linea);
  padding: 0 20px;
  background: var(--nu-superficie);
  font-size: 15px;
  color: var(--nu-tinta);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
}

.nu-boton:hover,
.nu-boton:focus-visible {
  border-color: var(--nu-acento);
  outline: 0;
}

.nu-boton--principal {
  border-color: var(--nu-acento);
  background: var(--nu-acento);
  color: #ffffff;
}

.nu-boton--principal:hover,
.nu-boton--principal:focus-visible {
  border-color: var(--nu-acento-hover);
  background: var(--nu-acento-hover);
}

.nu-boton--texto {
  border-color: transparent;
  padding: 0 4px;
  background: none;
  color: var(--nu-acento);
}

.nu-boton--texto:hover {
  border-color: transparent;
  text-decoration: underline;
}

.nu-boton--chico {
  height: 32px;
  padding: 0 12px;
  font-size: 14px;
}

.nu-boton--grande {
  height: 56px;
  padding: 0 28px;
  font-size: 16px;
}

.nu-boton:disabled {
  cursor: default;
  opacity: 0.5;
}

.nu-boton .nu-icono {
  width: 18px;
  height: 18px;
}

.nu-botones {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

/* ── Campos ── */

.nu-campo {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.nu-campo__etiqueta {
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-gris);
}

.nu-campo__control {
  width: 100%;
  height: 44px;
  border: 1px solid var(--nu-linea);
  padding: 0 12px;
  background: var(--nu-superficie);
  font-size: 15px;
  color: var(--nu-tinta);
  outline: 0;
  appearance: none;
}

textarea.nu-campo__control {
  height: auto;
  min-height: 96px;
  padding: 10px 12px;
  resize: vertical;
}

.nu-campo__control:focus {
  border-color: var(--nu-acento);
}

.nu-campo__control::placeholder {
  color: var(--nu-tenue);
}

.nu-campo__ayuda {
  font-size: 13px;
  color: var(--nu-gris);
}

.nu-campo[data-error="true"] .nu-campo__control {
  border-color: var(--nu-acento);
}

.nu-campo[data-error="true"] .nu-campo__ayuda {
  color: var(--nu-acento);
}

/* Variante asistente: sólo línea inferior, texto grande. */
.nu-campo--linea .nu-campo__control {
  height: 56px;
  border: 0;
  border-bottom: 1px solid currentColor;
  padding: 0;
  background: transparent;
  font-size: 24px;
}

/* ── Chips y estados ── */

.nu-chip {
  display: inline-flex;
  height: 26px;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--nu-linea);
  padding: 0 10px;
  background: var(--nu-superficie);
  font-size: 13px;
  white-space: nowrap;
  color: var(--nu-tinta);
}

.nu-chip--acento {
  border-color: var(--nu-acento);
  color: var(--nu-acento);
}

.nu-estado {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--nu-gris);
}

.nu-estado::before {
  width: 8px;
  height: 8px;
  flex: none;
  background: var(--nu-tenue);
  content: "";
}

.nu-estado--activo::before { background: var(--nu-acento); }
.nu-estado--en-linea::before { background: var(--nu-en-linea); }
.nu-estado--alerta { color: var(--nu-acento); }
.nu-estado--alerta::before { background: var(--nu-acento); }

/* "EN VIVO": el cuadrado parpadea suave mientras llegan eventos. */
.nu-vivo {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--nu-acento);
}

.nu-vivo::before {
  width: 7px;
  height: 7px;
  background: var(--nu-acento);
  animation: nu-parpadeo 1.6s steps(1, end) infinite;
  content: "";
}

/* Actividad en vivo, estilo terminal: cada evento nuevo entra arriba y se escribe. */
.nu-actividad--vivo .nu-actividad__cabeza {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.nu-actividad--vivo .nu-suceso__cuando {
  color: var(--nu-tenue);
}

.nu-suceso--nuevo {
  animation: nu-suceso-entra 0.5s ease-out;
}

.nu-suceso--nuevo .nu-suceso__texto {
  animation: nu-suceso-escribe 0.9s steps(40, end);
  clip-path: inset(0 0 0 0);
}

.nu-suceso--nuevo .nu-suceso__cuando {
  color: var(--nu-acento);
}

@keyframes nu-suceso-entra {
  from { background: var(--nu-hover-calido); opacity: 0; transform: translateY(-6px); }
  to { background: transparent; opacity: 1; transform: none; }
}

@keyframes nu-suceso-escribe {
  from { clip-path: inset(0 100% 0 0); }
  to { clip-path: inset(0 0 0 0); }
}

@media (prefers-reduced-motion: reduce) {
  .nu-vivo::before,
  .nu-suceso--nuevo,
  .nu-suceso--nuevo .nu-suceso__texto {
    animation: none;
  }
}

/* ── Menú desplegable (mismo dibujo que el selector de empresa) ── */

.nu-desplegable {
  position: relative;
  display: inline-flex;
}

.nu-desplegable__menu {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 60;
  display: flex;
  min-width: 220px;
  flex-direction: column;
  border: 1px solid var(--nu-linea);
  padding: 8px 0;
  background: var(--nu-superficie);
  box-shadow: var(--nu-sombra-flotante);
}

.nu-desplegable__menu[hidden] {
  display: none;
}

.nu-desplegable__menu--derecha {
  right: 0;
  left: auto;
}

.nu-desplegable__titulo {
  padding: 6px 16px 8px;
}

.nu-desplegable__opcion {
  display: flex;
  min-height: 40px;
  align-items: center;
  gap: 12px;
  border: 0;
  padding: 0 16px;
  background: none;
  font-size: 15px;
  color: var(--nu-tinta);
  text-align: left;
  text-decoration: none;
  cursor: pointer;
}

.nu-desplegable__opcion:hover,
.nu-desplegable__opcion:focus-visible {
  background: var(--nu-hover-calido);
  outline: 0;
}

.nu-desplegable__opcion--peligro {
  color: var(--nu-acento);
}

.nu-desplegable__separador {
  height: 1px;
  margin: 6px 0;
  background: var(--nu-linea-suave);
}

/* ── Lista de registros ── */

.nu-lista {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
}

.nu-lista__barra {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  border-bottom: 1px solid var(--nu-linea);
  padding: 10px 12px;
}

.nu-lista__buscar {
  display: flex;
  min-width: 180px;
  height: 36px;
  flex: 1 1 240px;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--nu-linea);
  padding: 0 10px;
}

.nu-lista__buscar:focus-within {
  border-color: var(--nu-acento);
}

.nu-lista__buscar input {
  min-width: 0;
  flex: 1 1 auto;
  border: 0;
  background: none;
  font-size: 14px;
  outline: 0;
}

.nu-lista__cuenta {
  margin-left: auto;
  font-family: var(--nu-mono);
  font-size: 12px;
  color: var(--nu-gris);
}

.nu-tabla {
  width: 100%;
  border-collapse: collapse;
  font-size: 15px;
}

.nu-tabla th {
  height: 40px;
  border-bottom: 1px solid var(--nu-linea);
  padding: 0 16px;
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-align: left;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--nu-gris);
}

.nu-tabla td {
  height: 52px;
  border-bottom: 1px solid var(--nu-linea-suave);
  padding: 0 16px;
  white-space: nowrap;
}

.nu-tabla tbody tr {
  cursor: pointer;
}

.nu-tabla tbody tr:hover {
  background: var(--nu-hover-calido);
}

.nu-tabla tbody tr:last-child td {
  border-bottom: 0;
}

.nu-tabla__numero {
  font-variant-numeric: tabular-nums;
  text-align: right !important;
}

.nu-tabla__principal {
  display: flex;
  align-items: center;
  gap: 12px;
}

.nu-tabla__sub {
  color: var(--nu-gris);
}

/* En teléfono la tabla pasa a filas apiladas: cada celda trae su etiqueta en data-etiqueta. */
@media (max-width: 767.98px) {
  .nu-tabla thead {
    display: none;
  }

  .nu-tabla,
  .nu-tabla tbody,
  .nu-tabla tr,
  .nu-tabla td {
    display: block;
  }

  .nu-tabla tr {
    border-bottom: 1px solid var(--nu-linea-suave);
    padding: 10px 16px;
  }

  .nu-tabla td {
    display: flex;
    height: auto;
    justify-content: space-between;
    gap: 12px;
    border: 0;
    padding: 3px 0;
    white-space: normal;
  }

  .nu-tabla td[data-etiqueta]::before {
    font-family: var(--nu-mono);
    font-size: 11px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--nu-gris);
    content: attr(data-etiqueta);
  }

  .nu-tabla__numero {
    text-align: left !important;
  }
}

/* Paginación: "1–8 de 124" en etiqueta de sistema + flechas. */
.nu-paginas {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  border-top: 1px solid var(--nu-linea);
  padding: 8px 12px;
  font-family: var(--nu-mono);
  font-size: 12px;
  color: var(--nu-gris);
}

/* ── Ficha de un registro ── */

.nu-registro {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 320px;
  gap: 24px;
  align-items: start;
}

.nu-registro__cabeza {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px;
  grid-column: 1 / -1;
}

.nu-registro__avatar {
  display: flex;
  width: 56px;
  height: 56px;
  flex: none;
  align-items: center;
  justify-content: center;
  background: var(--nu-persona);
  font-size: 22px;
  color: var(--nu-persona-texto);
}

.nu-registro__titulos {
  display: flex;
  min-width: 0;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 4px;
}

.nu-registro__nombre {
  margin: 0;
  overflow: hidden;
  font-size: 30px;
  line-height: 1.15;
  text-overflow: ellipsis;
}

.nu-registro__sub {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  font-size: 14px;
  color: var(--nu-gris);
}

.nu-registro__acciones {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.nu-tarjeta {
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
}

.nu-tarjeta__cabeza {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  border-bottom: 1px solid var(--nu-linea-suave);
  padding: 14px 20px;
}

.nu-tarjeta__cuerpo {
  padding: 16px 20px;
}

/* Campos de solo lectura: etiqueta de sistema arriba, valor abajo, en dos columnas. */
.nu-campos {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px 24px;
  margin: 0;
}

.nu-campos > div {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 4px;
}

.nu-campos dt {
  font-family: var(--nu-mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-gris);
}

.nu-campos dd {
  margin: 0;
  overflow-wrap: anywhere;
}

.nu-campos dd:empty::before {
  color: var(--nu-tenue);
  content: "Sin dato";
}

/* Kōdo a un clic desde la ficha: tarjeta con la pregunta y sugerencias del registro. */
.nu-pedir-kodo {
  display: flex;
  flex-direction: column;
  gap: 12px;
  border: 1px solid var(--nu-linea);
  border-left: 2px solid var(--nu-acento);
  padding: 16px 18px;
  background: var(--nu-superficie);
}

/* La ficha responde al ancho de su contenedor (el contenido se angosta cuando Kōdo está abierto),
   no sólo al de la ventana. .nu-pagina y .nu-shell__contenido son contenedores. */
.nu-pagina,
.nu-shell__contenido {
  container-type: inline-size;
}

@container (max-width: 860px) {
  .nu-registro {
    grid-template-columns: minmax(0, 1fr);
  }
}

@container (max-width: 560px) {
  .nu-campos {
    grid-template-columns: minmax(0, 1fr);
  }

  .nu-registro__nombre {
    font-size: 24px;
  }
}

@media (max-width: 1023.98px) {
  .nu-registro {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 767.98px) {
  .nu-campos {
    grid-template-columns: minmax(0, 1fr);
  }

  .nu-registro__nombre {
    font-size: 24px;
  }
}

/* ── Estado vacío ── */

.nu-vacio-bloque {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
  border: 1px dashed var(--nu-linea);
  padding: 40px 32px;
  background: var(--nu-superficie);
}

.nu-vacio-bloque__icono {
  width: 32px;
  height: 32px;
  color: var(--nu-tinta);
}

.nu-vacio-bloque__titulo {
  margin: 0;
  font-size: 22px;
}

.nu-vacio-bloque__texto {
  max-width: 520px;
  margin: 0;
  color: var(--nu-gris);
}

/* ── Asistente / instalación (pantalla completa, estilo terminal) ──
   Sigue el modo de la interfaz: claro en modo claro, oscuro en modo oscuro (founder 2026-10-02:
   "si es modo claro, todo es modo claro"). Se ve como una terminal: registro en Ubuntu Mono con
   prompt, cada paso un evento real, cursor naranja en la línea que se está procesando. */

.nu-asistente {
  display: flex;
  min-height: 100%;
  flex-direction: column;
  gap: 32px;
  padding: 32px 40px 40px;
  background-color: var(--nu-fondo);
  background-image: radial-gradient(var(--nu-fondo-punto) 1px, transparent 1px);
  background-size: 18px 18px;
  color: var(--nu-tinta);
}

.nu-asistente__cabeza {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.nu-asistente__contador {
  font-family: var(--nu-mono);
  font-size: 13px;
  letter-spacing: 0.14em;
  color: var(--nu-gris);
}

.nu-asistente__titulo {
  max-width: 900px;
  margin: 0;
  font-size: 56px;
  font-weight: 400;
  line-height: 1.05;
  letter-spacing: -0.5px;
}

/* La terminal: superficie con barra de título, registro y progreso al pie. */
.nu-terminal {
  max-width: 900px;
  border: 1px solid var(--nu-linea);
  background: var(--nu-superficie);
}

.nu-terminal__barra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--nu-linea);
  font-family: var(--nu-mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--nu-gris);
}

.nu-asistente__registro {
  margin: 0;
  padding: 16px;
  font-family: var(--nu-mono);
  font-size: 14px;
  line-height: 1.9;
  list-style: none;
  color: var(--nu-gris);
}

.nu-asistente__registro li::before {
  content: "$ ";
  color: var(--nu-tenue);
}

.nu-asistente__registro .ok {
  color: var(--nu-en-linea);
}

.nu-asistente__registro .ahora {
  color: var(--nu-tinta);
}

.nu-asistente__registro .ahora::after {
  content: "";
  display: inline-block;
  width: 0.55em;
  height: 1.05em;
  margin-left: 6px;
  vertical-align: -0.15em;
  background: var(--nu-acento);
  animation: nu-parpadeo 1s steps(1) infinite;
}

.nu-asistente__progreso {
  height: 2px;
  background: var(--nu-linea);
}

.nu-asistente__progreso > span {
  display: block;
  height: 100%;
  background: var(--nu-acento);
}

/* Logo según el modo: el claro en modo claro, el oscuro en modo oscuro. */
.nu-solo-oscuro { display: none; }
:root[data-mode="dark"] .nu-solo-claro { display: none; }
:root[data-mode="dark"] .nu-solo-oscuro { display: inline; }
@media (prefers-color-scheme: dark) {
  :root:not([data-mode="light"]) .nu-solo-claro { display: none; }
  :root:not([data-mode="light"]) .nu-solo-oscuro { display: inline; }
}

@keyframes nu-parpadeo {
  50% { opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .nu-asistente__registro .ahora::after { animation: none; }
}

@media (max-width: 767.98px) {
  .nu-asistente {
    gap: 24px;
    padding: 20px 16px 24px;
  }

  .nu-asistente__titulo {
    font-size: 34px;
  }
}

/* ── Shell responsivo ── */

/* Tablet: sin riel; el panel de Kōdo flota sobre el contenido. */
@media (max-width: 1279.98px) {
  .nu-shell > .nu-riel {
    display: none;
  }
}

/* Teléfono: el menú lateral se vuelve panel deslizable; botón ☰ en la cabecera; sin barra inferior. */
@media (max-width: 767.98px) {
  .nu-shell {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas: "centro";
  }

  .nu-shell > .nu-lateral {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 50;
    height: 100%;
    box-shadow: var(--nu-sombra-flotante);
    transform: translateX(-100%);
    transition: transform 0.2s ease;
  }

  .nu-shell[data-menu-abierto="true"] > .nu-lateral {
    transform: none;
  }

  .nu-shell > .nu-barra {
    display: none;
  }

  .nu-cabecera__menu {
    display: inline-flex;
  }

  .nu-miga__empresa,
  .nu-miga__barra {
    display: none;
  }

  .nu-pagina {
    padding-top: 28px;
  }
}

@media (min-width: 640px) {
  .nu-miga__empresa,
  .nu-miga__barra {
    display: inline-flex;
  }
}
