/* =========================================================
   RiosTec Comunidad — Panel del streamer (UI de producto).
   Identidad RiosTec: azul / blanco / negro. Mobile-first. BEM.
   Color/tipografía por variables CSS. Desde SPEC 0006 el panel NO define su
   propio set de color: consume los tokens del TEMA activo ([data-tema] en <html>,
   assets/comunidad.css), así panel y login obedecen los 3 temas (navy/OLED/Día).
   ========================================================= */

.rtc-panel {
  /* Un solo sistema de tokens: el del TEMA activo (SPEC 0006). El panel ya NO
     define su propio set de color — consume los tokens que [data-tema] publica en
     <html> (assets/comunidad.css): --azul/--superficie/--texto/--grad/--vivo-rgb/
     --sobre-acento/--sombra-modal/--radio/--tap… Así el panel y el login obedecen
     los 3 temas (navy / OLED / Día) sin CSS extra. Aquí solo queda lo NO cromático. */
  font-family: 'Inter', system-ui, sans-serif;
  color: var(--texto);
  /* El panel logueado respira en desktop: ancho de lectura cómodo y centrado
     (item 8 del overhaul). El login mantiene su tope estrecho propio (420px). */
  max-width: 860px;
  margin: 0 auto;
}

.rtc-panel *, .rtc-panel *::before, .rtc-panel *::after { box-sizing: border-box; }
.rtc-panel [hidden] { display: none !important; }

/* --------------------------------------------------------------
   FIX de apilado del modal (overhaul §1).
   <main class="rtc-main rtc-main--panel"> hereda de .rtc-main (comunidad.css)
   `position:relative; z-index:1`, lo que crea un CONTEXTO DE APILADO: el
   .rtc-modal (fixed, z-index:1000) queda atrapado dentro de ese contexto y el
   <footer class="rtc-foot"> (hermano de main, z-index:1, posterior en el DOM) se
   pinta ENCIMA del modal. Neutralizamos el contexto SOLO en la página del panel
   (no se toca .rtc-main / .rtc-foot base de comunidad.css): así el modal fixed
   sube al tope del viewport y supera al footer. */
.rtc-main--panel { position: static; z-index: auto; }

/* Bloqueo de scroll del fondo mientras un modal está abierto (clase puesta por
   app.js/admin.js). Evita que el contenido y el footer se desplacen bajo el
   overlay. */
body.rtc-modal-abierto { overflow: hidden; }

/* ---------------------------------------------------------
   Barra superior del panel: identidad de la sesión + Cerrar sesión.
   Mantiene "Cerrar sesión" SIEMPRE a la vista (antes solo vivía dentro de
   la pestaña "Mi cuenta"). Logout discreto: gris en reposo, rojo al hover.
   --------------------------------------------------------- */
.rtc-panel__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.8rem 1rem;
  flex-wrap: wrap;
  padding-bottom: 1.1rem;
  margin-bottom: 1.3rem;
  border-bottom: 1px solid var(--borde);
}
.rtc-panel__user {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.rtc-panel__useravatar {
  flex: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--grad);
  color: var(--sobre-acento);
}
.rtc-panel__useravatar img { width: 100%; height: 100%; object-fit: cover; }
.rtc-panel__userini { font-weight: 700; font-size: 0.95rem; }
.rtc-panel__usertxt { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.rtc-panel__userhi { font-size: 0.78rem; color: var(--texto-suave); }
.rtc-panel__username {
  font-weight: 700;
  color: var(--texto);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 50vw;
}
.rtc-panel__salir {
  gap: 8px;
  color: var(--texto-suave);
}
.rtc-panel__salir:hover { color: var(--error); border-color: rgba(var(--error-rgb), 0.4); }
.rtc-panel__salirico { display: inline-flex; }
.rtc-panel__salirico svg { width: 18px; height: 18px; }

@media (max-width: 480px) {
  .rtc-panel__salir { padding: 0 14px; }
  .rtc-panel__username { max-width: 44vw; }
}

.rtc-panel--aviso { padding: 1.5rem; }
.rtc-panel__avisoacc { margin: 1.1rem 0 0; text-align: center; }
.rtc-panel__aviso {
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1.2rem;
  color: var(--texto-suave);
  text-align: center;
}

/* ---------------------------------------------------------
   Tabs
   --------------------------------------------------------- */
.rtc-panel__tabs {
  display: inline-flex;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: 3px;
  margin-bottom: 1.2rem;
}
.rtc-panel__tab {
  min-height: 40px;
  padding: 0 18px;
  border: 0;
  background: transparent;
  color: var(--texto-suave);
  font-weight: 600;
  font-size: 0.95rem;
  border-radius: 999px;
  cursor: pointer;
}
.rtc-panel__tab.is-active { background: var(--grad); color: var(--sobre-acento); }

/* ---------------------------------------------------------
   "En vivo" switch
   --------------------------------------------------------- */
.rtc-panel__live { margin-bottom: 1rem; }
.rtc-panel__switch {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: var(--tap);
  cursor: pointer;
}
.rtc-panel__switch input { width: 20px; height: 20px; accent-color: var(--azul); }
.rtc-panel__switchlbl { font-weight: 600; }
/* Todos los checkboxes del panel en azul de marca: evita la casilla blanca nativa
   sobre el shell oscuro (gate ⑥d guardian-tema). Cubre los sueltos del modal
   (Destacado en el directorio) además del switch "en vivo" y "mantener sesión". */
.rtc-panel input[type="checkbox"] { accent-color: var(--azul); }

/* ---------------------------------------------------------
   Cabecera + botones
   --------------------------------------------------------- */
.rtc-panel__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.rtc-panel__h2 { font-size: 1.3rem; font-weight: 700; }

.rtc-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--tap);
  padding: 0 18px;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  background: var(--superficie);
  color: var(--texto);
  font-family: inherit;
  font-weight: 600;
  font-size: 0.95rem;
  cursor: pointer;
  text-decoration: none;
  transition: border-color 0.15s, transform 0.1s;
}
.rtc-btn:hover { border-color: var(--azul); }
.rtc-btn:active { transform: scale(0.98); }
.rtc-btn--primario { background: var(--grad); color: var(--sobre-acento); border-color: transparent; }
.rtc-btn--mini { min-height: 36px; padding: 0 12px; font-size: 0.88rem; }
.rtc-btn--peligro { color: var(--error); border-color: rgba(var(--error-rgb), 0.4); }
/* SPEC 0012 — estado ACTIVO de un toggle (p. ej. "Premium ✓" en la fila de Streamers):
   acento azul de marca para distinguirlo a simple vista de "Destacado" (★) y del resto. */
