/* ============================================================================
   ChivoBot Management — hoja de estilos única.
   Todo el CSS del panel vive acá. Las plantillas solo usan clases.

   TEMA ACERO (azul profundo). Pares texto/fondo verificados WCAG AA:
     texto/bg 15.9:1 · muted/surface 6.5:1 · link/bg 9.7:1 · botón blanco/primary 5.4:1

   PRINCIPIOS (romperlos es lo que hacía que el panel se viera a medio hacer):
   1. Una sola cosa con color por pantalla. Lo normal va en gris; el color se
      reserva para lo que pide atención. Por eso el estado "bot" es gris.
   2. Las acciones de fila son texto, no bloques macizos. Un "Eliminar" rojo
      repetido 30 veces pesa más que los datos, y borrar es raro.
   3. Iconos SVG, nunca emojis: los emojis cambian de dibujo según el sistema
      operativo, no se pueden colorear y le dan aire de prototipo.
   4. Números con font-variant-numeric: tabular-nums, siempre.

   COMPATIBILIDAD: las plantillas no migradas dependen de que `button`, `input`,
   `textarea`, `select`, `.card`, `.pill`, `.muted`, `.row` y `.t-cards` sigan
   estilados globalmente, y de los alias --card/--accent/--accent2. No renombrar
   sin migrarlas antes.
   ========================================================================== */

:root {
  /* Superficies */
  --bg:#0b1220; --surface:#131c2e; --surface-2:#18243a; --surface-hover:#1e2c46;
  --sunken:#080e19; --border:#233149; --border-strong:#33455f;

  /* Texto */
  --text:#e8edf6; --muted:#93a1b8; --dim:#66748c;

  /* Acción */
  --primary:#0e7490; --primary-hover:#0891b2; --primary-ink:#ffffff; --link:#5cc9e0;
  --accent:#0e7490;

  /* Estados: pares fondo + texto, no colores sueltos */
  --ok:#2dd4bf;     --ok-bg:#0b3b3a;     --ok-text:#2dd4bf;
  --warn:#f0b429;   --warn-bg:#3b2c09;   --warn-text:#f0b429;
  --danger:#f87171; --danger-bg:#3f1c1c; --danger-text:#f87171;
  --danger-solid:#b91c1c; --danger-border:#7f1d1d;

  /* Espaciado / tipografía / radios */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px; --sp-7:48px;
  --font:-apple-system,'Segoe UI',Roboto,sans-serif;
  --mono:ui-monospace,'SF Mono',Menlo,Consolas,monospace;
  --fs-1:11px; --fs-2:12px; --fs-3:13px; --fs-4:14px;
  --fs-5:16px; --fs-6:20px; --fs-7:25px; --fs-8:32px;
  --r-sm:6px; --r-md:9px; --r-lg:12px; --r-full:999px;
  --shadow:0 10px 30px rgba(0,0,0,.45);

  /* Alias de los tokens viejos (plantillas aún no migradas) */
  --card:var(--surface);
  --accent2:var(--primary);
}

/* ============================================================================
   TEMAS ALTERNATIVOS — se activan con [data-theme] en <html> (lo pone un
   <script> en base.html leyendo localStorage 'cb_mgmt_theme'). Sin data-theme
   queda el tema ACERO de :root. Solo se redefinen los tokens "hoja"; los alias
   (--card/--accent/--accent2) son var(--surface|--primary) y siguen solos.
   El sistema de diseño (comentarios de arriba) aplica igual a todos.
   ========================================================================== */
