/* chat-grupal.css — Chat grupal, campana de avisos y botones flotantes del mapa */

/* ------------------------------------------------------------------------
   Panel del chat (1 a 1 y grupal)

   El alto se toma del contenedor (.sheet-body), NO del viewport. El sheet no
   mide 100vh: en móvil va de `top: safe-area + 172px` a `bottom: safe-area +
   80px` (ver experiencia.css), así que a 375x667 el cuerpo visible mide ~314
   px. Con el `height: calc(100vh - 130px)` que había antes la caja medía 537
   px y empujaba el compositor 239 px por debajo del borde visible: el usuario
   veía un hueco en blanco y ninguna caja donde escribir. En Safari de iOS era
   peor todavía, porque allí 100vh no descuenta las barras del navegador.

   `min-height: 0` es imprescindible en el panel y en la lista de mensajes:
   sin él un hijo flex no baja de su alto de contenido y el compositor vuelve
   a salirse en cuanto hay conversación larga.
   ------------------------------------------------------------------------ */
.chat-pane { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.chat-pane #chatMsgs { min-height: 0; }
/* Un solo scroll: el de la lista de mensajes, no el del panel entero. */
.sheet-body:has(> .chat-pane) { overflow: hidden; }

/* ------------------------------------------------------------------------
   Bandeja de chats (lista tipo WhatsApp: foto · nombre · último mensaje ·
   hora · globo de no leídos). Una sola lista para 1 a 1 y grupos.
   ------------------------------------------------------------------------ */
.chat-lista { display: flex; flex-direction: column; }
.chat-fila {
  display: flex; align-items: center; gap: 12px; padding: 11px 10px; cursor: pointer;
  border-radius: 14px; border-bottom: 1px solid var(--line);
  transition: background .15s;
}
.chat-fila:last-child { border-bottom: 0; }
.chat-fila:hover { background: var(--tinte); }
.chat-av-grupo {
  width: 46px; height: 46px; border-radius: 50%; flex: 0 0 auto; display: grid; place-items: center;
  font-size: 21px; background: linear-gradient(135deg, var(--aviso-suave), var(--marca-suave));
  border: 1px solid var(--line); color: var(--azul);
}
.chat-av-grupo .ico { width: 22px; height: 22px; }
/* min-width:0 es lo que permite que el texto largo se recorte en vez de
   empujar la hora y el globo fuera de la fila. */
.chat-txt { flex: 1; min-width: 0; }
.chat-l1, .chat-l2 { display: flex; align-items: center; gap: 8px; }
.chat-l2 { margin-top: 2px; }
.chat-nombre { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-hora { flex: 0 0 auto; font-size: 11.5px; color: var(--mut); }
.chat-previo { flex: 1; min-width: 0; font-size: 13px; color: var(--txt-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-globo {
  flex: 0 0 auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px;
  background: var(--azul); color: #fff; font-size: 11.5px; font-weight: 700;
  display: grid; place-items: center;
}
/* Una conversación con mensajes nuevos pesa más: nombre y vista previa en
   el color fuerte y la hora en azul. */
.chat-fila.sin-leer .chat-nombre { font-weight: 800; }
.chat-fila.sin-leer .chat-previo { color: var(--txt); font-weight: 600; }
.chat-fila.sin-leer .chat-hora { color: var(--azul); font-weight: 700; }

/* Globo de la barra de navegación (total de mensajes sin leer). Hereda la
   posición de `.navbar button i`, pero con número dentro. */
.navbar button .nav-num {
  position: absolute; top: 4px; right: 12px; min-width: 17px; height: 17px; padding: 0 4px;
  border-radius: 9px; background: var(--peligro); color: #fff;
  font-size: 10px; font-weight: 700; font-style: normal; line-height: 1;
  display: none; place-items: center; border: 2px solid var(--panel);
}

.gc-head {
  display: flex; align-items: center; gap: 10px; padding: 10px 12px; margin: 0 0 8px;
  border-radius: var(--r-md); background: linear-gradient(135deg, var(--aviso-suave), var(--marca-suave));
  border: 1px solid var(--line);
}
.gc-icon { width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center; font-size: 22px; background: var(--panel); box-shadow: var(--sh-sm); flex: 0 0 auto; }
.gc-stack { display: flex; align-items: center; }
.gc-av {
  width: 28px; height: 28px; border-radius: 50%; border: 2px solid var(--panel);
  background: var(--lima); display: grid; place-items: center; overflow: hidden;
  font-size: 11px; font-weight: 700; color: var(--lima-txt); flex: 0 0 auto;
}
.gc-av.gc-more { background: var(--tinte-3); color: var(--txt); }
.gc-msgs { flex: 1; overflow-y: auto; padding: 12px 4px; display: flex; flex-direction: column; gap: 8px; border-radius: 12px; }
.gmsg { display: flex; align-items: flex-end; gap: 7px; align-self: flex-start; max-width: 88%; animation: bubIn .2s ease; }
.gmsg-av {
  width: 30px; height: 30px; border-radius: 50%; overflow: hidden; flex: 0 0 auto;
  background: var(--tinte-2); display: grid; place-items: center; font-size: 12px; font-weight: 700; color: var(--txt);
  border: 2px solid var(--panel);
}
.gc-inputbar { display: flex; gap: 8px; padding-top: 10px; border-top: 1px solid var(--line); }
.gc-inputbar input { flex: 1; padding: 12px 16px; border-radius: var(--r-pill); border: 1px solid var(--line-2); background: var(--campo); color: var(--txt); outline: none; font-size: 14px; }
.gc-inputbar input:focus { border-color: var(--azul); background: var(--panel); }
.gc-send { width: 46px; height: 46px; border: none; border-radius: 50%; cursor: pointer; font-size: 17px; color: #fff; background: var(--azul); box-shadow: 0 6px 14px color-mix(in srgb, var(--azul) 30%, transparent); transition: transform .1s; }
.gc-send:active { transform: scale(.92); }

/* Campana */
.bell { cursor: pointer; position: relative; font-size: 16px; padding: 0; width: 44px; justify-content: center; }
.bell .ico { width: 20px; height: 20px; }
.bell:hover { color: var(--azul); }
.bell.ring { animation: ring .5s ease; }
@keyframes ring { 0%, 100% { transform: rotate(0); } 20% { transform: rotate(15deg); } 40% { transform: rotate(-12deg); } 60% { transform: rotate(8deg); } 80% { transform: rotate(-4deg); } }
.badge-count {
  position: absolute; top: -3px; right: -3px; min-width: 18px; height: 18px;
  background: var(--peligro); color: #fff; border-radius: 10px; font-size: 10.5px; font-weight: 700;
  display: grid; place-items: center; padding: 0 4px; border: 2px solid var(--panel);
}
.notif-item { display: flex; gap: 12px; align-items: center; padding: 11px 10px; border-radius: 12px; cursor: pointer; margin-bottom: 4px; }
.notif-item:hover { background: var(--tinte); }
.notif-item .ico { font-size: 18px; width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; background: var(--campo); flex: 0 0 auto; }
.notif-item.unread { background: var(--marca-suave); }

/* Botones flotantes del mapa */
.fab {
  position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
  z-index: 10; display: flex; flex-direction: column; gap: 8px;
}
.fab button {
  width: 46px; height: 46px; border-radius: 50%; cursor: pointer; font-size: 19px;
  display: grid; place-items: center; padding: 0;
  background: var(--vidrio); color: var(--txt); border: 1px solid var(--line); box-shadow: var(--sh-md);
  backdrop-filter: blur(18px) saturate(1.4); -webkit-backdrop-filter: blur(18px) saturate(1.4);
  transition: transform .12s var(--ease), color .15s, background .15s;
}
.fab button:hover { color: var(--azul); transform: scale(1.05); }
.fab button .ico { width: 21px; height: 21px; }
.fab button.events { color: var(--violeta); }
.fab button.add { background: var(--lima); color: var(--lima-txt); border-color: transparent; }