.rtc-btn--activo { color: var(--azul); border-color: var(--azul); background: rgba(var(--azul-rgb), 0.10); }

/* ---------------------------------------------------------
   Lista de streams
   --------------------------------------------------------- */
.rtc-panel__lista { list-style: none; display: flex; flex-direction: column; gap: 10px; padding: 0; }

.rtc-item {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 12px;
  align-items: center;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-left: 3px solid var(--azul);
  border-radius: var(--radio-sm);
  padding: 12px 14px;
}
.rtc-item--cancelado { opacity: 0.55; border-left-color: var(--gris); }
.rtc-item__fecha {
  font-weight: 700;
  color: var(--azul);
  white-space: nowrap;
  font-size: 0.9rem;
}
.rtc-item__cuerpo { min-width: 0; }
/* display:block para que el ellipsis FUNCIONE (en inline se ignora) y el título
   NO se concatene con el nombre del streamer ni se desborde bajo los botones de
   acción (re-audit ⑥d MENOR-2 + espaciado del dashboard "…nivelPixelKing"). */
.rtc-item__titulo { display: block; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rtc-item__meta { display: block; color: var(--texto-suave); font-size: 0.82rem; margin-top: 2px; }
.rtc-item__acciones { display: flex; gap: 6px; }
.rtc-item__acciones button { min-height: 36px; min-width: 36px; }

.rtc-panel__vacio { color: var(--texto-suave); padding: 1rem 0; }

/* ---------------------------------------------------------
   Formularios
   --------------------------------------------------------- */
.rtc-form { display: flex; flex-direction: column; gap: 1rem; }
.rtc-campo { display: flex; flex-direction: column; gap: 6px; border: 0; padding: 0; margin: 0; }
.rtc-campo--2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.rtc-campo__lbl { font-weight: 600; font-size: 0.9rem; }
.rtc-campo__in {
  min-height: var(--tap);
  padding: 10px 12px;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  background: var(--superficie);
  color: var(--texto);
  font-family: inherit;
  font-size: 1rem;
  width: 100%;
}
.rtc-campo__in::placeholder { color: var(--gris); opacity: 1; }
.rtc-campo__in:focus-visible { outline: 2px solid var(--azul); outline-offset: 1px; border-color: var(--azul); }
textarea.rtc-campo__in { min-height: 64px; resize: vertical; }
/* select hereda fondo/borde/texto de .rtc-campo__in; el color-scheme lo publica el
   TEMA en el root (dark en navy/OLED, light en Día), así el menú nativo del UA
   combina con cada tema en vez de forzar dropdown oscuro sobre fondo claro. */
select.rtc-campo__in { color-scheme: inherit; }
.rtc-campo__radios { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 6px; }
.rtc-campo__radios label { display: inline-flex; align-items: center; gap: 6px; min-height: var(--tap); }

.rtc-foto__btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: var(--tap);
  padding: 0 16px;
  border: 1px dashed var(--borde);
  border-radius: var(--radio-sm);
  cursor: pointer;
  background: var(--superficie-2);
}

.rtc-plat-fila { display: grid; grid-template-columns: 130px 1fr auto; gap: 8px; align-items: center; margin-bottom: 8px; }
.rtc-plat-fila select, .rtc-plat-fila input { min-height: var(--tap); }
/* Botón ✕ de la fila: área táctil garantizada (SPEC 0018, guía de diseño). */
.rtc-plat-fila .rtc-btn--peligro { min-width: 44px; min-height: var(--tap); }
/* Error por fila del repetidor de redes (validación por dominio, SPEC 0018 §A/§B). */
.rtc-plat-fila__err { grid-column: 1 / -1; color: var(--error); font-size: 0.82rem; line-height: 1.35; margin: 2px 0 0; }
.rtc-plat-fila__err:empty { display: none; }
/* Móvil (≤520px, cubre 390/414): select + ✕ en una línea y la URL a ancho
   completo debajo, para que el streamer vea el enlace que pega (SPEC 0018, UX). */
@media (max-width: 520px) {
  .rtc-plat-fila { grid-template-columns: 1fr auto; }
  .rtc-plat-fila [data-rtc-plat-tipo] { grid-column: 1; grid-row: 1; }
  .rtc-plat-fila .rtc-btn--peligro { grid-column: 2; grid-row: 1; }
  .rtc-plat-fila [data-rtc-plat-url] { grid-column: 1 / -1; grid-row: 2; }
}

/* ---------------------------------------------------------
   Acordeón de redes en el REGISTRO (SPEC 0018 §A) — colapsado; reusa el
   repetidor #rtc-plats-lista. El summary habla el lenguaje del toggle de
   filtros: superficie + borde + radio-sm + área táctil + foco azul.
   --------------------------------------------------------- */
.rtc-reg-redes { border-top: 1px solid var(--borde); margin-top: 1rem; padding-top: 1rem; }
.rtc-reg-redes__sum {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: var(--tap);
  padding: 8px 12px;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  background: var(--superficie-2);
  color: var(--texto);
  font-weight: 600;
  cursor: pointer;
  list-style: none;
}
.rtc-reg-redes__sum::-webkit-details-marker { display: none; }
.rtc-reg-redes__sum::after { content: "+"; margin-left: auto; font-size: 1.1rem; line-height: 1; color: var(--texto-suave); }
.rtc-reg-redes[open] .rtc-reg-redes__sum::after { content: "\2212"; }
.rtc-reg-redes__sum:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }
.rtc-reg-redes__cont { margin-top: 12px; }

.rtc-form__estado { font-size: 0.9rem; min-height: 1.2em; }
.rtc-form__estado.is-ok { color: var(--ok); }
.rtc-form__estado.is-error { color: var(--error); }
.rtc-form__pista, .rtc-form__pie { color: var(--texto-suave); font-size: 0.85rem; }

/* ---------------------------------------------------------
   Modal del editor de stream
   --------------------------------------------------------- */
.rtc-modal {
  position: fixed;
  inset: 0;
  /* Overlay un punto más opaco para aislar mejor el modal del shell con glow
     (overhaul §1). Velo navy en los 3 temas (--scrim); superficies del modal navy. */
  background: var(--scrim);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  z-index: 1000;
}
.rtc-modal__caja {
  /* Superficie elevada navy (tema.md §3): el modal vive sobre el overlay, así que
     usa --superficie-2 (un peldaño más claro que la card) + borde. */
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1.4rem;
  width: 100%;
  max-width: 520px;
  max-height: 92vh;
  overflow-y: auto;
  box-shadow: var(--sombra-modal);
}
/* Mini-modal de confirmación: más estrecho que el editor. */
.rtc-modal__caja--sm { max-width: 400px; }
.rtc-modal__tit { font-size: 1.3rem; font-weight: 700; margin-bottom: 1rem; }
.rtc-modal__texto { color: var(--texto-suave); line-height: 1.5; margin-bottom: 1.2rem; }
.rtc-modal__acciones { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; margin-top: 1.2rem; }