/* --- Claras --- */
html[data-theme="lino"]{
  --bg:#f7f4ee; --surface:#fffefb; --surface-2:#f1ece2; --surface-hover:#efe9dd; --sunken:#f1ece2;
  --border:#e5ddcf; --border-strong:#d3c8b4;
  --text:#2a2620; --muted:#6b6355; --dim:#948b7a;
  --primary:#0f766e; --primary-hover:#0d5f58; --primary-ink:#fff; --link:#0f766e;
  --ok:#15803d; --ok-bg:#dcfce7; --ok-text:#166534;
  --warn:#b45309; --warn-bg:#fef3c7; --warn-text:#92400e;
  --danger:#b91c1c; --danger-bg:#fee2e2; --danger-text:#991b1b; --danger-solid:#dc2626; --danger-border:#fca5a5;
  --shadow:0 8px 24px rgba(80,60,30,.10);
}
html[data-theme="artico"]{
  --bg:#eef2f8; --surface:#ffffff; --surface-2:#e9eef6; --surface-hover:#e5ebf4; --sunken:#eef2f8;
  --border:#dbe3ee; --border-strong:#c2cfe0;
  --text:#0f1e33; --muted:#4d5d75; --dim:#7d8ba0;
  --primary:#1d4ed8; --primary-hover:#1e40af; --primary-ink:#fff; --link:#1d4ed8;
  --ok:#047857; --ok-bg:#d1fae5; --ok-text:#065f46;
  --warn:#c2410c; --warn-bg:#ffedd5; --warn-text:#9a3412;
  --danger:#dc2626; --danger-bg:#fee2e2; --danger-text:#991b1b; --danger-solid:#dc2626; --danger-border:#fca5a5;
  --shadow:0 8px 26px rgba(30,55,110,.10);
}
html[data-theme="salvia"]{
  --bg:#f2f5f0; --surface:#ffffff; --surface-2:#eaf0e6; --surface-hover:#e6ede1; --sunken:#eef2ea;
  --border:#dde5d7; --border-strong:#c3d0b9;
  --text:#20281f; --muted:#5a6656; --dim:#8a9784;
  --primary:#4d7c0f; --primary-hover:#3f6212; --primary-ink:#fff; --link:#4d7c0f;
  --ok:#15803d; --ok-bg:#dcfce7; --ok-text:#166534;
  --warn:#a16207; --warn-bg:#fef3c7; --warn-text:#854d0e;
  --danger:#b91c1c; --danger-bg:#fee2e2; --danger-text:#991b1b; --danger-solid:#dc2626; --danger-border:#fca5a5;
  --shadow:0 8px 24px rgba(40,60,30,.09);
}
/* --- Oscuras --- */
html[data-theme="oceano"]{
  --bg:#0a1417; --surface:#0f1e22; --surface-2:#152a30; --surface-hover:#1c383f; --sunken:#07100f;
  --border:#1f3b42; --border-strong:#2c525b;
  --text:#e3f0f2; --muted:#8faaae; --dim:#5f797d;
  --primary:#06b6d4; --primary-hover:#22d3ee; --primary-ink:#04141a; --link:#67e8f9;
  --ok:#2dd4bf; --ok-bg:#0b3b3a; --ok-text:#5eead4;
  --warn:#fbbf24; --warn-bg:#3b2c09; --warn-text:#fcd34d;
  --danger:#fb7185; --danger-bg:#3f1c1f; --danger-text:#fda4af; --danger-solid:#e11d48; --danger-border:#881337;
  --shadow:0 12px 34px rgba(0,0,0,.5);
}
html[data-theme="ciruela"]{
  --bg:#150e17; --surface:#1f1522; --surface-2:#2b1e30; --surface-hover:#37273d; --sunken:#0f0a11;
  --border:#3a2b40; --border-strong:#4f3a58;
  --text:#f0e8f2; --muted:#b09cb6; --dim:#7d6a84;
  --primary:#db2777; --primary-hover:#ec4899; --primary-ink:#fff; --link:#f9a8d4;
  --ok:#34d399; --ok-bg:#0b3b2e; --ok-text:#6ee7b7;
  --warn:#fbbf24; --warn-bg:#3b2c09; --warn-text:#fcd34d;
  --danger:#f87171; --danger-bg:#3f1c1c; --danger-text:#fca5a5; --danger-solid:#dc2626; --danger-border:#7f1d1d;
  --shadow:0 14px 38px rgba(90,20,80,.28);
}
html[data-theme="grafito"]{
  --bg:#131316; --surface:#1c1c20; --surface-2:#26262b; --surface-hover:#2e2e34; --sunken:#0e0e10;
  --border:#2f2f36; --border-strong:#41414a;
  --text:#eaeaee; --muted:#9d9da6; --dim:#6e6e77;
  --primary:#0ea5e9; --primary-hover:#38bdf8; --primary-ink:#04121a; --link:#7dd3fc;
  --ok:#34d399; --ok-bg:#0b3b2e; --ok-text:#6ee7b7;
  --warn:#fbbf24; --warn-bg:#332708; --warn-text:#fcd34d;
  --danger:#f87171; --danger-bg:#3a1d1d; --danger-text:#fca5a5; --danger-solid:#dc2626; --danger-border:#7f1d1d;
  --shadow:0 12px 34px rgba(0,0,0,.5);
}

