/* =============================================================
   ANEXA · Estilo de paneles (radio, cliente, admin)
   Paleta OFICIAL, la misma del ANEXA Local Studio:
     Azul Streaming  #249CD3   (marca, acciones)
     Verde Enlace    #75B43F   (al aire, confirmaciones)
     Charcoal Serio  #343E43   (texto y barra lateral)
   Sobrio, tipo panel de administración clásico: fondo gris claro,
   tarjetas blancas de borde fino y barra lateral oscura.
   ============================================================= */

:root {
  --anexa-azul: #249CD3;
  --anexa-azul-h: #35A7DF;
  --anexa-azul-p: #1A7EAB;

  /* ACENTO DEL ÁREA: cada panel se tiñe distinto para saber dónde estás.
     Admin = azul (por defecto) · Cliente y Radio = verde · Reseller = naranja.
     Se cambia poniendo estas 3 variables en el <html> del layout. */
  --anexa-acento: #249CD3;
  --anexa-acento-h: #35A7DF;
  --anexa-acento-p: #1A7EAB;
  --anexa-acento-rgb: 36, 156, 211;
  --anexa-verde: #75B43F;
  --anexa-charcoal: #343E43;

  --anexa-lateral: #1B2022;
  --anexa-lateral-item: #9CA3AF;
  --anexa-lateral-hover: #272E31;
  --anexa-lateral-grupo: #5B666C;

  --anexa-fondo: #F3F4F6;
  --anexa-tarjeta: #FFFFFF;
  --anexa-borde: #E3E6E8;
  --anexa-texto: #343E43;
  --anexa-suave: #6B7280;

  /* Bootstrap toma estos: así botones, enlaces y badges salen con la marca */
  --bs-primary: var(--anexa-acento);
  --bs-primary-rgb: var(--anexa-acento-rgb);
  --bs-link-color: var(--anexa-acento-p);
  --bs-link-hover-color: var(--anexa-acento);
  --bs-body-bg: var(--anexa-fondo);
  --bs-body-color: var(--anexa-texto);
  --bs-border-color: var(--anexa-borde);
}

[data-bs-theme="dark"] {
  --anexa-fondo: #14181A;
  --anexa-tarjeta: #1E2427;
  --anexa-borde: #2E383D;
  --anexa-texto: #E9ECEF;
  --anexa-suave: #9CA3AF;
  --bs-body-bg: var(--anexa-fondo);
  --bs-body-color: var(--anexa-texto);
  --bs-border-color: var(--anexa-borde);
  --bs-link-color: var(--anexa-acento-h);
  --bs-link-hover-color: var(--anexa-acento);
}

body {
  background: var(--anexa-fondo);
  color: var(--anexa-texto);
  font-size: 14px;
  font-family: 'Inter', system-ui, 'Segoe UI', Roboto, sans-serif;
  -webkit-font-smoothing: antialiased;
}