/* ---------------------------------------------------------
   Mi cuenta
   --------------------------------------------------------- */
.rtc-panel__sep {
  border: 0;
  border-top: 1px solid var(--borde);
  margin: 1.4rem 0;
}
.rtc-form__fuerza { color: var(--texto-suave); font-size: 0.85rem; min-height: 1.1em; }

/* ---------------------------------------------------------
   Pantalla de login. Consume los tokens del TEMA activo (SPEC 0006): ya NO
   define acento/subtítulo propios, así hereda navy / OLED / Día como el resto.
   El subtítulo/ayuda usan --texto-suave; el acento de enlaces, --azul-claro.
   Solo queda su layout centrado (no cromático).
   --------------------------------------------------------- */
.rtc-panel--login {
  /* Fluida: 100% con tope; los márgenes laterales los da el padding de .rtc-main.
     Sin ancho fijo que exceda el viewport (verificado 360/390/414). */
  width: 100%;
  max-width: 420px;
  margin: 0 auto;
  padding: 0;
}
.rtc-login__form {
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1.6rem 1.3rem;
  box-shadow: var(--sombra-modal);
}
.rtc-login__tit {
  font-family: 'Rajdhani', 'Inter', system-ui, sans-serif;
  font-size: 1.6rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  color: var(--texto);
  text-align: center;
}
.rtc-login__sub {
  color: var(--texto-suave);
  font-size: 0.95rem;
  margin-top: -0.4rem;
  text-align: center;
}
/* Inputs del login: heredan el tratamiento oscuro de .rtc-campo__in (base). */
/* Etiqueta completa clicable, área táctil >=44px (toda la fila). */
.rtc-login__recordar {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: var(--tap);
  color: var(--texto-suave);
  font-size: 0.92rem;
  cursor: pointer;
}
.rtc-login__recordar input { width: 20px; height: 20px; flex: 0 0 auto; accent-color: var(--azul); }
.rtc-login__btn { width: 100%; }
.rtc-login__ayuda {
  color: var(--texto-suave);
  font-size: 0.88rem;
  text-align: center;
  line-height: 1.5;
}
.rtc-login__enlace {
  color: var(--azul-claro);
  font-weight: 600;
  text-decoration: underline;
}
.rtc-login__enlace:hover { color: var(--azul); }
.rtc-login__enlace:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; border-radius: 4px; }

/* Alternador de vía (teléfono ⇄ correo): un <button> con piel de enlace. Reset del
   botón nativo + área táctil >=44px para no quedar por debajo del mínimo. */
.rtc-login__cambio { text-align: center; margin-top: 0.1rem; }
.rtc-login__cambio-btn {
  background: none;
  border: 0;
  padding: 6px 4px;
  min-height: var(--tap);
  font: inherit;
  font-size: 0.88rem;
  cursor: pointer;
}

/* Mostrar/ocultar contraseña en el login. */
.rtc-pass { position: relative; }
.rtc-pass .rtc-campo__in { padding-right: 5rem; }
.rtc-pass__toggle {
  position: absolute;
  top: 50%;
  right: 6px;
  transform: translateY(-50%);
  min-height: 36px;
  padding: 6px 10px;
  background: transparent;
  border: 0;
  color: var(--azul-claro);
  font: inherit;
  font-size: 0.85rem;
  font-weight: 600;
  cursor: pointer;
  border-radius: var(--radio-sm);
}
.rtc-pass__toggle:hover { color: var(--azul-claro); }
.rtc-pass__toggle:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }

/* ---------------------------------------------------------
   SPEC 0004 — Eventos: chip de tipo, buscador de co-participantes,
   chips removibles, bandeja de invitaciones. Todo on-brand oscuro.
   --------------------------------------------------------- */

/* Chip de tipo de evento dentro de items/títulos del panel. */
.rtc-chip {
  display: inline-flex;
  align-items: center;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--azul-dim);
  color: var(--azul-claro);
  font-size: 0.72rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  vertical-align: middle;
}
.rtc-chip--tipo { border: 1px solid var(--azul); }

/* Item donde el streamer solo participa (no organiza) y bandeja de invitaciones. */
.rtc-item--participo { border-left-color: var(--azul-claro); }
.rtc-item--invit { border-left-color: var(--azul); }

.rtc-panel__invit { margin-top: 1.6rem; }

/* Buscador de co-participantes: input + lista de sugerencias (listbox). */
.rtc-sug {
  list-style: none;
  margin: 6px 0 0;
  padding: 4px;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  max-height: 220px;
  overflow-y: auto;
}
.rtc-sug__op {
  padding: 10px 12px;
  border-radius: var(--radio-sm);
  cursor: pointer;
  color: var(--texto);
  min-height: var(--tap);
  display: flex;
  align-items: center;
}
.rtc-sug__op:hover,
.rtc-sug__op:focus-visible {
  background: var(--azul-dim);
  color: var(--azul-claro);
  outline: none;
}

/* Chips removibles de co-participantes ya elegidos. */
.rtc-chips {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.rtc-chip-rm {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 6px 6px 12px;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: 999px;
  font-size: 0.85rem;
}
.rtc-chip-rm__est {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--gris);
}
.rtc-chip-rm__x {
  min-width: var(--tap);
  min-height: var(--tap);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  background: transparent;
  color: var(--error);
  cursor: pointer;
  border-radius: 999px;
  font-size: 0.9rem;
}
.rtc-chip-rm__x:hover { background: rgba(var(--error-rgb), 0.14); }
.rtc-chip-rm__x:focus-visible { outline: 2px solid var(--azul); outline-offset: 1px; }

/* ---------------------------------------------------------
   SPEC 0003 — Zona de Administración on-brand (shell oscuro).
   Hereda los tokens oscuros de .rtc-panel: cero superficies blancas.
   --------------------------------------------------------- */

/* Conmutador de contexto Mi perfil ⇄ Administración (pill superior). */
.rtc-panel__contexto {
  display: inline-flex;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: 3px;
  margin-bottom: 1.2rem;
  gap: 2px;
}
.rtc-panel__ctx {
  min-height: var(--tap);
  padding: 0 18px;
  border: 0;
  background: transparent;
  color: var(--texto-suave);
  font-family: inherit;
  font-weight: 700;
  font-size: 0.95rem;
  border-radius: 999px;
  cursor: pointer;
}
.rtc-panel__ctx.is-active { background: var(--grad); color: var(--sobre-acento); }
.rtc-panel__ctx:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }

