/* ==========================================================================
   Chatper · call.css
   Llamada de la sala (SPEC §56.2, boceto B): «Hablar» de la cabecera del chat (dock/room-header.js), la tarjeta de
   la llamada (call/call-card.js: abajo en la columna Salas; en el móvil, flotando encima de la caja de escribir) y
   «En llamada» de la lista de salas (dock/rooms-panel.js). Solo usa los tokens de base.css.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. «Hablar» en la cabecera del chat
   -------------------------------------------------------------------------- */
.call-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  flex-shrink: 0;
  height: 2rem;
  min-width: 2rem;
  margin-right: 0.15rem;
  padding: 0 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  background: var(--bg-elevated);
  color: var(--text);
  font: inherit;
  font-size: 0.85rem;
  font-weight: 600;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.call-btn[hidden], .call-btn-text[hidden] { display: none; }
.call-btn:hover { background: var(--surface-2); border-color: var(--border-strong); }
.call-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.call-btn svg { flex: none; }
/* Otras personas ya están en la llamada (y yo no): teñido del acento, sin gritar */
.call-btn.has-others { border-color: color-mix(in srgb, var(--accent) 40%, var(--border)); background: var(--accent-soft); color: var(--accent-text); }
.call-btn.has-others:hover { background: color-mix(in srgb, var(--accent) 20%, transparent); }
/* En la llamada de ESTA sala: verde relleno, solo el icono (pulsarlo ilumina la tarjeta) */
.call-btn.is-on { width: 2rem; padding: 0; border-color: var(--accent); background: var(--accent); color: var(--accent-contrast); }
.call-btn.is-on:hover { border-color: var(--accent-hover); background: var(--accent-hover); }
/* Entrando (pidiendo el micro, conectando): el acento suave y los auriculares latiendo */
.call-btn.is-joining {
  border-color: color-mix(in srgb, var(--accent) 55%, var(--border));
  background: var(--accent-soft);
  color: var(--accent-text);
  cursor: progress;
}
.call-btn.is-joining svg { animation: call-pending 0.9s var(--ease) infinite alternate; }
@keyframes call-pending { to { opacity: 0.35; } }
/* Cabecera estrecha: solo el icono (el title y la etiqueta lo dicen) */
@container (max-width: 22rem) {
  .call-btn { width: 2rem; padding: 0; }
  .call-btn-text { display: none; }
}

/* --------------------------------------------------------------------------
   2. Tarjeta de la llamada
   -------------------------------------------------------------------------- */
.call-card {
  --call-card-bg: color-mix(in srgb, var(--accent) 12%, var(--bg-elevated));
  --avatar-ring: var(--call-card-bg);
  container: call-card / inline-size;
  position: relative;
  flex-shrink: 0;
  margin: 0.4rem 0.6rem;
  padding: 0.55rem 0.6rem 0.55rem 0.7rem;
  border-radius: 0.8rem;
  background: var(--call-card-bg);
  color: var(--accent-text);
  font-size: 0.85rem;
  line-height: 1.3;
}
.call-card[hidden] { display: none; }

.call-card-top { display: flex; align-items: center; gap: 0.45rem; min-width: 0; font-weight: 700; }
.call-card-live { display: inline-flex; align-items: center; gap: 0.45rem; flex: none; white-space: nowrap; }
.call-card-dot {
  flex: none;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent);
}
.call-card.is-joining .call-card-dot { animation: call-pending 0.9s var(--ease) infinite alternate; }
/* «· <sala>»: lleva a la sala */
.call-card-room {
  min-width: 0;
  margin-left: auto;
  padding: 0.05rem 0.25rem;
  border: 0;
  border-radius: var(--radius-sm);
  background: none;
  color: var(--text-muted);
  font: inherit;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.call-card-room:hover { color: var(--text); text-decoration: underline; text-underline-offset: 2px; }
.call-card-room:focus-visible { outline: none; box-shadow: var(--focus-ring); }

.call-card-row { display: flex; align-items: center; gap: 0.5rem; min-width: 0; margin-top: 0.45rem; }
/* Quién está: el anillo del acento, en quien habla (poco solape: con dos hablando, el de al lado no tapa la cara) */
.call-card-people { display: inline-flex; align-items: center; flex: none; padding: 0 0.1rem; }
.call-card-people > * + * { margin-left: -0.125rem; }
.call-card-people .avatar {
  box-shadow: 0 0 0 1.5px var(--call-card-bg);
  transition: box-shadow 120ms var(--ease), opacity var(--dur) var(--ease);
}
.call-card-people .avatar.is-speaking { box-shadow: 0 0 0 1.5px var(--call-card-bg), 0 0 0 3.5px var(--accent); }
/* Conectando el audio con esa persona: más claro; sin conexión: anillo de aviso */
.call-card-people .avatar.is-pending { opacity: 0.5; }
.call-card-people .avatar.is-failed { box-shadow: 0 0 0 1.5px var(--call-card-bg), 0 0 0 3px var(--warning); }
.call-card-more {
  position: relative;
  display: grid;
  place-items: center;
  min-width: 1.75rem;
  height: 1.625rem;
  padding: 0 0.35rem 0 0.55rem;
  border-radius: var(--radius-full);
  background: var(--bg-elevated);
  color: var(--text-muted);
  font-size: 0.7rem;
  font-weight: 700;
}
/* Hasta dos líneas («Solo tú: esperando a alguien» no cabe en una en la columna Salas) */
.call-card-status {
  display: -webkit-box;
  flex: 1;
  min-width: 0;
  overflow: hidden;
  color: var(--text-muted);
  font-size: 0.82rem;
  line-height: 1.2;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
}

.call-card-btn {
  display: grid;
  place-items: center;
  flex: none;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: var(--bg-elevated);
  box-shadow: var(--shadow-sm);
  color: var(--text);
  cursor: pointer;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease), opacity var(--dur) var(--ease);
}
.call-card-btn:hover:not(:disabled) { background: var(--surface-2); }
.call-card-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.call-card-btn:disabled { opacity: 0.5; cursor: default; }
/* Columna Salas estrecha (sin llegar al modo compacto): el estado, en su propia línea debajo */
@container call-card (max-width: 15rem) {
  .call-card-row { flex-wrap: wrap; row-gap: 0.35rem; }
  .call-card-people { margin-right: auto; }
  .call-card-status { flex-basis: 100%; order: 1; }
}
/* En pantallas táctiles, botones algo más grandes */
@media (pointer: coarse) {
  .call-card-btn { width: 2.25rem; height: 2.25rem; }
}
/* Micro apagado: tachado, en rojo suave; colgar, rojo suave */
.call-card-mic.is-off { color: var(--danger-text); }
.call-card-leave { background: color-mix(in srgb, var(--danger) 14%, var(--bg-elevated)); color: var(--danger-text); }
.call-card-leave:hover:not(:disabled) { background: color-mix(in srgb, var(--danger) 24%, var(--bg-elevated)); }