* { box-sizing:border-box; margin:0; }
html, body { height:100%; }
body {
  font-family:var(--font); background:var(--bg); color:var(--text);
  font-size:var(--fs-4); line-height:1.45;
}
:focus-visible { outline:2px solid var(--primary-hover); outline-offset:2px; border-radius:var(--r-sm); }
a { color:var(--link); }
[hidden] { display:none !important; }

/* Iconos SVG inline (sprite en base.html) */
.i { width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:1.8;
     stroke-linecap:round; stroke-linejoin:round; flex:0 0 auto; }

/* ============================================================================
   NAV SUPERIOR — agrupada por la pregunta que responde cada sección:
     Dashboard / Clientes  → operar
     Bot                   → cómo se comporta (prompt, re-enganche, seguridad)
     Supervisión           → qué hizo y cuánto costó (auditor, log IA)
     Ayuda                 → manuales, analytics
   El contenido gana el ancho que ocupaba la sidebar.
   ========================================================================== */
.nav { position:sticky; top:0; z-index:20; background:var(--surface); border-bottom:1px solid var(--border); }
.nav-row { display:flex; align-items:center; gap:var(--sp-4); padding:0 var(--sp-5);
           height:54px; max-width:1760px; margin:0 auto; }
.logo { font-weight:800; letter-spacing:.3px; font-size:var(--fs-5); text-decoration:none;
        color:var(--text); white-space:nowrap; margin-right:var(--sp-3); }
.logo span { color:var(--link); }
.logo small { display:block; font-size:9px; color:var(--dim); letter-spacing:.16em;
              text-transform:uppercase; font-weight:600; margin-top:-3px; }
.menu { display:flex; align-items:center; gap:2px; flex:1; }
.menu > a, .drop > button.nav-btn {
  display:inline-flex; align-items:center; gap:7px; padding:8px var(--sp-3);
  border-radius:var(--r-sm); color:var(--muted); text-decoration:none;
  font-size:var(--fs-3); font-weight:600; background:none; border:0; cursor:pointer;
  font-family:inherit; white-space:nowrap;
}
.menu > a:hover, .drop > button.nav-btn:hover { background:var(--surface-hover); color:var(--text); }
.menu > a.on, .drop.activo > button.nav-btn {
  color:var(--text); background:var(--surface-hover); box-shadow:inset 0 -2px 0 var(--accent);
}
.drop { position:relative; }
.drop.abierto > button.nav-btn, .drop.abierto > button.icon-btn { background:var(--surface-hover); color:var(--text); }
.drop-menu {
  position:absolute; top:calc(100% + 5px); left:0; min-width:235px;
  background:var(--surface-2); border:1px solid var(--border-strong);
  border-radius:var(--r-md); box-shadow:var(--shadow); padding:5px; display:none; z-index:30;
}
/* OJO: NO llamar a esto `.der`. `.nav .der` (el grupo de la derecha del header)
   es display:flex y también matchearía este menú, poniendo sus items en fila.
   Es exactamente la colisión de clases que este archivo existe para evitar. */