/* CTA "crear mi perfil" (admin sin perfil). */
.rtc-panel__cta { display: flex; flex-direction: column; gap: 1rem; }

/* Dashboard: tarjetas de cifras. */
.rtc-dash__cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 12px;
  margin-bottom: 1.4rem;
}
.rtc-dash__card {
  display: flex;
  flex-direction: column;
  gap: 4px;
  align-items: center;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1rem 0.8rem;
}
.rtc-dash__num {
  font-family: 'Rajdhani', 'Inter', system-ui, sans-serif;
  font-size: 2rem;
  font-weight: 700;
  color: var(--azul-claro);
  line-height: 1;
}
.rtc-dash__lbl {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--texto-suave);
}
.rtc-dash__h3 {
  font-family: 'Rajdhani', 'Inter', system-ui, sans-serif;
  font-size: 1.1rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  margin: 1.2rem 0 0.6rem;
}
.rtc-item__live {
  color: var(--vivo);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
}

/* Filas de reglas (lista editable) reusan .rtc-plat-fila pero a 2 columnas. */
.rtc-plat-fila--regla { grid-template-columns: 1fr auto; }

/* --------------------------------------------------------------
   SPEC 0011 — "Mi perfil": modos (chips-toggle), Epic ID, toggle "jugando ahora".
   Catálogo de modos (admin). Solo tokens del tema; áreas táctiles ≥44px.
   -------------------------------------------------------------- */
/* Chips-toggle de modos: checkbox oculto (accesible) + label-chip visible. */
.rtc-modosel { display: flex; flex-wrap: wrap; gap: 8px; }
.rtc-modosel__chip {
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  margin: 0;
}
.rtc-modosel__in {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}
.rtc-modosel__txt {
  display: inline-flex;
  align-items: center;
  min-height: var(--tap);
  padding: 6px 14px;
  border-radius: 999px;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  color: var(--texto-suave);
  font-size: 0.85rem;
  font-weight: 600;
  transition: background 0.2s, border-color 0.2s, color 0.2s;
}
.rtc-modosel__in:checked + .rtc-modosel__txt {
  background: var(--azul-dim);
  border-color: var(--azul-borde);
  color: var(--azul-claro);
}
.rtc-modosel__in:focus-visible + .rtc-modosel__txt {
  outline: 2px solid var(--azul);
  outline-offset: 2px;
}

/* Selector de espíritus (SPEC 0008): reutiliza el chips-toggle .rtc-modosel pero el
   label es un cromo .rtc-esp (definido en comunidad.css). El estado lo dicta el
   checkbox oculto: sin marcar = atenuado (me falta); marcado = color + marco sólido
   de rareza. `.rtc-esp` fija --marco/--marco-rgb por su clase de rareza. */
.rtc-espsel__chip { display: inline-flex; flex-direction: column; width: 88px; }
.rtc-espsel__chip .rtc-esp__estado { display: none; } /* estado por el checkbox, no por badge */
.rtc-espsel__chip .rtc-esp__img { filter: grayscale(1); opacity: 0.55; transition: filter 0.2s, opacity 0.2s; }
.rtc-espsel__chip .rtc-esp__ph { color: var(--gris); opacity: 0.55; }
.rtc-espsel__chip .rtc-esp__marco { border: 2px dashed var(--gris); opacity: 0.7; }
.rtc-espsel__chip .rtc-esp__nombre { color: var(--texto-suave); }
.rtc-modosel__in:checked + .rtc-esp .rtc-esp__img { filter: none; opacity: 1; }
.rtc-modosel__in:checked + .rtc-esp .rtc-esp__ph { color: rgba(var(--marco-rgb), 0.85); opacity: 1; }
.rtc-modosel__in:checked + .rtc-esp .rtc-esp__marco {
  border: 3px solid var(--marco);
  opacity: 1;
  box-shadow: 0 0 0 1px rgba(var(--marco-rgb), 0.35), 0 0 14px rgba(var(--marco-rgb), 0.26);
}
.rtc-modosel__in:checked + .rtc-esp .rtc-esp__nombre { color: var(--texto); }
.rtc-modosel__in:focus-visible + .rtc-esp { outline: 2px solid var(--azul); outline-offset: 2px; border-radius: var(--radio-sm); }

/* Bloque "Jugando ahora" (toggle server-authoritative + nota + contador). */
.rtc-panel__jugando {
  margin-top: 1.2rem;
  padding-top: 1.2rem;
  border-top: 1px solid var(--borde);
}
.rtc-panel__jugandonota {
  margin: 6px 0 0;
  color: var(--texto-suave);
  font-size: 0.85rem;
}
.rtc-panel__jugandocd { color: var(--jugando); font-weight: 700; }

/* Filas del catálogo de modos (admin): slug · nombre · orden · activo · quitar. */
.rtc-modo-fila {
  display: grid;
  grid-template-columns: 1fr 1fr auto auto auto;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}
.rtc-modo-fila input[type="text"],
.rtc-modo-fila input[type="number"] { min-height: var(--tap); }
.rtc-modo-fila__orden { width: 72px; }
.rtc-modo-fila__activo {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
  font-size: 0.85rem;
  color: var(--texto-suave);
}
@media (max-width: 560px) {
  .rtc-modo-fila { grid-template-columns: 1fr 1fr; }
  .rtc-modo-fila__orden { width: auto; }
}

/* ---------------------------------------------------------
   Baneados (SPEC 0015) — blocklist de moderación (solo admin)
   Reutiliza .rtc-item/.rtc-plat-fila/.rtc-modal/.rtc-campo; solo añade el par de
   sub-pestañas Lista/Alertas y dos variantes de chip semánticas (tokens del tema,
   cero hex suelto): "bloquea" (identificador fiable, peligro) y "alerta" (dato
   ambiguo, disponibilidad/violeta).
   --------------------------------------------------------- */
.rtc-panel__subtabs {
  display: inline-flex;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: 3px;
  margin-bottom: 1.2rem;
}
.rtc-chip--bloquea {
  background: rgba(var(--error-rgb), 0.14);
  color: var(--error);
}
.rtc-chip--alerta {
  background: rgba(var(--jugando-rgb), 0.16);
  color: var(--jugando);
}
.rtc-campo--busca { margin: 0.4rem 0 0.8rem; }