/* ---------- Botones y controles con la marca ---------- */
.btn-primary {
  --bs-btn-bg: var(--anexa-acento);
  --bs-btn-border-color: var(--anexa-acento);
  --bs-btn-hover-bg: var(--anexa-acento-h);
  --bs-btn-hover-border-color: var(--anexa-acento-h);
  --bs-btn-active-bg: var(--anexa-acento-p);
  --bs-btn-active-border-color: var(--anexa-acento-p);
}
.btn-outline-primary {
  --bs-btn-color: var(--anexa-acento-p);
  --bs-btn-border-color: var(--anexa-acento);
  --bs-btn-hover-bg: var(--anexa-acento);
  --bs-btn-hover-border-color: var(--anexa-acento);
}
.btn-success { --bs-btn-bg: var(--anexa-verde); --bs-btn-border-color: var(--anexa-verde); --bs-btn-hover-bg: #689f38; --bs-btn-hover-border-color: #689f38; }
.bg-success { background-color: var(--anexa-verde) !important; }
.text-primary { color: var(--anexa-acento) !important; }
.bg-primary { background-color: rgba(var(--anexa-acento-rgb), var(--bs-bg-opacity, 1)) !important; }
.form-control:focus, .form-select:focus {
  border-color: var(--anexa-acento);
  box-shadow: 0 0 0 2px var(--anexa-acento);
}

/* ---------- Estructura ---------- */
.anexa-layout { display: flex; min-height: 100vh; }

.anexa-lateral {
  width: 236px;
  flex: 0 0 236px;
  /* !important: Bootstrap fuerza transparente en .offcanvas-lg en pantallas
     grandes y dejaba el costado BLANCO (con "ANE" blanco invisible encima). */
  background: var(--anexa-lateral) !important;
  display: flex;
  flex-direction: column;
}

.anexa-marca {
  padding: 14px 16px;
  border-bottom: 1px solid #2A3236;
  display: flex;
  align-items: center;
  gap: 10px;
}
.anexa-marca .logo { font-size: 1.35rem; color: var(--anexa-acento); line-height: 1; }
.anexa-marca .nombre { font-weight: 800; letter-spacing: .5px; color: #FAFAFA; font-size: 1.05rem; }
.anexa-marca .nombre span { color: inherit; }
.anexa-marca .area {
  font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase;
  color: var(--anexa-lateral-grupo); display: block; margin-top: 1px;
}

.anexa-radio {
  padding: 12px 16px;
  border-bottom: 1px solid #2A3236;
  color: #D7DEE2;
}
.anexa-radio .nom { font-weight: 600; font-size: .9rem; }

.anexa-menu { padding: 6px 0 16px; overflow-y: auto; flex: 1; }
.anexa-menu .grupo {
  font-size: 10px; letter-spacing: 1.1px; text-transform: uppercase;
  color: var(--anexa-lateral-grupo); padding: 14px 16px 5px; font-weight: 600;
}
.anexa-menu a {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 16px; font-size: .875rem; text-decoration: none;
  color: var(--anexa-lateral-item); border-left: 3px solid transparent;
}
.anexa-menu a i { font-size: 1rem; width: 18px; text-align: center; }
.anexa-menu a:hover { background: var(--anexa-lateral-hover); color: #FAFAFA; }
.anexa-menu a.activo {
  background: var(--anexa-lateral-hover);
  color: #FFFFFF; font-weight: 600;
  border-left-color: var(--anexa-acento);
}
.anexa-pie { padding: 12px 16px; border-top: 1px solid #2A3236; color: #6B7280; font-size: 11px; }

.anexa-principal { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.anexa-barra {
  background: var(--anexa-tarjeta);
  border-bottom: 1px solid var(--anexa-borde);
  padding: 12px 20px;
  display: flex; align-items: center; gap: 12px;
}
.anexa-barra h1 { font-size: 1.05rem; font-weight: 700; margin: 0; color: var(--anexa-texto); }
.anexa-contenido { padding: 20px; flex: 1; }

/* ---------- Tarjetas PLANAS (estilo Metro/SonicPanel) ----------
   Nada de sombras ni transparencias: fondo solido, borde firme y una
   BANDA DE TITULO oscura con letra blanca en negrita, como los paneles
   clasicos de radio que el cliente ya conoce. */
.card {
  background: var(--anexa-tarjeta);
  border: 1px solid var(--anexa-borde);
  border-radius: 4px;
  box-shadow: none;
}
/* La banda de titulo SIGUE EL TEMA del usuario: clara de dia, oscura de noche.
   (Nada de fondos oscuros forzados: para eso existe el boton de tema.) */
.card-header {
  background: var(--anexa-fondo);
  border-bottom: 2px solid var(--anexa-acento);
  border-radius: 3px 3px 0 0;
  font-weight: 700;
  color: var(--anexa-texto);
}
.card-footer { background: var(--anexa-fondo); border-top: 1px solid var(--anexa-borde); }
.table > :not(caption) > * > * { background-color: transparent; }
/* Código: en línea con un toque de marca; en bloque, legible sobre gris claro */
code { color: var(--anexa-acento-p); background: rgba(36, 156, 211, .08); padding: .1rem .3rem; border-radius: 3px; }
[data-bs-theme="dark"] code { color: #6FC0E8; background: rgba(36, 156, 211, .14); }
pre {
  background: var(--anexa-fondo);
  border: 1px solid var(--anexa-borde);
  border-radius: 6px;
  padding: .85rem 1rem;
  margin-bottom: 0;
}
pre code { color: var(--anexa-texto); background: transparent; padding: 0; }
textarea.form-control[readonly] { background: var(--anexa-fondo); }

/* ---------- Estado al aire ---------- */
.punto-aire {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: var(--anexa-verde); margin-right: 6px;
  box-shadow: 0 0 0 rgba(117, 180, 63, .6); animation: latido 2s infinite;
}
.punto-off { background: #6B7280; animation: none; box-shadow: none; }
@keyframes latido {
  0%   { box-shadow: 0 0 0 0 rgba(117, 180, 63, .55); }
  70%  { box-shadow: 0 0 0 7px rgba(117, 180, 63, 0); }
  100% { box-shadow: 0 0 0 0 rgba(117, 180, 63, 0); }
}

/* ---------- Móvil ----------
   La barra lateral usa el "offcanvas" de Bootstrap (el mismo componente que el
   panel de administración): en pantallas chicas se desliza desde la izquierda. */
.anexa-abrir { display: none; }
@media (max-width: 991.98px) {
  .anexa-lateral { width: 260px; flex: 0 0 260px; }
  .anexa-abrir { display: inline-flex; }
}


/* ---------- ESTILO PLANO (decidido con el dueño: claro, solido, sin vidrio) ---------- */

/* Etiquetas y titulos SIEMPRE en negrita: se lee de un vistazo */
.form-label { font-weight: 700; color: var(--anexa-texto); }
h1, h2, h3, h4, h5, h6 { font-weight: 700; }

/* Campos de solo lectura: gris solido, como los datos fijos de SonicPanel */
.form-control[readonly] {
  background: var(--anexa-fondo);
  border: 1px solid var(--anexa-borde);
  color: var(--anexa-texto);
  font-weight: 600;
}

/* Modales planos: fondo solido, borde firme, banda de titulo oscura */
.modal-content {
  background: var(--anexa-tarjeta);
  border: 1px solid var(--anexa-borde);
  border-radius: 4px;
  box-shadow: none;
}
/* Modal BLANCO estilo SonicPanel: titulo negro en negrita, linea azul abajo. */
.modal-header {
  background: var(--anexa-tarjeta);
  color: var(--anexa-texto);
  border-bottom: 2px solid var(--anexa-acento);
  border-radius: 3px 3px 0 0;
  padding: .75rem 1rem;
}
.modal-header .modal-title { font-weight: 800; font-size: 1.05rem; }
.modal-footer { background: var(--anexa-fondo); border-top: 1px solid var(--anexa-borde); }

/* Tablas: cabecera con banda gris solida y negrita, filas bien separadas */
.table thead th {
  background: var(--anexa-fondo);
  color: var(--anexa-texto);
  font-weight: 700;
  border-bottom: 2px solid var(--anexa-borde);
  white-space: nowrap;
}
.table > :not(caption) > * > * { border-bottom-color: var(--anexa-borde); }

/* Botones rectos, sin esquinas redondas exageradas */
.btn { border-radius: 3px; font-weight: 600; }
.badge { border-radius: 3px; font-weight: 700; }

/* Alertas planas: franja de color solida a la izquierda, fondo de tarjeta */
.alert {
  border-radius: 3px;
  border: 1px solid var(--anexa-borde);
  border-left: 4px solid var(--anexa-acento);
  background: var(--anexa-tarjeta);
  color: var(--anexa-texto);
  box-shadow: none;
}
.alert-success { border-left-color: var(--anexa-verde); }
.alert-danger  { border-left-color: #DC3545; }
.alert-warning { border-left-color: #F0AD4E; }


/* ═══════════ PASADA v2: admin moderno y nítido (sigue PLANO) ═══════════ */

/* Titulares con más presencia */
h1.h3, .h3 { font-weight: 800; letter-spacing: -.01em; }

/* Cabeceras de tabla estilo panel profesional: mayúsculas chicas espaciadas */
.table thead th {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--anexa-suave);
  padding-top: .55rem;
  padding-bottom: .55rem;
}
.table tbody td { padding-top: .55rem; padding-bottom: .55rem; }
.table-hover > tbody > tr:hover > * { background-color: rgba(36, 156, 211, .06); }

/* Rejillas de datos (modal de radio, fichas): etiqueta arriba chiquita, valor fuerte */
.modal-body .row.small .text-muted,
.dato-etq {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: .07em;
  font-weight: 600;
  color: var(--anexa-suave);
  margin-bottom: 1px;
}
.modal-body .row.small .fw-semibold { font-size: .95rem; font-weight: 700; }

/* Separadores del modal: secciones claras en vez de un choclo de botones */
.modal-body hr { border-color: var(--anexa-borde); opacity: 1; }

/* Grupo de control unificado (Iniciar/Detener/Reiniciar) */
.grupo-control .btn { font-weight: 600; }

/* Badges de estado con punto de color (más panel, menos etiqueta) */
.badge { letter-spacing: .02em; }

/* Paginación plana */
.pagination .page-link { border-radius: 3px; margin: 0 2px; border-color: var(--anexa-borde); color: var(--anexa-texto); }
.pagination .page-item.active .page-link { background: var(--anexa-acento); border-color: var(--anexa-acento); }

/* Scrollbars finas y discretas */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: var(--anexa-borde); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--anexa-suave); }
::-webkit-scrollbar-track { background: transparent; }

/* Selects e inputs alineados con el look plano */
.form-select, .form-control { border-radius: 3px; }
.input-group-text { border-radius: 3px; background: var(--anexa-fondo); font-weight: 600; }

/* Botón de peligro apartado visualmente */
.btn-outline-danger { --bs-btn-hover-bg: #DC3545; }


/* ═══════ IDENTIDAD POR MOTOR (panel de radio): que se SIENTA distinto ═══════ */

.sello-motor {
  display: inline-block; font-size: 9.5px; font-weight: 800;
  letter-spacing: .09em; text-transform: uppercase;
  color: var(--anexa-acento-h); border: 1px solid var(--anexa-acento-p);
  padding: 1px 7px; border-radius: 2px;
}

.motor-banda {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 20px; font-size: 12px; letter-spacing: .05em;
  color: #fff; background: var(--anexa-acento);
}
.motor-banda b { text-transform: uppercase; letter-spacing: .08em; }
.motor-banda .mb-tag { opacity: .85; }
.motor-banda .mb-icono { display: inline-flex; }

/* SHOUTCAST: sabor retro — fondo oscuro con rayas ámbar diagonales sutiles,
   como las carátulas de los DNAS de toda la vida. */
.motor-banda.motor-shoutcast {
  background: repeating-linear-gradient(-45deg, #232019, #232019 12px, #2B2415 12px, #2B2415 24px);
  color: var(--anexa-acento-h);
  border-bottom: 2px solid var(--anexa-acento);
  font-family: 'Consolas', 'IBM Plex Mono', monospace;
}

/* ICECAST: banda verde con "onda" (borde inferior doble, aire de ecualizador) */
.motor-banda.motor-icecast {
  border-bottom: 3px double rgba(255, 255, 255, .55);
}

/* MEDIAMTX (ANEXA LIVE): naranja pleno de marca, sin adornos: moderno */
.motor-banda.motor-mediamtx { border-bottom: 0; }


/* ═══════════════════════════════════════════════════════════════════════════
   COMPONENTES DEL PANEL (tarjetas, listas, navegación)

   Esto vivía en panel-ui.css: una petición aparte, enlazada al final del
   <head> y detrás de un <style> incrustado. Si llegaba tarde, la página se
   pintaba primero con la hoja base y después se repintaba entera. Ese era el
   salto de estilos al entrar. Ahora va aquí, en la única hoja del panel.

   Las clases .admin-* eran una copia literal de estas con otro nombre; se
   eliminaron y las vistas ahora dicen .panel-*.
   ═══════════════════════════════════════════════════════════════════════════ */
.panel-content { min-width: 0; }
.panel-page-heading { padding-bottom: 1.25rem; border-bottom: 1px solid var(--anexa-borde); }
.panel-page-heading h1 { font-size: clamp(1.2rem, 2vw, 1.6rem); font-weight: 800; letter-spacing: -.035em; }
.panel-heading-icon { display: inline-grid; place-items: center; flex-shrink: 0; width: 46px; height: 46px; border-radius: 14px; color: var(--anexa-acento-p); background: rgba(var(--anexa-acento-rgb), .10); border: 1px solid rgba(var(--anexa-acento-rgb), .25); font-size: 1.35rem; }
.panel-content .input-group .form-control { min-width: 0; }
/* Bootstrap no marca el foco de los enlaces del menú lateral; el botón sí lo trae. */
.sidebar a:focus-visible { outline: 3px solid var(--anexa-acento); outline-offset: 3px; }
.panel-content .badge { padding: .4em .65em; line-height: 1.35; white-space: normal; }
.panel-content .badge.bg-success { background: #e3f4e9 !important; color: #21663d; }
.panel-content .badge.bg-danger { background: #fce8e8 !important; color: #a12835; }
.panel-content .badge.bg-secondary { background: #edf0f3 !important; color: #4e5b68; }
.panel-content .badge.bg-primary { background: rgba(var(--anexa-acento-rgb), .10) !important; color: var(--anexa-acento-p); }
.panel-content .badge.bg-warning { background: #fff1cd !important; color: #785500 !important; }
.panel-table-wrap { border-radius: inherit; }
.panel-records { font-size: .9375rem; }
.panel-records > thead > tr > th { padding: 1rem; background: #f8f9fb; color: #596675; font-size: .75rem; font-weight: 700; white-space: nowrap; border-bottom: 1px solid var(--anexa-borde); }
.panel-records > tbody > tr > td { padding: 1rem; overflow-wrap: anywhere; }
.panel-records .small { font-size: .8125rem; }
.panel-records > tbody > tr:last-child > td { border-bottom: 0; }
.panel-content .pagination { flex-wrap: wrap; gap: .35rem; }
.panel-content code { overflow-wrap: anywhere; }
.panel-content pre { max-width: 100%; }
.panel-records td[data-label="Canción"] { overflow-wrap: anywhere; }
[data-bs-theme="dark"] .panel-records > thead > tr > th,
[data-bs-theme="dark"] .panel-records td[data-label]::before { color: #adb8c4; }
.panel-content .modal-header, .panel-content .modal-body { padding: 1.25rem; }

/* La navegación conserva su posición y permite llegar al cierre de sesión en pantallas bajas. */
.panel-shell #sidebarOffcanvas { position: sticky; top: 0; height: 100dvh; }
.panel-shell #sidebarOffcanvas .offcanvas-body { overflow-y: auto; min-height: 0; }
.panel-shell #sidebarOffcanvas .anexa-brand { gap: .6rem; padding: .5rem .75rem; }
.panel-shell #sidebarOffcanvas .group { color: #a3afb8; font-size: .65rem; letter-spacing: .12em; margin: 1.15rem .75rem .45rem; }
.panel-shell #sidebarOffcanvas a { min-height: 44px; padding: .65rem .75rem; margin-bottom: .2rem; border-radius: 10px; color: #c2cbd1; font-size: .875rem; }
.panel-shell #sidebarOffcanvas a i { width: 24px; flex-shrink: 0; text-align: center; }
.panel-shell #sidebarOffcanvas a.active { background: rgba(var(--anexa-acento-rgb), .10); color: var(--anexa-acento-p); box-shadow: inset 3px 0 var(--anexa-acento); font-weight: 700; }
.panel-shell #sidebarOffcanvas a:hover { background: #303a40; color: #fff; }
.panel-topbar { position: sticky; top: 0; z-index: 1020; }

@media (min-width: 768px) {
  .panel-sidebar-column { width: 248px; flex: 0 0 248px; }
  .panel-shell #sidebarOffcanvas .offcanvas-body { height: 100%; }
  .panel-records td:first-child { min-width: 190px; }
  .panel-records td:last-child { min-width: 160px; }
}

/* Una sola fila conserva formularios, identificadores y eventos al cambiar de tamaño. */
@media (max-width: 767.98px) {
  .panel-content { padding: 1rem !important; width: 100%; }
  .panel-page-heading { align-items: flex-start !important; gap: .75rem !important; }
  .panel-page-heading h1 { width: 100%; }
  .panel-page-heading form { width: 100%; flex-wrap: wrap; }
  .panel-page-heading form input { flex: 1 1 150px; width: auto !important; min-width: 0; }
  .panel-content .input-group { max-width: 100% !important; }
  .panel-list-card { background: transparent !important; border: 0; box-shadow: none !important; }
  .panel-table-wrap { overflow: visible; }
  .panel-records, .panel-records tbody { display: block; width: 100%; }
  .panel-records thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .panel-records tbody tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-bottom: 1rem; background: #fff; border: 1px solid var(--anexa-borde); border-radius: 14px; box-shadow: 0 4px 16px rgb(27 32 34 / 4%); overflow: hidden; }
  .panel-records td:first-child, .panel-records td:last-child, .panel-records td[colspan], .panel-records td[data-label="Endpoint"], .panel-records td[data-label="Detalles del Plan"], .panel-records td[data-label="Cliente"] { grid-column: 1 / -1; }
  .panel-records > tbody > tr > td { display: block; width: 100%; padding: .65rem 1rem; border: 0; min-width: 0 !important; text-align: left !important; }
  .panel-records td[data-label]::before { content: attr(data-label); display: block; color: #657180; font: 600 .7rem/1.5 'Inter', sans-serif; margin-bottom: .2rem; }
  .panel-records td:first-child { background: #f8f9fb; padding-block: 1rem; font-size: 1rem; border-bottom: 1px solid var(--anexa-borde); }
  .panel-records td:last-child:not([colspan]) { background: #fafbfc; border-top: 1px solid var(--anexa-borde); padding-block: .8rem; }
  .panel-records .btn-group { justify-content: flex-start; }
  .panel-records td[colspan] { padding: 2rem 1rem; }
  .panel-shell #sidebarOffcanvas { position: fixed; width: min(310px, 90vw) !important; min-height: 0 !important; }
  .panel-shell #sidebarOffcanvas .offcanvas-body { flex: 1; }
}


/* Las variables de superficie permiten conservar el tema oscuro del panel de radio. */
.panel-content .card, .panel-records tbody tr { background: var(--anexa-tarjeta); }
.panel-records > thead > tr > th,
.panel-records td:first-child, .panel-records td:last-child:not([colspan]) { background: var(--anexa-fondo); }
.panel-content h1 { overflow-wrap: anywhere; }
.panel-content .card-body { min-width: 0; }
.panel-content .form-label { font-weight: 600; }
.panel-content .nav { gap: .35rem; flex-wrap: wrap; }
/* La pestaña activa toma el acento del área. Se hace por la variable del
   propio Bootstrap, no repintando la regla: así conserva su hover y su foco. */
.nav-pills {
  --bs-nav-pills-link-active-bg: var(--anexa-acento);
  --bs-nav-pills-link-active-color: #fff;
}
.panel-content .input-group > .btn { flex-shrink: 0; }
.panel-content .text-truncate { max-width: 100%; }
.panel-shell #sidebarOffcanvas .muted { color: #a3afb8; opacity: 1; }
.panel-shell #sidebarOffcanvas .subtitulo { color: #a3afb8; }
.panel-shell .anexa-menu a { min-height: 44px; margin: .2rem .65rem; border-radius: 9px; }
.panel-shell .anexa-menu .grupo, .panel-shell .anexa-marca .area { color: #a3afb8; }
.panel-shell .anexa-barra { position: sticky; top: 0; z-index: 1010; }
@media (min-width: 992px) {
  .panel-shell .anexa-lateral { position: sticky; top: 0; height: 100dvh; }
}
@media (max-width: 767.98px) {
  .panel-content > .d-flex { flex-wrap: wrap; gap: .75rem; }
  .panel-content .form-control, .panel-content .form-select { font-size: 1rem; }
  .panel-records td { white-space: normal !important; }
  .panel-records td[data-label="Canción"] { grid-column: 1 / -1; }
  .panel-content .card:has(> .panel-table-wrap) { border: 0; box-shadow: none !important; background: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .panel-shell *, .panel-shell *::before, .panel-shell *::after { scroll-behavior: auto !important; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   LISTA TIPO EXPLORADOR DE ARCHIVOS (biblioteca de música)
   Estaba escrita dentro de la vista, donde además redefinía .panel-table-wrap
   y le cambiaba el alto a TODAS las listas del panel. Aquí queda en la hoja
   única y el alto se limita a la tabla del explorador.
   ═══════════════════════════════════════════════════════════════════════════ */

  /* ── LISTA ESTILO EXPLORADOR DE ARCHIVOS ──────────────────────────────
     Filas delgadas para ver muchas canciones de un golpe. No hereda el
     relleno de las tablas del panel (1 rem por celda), que con cientos de
     canciones obliga a un scroll interminable. */
  .explorador {
    font-size: .86rem;
    /* FIJO: sin esto un nombre largo estira la tabla y empuja la columna de
       acciones fuera de la pantalla (el botón de borrar quedaba cortado).
       Con ancho fijo cada columna respeta su medida y el texto se recorta. */
    table-layout: fixed;
    width: 100%;
  }
  .explorador > thead > tr > th {
    padding: .3rem .5rem;
    font-size: .68rem;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--bs-secondary-color);
    font-weight: 600;
    background: var(--bs-tertiary-bg);
    border-bottom: 1px solid var(--bs-border-color);
    position: sticky;
    top: 0;
    z-index: 2;
  }
  .explorador > tbody > tr > td {
    padding: .18rem .5rem;      /* la fila queda en ~26 px */
    border-bottom: 1px solid var(--bs-border-color-translucent);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .explorador > tbody > tr:hover > td { background: rgba(var(--anexa-acento-rgb), .07); }
  .explorador .col-icono {
    width: 26px;
    max-width: 26px;
    color: var(--anexa-acento);
    text-align: center;
    opacity: .75;
  }
  .explorador > thead > tr > th:nth-child(1) { width: 26px; }    /* icono */
  .explorador > thead > tr > th:nth-child(2) { width: auto; }     /* nombre */
  .explorador > thead > tr > th:nth-child(3) { width: 26%; }      /* artista */
  .explorador > thead > tr > th:nth-child(4) { width: 72px; }     /* duración */
  .explorador > thead > tr > th:nth-child(5) { width: 84px; }     /* tamaño */
  .explorador > thead > tr > th:nth-child(6) { width: 92px; }     /* estado */
  .explorador > thead > tr > th:nth-child(7) { width: 38px; }     /* acción: el icono suelto, sin relleno */
  .explorador .celda-titulo { font-weight: 600; }
  .explorador .cifra {
    font-variant-numeric: tabular-nums;
    font-size: .8rem;
    color: var(--bs-secondary-color);
  }
  .explorador .celda-estado .badge { font-size: .64rem; padding: .18em .45em; }

  /* Alto fijo con scroll propio: la cabecera queda pegada arriba. */
  .panel-table-wrap:has(.explorador) {
    max-height: 62vh;
    overflow-y: auto;
    overflow-x: hidden;         /* nada de scroll horizontal: todo cabe */
    scrollbar-gutter: stable;   /* la barra no tapa la columna de acciones */
  }

  /* Pantalla angosta: primero se va la columna de artista (el nombre y los
     botones importan más que ella). */
  @media (max-width: 900px) {
    .explorador .celda-artista,
    .explorador > thead > tr > th:nth-child(3) { display: none; }
  }

  /* En celular la tabla no cabe: cada canción pasa a dos líneas compactas. */
  @media (max-width: 640px) {
    .explorador { table-layout: auto; }
    .explorador > thead { display: none; }
    .explorador .celda-artista { display: block; }
    .explorador > tbody > tr { display: grid; grid-template-columns: 22px 1fr auto auto;
      grid-template-areas: "ico nombre dur accion" "ico artista peso estado";
      gap: 0 .4rem; padding: .3rem .1rem; border-bottom: 1px solid var(--bs-border-color-translucent); }
    .explorador > tbody > tr > td { border: 0; padding: 0; max-width: none; }
    .explorador .col-icono { grid-area: ico; align-self: center; }
    .explorador .celda-titulo { grid-area: nombre; width: auto; }
    .explorador .celda-artista { grid-area: artista; width: auto; font-size: .78rem; }
    .explorador .celda-dur { grid-area: dur; width: auto; }
    .explorador .celda-peso { grid-area: peso; width: auto; }
    .explorador .celda-estado { grid-area: estado; width: auto; text-align: right; }
    .explorador .col-accion { grid-area: accion; width: auto; }
  }


/* ═══════════════════════════════════════════════════════════════════════════
   LISTAS DE ADMINISTRACIÓN (distribuidores, top de radios, paquetes)

   Las tres vistas llevaban dentro el MISMO bloque de estilos con distinto
   prefijo (rs-tabla, top-tabla, pk-tabla) y grises escritos a mano. Aquí va
   una sola vez, con los colores de Bootstrap.
   ═══════════════════════════════════════════════════════════════════════════ */
.dj-tabla td, .dj-tabla th,
.rs-tabla td, .rs-tabla th,
.top-tabla td, .top-tabla th,
.pk-tabla td, .pk-tabla th { vertical-align: middle; }

/* Cifras comparables: todos los dígitos ocupan lo mismo, así las columnas
   de números quedan alineadas aunque cambien los valores. */
.uso-cifra, .pk-dato { font-variant-numeric: tabular-nums; font-weight: 600; font-size: .82rem; }
.uso-etiqueta { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: var(--bs-secondary-color); }
.uso-linea { margin-bottom: .55rem; }
.uso-linea:last-child { margin-bottom: 0; }
.uso-barra { height: 6px; border-radius: 99px; background: var(--bs-tertiary-bg); }
.uso-sin-limite { font-size: .7rem; color: var(--bs-secondary-color); }
.rs-nombre { font-weight: 700; font-size: 1rem; }
.pk-nombre { font-weight: 700; }
.rs-usuario, .pk-slug { font-family: ui-monospace, monospace; font-size: .78rem; color: var(--bs-secondary-color); }
.rs-aire { font-size: .74rem; color: var(--bs-success); font-weight: 600; }
.rs-cuentas { font-size: .74rem; color: var(--bs-secondary-color); }

/* En pantalla angosta la tabla no cabe: cada fila pasa a ser una tarjeta y
   cada celda muestra su nombre de columna (el atributo data-t). */
@media (max-width: 991.98px) {
  .dj-tabla thead, .rs-tabla thead, .top-tabla thead, .pk-tabla thead { display: none; }
  .dj-tabla tr, .rs-tabla tr, .top-tabla tr, .pk-tabla tr {
    display: block;
    border: 1px solid var(--bs-border-color);
    border-radius: 10px;
    margin-bottom: .8rem;
    padding: .8rem;
  }
  .rs-tabla td { display: block; border: 0; padding: .25rem 0; }
  .dj-tabla td, .top-tabla td, .pk-tabla td { display: flex; justify-content: space-between; gap: 1rem; border: 0; padding: .28rem 0; }
  .dj-tabla td[data-t]::before,
  .rs-tabla td[data-t]::before,
  .top-tabla td[data-t]::before,
  .pk-tabla td[data-t]::before {
    content: attr(data-t);
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--bs-secondary-color);
  }
  .rs-tabla td[data-t]::before { display: block; margin-bottom: .15rem; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   IDENTIDAD DE MOTOR
   Un color por motor, el mismo en todo el panel: ANEXA LIVE celeste, Icecast
   verde, Shoutcast naranja. Estaban escritos a mano en cada vista y ya no
   coincidían entre pantallas.
   ═══════════════════════════════════════════════════════════════════════════ */
.motor { background: var(--motor, #6c757d); color: #fff; }
.motor-live     { --motor: #249CD3; }
.motor-icecast  { --motor: #75B43F; }
.motor-shoutcast{ --motor: #FF5A1F; }

/* ═══════════════════════════════════════════════════════════════════════════
   BARRA LATERAL DE LOS PANELES (admin, reseller, cliente)
   Estaba repetida en un <style> dentro de cada layout; ahora vive aquí una
   sola vez. Va al final para conservar el mismo orden que tenía.
   ═══════════════════════════════════════════════════════════════════════════ */
.anexa-brand { font-weight: 800; letter-spacing: .5px; text-decoration: none; color: #FAFAFA; }
.anexa-brand span { color: inherit; }
.sidebar {
  background: #1B2022 !important; /* Bootstrap fuerza transparente en offcanvas */
  border-color: #272E31 !important;
}
.sidebar a {
  color: #9CA3AF; text-decoration: none; display: flex; align-items: center;
  padding: .6rem 1rem; border-radius: .25rem; font-weight: 500; font-size: .95rem;
  transition: all .15s ease;
}
.sidebar a i { font-size: 1.15rem; }
.sidebar a:hover { background: #272E31; color: #FAFAFA; }
.sidebar a.active { background: var(--anexa-acento); color: #fff; }
.sidebar .muted { color: #4B5563; opacity: .8; padding: .5rem 1rem; font-size: .85rem; display: flex; align-items: center; }
.sidebar .group { color: #404B50; text-transform: uppercase; font-size: .72rem; letter-spacing: .08em; margin: 1.25rem 1rem .35rem; }
.sidebar .subtitulo {
  color: #6B7280; font-size: .72rem; text-transform: uppercase; letter-spacing: .18em;
  font-weight: 600; margin: -.5rem 0 1.25rem 2.35rem;
}