.drop-menu.alineado-der { left:auto; right:0; }
.drop.abierto .drop-menu { display:block; }
.drop-menu a {
  display:flex; align-items:center; gap:9px; padding:9px 11px; border-radius:var(--r-sm);
  color:var(--muted); text-decoration:none; font-size:var(--fs-3); font-weight:500;
}
.drop-menu a:hover { background:var(--surface-hover); color:var(--text); }
.drop-menu a.on { color:var(--text); font-weight:700; background:var(--surface-hover); }
.drop-menu .cab { font-size:10px; color:var(--dim); text-transform:uppercase;
                  letter-spacing:.1em; font-weight:700; padding:7px 11px 4px; }
.drop-menu .sep { height:1px; background:var(--border); margin:5px 8px; }
/* Opciones del selector de tema (botones dentro del drop-menu). Se estilan como
   los <a> del menú; el `button` global las pondría en primary si no. */
.drop-menu .theme-opt {
  display:flex; align-items:center; gap:9px; width:100%; text-align:left;
  padding:9px 11px; border:0; border-radius:var(--r-sm); background:none; cursor:pointer;
  color:var(--muted); font-size:var(--fs-3); font-weight:500; font-family:inherit; justify-content:flex-start;
}
.drop-menu .theme-opt:hover { background:var(--surface-hover); color:var(--text); }
.drop-menu .theme-opt.on { color:var(--text); font-weight:700; background:var(--surface-hover); }
.drop-menu .theme-opt .sw { display:inline-flex; flex:0 0 auto; }
.drop-menu .theme-opt .sw i { width:13px; height:13px; border-radius:50%; display:block;
  margin-left:-4px; border:1.5px solid var(--surface-2); }
.drop-menu .theme-opt .sw i:first-child { margin-left:0; }
.drop-menu .theme-opt .ck { margin-left:auto; opacity:0; }
.drop-menu .theme-opt.on .ck { opacity:1; }
.nav .der { display:flex; align-items:center; gap:var(--sp-2); margin-left:auto; }
.icon-btn { background:transparent; border:1px solid var(--border-strong); color:var(--muted);
            border-radius:var(--r-sm); padding:6px 8px; cursor:pointer; display:inline-flex; }
.icon-btn:hover { background:var(--surface-hover); color:var(--text); }
.avatar { width:28px; height:28px; border-radius:var(--r-full); background:var(--primary);
          color:#fff; display:grid; place-items:center; font-size:var(--fs-2); font-weight:700; }

/* Fila 2: pestañas del cliente */
.nav-ctx { border-top:1px solid var(--border); background:var(--bg); }
.nav-ctx .nav-row { height:auto; }

/* ============================================================================
   CONTENIDO
   ========================================================================== */
main, .wrap { max-width:1760px; margin:0 auto; padding:var(--sp-5); }
.wrap.narrow, main.narrow { max-width:860px; }
.crumb { font-size:var(--fs-2); color:var(--dim); margin-bottom:var(--sp-2); }
.crumb a { color:var(--muted); text-decoration:none; }
.page-head { display:flex; align-items:flex-start; gap:var(--sp-4); margin-bottom:var(--sp-4); }
.page-head .spacer { flex:1; }
h1 { font-size:var(--fs-7); font-weight:800; letter-spacing:-.02em; }
h2 { font-size:var(--fs-2); color:var(--muted); font-weight:700; letter-spacing:.08em;
     text-transform:uppercase; margin:var(--sp-6) 0 var(--sp-3); }
h3 { font-size:var(--fs-5); font-weight:700; margin-bottom:var(--sp-2); }
.sub { color:var(--muted); font-size:var(--fs-3); margin-top:2px; }
.muted { color:var(--muted); font-size:var(--fs-3); }
.hint { color:var(--dim); font-size:var(--fs-2); margin-top:5px; }
.mono { font-family:var(--mono); font-size:var(--fs-2); color:var(--muted); }

/* ============================================================================
   COMPONENTES
   ========================================================================== */
.card { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg);
        padding:var(--sp-5); margin-bottom:var(--sp-4); overflow-x:auto; }