/* Bloque copiable de contraseña temporal (en el modal de pass). */
.rtc-copia {
  display: flex;
  align-items: stretch;
  gap: 8px;
  margin: 0.6rem 0 0.4rem;
}
.rtc-pass-copia {
  flex: 1 1 auto;
  display: block;
  background: var(--superficie-2);
  border: 1px solid var(--azul-borde, var(--borde));
  border-radius: var(--radio-sm);
  padding: 12px 14px;
  color: var(--azul-claro);
  font-size: 1.15rem;
  font-family: 'Rajdhani', monospace;
  letter-spacing: 0.04em;
  word-break: break-all;
  user-select: all;
}
.rtc-copia__btn { flex: 0 0 auto; align-self: center; }
.rtc-copia__ok { color: var(--ok); font-size: 0.85rem; margin: 0 0 0.6rem; min-height: 1.1em; }

/* --------------------------------------------------------------
   Badge "EN VIVO" inline (overhaul §3): feedback rojo de alarma al activar el
   switch. Único uso del rojo --vivo (tema.md §6). Lo rellena/oculta app.js.
   -------------------------------------------------------------- */
.rtc-live-aviso {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 8px 0 0;
  padding: 4px 12px;
  border-radius: 999px;
  background: rgba(var(--vivo-rgb), 0.14);
  border: 1px solid rgba(var(--vivo-rgb), 0.45);
  color: var(--vivo);
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.rtc-live-aviso::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 999px;
  background: var(--vivo);
}
/* Variante "ya no en vivo": confirmación neutra (sin rojo de alarma). */
.rtc-live-aviso--off {
  background: var(--superficie-2);
  border-color: var(--borde);
  color: var(--texto-suave);
  text-transform: none;
  letter-spacing: 0;
}
.rtc-live-aviso--off::before { background: var(--texto-suave); }

/* --------------------------------------------------------------
   Badge "N invitaciones" persistente en la tab "Mis streams" (overhaul §4).
   Pequeño contador rojo cuando hay invitaciones pendientes. Se oculta con
   [hidden] cuando no hay ninguna.
   -------------------------------------------------------------- */
.rtc-panel__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  margin-left: 6px;
  padding: 0 6px;
  border-radius: 999px;
  background: var(--vivo);
  color: var(--sobre-acento);
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1;
  vertical-align: middle;
}

/* --------------------------------------------------------------
   Estado vacío con CTA (overhaul §9): Mis streams / Resumen / Streams admin.
   Card centrada con texto guía + botón primario. Reemplaza el .rtc-panel__vacio
   plano cuando hay una acción ofrecible.
   -------------------------------------------------------------- */
.rtc-vacio {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.9rem;
  text-align: center;
  background: var(--superficie);
  border: 1px dashed var(--borde);
  border-radius: var(--radio);
  padding: 1.8rem 1.2rem;
}
.rtc-vacio__txt { color: var(--texto-suave); margin: 0; }

/* --------------------------------------------------------------
   "Mi cuenta" (overhaul §7): aire entre la legend del fieldset y el primer
   campo, para que "Cambiar contraseña" no quede pegado a su input.
   -------------------------------------------------------------- */
.rtc-fieldset { gap: 1rem; }
.rtc-fieldset__leg { margin-bottom: 0.4rem; padding-top: 0.2rem; }

/* --------------------------------------------------------------
   Móvil — filas de streamer del ADMIN (overhaul §5).
   En pantallas estrechas la fila pasa a CARD VERTICAL: cuerpo arriba, acciones
   abajo a lo ancho con áreas táctiles ≥44px. El email/usuario usa elipsis (no
   word-break, que parte la palabra fea). Sub-nav de administración con scroll
   horizontal para que "Ajustes" no se corte.
   -------------------------------------------------------------- */
/* Sub-nav de administración: scroll horizontal en móvil (no se corta "Ajustes"). */
.rtc-panel__ctxvista[data-rtc-ctxvista="admin"] .rtc-panel__tabs {
  display: flex;
  max-width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.rtc-panel__ctxvista[data-rtc-ctxvista="admin"] .rtc-panel__tabs::-webkit-scrollbar { display: none; }
.rtc-panel__ctxvista[data-rtc-ctxvista="admin"] .rtc-panel__tab { flex: 0 0 auto; white-space: nowrap; }

/* El usuario/email de la fila admin no parte palabras: elipsis en una línea. */
.rtc-item__meta--mail {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 560px) {
  /* Card vertical: cuerpo arriba, acciones a lo ancho debajo. */
  .rtc-panel__ctxvista[data-rtc-ctxvista="admin"] #rtc-adm-streamers-lista .rtc-item {
    grid-template-columns: 1fr;
    gap: 10px;
  }
  .rtc-panel__ctxvista[data-rtc-ctxvista="admin"] #rtc-adm-streamers-lista .rtc-item__acciones {
    flex-wrap: wrap;
    gap: 8px;
  }
  .rtc-panel__ctxvista[data-rtc-ctxvista="admin"] #rtc-adm-streamers-lista .rtc-item__acciones .rtc-btn {
    min-height: var(--tap);
    flex: 1 1 auto;
  }
  /* Los botones --mini de la fila admin recuperan altura táctil completa en móvil
     (la card vertical da espacio de sobra). */
  .rtc-panel__ctxvista[data-rtc-ctxvista="admin"] #rtc-adm-streamers-lista .rtc-btn--mini {
    min-height: var(--tap);
  }
}

/* Pista de scroll en la sub-nav admin: el borde derecho se desvanece para indicar
   que "Ajustes" continúa (antes parecía cortado/roto a 390px). (re-audit ⑥d MENOR-1) */
.rtc-panel__ctxvista[data-rtc-ctxvista="admin"] .rtc-panel__tabs {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 22px), transparent);
  mask-image: linear-gradient(to right, #000 calc(100% - 22px), transparent);
}

