/* Todo lo visual sale de estas variables. Cada tema redefine solo las
   variables bajo [data-tema="…"] en <html>; el resto de la hoja no sabe qué
   tema está puesto. Sin tema elegido: Tinta, o Consola si el sistema
   prefiere oscuro.

   Las fuentes van como pila: si el teléfono tiene Onest, IBM Plex Sans o
   Nunito Sans las usa; si no, la del sistema. No se cargan de fuera: la CSP
   de la app no deja hablar con terceros, y servirlas desde aquí exige bajar
   los archivos, que es decisión de Miguel. */

:root {
  --fondo: #f4f5f8;
  --barra: #f4f5f8;
  --superficie: #ffffff;
  --fila: #ffffff;
  --fila-borde: 1px solid #e3e6ec;
  --texto: #141a2b;
  --suave: #667085;
  --borde: #e3e6ec;
  --accion: #2f47d8;
  --accion-texto: #2f47d8;
  --sobre-accion: #ffffff;
  --mio: #2f47d8;
  --mio-texto: #ffffff;
  --suyo: #ffffff;
  --suyo-borde: 1px solid #e3e6ec;
  --ok: #12a150;
  --aviso-texto: #8a5a00;
  --aviso: #fff2d1;
  --error: #b42318;
  --fuente: "Onest", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, Menlo, monospace;
  --espaciado: -0.02em;
  --radio: 14px;
  --radio-grande: 16px;
  --radio-burbuja: 18px;
  --radio-avatar: 13px;
  --separacion: 8px;
  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-tema]) {
    --fondo: #121417; --barra: #16191d; --superficie: #1c2025; --fila: transparent;
    --fila-borde: 0; --texto: #e9e6df; --suave: #8d9199; --borde: #262a30;
    --accion: #f0a445; --accion-texto: #f4b560; --sobre-accion: #1b1305;
    --mio: #2a2f37; --mio-texto: #f1ede5; --suyo: transparent; --suyo-borde: 1px solid #2c3139;
    --ok: #5fcf8a; --aviso-texto: #f4b560; --aviso: #2d2415; --error: #ff8a80;
    --fuente: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
    --espaciado: -0.01em;
    --radio: 8px; --radio-grande: 10px; --radio-burbuja: 10px; --radio-avatar: 8px; --separacion: 0px;
    color-scheme: dark;
  }
}

/* Tinta: clara y sobria, azul cobalto. */
:root[data-tema="tinta"] {
  --fondo: #f4f5f8; --barra: #f4f5f8; --superficie: #ffffff; --fila: #ffffff;
  --fila-borde: 1px solid #e3e6ec; --texto: #141a2b; --suave: #667085; --borde: #e3e6ec;
  --accion: #2f47d8; --accion-texto: #2f47d8; --sobre-accion: #ffffff;
  --mio: #2f47d8; --mio-texto: #ffffff; --suyo: #ffffff; --suyo-borde: 1px solid #e3e6ec;
  --ok: #12a150; --aviso-texto: #8a5a00; --aviso: #fff2d1; --error: #b42318;
  --fuente: "Onest", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --espaciado: -0.02em;
  --radio: 14px; --radio-grande: 16px; --radio-burbuja: 18px; --radio-avatar: 13px; --separacion: 8px;
  color-scheme: light;
}

/* Consola: oscura y densa, ámbar. */
:root[data-tema="consola"] {
  --fondo: #121417; --barra: #16191d; --superficie: #1c2025; --fila: transparent;
  --fila-borde: 0; --texto: #e9e6df; --suave: #8d9199; --borde: #262a30;
  --accion: #f0a445; --accion-texto: #f4b560; --sobre-accion: #1b1305;
  --mio: #2a2f37; --mio-texto: #f1ede5; --suyo: transparent; --suyo-borde: 1px solid #2c3139;
  --ok: #5fcf8a; --aviso-texto: #f4b560; --aviso: #2d2415; --error: #ff8a80;
  --fuente: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --espaciado: -0.01em;
  --radio: 8px; --radio-grande: 10px; --radio-burbuja: 10px; --radio-avatar: 8px; --separacion: 0px;
  color-scheme: dark;
}