.card-head { display:flex; align-items:center; gap:var(--sp-3);
             margin:calc(var(--sp-5) * -1) calc(var(--sp-5) * -1) var(--sp-4);
             padding:var(--sp-3) var(--sp-5); border-bottom:1px solid var(--border); }
.card-head h3 { margin:0; font-size:var(--fs-4); }
.card-head .spacer { flex:1; }
.card.tabla { padding:0; overflow:hidden; }
.card.tabla thead th:first-child, .card.tabla tbody td:first-child,
.card.tabla tr:first-child th:first-child { padding-left:var(--sp-5); }
.card.tabla thead th:last-child, .card.tabla tbody td:last-child,
.card.tabla tr:first-child th:last-child { padding-right:var(--sp-5); }

/* KPI — una sola definición */
.kpis { display:grid; grid-template-columns:repeat(auto-fit,minmax(165px,1fr));
        gap:var(--sp-3); margin-bottom:var(--sp-4); }
.kpi { background:var(--surface); border:1px solid var(--border);
       border-radius:var(--r-md); padding:var(--sp-4); }
.kpi .valor { font-size:var(--fs-8); font-weight:800; letter-spacing:-.03em;
              font-variant-numeric:tabular-nums; }
.kpi .valor small { font-size:var(--fs-4); color:var(--muted); font-weight:500; }
.kpi .etiqueta { color:var(--muted); font-size:var(--fs-2); margin-top:2px; }
.kpi .delta { font-size:var(--fs-2); font-weight:700; margin-top:6px; }
.kpi .delta.up { color:var(--ok); }
.kpi .delta.down { color:var(--danger); }
.kpi.destacado { border-color:var(--primary); }
.kpi.destacado .valor { color:var(--link); }
/* alias del marcado viejo (.n / .t en tenant.html) */
.kpi .n { font-size:var(--fs-7); font-weight:800; letter-spacing:-.03em; font-variant-numeric:tabular-nums; }
.kpi .t { color:var(--muted); font-size:var(--fs-2); margin-top:2px; }