@media (max-width: 480px) {
  /* Cards de stream (Mis streams del streamer y Streams del admin): las acciones
     pasan a su propia fila a lo ancho, para que el TÍTULO nunca quede bajo los
     botones ✎/✕ (re-audit ⑥d MENOR-2). El override admin de streamers (≤560px) es
     más específico y sigue mandando en SU lista. */
  .rtc-panel .rtc-item { grid-template-columns: auto 1fr; }
  .rtc-panel .rtc-item__acciones {
    grid-column: 1 / -1;
    justify-content: flex-end;
    flex-wrap: wrap;
  }
  /* El modal apila los pares de campos (Fecha y hora | Duración) para que "Duración"
     no se salga del viewport a 390px (re-audit ⑥d nota). */
  .rtc-campo--2 { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .rtc-panel *, .rtc-panel *::before, .rtc-panel *::after {
    animation: none !important; transition: none !important;
  }
}

/* ---------------------------------------------------------
   SPEC 0007 — Auto-registro de streamers. Vista gemela del login (mismo shell y
   tokens del tema; cero color literal): ayuda/errores por campo, medidor de fuerza
   con barra, honeypot fuera de vista y spinner del botón. Se ve bien en OLED y Día.
   --------------------------------------------------------- */

/* La vista de registro reutiliza .rtc-panel--login (layout centrado). */
.rtc-panel--registro .rtc-login__form { gap: 0.9rem; }

/* Texto de ayuda bajo un campo (privacidad del número, guía del nombre). */
.rtc-campo__ayuda {
  color: var(--texto-suave);
  font-size: 0.82rem;
  line-height: 1.4;
  margin: 4px 0 0;
}

/* Error por campo: reserva alto para que el layout no salte al aparecer. */
.rtc-campo__err {
  color: var(--error);
  font-size: 0.82rem;
  line-height: 1.35;
  min-height: 1.05em;
  margin: 3px 0 0;
}
/* Nota NEUTRAL (no error): auto-normalización de la lada pegada. Mismo hueco, color suave. */
.rtc-campo__err.is-aviso { color: var(--texto-suave); }

/* Input inválido: borde de error (el token del tema activo). */
.rtc-campo__in.is-error { border-color: var(--error); }

/* Medidor de fuerza: pista (track) + relleno cuyo ancho/color da el nivel. */
.rtc-fuerza {
  height: 6px;
  margin-top: 8px;
  border-radius: 999px;
  background: var(--borde);
  overflow: hidden;
}
.rtc-fuerza__barra {
  display: block;
  height: 100%;
  width: 0;
  border-radius: inherit;
  transition: width 0.25s ease, background-color 0.25s ease;
}
.rtc-fuerza__barra--debil  { width: 33%;  background: var(--error); }
.rtc-fuerza__barra--media  { width: 66%;  background: var(--azul-claro); }
.rtc-fuerza__barra--fuerte { width: 100%; background: var(--ok); }

/* Honeypot: fuera de la vista para el humano; los bots sí lo rellenan (§2.5). */
.rtc-hp {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* Contenedor del captcha Turnstile: separa el widget de los campos vecinos. */
.rtc-campo--captcha { margin-top: 0.2rem; }
.rtc-campo--captcha .cf-turnstile { min-height: 65px; }

/* Checkbox "acepto las reglas": fila clicable completa, área táctil >=44px. */
.rtc-campo--check { margin-top: 0.2rem; }
.rtc-check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  min-height: var(--tap);
  cursor: pointer;
}
.rtc-check__in {
  width: 20px;
  height: 20px;
  flex: 0 0 auto;
  margin-top: 2px;
  accent-color: var(--azul);
}
.rtc-check__txt {
  color: var(--texto-suave);
  font-size: 0.9rem;
  line-height: 1.45;
}

/* Enlace cruzado login <-> registro. */
.rtc-login__cruce {
  color: var(--texto-suave);
  font-size: 0.9rem;
  text-align: center;
  line-height: 1.5;
  margin: 0.2rem 0 0;
}

/* Spinner del botón mientras se crea la cuenta (guard reduced-motion global arriba). */
.rtc-login__btn.is-loading::after {
  content: '';
  display: inline-block;
  width: 16px;
  height: 16px;
  margin-left: 8px;
  vertical-align: middle;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  animation: rtc-spin 0.6s linear infinite;
}
@keyframes rtc-spin { to { transform: rotate(360deg); } }

/* ---------------------------------------------------------
   Fix de tap-targets ≥44px (render QA de 0015): sub-pestañas Lista/Alertas
   y los botones "+ Agregar red" quedaban < 44px. Áreas táctiles accesibles.
   --------------------------------------------------------- */
.rtc-panel__subtabs .rtc-panel__tab { min-height: var(--tap); }
#rtc-plat-add,
#rtc-ban-red-add,
#rtc-aj-red-add,
#rtc-as-plat-add { min-height: var(--tap); }

/* ---------------------------------------------------------
   LOBBY — moderación del organizador/admin en el modal de stream (SPEC 0010).
   El WhatsApp se muestra SOLO aquí (canal gateado). Tokens del tema, cero hex.
   --------------------------------------------------------- */
.rtc-modlobby {
  margin: 1rem 0 0;
  padding: 12px 14px;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  background: var(--superficie-2);
}
.rtc-modlobby__leg {
  padding: 0 6px;
  font-weight: 600;
  color: var(--texto);
}
.rtc-modlobby__toggle {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: var(--tap);
  cursor: pointer;
}
.rtc-modlobby__cfg { margin-top: 8px; }
.rtc-campo--fila { display: flex; gap: 12px; flex-wrap: wrap; }
.rtc-campo--fila > div { flex: 1 1 120px; }
.rtc-modlobby__listas { margin-top: 10px; }
.rtc-modlobby__h4 {
  margin: 12px 0 6px;
  font-size: 0.9rem;
  color: var(--texto);
}
.rtc-modlobby__lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.rtc-modlobby__it {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 8px 10px;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
}
.rtc-modlobby__epic { font-weight: 600; color: var(--texto); overflow-wrap: anywhere; }
.rtc-modlobby__wa { color: var(--texto-suave); font-variant-numeric: tabular-nums; margin-left: auto; }
.rtc-modlobby__vacio { color: var(--texto-suave); font-size: 0.88rem; margin: 4px 0; }
.rtc-modlobby__nota { color: var(--texto-suave); font-size: 0.8rem; margin: 10px 0 0; }

/* =========================================================
   EVENTOS del panel: torneos y sorteos (SPEC 0013/0014)
   Reusa .rtc-campo/.rtc-btn/.rtc-panel__lista. Solo tokens.
   ========================================================= */
.rtc-panel__head--sep { margin-top: 26px; padding-top: 18px; border-top: 1px solid var(--borde); }

/* Formulario de alta plegable (details/summary). */
.rtc-evform { margin: 12px 0 8px; }
.rtc-evform > summary { list-style: none; display: inline-flex; cursor: pointer; }
.rtc-evform > summary::-webkit-details-marker { display: none; }
.rtc-evform[open] > summary { margin-bottom: 14px; }
.rtc-evform .rtc-form { margin-top: 4px; }

/* Fila editable de premio: lugar + input + quitar. */
.rtc-premiofila { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.rtc-premiofila__lugar {
  flex: 0 0 auto;
  min-width: 30px;
  font-weight: 700;
  color: var(--azul-claro);
}
.rtc-premiofila__txt { flex: 1 1 auto; }
.rtc-premiofila__del {
  flex: 0 0 auto;
  color: var(--error);
  border-color: rgba(var(--error-rgb), 0.45);
  font-size: 1.1rem;
  line-height: 1;
}

/* Ítem de la lista "mis torneos / mis sorteos". */
.rtc-evitem {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding: 10px 12px;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  margin-bottom: 8px;
}
.rtc-evitem__info { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 200px; }
.rtc-evitem__tit { font-weight: 600; color: var(--texto); overflow-wrap: anywhere; }
.rtc-evitem__meta { color: var(--texto-suave); font-size: 0.85rem; }
.rtc-evitem__estado {
  flex: 0 0 auto;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 0.76rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--texto-suave);
  background: var(--superficie-2);
  border: 1px solid var(--borde);
}
.rtc-evitem__estado[data-estado="inscripcion"],
.rtc-evitem__estado[data-estado="abierto"] { color: var(--ok); background: rgba(var(--ok-rgb), 0.12); border-color: rgba(var(--ok-rgb), 0.45); }
/* TEMA (guardian-tema): en claro el verde --ok sobre su tinte cae bajo AA (~3.5:1). Se
   sirve como RELLENO SÓLIDO con texto --verde-tinta (mismo par AA del CTA WhatsApp),
   igual que .rtc-estado--abierto de la vista pública. */
[data-tema="claro"] .rtc-evitem__estado[data-estado="inscripcion"],
[data-tema="claro"] .rtc-evitem__estado[data-estado="abierto"] { color: var(--verde-tinta); background: var(--ok); border-color: var(--ok); }
.rtc-evitem__estado[data-estado="en_curso"] { color: var(--jugando); background: rgba(var(--jugando-rgb), 0.14); border-color: rgba(var(--jugando-rgb), 0.45); }
.rtc-evitem__estado[data-estado="lleno"] { color: var(--texto); background: var(--superficie-2); border-color: var(--azul-borde); }
.rtc-evitem__estado[data-estado="completado"],
.rtc-evitem__estado[data-estado="finalizado"],
.rtc-evitem__estado[data-estado="sorteado"] { color: var(--azul-claro); background: var(--azul-dim); border-color: var(--azul-borde); }
.rtc-evitem__gest { flex: 0 0 auto; }

/* =========================================================
   SPEC 0020 — Hub "Comunidad" + administradores/moderadores gestionables
   Solo var(--…): cero color literal, cero token nuevo. Reusa .rtc-item/.rtc-form/
   .rtc-dash/.rtc-btn. A11y: áreas ≥44px, foco visible, prefers-reduced-motion.
   ========================================================= */

/* Región viva solo para lectores de pantalla (anuncios del cambio de nivel). */
.rtc-sr-live {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}

/* Hub: 1 columna móvil; 2 columnas ≥860px. Cada columna es un bloque de flujo propio, así
   la identidad (rostro + nombre + form) queda AGRUPADA arriba-izquierda y el form no flota
   al fondo de la columna (revisor-uxui MAYOR). */
.rtc-hub { display: block; }
.rtc-hub__col { min-width: 0; }
.rtc-hub__col--info { margin-top: 1.4rem; }
.rtc-hub__hero { display: flex; align-items: center; gap: 0.8rem; margin-bottom: 1.1rem; }
.rtc-hub__heroTxt { min-width: 0; }
/* Rostro del hub: imagen/og de la comunidad o inicial on-brand (JS decide). */
.rtc-hub__rostro {
  width: 52px; height: 52px;
  flex: 0 0 auto;
  border-radius: 14px;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
  background-size: cover;
  background-position: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-head, inherit);
  font-size: 1.3rem;
  font-weight: 800;
  color: var(--azul-claro);
}
.rtc-hub__nombre {
  font-size: 1.6rem;
  font-weight: 800;
  line-height: 1.15;
  margin: 0 0 0.25rem;
  color: var(--azul);
}
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .rtc-hub__nombre {
    background: var(--grad);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
  }
}
.rtc-hub__preview { color: var(--texto-suave); font-size: 0.9rem; margin: 0.15rem 0 0; }