/* Salvia: cálida y redonda, verde profundo. */
:root[data-tema="salvia"] {
  --fondo: #eef2ec; --barra: #eef2ec; --superficie: #ffffff; --fila: #ffffff;
  --fila-borde: 0; --texto: #17261f; --suave: #5f6f66; --borde: #d8e0d6;
  --accion: #1f5e4b; --accion-texto: #1f5e4b; --sobre-accion: #f3faf6;
  --mio: #1f5e4b; --mio-texto: #f3faf6; --suyo: #ffffff; --suyo-borde: 0;
  --ok: #2f9e62; --aviso-texto: #8a4b12; --aviso: #fbe7d3; --error: #b42318;
  --fuente: "Nunito Sans", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --espaciado: -0.015em;
  --radio: 20px; --radio-grande: 50%; --radio-burbuja: 22px; --radio-avatar: 50%; --separacion: 8px;
  color-scheme: light;
}

* { box-sizing: border-box; }

/* Lo que tiene `hidden` no se ve, aunque una regla de abajo le ponga
   display (el formulario es flex; los botones del menú llevan `all: unset`,
   que borra el display:none que el navegador le da a hidden). */
[hidden] { display: none !important; }

html, body {
  margin: 0;
  height: 100%;
  background: var(--fondo);
  color: var(--texto);
  font: 16px/1.45 var(--fuente);
}

#app { height: 100%; max-width: 760px; margin: 0 auto; }

.pantalla { display: none; height: 100%; flex-direction: column; }
.pantalla.activa { display: flex; }

#pantalla-cargando, #pantalla-fuera { align-items: center; justify-content: center; padding: 16px; }

.tarjeta {
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio-grande);
  padding: 24px;
  max-width: 420px;
}

h1 { font-size: 1.15rem; margin: 0; letter-spacing: var(--espaciado); }
h2 { font-size: .8rem; margin: 18px 16px 6px; color: var(--suave); text-transform: uppercase; letter-spacing: .06em; }
.suave { color: var(--suave); margin: 0; font-size: .9rem; }
.margen { padding: 0 16px; margin: 12px 0; }
.error { color: var(--error); }