/* Botones */
button, .btn, a.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  background:var(--primary); color:var(--primary-ink); border:1px solid transparent;
  border-radius:var(--r-sm); padding:8px 13px; font-size:var(--fs-3); font-weight:600;
  cursor:pointer; text-decoration:none; font-family:inherit; white-space:nowrap;
}
button:hover, .btn:hover { background:var(--primary-hover); }
.btn.ghost, button.ghost { background:transparent; border-color:var(--border-strong); color:var(--text); }
.btn.ghost:hover, button.ghost:hover { background:var(--surface-hover); }
button.danger, .btn.danger { background:var(--danger-solid); color:#fff; }
button.danger:hover, .btn.danger:hover { background:#dc2626; }
button.success, .btn.success { background:var(--ok-bg); color:var(--ok-text); border-color:var(--ok); }
.btn.sm, button.sm { padding:5px 10px; font-size:var(--fs-2); }
/* Acción de fila: texto. El rojo aparece solo al pasar el mouse. */
.btn.link, button.link {
  background:transparent; color:var(--link); padding:4px 8px; font-weight:600;
  font-size:var(--fs-3); border:0;
}
.btn.link:hover, button.link:hover { background:var(--surface-hover); }
.btn.link.peligro, button.link.peligro { color:var(--muted); }
.btn.link.peligro:hover, button.link.peligro:hover { background:var(--danger-bg); color:var(--danger); }
.acciones { display:flex; gap:2px; justify-content:flex-end; align-items:center; }

/* Pills de estado */
.pill { display:inline-flex; align-items:center; gap:5px; padding:2px 8px;
        border-radius:var(--r-full); font-size:var(--fs-2); font-weight:600; white-space:nowrap; }
.pill::before { content:''; width:5px; height:5px; border-radius:50%; background:currentColor; }
.pill.on   { background:var(--ok-bg);     color:var(--ok-text); }
.pill.off  { background:var(--danger-bg); color:var(--danger-text); }
.pill.warn { background:var(--warn-bg);   color:var(--warn-text); }
.pill.info { background:var(--surface-2); color:var(--link); }
/* Lo normal es gris: "bot", el plan, el proveedor. Sin punto de color. */
.pill.plain { background:var(--surface-2); color:var(--muted); }
.pill.plain::before { display:none; }

/* Tablas */
table { width:100%; border-collapse:collapse; font-size:var(--fs-3); }
thead th, table tr:first-child th {
  text-align:left; padding:10px var(--sp-3); color:var(--dim); font-size:var(--fs-1);
  font-weight:700; text-transform:uppercase; letter-spacing:.07em;
  border-bottom:1px solid var(--border); white-space:nowrap;
}
th, td { text-align:left; }
tbody td, table td { padding:11px var(--sp-3); border-bottom:1px solid var(--border); vertical-align:middle; }
tbody tr:last-child td { border-bottom:none; }
tbody tr:hover { background:var(--surface-hover); }
td .nombre { font-weight:600; }
td .sec { color:var(--muted); font-size:var(--fs-2); }
.num { font-variant-numeric:tabular-nums; text-align:right; }
/* Textos largos en tabla: 2 líneas. Filas de alturas distintas se ven desordenadas. */
.recorte { color:var(--muted); max-width:430px; overflow:hidden; display:-webkit-box;
           -webkit-line-clamp:2; -webkit-box-orient:vertical; }

/* Pestañas del cliente (_tenant_tabs.html) */
.tabs { display:flex; gap:2px; overflow-x:auto; scrollbar-width:thin; flex-wrap:nowrap; }
.tabs::-webkit-scrollbar { height:3px; }
.tabs::-webkit-scrollbar-thumb { background:var(--border-strong); border-radius:var(--r-full); }
.tabs button.tab, .tabs a.tab {
  background:none; border:0; border-radius:0; border-bottom:2px solid transparent;
  color:var(--muted); padding:11px var(--sp-3); font-size:var(--fs-3); cursor:pointer;
  text-decoration:none; white-space:nowrap; flex:0 0 auto; font-weight:500;
}
.tabs button.tab:hover, .tabs a.tab:hover { background:none; color:var(--text); }
.tabs button.tab.active, .tabs a.tab.active {
  color:var(--text); border-bottom-color:var(--accent); font-weight:700;
}
.tabs .cnt { color:var(--dim); font-size:var(--fs-2); }
.tabs .div { width:1px; background:var(--border); margin:9px 6px; flex:0 0 auto; }
.tabs a.volver { color:var(--dim); display:inline-flex; align-items:center; gap:5px; }

/* Segmented control / filtros (dashboard, seguridad, log IA) */
.seg, .filtros {
  display:inline-flex; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-sm); padding:3px; gap:2px;
}
.seg .tab-btn, .filtros button, .filtros a {
  background:transparent; border:0; color:var(--muted); cursor:pointer;
  padding:6px 13px; border-radius:4px; font-size:var(--fs-3); font-weight:600;
  text-decoration:none; display:inline-flex; align-items:center; gap:6px;
}
.seg .tab-btn:hover, .filtros button:hover, .filtros a:hover { background:var(--surface-hover); color:var(--text); }
.seg .tab-btn.activo, .filtros button.on, .filtros a.on { background:var(--surface-hover); color:var(--text); }
.filtros .cnt { color:var(--dim); font-size:var(--fs-2); }

/* Formularios. Deuda consciente: width:100% global porque las plantillas no
   migradas lo dan por hecho. Para un campo corto: .w-auto. */
label { display:block; font-size:var(--fs-2); color:var(--muted); margin-bottom:5px; font-weight:600; }
input, textarea, select {
  width:100%; background:var(--sunken); color:var(--text);
  border:1px solid var(--border); border-radius:var(--r-sm);
  padding:9px 11px; font-size:var(--fs-3); font-family:inherit; margin-bottom:10px;
}
input:hover, textarea:hover, select:hover { border-color:var(--border-strong); }
textarea { min-height:130px; resize:vertical; line-height:1.55; }
input[type=checkbox], input[type=radio] { width:auto; margin-bottom:0; accent-color:var(--primary); }
.w-auto { width:auto; }
.field { margin-bottom:var(--sp-4); }
.row { display:flex; gap:var(--sp-3); }
.row > div { flex:1; }
.actions { display:flex; gap:var(--sp-2); align-items:center; margin-top:var(--sp-4); }
/* Barra de herramientas sobre una tabla/lista (buscador + acción). Antes cada
   plantilla la repetía como style="display:flex;gap:…" inline. */
.toolbar { display:flex; gap:var(--sp-3); align-items:center; flex-wrap:wrap; margin-bottom:var(--sp-4); }

/* Barra de progreso */
.bar { background:var(--sunken); border-radius:var(--r-full); height:8px; overflow:hidden; }
.bar > i { display:block; height:100%; border-radius:var(--r-full); background:var(--ok); }
.bar > i.warn { background:var(--warn); }
.bar > i.danger { background:var(--danger-solid); }

/* Estados vacíos */
.empty { text-align:center; padding:var(--sp-7) var(--sp-4); }
.empty h3 { margin-bottom:6px; }
.empty p { color:var(--muted); font-size:var(--fs-3); max-width:420px; margin:0 auto; }

/* Toast */
.toast {
  position:fixed; right:var(--sp-5); bottom:var(--sp-5); z-index:50;
  background:var(--surface-2); border:1px solid var(--border-strong);
  border-left:3px solid var(--ok); border-radius:var(--r-md);
  padding:12px var(--sp-4); box-shadow:var(--shadow); font-size:var(--fs-3);
  display:flex; gap:10px; align-items:center;
  transform:translateY(14px); opacity:0; pointer-events:none; transition:.22s ease;
}
.toast.show { transform:none; opacity:1; }
.toast.err { border-left-color:var(--danger); }

/* Banners */
.banner, .banner-caidas {
  display:flex; gap:10px; align-items:flex-start;
  background:var(--danger-bg); border:1px solid var(--danger-border); color:var(--danger-text);
  border-radius:var(--r-md); padding:12px var(--sp-4); font-size:var(--fs-3);
  margin-bottom:var(--sp-4);
}
.banner a, .banner-caidas a { color:#fff; }
.banner.warn { background:var(--warn-bg); border-color:#78350f; color:var(--warn-text); }

/* Zona de peligro */
.peligro { border-color:var(--danger-border); }
.peligro h2, .peligro h3 { color:var(--danger); }

/* Chat */
.chat-log { display:flex; flex-direction:column; gap:10px; }
.msg { max-width:74%; padding:9px 13px; border-radius:var(--r-md); font-size:var(--fs-3); line-height:1.5; }
.msg.in  { background:var(--surface-2); border:1px solid var(--border); align-self:flex-start; border-bottom-left-radius:3px; }
.msg.out { background:var(--primary); color:#fff; align-self:flex-end; border-bottom-right-radius:3px; }
.msg .hora { display:block; font-size:10px; opacity:.6; margin-top:4px; }

/* Feed */
.feed { list-style:none; }
.feed li { display:flex; gap:10px; align-items:baseline; padding:9px 0;
           border-bottom:1px solid var(--border); font-size:var(--fs-3); }
.feed li:last-child { border-bottom:none; }
.feed .hora { color:var(--dim); font-size:var(--fs-2); white-space:nowrap; }
.feed a { color:var(--link); text-decoration:none; }

/* Gráficas (Chart.js) */
.graficas { display:grid; grid-template-columns:2fr 1fr; gap:var(--sp-4); }
.graficas .gfx h3 { margin:0 0 10px; font-size:var(--fs-2); color:var(--muted);
                    text-transform:uppercase; letter-spacing:.08em; font-weight:700; }
.graficas .lienzo { position:relative; height:220px; }

#qr { background:#fff; padding:12px; border-radius:var(--r-md); display:inline-block; }

/* ============================================================================
   MÓVIL
   ========================================================================== */
@media (max-width:900px) {
  .nav-row { gap:var(--sp-2); padding:0 var(--sp-3); }
  .logo small { display:none; }
  .logo { font-size:var(--fs-4); margin-right:0; }

  /* El menú NO se colapsa a iconos sueltos: los iconos solos son adivinanza.
     Se mantienen los textos y la fila scrollea en horizontal. */
  .menu { overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch; }
  .menu::-webkit-scrollbar { display:none; }
  .menu > a, .drop > button.nav-btn { flex:0 0 auto; padding:8px 10px; }

  /* Los desplegables (Bot / Supervisión / Ayuda) son hijos de `.menu`, que aquí
     scrollea en horizontal. Un contenedor de scroll RECORTA a sus hijos, y en
     iOS ni siquiera `position:fixed` se escapa: el menú se abría dentro de la
     fila de 54px y parecía no abrir. Solución: al abrirlo, `base.html` lo
     **mueve a <body>** (clase `.flotante`) y lo devuelve a su sitio al cerrar.
     Así no hay ningún ancestro que lo pueda recortar. */
  .drop { position:static; }
  .drop-menu.flotante, .drop-menu.flotante.alineado-der {
    display:block; position:fixed; top:58px; left:var(--sp-2); right:var(--sp-2);
    min-width:0; width:auto; max-height:calc(100vh - 76px); overflow-y:auto; z-index:60;
  }

  main, .wrap { padding:var(--sp-4); }
  .graficas { grid-template-columns:1fr; }
  .graficas .lienzo { height:200px; }
}
@media (max-width:640px) {
  h1 { font-size:var(--fs-6); }
  .row { flex-wrap:wrap; }
  .row > div { flex:1 1 100% !important; max-width:none !important; }
  table { font-size:var(--fs-2); }
  tbody td, table td { padding:9px var(--sp-2); }
  .card { padding:var(--sp-4); }
  .filtros, .seg { width:100%; }
  .filtros button, .seg .tab-btn { flex:1; justify-content:center; }
  .recorte { max-width:none; }
}

/* Tablas → tarjetas en móvil (patrón heredado, funciona bien) */
@media (max-width:640px) {
  .t-cards tr:first-child { display:none; }
  .t-cards, .t-cards tbody, .t-cards tr, .t-cards td { display:block; width:100%; }
  .t-cards tr { border:1px solid var(--border); border-radius:var(--r-md);
                padding:10px 12px; margin-bottom:12px; }
  .t-cards tr:hover { background:transparent; }
  .t-cards td { border:none; padding:6px 0; display:flex; align-items:flex-start;
                justify-content:space-between; gap:14px; text-align:right;
                white-space:normal !important; }
  .t-cards td::before { content:attr(data-label); color:var(--muted); font-size:var(--fs-2);
                text-transform:uppercase; letter-spacing:.5px; text-align:left; flex:0 0 auto; }
  .t-cards td.t-main { display:block; text-align:left; font-size:var(--fs-5);
                padding-bottom:8px; margin-bottom:4px; border-bottom:1px solid var(--border); }
  .t-cards td.t-main::before { content:none; }
  .t-cards td.t-block { display:block; text-align:left; max-width:none !important; }
  .t-cards td.t-block::before { display:block; margin-bottom:3px; }
  .t-cards td.t-actions { display:flex; gap:8px; text-align:left; }
  .t-cards td.t-actions::before { content:none; }
  .t-cards td.t-actions .btn { flex:1; text-align:center; margin:0 !important; }
  .t-cards td.t-actions form { flex:1; display:block !important; }
  .t-cards td.t-actions form button { width:100%; margin:0 !important; }
}