/* Modo compacto de Salas: vertical, el punto (lleva a la sala), el micro y colgar */
.call-card-compact-dot { display: none; }
.call-card.is-compact { margin: 0.35rem 0.25rem; padding: 0.45rem 0.25rem; }
.call-card.is-compact .call-card-top,
.call-card.is-compact .call-card-people,
.call-card.is-compact .call-card-status { display: none; }
.call-card.is-compact .call-card-row { flex-direction: column; gap: 0.4rem; margin-top: 0; }
.call-card.is-compact .call-card-compact-dot {
  display: grid;
  place-items: center;
  width: 2rem;
  height: 1.25rem;
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: none;
  cursor: pointer;
}
.call-card-compact-dot:focus-visible { outline: none; box-shadow: var(--focus-ring); }

/* Móvil: flotando encima de la caja de escribir del panel visible (--call-float-bottom lo pone dock.js: lo que mide la
   caja desde abajo, así sube con ella y con el teclado). Sin caja, abajo con la zona segura. */
.call-card-float {
  position: absolute;
  right: 0;
  bottom: var(--call-float-bottom, calc(0.6rem + env(safe-area-inset-bottom, 0px)));
  left: 0;
  z-index: 20;
  max-width: min(36rem, calc(100% - 1.2rem - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)));
  margin: 0 auto;
  border: 1px solid color-mix(in srgb, var(--accent) 16%, var(--border));
  box-shadow: var(--shadow);
}
/* El chat deja sitio debajo de lo último (y el «bajar al final» y «escribiendo…» van encima de la tarjeta) */
.dock.is-mobile .dock-panel-chat.has-call-float .chat-scroll { padding-bottom: calc(2.25rem + var(--call-float-h, 0px)); }
.dock.is-mobile .dock-panel-chat.has-call-float .chat-jump { bottom: calc(0.9rem + var(--call-float-h, 0px)); }
.dock.is-mobile .dock-panel-chat.has-call-float .chat-typing { bottom: calc(0.4rem + var(--call-float-h, 0px)); }

/* §54 «aquí está»: el «Hablar» de la cabecera (ya en la llamada) la ilumina con dos pulsos suaves (call-card.js quita
   .is-found a los 1,2 s); con «reducir movimiento», quieta con el halo. */
.call-card.is-found { animation: call-found 1s ease-out; }
@keyframes call-found {
  18%, 62% { box-shadow: 0 0 0 2px var(--accent), 0 0 0 8px color-mix(in srgb, var(--accent) 22%, transparent); }
  40% { box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent); }
}

/* --------------------------------------------------------------------------
   3. «En llamada» en la lista de salas (la píldora y el punto son los de «● En directo», board-live.css)
   -------------------------------------------------------------------------- */
.room-live-pill.is-call { gap: 0.25rem; padding-left: 0.35rem; }
.room-live-pill .room-live-call { flex: none; }
/* Compacto: los auriculares sobre el emoji, en vez del punto */
.room-live-dot.is-call {
  display: grid;
  place-items: center;
  left: 0.1rem;
  bottom: 0.1rem;
  width: 0.85rem;
  height: 0.85rem;
  color: var(--accent-contrast);
  animation: none;
}

@media (prefers-reduced-motion: reduce) {
  .call-btn.is-joining svg,
  .call-card.is-joining .call-card-dot { animation: none; opacity: 0.6; }
  .call-card-people .avatar { transition: none; }
  .call-card.is-found {
    animation: none;
    box-shadow: 0 0 0 2px var(--accent), 0 0 0 8px color-mix(in srgb, var(--accent) 22%, transparent);
  }
}