.barra {
  display: flex; align-items: center; gap: 8px;
  padding: calc(env(safe-area-inset-top) + 10px) 12px 10px;
  background: var(--barra);
  border-bottom: 1px solid var(--borde);
}
.barra .titulo { flex: 1; min-width: 0; }
.barra h1 { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

button { font: inherit; color: inherit; cursor: pointer; }
.icono {
  background: none; border: 0; font-size: 1.5rem; line-height: 1;
  width: 40px; height: 40px; border-radius: 10px;
}
.icono:hover { background: var(--borde); }
.peligro {
  background: none; border: 1px solid var(--error); color: var(--error);
  border-radius: 10px; padding: 10px 14px;
}

.lista { list-style: none; margin: 0; padding: 8px 12px; overflow-y: auto; }
.lista li {
  background: var(--fila); border: var(--fila-borde);
  border-radius: var(--radio); padding: 14px; margin-bottom: var(--separacion);
}
.lista li button { all: unset; display: block; width: 100%; cursor: pointer; }
.lista .detalle { color: var(--suave); font-size: .85rem; }

.aviso {
  margin: 0; padding: 8px 14px; font-size: .9rem;
  background: var(--aviso); color: var(--aviso-texto);
}

.mensajes {
  list-style: none; margin: 0; padding: 12px;
  flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 6px;
}
.mensaje {
  max-width: 82%; padding: 9px 12px; border-radius: var(--radio-burbuja);
  white-space: pre-wrap; overflow-wrap: anywhere;
}
.mensaje.salida { align-self: flex-start; background: var(--suyo); border: var(--suyo-borde); border-bottom-left-radius: 6px; }
.mensaje.entrada { align-self: flex-end; background: var(--mio); color: var(--mio-texto); border-bottom-right-radius: 6px; }
.mensaje .estado { display: block; font: .72rem var(--mono); opacity: .8; margin-top: 2px; text-align: right; }
.mensaje.sin_respuesta { outline: 2px solid var(--error); }

.formulario {
  display: flex; gap: 8px; align-items: flex-end;
  padding: 8px 12px calc(env(safe-area-inset-bottom) + 8px);
  background: var(--barra); border-top: 1px solid var(--borde);
}
.formulario textarea {
  flex: 1; resize: none; max-height: 160px;
  font: inherit; color: inherit; background: var(--superficie);
  border: 1px solid var(--borde); border-radius: 20px; padding: 9px 14px;
}
.formulario button {
  width: 42px; height: 42px; border-radius: 50%; border: 0;
  background: var(--accion); color: var(--sobre-accion); font-size: 1.1rem;
}
.formulario button:disabled { opacity: .4; }
.formulario .icono {
  width: 40px; height: 40px; border-radius: 50%; border: 0;
  background: none; color: var(--suave); font-size: 1.25rem;
}
.formulario .icono.activo { background: var(--error); color: #fff; }

.grabando {
  margin: 0; padding: 8px 14px; font-size: .9rem;
  background: var(--aviso); color: var(--aviso-texto);
}
.grabando .punto {
  display: inline-block; width: 10px; height: 10px; border-radius: 50%;
  background: var(--error); animation: latir 1s infinite;
}
.grabando button { all: unset; text-decoration: underline; cursor: pointer; }
@keyframes latir { 50% { opacity: .2; } }

.adjunto { display: block; max-width: 100%; margin-bottom: 4px; }
.adjunto img, .adjunto video { display: block; max-width: 100%; max-height: 320px; border-radius: 10px; }
.adjunto audio { width: min(280px, 70vw); }
a.descarga { color: inherit; text-decoration: underline; overflow-wrap: anywhere; }
.mensaje.subiendo progress { display: block; width: 100%; height: 6px; margin-top: 6px; }

/* Agregar otro dispositivo. */
.codigo {
  font: 700 2rem/1.2 var(--mono); letter-spacing: .12em; text-align: center;
  margin: 12px 0; user-select: all;
}
.secundario {
  background: none; border: 1px solid var(--borde); color: var(--texto);
  border-radius: 10px; padding: 10px 14px;
}
.vinculo { display: flex; gap: 8px; }
.vinculo input {
  flex: 1; font: 600 1.1rem var(--mono); letter-spacing: .1em; text-transform: uppercase;
  color: inherit; background: var(--superficie); border: 1px solid var(--borde);
  border-radius: 10px; padding: 10px 12px; min-width: 0;
}
.vinculo button, #aprobar-vinculo {
  background: var(--accion); color: var(--sobre-accion); border: 0;
  border-radius: 10px; padding: 10px 16px; font-weight: 600;
}

/* Conversaciones dentro de un espacio. */
.lista .fila { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
.lista .fila time { font: .75rem var(--mono); color: var(--suave); font-variant-numeric: tabular-nums; }
.lista .detalle { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nuevo {
  margin: 12px 12px 4px; padding: 11px 14px; border-radius: var(--radio);
  border: 1.5px dashed var(--borde); background: none; color: var(--accion-texto);
  font-weight: 600; text-align: left;
}
.enlace {
  margin: 4px 16px 16px; padding: 8px 0; background: none; border: 0;
  color: var(--suave); text-align: left; text-decoration: underline;
}
.menu-flotante {
  position: absolute; right: 12px; top: calc(env(safe-area-inset-top) + 58px); z-index: 2;
  display: flex; flex-direction: column; min-width: 220px;
  background: var(--superficie); border: 1px solid var(--borde);
  border-radius: var(--radio); box-shadow: 0 10px 30px -12px rgba(0,0,0,.35); overflow: hidden;
}
.menu-flotante button {
  all: unset; padding: 12px 16px; cursor: pointer; border-bottom: 1px solid var(--borde);
}
.menu-flotante button:last-child { border-bottom: 0; }
.menu-flotante button:hover { background: var(--fondo); }
#pantalla-chat { position: relative; }

/* Apariencia: los tres temas, cada uno con su vista previa en sus colores. */
.temas { list-style: none; margin: 0; padding: 8px 12px; }
.temas li { margin-bottom: 8px; }
.tema {
  all: unset; display: flex; width: 100%; align-items: center; gap: 12px;
  padding: 10px; border-radius: var(--radio); cursor: pointer;
  background: var(--superficie); border: 1.5px solid var(--borde);
}
.tema[aria-checked="true"] { border-color: var(--accion); }
.tema .mini {
  width: 56px; height: 68px; border-radius: 10px; padding: 8px 6px; flex: 0 0 auto;
  display: flex; flex-direction: column; gap: 5px; border: 1px solid rgba(128,128,128,.25);
}
.tema .mini i { display: block; height: 10px; border-radius: 5px; }
.tema .nombre { font-weight: 700; }
.tema .detalle { color: var(--suave); font-size: .85rem; }
.tema .radio {
  margin-left: auto; width: 20px; height: 20px; border-radius: 50%; flex: 0 0 auto;
  border: 1.5px solid var(--borde); display: grid; place-items: center;
  font-size: 11px; color: var(--accion-texto);
}
.tema[aria-checked="true"] .radio { border-color: var(--accion); }