.rtc-hub__editar {
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  background: var(--superficie);
  padding: 0.4rem 0.9rem;
  margin-bottom: 1.2rem;
}
.rtc-hub__editarsum {
  cursor: pointer;
  font-weight: 600;
  color: var(--azul-claro);
  min-height: var(--tap);
  display: flex;
  align-items: center;
}
.rtc-hub__editarsum:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }
.rtc-hub__editar[open] .rtc-hub__editarsum { margin-bottom: 0.6rem; }

.rtc-hub__admins { margin-top: 1.4rem; }
.rtc-hub__col--info .rtc-hub__admins { margin-top: 1.4rem; }
.rtc-hubadmin { align-items: center; }
.rtc-hubadmin__id { display: flex; align-items: center; gap: 0.7rem; min-width: 0; flex: 1 1 auto; }
.rtc-hubadmin__av {
  width: 38px; height: 38px;
  border-radius: 50%;
  object-fit: cover;
  flex: 0 0 auto;
  background: var(--superficie-2);
  border: 1px solid var(--borde);
}
.rtc-hubadmin__av--ini {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--texto-suave);
}
.rtc-hubadmin__fijo { color: var(--texto-suave); font-size: 0.8rem; }

/* Chips de nivel (jerarquía por peso de relleno + texto, no solo color). */
.rtc-nivelchip {
  display: inline-flex;
  align-items: center;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  vertical-align: middle;
}
/* Dueño: relleno sólido --azul-fuerte + blanco (--sobre-acento) → AA ≥4.5:1 en AMBOS temas
   (el --azul de marca sobre blanco daba ~2.6:1; --azul-fuerte llega ~6.3:1 oled / ~8:1 claro). */
.rtc-nivelchip--duenio { background: var(--azul-fuerte); color: var(--sobre-acento); }
/* Admin: mismo par que .rtc-chip (--azul-dim/--azul-claro) + borde. */
.rtc-nivelchip--admin { background: var(--azul-dim); color: var(--azul-claro); border: 1px solid var(--azul-borde); }
/* Moderador: neutro. */
.rtc-nivelchip--mod { background: var(--superficie-2); color: var(--texto-suave); border: 1px solid var(--borde); }

/* Botón "Nivel ▾": mini; --activo cuando ya tiene nivel (reusa .rtc-btn--activo). */
.rtc-btn--nivel { white-space: nowrap; }

/* Menú de nivel: hoja inferior en móvil / popover anclado en desktop. Se monta en <body>
   (JS) para que position:fixed sea SIEMPRE relativo al viewport (inmune a ancestros con
   transform). Por eso el guard [hidden] va SIN scope de .rtc-panel: display flex ganaría a
   hidden si no. z-index 60 < 1000 del modal → el modal de contraseña siempre queda encima. */
.rtc-nivelmenu {
  z-index: 60;
  background: var(--superficie);
  border: 1px solid var(--borde);
  box-shadow: var(--sombra-modal);
  padding: 0.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.rtc-nivelmenu[hidden] { display: none !important; }
/* Móvil: hoja inferior a lo ancho, con SCRIM tokenizado (box-shadow spread = velo sin DOM
   extra; los clics en el velo caen a la página → el listener "click fuera" cierra el menú). */
.rtc-nivelmenu--sheet {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  border-radius: var(--radio) var(--radio) 0 0;
  border-bottom: 0;
  padding: 0.75rem 0.75rem calc(0.75rem + env(safe-area-inset-bottom));
  box-shadow: var(--sombra-modal), 0 0 0 100vmax var(--scrim);
  animation: rtc-nivelmenu-up 180ms ease-out;
}
@keyframes rtc-nivelmenu-up { from { transform: translateY(12px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
/* Desktop: popover compacto anclado al disparador (JS fija top/left en viewport). Sin scrim. */
.rtc-nivelmenu--pop {
  position: fixed;
  width: 250px;
  border-radius: var(--radio-sm);
}
.rtc-nivelmenu__tit {
  font-weight: 700;
  font-size: 0.9rem;
  padding: 0.35rem 0.5rem;
  color: var(--texto);
  border-bottom: 1px solid var(--borde);
  margin: 0 0 0.25rem;
}
.rtc-nivelmenu__op {
  appearance: none;
  -webkit-appearance: none;
  text-align: left;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--radio-sm);
  color: var(--texto);
  font: inherit;
  padding: 0 0.6rem;
  min-height: var(--tap);
  cursor: pointer;
  display: flex;
  align-items: center;
}
.rtc-nivelmenu__op:hover { background: var(--superficie-2); }
.rtc-nivelmenu__op:focus-visible { outline: 2px solid var(--azul); outline-offset: -1px; }
.rtc-nivelmenu__op.is-current { color: var(--azul-claro); font-weight: 600; }
.rtc-nivelmenu__op--peligro { color: var(--error); }
.rtc-nivelmenu__nota { color: var(--texto-suave); font-size: 0.82rem; padding: 0.4rem 0.6rem; margin: 0; }
.rtc-nivelmenu__cerrar {
  appearance: none;
  -webkit-appearance: none;
  background: transparent;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  color: var(--texto-suave);
  font: inherit;
  min-height: var(--tap);
  margin-top: 0.35rem;
  cursor: pointer;
}
.rtc-nivelmenu__cerrar:focus-visible { outline: 2px solid var(--azul); outline-offset: 1px; }

@media (min-width: 860px) {
  /* Hub a 2 columnas: cada columna es un bloque de flujo → la identidad (rostro+nombre+form)
     queda junta arriba-izquierda; resumen + admins a la derecha, alineados arriba. */
  .rtc-hub {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 1.6rem;
    align-items: start;
  }
  .rtc-hub__col--info { margin-top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .rtc-nivelmenu--sheet { animation: none; }
}

/* =========================================================
   Teléfono internacional — Teléfono internacional con selector de lada (.rtc-tel)
   Componente reusado en login/registro: botón-lada + input local + <input hidden>.
   El desplegable (.rtc-telmenu) REUSA el skin .rtc-nivelmenu (hoja móvil / popover
   desktop, montado en <body>). Solo var(--…): cero color literal, cero token nuevo.
   A11y: áreas ≥44px, foco visible, contraste AA, prefers-reduced-motion (heredado).
   ========================================================= */

/* Solo para lectores de pantalla (conteo del buscador, etc.). Gemelo de .rtc-sr-live. */
.rtc-sr {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}

/* Fila: botón-lada (ancho por contenido) + número local (crece, min-width:0 para no
   desbordar el flex en pantallas estrechas). */
.rtc-tel { display: flex; align-items: stretch; gap: 8px; }
.rtc-tel__num { flex: 1 1 auto; min-width: 0; }
.rtc-tel__lada {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: var(--tap);
  padding: 0 10px;
  border: 1px solid var(--borde);
  border-radius: var(--radio-sm);
  background: var(--superficie);
  color: var(--texto);
  font: inherit;
  cursor: pointer;
  white-space: nowrap;
}
.rtc-tel__lada:hover { border-color: var(--azul); }
.rtc-tel__lada:focus-visible { outline: 2px solid var(--azul); outline-offset: 1px; border-color: var(--azul); }
.rtc-tel__bandera { font-size: 1.15rem; line-height: 1; }
.rtc-tel__cc { font-weight: 600; }
.rtc-tel__flecha { color: var(--texto-suave); font-size: 0.8rem; }

/* Desplegable: hereda .rtc-nivelmenu (fondo/borde/sombra/[hidden]). Columna con buscador
   fijo arriba + lista con scroll propio. Sheet móvil: 70vh; popover desktop: ancho fijo. */
.rtc-telmenu {
  gap: 0.4rem;
  max-height: min(60vh, 520px);
}
.rtc-nivelmenu--pop.rtc-telmenu { width: 300px; }
.rtc-nivelmenu--sheet.rtc-telmenu { max-height: 70vh; }
.rtc-telmenu__buscar { flex: 0 0 auto; }
.rtc-telmenu__input { width: 100%; }
.rtc-telmenu__lista {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  min-height: 0;
}
/* Encabezado de grupo (Frecuentes / Todos): no interactivo. */
.rtc-telmenu__grupo {
  padding: 0.4rem 0.5rem 0.2rem;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--texto-suave);
}
/* Opción: hereda .rtc-nivelmenu__op (min-height tap, flex). Fila bandera/nombre/código. */
.rtc-telmenu__op { gap: 8px; }
.rtc-telmenu__op.is-activo { background: var(--superficie-2); }
.rtc-telmenu__op[aria-selected="true"] { color: var(--azul-claro); font-weight: 600; }
.rtc-telmenu__bandera { font-size: 1.15rem; line-height: 1; flex: 0 0 auto; }
.rtc-telmenu__nombre { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rtc-telmenu__cc { flex: 0 0 auto; color: var(--texto-suave); font-variant-numeric: tabular-nums; }
.rtc-telmenu__vacio { padding: 0.6rem 0.5rem; color: var(--texto-suave); font-size: 0.9rem; }
