/* WebRadar — panel admin
 * Tema claro, moderno, minimalista. Indigo como acento. Inter como tipografía.
 * Todas las clases conservan los mismos nombres del tema anterior para no
 * romper plantillas existentes; solo cambian los valores visuales.
 */

:root {
    --bg: #f7f8fb;                  /* lienzo, gris muy frío */
    --panel: #ffffff;               /* tarjetas y barra superior */
    --panel-soft: #f3f5f9;          /* inputs / hover sutil */
    --text: #1a2030;                /* texto principal — gris muy oscuro, no negro */
    --text-strong: #0c1322;         /* títulos */
    --muted: #6b7384;               /* texto secundario, etiquetas, fechas */
    --muted-2: #9aa0ad;             /* hints todavía más bajos */
    --accent: #6366f1;              /* indigo — joven, moderno, distintivo */
    --accent-soft: #eef0ff;         /* fondo botón fantasma / focus ring */
    --accent-strong: #4f52e0;
    --danger: #ef4444;
    --danger-soft: #fef2f2;
    --warning: #f59e0b;
    --warning-soft: #fffbeb;
    --ok: #10b981;
    --ok-soft: #ecfdf5;
    --border: #e6e8ef;              /* bordes finos sobre blanco */
    --border-strong: #d2d6e0;
    --shadow-sm: 0 1px 2px rgba(15, 22, 32, 0.04);
    --shadow-md: 0 4px 14px rgba(15, 22, 32, 0.06), 0 1px 2px rgba(15, 22, 32, 0.04);
    --shadow-lg: 0 10px 30px rgba(15, 22, 32, 0.08);
    --radius-sm: 6px;
    --radius: 10px;
    --radius-lg: 14px;
}

* { box-sizing: border-box; }

body {
    margin: 0;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    background: var(--bg);
    color: var(--text);
    font-size: 14.5px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* ── Barra superior ───────────────────────────────────────────────────── */
.top {
    background: var(--panel);
    border-bottom: 1px solid var(--border);
    position: sticky;
    top: 0;
    z-index: 10;
    backdrop-filter: saturate(180%) blur(8px);
}
.top-inner {
    max-width: 1080px;
    margin: 0 auto;
    padding: 14px 28px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.top .brand {
    font-weight: 700;
    letter-spacing: -0.01em;
    font-size: 16px;
    color: var(--text-strong);
    display: inline-flex;
    align-items: center;
    gap: 8px;
    text-decoration: none;
    transition: opacity 120ms ease;
}
.top .brand:hover { opacity: 0.78; color: var(--text-strong); }
.top .brand-logo {
    display: inline-block;
    width: 22px;
    height: 22px;
    flex-shrink: 0;
}

/* Botón "Instalar app" en la barra superior (PWA). Aparece solo cuando el
   navegador soporta instalación Y la app aún no está instalada. La
   detección/handler vive en _layout_footer.php. */
.top nav {
    display: flex;
    gap: 4px;
    align-items: center;
}
/* Estilo base de TODOS los enlaces del nav top — incluye usuario, logout,
   instalar app. Misma altura, padding, font-size y border-radius. Solo
   cambia el color base y el comportamiento de hover por variante. */
.top nav a {
    color: var(--muted);
    text-decoration: none;
    font-size: 13.5px;
    font-weight: 500;
    padding: 7px 12px;
    border-radius: var(--radius-sm);
    transition: background 120ms ease, color 120ms ease;
    position: relative;
    display: inline-flex;
    align-items: center;
    line-height: 1.4;
    /* D-501.1: con el item "Imágenes" la barra tiene 8 enlaces; evitar que el
       texto de un enlace se parta en 2 líneas en anchos ~800-1000px (la nav es
       flex de una sola línea sin wrap). En móvil el drawer es columna → ok. */
    white-space: nowrap;
}
.top nav a:hover {
    color: var(--text-strong);
    background: var(--panel-soft);
}
.top nav a.active,
.top nav a[aria-current="page"] {
    color: var(--accent-strong);
    background: var(--accent-soft);
    font-weight: 600;
}
/* Usuario — hereda padding/altura del .top nav a base; solo se diferencia
   por color levemente más sutil. El hover usa el mismo gris suave que el
   resto. */
.top nav .who {
    color: var(--muted);
}
.top nav .who:hover {
    color: var(--text-strong);
    background: var(--panel-soft);
}
.top nav a.logout {
    color: var(--muted);
}
.top nav a.logout:hover {
    color: var(--danger);
    background: var(--danger-soft);
}
/* Instalar PWA — destacado en color primary pero MISMA altura/padding que
   el resto del nav (hereda de .top nav a). Sin border (añadiría altura);
   el destaque viene del color y un hover lleno. Hidden por defecto, lo
   activa el JS de _layout_footer cuando tiene sentido mostrarlo. */
.top nav a.install-app {
    color: var(--primary, #4f46e5);
    font-weight: 600;
}
.top nav a.install-app:hover {
    background: var(--primary, #4f46e5);
    color: #fff;
}
.install-app[hidden] { display: none !important; }

/* ─── Hamburger (móvil) ──────────────────────────────────────────
   Por defecto el botón está oculto. Se muestra en @media < 768px
   (ver bloque responsive al final del archivo). Mismo patrón que las
   demos generadas (plantillas/base/_shared/main.js + nav/simple.php).
   ──────────────────────────────────────────────────────────────── */
.top-hamburger {
    display: none;
    background: transparent;
    border: 0;
    padding: 8px;
    cursor: pointer;
    margin-left: auto;
    /* Redondea el área del botón Y el tap highlight de iOS/Android (que
       por defecto sigue el rect completo del elemento). Gris muy claro
       en el flash al tocar — feedback sutil sin invadir. */
    border-radius: 16px;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0.04);
}
/* Mantener fondo transparente en TODOS los estados — la regla global
   `button:hover { background: var(--accent-strong) }` pisaría con su
   especificidad si no la sobrescribimos explícitamente por estado.
   Solo cambia la forma (span → X via transforms en .is-open). */
.top-hamburger:hover,
.top-hamburger:focus,
.top-hamburger:active,
.top-hamburger.is-open,
.top-hamburger.is-open:hover,
.top-hamburger.is-open:focus {
    background: transparent;
    border: 0;
    box-shadow: none;
    transform: none; /* anula el translateY(1px) global de button:active */
}
.top-hamburger:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 3px;
    border-radius: 4px;
}
.top-hamburger span {
    display: block;
    width: 24px;
    height: 2.5px;
    background: var(--text-strong);
    border-radius: 2px;
    margin: 5px 0;
    transition: transform .25s ease, opacity .15s ease, background .15s ease;
    transform-origin: center;
}

main {
    max-width: 1080px;
    margin: 28px auto;
    padding: 0 28px;
}

/* ── Tipografía ───────────────────────────────────────────────────────── */
h1 {
    font-size: 24px;
    font-weight: 700;
    letter-spacing: -0.015em;
    color: var(--text-strong);
    margin: 0 0 18px;
}
/* Cabecera de página unificada: h1 + icono SVG (estilo del panel admin, pero
   un punto más grande y de trazo más grueso). Reutilizable en cualquier página:
   <h1 class="wr-page-h1"><?= wr_icon('search', 26) ?> Título</h1> */
.wr-page-h1 {
    display: flex;
    align-items: center;
    gap: 11px;
    margin: 0 0 16px;
}
.wr-page-h1 .wr-tab-svg {
    width: 26px;
    height: 26px;
    color: var(--accent);
    stroke-width: 2.2;   /* sobrescribe el 2 del atributo → líneas más gruesas */
    flex-shrink: 0;
}
/* Botón con icono SVG + texto alineados (coherencia de botones). */
.btn-ico { display: inline-flex; align-items: center; gap: 6px; }
.btn-ico .wr-tab-svg { flex-shrink: 0; }
h2 {
    font-size: 16px;
    font-weight: 600;
    letter-spacing: -0.005em;
    color: var(--text-strong);
    margin: 0 0 14px;
}
a { color: var(--accent); }
a:hover { color: var(--accent-strong); }

.bottom {
    text-align: center;
    color: var(--muted-2);
    font-size: 12px;
    padding: 36px;
}

/* ── Cards ────────────────────────────────────────────────────────────── */
.card {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 22px 24px;
    margin-bottom: 18px;
    box-shadow: var(--shadow-sm);
}

/* ── Formularios ──────────────────────────────────────────────────────── */
label {
    display: block;
    margin: 14px 0 6px;
    color: var(--muted);
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: 0.005em;
}

input[type=text],
input[type=email],
input[type=password],
input[type=search],
input[type=number],
input[type=url],
input[type=tel],
input[type=date],
textarea,
select {
    width: 100%;
    padding: 9px 12px;
    background: var(--panel);
    border: 1px solid var(--border-strong);
    color: var(--text);
    border-radius: var(--radius-sm);
    font-size: 14px;
    font-family: inherit;
    transition: border-color 120ms ease, box-shadow 120ms ease;
}
textarea { resize: vertical; min-height: 80px; }

input[type=text]:focus,
input[type=email]:focus,
input[type=password]:focus,
input[type=search]:focus,
input[type=number]:focus,
input[type=url]:focus,
input[type=tel]:focus,
input[type=date]:focus,
textarea:focus,
select:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}

input:disabled, button:disabled, select:disabled, textarea:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}

/* ── Botones ──────────────────────────────────────────────────────────── */
button, .btn {
    margin-top: 12px;
    padding: 9px 18px;
    background: var(--accent);
    color: #fff;
    border: 1px solid var(--accent);
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-size: 13.5px;
    font-weight: 500;
    font-family: inherit;
    transition: background 120ms ease, border-color 120ms ease, transform 60ms ease;
    text-decoration: none;
    display: inline-block;
    line-height: 1.4;
}
button:hover, .btn:hover {
    background: var(--accent-strong);
    border-color: var(--accent-strong);
    color: #fff;
}
button:active, .btn:active { transform: translateY(1px); }

button.ghost, .btn.ghost {
    background: var(--panel);
    color: var(--text);
    border-color: var(--border-strong);
}
button.ghost:hover, .btn.ghost:hover {
    background: var(--panel-soft);
    color: var(--text-strong);
    border-color: var(--border-strong);
}

button.danger, .btn.danger {
    background: var(--danger);
    border-color: var(--danger);
}
button.danger:hover, .btn.danger:hover {
    background: #dc2626;
    border-color: #dc2626;
}

/* D-443 p2: tamaño unificado de los botones de acción dentro de las cards
   (antes cada uno llevaba un inline distinto: 6/12, 6/14, 8/14). inline-flex
   para alinear el icono SVG con el texto. Hereda color/fondo de .btn[.ghost]
   /.danger según la clase de color que lleve. */
.btn-sm {
    margin: 0;
    padding: 6px 12px;
    font-size: 13px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    line-height: 1.3;
    vertical-align: middle;
}
.btn-sm .wr-tab-svg { flex-shrink: 0; }

/* D-445: pill suave reutilizable (mismo look que .datos-gbp-link/.datos-link-extra
   de la card Datos). Unifica los botoncitos "Completar →"/"Imágenes" de la card
   Esta fase y los enlaces informativos de la card Imágenes. */
.wr-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 12px;
    font-weight: 500;
    padding: 4px 10px;
    border-radius: 6px;
    background: var(--panel-soft);
    color: var(--muted);
    text-decoration: none;
    border: 0;
    cursor: pointer;
    white-space: nowrap;
    line-height: 1.3;
    transition: background 120ms ease, color 120ms ease;
}
.wr-pill:hover,
.wr-pill:focus-visible {
    color: var(--accent);
    background: rgba(99, 102, 241, 0.10);
}
.wr-pill .wr-tab-svg { flex-shrink: 0; }

/* D-446: sugerencias de contacto extraídas de la web (card Datos). */
.datos-contactos-web { display: flex; flex-direction: column; gap: 6px; margin-bottom: 4px; }
.datos-cw-fila { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.datos-cw-fila .wr-pill { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.datos-cw-actual { font-size: 11.5px; color: #16a34a; font-weight: 600; }
.datos-cw-badge {
    font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px;
    background: var(--panel-soft); color: var(--muted);
}
.datos-cw-badge.datos-cw-ok { background: var(--ok-soft, #dcfce7); color: #047857; }
.datos-cw-badge.datos-cw-diff { background: var(--warning-soft, #fef3c7); color: #b45309; }
.datos-input-flash {
    animation: datos-flash 1.2s ease;
}
@keyframes datos-flash {
    0%, 30% { background: rgba(99, 102, 241, 0.18); }
    100% { background: transparent; }
}
@media (prefers-reduced-motion: reduce) { .datos-input-flash { animation: none; } }

/* D-447: editor de contactos curados (card Datos). */
.contactos-form { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--border); }
.contactos-bloque { margin-bottom: 12px; }
.contactos-bloque > .datos-label { display: block; margin-bottom: 6px; }
.contactos-grupo { display: flex; flex-direction: column; gap: 8px; }
/* D-447: cada contacto es una TARJETA separada (border + padding) con zonas
   fijas — así los elementos no "bailan" según cuántos badges tenga. */
.contacto-fila {
    display: flex; align-items: center; gap: 10px;
    padding: 7px 10px; border: 1px solid var(--border); border-radius: 10px;
    background: var(--panel);
}
.contacto-val { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 6px; position: relative; }
.contacto-fila .contacto-valor {
    flex: 1 1 auto; min-width: 0; margin: 0;
    padding: 6px 9px; font-size: 13px;
}
/* D-447: ⓘ de origen del dato (hover = title · clic = popover, para móvil). */
.contacto-info {
    flex: 0 0 auto; margin: 0; width: 20px; height: 20px; line-height: 1;
    padding: 0; border-radius: 50%; border: 1px solid var(--border);
    background: transparent; color: var(--muted); cursor: pointer;
    font-size: 11px; font-style: italic; font-weight: 700; font-family: Georgia, serif;
}
.contacto-info:hover { color: var(--accent); border-color: var(--accent); background: rgba(99, 102, 241, 0.08); }
.contacto-info-pop {
    display: none; position: absolute; z-index: 6; top: calc(100% + 4px); right: 0;
    background: #1f2937; color: #fff; font-size: 11px; line-height: 1.3;
    padding: 5px 9px; border-radius: 6px; white-space: nowrap; box-shadow: 0 4px 14px rgba(0,0,0,.2);
}
.contacto-val.show-origen .contacto-info-pop { display: block; }
.contacto-meta { display: flex; align-items: center; gap: 12px; flex: 0 0 auto; }
.contacto-tags { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.contacto-tags .contacto-etiqueta { width: auto; margin: 0; padding: 5px 8px; font-size: 12.5px; }
.contacto-acc { display: flex; align-items: center; gap: 12px; flex: 0 0 auto; }
.contacto-principal {
    display: inline-flex; align-items: center; gap: 4px;
    font-size: 11.5px; color: var(--muted); white-space: nowrap; cursor: pointer;
}
.contacto-principal input { margin: 0; }
.contacto-quitar {
    margin: 0; padding: 0; width: 26px; height: 26px; line-height: 1;
    background: transparent; color: var(--muted); border: 1px solid var(--border);
    border-radius: 6px; font-size: 16px; cursor: pointer; flex: 0 0 auto;
}
.contacto-quitar:hover { background: var(--danger-soft, #fee2e2); color: var(--danger); border-color: var(--danger); }
.contactos-dudosos { margin: 8px 0; }
.contactos-dudosos > summary { cursor: pointer; font-size: 12px; color: var(--muted); user-select: none; }
.contactos-dudosos[open] > summary { margin-bottom: 8px; }
.contactos-dudosos .contacto-fila { margin-top: 8px; }
.contacto-add { margin-top: 10px; }

/* D-447 fix: resalte del contacto PRINCIPAL (lo útil, a la vista). */
.contacto-fila.es-principal {
    background: rgba(99, 102, 241, 0.06);
    border-color: var(--accent);
    box-shadow: inset 3px 0 0 var(--accent);
}
.contacto-fila.es-principal .contacto-valor { font-weight: 700; border-color: var(--accent); }
/* D-447: resalte verde de los WhatsApp (si no es el principal, que manda). */
.contacto-fila.es-whatsapp:not(.es-principal) {
    background: rgba(16, 185, 129, 0.06);
    border-color: #86efac;
    box-shadow: inset 3px 0 0 #16a34a;
}
/* Badges informativos del teléfono (tipo/provincia). */
.contacto-badge {
    font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px;
    background: var(--panel-soft); color: var(--muted); white-space: nowrap;
}
.contacto-badge-dudoso { background: var(--warning-soft, #fef3c7); color: #b45309; }
/* WhatsApp = interruptor (atributo del número), no etiqueta. Verde al activar. */
.contacto-wa {
    display: inline-flex; align-items: center; gap: 4px;
    font-size: 11.5px; color: var(--muted); cursor: pointer; white-space: nowrap;
    padding: 3px 9px; border-radius: 999px; border: 1px solid var(--border);
}
.contacto-wa input { margin: 0; }
.contacto-wa.is-on { background: var(--ok-soft, #dcfce7); color: #047857; border-color: #86efac; font-weight: 600; }

/* Móvil: la tarjeta se apila con zonas SIEMPRE en el mismo sitio:
   valor (arriba) · etiqueta+badges · y la fila de acciones (WhatsApp a la
   izquierda, principal + quitar a la derecha). */
@media (max-width: 640px) {
    .contacto-fila { flex-direction: column; align-items: stretch; gap: 9px; padding: 10px; }
    .contacto-meta { width: 100%; flex-direction: column; align-items: stretch; gap: 9px; }
    .contacto-tags { width: 100%; }
    .contacto-acc { width: 100%; }
    .contacto-acc .contacto-principal { margin-left: auto; }
}

/* D-443 p3: botón Descartar junto al CTA de avance. Color danger atenuado;
   la opacidad base la fija PHP (inversa al score). Al pasar el ratón se
   recupera intensidad para que sea cómodo de pulsar aunque el lead sea
   caliente (opacidad baja). */
/* D-565: Descartar SIMPLE — apariencia constante (sin opacidad por score),
   visible (fondo rojo suave + borde) y alto contraste en hover (relleno rojo). */
.lead-descartar-btn {
    background: var(--danger-soft, #fee2e2);
    color: var(--danger, #dc2626);
    border: 1px solid #fecaca;
    transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}
.lead-descartar-btn:hover,
.lead-descartar-btn:focus-visible {
    background: #dc2626;
    color: #fff;
    border-color: #dc2626;
}

/* ── Flash ────────────────────────────────────────────────────────────── */
.flash {
    padding: 12px 16px;
    border-radius: var(--radius-sm);
    margin-bottom: 18px;
    font-size: 13.5px;
    border: 1px solid transparent;
    /* D-474.11: texto corrido (block). Antes era display:flex, lo que partía los
       avisos largos con <strong> en "items" separados por gap → huecos enormes y
       texto descuadrado. Las flashes que necesitan fila (p.ej. .gs-hist) definen
       su propio display:flex y siguen funcionando. */
    line-height: 1.5;
}
.flash-info { background: var(--accent-soft); border-color: #c7c9f7; color: var(--accent-strong); }
.flash-ok { background: var(--ok-soft); border-color: #a7f3d0; color: #047857; }
.flash-error { background: var(--danger-soft); border-color: #fecaca; color: #b91c1c; }
.flash-warning { background: #fff7ed; border-color: #fed7aa; color: #9a3412; } /* D-518: avisos parciales (ámbar) */

.error { color: var(--danger); font-size: 13px; margin-top: 8px; }
.muted { color: var(--muted); font-size: 13px; }

/* ── Login ────────────────────────────────────────────────────────────── */
.login-wrap {
    max-width: 400px;
    margin: 80px auto;
}
.login-wrap .card { box-shadow: var(--shadow-md); }

/* ── Tablas ───────────────────────────────────────────────────────────── */
/* Wrapper para tablas anchas: scroll horizontal en lugar de desbordar.
   Aplicar envolviendo cualquier <table class="leads"> en
   <div class="table-scroll">…</div>. La sombra interna en los bordes
   indica que hay más contenido cuando se hace scroll. */
.table-scroll {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    /* Sombra-pista en bordes laterales que indica que hay scroll. */
    background:
        linear-gradient(to right, var(--panel), var(--panel)) left center / 12px 100% no-repeat,
        linear-gradient(to right, rgba(0,0,0,0.06), transparent) left center / 8px 100% no-repeat,
        linear-gradient(to left,  var(--panel), var(--panel)) right center / 12px 100% no-repeat,
        linear-gradient(to left,  rgba(0,0,0,0.06), transparent) right center / 8px 100% no-repeat;
    background-attachment: local, scroll, local, scroll;
    margin: 0 -4px; /* compensa padding del card para que el scroll llegue al borde */
}
.table-scroll table { min-width: 540px; }

table.leads {
    width: 100%;
    border-collapse: collapse;
    font-size: 13.5px;
}
table.leads th,
table.leads td {
    padding: 12px 16px;
    text-align: left;
    border-bottom: 1px solid var(--border);
}
table.leads th {
    color: var(--muted);
    font-weight: 500;
    font-size: 11.5px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    background: var(--panel-soft);
    border-bottom: 1px solid var(--border-strong);
}
table.leads tr { transition: background 80ms ease; }
table.leads tbody tr:hover { background: var(--panel-soft); }
table.leads tr:last-child td { border-bottom: 0; }
table.leads td a { color: var(--accent); text-decoration: none; font-weight: 500; }
table.leads td a:hover { color: var(--accent-strong); text-decoration: underline; }

/* ── Badges (estados de lead, tipos de actividad, etc.) ───────────────── */
.badge {
    display: inline-block;
    padding: 3px 10px;
    font-size: 11.5px;
    font-weight: 500;
    border-radius: 999px;
    background: var(--panel-soft);
    color: var(--muted);
    line-height: 1.4;
}
/* D-525: chip de PASO del embudo (número + verbo) con gradiente de verde,
   apagado — 1 casi blanco → 6 intenso (finalización); ganado el más intenso;
   terminales en gris (no son avance). Global: listado CRM + ficha + dashboard. */
.estado-paso {
    display: inline-block;
    font-size: 12px;
    font-weight: 600;
    padding: 2px 9px;
    border-radius: 999px;
    white-space: nowrap;
    line-height: 1.6;
}
.estado-paso.paso-1 { background: #f3fbf6; color: #2a6147; }
.estado-paso.paso-2 { background: #e4f4ea; color: #235539; }
.estado-paso.paso-3 { background: #cbe8d8; color: #1c4a32; }
.estado-paso.paso-4 { background: #a3d5ba; color: #143d28; }
.estado-paso.paso-5 { background: #6cbd94; color: #0c3220; }
.estado-paso.paso-6 { background: #2f9063; color: #ffffff; }
.estado-paso.paso-ganado { background: #1c7a49; color: #ffffff; }
.estado-paso.paso-terminal { background: #eef0f2; color: #6b7280; }
/* D-399i: paleta de 3 grupos de 2 fases — Lila (búsqueda/análisis) →
   Azul (presencia/comunicación) → Verde (compromiso/cierre). Cada grupo
   tiene una progresión suave del tono claro al medio. Ganado cierra en
   verde intenso. Coherente con los iconos: lupa lila, mundo azul,
   sobre/medalla verde. */
.badge-valoracion   { background: #ede9fe; color: #6d28d9; }  /* 1. violeta claro */
.badge-preparacion  { background: #ddd6fe; color: #5b21b6; }  /* 2. violeta medio */
.badge-demo         { background: #e0f2fe; color: #0369a1; }  /* 3. azul claro */
.badge-contacto     { background: #bae6fd; color: #075985; }  /* 4. azul medio */
.badge-respuesta    { background: #d1fae5; color: #047857; }  /* 5. verde claro */
.badge-cierre       { background: #a7f3d0; color: #065f46; }  /* 6. verde medio */
.badge-ganado       { background: #047857; color: #fff; }     /* 7. éxito */
/* Terminales OFF-funnel — colores semánticos, no parte de la maduración. */
.badge-perdido      { background: #fee2e2; color: #b91c1c; }  /* rojo */
.badge-aplazado     { background: #fef3c7; color: #92400e; }  /* ámbar */
.badge-descartado   { background: #f3f4f6; color: #6b7280; }  /* gris */
/* utilitario genérico (no es estado de lead, sirve como label muted) */
.badge-muted        { background: #f3f4f6; color: #6b7280; }
/* D-532: sedes de la misma empresa — azul (principal: "N sedes"; secundaria: "otra sede"). */
.badge-sede         { background: #dbeafe; color: #1e40af; }  /* azul */
.badge-sede-dup     { background: #eff6ff; color: #3b6fb5; }  /* azul suave (secundaria) */

/* Definition list para datos del lead */
dl.kv {
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 10px 16px;
    margin: 0;
    font-size: 13.5px;
}
dl.kv dt {
    color: var(--muted);
    font-weight: 500;
}
dl.kv dd { margin: 0; color: var(--text); }
dl.kv dd code {
    background: var(--panel-soft);
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 12.5px;
    font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
    color: var(--text-strong);
}
code {
    font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
    background: var(--panel-soft);
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 0.92em;
}

/* ── Filtros (barra de búsqueda + selects horizontales) ──────────────── */
form.filters {
    display: flex;
    gap: 8px;
    align-items: center;
    flex-wrap: wrap;
    margin: 18px 0;
    padding: 14px 18px;
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
}
form.filters input[type=search],
form.filters input[type=text],
form.filters select {
    width: auto;
    padding: 7px 11px;
    font-size: 13px;
}
form.filters input[type=search] { min-width: 280px; }
form.filters button { margin: 0; padding: 7px 14px; font-size: 13px; }
form.filters a { font-size: 13px; text-decoration: none; color: var(--muted); }
form.filters a:hover { color: var(--accent); }

/* ── Cambio rápido de estado ─────────────────────────────────────────── */
form.quick-estado {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}
form.quick-estado button.badge {
    cursor: pointer;
    border: 1px solid transparent;
    margin: 0;
    padding: 4px 12px;
    font-size: 12px;
    transition: filter 120ms ease, border-color 120ms ease;
}
form.quick-estado button.badge.current {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent-soft);
}
form.quick-estado button.badge:hover { filter: brightness(0.96); }

/* ── Timeline de actividad ───────────────────────────────────────────── */
ul.timeline {
    list-style: none;
    padding: 0;
    margin: 0;
}
ul.timeline li {
    padding: 12px 0;
    border-bottom: 1px dashed var(--border);
}
ul.timeline li:last-child { border-bottom: 0; }
ul.timeline .t-head {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 12.5px;
    color: var(--muted);
}
ul.timeline .t-tipo {
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    background: var(--panel-soft);
    color: var(--muted);
}
ul.timeline .t-cambio_estado { background: #e0e7ff; color: #4338ca; }
ul.timeline .t-nota          { background: #d1fae5; color: #047857; }
ul.timeline .t-edicion       { background: #fef3c7; color: #b45309; }
ul.timeline .t-colaborador   { background: #f3f4f6; color: #6b7280; }
ul.timeline .t-scoring       { background: #e0e7ff; color: #4338ca; }
ul.timeline .t-demo          { background: #ede9fe; color: #6d28d9; }
ul.timeline .t-tarea         { background: #fef3c7; color: #b45309; }
ul.timeline .t-body { margin-top: 6px; color: var(--text); font-size: 13.5px; }

/* ── Equipo / colaboradores ──────────────────────────────────────────── */
.team .team-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    border-bottom: 1px dashed var(--border);
}
.team .team-row:last-child { border-bottom: 0; }
.team .team-role {
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--muted);
    min-width: 90px;
    font-weight: 600;
}
.team .team-user { flex: 1; font-size: 13.5px; color: var(--text); }

/* ── Score pills (ficha del lead) ────────────────────────────────────── */
/* D-436.7: pills compactas y discretas (antes cajas de 84px con número 24px;
   ahora misma familia visual que .score-mini de la card Scoring). */
.score-pill {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    gap: 7px;
    padding: 6px 13px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: var(--panel);
    line-height: 1;
}
.score-pill .score-label {
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--muted);
    font-weight: 600;
}
.score-pill .score-value {
    font-size: 15px;
    font-weight: 700;
    color: var(--text-strong);
    font-variant-numeric: tabular-nums;
}

/* ── Score mini (listado) ────────────────────────────────────────────── */
.score-mini {
    display: inline-block;
    min-width: 38px;
    text-align: center;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

/* D-418: web pendiente de análisis (⏳) — ámbar suave. */
.score-mini-pend {
    background: #fef3c7;
    color: #92400e;
}

/* Semáforo */
.badge-score-null,
.score-mini.badge-score-null {
    background: var(--panel-soft);
    color: var(--muted);
}
.badge-score-low,
.score-mini.badge-score-low {
    background: var(--danger-soft);
    color: #b91c1c;
}
.badge-score-mid,
.score-mini.badge-score-mid {
    background: var(--warning-soft);
    color: #b45309;
}
.badge-score-high,
.score-mini.badge-score-high {
    background: var(--ok-soft);
    color: #047857;
}
/* D-443: el badge RESUMEN de la card Scoring usa la escala de banderas
   (temperatura), igual que el chip de la cabecera — coherencia de color. */
.score-mini.bandera-caliente  { background: var(--ok-soft);      color: #047857; }
.score-mini.bandera-tibio     { background: var(--warning-soft); color: #b45309; }
.score-mini.bandera-frio      { background: #f0f6ff;             color: #1e5a8a; }
.score-mini.bandera-descartar { background: var(--danger-soft);  color: #b91c1c; }

/* D-443: caja visible de "analizando en segundo plano" (Lighthouse/web). */
.wr-analizando {
    display: flex; align-items: flex-start; gap: 9px;
    margin: 8px 0 2px; padding: 9px 12px;
    background: #fffbeb; border: 1px solid #fde68a; border-radius: 8px;
    color: #92400e; font-size: 12.5px; line-height: 1.45;
}
.wr-analizando-spin {
    flex: 0 0 auto; width: 14px; height: 14px; margin-top: 2px;
    border: 2px solid #fcd34d; border-top-color: #b45309; border-radius: 50%;
    animation: wr-spin 0.7s linear infinite;
}
@keyframes wr-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .wr-analizando-spin { animation: none; } }

.score-pill.badge-score-null .score-value,
.score-pill.badge-score-low .score-value,
.score-pill.badge-score-mid .score-value,
.score-pill.badge-score-high .score-value {
    color: inherit;
}
.score-pill.badge-score-null { color: var(--muted); }
.score-pill.badge-score-low  { color: #b91c1c; border-color: #fecaca; }
.score-pill.badge-score-mid  { color: #b45309; border-color: #fde68a; }
.score-pill.badge-score-high { color: #047857; border-color: #a7f3d0; }

/* D-436.8: pill del RESUMEN (Lead caliente) en el header de la ficha —
   el valor de decisión, delante de N y W, con la bandera del sistema. */
.score-pill-resumen { font-weight: 700; }
.score-pill-resumen .score-ico { font-size: 13px; line-height: 1; }
.score-pill-resumen .score-value { font-size: 16px; }
.score-pill-resumen.bandera-caliente  { background: var(--ok-soft); color: #047857; border-color: #a7f3d0; }
.score-pill-resumen.bandera-tibio     { background: var(--warning-soft); color: #b45309; border-color: #fde68a; }
.score-pill-resumen.bandera-frio      { background: #f0f6ff; color: #1e5a8a; border-color: #bfdbfe; }
.score-pill-resumen.bandera-descartar { background: var(--danger-soft); color: #b91c1c; border-color: #fecaca; }
.score-pill-resumen.bandera-caliente .score-value,
.score-pill-resumen.bandera-tibio .score-value,
.score-pill-resumen.bandera-frio .score-value,
.score-pill-resumen.bandera-descartar .score-value { color: inherit; }

/* D-399r: botón "Editar datos" como cuadrado pequeño al lado del nombre del
   lead. Icono pencil + tooltip al hover. Más discreto que el botón grande
   anterior; los scores (Negocio/Web) ahora quedan solos a la derecha. */
.btn-editar-cuadrado {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 8px;
    background: var(--panel-soft, #f1f3f9);
    color: var(--text-strong, #111827) !important;
    border: 1px solid var(--border);
    text-decoration: none;
    transition: background .12s, color .12s, border-color .12s;
}
.btn-editar-cuadrado:hover {
    background: rgba(79, 70, 229, 0.1);
    color: var(--primary, #4f46e5) !important;
    border-color: rgba(79, 70, 229, 0.3);
}
.btn-editar-cuadrado svg { display: block; }

/* D-493/D-497: botón/indicador de lead PRIORITARIO (cohete). Mismo molde
   cuadrado que .btn-editar-cuadrado. Gris flojo en Normal; coloreado por NIVEL
   con .lvl-1/2/3 (ámbar/naranja/rojo). Variante .sm para los listados. */
.btn-prioritario {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 8px;
    background: var(--panel-soft, #f1f3f9);
    color: #9ca3af;
    border: 1px solid var(--border);
    cursor: pointer;
    padding: 0;
    /* D-564: anula el `margin-top:12px` global de `button,.btn` — sin esto el
       cohete queda 12px más abajo que el botón de editar (que es un <a>). */
    margin: 0;
    transition: background .12s, color .12s, border-color .12s, transform .12s;
}
.btn-prioritario:hover {
    background: rgba(220, 38, 38, 0.08);
    color: #dc2626;
    border-color: rgba(220, 38, 38, 0.3);
}
.btn-prioritario svg { display: block; }
.btn-prioritario.sm { width: 26px; height: 26px; border-radius: 6px; }

/* D-497: cohete por NIVEL de prioridad (espejo de LeadPrioridad::color).
   lvl-1 Alta ámbar · lvl-2 Extra naranja · lvl-3 Máxima rojo · sin clase = Normal gris. */
.btn-prioritario.lvl-1 { color: #f59e0b; background: rgba(245, 158, 11, 0.12); border-color: rgba(245, 158, 11, 0.4); }
.btn-prioritario.lvl-1:hover { background: rgba(245, 158, 11, 0.2); }
.btn-prioritario.lvl-2 { color: #f97316; background: rgba(249, 115, 22, 0.12); border-color: rgba(249, 115, 22, 0.4); }
.btn-prioritario.lvl-2:hover { background: rgba(249, 115, 22, 0.2); }
.btn-prioritario.lvl-3 { color: #dc2626; background: rgba(220, 38, 38, 0.12); border-color: rgba(220, 38, 38, 0.4); }
.btn-prioritario.lvl-3:hover { background: rgba(220, 38, 38, 0.2); }

/* D-497: selector de prioridad (popover NATIVO → top-layer, no se recorta en
   .table-scroll). Posición la fija el JS de _prioritario.php al abrir. */
.wr-prio { display: inline-flex; }
/* D-497: en el bloque "Prioritarios" del dashboard el slot de icono mide 24px
   (para emoji 18px); el cohete .sm mide 26px → que la caja se ajuste y centre. */
.dash-accion-prio .dash-accion-icono { width: auto; }
.wr-prio-menu {
    position: fixed;
    inset: auto; /* anula el centrado por defecto de [popover] */
    margin: 0;
    padding: 6px;
    border: 1px solid var(--border);
    border-radius: 11px;
    background: #fff;
    box-shadow: 0 12px 34px rgba(0, 0, 0, 0.18);
    min-width: 184px;
}
.wr-prio-menu-head {
    font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;
    color: var(--muted); padding: 4px 9px 6px;
}
.wr-prio-opt-form { margin: 0; }
.wr-prio-opt {
    display: flex; align-items: center; gap: 10px; width: 100%;
    padding: 8px 9px; border: 0; background: none; border-radius: 8px;
    cursor: pointer; font-size: 13.5px; color: var(--text-strong, #111827); text-align: left;
    transition: background .1s;
}
/* D-565: fija también el color en hover — la regla global button:hover pone el
   texto #fff y sobre el fondo claro del popover quedaba ilegible. */
.wr-prio-opt:hover { background: var(--panel-soft, #f1f3f9); color: var(--text-strong, #111827); }
.wr-prio-opt.is-current { background: var(--panel-soft, #f1f3f9); font-weight: 600; }
.wr-prio-dot { display: inline-flex; flex: 0 0 auto; }
.wr-prio-dot svg { display: block; }
.wr-prio-label { flex: 1; }
.wr-prio-check { color: var(--primary, #4f46e5); font-weight: 700; }
/* Indicador estático (no clicable) en listados donde el usuario no gestiona.
   El color lo pone el helper inline por nivel (LeadPrioridad::color). */
.prio-ico { display: inline-flex; vertical-align: middle; }

/* ── D-499: widget global de trabajos del worker (barra flotante) ──────────
   Escritorio: pill flotante abajo-derecha (ancho al contenido). Móvil: barra
   inferior sticky a todo el ancho (espejo de la superior). */
.wr-cola-widget { position: fixed; z-index: 900; right: 16px; bottom: 16px; font-size: 13px; }
.wr-cola-bar {
    display: flex; align-items: center; gap: 8px; max-width: 360px;
    padding: 8px 12px; background: var(--panel, #fff);
    border: 1px solid var(--border-strong, #d2d6e0); border-radius: 999px;
    box-shadow: var(--shadow-md, 0 4px 14px rgba(15, 22, 32, 0.1));
    cursor: pointer; color: var(--text, #1a2030); font: inherit; line-height: 1.2;
    transition: border-color .12s;
}
/* Anula el `button:hover{background:var(--accent-strong)}` global (que dejaba el
   texto gris ilegible sobre morado). Hover/focus/active: fondo claro + borde acento. */
.wr-cola-bar:hover,
.wr-cola-bar:focus,
.wr-cola-bar:active {
    background: var(--panel-soft, #f3f5f9);
    border-color: var(--accent, #6366f1);
    color: var(--text, #1a2030);
    transform: none;
}
.wr-cola-worker { width: 8px; height: 8px; border-radius: 50%; background: var(--ok, #10b981); flex: 0 0 auto; }
.wr-cola-worker.parado { background: var(--danger, #ef4444); }
.wr-cola-count {
    background: var(--accent, #6366f1); color: #fff; font-weight: 700; font-size: 11px;
    min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px;
    display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto;
}
.wr-cola-accion { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 230px; color: var(--muted, #6b7384); }
.wr-cola-widget.is-busy .wr-cola-accion { color: var(--text-strong, #0c1322); }
.wr-cola-chevron { color: var(--muted-2, #9aa0ad); transition: transform .15s; flex: 0 0 auto; }
.wr-cola-widget.open .wr-cola-chevron { transform: rotate(180deg); }
.wr-cola-spin {
    width: 13px; height: 13px; flex: 0 0 auto; border-radius: 50%;
    border: 2px solid var(--warning, #f59e0b); border-top-color: transparent;
    animation: wr-spin .7s linear infinite;
}
@media (prefers-reduced-motion: reduce) { .wr-cola-spin { animation: none; } }
.wr-cola-panel {
    position: absolute; right: 0; bottom: calc(100% + 8px);
    width: 340px; max-width: 86vw; max-height: 50vh; overflow-y: auto;
    background: var(--panel, #fff); border: 1px solid var(--border, #e6e8ef);
    border-radius: var(--radius, 10px); box-shadow: var(--shadow-lg, 0 10px 30px rgba(15, 22, 32, 0.12));
}
.wr-cola-panel-head {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    padding: 9px 12px; border-bottom: 1px solid var(--border, #e6e8ef);
    font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: .03em;
    color: var(--muted, #6b7384); position: sticky; top: 0; background: var(--panel, #fff);
}
.wr-cola-verfull { font-weight: 600; font-size: 11.5px; text-transform: none; letter-spacing: 0; color: var(--accent, #6366f1); white-space: nowrap; }
.wr-cola-list { list-style: none; margin: 0; padding: 4px; }
.wr-cola-item { display: flex; align-items: center; gap: 9px; padding: 7px 8px; }
.wr-cola-item + .wr-cola-item { border-top: 1px solid var(--border, #e6e8ef); }
.wr-cola-mark { flex: 0 0 auto; width: 13px; display: inline-flex; justify-content: center; }
.wr-cola-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--muted-2, #9aa0ad); }
.wr-cola-en_curso .wr-cola-dot { background: var(--warning, #f59e0b); }
.wr-cola-listo .wr-cola-dot { background: var(--ok, #10b981); }
.wr-cola-error .wr-cola-dot { background: var(--danger, #ef4444); }
.wr-cola-text { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.wr-cola-tipo { font-size: 10.5px; text-transform: uppercase; letter-spacing: .03em; color: var(--muted-2, #9aa0ad); }
.wr-cola-label { font-size: 13px; color: var(--text, #1a2030); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wr-cola-label a { color: var(--accent-strong, #4f52e0); text-decoration: none; }
.wr-cola-label a:hover { text-decoration: underline; }
.wr-cola-hace { flex: 0 0 auto; font-size: 11px; color: var(--muted, #6b7384); white-space: nowrap; text-align: right; }
.wr-cola-error .wr-cola-hace { color: var(--muted, #6b7384); } /* D-504: la fecha queda neutra… */
/* D-504: …y solo "error" en rojo, en su propia línea bajo la fecha. */
.wr-cola-st-error { display: block; color: var(--danger, #ef4444); font-weight: 600; }
.wr-cola-empty { padding: 14px; text-align: center; font-size: 12.5px; }
@media (max-width: 768px) {
    .wr-cola-widget { right: 0; left: 0; bottom: 0; }
    .wr-cola-bar {
        max-width: none; width: 100%; border-radius: 0; border-left: 0; border-right: 0; border-bottom: 0;
        box-shadow: 0 -2px 10px rgba(15, 22, 32, 0.08); padding: 11px 14px;
    }
    .wr-cola-accion { max-width: none; flex: 1; }
    .wr-cola-panel { right: 0; left: 0; width: auto; max-width: none; border-radius: 0; max-height: 55vh; }
    /* Que la barra sticky no tape el contenido/footer. */
    body { padding-bottom: 56px; }
}

/* D-399u: migas de pan (breadcrumbs). Reemplaza los enlaces "← Volver a X"
   con una jerarquía clicable: cada nivel lleva al padre correspondiente,
   no solo a la página inmediatamente anterior. */
.breadcrumbs {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    font-size: 13px;
    color: var(--muted);
    margin-bottom: 10px;
}
.breadcrumbs a {
    color: var(--muted);
    text-decoration: none;
    transition: color .12s;
}
.breadcrumbs a:hover { color: var(--primary, #4f46e5); text-decoration: underline; }
.breadcrumbs [aria-current="page"] {
    color: var(--text-strong, #111827);
    font-weight: 600;
}
.breadcrumbs-sep { opacity: 0.45; user-select: none; }

/* D-399s: meta del lead (sector / ciudad / propietario) con iconos inline,
   en vez de un texto plano con "·" sueltos. Más escaneable visualmente. */
/* D-566.2: cabecera de la ficha STICKY bajo el nav (SOLO escritorio). El nombre,
   los scores (N/W/caliente), Checklist, Cerrar y la línea de contactos acompañan
   al scroll con fondo sólido = lienzo de la página (cubre las cards que pasan por
   debajo). El nav superior (.top) mide ~62px → top:60 (tuck de 2px para no dejar
   hueco). z-index 9 = bajo el nav (10), sobre las cards. Solo ESCRITORIO
   (≥1024px): por debajo el nav puede envolver a 2 filas (o es hamburguesa
   ≤768) y descuadraría el top; además en pantallas chicas ocuparía demasiado. */
@media (min-width: 1024px) {
    .lead-header {
        position: sticky;
        top: 60px;
        z-index: 9;
        background: var(--bg, #f7f8fb);
        padding: 10px 0;
        margin-top: -10px;
        box-shadow: 0 6px 14px -10px rgba(0, 0, 0, 0.22);
    }
}
.lead-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 16px;
    font-size: 13px;
    color: var(--muted);
}
.lead-meta-item {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}
.lead-meta-item svg { width: 14px; height: 14px; flex-shrink: 0; opacity: 0.75; }
/* D-564: items de la meta que son enlaces (ficha GBP, web, contactos, equipo). */
.lead-meta-link { text-decoration: none; color: var(--muted); cursor: pointer; }
.lead-meta-link:hover { color: var(--primary, #4f46e5); }
.lead-meta-link:hover svg { opacity: 1; }
.lead-meta-ico { padding: 2px 3px; border-radius: 6px; }
.lead-meta-ico:hover { background: var(--panel-soft, #f1f3f9); }
.lead-meta-ico svg { opacity: 0.85; }
.lead-meta-extra {
    font-size: 11.5px;
    background: var(--panel-soft, #f1f3f9);
    padding: 1px 6px;
    border-radius: 999px;
    margin-left: 4px;
}
.lead-meta-edit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    margin-left: 4px;
    border-radius: 5px;
    color: var(--muted);
    text-decoration: none;
    transition: background .12s, color .12s;
}
.lead-meta-edit:hover { background: rgba(79, 70, 229, 0.1); color: var(--primary, #4f46e5); }

/* Dropdown "Cerrar ▾" — alineado con .score-pill (misma altura), abre menú
   absoluto con las 4 opciones de cierre. Solo aparece en estados no
   terminales. */
.lead-cierre-menu {
    position: relative;
    display: inline-block;
}
.lead-cierre-menu summary {
    cursor: pointer;
    list-style: none;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    /* D-436.7: mismo fino que pills + checklist. */
    padding: 6px 13px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: #fff;
    font-weight: 600;
    font-size: 12.5px;
    color: var(--text-strong, #111827);
    box-sizing: border-box;
    transition: background .12s, border-color .12s;
}
.lead-cierre-menu summary::-webkit-details-marker { display: none; }
.lead-cierre-menu summary::marker { display: none; }
.lead-cierre-menu summary svg { flex-shrink: 0; }
.lead-cierre-menu summary:hover {
    background: var(--panel-soft, #f1f3f9);
    border-color: #c7d2fe;
}
.lead-cierre-menu[open] summary {
    background: var(--panel-soft, #f1f3f9);
    border-color: #c7d2fe;
}
.lead-cierre-menu-list {
    position: absolute;
    top: calc(100% + 4px);
    right: 0;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
    z-index: 30;
    min-width: 150px;
    padding: 4px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.lead-cierre-menu-list form { margin: 0; }
.lead-cierre-menu-list button {
    width: 100%;
    text-align: left;
    padding: 8px 12px;
    border: 0;
    background: transparent;
    cursor: pointer;
    border-radius: 6px;
    font-size: 13.5px;
    font-weight: 600;
}
.lead-cierre-menu-list button:hover { background: rgba(15, 23, 42, 0.05); }
.lead-cierre-menu-list button.actual { background: rgba(15, 23, 42, 0.04); }
.lead-cierre-menu-sep {
    height: 1px;
    background: var(--border);
    margin: 4px 2px;
}

/* D-400: pestaña "Comercial" en /perfil.php — 3 cards de configuración
   (marca, SMTP, prompts IA). Estilo coherente con .card pero un poco más
   denso por la cantidad de campos. */
.perfil-comercial-card {
    margin-bottom: 18px;
}
.perfil-comercial-head {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}
.perfil-comercial-icono {
    width: 44px;
    height: 44px;
    border-radius: 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.perfil-comercial-badge-activo {
    margin-left: auto;
    background: #d1fae5;
    color: #047857;
    padding: 4px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .4px;
}
.perfil-comercial-form {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.perfil-comercial-form label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.perfil-comercial-form input[type="text"],
.perfil-comercial-form input[type="email"],
.perfil-comercial-form input[type="url"],
.perfil-comercial-form input[type="password"],
.perfil-comercial-form input[type="number"],
.perfil-comercial-form textarea {
    width: 100%;
    box-sizing: border-box;
}
.perfil-comercial-submit {
    background: var(--primary, #4f46e5);
    color: #fff !important;
    border: 0;
    padding: 10px 18px;
    border-radius: 8px;
    font-weight: 600;
    cursor: pointer;
    font-size: 14px;
}
.perfil-comercial-submit:hover { background: #4338ca; }
.perfil-comercial-submit-alt {
    background: #fff;
    color: var(--primary, #4f46e5) !important;
    border: 1px solid var(--primary, #4f46e5);
    padding: 10px 18px;
    border-radius: 8px;
    font-weight: 600;
    cursor: pointer;
    font-size: 14px;
}
.perfil-comercial-submit-alt:hover { background: rgba(79, 70, 229, 0.06); }
.perfil-comercial-submit-alt:disabled {
    color: #9ca3af !important;
    border-color: #d1d5db;
    cursor: not-allowed;
    background: #f9fafb;
}
.perfil-comercial-submit-soft {
    background: #fff;
    color: var(--text-strong, #111827);
    border: 1px solid var(--border);
    padding: 8px 14px;
    border-radius: 8px;
    font-weight: 600;
    cursor: pointer;
    font-size: 13px;
}
.perfil-comercial-submit-soft:hover { background: var(--panel-soft, #f1f3f9); }
.perfil-comercial-acciones {
    display: flex;
    gap: 10px;
    margin-top: 6px;
    flex-wrap: wrap;
}
.perfil-comercial-acciones > * { flex: 1; min-width: 180px; }
.perfil-comercial-preview {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--panel-soft, #f1f3f9);
    padding: 10px 14px;
    border-radius: 8px;
    border: 1px solid var(--border);
    margin-top: 4px;
}
.perfil-comercial-prueba-banner {
    background: #eff6ff;
    border: 1px solid #bfdbfe;
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 14px;
}
.perfil-comercial-proveedor-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-bottom: 4px;
}
@media (max-width: 640px) {
    .perfil-comercial-proveedor-grid { grid-template-columns: 1fr; }
    .perfil-comercial-acciones > * { flex: 1 1 100%; }
}
.perfil-comercial-proveedor-card {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 14px;
    border: 1.5px solid var(--border);
    border-radius: 10px;
    cursor: pointer;
    background: #fff;
    transition: border-color .12s, background .12s;
}
.perfil-comercial-proveedor-card.on {
    border-color: var(--primary, #4f46e5);
    background: rgba(79, 70, 229, 0.04);
}
.perfil-comercial-proveedor-card input[type="radio"] {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.perfil-comercial-proveedor-card strong { font-size: 14px; color: var(--text-strong, #111827); }
.perfil-comercial-proveedor-card .muted { font-size: 12.5px; }

/* Prompts IA — accordion compacto */
.perfil-comercial-prompt {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 10px 14px;
    background: #fafbfd;
    margin-bottom: 6px;
}
.perfil-comercial-prompt[open] {
    background: #fff;
    border-color: #c7d2fe;
}
.perfil-comercial-prompt summary {
    cursor: pointer;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
    font-size: 13.5px;
    padding: 4px 0;
}
.perfil-comercial-prompt summary::-webkit-details-marker { display: none; }
.perfil-comercial-prompt-titulo { flex: 1; }
.perfil-comercial-prompt-tag {
    background: #ddd6fe;
    color: #5b21b6;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .4px;
}

/* D-399q: botones "Marcar como Ganado/Perdido/Aplazado/Descartado" debajo
   del flujo. Reemplazan al círculo 7 (Ganar) y al details "Forzar otro
   estado manualmente". */
.lead-cierre-btn {
    border: 1px solid transparent;
    padding: 5px 12px;
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    transition: transform .12s, box-shadow .12s;
}
.lead-cierre-btn:hover { transform: translateY(-1px); box-shadow: 0 1px 4px rgba(0,0,0,0.08); }
.lead-cierre-btn.on { border-color: currentColor; box-shadow: inset 0 0 0 1px currentColor; }

/* ── Grid de 2 columnas (formularios) ────────────────────────────────── */
.row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18px;
}
@media (max-width: 720px) {
    .row { grid-template-columns: 1fr; }
}

/* ── Tareas / recordatorios ──────────────────────────────────────────── */
.tarea-form-grid {
    display: grid;
    grid-template-columns: 1fr 160px 130px;
    gap: 8px;
    align-items: center;
}
.tarea-form-grid input[type="text"],
.tarea-form-grid input[type="date"] { width: 100%; }
.tarea-form-grid button { margin: 0; padding: 9px 14px; font-size: 13px; }

.tarea-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.tarea-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    transition: box-shadow 120ms;
}
.tarea-item:hover { box-shadow: var(--shadow-sm); }
.tarea-item.tarea-vencida {
    background: #fffaf0;
    border-color: #fde68a;
}
.tarea-toggle button {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    border: 2px solid var(--border-strong);
    background: var(--panel);
    cursor: pointer;
    padding: 0;
    margin: 0;
    flex-shrink: 0;
    transition: background 120ms, border-color 120ms;
}
.tarea-toggle button:hover {
    background: var(--ok-soft);
    border-color: var(--ok);
}
.tarea-cuerpo { flex: 1; min-width: 0; }
.tarea-desc {
    font-size: 13.5px;
    color: var(--text);
    line-height: 1.4;
    overflow-wrap: anywhere;
}
.tarea-fecha {
    font-size: 11.5px;
    color: var(--muted);
    margin-top: 3px;
    font-variant-numeric: tabular-nums;
}
.tarea-vencida .tarea-fecha { color: #b45309; font-weight: 500; }
.tarea-delete button {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 0;
    background: transparent;
    color: var(--muted-2);
    cursor: pointer;
    padding: 0;
    margin: 0;
    font-size: 14px;
    line-height: 1;
    flex-shrink: 0;
    transition: background 120ms, color 120ms;
}
.tarea-delete button:hover {
    background: var(--danger-soft);
    color: var(--danger);
}

.tarea-form,
.tarea-toggle,
.tarea-delete { margin: 0; }

@media (max-width: 640px) {
    .tarea-form-grid { grid-template-columns: 1fr; }
    .tarea-form-grid button { width: 100%; }
}

/* Dashboard: lista de tareas vencidas */
.dash-tareas { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; }
.dash-tareas li { border-bottom: 1px dashed var(--border); }
.dash-tareas li:last-child { border-bottom: 0; }
.dash-tarea-link {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 0;
    color: var(--text);
    text-decoration: none;
    font-size: 13px;
}
.dash-tarea-link:hover { color: var(--accent); }
.dash-tarea-fecha {
    font-family: 'JetBrains Mono', monospace;
    font-size: 11px;
    color: #b45309;
    background: #fffaf0;
    padding: 2px 8px;
    border-radius: 4px;
    border: 1px solid #fde68a;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}
.dash-tarea-desc { flex: 1; overflow-wrap: anywhere; }
.dash-tarea-lead { font-size: 12px; flex-shrink: 0; }

/* ── Kanban (vista de embudo) ────────────────────────────────────────── */
.kanban-board {
    display: grid;
    grid-template-columns: repeat(7, minmax(180px, 1fr));
    gap: 10px;
    overflow-x: auto;
    padding-bottom: 8px;
}
.kanban-col {
    background: var(--panel-soft);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 10px;
    display: flex;
    flex-direction: column;
    min-width: 0;
}
.kanban-col-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
    padding: 0 2px;
}
.kanban-col-count {
    font-size: 12px;
    font-weight: 600;
    color: var(--muted);
    background: var(--panel);
    padding: 1px 8px;
    border-radius: 999px;
    border: 1px solid var(--border);
    font-variant-numeric: tabular-nums;
}
.kanban-col-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-height: 60px;
}
.kanban-col-empty {
    color: var(--muted-2);
    font-size: 12px;
    text-align: center;
    margin: 12px 0;
    font-style: italic;
}
.kanban-card {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 10px 12px;
    box-shadow: var(--shadow-sm);
    transition: box-shadow 120ms, transform 60ms;
    position: relative;
}
.kanban-card:hover {
    box-shadow: var(--shadow-md);
}
.kanban-card-link {
    text-decoration: none;
    color: inherit;
    display: block;
}
.kanban-card-link:hover { color: inherit; text-decoration: none; }
.kanban-card-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-strong);
    margin: 0 0 4px;
    line-height: 1.3;
    word-break: break-word;
}
.kanban-card-meta {
    font-size: 11.5px;
    color: var(--muted);
    margin-bottom: 6px;
    line-height: 1.3;
    overflow-wrap: anywhere;
}
.kanban-card-scores {
    display: flex;
    gap: 4px;
}
.kanban-card-scores .score-mini {
    font-size: 11px;
    min-width: 30px;
    padding: 2px 6px;
}
.kanban-card-advance {
    position: absolute;
    top: 6px;
    right: 6px;
    margin: 0;
}
.kanban-card-advance button {
    margin: 0;
    padding: 2px 8px;
    font-size: 12px;
    line-height: 1;
    background: var(--accent-soft);
    color: var(--accent-strong);
    border: 1px solid #c7c9f7;
    border-radius: var(--radius-sm);
    cursor: pointer;
    opacity: 0;
    transition: opacity 120ms;
}
.kanban-card:hover .kanban-card-advance button { opacity: 1; }
.kanban-card-advance button:hover { background: var(--accent); color: #fff; border-color: var(--accent); }

@media (max-width: 1100px) {
    .kanban-board { grid-template-columns: repeat(7, 200px); }
}
@media (max-width: 600px) {
    .kanban-board { grid-template-columns: repeat(7, 180px); }
}

/* ── Dashboard acciones priorizadas ──────────────────────────────────── */
.dash-acciones {
    list-style: none; padding: 0; margin: 0;
    display: flex; flex-direction: column;
    gap: 6px;
}
.dash-accion {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--panel);
    border: 1px solid var(--border);
    border-left: 3px solid var(--border-strong);
    border-radius: var(--radius-sm);
    transition: box-shadow 120ms;
}
/* D-436.15: avisador de imágenes pendientes (biblioteca) — siempre la
   última fila, tono índigo propio y más compacto/discreto que las
   alertas de tareas (aparece muy a menudo). */
.dash-accion-bib {
    background: #f5f6ff;
    border-color: #e0e3fb;
    border-left-color: var(--accent, #6366f1);
    padding: 8px 14px;
}
.dash-accion-bib .dash-accion-texto {
    font-size: 12.5px;
    font-weight: 500;
    color: var(--muted);
}
.dash-accion-bib .dash-accion-icono { opacity: .7; }
.dash-accion-bib .dash-accion-cta { color: var(--accent, #6366f1); font-size: 12.5px; }
.dash-accion:hover { box-shadow: var(--shadow-sm); }
.dash-accion-critico {
    background: #fef2f2;
    border-color: #fecaca;
    border-left-color: var(--danger);
}
.dash-accion-aviso {
    background: #fffaf0;
    border-color: #fde68a;
    border-left-color: var(--warning);
}
.dash-accion-icono {
    font-size: 18px;
    line-height: 1;
    flex-shrink: 0;
    width: 24px;
    text-align: center;
}
.dash-accion-cuerpo { flex: 1; min-width: 0; }
.dash-accion-texto {
    font-size: 13.5px;
    font-weight: 500;
    color: var(--text);
    line-height: 1.4;
    overflow-wrap: anywhere;
}
.dash-accion-meta {
    font-size: 11.5px;
    margin-top: 3px;
    display: flex;
    gap: 6px;
    align-items: center;
    flex-wrap: wrap;
}
.dash-accion-lead { color: var(--text-strong); font-weight: 500; }
.dash-accion-cta {
    flex-shrink: 0;
    padding: 6px 12px;
    background: var(--panel);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    color: var(--text-strong);
    font-size: 12.5px;
    font-weight: 500;
    text-decoration: none;
    white-space: nowrap;
    transition: background 120ms, border-color 120ms;
}
.dash-accion-cta:hover {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
    text-decoration: none;
}

/* Foco por estado: grid de cards CTA */
.dash-foco-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 12px;
    margin-top: 12px;
}
.dash-foco-card {
    display: block;
    padding: 14px 16px;
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    text-decoration: none;
    color: inherit;
    transition: box-shadow 120ms, border-color 120ms, transform 60ms;
}
.dash-foco-card:hover {
    box-shadow: var(--shadow-md);
    border-color: var(--accent);
    color: inherit;
    text-decoration: none;
}
.dash-foco-card:active { transform: translateY(1px); }
.dash-foco-card .badge {
    margin-bottom: 8px;
    font-size: 11px;
}
.dash-foco-count {
    font-size: 32px;
    font-weight: 700;
    line-height: 1;
    color: var(--text-strong);
    margin-bottom: 4px;
    font-variant-numeric: tabular-nums;
}
.dash-foco-accion {
    font-size: 12.5px;
    color: var(--muted);
    margin-bottom: 8px;
    min-height: 1.4em;
    line-height: 1.4;
}
.dash-foco-link {
    font-size: 12px;
    color: var(--accent-strong);
    font-weight: 500;
}

/* Tareas próximas: fecha en gris claro (vs amber para vencidas) */
.dash-tarea-fecha-soft {
    font-family: 'JetBrains Mono', monospace;
    font-size: 11px;
    color: var(--muted);
    background: var(--panel-soft);
    padding: 2px 8px;
    border-radius: 4px;
    border: 1px solid var(--border);
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

/* ── Dashboard ────────────────────────────────────────────────────────── */
.dashboard-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 14px;
    margin-bottom: 18px;
}
.dash-card {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 18px 20px;
    box-shadow: var(--shadow-sm);
}
.dash-label {
    font-size: 11.5px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--muted);
    font-weight: 600;
    margin-bottom: 8px;
}
.dash-value {
    font-size: 28px;
    font-weight: 700;
    color: var(--text-strong);
    letter-spacing: -0.02em;
    line-height: 1;
    margin-bottom: 6px;
    font-variant-numeric: tabular-nums;
}
.dash-sub {
    font-size: 12px;
    line-height: 1.45;
}

/* Quota ScreenshotOne (capturas mensuales) */
.dash-card-quota .dash-value { font-size: 22px; }
.dash-quota-bar {
    height: 6px;
    background: var(--border);
    border-radius: 999px;
    overflow: hidden;
    margin: 8px 0;
}
.dash-quota-bar span {
    display: block;
    height: 100%;
    transition: width .3s;
    border-radius: 999px;
}
.dash-card-quota-ok .dash-quota-bar span { background: #6dba6d; }
.dash-card-quota-warn .dash-quota-bar span { background: #d99a00; }
.dash-card-quota-crit .dash-quota-bar span { background: #e25c5c; }
.dash-card-quota-crit { border-color: #fca5a5; }
.dash-card-quota-warn { border-color: #fbbf24; }

/* D-399: mini-cards horizontales con icono color + número + label.
   Layout: icono a la izquierda, número arriba y label debajo a la derecha.
   Grids: Foco usa cols-6 (6 cards en una fila), Consumo usa cols-4. En móvil
   ambos colapsan a 2 columnas para que se lean cómodamente. */
.dash-mini-cards {
    display: grid;
    gap: 12px;
    margin-top: 8px;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
}
.dash-mini-cards.cols-6 { grid-template-columns: repeat(6, 1fr); }
.dash-mini-cards.cols-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 1024px) {
    .dash-mini-cards.cols-6 { grid-template-columns: repeat(3, 1fr); }
    .dash-mini-cards.cols-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
    .dash-mini-cards.cols-6,
    .dash-mini-cards.cols-4 { grid-template-columns: repeat(2, 1fr); }
}
.dash-mini-card {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 12px;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 12px 14px;
    position: relative;
    color: inherit;
    text-decoration: none;
    transition: transform .12s, box-shadow .12s;
    min-width: 0;
}
a.dash-mini-card:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
    border-color: #c7d2fe;
}
.dash-mini-card.zero { opacity: 0.45; }
.dash-mini-card-icon {
    width: 38px;
    height: 38px;
    border-radius: 8px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    background: #f3f4f6;
    flex-shrink: 0;
}
/* D-399h: SVG dentro de mini-card-icon (24x24 viewbox, 20px de tamaño visible) */
.dash-mini-card-icon .dash-ico-card { width: 20px; height: 20px; display: block; }
/* SVG en headers de bloques (h2): alineado con el texto, 20px */
h2 .dash-ico-h {
    width: 20px;
    height: 20px;
    vertical-align: -4px;
    margin-right: 6px;
    color: var(--muted);
}
.dash-mini-card-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
    min-width: 0;
}
.dash-mini-card-num {
    font-size: 22px;
    font-weight: 700;
    line-height: 1.15;
    font-variant-numeric: tabular-nums;
    color: var(--text-strong, #111827);
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: nowrap;
    min-width: 0;
}
/* D-399p: el coste en € siempre en la misma fila que el badge ↑/↓ %.
   El coste ocupa el espacio que pueda y se trunca con ellipsis si no cabe;
   el badge nunca se va abajo. */
.dash-mini-card-coste {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.dash-mini-card-num .dash-trend {
    flex-shrink: 0;
    margin-left: 0;
}
.dash-mini-card-label {
    font-size: 12.5px;
    color: var(--muted);
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dash-mini-card-hot {
    position: absolute;
    top: 6px;
    right: 8px;
    font-size: 10.5px;
    font-weight: 600;
    background: #fee2e2;
    color: #991b1b;
    padding: 1px 7px;
    border-radius: 999px;
    line-height: 1.4;
}
.dash-mini-card-quota {
    grid-column: 1 / -1;
    height: 4px;
    background: rgba(15, 23, 42, 0.06);
    border-radius: 999px;
    overflow: hidden;
    margin-top: 6px;
    width: 100%;
}
.dash-mini-card-quota span {
    display: block;
    height: 100%;
    transition: width .3s;
    border-radius: 999px;
    background: #6dba6d;
}
.dash-mini-card-quota-warn span { background: #d99a00; }
.dash-mini-card-quota-crit span { background: #e25c5c; }

/* D-399k: mini-cards en móvil — ajustes de densidad para que el contenido no
   se salga del grid 2-col con anchos pequeños. */
@media (max-width: 640px) {
    .dash-mini-card {
        gap: 8px;
        padding: 10px 12px;
    }
    .dash-mini-card-icon {
        width: 32px;
        height: 32px;
    }
    .dash-mini-card-icon .dash-ico-card {
        width: 18px;
        height: 18px;
    }
    .dash-mini-card-num {
        font-size: 18px;
        gap: 6px;
    }
    .dash-mini-card-label { font-size: 11.5px; }
    .dash-mini-card-hot { top: 4px; right: 6px; font-size: 10px; padding: 1px 6px; }
    .dash-trend { font-size: 11px; padding: 1px 6px; }
}

/* D-399c: dos columnas para Embudo + Últimos leads. Colapsa a 1 columna
   en pantallas estrechas. Ambas cards toman la altura del más alto para que
   queden alineadas visualmente; el .dash-grid-2col mantiene su margin-bottom
   propio para separar del siguiente bloque. */
.dash-grid-2col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    align-items: stretch;
    margin-bottom: 16px;
}
.dash-grid-2col > .card {
    margin-bottom: 0;
    height: 100%;
    display: flex;
    flex-direction: column;
}
@media (max-width: 1024px) {
    .dash-grid-2col { grid-template-columns: 1fr; }
    .dash-grid-2col > .card { height: auto; }
}

/* Score combinado Negocio / Web en una sola celda. */
.score-combo { display: inline-flex; align-items: center; gap: 4px; }
.score-combo-sep { font-size: 13px; opacity: 0.5; }

/* D-399k: tabla "Últimos leads" en móvil — ocultar columna Creado (la fecha
   queda en el title). En móvil estrecho (≤480px) ocultar también Neg/Web —
   queda solo Nombre + Estado, que es lo mínimo legible. Sin scroll horizontal. */
@media (max-width: 640px) {
    .dash-ultimos-tabla .col-creado { display: none; }
    .dash-ultimos-tabla { min-width: 0; }
    .dash-grid-2col .table-scroll table { min-width: 0; }
}
@media (max-width: 480px) {
    .dash-ultimos-tabla .col-scores { display: none; }
}

/* D-399l: defensa global anti-desbordamiento de cards. Sin min-width: 0 las
   cards con contenido ancho (tabla, embudo) podrían empujar el card body
   más allá del viewport. Aplica solo al contexto del dashboard. */
.dash-grid-2col > .card { min-width: 0; }
.dash-grid-2col > .card > * { min-width: 0; }

/* D-399d: toggle de período (Este mes / Mes anterior / Histórico) en el
   bloque Consumo. Estilo pill horizontal. */
.dash-periodo-toggle {
    display: inline-flex;
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
    font-size: 12px;
}
.dash-periodo-toggle a {
    padding: 5px 12px;
    color: var(--muted);
    background: #fff;
    text-decoration: none;
    font-weight: 600;
}
.dash-periodo-toggle a + a { border-left: 1px solid var(--border); }
.dash-periodo-toggle a.on { background: var(--primary, #4f46e5); color: #fff; }

/* D-399m: header del bloque Consumo — en escritorio título y acciones en
   una sola fila; en móvil el "Desglose completo →" baja a línea propia
   bajo el toggle para que no se apelotone. */
.dash-consumo-h2 {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px;
}
.dash-consumo-actions {
    display: inline-flex;
    align-items: center;
    gap: 10px;
}
.dash-consumo-desglose { font-size: 13px; }
@media (max-width: 640px) {
    .dash-consumo-actions {
        flex-direction: column;
        align-items: flex-end;
        gap: 6px;
        width: 100%;          /* gana toda la anchura tras el wrap */
    }
    .dash-consumo-desglose { font-size: 12.5px; }
}

/* Indicador de tendencia en las cards de Consumo (↑/↓ vs período anterior) */
.dash-trend {
    display: inline-block;
    margin-left: 6px;
    font-size: 12px;
    font-weight: 600;
    padding: 1px 7px;
    border-radius: 999px;
    line-height: 1.4;
    vertical-align: middle;
    font-variant-numeric: tabular-nums;
}
.dash-trend-up   { background: #fef3c7; color: #b45309; }
.dash-trend-down { background: #d1fae5; color: #047857; }
.dash-trend-flat { background: #f3f4f6; color: #6b7280; }
/* Permite poner la barra de cuota debajo del cuerpo (layout en flex) */
.dash-mini-card.has-quota { flex-wrap: wrap; }
.dash-mini-card.has-quota .dash-mini-card-body { flex-basis: calc(100% - 50px); }
.dash-mini-card-quota-meta {
    font-size: 11px;
    color: var(--muted);
    width: 100%;
    margin-top: 2px;
}

/* D-399d: wrapper para tooltip de Foco con los 3 leads más antiguos por fase.
   Hover/focus sobre el wrapper muestra el popover absoluto. La card sigue
   siendo el área clicable principal; cada lead del popover lleva a su ficha.

   D-399j: dos mejoras de UX:
   1. Pseudo-elemento ::before crea un "puente" invisible de 10px entre la
      card y el popover para que el cursor pueda cruzar el gap sin perder
      el hover.
   2. Cierre con transition-delay sobre visibility+opacity (200ms) — si por
      lo que sea el cursor sale del puente, el popover sigue visible un
      momento, dando margen para volver a entrar. Abrir es inmediato. */
.dash-mini-card-wrap { position: relative; min-width: 0; }
.dash-foco-pop {
    visibility: hidden;
    opacity: 0;
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 10px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);
    z-index: 20;
    padding: 10px 12px;
    font-size: 13px;
    min-width: 220px;
    transition: visibility 0s linear .2s, opacity .15s linear .2s;
}
/* Puente invisible: extiende el área hoverable del popover hacia arriba
   para cubrir el gap visual de 6px sin perder el :hover. */
.dash-foco-pop::before {
    content: '';
    position: absolute;
    top: -10px;
    left: 0;
    right: 0;
    height: 10px;
    background: transparent;
}
.dash-mini-card-wrap.has-pop:hover .dash-foco-pop,
.dash-mini-card-wrap.has-pop:focus-within .dash-foco-pop {
    visibility: visible;
    opacity: 1;
    transition-delay: 0s;   /* abrir inmediato */
}
.dash-foco-pop-head {
    font-size: 11.5px;
    font-weight: 600;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: .4px;
    margin-bottom: 6px;
}
.dash-foco-pop-list { list-style: none; padding: 0; margin: 0; }
.dash-foco-pop-list li + li { margin-top: 2px; }
.dash-foco-pop-item {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 6px 8px;
    border-radius: 6px;
    color: inherit;
    text-decoration: none;
}
.dash-foco-pop-item:hover { background: rgba(79, 70, 229, 0.06); }
.dash-foco-pop-nombre {
    font-weight: 600;
    color: var(--text-strong, #111827);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dash-foco-pop-meta { font-size: 11.5px; font-variant-numeric: tabular-nums; }
.dash-foco-pop-foot {
    display: block;
    margin-top: 6px;
    padding-top: 6px;
    border-top: 1px solid var(--border);
    font-size: 12px;
    color: var(--primary, #4f46e5);
    text-decoration: none;
    text-align: center;
}
.dash-foco-pop-foot:hover { text-decoration: underline; }
/* En móvil el popover ocupa todo el ancho disponible para no salirse */
@media (max-width: 640px) {
    .dash-foco-pop { left: 0; right: 0; min-width: 0; }
}

/* Filtros página uso-api */
.uso-api-filtros {
    display: flex;
    gap: 14px;
    align-items: flex-end;
    flex-wrap: wrap;
}
.uso-api-filtros label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.uso-api-filtros select {
    padding: 7px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    font-size: 14px;
    min-width: 180px;
}
.uso-api-filtros-btns {
    display: flex;
    gap: 12px;
    align-items: center;
}
.uso-api-filtros-btns button { margin: 0; padding: 8px 18px; }

/* ───────────────────────────────────────────────────────────────────────
   Perfil de usuario (/perfil.php) — D-264 (2026-05-21).
   Compacto y minimalista. Avatar + KPIs + embudo personal + costes +
   cambio de contraseña, todo en una sola página.
   ─────────────────────────────────────────────────────────────────────── */

.profile-header {
    display: flex;
    align-items: center;
    gap: 18px;
    margin-bottom: 18px;
}
.profile-avatar {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--accent), #8b5cf6);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    font-weight: 700;
    letter-spacing: -0.02em;
    flex-shrink: 0;
    box-shadow: 0 4px 14px rgba(99, 102, 241, 0.35);
}
.profile-header-info { flex: 1; min-width: 0; }
.profile-header-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 13.5px;
    color: var(--muted);
}
.profile-header-meta a { color: var(--accent); text-decoration: none; }
.profile-header-meta a:hover { text-decoration: underline; }

/* KPIs grid */
.profile-kpis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 12px;
    margin-bottom: 18px;
}
.profile-kpi-card {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 16px 18px;
    cursor: pointer;
    transition: transform .15s, box-shadow .15s, border-color .15s;
    box-shadow: var(--shadow-sm);
}
.profile-kpi-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
    border-color: var(--accent-soft);
}
.profile-kpi-card-ok { border-left: 3px solid #6dba6d; }
.profile-kpi-label {
    font-size: 11.5px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--muted);
    font-weight: 600;
    margin-bottom: 6px;
}
.profile-kpi-value {
    font-size: 28px;
    font-weight: 700;
    color: var(--text-strong);
    letter-spacing: -0.02em;
    line-height: 1;
    margin-bottom: 4px;
    font-variant-numeric: tabular-nums;
}
.profile-kpi-sub { font-size: 12px; line-height: 1.4; }

/* Embudo personal */
.profile-funnel-card { margin-bottom: 18px; }
.profile-funnel {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.profile-funnel-row {
    display: grid;
    grid-template-columns: 100px 1fr 40px;
    gap: 12px;
    align-items: center;
    font-size: 13px;
}
.profile-funnel-label { color: var(--text); font-weight: 500; }
.profile-funnel-bar {
    height: 18px;
    background: var(--panel-soft);
    border-radius: 9px;
    overflow: hidden;
}
.profile-funnel-bar-fill {
    display: block;
    height: 100%;
    border-radius: 9px;
    transition: width .3s;
}
.profile-funnel-count {
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--text-strong);
    text-align: right;
}
/* Colores por estado — mismos que badges */
.profile-funnel-seg-detectado    { background: #9aa0ad; }
.profile-funnel-seg-cualificado  { background: #6366f1; }
.profile-funnel-seg-demo_lista   { background: #8b5cf6; }
.profile-funnel-seg-contactado   { background: #0ea5e9; }
.profile-funnel-seg-respondio    { background: #06b6d4; }
.profile-funnel-seg-reunion      { background: #f59e0b; }
.profile-funnel-seg-ganado       { background: #059669; }
.profile-funnel-seg-perdido      { background: #ef4444; }
.profile-funnel-seg-descartado   { background: #cbd5e1; }

/* Costes */
.profile-costes-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-bottom: 18px;
}
.profile-coste-valor {
    font-size: 32px;
    font-weight: 700;
    color: var(--text-strong);
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
}
.profile-delta { font-weight: 600; }
.profile-delta-up { color: #d97706; }
.profile-delta-down { color: #059669; }
.profile-historico-tabla {
    width: 100%;
    font-size: 13px;
    border-collapse: collapse;
}
.profile-historico-tabla td {
    padding: 6px 0;
    border-bottom: 1px dashed var(--border);
}
.profile-historico-tabla tr:last-child td { border-bottom: 0; }
.profile-historico-actual td { color: var(--text-strong); }

/* D-293: contador del textarea de notas (editar.php + nuevo.php).
   Barra horizontal fina + contador + label de estado. Minimalista. */
.notas-meta {
    margin-top: 6px;
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: 12px;
}
.notas-bar {
    flex: 1;
    height: 4px;
    background: rgba(15, 23, 42, 0.06);
    border-radius: 999px;
    overflow: hidden;
    min-width: 80px;
}
.notas-bar-fill {
    display: block;
    height: 100%;
    width: 0;
    border-radius: 999px;
    transition: width .15s ease, background .15s ease;
}
.notas-bar-fill-ok   { background: #16a34a; }   /* verde */
.notas-bar-fill-warn { background: #f59e0b; }   /* ámbar */
.notas-bar-fill-err  { background: #dc2626; }   /* rojo */
.notas-counter {
    white-space: nowrap;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}
.notas-estado            { margin-left: 4px; }
.notas-estado-ok         { color: #15803d; }
.notas-estado-warn       { color: #b45309; }
.notas-estado-err        { color: #b91c1c; font-weight: 600; }

/* Móvil: barra + contador en columnas para que no se aprete */
@media (max-width: 480px) {
    .notas-meta { flex-direction: column; align-items: stretch; gap: 6px; }
    .notas-counter { text-align: right; }
}

/* D-295: spinner inline para acciones largas (test-anthropic.php) */
.test-spinner {
    display: inline-block;
    width: 12px;
    height: 12px;
    border: 2px solid rgba(99,102,241,0.25);
    border-top-color: #6366f1;
    border-radius: 50%;
    animation: test-spinner-rot 0.8s linear infinite;
    vertical-align: middle;
    margin-right: 6px;
}
@keyframes test-spinner-rot {
    to { transform: rotate(360deg); }
}
#testEjecutando { display: inline-flex; align-items: center; gap: 4px; }

/* D-295: banner global de demos en curso/recientes. Aparece bajo la nav,
   compacto. Polling cada 10s vía /api/demos-en-curso.php. */
.demos-banner {
    margin: 0 0 14px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.demos-banner-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    border-radius: 6px;
    font-size: 13px;
    border: 1px solid var(--border);
    background: #fff;
}
.demos-banner-procesando {
    border-left: 3px solid #6366f1;
    background: linear-gradient(90deg, rgba(99,102,241,0.08), rgba(99,102,241,0.02));
}
.demos-banner-ok {
    border-left: 3px solid #16a34a;
    background: linear-gradient(90deg, rgba(22,163,74,0.07), rgba(22,163,74,0.02));
}
.demos-banner-err {
    border-left: 3px solid #dc2626;
    background: linear-gradient(90deg, rgba(220,38,38,0.07), rgba(220,38,38,0.02));
}
.demos-banner-icono {
    font-size: 16px;
    line-height: 1;
}
.demos-banner-procesando .demos-banner-icono {
    animation: demos-banner-spin 2s linear infinite;
    display: inline-block;
}
@keyframes demos-banner-spin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}
.demos-banner-close {
    margin-left: auto;
    background: transparent;
    color: var(--muted);
    border: none;
    font-size: 14px;
    cursor: pointer;
    padding: 2px 6px;
    border-radius: 4px;
}
.demos-banner-close:hover {
    background: rgba(0,0,0,0.05);
    color: var(--text-strong);
}

/* Contactos */
.profile-contactos {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    font-size: 14px;
    align-items: center;
}

/* Card cambiar contraseña */
.profile-password-card { border-left: 3px solid var(--accent); }
.profile-password-form {
    display: flex;
    flex-direction: column;
    gap: 12px;
    max-width: 420px;
}
.profile-password-form label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.profile-password-form input {
    padding: 9px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 14px;
    background: #fff;
}
.profile-password-form input:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}
.profile-password-form button {
    align-self: flex-start;
    padding: 9px 20px;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
    margin: 0;
}
.profile-password-form button:disabled {
    background: #ccd;
    color: #777;
    cursor: not-allowed;
}
.profile-password-form button:not(:disabled):hover { background: var(--accent-strong); }

/* Modal KPI */
.profile-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.85);
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    backdrop-filter: blur(4px);
}
.profile-modal-overlay[hidden] { display: none; }
.profile-modal {
    background: var(--panel);
    border-radius: 12px;
    max-width: 600px;
    width: 100%;
    max-height: 85vh;
    overflow-y: auto;
    padding: 24px;
    position: relative;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
}
.profile-modal-close {
    position: absolute;
    top: 12px;
    right: 12px;
    background: var(--panel-soft);
    border: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 16px;
    color: var(--text-strong);
    /* D-525.1: centrar la ✕ dentro del círculo (antes se apoyaba en la línea
       base → descolocada arriba-izquierda). */
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    padding: 0;
}
.profile-modal-close:hover { background: var(--border); }
.profile-modal-tabla {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.profile-modal-tabla td {
    padding: 8px 0;
    border-bottom: 1px dashed var(--border);
}
.profile-modal-tabla tr:last-child td { border-bottom: 0; }
.profile-modal-lista {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
}
.profile-modal-lista li {
    padding: 10px 0;
    border-top: 1px dashed var(--border);
    font-size: 13.5px;
}
.profile-modal-lista li:first-child { border-top: 0; }
.profile-modal-lista a { color: var(--accent); text-decoration: none; }
.profile-modal-lista a:hover { text-decoration: underline; }
.profile-modal-resumen {
    display: flex;
    gap: 24px;
    flex-wrap: wrap;
    padding: 12px 16px;
    background: var(--panel-soft);
    border-radius: 8px;
    margin: 12px 0;
    font-size: 14px;
}

/* Responsive */
@media (max-width: 768px) {
    .profile-header { flex-direction: column; align-items: flex-start; text-align: left; }
    .profile-costes-grid { grid-template-columns: 1fr; }
    .profile-funnel-row { grid-template-columns: 80px 1fr 36px; gap: 8px; font-size: 12px; }
    .profile-coste-valor { font-size: 26px; }
}
@media (max-width: 480px) {
    .profile-kpis { grid-template-columns: 1fr 1fr; }
    .profile-kpi-value { font-size: 24px; }
    .profile-funnel-row { grid-template-columns: 70px 1fr 32px; }
}

/* ───────────────────────────────────────────────────────────────────────
   Acciones de imágenes (/leads/imagenes.php) — D-269.
   Dos secciones colapsables homogéneas: importar de la web actual + IA.
   ─────────────────────────────────────────────────────────────────────── */
.img-accion-card {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    margin-top: 16px;
    overflow: hidden;
    transition: border-color .15s, box-shadow .15s;
}
.img-accion-card:hover { border-color: var(--accent-soft); }
.img-accion-card[open] {
    border-color: var(--accent);
    box-shadow: 0 4px 14px rgba(99, 102, 241, 0.08);
}
.img-accion-card-ia[open] {
    border-color: #8b5cf6;
    box-shadow: 0 4px 14px rgba(139, 92, 246, 0.10);
}
.img-accion-card > summary {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 18px;
    cursor: pointer;
    list-style: none;
    user-select: none;
    background: var(--panel);
    transition: background .15s;
}
.img-accion-card > summary::-webkit-details-marker { display: none; }
.img-accion-card > summary:hover { background: var(--panel-soft); }
.img-accion-card[open] > summary {
    background: var(--panel-soft);
    border-bottom: 1px solid var(--border);
}
.img-accion-icon { font-size: 20px; line-height: 1; flex-shrink: 0; }
.img-accion-titulo {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-strong);
}
.img-accion-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    flex-wrap: wrap;
    min-width: 0;
}
.img-accion-tag {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11.5px;
    font-weight: 600;
    background: var(--panel-soft);
    color: var(--muted);
    border: 1px solid var(--border);
}
.img-accion-tag-ok { background: #d1fae5; color: #065f46; border-color: #6ee7b7; }
.img-accion-tag-err { background: #fee2e2; color: #991b1b; border-color: #fca5a5; }
.img-accion-tag-ia { background: linear-gradient(135deg, #6366f1, #8b5cf6); color: #fff; border-color: transparent; }
.img-accion-tag-up { background: linear-gradient(135deg, #059669, #10b981); color: #fff; border-color: transparent; }
.img-accion-arrow {
    margin-left: auto;
    color: var(--muted);
    font-size: 16px;
    transition: transform .2s;
    flex-shrink: 0;
}
.img-accion-card[open] .img-accion-arrow { transform: rotate(180deg); }
.img-accion-body {
    padding: 16px 18px 18px;
}

/* Barra de acciones uniforme (botón primario + ghost al lado). */
.img-acciones-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin-top: 16px;
}
.img-accion-btn-primario {
    margin: 0;
    padding: 10px 18px;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-weight: 600;
    font-size: 13.5px;
    transition: background .15s, transform .08s;
}
.img-accion-card-ia .img-accion-btn-primario {
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
}
.img-accion-btn-primario:hover:not(:disabled) {
    background: var(--accent-strong);
    transform: translateY(-1px);
}
.img-accion-card-ia .img-accion-btn-primario:hover:not(:disabled) { filter: brightness(1.08); }
.img-accion-btn-primario:disabled { opacity: 0.6; cursor: wait; }
.img-accion-btn-ghost {
    margin: 0;
    padding: 9px 14px;
    background: #fff;
    color: var(--text-strong);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-size: 13px;
    transition: border-color .15s, background .15s;
}
.img-accion-btn-ghost:hover {
    background: var(--panel-soft);
    border-color: var(--accent);
}

/* Acciones inferior de cada card de imagen descargada (★ Hero + ✕). */
.img-card-acciones {
    display: flex;
    gap: 4px;
    margin-top: 6px;
}

/* Mantengo la clase antigua para retrocompatibilidad si alguien la usa. */
.ia-generar-card {
    border-left: 3px solid #8b5cf6;
    margin-top: 16px;
}
.ia-badge {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 10px;
    font-size: 11.5px;
    font-weight: 600;
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    letter-spacing: 0.04em;
}
.ia-form { margin-top: 4px; }
.ia-form-row {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-bottom: 14px;
}
.ia-form-row textarea {
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    font-size: 13.5px;
    font-family: inherit;
    resize: vertical;
    line-height: 1.4;
}
.ia-form-row textarea:focus {
    outline: none;
    border-color: #8b5cf6;
    box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.15);
}
.ia-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 12px;
    margin-bottom: 14px;
}
.ia-form-grid label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.ia-form-grid select {
    padding: 8px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    font-size: 14px;
}
.ia-form-actions {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}
.ia-form-actions button[type="submit"] {
    padding: 10px 18px;
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
    margin: 0;
}
.ia-form-actions button[type="submit"]:hover { filter: brightness(1.1); }
.ia-form-actions button[type="submit"]:disabled { opacity: 0.6; cursor: not-allowed; }
/* Patrón compartido de acordeones en /leads/imagenes.php
   - Estructura idéntica (caja + borde + summary con flecha ▶/▼ + emoji + texto).
   - Diferencia cromática señala función: gris=informativo, violeta=accionable.
   - Flecha CSS custom (no marcador nativo) para look uniforme entre navegadores. */
.ia-tips {
    margin-top: 14px;
    padding: 12px;
    background: rgba(15, 23, 42, 0.025);
    border-radius: 8px;
    border: 1px solid var(--border);
}
.ia-tips > summary {
    cursor: pointer;
    color: var(--text-strong);
    font-size: 13.5px;
    font-weight: 600;
    user-select: none;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 2px 0;
    transition: color .12s;
}
.ia-tips > summary::-webkit-details-marker { display: none; }
.ia-tips > summary::before {
    content: '›';
    display: inline-block;
    font-size: 18px;
    line-height: 1;
    color: var(--muted);
    transition: transform .15s;
    width: 12px;
    text-align: center;
}
.ia-tips[open] > summary::before { transform: rotate(90deg); }
.ia-tips > summary:hover { color: var(--accent-strong); }
.ia-tips ul { margin-top: 8px; }

/* Botón "Refinar con IA" (Haiku) */
.ia-prompt-actions {
    display: flex;
    gap: 10px;
    align-items: center;
    margin-top: 8px;
    flex-wrap: wrap;
}
.ia-btn-refinar {
    padding: 7px 14px;
    background: #fff;
    color: var(--accent-strong);
    border: 1px solid var(--accent);
    border-radius: 6px;
    cursor: pointer;
    font-size: 12.5px;
    font-weight: 600;
    margin: 0;
    transition: background .15s, transform .08s;
}
.ia-btn-refinar:hover:not(:disabled) {
    background: var(--accent-soft);
    transform: translateY(-1px);
}
.ia-btn-refinar:disabled {
    opacity: 0.6;
    cursor: wait;
}
/* Input "matiz extra" para el refinador de Haiku — opcional, va al lado del
   botón. Permite indicar un sub-servicio o escena concreta sin reescribir
   el prompt entero. */
.ia-contexto-input {
    flex: 1 1 260px;
    min-width: 0;
    padding: 7px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
    background: #fff;
    color: var(--text-strong);
}
.ia-contexto-input::placeholder {
    color: var(--muted);
    opacity: .8;
}
.ia-contexto-input:focus {
    border-color: var(--accent-strong);
    outline: 2px solid var(--accent-soft);
    outline-offset: 1px;
}

/* Badge de estado del prompt — aparece junto al label "Prompt (en inglés)"
   tras refinar para indicar visualmente si el resultado lleva matiz o no.
   Se oculta cuando el operador edita el textarea a mano. */
.ia-prompt-label-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 6px;
}
.ia-prompt-estado {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11.5px;
    font-weight: 500;
    padding: 3px 9px;
    border-radius: 999px;
    line-height: 1.4;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}
.ia-prompt-estado--matiz {
    background: linear-gradient(135deg, rgba(99,102,241,0.14), rgba(139,92,246,0.18));
    color: #6366f1;
    border: 1px solid rgba(99,102,241,0.35);
}
.ia-prompt-estado--sin-matiz {
    background: rgba(245, 158, 11, 0.12);
    color: #b45309;
    border: 1px solid rgba(245, 158, 11, 0.35);
}

/* Headline del bloque matiz — UPPERCASE pequeño + chip de estado al lado.
   Refuerza visualmente que el matiz es lo que da precisión al refinado. */
.ia-matiz-headline {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 10px;
    margin-bottom: 4px;
    flex-wrap: wrap;
}
.ia-matiz-titulo {
    font-size: 11.5px;
    font-weight: 700;
    color: var(--text-strong);
    letter-spacing: .04em;
    text-transform: uppercase;
}
.ia-matiz-chip {
    font-size: 11px;
    font-weight: 500;
    padding: 2px 8px;
    border-radius: 999px;
    background: rgba(245, 158, 11, 0.12);
    color: #b45309;
    border: 1px solid rgba(245, 158, 11, 0.3);
    transition: background .15s, color .15s, border-color .15s;
}
.ia-matiz-chip.ia-matiz-chip--activo {
    background: rgba(34, 197, 94, 0.12);
    color: #15803d;
    border-color: rgba(34, 197, 94, 0.4);
}

/* Ayuda contextual del campo "matiz" — versión COMPACTA del patrón de
   acordeones (vive inline en el form, no debe pesar visualmente como los
   acordeones de Tips/Trucos que viven al final). */
.ia-contexto-help {
    margin-top: 8px;
    padding: 8px 10px;
    background: rgba(15, 23, 42, 0.025);
    border-radius: 6px;
    border: 1px solid var(--border);
}
.ia-contexto-help > summary {
    cursor: pointer;
    font-size: 12.5px;
    color: var(--muted);
    font-weight: 500;
    user-select: none;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 0;
    transition: color .12s;
}
.ia-contexto-help > summary::-webkit-details-marker { display: none; }
.ia-contexto-help > summary::before {
    content: '›';
    display: inline-block;
    font-size: 16px;
    line-height: 1;
    color: var(--muted);
    transition: transform .15s;
    width: 10px;
    text-align: center;
}
.ia-contexto-help[open] > summary::before { transform: rotate(90deg); }
.ia-contexto-help > summary:hover { color: var(--text-strong); }
.ia-contexto-help .ia-info-icono {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--accent-soft);
    color: var(--accent-strong);
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
}
.ia-contexto-help-body {
    margin-top: 8px;
    padding: 10px 12px;
    background: #fff;
    border-left: 3px solid var(--accent-strong);
    border-radius: 0 6px 6px 0;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text);
}
.ia-contexto-help-body p { margin: 0 0 6px; }
.ia-contexto-help-body p:last-child { margin-bottom: 0; }
.ia-contexto-help-body ul {
    margin: 4px 0 6px 18px;
    padding: 0;
}
.ia-contexto-help-body li { margin-bottom: 2px; }
.ia-contexto-help-body em {
    font-style: normal;
    background: rgba(0,0,0,.04);
    padding: 1px 5px;
    border-radius: 3px;
    font-size: 12px;
}

/* Trucos anti "look IA" — chips clicables que añaden al prompt.
   Variante "accionable" del patrón de acordeones: tono violeta + flecha
   tintada. Estructura idéntica a .ia-tips para coherencia visual. */
.ia-trucos {
    margin-top: 14px;
    padding: 12px;
    background: linear-gradient(135deg, rgba(99,102,241,0.05), rgba(139,92,246,0.05));
    border-radius: 8px;
    border: 1px solid rgba(139,92,246,0.2);
}
.ia-trucos > summary {
    cursor: pointer;
    color: var(--text-strong);
    font-weight: 600;
    font-size: 13.5px;
    user-select: none;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 2px 0;
    transition: color .12s;
}
.ia-trucos > summary::-webkit-details-marker { display: none; }
.ia-trucos > summary::before {
    content: '›';
    display: inline-block;
    font-size: 18px;
    line-height: 1;
    color: #8b5cf6;
    transition: transform .15s;
    width: 12px;
    text-align: center;
}
.ia-trucos[open] > summary::before { transform: rotate(90deg); }
.ia-trucos > summary:hover { color: #6366f1; }
.ia-trucos-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 8px;
    margin-top: 8px;
}
.ia-truco-chip {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 3px;
    padding: 8px 12px;
    background: #fff;
    /* Override del reset global `button { color: #fff }` (línea 244): sin
       esto el label queda blanco sobre fondo blanco e invisible. */
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: 6px;
    cursor: pointer;
    text-align: left;
    transition: border-color .15s, transform .08s, background .15s;
    font-family: inherit;
    margin: 0;
}
.ia-truco-chip:hover {
    border-color: #8b5cf6;
    transform: translateY(-1px);
}
.ia-truco-chip.ia-truco-active {
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    border-color: #6366f1;
}
.ia-truco-chip.ia-truco-active .ia-truco-label { color: #fff; }
.ia-truco-chip.ia-truco-active .ia-truco-tip { color: rgba(255,255,255,0.85); }
.ia-truco-label {
    font-weight: 600;
    font-size: 13px;
    color: var(--text-strong);
}
.ia-truco-tip {
    font-size: 11px;
    line-height: 1.35;
    color: var(--muted);
}

/* Badge IA en cards de imagen ya descargada */
.img-card-ia { border-color: #8b5cf6; }
.img-ia-badge {
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    padding: 2px 8px;
    border-radius: 8px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.04em;
}

/* D-303: badge "Mía" para imágenes subidas manualmente (verde tierra). */
.img-card-up { border-color: #10b981; }
.img-up-badge {
    background: linear-gradient(135deg, #059669, #10b981);
    color: #fff;
    padding: 2px 8px;
    border-radius: 8px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.04em;
}

/* D-303: form de upload manual. */
.img-up-row {
    display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
}
.img-up-input {
    flex: 1 1 240px; min-width: 0;
    padding: 8px 10px;
    border: 1px dashed var(--border);
    border-radius: var(--radius);
    background: var(--panel-soft);
    font-size: 13px;
    cursor: pointer;
}
.img-up-input::file-selector-button {
    margin-right: 10px;
    padding: 6px 12px;
    border-radius: 6px;
    border: 1px solid var(--border);
    background: var(--panel);
    color: var(--text);
    cursor: pointer;
    font-weight: 600;
    font-size: 12.5px;
}
.img-up-input::file-selector-button:hover { background: var(--panel-soft); }
.img-up-submit {
    padding: 9px 18px;
    border-radius: var(--radius);
    border: none;
    background: linear-gradient(135deg, #059669, #10b981);
    color: #fff;
    font-weight: 700;
    font-size: 13.5px;
    cursor: pointer;
}
.img-up-submit:hover { filter: brightness(1.05); }
.img-up-submit:disabled { opacity: 0.6; cursor: progress; }
.img-accion-card-up summary { border-left: 3px solid #10b981; }

/* ───────────────────────────────────────────────────────────────────────
   Buscar leads (DataForSEO) — D-266.
   Form de búsqueda + grid de resultados con checkbox para importar.
   ─────────────────────────────────────────────────────────────────────── */
.buscar-card { margin-top: 16px; }
.buscar-form-grid {
    display: grid;
    grid-template-columns: 2fr 2fr 1fr;
    gap: 12px;
    margin-bottom: 14px;
}
.buscar-form-grid label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.buscar-form-grid input,
.buscar-form-grid select {
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    font-size: 14px;
}
.buscar-form-grid input:focus,
.buscar-form-grid select:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}
.buscar-form-actions {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}
.buscar-form-actions button { margin: 0; padding: 10px 22px; }

.buscar-resultados-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
}
.buscar-acciones-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 0;
    margin-bottom: 6px;
    border-bottom: 1px solid var(--border);
    flex-wrap: wrap;
}
/* D-474.7: dos grupos prominentes — selección (izq) e importación (der). */
.buscar-acciones-grupo {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}
/* D-474.9: bloque de importación REUTILIZABLE (idéntico arriba y al pie),
   alineado a la IZQUIERDA. Contador + fila (selector de avance + botón). */
.buscar-importar-bloque {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: fit-content;
    max-width: 100%;
    padding: 12px 14px;
    margin: 4px 0;
    background: var(--panel-soft);
    border: 1px solid var(--border);
    border-radius: 12px;
}
.buscar-importar-fila {
    display: flex;
    align-items: center;
    gap: 8px;
}
.buscar-sel-count { font-size: 13px; }
.buscar-importar-nota { font-size: 12px; margin: 0; }
.buscar-avance-select {
    font-size: 13px;
    font-weight: 600;
    padding: 9px 12px;
    border-radius: 8px;
    border: 1px solid var(--border);
    background: #fff;
    cursor: pointer;
    flex: 1 1 auto;
    min-width: 240px;
}
/* Resaltado mientras no se elige avance (forzar la decisión). */
.buscar-avance-select.sin-elegir {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.18);
    color: var(--muted);
}
.buscar-importar-fila .btn-ico {
    margin: 0;
    flex: 0 0 auto;
    white-space: nowrap;
}
/* D-474.8: botón Importar desactivado hasta elegir el avance. */
.buscar-importar-bloque .btn-ico:disabled {
    opacity: 0.45;
    cursor: not-allowed;
    box-shadow: none;
    filter: grayscale(0.3);
}
/* "Cómo se calcula" fuera del flujo principal: discreto, debajo, a la derecha. */
.buscar-acciones-secundaria {
    display: flex;
    justify-content: flex-end;
    margin: 2px 0 12px;
}
.buscar-comocalc {
    background: none;
    border: 0;
    color: var(--muted);
    font-size: 12px;
    cursor: pointer;
    padding: 2px 4px;
    margin: 0;
    text-decoration: underline dotted;
}
.buscar-comocalc:hover { color: var(--text-strong, var(--text)); background: none; }
@media (max-width: 640px) {
    /* D-474.10: en móvil el selector + botón no caben en una fila (el min-width
       del selector recortaba el botón) → se apilan a ancho completo. */
    .buscar-importar-bloque { width: 100%; }
    .buscar-importar-fila {
        flex-direction: column;
        align-items: stretch;
    }
    .buscar-avance-select {
        min-width: 0;
        width: 100%;
    }
    .buscar-importar-fila .btn-ico {
        width: 100%;
        justify-content: center;
    }
    /* D-474.11: botones de selección a ancho completo y MISMA anchura (antes
       cada uno se ajustaba a su texto → ragged). Homogéneo y coherente. */
    .buscar-acciones-grupo {
        flex-direction: column;
        align-items: stretch;
    }
    .buscar-acciones-grupo > .btn {
        width: 100%;
        justify-content: center;
        text-align: center;
    }
}

.buscar-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 10px;
    margin-top: 10px;
}
.buscar-result-card {
    display: flex;
    gap: 10px;
    padding: 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #fff;
    cursor: pointer;
    transition: border-color .15s, background .15s;
    align-items: flex-start;
}
.buscar-result-card:hover { border-color: var(--accent); }
.buscar-result-card input[type="checkbox"] {
    margin-top: 3px;
    width: 18px;
    height: 18px;
    flex-shrink: 0;
    accent-color: var(--accent);
}
.buscar-result-card input[type="checkbox"]:checked + .buscar-result-body {
    /* sin estilo extra, solo el border en hover */
}
.buscar-result-card.buscar-result-dup {
    background: var(--panel-soft);
    border-color: #d99a00;
    cursor: not-allowed;
}
.buscar-result-card.buscar-result-dup .buscar-result-body { opacity: 0.7; }
/* D-532: sede secundaria de la misma empresa (atenuada, se oculta por defecto). */
.buscar-result-card.buscar-result-sede {
    background: var(--panel-soft);
    border-color: #93c5fd;
}
.buscar-result-card.buscar-result-sede .buscar-result-body { opacity: 0.72; }

.buscar-result-body { flex: 1; min-width: 0; }
.buscar-result-head {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    font-size: 14px;
    margin-bottom: 4px;
}
.buscar-result-sector {
    color: var(--muted);
    font-size: 12px;
    margin-bottom: 6px;
    font-style: italic;
}
/* D-334: una línea por dato — más limpio y claro (Edgar pidió explícito).
   Cada .meta-item ocupa su propia fila gracias a flex-direction:column en el
   .meta-row padre. Se mantiene la separación visual entre grupos (contacto /
   valoración) con margin-bottom entre filas semánticas. */
.buscar-result-meta .meta-row {
    display: flex;
    flex-direction: column;
    gap: 3px;
    font-size: 12px;
    color: var(--text);
    margin-bottom: 6px;
}
.buscar-result-meta .meta-row:last-child { margin-bottom: 0; }
.buscar-result-meta .meta-row .meta-item {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    /* width:fit-content para que el badge GBP no se estire a 100% */
    width: fit-content;
}
.buscar-result-meta .meta-item.muted { color: var(--muted); font-style: italic; }
.buscar-result-meta .meta-oportunidad-gbp {
    background: #fef3c7;
    color: #78350f;
    padding: 2px 8px;
    border-radius: 4px;
    font-weight: 600;
    border: 1px solid #fcd34d;
    font-size: 11px;
}
.buscar-result-meta {
    display: block;
    font-size: 12px;
    color: var(--text);
}
.buscar-result-meta a { color: var(--accent); text-decoration: none; }
.buscar-result-meta a:hover { text-decoration: underline; }
.buscar-result-dup-link {
    margin-top: 6px;
    font-size: 12px;
    color: #92400e;
    font-style: italic;
}
.buscar-result-dup-link a { color: #92400e; text-decoration: underline; }

/* D-331+D-334: añadir/editar web inline antes de importar.
   Layout: input full-width arriba, botones en fila debajo.
   El input antes tenía flex:1 1 200px y se quedaba con todo el espacio,
   dejando los botones sin sitio para el texto → no se veía "Guardar". */
.buscar-add-web {
    margin-top: 8px;
    display: flex;
    gap: 6px 8px;
    align-items: center;
    flex-wrap: wrap;
    padding-top: 8px;
    border-top: 1px dashed var(--border);
}
.buscar-add-web-input {
    flex: 1 1 100%;             /* full width — botones bajan a fila propia */
    min-width: 0;
    font-size: 13px;
    padding: 7px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    color: var(--text-strong);
}
.buscar-add-web-input:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}
.buscar-add-web-btn,
.buscar-add-web-edit-btn,
.buscar-add-web-cancel,
.buscar-reanalizar-btn {          /* D-531: re-analizar web (mismo look neutro) */
    margin: 0;                 /* reset del margin-top:12px global de `button` que descuadraba el disquete dentro del flex */
    font-size: 12px;
    padding: 6px 12px;
    border-radius: 6px;
    border: 1px solid var(--border);
    background: var(--panel-soft);
    cursor: pointer;
    color: var(--text-strong);
    line-height: 1.4;
    font-weight: 500;
    transition: background 0.12s, border-color 0.12s, color 0.12s;
    white-space: nowrap;
    flex-shrink: 0;
}
.buscar-add-web-btn:hover,
.buscar-add-web-edit-btn:hover,
.buscar-add-web-cancel:hover,
.buscar-reanalizar-btn:hover {
    background: #fff;
    border-color: var(--accent);
    /* Imprescindible: sin esto, el `button:hover{color:#fff}` global dejaba el
       texto de "✏️ cambiar web" blanco sobre fondo blanco = invisible al hover.
       OJO: la variable del proyecto es --accent (no --primary, que NO existe). */
    color: var(--accent);
}
/* Primario: el "Guardar" del nuevo modo editor */
.buscar-add-web-btn {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
}
.buscar-add-web-btn:hover {
    background: var(--accent-strong);
    border-color: var(--accent-strong);
    color: #fff;
}
.buscar-add-web-btn:disabled {
    opacity: 0.6;
    cursor: wait;
}
/* Cancelar — ghost discreto */
.buscar-add-web-cancel {
    background: transparent;
    color: var(--muted);
}
.buscar-add-web-cancel:hover {
    color: var(--text-strong);
    background: var(--panel-soft);
}
/* Botón "Buscar en Google" / "Google" */
.buscar-add-web-google {
    font-size: 12px;
    padding: 6px 10px;
    color: #1d4ed8;
    text-decoration: none;
    border: 1px solid #bfdbfe;
    border-radius: 6px;
    background: #eff6ff;
    white-space: nowrap;
    font-weight: 500;
    line-height: 1.4;
    flex-shrink: 0;
    cursor: pointer;
    transition: background 0.12s, border-color 0.12s, color 0.12s;
}
.buscar-add-web-google:hover { background: #dbeafe; border-color: #93c5fd; color: #1e40af; text-decoration: none; }
/* Modo "ya tiene web" (botón "cambiar web" + Google sin input) — más compacto */
.buscar-add-web-edit {
    padding-top: 6px;
    border-top: 1px dashed var(--border);
    margin-top: 6px;
    gap: 6px;
}

@media (max-width: 768px) {
    .buscar-form-grid { grid-template-columns: 1fr; }
    .buscar-add-web { gap: 4px 6px; }
    .buscar-add-web-btn,
    .buscar-add-web-edit-btn,
    .buscar-add-web-cancel,
    .buscar-add-web-google,
    .buscar-reanalizar-btn {
        font-size: 11.5px;
        padding: 5px 9px;
    }
}

/* ─── Buscar leads — filtros vivos + score de hotness ────────── */
.buscar-filtros {
    background: var(--panel-soft);
    border-radius: 8px;
    padding: 12px 14px;
    margin: 14px 0;
}
.buscar-filtros-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
}
.buscar-filtro {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.buscar-filtro select,
.buscar-filtro input {
    padding: 6px 8px;
    font-size: 13px;
    border: 1px solid var(--border);
    border-radius: 4px;
    background: #fff;
}

/* Score badge en cada card */
.buscar-result-score {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 8px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}
.score-caliente { background: linear-gradient(135deg, #f97316, #ef4444); color: #fff; }
.score-tibio    { background: #fef3c7; color: #92400e; }
.score-frio     { background: var(--panel-soft); color: var(--muted); }
.score-descartar { background: #e5e7eb; color: #6b7280; }

/* Resalte cards por bandera */
.buscar-result-card.bandera-caliente { border-color: #f97316; }
.buscar-result-card.bandera-caliente:hover { border-color: #ea580c; }

.buscar-result-nombre {
    flex: 1;
    font-size: 14px;
}
.buscar-sin-web {
    color: #c2410c;
    font-weight: 600;
}
.buscar-result-motivos {
    margin-top: 8px;
    font-size: 11.5px;
}
.buscar-result-motivos summary {
    cursor: pointer;
    color: var(--muted);
    user-select: none;
}
.buscar-result-motivos summary:hover { color: var(--text-strong); }
.buscar-result-motivos ul {
    margin: 6px 0 0;
    padding-left: 18px;
    color: var(--text);
}
.buscar-result-motivos li { padding: 1px 0; }

/* Funnel bars */
.dash-funnel {
    list-style: none;
    padding: 0;
    margin: 8px 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.dash-funnel-row {
    display: grid;
    grid-template-columns: 140px 1fr 44px;
    gap: 14px;
    align-items: center;
    padding: 4px 0;
}
.dash-funnel-label { text-decoration: none; }
.dash-funnel-label:hover { text-decoration: none; }
.dash-funnel-bar-wrap {
    height: 22px;
    background: var(--panel-soft);
    border-radius: var(--radius-sm);
    overflow: hidden;
    position: relative;
}
.dash-funnel-bar {
    position: absolute; top: 0; left: 0; bottom: 0;
    width: var(--p, 0%);
    min-width: 2px;
    background: linear-gradient(90deg, var(--accent), #8b5cf6);
    border-radius: var(--radius-sm);
    transition: width .3s ease;
}
.dash-funnel-bar-terminal {
    background: linear-gradient(90deg, #d1d5db, #9aa0ad);
}
.dash-funnel-terminal .dash-funnel-bar-wrap { opacity: 0.7; }
.dash-funnel-n {
    font-weight: 600;
    text-align: right;
    color: var(--text-strong);
    font-variant-numeric: tabular-nums;
    font-size: 14px;
}

@media (max-width: 600px) {
    .dash-funnel-row { grid-template-columns: 92px 1fr 28px; gap: 8px; }
    .dash-funnel-label .badge { font-size: 11px; padding: 2px 7px; }
    .dash-funnel-bar-wrap { height: 18px; }
    .dash-funnel-n { font-size: 13px; }
}

/* ── Lead progreso / semáforo del funnel ─────────────────────────────── */
.lead-progreso { padding-bottom: 24px; }
.lead-progreso-head {
    display: flex; align-items: center; justify-content: space-between;
    gap: 12px; flex-wrap: wrap; margin-bottom: 16px;
}
.lead-progreso-actual {
    font-size: 13px;
    padding: 5px 14px;
    font-weight: 600;
}
.lead-progreso-bar-wrap {
    position: relative;
    height: 8px;
    background: var(--panel-soft);
    border-radius: 999px;
    overflow: hidden;
    margin-bottom: 22px;
}
.lead-progreso-bar {
    position: absolute; top: 0; left: 0; bottom: 0;
    width: var(--p, 0%);
    background: linear-gradient(90deg, var(--accent), #8b5cf6);
    border-radius: 999px;
    transition: width .35s ease;
}
.lead-progreso-pct {
    position: absolute; right: -2px; top: -22px;
    font-size: 11px; font-weight: 600; color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.lead-flujo {
    list-style: none;
    padding: 0;
    margin: 0 0 22px 0;
    display: flex;
    gap: 8px;
    align-items: stretch;
    counter-reset: lf;
}
.lead-flujo-step {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 6px;
    position: relative;
}
/* línea conectora entre pasos */
.lead-flujo-step:not(:last-child)::after {
    content: '';
    position: absolute;
    top: 14px;
    left: calc(50% + 18px);
    right: calc(-50% + 18px);
    height: 2px;
    background: var(--border);
    z-index: 0;
}
.lead-flujo-step.lead-flujo-realizado:not(:last-child)::after {
    background: var(--ok);
}
.lead-flujo-icon {
    position: relative; z-index: 1;
    width: 30px; height: 30px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 600;
    background: var(--panel-soft);
    color: var(--muted-2);
    border: 2px solid var(--border);
}
.lead-flujo-realizado .lead-flujo-icon {
    background: var(--ok);
    color: #fff;
    border-color: var(--ok);
}
.lead-flujo-actual .lead-flujo-icon {
    background: var(--warning);
    color: #fff;
    border-color: var(--warning);
    box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.2);
    animation: lead-flujo-pulse 1.8s ease-in-out infinite;
}
@keyframes lead-flujo-pulse {
    0%, 100% { box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.20); }
    50%      { box-shadow: 0 0 0 8px rgba(245, 158, 11, 0.05); }
}
.lead-flujo-dot {
    width: 8px; height: 8px; border-radius: 50%;
    background: #fff; display: block;
}
.lead-flujo-label {
    font-size: 11.5px;
    color: var(--muted);
    font-weight: 500;
    line-height: 1.2;
    overflow-wrap: anywhere;
}
.lead-flujo-realizado .lead-flujo-label { color: #047857; }
.lead-flujo-actual .lead-flujo-label { color: #b45309; font-weight: 700; }

.lead-accion {
    /* D-439 F2: acción + guía fusionadas — el bloque es columna y la fila
       interior (.lead-accion-fila) lleva el layout texto+botón de antes. */
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 12px 16px;
    background: linear-gradient(135deg, var(--accent-soft), #f3f5f9);
    border: 1px solid #c7c9f7;
    border-radius: var(--radius);
    margin-top: 4px;
}
.lead-accion-fila {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}
.lead-accion .paso-detalle {
    margin: 0;
    border-top: 1px dashed #c7c9f7;
    padding-top: 8px;
}
.lead-accion-texto { flex: 1; min-width: 200px; }
.lead-accion-etiqueta {
    display: block;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--accent-strong);
    margin-bottom: 4px;
}
.lead-accion-instruccion {
    margin: 0;
    font-size: 13.5px;
    color: var(--text);
    line-height: 1.5;
}
.lead-accion-btn {
    margin: 0;
    padding: 11px 18px;
    background: var(--accent);
    color: #fff;
    border: 1px solid var(--accent);
    border-radius: var(--radius-sm);
    font-weight: 600;
    font-size: 13.5px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    white-space: nowrap;
    box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25);
    transition: background 120ms, transform 60ms;
}
.lead-accion-btn:hover { background: var(--accent-strong); border-color: var(--accent-strong); }
.lead-accion-btn:active { transform: translateY(1px); }

.lead-accion-terminal {
    background: var(--panel-soft);
    border-color: var(--border);
}
.lead-accion-terminal .lead-accion-etiqueta { color: var(--muted); }

/* ─── Banner de alertas (tareas vencidas / hoy) ──────────────── */
.lead-alerta-banner {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px 16px;
    border-radius: 8px;
    margin: 0 0 16px 0;
    border-left: 4px solid;
    font-size: 14px;
}
.lead-alerta-banner.danger {
    background: #fdecec;
    border-color: #e25c5c;
    color: #7a1f1f;
}
.lead-alerta-banner.warn {
    background: #fef7e0;
    border-color: #d99a00;
    color: #6b4d00;
}
.lead-alerta-banner .card-icon {
    flex-shrink: 0;
    margin-top: 2px;
}
.lead-alerta-cuerpo { flex: 1; min-width: 0; }
.lead-alerta-lista {
    margin: 8px 0 0;
    padding: 0;
    list-style: none;
    font-size: 13px;
}
.lead-alerta-lista li {
    padding: 4px 0;
    border-top: 1px dashed currentColor;
    border-color: rgba(0, 0, 0, 0.1);
}
.lead-alerta-lista li:first-child { border-top: 0; }

/* ─── Triage (Detectado) ─────────────────────────────────────── */
.lead-triage {
    margin-top: 14px;
    padding: 14px;
    background: var(--panel-soft);
    border-radius: 8px;
    border: 1px solid var(--border);
}
.lead-triage-titulo {
    margin: 0 0 10px 0;
    font-size: 13.5px;
    color: var(--muted);
    font-weight: 600;
}
.lead-triage-acciones {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 10px;
}
.lead-triage-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 12px 14px;
    border-radius: 8px;
    border: 2px solid transparent;
    background: #fff;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: transform .08s, box-shadow .15s, border-color .15s;
    text-align: center;
}
.lead-triage-btn small {
    font-size: 11.5px;
    font-weight: 400;
    color: var(--muted);
}
.lead-triage-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 10px rgba(0,0,0,0.08); }
.lead-triage-btn:active { transform: translateY(0); }

.lead-triage-ok { border-color: #6dba6d; color: #2c6b2c; }
.lead-triage-ok:hover { background: #f0f9f0; border-color: #4ea14e; }
.lead-triage-warn { border-color: #d99a00; color: #8a6300; }
.lead-triage-warn:hover { background: #fef7e0; border-color: #b88000; }
.lead-triage-warn.is-active { background: #fef0c0; border-color: #b88000; }
.lead-triage-danger { border-color: #e25c5c; color: #963838; }
.lead-triage-danger:hover { background: #fdecec; border-color: #c14545; }

/* ─── Badge "Dudoso" / "Revisar" en header del lead ──────────── */
.badge-revisar {
    background: #fef7e0;
    color: #6b4d00;
    border: 1px solid #d99a00;
    padding: 2px 8px;
    border-radius: 12px;
    font-size: 11.5px;
    font-weight: 600;
    margin-left: 6px;
}

/* ─── Demo compacta (cuando estamos en fase de contacto) ─────── */
.card-demo-compacto {
    background: var(--panel-soft);
}
.card-demo-compacto h2 { font-size: 16px; }

/* ─── Datos editables inline (card "Datos") ──────────────────── */
.datos-gbp-link {
    font-size: 13px;
    color: var(--accent);
    text-decoration: none;
    padding: 4px 10px;
    border-radius: 6px;
    background: rgba(99, 102, 241, 0.08);
    font-weight: 500;
}
.datos-gbp-link:hover { background: rgba(99, 102, 241, 0.16); }

.datos-form { margin-top: 4px; }
.datos-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px 14px;
    margin-bottom: 10px;
}
/* D-443: etiqueta de grupo dentro de la card Datos (Identidad/Ubicación/…). */
.datos-grupo-label {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--muted);
    margin: 6px 0 6px;
    padding-bottom: 4px;
    border-bottom: 1px solid var(--border);
}
.datos-grupo-label:first-of-type { margin-top: 0; }
.datos-campo {
    display: flex;
    flex-direction: column;
    gap: 4px;
    position: relative;
}
.datos-campo-full { grid-column: 1 / -1; }
.datos-label {
    font-size: 12px;
    color: var(--muted);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.datos-req { color: var(--danger); }
.datos-campo input {
    padding: 8px 10px;
    font-size: 14px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    width: 100%;
    box-sizing: border-box;
}
.datos-campo input:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}
.datos-link-extra {
    position: absolute;
    right: 6px;
    top: 28px;
    font-size: 11.5px;
    color: var(--muted);
    text-decoration: none;
    padding: 4px 8px;
    border-radius: 4px;
    background: var(--panel-soft);
}
.datos-link-extra:hover { color: var(--accent); background: rgba(99, 102, 241, 0.08); }

.datos-mas {
    margin-top: 10px;
    padding-top: 8px;
    border-top: 1px dashed var(--border);
}
.datos-mas summary {
    cursor: pointer;
    color: var(--muted);
    font-size: 13px;
    padding: 8px 0;
    user-select: none;
    font-weight: 500;
}
.datos-mas summary:hover { color: var(--text-strong); }
.datos-mas[open] .datos-grid { margin-top: 8px; }

.datos-actions {
    display: flex;
    gap: 12px;
    align-items: center;
    flex-wrap: wrap;
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}
.datos-guardar {
    padding: 8px 16px;
    font-size: 14px;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
}
.datos-guardar:hover:not(:disabled) { background: var(--accent-strong); }
.datos-guardar:disabled { background: #ccd; color: #777; cursor: not-allowed; }
.datos-edicion-completa {
    color: var(--muted);
    font-size: 13px;
    text-decoration: none;
}
.datos-edicion-completa:hover { color: var(--accent); }

.datos-meta {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    align-items: center;
    margin-top: 14px;
    padding-top: 10px;
    border-top: 1px solid var(--border);
    font-size: 12px;
    color: var(--text);
}
.datos-meta code {
    background: var(--panel-soft);
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11.5px;
}

.datos-notas {
    margin-top: 14px;
    padding: 10px 12px;
    background: var(--panel-soft);
    border-radius: 6px;
    border-left: 3px solid var(--muted);
}

/* ─── Contacto multi-canal (S3) ──────────────────────────────── */
.contacto-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 14px;
}
.contacto-canal {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 12px 14px;
    background: #fff;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.contacto-canal.contacto-respondio { border-color: #6dba6d; background: #f0f9f0; }
.contacto-canal.contacto-bloqueado { border-color: #e25c5c; background: #fdf3f3; }
.contacto-canal.contacto-pendiente { border-color: #d99a00; background: #fefcf0; }

.contacto-canal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
}
.contacto-canal-label {
    font-weight: 600;
    font-size: 14px;
}
.contacto-destino {
    font-size: 12.5px;
    word-break: break-all;
}
.contacto-destino code {
    background: var(--panel-soft);
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 12px;
}

.contacto-btn-abrir {
    display: block;
    text-align: center;
    padding: 8px 12px;
    background: var(--accent);
    color: #fff;
    border-radius: 6px;
    text-decoration: none;
    font-weight: 600;
    font-size: 13px;
    margin-top: 4px;
}
.contacto-btn-abrir:hover { background: var(--accent-strong); color: #fff; }

.contacto-detalle, .contacto-historial {
    font-size: 12.5px;
}
.contacto-detalle summary, .contacto-historial summary {
    cursor: pointer;
    color: var(--muted);
    padding: 4px 0;
    user-select: none;
    font-weight: 500;
}
.contacto-detalle summary:hover, .contacto-historial summary:hover { color: var(--text-strong); }

.contacto-form-manual {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 6px;
}
.contacto-form-manual select,
.contacto-form-manual input,
.contacto-select {
    padding: 6px 8px;
    font-size: 12.5px;
    border: 1px solid var(--border);
    border-radius: 4px;
    width: 100%;
    box-sizing: border-box;
}
.contacto-form-manual button {
    padding: 6px 10px;
    font-size: 12.5px;
    margin: 0;
}

.contacto-historial-lista {
    list-style: none;
    margin: 6px 0 0;
    padding: 0;
    font-size: 12px;
}
.contacto-historial-lista li {
    padding: 4px 0;
    border-top: 1px dashed var(--border);
}
.contacto-historial-lista li:first-child { border-top: 0; }
.contacto-historial-motivo {
    color: var(--muted);
    font-style: italic;
    margin-top: 2px;
}

.contacto-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 10.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.contacto-badge-enviado     { background: #e0e7ff; color: #3730a3; }
.contacto-badge-pendiente   { background: #fef3c7; color: #92400e; }
.contacto-badge-respondio   { background: #d1fae5; color: #065f46; }
.contacto-badge-no_contesta { background: #fee2e2; color: #991b1b; }
.contacto-badge-erroneo     { background: #fecaca; color: #7f1d1d; }
.contacto-badge-cuelga      { background: #fed7aa; color: #7c2d12; }
.contacto-badge-sin_uso     { background: #e5e7eb; color: #374151; }

/* ─── Reunión planificada (S4) ───────────────────────────────── */
.reunion-card { border-left: 4px solid #6366f1; }

.reunion-proxima {
    background: linear-gradient(to right, rgba(99, 102, 241, 0.08), transparent);
    padding: 14px 16px;
    border-radius: 8px;
    margin-bottom: 12px;
}
.reunion-fecha {
    display: flex;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 6px;
}
.reunion-fecha-dia {
    font-size: 22px;
    font-weight: 700;
    color: var(--text-strong);
    letter-spacing: -0.01em;
}
.reunion-fecha-relativa {
    font-size: 13px;
    color: var(--accent);
    font-weight: 600;
    padding: 2px 8px;
    background: rgba(99, 102, 241, 0.12);
    border-radius: 10px;
}
.reunion-titulo {
    margin: 8px 0 12px;
    font-size: 14px;
    color: var(--text);
}
.reunion-acciones {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}
.reunion-btn-ok, .reunion-btn-cancel {
    padding: 6px 14px;
    font-size: 13px;
    border-radius: 6px;
    border: 0;
    cursor: pointer;
    font-weight: 600;
    margin: 0;
}
.reunion-btn-ok { background: #d1fae5; color: #065f46; }
.reunion-btn-ok:hover { background: #a7f3d0; }
.reunion-btn-cancel { background: #fee2e2; color: #991b1b; }
.reunion-btn-cancel:hover { background: #fecaca; }

.reunion-agendar { font-size: 13px; }
.reunion-agendar summary {
    cursor: pointer;
    color: var(--muted);
    padding: 8px 0;
    user-select: none;
    font-weight: 500;
}
.reunion-agendar summary:hover { color: var(--text-strong); }
.reunion-agendar[open] summary { color: var(--text-strong); }

.reunion-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 10px;
    margin-top: 10px;
    margin-bottom: 12px;
}
.reunion-form-grid label {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.reunion-form-full { grid-column: 1 / -1; }
.reunion-form-grid input, .reunion-form-grid select {
    padding: 7px 10px;
    font-size: 13.5px;
    border: 1px solid var(--border);
    border-radius: 6px;
    width: 100%;
    box-sizing: border-box;
}
.reunion-btn-agendar {
    padding: 8px 16px;
    font-size: 14px;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
    margin: 0;
}
.reunion-btn-agendar:hover { background: var(--accent-strong); }

.reunion-otras { margin-top: 10px; font-size: 12.5px; }
.reunion-otras summary {
    cursor: pointer;
    color: var(--muted);
    user-select: none;
    padding: 6px 0;
}
.reunion-lista {
    list-style: none;
    padding: 0;
    margin: 6px 0 0;
}
.reunion-lista li {
    padding: 4px 0;
    border-top: 1px dashed var(--border);
}

/* ─── Historial de demos (S4) ────────────────────────────────── */
.historial-demos-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 14px;
}
.historial-demo-card {
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
    background: #fff;
    display: flex;
    flex-direction: column;
    transition: box-shadow .15s;
}
.historial-demo-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.06); }
.historial-demo-lista { border-color: #6dba6d; }
.historial-demo-error { border-color: #e25c5c; opacity: 0.7; }
.historial-demo-obsoleta { opacity: 0.65; }

.historial-demo-thumb {
    display: block;
    aspect-ratio: 1200 / 630;
    background: var(--panel-soft);
    overflow: hidden;
    border-bottom: 1px solid var(--border);
}
.historial-demo-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.historial-demo-thumb-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 40px;
    color: var(--muted);
}

.historial-demo-body { padding: 10px 12px; }
.historial-demo-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 6px;
}
.historial-demo-url {
    display: block;
    font-size: 12.5px;
    color: var(--accent);
    text-decoration: none;
    word-break: break-all;
    margin-bottom: 6px;
}
.historial-demo-url:hover { text-decoration: underline; }
/* D-382: motivo del fallo en cards de demo en estado error. */
.historial-demo-error { margin: 2px 0 8px; }
.historial-demo-error summary {
    cursor: pointer;
    font-size: 12px;
    font-weight: 600;
    color: #b91c1c;
    list-style: none;
}
.historial-demo-error summary::-webkit-details-marker { display: none; }
.historial-demo-error p {
    margin: 6px 0 0;
    font-size: 11.5px;
    line-height: 1.45;
    color: #7f1d1d;
    background: #fef2f2;
    border: 1px solid #fecaca;
    border-radius: 6px;
    padding: 7px 9px;
    word-break: break-word;
    white-space: pre-wrap;
}
.historial-demo-error p a { color: #b91c1c; }
.historial-demo-error-link {
    display: inline-block;
    margin-top: 7px;
    font-size: 11.5px;
    font-weight: 600;
    color: #b91c1c;
    text-decoration: none;
}
.historial-demo-error-link:hover { text-decoration: underline; }
/* D-383: chip de error proactivo en el listado CRM. */
.lead-err-chip {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 10.5px;
    font-weight: 700;
    background: #fef2f2;
    border: 1px solid #fecaca;
    color: #b91c1c;
    text-decoration: none;
    white-space: nowrap;
    vertical-align: middle;
}
.lead-err-chip:hover { background: #fee2e2; }
/* D-313: cada metadato en su propia línea para que todas las cards del
   historial mantengan la misma estructura visual independientemente del
   ancho del contenedor (antes se hacía flex-wrap y card-1 quedaba con 1
   item por línea y card-2 con 2 por línea, asimétrico). */
.historial-demo-meta {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 11.5px;
    color: var(--muted);
}
.historial-demo-meta > span {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Card historial: checkbox + botón borrar superpuestos */
.historial-demo-card { position: relative; }
.historial-demo-check {
    position: absolute;
    top: 8px;
    left: 8px;
    z-index: 5;
    background: rgba(255, 255, 255, 0.92);
    border-radius: 4px;
    padding: 2px;
    line-height: 0;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.historial-demo-check input {
    margin: 0;
    width: 18px;
    height: 18px;
    cursor: pointer;
    accent-color: var(--accent);
}
.historial-demo-borrar {
    position: absolute;
    top: 6px;
    right: 6px;
    z-index: 5;
    margin: 0;
}
.historial-demo-borrar button {
    background: rgba(255, 255, 255, 0.92);
    color: var(--danger);
    border: 0;
    border-radius: 4px;
    width: 24px;
    height: 24px;
    font-size: 14px;
    cursor: pointer;
    line-height: 1;
    padding: 0;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.historial-demo-borrar button:hover { background: #fee2e2; }

.historial-acciones {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    font-weight: 400;
}
.historial-btn-comparar {
    padding: 6px 12px;
    font-size: 13px;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    margin: 0;
    transition: background .15s;
}
.historial-btn-comparar:disabled {
    background: #d1d5db;
    color: #6b7280;
    cursor: not-allowed;
}
.historial-btn-comparar:not(:disabled):hover { background: var(--accent-strong); }

/* Captura obsoleta — badge parpadeante */
.captura-obsoleta-aviso {
    display: inline-block;
    padding: 4px 10px;
    background: #fef3c7;
    color: #92400e;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 600;
    animation: capturaObsoletaPulse 1.4s ease-in-out infinite;
    border: 1px solid #fbbf24;
}
@keyframes capturaObsoletaPulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.6; transform: scale(1.02); }
}

/* Comparador lado a lado (overlay full-screen) */
.comparador-overlay {
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.85);
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    backdrop-filter: blur(4px);
}
.comparador-overlay[hidden] { display: none; }
.comparador-modal {
    background: var(--panel);
    border-radius: 12px;
    max-width: 1400px;
    width: 100%;
    max-height: 92vh;
    overflow: hidden;
    position: relative;
    display: flex;
    flex-direction: column;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
}
.comparador-close {
    position: absolute;
    top: 10px;
    right: 10px;
    background: var(--panel-soft);
    border: 0;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 18px;
    z-index: 2;
    color: var(--text-strong);
    /* D-525.1: centrar la ✕ dentro del círculo. */
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    padding: 0;
}
.comparador-close:hover { background: var(--border); }
.comparador-panes {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    padding: 20px;
    overflow-y: auto;
    background: var(--panel);
}
.comparador-pane {
    background: var(--panel-soft);
    border-radius: 8px;
    overflow: hidden;
    border: 1px solid var(--border);
}
.comparador-pane-head {
    padding: 10px 14px;
    background: var(--panel);
    border-bottom: 1px solid var(--border);
}
.comparador-pane-head strong { font-size: 14px; }
.comparador-pane-meta {
    font-size: 11.5px;
    color: var(--muted);
    margin-top: 4px;
}
.comparador-pane img {
    display: block;
    width: 100%;
    height: auto;
    background: #fff;
}
.comparador-pane-empty {
    padding: 40px 20px;
    text-align: center;
    color: var(--muted);
    font-size: 13px;
}
@media (max-width: 768px) {
    .comparador-panes { grid-template-columns: 1fr; }
    .comparador-modal { max-height: 95vh; }
    .historial-acciones { gap: 8px; }
    .historial-btn-comparar { font-size: 12px; padding: 6px 10px; }
}

/* ─── Acuerdo cerrado (S5) ───────────────────────────────────── */
.acuerdo-card { border-left: 4px solid #6dba6d; }

.acuerdo-resumen {
    display: flex;
    gap: 18px;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 12px;
    padding: 14px 16px;
    background: linear-gradient(to right, rgba(109, 186, 109, 0.08), transparent);
    border-radius: 8px;
}
.acuerdo-tipo-pill {
    display: inline-block;
    padding: 4px 12px;
    background: #d1fae5;
    color: #065f46;
    border-radius: 14px;
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.acuerdo-importe { display: flex; flex-direction: column; gap: 2px; }
.acuerdo-importe-label {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-weight: 600;
}
.acuerdo-importe-valor {
    font-size: 18px;
    font-weight: 700;
    color: var(--text-strong);
}
.acuerdo-fecha {
    font-size: 12.5px;
    color: var(--muted);
}
.acuerdo-notas {
    background: var(--panel-soft);
    padding: 10px 12px;
    border-radius: 6px;
    border-left: 3px solid var(--muted);
    margin-top: 12px;
    font-size: 13px;
}

.acuerdo-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 12px;
    margin-bottom: 12px;
}
.acuerdo-form-grid label { display: flex; flex-direction: column; gap: 4px; }
.acuerdo-form-full { grid-column: 1 / -1; }
.acuerdo-form-grid input, .acuerdo-form-grid select, .acuerdo-form-grid textarea {
    padding: 8px 10px;
    font-size: 14px;
    border: 1px solid var(--border);
    border-radius: 6px;
    width: 100%;
    box-sizing: border-box;
}
.acuerdo-form-grid textarea { resize: vertical; min-height: 60px; }
.acuerdo-btn-cerrar {
    padding: 10px 22px;
    font-size: 14px;
    background: #059669;
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 700;
    margin: 0;
}
.acuerdo-btn-cerrar:hover { background: #047857; }

/* ─── Motivo terminal (perdido/descartado) (S5) ──────────────── */
.motivo-terminal-card { border-left: 4px solid var(--muted); }
.motivo-terminal-form {
    background: var(--panel-soft);
    padding: 12px;
    border-radius: 6px;
}
.motivo-terminal-form select, .motivo-terminal-form textarea {
    padding: 7px 10px;
    font-size: 13.5px;
    border: 1px solid var(--border);
    border-radius: 6px;
    width: 100%;
    box-sizing: border-box;
    background: #fff;
}
.motivo-terminal-form textarea { resize: vertical; }
.motivo-terminal-btn {
    margin-top: 12px;
    padding: 8px 18px;
    background: var(--muted);
    color: #fff;
    border: 0;
    border-radius: 6px;
    cursor: pointer;
    font-weight: 600;
}
.motivo-terminal-btn:hover { background: #4a5563; }

.lead-otros-estados,
.paso-detalle,
.scoring-detalle {
    margin-top: 16px;
    font-size: 13px;
}
.lead-otros-estados summary,
.paso-detalle summary,
.scoring-detalle summary {
    cursor: pointer;
    color: var(--muted);
    user-select: none;
    padding: 8px 0;
    font-weight: 500;
}
.lead-otros-estados summary:hover,
.paso-detalle summary:hover,
.scoring-detalle summary:hover { color: var(--text-strong); }
.lead-otros-estados[open] summary,
.paso-detalle[open] summary,
.scoring-detalle[open] summary { color: var(--text-strong); }

/* Acordeón "Cómo hacer este paso" */
.paso-detalle-body {
    padding: 8px 0 4px;
    border-top: 1px dashed var(--border);
    margin-top: 4px;
}
.paso-checklist {
    padding-left: 22px;
    margin: 8px 0 18px;
    color: var(--text);
    line-height: 1.55;
}
.paso-checklist li { margin-bottom: 6px; }
.paso-prompt {
    background: var(--panel-soft);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 12px 14px;
    margin-top: 12px;
}
.paso-prompt-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    margin-bottom: 8px;
    font-size: 12.5px;
    color: var(--text-strong);
    flex-wrap: wrap;
}
.paso-prompt-copiar {
    margin: 0;
    padding: 5px 12px;
    font-size: 12px;
    background: var(--accent);
    color: #fff;
    border: 1px solid var(--accent);
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-weight: 500;
    transition: background 120ms;
}
.paso-prompt-copiar:hover { background: var(--accent-strong); border-color: var(--accent-strong); }
.paso-prompt-copiar:disabled { background: var(--ok); border-color: var(--ok); cursor: default; opacity: 1; }
.paso-prompt-text {
    width: 100%;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 10px 12px;
    font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
    font-size: 12px;
    line-height: 1.5;
    color: var(--text);
    resize: vertical;
    min-height: 140px;
    box-sizing: border-box;
}

/* Iconos en títulos de card (lucide-style 20x20) */
.card h2 .card-icon,
h2 > .card-icon {
    display: inline-block;
    vertical-align: -4px;
    margin-right: 8px;
    color: var(--muted);
    opacity: 0.85;
    flex-shrink: 0;
}
.card h2:hover .card-icon { color: var(--accent); opacity: 1; }

/* Scoring · valores inline en el título */
.scoring-inline {
    display: inline-flex;
    gap: 4px;
    align-items: center;
}
.scoring-inline .score-mini {
    font-size: 11.5px;
    min-width: 42px;
    padding: 2px 8px;
}

/* Actividad — historial colapsable */
.actividad-historial {
    margin-top: 12px;
    border-top: 1px dashed var(--border);
    padding-top: 12px;
}
.actividad-historial summary {
    cursor: pointer;
    color: var(--muted);
    font-size: 13px;
    user-select: none;
    padding: 6px 0;
    font-weight: 500;
}
.actividad-historial summary:hover { color: var(--text-strong); }
.actividad-historial[open] summary { color: var(--text-strong); }

/* D-439 F4: card Demo unificada (sustituye a "Demo IA" + "Editor rápido").
   La acción principal es "✏ Editar demo"; regenerar con IA va plegado. */
.demo-card-meta {
    margin: 0 0 12px;
    font-size: 13px;
    line-height: 1.6;
}
.demo-card-meta .muted { font-size: 12px; }
.demo-card-cuerpo {
    display: flex;
    gap: 16px;
    align-items: flex-start;
    flex-wrap: wrap;
    margin-bottom: 12px;
}
.demo-card-thumb img {
    height: 130px;
    width: auto;
    max-width: 260px;
    object-fit: cover;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    display: block;
}
.demo-card-acciones {
    flex: 1;
    min-width: 240px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.demo-editar-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    align-self: flex-start;
    margin: 0;
    padding: 12px 22px;
    font-size: 14.5px;
    font-weight: 600;
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: var(--radius-sm);
    text-decoration: none;
    cursor: pointer;
    transition: background .15s, transform .08s;
}
.demo-editar-btn:hover {
    background: var(--accent-strong);
    transform: translateY(-1px);
    text-decoration: none;
    color: #fff;
}
.demo-card-secundarios {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
}
/* D-448.4: botones secundarios apilados (uno debajo de otro), mismo ancho. */
.demo-card-secundarios > form { width: 100%; max-width: 280px; }
.demo-card-secundarios > form .demo-btn-sec { width: 100%; justify-content: center; }
.demo-btn-sec {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    padding: 6px 12px;
    font-size: 12px;
    background: var(--panel-soft);
    color: var(--text-strong);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    cursor: pointer;
}
.demo-btn-sec .wr-tab-svg, .demo-editar-btn .wr-tab-svg { flex-shrink: 0; }
.demo-btn-sec:hover:not(:disabled) { background: var(--accent); color: #fff; border-color: var(--accent); }
.demo-btn-sec-primario { background: #4f46e5; color: #fff; border-color: #4f46e5; }
.demo-btn-sec-primario:hover:not(:disabled) { background: #4338ca; border-color: #4338ca; }
.demo-card-nota { margin: 0; font-size: 12.5px; }
.demo-regen-details {
    margin-top: 4px;
    border-top: 1px dashed var(--border);
    padding-top: 8px;
}
.demo-regen-details summary {
    cursor: pointer;
    user-select: none;
    font-size: 13px;
    font-weight: 600;
    color: var(--muted);
    padding: 4px 0;
}
.demo-regen-details summary:hover { color: var(--text-strong); }
.demo-regen-body { padding: 8px 0 4px; }

/* D-480: grupos de acciones de la card Demo (Editar · Captura · Rehacer la web).
   Cada grupo apila sus botones; entre grupos, una línea sutil + etiqueta muted. */
.demo-grupo {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
}
.demo-grupo + .demo-grupo {
    margin-top: 4px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}
.demo-grupo > form { width: 100%; max-width: 280px; }
.demo-grupo > form .demo-btn-sec { width: 100%; justify-content: center; }
.demo-grupo-cab {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}
.demo-grupo-label {
    font-size: 11.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}
/* Dentro del grupo 3 el details no necesita su propio borde superior. */
.demo-grupo .demo-regen-details { border-top: 0; margin-top: 0; padding-top: 0; }

/* D-480: ⓘ info clicable reutilizable (modelado en .contacto-info). El texto
   se muestra/oculta al pulsar la "i"; cierra al pulsar fuera (JS en ver.php). */
.wr-info-wrap { position: relative; display: inline-flex; }
.wr-info {
    width: 18px; height: 18px; padding: 0;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 50%; border: 1px solid var(--border);
    background: transparent; color: var(--muted); cursor: pointer;
    font: italic 700 11px/1 Georgia, 'Times New Roman', serif;
}
.wr-info:hover, .wr-info:focus-visible { color: var(--accent); border-color: var(--accent); }
.wr-info-pop {
    display: none;
    position: absolute; z-index: 20;
    top: calc(100% + 6px); left: 0;
    width: min(280px, 78vw);
    background: #1f2937; color: #fff;
    font-weight: 400; font-size: 12px; line-height: 1.45;
    text-transform: none; letter-spacing: 0;
    padding: 9px 11px; border-radius: 8px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.22);
}
.wr-info-wrap.open .wr-info-pop { display: block; }

/* Grid de imágenes scrapeadas (página /leads/imagenes.php) */
.img-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
    gap: 12px;
    margin-top: 16px;
}
.img-card {
    background: var(--panel);
    border: 2px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 6px;
    cursor: pointer;
    transition: border-color 120ms, transform 60ms;
    display: flex;
    flex-direction: column;
    gap: 4px;
    overflow: hidden;
}
.img-card:hover { border-color: var(--accent); }
.img-card:has(.img-checkbox:checked) {
    border-color: var(--accent);
    background: var(--accent-soft);
}
.img-card-error { opacity: 0.4; border-style: dashed; }
.img-card-done { border-color: var(--ok); background: var(--ok-soft); }
/* D-270: .img-card-old y .hero-old-historial eliminados — el historial
   ya no existe como concepto. Los archivos hero-old-* legacy se renderizan
   como cualquier otra imagen del grid. */
/* Variante para botón "Quitar hero" (D-270): mismo estilo que el primario
   pero coloreado en rojo soft para distinguir la acción destructiva. */
.img-usar-hero-quitar {
    background: var(--danger-soft);
    color: var(--danger);
    border-color: var(--danger);
}
.img-usar-hero-quitar:hover {
    background: var(--danger);
    color: #fff;
}

/* Thumb del hero actual en la card "Imágenes" de la ficha del lead. */
.imagenes-hero-actual {
    display: flex;
    gap: 10px;
    align-items: center;
    padding: 8px;
    background: var(--panel-soft);
    border: 1px solid var(--border);
    border-radius: 6px;
    margin: 0 0 12px;
}
.imagenes-hero-actual a { line-height: 0; }
.imagenes-hero-actual img {
    width: 80px;
    height: 60px;
    object-fit: cover;
    border-radius: 4px;
    display: block;
    border: 2px solid #f97316;
}
.imagenes-hero-info {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

/* D-271: asignación de imágenes a slots (servicios, dual, etc.) */
.img-slots-asignados {
    display: flex;
    flex-wrap: wrap;
    gap: 3px;
    margin: 6px 0;
}
.img-slot-pill {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 2px 6px;
    border-radius: 10px;
    font-size: 10.5px;
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    font-weight: 600;
}
.img-alt-edit-btn {
    /* #56 — botón "✎ alt" dentro del pill del slot */
    background: rgba(255, 255, 255, 0.2);
    color: #fff;
    border: 0;
    border-radius: 8px;
    padding: 1px 5px;
    font-size: 9.5px;
    cursor: pointer;
    line-height: 1.4;
    font-family: inherit;
}
.img-alt-edit-btn:hover { background: rgba(255, 255, 255, 0.35); }
.img-alt-edit-btn:disabled { opacity: 0.6; cursor: wait; }

/* #69 — dialog para editar alt + description SEO */
.meta-dialog {
    border: 0;
    border-radius: 14px;
    padding: 0;
    max-width: 560px;
    width: 90vw;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25);
}
.meta-dialog::backdrop { background: rgba(0, 0, 0, 0.45); }
.meta-dialog form { padding: 24px 28px; display: flex; flex-direction: column; gap: 16px; }
.meta-dialog-head { display: flex; flex-direction: column; gap: 4px; border-bottom: 1px solid #e5e7eb; padding-bottom: 12px; }
.meta-dialog-head strong { font-size: 16px; }
.meta-dialog-label { display: flex; flex-direction: column; gap: 4px; font-weight: 600; font-size: 13px; }
.meta-dialog-label .muted { font-weight: 400; font-size: 11.5px; color: #6b7280; }
.meta-dialog-label textarea {
    border: 1px solid #d1d5db;
    border-radius: 8px;
    padding: 8px 10px;
    font-family: inherit;
    font-size: 13px;
    resize: vertical;
}
.meta-dialog-label textarea:focus { outline: 2px solid #6366f1; outline-offset: -1px; }
.meta-dialog-estado { color: #6b7280; font-size: 11px; }
.meta-dialog-foot { display: flex; gap: 8px; justify-content: flex-end; border-top: 1px solid #e5e7eb; padding-top: 14px; }
.img-asignar {
    margin-top: 6px;
    font-size: 12px;
}
.img-asignar summary {
    cursor: pointer;
    color: var(--muted);
    user-select: none;
    padding: 4px 0;
    font-weight: 500;
}
.img-asignar summary:hover { color: var(--accent-strong); }
.img-asignar-body {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-top: 4px;
    padding: 6px;
    background: var(--panel-soft);
    border-radius: 4px;
}
.img-asignar-btn {
    text-align: left;
    padding: 5px 8px;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 4px;
    cursor: pointer;
    font-size: 11.5px;
    margin: 0;
    color: var(--text);
    transition: background .12s, border-color .12s;
}
.img-asignar-btn:hover:not(:disabled) {
    background: var(--accent-soft);
    border-color: var(--accent);
}
.img-asignar-btn.is-asignada {
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
    color: #fff;
    border-color: transparent;
    font-weight: 600;
}
.img-asignar-btn:disabled { opacity: 0.6; cursor: wait; }
.img-card-hero {
    border-color: var(--warning);
    background: #fffaf0;
    box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.15);
}
.img-hero-badge {
    background: var(--warning);
    color: #fff;
    font-weight: 700;
    padding: 1px 6px;
    border-radius: 3px;
    font-size: 9.5px;
    letter-spacing: 0.08em;
}
.img-usar-hero {
    margin: 0;
    padding: 5px 10px;
    font-size: 11.5px;
    width: 100%;
    background: var(--panel);
    color: var(--text-strong);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: background 120ms, border-color 120ms;
}
.img-usar-hero:hover {
    background: var(--warning);
    color: #fff;
    border-color: var(--warning);
}
/* D-549: mismo alto que "Marcar hero" (padding 5px 10px), fondo rojo por
   defecto y oscurecimiento al hover (estilo consistente con el resto). */
.img-borrar {
    margin: 0;
    padding: 5px 10px;
    font-size: 11.5px;
    background: var(--danger);
    color: #fff;
    border: 1px solid var(--danger);
    border-radius: var(--radius-sm);
    cursor: pointer;
    line-height: 1.3;
    transition: filter 120ms;
}
.img-borrar:hover {
    filter: brightness(0.85);
}
.img-checkbox {
    position: absolute;
    width: auto;
    margin: 4px;
    z-index: 1;
}
.img-link { display: block; line-height: 0; }
.img-link img {
    width: 100%;
    aspect-ratio: 1 / 1;
    object-fit: cover;
    background: var(--panel-soft);
    border-radius: 4px;
}
.img-meta {
    display: flex;
    justify-content: space-between;
    font-size: 10.5px;
    padding: 0 2px;
}
.img-fuente {
    background: var(--panel-soft);
    padding: 1px 6px;
    border-radius: 3px;
    color: var(--muted);
    font-family: 'JetBrains Mono', monospace;
}
.img-alt {
    font-size: 10.5px;
    padding: 0 2px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Plantillas de mensaje (dentro del acordeón "Cómo hacer este paso") */
.plantillas-rapidas { margin-top: 18px; padding-top: 14px; border-top: 1px dashed var(--border); }
.plantillas-titulo {
    font-size: 13px; font-weight: 600; color: var(--text-strong);
    margin: 0 0 4px; text-transform: uppercase; letter-spacing: 0.04em;
}
.plantilla-card {
    background: #fff;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 12px 14px;
    margin-top: 10px;
}
.plantilla-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 8px;
    flex-wrap: wrap;
}
.plantilla-canal {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.06em;
    padding: 2px 8px;
    border-radius: 999px;
    flex-shrink: 0;
}
.plantilla-canal-whatsapp { background: #d1fae5; color: #047857; }
.plantilla-canal-email { background: #dbeafe; color: #1e40af; }
.plantilla-nombre {
    flex: 1;
    font-size: 13px;
    color: var(--text-strong);
    font-weight: 500;
    min-width: 0;
}
.plantilla-copiar { flex-shrink: 0; }
.plantilla-asunto {
    font-size: 12.5px;
    color: var(--muted);
    background: var(--panel-soft);
    padding: 6px 10px;
    border-radius: 4px;
    margin-bottom: 8px;
}
.plantilla-asunto strong { color: var(--text-strong); }
.plantilla-cuerpo {
    width: 100%;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 10px 12px;
    font-family: inherit;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text);
    resize: vertical;
    min-height: 100px;
    box-sizing: border-box;
    background: var(--panel-soft);
}

/* Acordeón "Ver detalles del cálculo" del Scoring */
.scoring-detalle-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
    margin-top: 12px;
}
@media (max-width: 720px) {
    .scoring-detalle-grid { grid-template-columns: 1fr; gap: 16px; }
}
.scoring-detalle-titulo {
    font-size: 13px;
    color: var(--text-strong);
    margin: 0 0 10px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-weight: 600;
}
.scoring-tabla {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.scoring-tabla td {
    padding: 5px 0;
    border-bottom: 1px dashed var(--border);
}
.scoring-tabla tr:last-child td { border-bottom: 0; }
.scoring-puntos {
    text-align: right;
    font-family: 'JetBrains Mono', monospace;
    font-weight: 600;
    color: var(--ok);
    width: 60px;
    font-variant-numeric: tabular-nums;
}
.scoring-row-zero .scoring-puntos { color: var(--muted-2); }
.scoring-row-zero td:first-child { color: var(--muted); }

@media (max-width: 640px) {
    .lead-flujo { flex-wrap: wrap; gap: 4px 8px; }
    .lead-flujo-step { flex-basis: calc(33% - 8px); }
    .lead-flujo-step:not(:last-child)::after { display: none; }
    .lead-accion { flex-direction: column; align-items: stretch; }
    .lead-accion-btn { width: 100%; justify-content: center; white-space: normal; }
    /* D-447 fix: en móvil la fila acción se apila y los DOS botones van en su
       propia fila a ancho completo (CTA arriba, Descartar debajo) → nunca
       desborda. column-reverse porque en el DOM Descartar va primero. */
    .lead-accion-fila { flex-direction: column; align-items: stretch; }
    .lead-accion-texto { min-width: 0; }
    .lead-accion-cta {
        width: 100%; flex-direction: column-reverse; align-items: stretch; gap: 8px;
    }
    .lead-accion-cta > form { width: 100%; }
    .lead-descartar-btn { width: 100%; justify-content: center; }
}

/* ── Matriz 2×2 (scatter SVG) ────────────────────────────────────────── */
.matriz-point { cursor: pointer; transition: r 120ms ease; }
.matriz-point:hover { r: 10; fill-opacity: 1; }
.matriz-point-detectado   { fill: #9aa0ad; }
.matriz-point-cualificado { fill: #6366f1; }
.matriz-point-demo_lista  { fill: #8b5cf6; }
.matriz-point-contactado  { fill: #3b82f6; }
.matriz-point-respondio   { fill: #10b981; }
.matriz-point-reunion     { fill: #f59e0b; }
.matriz-point-ganado      { fill: #059669; }
.matriz-point-perdido     { fill: #ef4444; }
.matriz-point-descartado  { fill: #cbd5e1; }

/* ── Selección texto: usar accent ────────────────────────────────────── */
::selection { background: var(--accent-soft); color: var(--accent-strong); }

/* ── Scrollbar discreto (webkit) ─────────────────────────────────────── */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 999px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: var(--muted-2); }

/* ───────────────────────────────────────────────────────────────────────
   Responsive móvil — refactor S6 (2026-05-21)
   Decisión D-222: WebRadar es panel interno principalmente desktop, pero
   Edgar quiere poder trabajar desde móvil cuando esté fuera. Objetivos:
   - Móvil <640px: todo apilado en 1 columna, tap targets ≥44px.
   - Tablet <960px: 2 columnas donde aplique, no más.
   - No es necesario lograr "diseño bonito en móvil", solo usable.
   ─────────────────────────────────────────────────────────────────────── */

@media (max-width: 960px) {
    /* Tablet: reducir paddings y compactar layouts 2x */
    .scoring-detalle-grid { grid-template-columns: 1fr; }
}

@media (max-width: 640px) {
    /* Móvil — Header del lead */
    .lead-header h1 { font-size: 22px; line-height: 1.25; }
    .lead-header > div:last-child { width: 100%; justify-content: flex-start; }
    .score-pill { font-size: 12.5px; padding: 6px 10px; }

    /* Banner alertas */
    .lead-alerta-banner { flex-direction: column; gap: 8px; padding: 12px 14px; }
    .lead-alerta-banner .card-icon { margin: 0; }

    /* Triage (Detectado + Reunión) — 1 columna en móvil */
    .lead-triage-acciones { grid-template-columns: 1fr; gap: 8px; }
    .lead-triage-btn { padding: 14px; min-height: 56px; }

    /* Cards en general */
    .card { padding: 14px 14px 16px; }
    .card h2 { font-size: 16px; }

    /* Datos editables — 1 columna */
    .datos-grid { grid-template-columns: 1fr; gap: 10px; }
    .datos-campo input { padding: 10px 12px; font-size: 15px; min-height: 44px; }
    .datos-link-extra { position: static; margin-top: 2px; display: inline-block; }
    .datos-guardar { width: 100%; padding: 12px; min-height: 44px; }
    .datos-actions { flex-direction: column; gap: 8px; align-items: stretch; }
    .datos-edicion-completa { text-align: center; padding: 8px; }

    /* Contacto multi-canal — 1 columna */
    .contacto-grid { grid-template-columns: 1fr; gap: 12px; }
    .contacto-canal { padding: 14px; }
    .contacto-btn-abrir { padding: 12px; min-height: 44px; }
    .contacto-form-manual button { min-height: 40px; }

    /* Reunión planificada */
    .reunion-form-grid { grid-template-columns: 1fr; }
    .reunion-fecha-dia { font-size: 19px; }
    .reunion-acciones { flex-direction: column; gap: 6px; }
    .reunion-btn-ok, .reunion-btn-cancel { width: 100%; padding: 12px; min-height: 44px; }
    .reunion-btn-agendar { width: 100%; padding: 12px; min-height: 44px; }

    /* Historial demos — 1 columna */
    .historial-demos-grid { grid-template-columns: 1fr; gap: 12px; }

    /* Acuerdo */
    .acuerdo-resumen { flex-direction: column; align-items: flex-start; gap: 12px; }
    .acuerdo-form-grid { grid-template-columns: 1fr; }
    .acuerdo-btn-cerrar { width: 100%; padding: 12px; min-height: 44px; }

    /* Motivo terminal */
    .motivo-terminal-btn { width: 100%; padding: 12px; min-height: 44px; }

    /* Demo */
    .card-demo-compacto img { max-width: 100% !important; }
    .demo-editar-btn { width: 100%; min-height: 44px; }
    .demo-card-thumb img { height: auto; max-width: 100%; }

    /* Tareas */
    .tarea-form-grid {
        grid-template-columns: 1fr;
        gap: 8px;
    }
    .tarea-item { padding: 10px; }
    .tarea-toggle button { width: 28px; height: 28px; }
    .tarea-delete button { width: 32px; height: 32px; }

    /* Equipo */
    .team-row { flex-wrap: wrap; }

    /* Plantillas dentro del detalle del paso */
    .plantilla-card textarea { font-size: 13.5px; }
    .paso-prompt-text { font-size: 12.5px; }

    /* Quick-estado buttons (forzar otro estado) */
    .quick-estado { flex-wrap: wrap; gap: 6px; }
    .quick-estado button { flex: 1 1 calc(50% - 6px); min-height: 36px; }

    /* Forms inline genéricos */
    button[type=submit] { min-height: 40px; }
}

@media (max-width: 480px) {
    /* Móvil pequeño — datos meta col stacked */
    .datos-meta { flex-direction: column; align-items: flex-start; gap: 6px; }
    .lead-header { flex-direction: column; align-items: flex-start; }
    .lead-flujo-label { font-size: 11px; }
    .scoring-inline { display: block; margin-top: 4px; }

    /* Card headers con form inline (Scoring · Recalcular, etc.) */
    .card h2 { flex-wrap: wrap; gap: 8px; }
}

/* ───────────────────────────────────────────────────────────────────────
   Menú hamburguesa en la nav del panel admin (móvil).
   Patrón copiado de plantillas/bloques/nav/simple.php + main.js:
   overlay fullscreen blanco con enlaces grandes; hamburger se transforma
   en X; body bloquea scroll cuando el menú está abierto.
   ─────────────────────────────────────────────────────────────────────── */
@media (max-width: 768px) {
    .top-inner { padding: 12px 16px; }
    .top-hamburger { display: block; position: relative; z-index: 1001; }

    .top nav {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        width: 100%;
        height: 100vh;
        height: 100dvh;
        background: var(--panel);
        z-index: 9999;
        flex-direction: column;
        align-items: stretch;
        justify-content: flex-start;
        gap: 4px;
        padding: 72px 20px 28px;
        overflow-y: auto;
    }
    .top nav.is-open { display: flex; }

    .top nav a {
        padding: 14px 16px;
        font-size: 16px;
        font-weight: 600;
        color: var(--text-strong);
        border-radius: var(--radius);
        min-height: 44px;
        display: flex;
        align-items: center;
    }
    .top nav a:hover { background: var(--panel-soft); }
    .top nav a.active,
    .top nav a[aria-current="page"] {
        background: var(--accent-soft);
        color: var(--accent-strong);
    }

    .top nav .who {
        margin: 16px 0 4px;
        padding: 8px 16px 0;
        border-left: 0;
        border-top: 1px solid var(--border);
        font-size: 13px;
        color: var(--muted);
    }

    .top nav a.logout {
        margin-top: 4px;
        background: var(--danger-soft);
        color: var(--danger);
        text-align: center;
        justify-content: center;
    }
    .top nav a.logout:hover { background: var(--danger); color: #fff; }

    /* Hamburger → X cuando el menú está abierto. Fija en top-right para
       quedar SIEMPRE clicable encima del overlay. */
    .top-hamburger.is-open {
        position: fixed;
        top: 12px;
        right: 12px;
        z-index: 10000;
        padding: 10px;
    }
    .top-hamburger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
    .top-hamburger.is-open span:nth-child(2) { opacity: 0; }
    .top-hamburger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

    /* Bloquear scroll del body cuando el menú está abierto */
    body.menu-open { overflow: hidden; }
}

/* ── D-401: Barra de pestañas estilo "pills" reutilizable (Perfil + Sistema +
   Admin). Mismo patrón visual que los filtros del CRM (.crm-tab): redondeadas
   con borde sutil, hover de fondo claro, activa rellena en violeta. SIN línea
   base — limpio y moderno. En móvil pasa a solo-icono (cuadrado). ── */
.wr-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 18px;
    /* Sin border-bottom — el separador era ruido visual. */
}
.wr-tab {
    /* Reset explícito de los estilos globales de `button` (línea 244): pisamos
       margin-top, font-family por si el usuario lo invoca como <button>. */
    margin-top: 0;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 9px 16px;
    border: 1px solid var(--border);
    background: #fff;
    color: var(--text-strong);
    font-size: 13.5px;
    font-weight: 600;
    font-family: inherit;
    line-height: 1.4;
    cursor: pointer;
    text-decoration: none;
    border-radius: 999px;
    white-space: nowrap;
    transition: background-color 0.12s, border-color 0.12s, color 0.12s, box-shadow 0.12s;
}
.wr-tab:hover {
    background: var(--panel-soft, #f1f3f9);
    border-color: var(--border-strong, #cbd5e1);
    /* IMPORTANTE: explícito para pisar `button:hover { color:#fff }` global
       (mayor especificidad que .wr-tab) — sin esto los <button> del perfil
       quedaban con texto blanco invisible al hacer hover. */
    color: var(--text-strong);
}
.wr-tab.on {
    background: var(--primary, #4f46e5);
    border-color: var(--primary, #4f46e5);
    color: #fff;
    box-shadow: 0 1px 3px rgba(79, 70, 229, 0.25);
}
.wr-tab.on:hover {
    /* La activa no cambia al pasar por encima: ya está en su estado fuerte. */
    background: var(--primary, #4f46e5);
    border-color: var(--primary, #4f46e5);
    color: #fff;
}
.wr-tab-svg {
    flex-shrink: 0;
    width: 18px;
    height: 18px;
}
/* Emoji legacy (en _sistema_tabs.php / _admin_tabs.php hasta migración) — el
   tamaño se equipara al SVG para no romper el look mientras se migran. */
.wr-tab-ico {
    font-size: 1.05em;
    line-height: 1;
}

/* Móvil: solo iconos para que todas quepan sin scroll horizontal. Los pills
   se reducen a círculos compactos. */
@media (max-width: 640px) {
    .wr-tabs {
        gap: 4px;
    }
    .wr-tab {
        padding: 9px 11px;
        gap: 0;
    }
    .wr-tab-label {
        display: none;
    }
}

/* ── Checklist completo del lead (modal <dialog> en /crm/ver.php) ──────── */

/* Botón en el lead-header que abre el modal. */
/* D-436.7: más fino, misma altura que las pills de score. */
.btn-checklist-abrir {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 13px;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text);
    cursor: pointer;
    margin: 0;
    transition: border-color 120ms, box-shadow 120ms;
}
.btn-checklist-abrir:hover {
    border-color: var(--primary, #4f46e5);
    box-shadow: 0 1px 0 var(--primary, #4f46e5) inset;
}
.btn-checklist-abrir svg {
    color: var(--primary, #4f46e5);
}
.btn-checklist-pct {
    display: inline-block;
    padding: 1px 7px;
    border-radius: 9px;
    background: var(--primary, #4f46e5);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
}

/* Modal nativo. */
/* ── D-418: modal "Desglose de scoring" ──────────────────────────────── */
.wr-scoring-dialog {
    max-width: 720px;
    width: 92%;
    max-height: 86vh;
    padding: 0;
    border: none;
    border-radius: 14px;
    box-shadow: 0 25px 80px rgba(0, 0, 0, 0.3);
    background: #fff;
    color: var(--text);
    overflow: hidden;
}
.wr-scoring-dialog::backdrop { background: rgba(15, 23, 42, 0.55); backdrop-filter: blur(2px); }
.wr-scoring-head {
    position: sticky; top: 0; z-index: 2;
    display: flex; align-items: center; justify-content: space-between;
    gap: 12px; padding: 16px 22px; background: var(--panel-soft); border-bottom: 1px solid var(--border);
}
.wr-scoring-head-titulo { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.wr-scoring-head h2 { margin: 0; font-size: 17px; }
.wr-scoring-resumen { font-size: 13px; font-weight: 700; padding: 3px 12px; border-radius: 999px; }
.sc-bandera-caliente { background: #fee2e2; color: #b91c1c; }
.sc-bandera-tibio { background: #fef3c7; color: #92400e; }
.sc-bandera-frio { background: #e0f2fe; color: #075985; }
.sc-bandera-descartar { background: var(--panel-soft); color: var(--muted); }
.wr-scoring-close { margin: 0; padding: 4px 10px; background: transparent; border: 1px solid transparent; color: var(--muted); font-size: 18px; line-height: 1; cursor: pointer; }
.wr-scoring-close:hover { color: var(--text-strong); }
.wr-scoring-body { padding: 18px 22px; overflow-y: auto; max-height: calc(86vh - 64px); }
.wr-scoring-formula { font-size: 13px; color: var(--muted); margin: 0 0 16px; padding: 10px 12px; background: var(--panel-soft); border-radius: 8px; }
.wr-scoring-sec { margin-bottom: 18px; }
.wr-scoring-sec h3 { font-size: 14.5px; margin: 0 0 8px; color: var(--text-strong); }
.wr-scoring-oport { font-size: 13px; color: var(--text); margin: 0; }
.wr-scoring-pend-banner { font-size: 12.5px; color: #92400e; background: #fef3c7; border: 1px solid #fde68a; border-radius: 6px; padding: 8px 12px; margin: 0 0 10px; }
.sc-list { list-style: none; margin: 0; padding: 0; }
.sc-list-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 0 18px; }
.sc-row { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
.sc-ico { width: 16px; text-align: center; flex-shrink: 0; }
.sc-label { flex: 1; min-width: 0; }
.sc-pts { font-variant-numeric: tabular-nums; font-weight: 600; font-size: 12.5px; color: var(--text-strong); white-space: nowrap; }
.sc-pts-pend { color: #92400e; font-weight: 600; }
.sc-row.sc-ok .sc-ico { color: #16a34a; }
.sc-row.sc-cero { color: var(--muted); }
.sc-row.sc-cero .sc-pts { color: var(--muted); }
.sc-row.sc-pend { color: #92400e; }
@media (max-width: 560px) { .sc-list-2col { grid-template-columns: 1fr; } }

.wr-checklist-dialog {
    max-width: 760px;
    width: 92%;
    max-height: 86vh;
    padding: 0;
    border: none;
    border-radius: 14px;
    box-shadow: 0 25px 80px rgba(0, 0, 0, 0.3);
    background: #fff;
    color: var(--text);
    overflow: hidden;
}
.wr-checklist-dialog::backdrop {
    background: rgba(15, 23, 42, 0.55);
    backdrop-filter: blur(2px);
}

.wr-checklist-head {
    position: sticky;
    top: 0;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 18px;
    border-bottom: 1px solid var(--border);
    background: #fff;
    z-index: 2;
    flex-wrap: wrap;
}
.wr-checklist-head-titulo {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1 1 auto;
    min-width: 0;
}
.wr-checklist-head-titulo h2 {
    margin: 0;
    font-size: 16px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.wr-checklist-head-pct {
    display: inline-block;
    padding: 3px 10px;
    background: var(--primary, #4f46e5);
    color: #fff;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 700;
}
.wr-checklist-filters {
    display: flex;
    gap: 4px;
}
.wr-checklist-filter {
    padding: 5px 10px;
    background: #f3f4f6;
    border: 1px solid var(--border);
    border-radius: 7px;
    font-size: 12px;
    color: var(--muted);
    cursor: pointer;
}
.wr-checklist-filter:hover {
    color: var(--text);
}
.wr-checklist-filter.on {
    background: var(--primary, #4f46e5);
    color: #fff;
    border-color: var(--primary, #4f46e5);
}
.wr-checklist-close {
    padding: 5px 10px;
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 7px;
    font-size: 14px;
    cursor: pointer;
    color: var(--muted);
}
.wr-checklist-close:hover {
    color: var(--danger);
    border-color: var(--danger);
}

.wr-checklist-terminal-banner {
    margin: 0;
    padding: 10px 18px;
    background: #fef3c7;
    color: #92400e;
    font-size: 13px;
    border-bottom: 1px solid #fbbf24;
}

.wr-checklist-global {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 18px;
    border-bottom: 1px solid var(--border);
    background: #fafbfc;
    font-size: 13px;
}
.wr-checklist-global progress {
    flex: 1 1 auto;
    height: 8px;
    border-radius: 6px;
    border: none;
    background: var(--border);
    overflow: hidden;
}
.wr-checklist-global progress::-webkit-progress-bar { background: var(--border); }
.wr-checklist-global progress::-webkit-progress-value { background: var(--primary, #4f46e5); transition: width 200ms; }
.wr-checklist-global progress::-moz-progress-bar { background: var(--primary, #4f46e5); }

.wr-checklist-body {
    overflow-y: auto;
    max-height: calc(86vh - 160px);
    padding: 12px 18px 18px;
}

.wr-checklist-grupo {
    border: 1px solid var(--border);
    border-radius: 10px;
    margin-bottom: 10px;
    background: #fff;
}
.wr-checklist-grupo[open] {
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}
.wr-checklist-grupo.es-actual {
    border-color: var(--primary, #4f46e5);
    box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.12);
}
.wr-checklist-grupo summary {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 14px;
    cursor: pointer;
    user-select: none;
    list-style: none;
}
.wr-checklist-grupo summary::-webkit-details-marker { display: none; }
.wr-grupo-ico {
    display: inline-flex;
    color: var(--muted);
}
.wr-checklist-grupo.es-actual .wr-grupo-ico {
    color: var(--primary, #4f46e5);
}
.wr-grupo-label {
    font-weight: 600;
    flex: 1 1 auto;
    color: var(--text);
}
.wr-grupo-actual {
    font-size: 11px;
    font-weight: 700;
    color: var(--primary, #4f46e5);
    background: rgba(79, 70, 229, 0.1);
    padding: 2px 7px;
    border-radius: 8px;
}
.wr-grupo-resumen {
    font-size: 12px;
    font-weight: 700;
    padding: 3px 10px;
    border-radius: 10px;
    background: #f3f4f6;
    color: var(--muted);
}
.wr-grupo-resumen.pct-alto { background: #dcfce7; color: #14532d; }
.wr-grupo-resumen.pct-medio { background: #fef3c7; color: #92400e; }
.wr-grupo-resumen.pct-bajo { background: #fee2e2; color: #991b1b; }

.wr-checklist-items {
    list-style: none;
    margin: 0;
    padding: 0;
    border-top: 1px solid var(--border);
}

.wr-cp {
    display: grid;
    grid-template-columns: 24px 1fr auto;
    gap: 10px;
    padding: 10px 14px;
    border-top: 1px solid var(--border);
    align-items: start;
}
.wr-cp:first-child { border-top: none; }
.wr-cp[data-criticidad="obligatorio"] {
    border-left: 3px solid var(--primary, #4f46e5);
    padding-left: 11px;
}
.wr-cp-icon {
    font-size: 16px;
    line-height: 1.4;
    text-align: center;
    font-weight: 700;
}
.wr-cp-ok .wr-cp-icon { color: #16a34a; }
.wr-cp-parcial .wr-cp-icon { color: #d97706; }
.wr-cp-falta .wr-cp-icon { color: #dc2626; }
.wr-cp-n_a .wr-cp-icon { color: var(--muted-2); }
.wr-cp-body {
    min-width: 0;
}
.wr-cp-label {
    font-size: 13.5px;
    color: var(--text);
    margin-bottom: 2px;
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}
.wr-cp-tag-obligatorio {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    background: rgba(79, 70, 229, 0.12);
    color: var(--primary, #4f46e5);
    padding: 1px 6px;
    border-radius: 5px;
}
.wr-cp-tag-opcional {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    background: #f3f4f6;
    color: var(--muted);
    padding: 1px 6px;
    border-radius: 5px;
}
.wr-cp-nota {
    font-size: 12px;
    color: var(--muted);
    margin-bottom: 2px;
}
.wr-cp-desc {
    font-size: 11.5px;
    color: var(--muted-2);
    line-height: 1.4;
}
.wr-cp-cta {
    align-self: center;
    padding: 5px 11px;
    font-size: 12px;
    color: var(--primary, #4f46e5) !important;
    border: 1px solid var(--primary, #4f46e5);
    border-radius: 6px;
    background: #fff;
    text-decoration: none;
    white-space: nowrap;
}
.wr-cp-cta:hover {
    background: var(--primary, #4f46e5);
    color: #fff !important;
}
.wr-cp[hidden] { display: none; }

.wr-cp-sub {
    margin-top: 6px;
    font-size: 12px;
}
.wr-cp-sub summary {
    cursor: pointer;
    color: var(--primary, #4f46e5);
    font-weight: 600;
    padding: 3px 0;
    user-select: none;
}
.wr-cp-sub-list {
    margin: 6px 0 0;
    padding: 0;
    list-style: none;
    border-left: 2px solid var(--border);
    padding-left: 10px;
}
.wr-cp-sub-item {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 3px 0;
}
.wr-cp-sub-ico {
    width: 14px;
    text-align: center;
    font-weight: 700;
}
.wr-cp-sub-ok .wr-cp-sub-ico { color: #16a34a; }
.wr-cp-sub-parcial .wr-cp-sub-ico { color: #d97706; }
.wr-cp-sub-falta .wr-cp-sub-ico { color: #dc2626; }
.wr-cp-sub-label { flex: 1 1 auto; }
.wr-cp-sub-nota {
    color: var(--muted);
    font-size: 11px;
}
.wr-cp-sub-ancla {
    color: var(--muted);
    text-decoration: none;
    font-size: 13px;
}
.wr-cp-sub-ancla:hover {
    color: var(--primary, #4f46e5);
}

/* Móvil: el dialog ocupa casi toda la pantalla, controles más compactos. */
@media (max-width: 600px) {
    .wr-checklist-dialog {
        width: 96%;
        max-height: 92vh;
        border-radius: 10px;
    }
    .wr-checklist-head {
        padding: 11px 13px;
        gap: 8px;
    }
    .wr-checklist-head-titulo h2 {
        font-size: 14.5px;
    }
    .wr-checklist-filters {
        order: 3;
        width: 100%;
    }
    .wr-checklist-filter {
        flex: 1 1 auto;
        text-align: center;
    }
    .wr-checklist-body {
        max-height: calc(92vh - 200px);
        padding: 10px 12px 14px;
    }
    .wr-cp {
        grid-template-columns: 22px 1fr;
        gap: 8px;
    }
    .wr-cp-cta {
        grid-column: 1 / -1;
        text-align: center;
        margin-top: 4px;
    }
}

/* ── Biblioteca de imágenes (panel /biblioteca.php + /biblioteca-editar.php) ── */

/* Header */
.bib-h1 {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 0 4px;
}
.bib-h1-ico {
    color: var(--primary, #4f46e5);
}
.bib-intro {
    margin: 4px 0 16px;
    font-size: 13.5px;
    line-height: 1.5;
}

/* Alerta de migration pendiente */
.bib-alert {
    border: 1px solid #fbbf24;
    background: #fffbeb;
    padding: 16px 20px;
}
.bib-alert-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 6px;
}
.bib-alert-head h2 {
    margin: 0;
    color: #92400e;
    font-size: 16px;
}
.bib-alert-ico {
    color: #d97706;
    flex-shrink: 0;
}
.bib-alert p {
    margin: 4px 0;
    color: #78350f;
    font-size: 13.5px;
}
.bib-alert-detalle {
    font-size: 11.5px;
    margin-top: 8px !important;
    font-family: monospace;
}

/* Contadores */
.bib-contadores {
    display: flex;
    gap: 16px;
    align-items: center;
    flex-wrap: wrap;
    padding: 14px 18px;
}
.bib-contadores-label {
    font-size: 12.5px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.bib-contador {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 12px;
    border: 1px solid var(--border);
    border-radius: 999px;
    font-size: 13px;
    color: var(--text);
    text-decoration: none;
    transition: border-color 120ms, background 120ms;
}
.bib-contador:hover {
    background: #f9fafb;
    border-color: var(--border-strong);
}
.bib-contador strong {
    font-weight: 700;
    color: var(--text-strong, var(--text));
}
.bib-contador-dot {
    display: inline-block;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    flex-shrink: 0;
}
.bib-contador-pendiente .bib-contador-dot { background: #f59e0b; }
.bib-contador-validado .bib-contador-dot  { background: #16a34a; }
.bib-contador-descartado .bib-contador-dot,
.bib-contador-descartada .bib-contador-dot { background: #6b7280; }
.bib-contador-archivado .bib-contador-dot  { background: #94a3b8; }
/* D-436.13/14: reservadas (morado) y privadas (azul). */
.bib-contador-reservada .bib-contador-dot  { background: var(--accent, #6366f1); }
.bib-contador-privada .bib-contador-dot    { background: #0ea5e9; }
/* D-436.14: contador ACTIVO (filtro aplicado) — fondo morado, todo blanco. */
.bib-contador.on {
    background: var(--accent, #6366f1);
    border-color: var(--accent, #6366f1);
    color: #fff;
}
.bib-contador.on strong { color: #fff; }
.bib-contador.on .bib-contador-dot { background: #fff !important; }
.bib-mostrando {
    margin-left: auto;
    font-size: 12px;
}

/* Filtros */
.bib-filtros {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 12px;
    margin: 0;
}
/* D-502: el buscador va en su propia fila a ancho completo, debajo de los
   selectores acotados (como la fila de acciones). */
.bib-filtro-buscar { grid-column: 1 / -1; }
.bib-filtro label {
    display: block;
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 3px;
}
.bib-filtros-acciones {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 4px;
    flex-wrap: wrap;
}
.bib-sin-tags {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    margin: 0;
    cursor: pointer;
}
.bib-sin-tags input {
    margin: 0;
}
.bib-filtros-botones {
    display: flex;
    gap: 10px;
    align-items: center;
}
.bib-filtros-botones button {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

/* Card vacío */
.bib-vacio {
    text-align: center;
    padding: 40px 20px;
}
.bib-vacio-ico {
    color: var(--muted-2);
    opacity: 0.6;
    margin-bottom: 8px;
}
.bib-vacio p {
    margin: 4px 0;
}

/* Bulk bar */
.bib-bulk {
    display: flex;
    gap: 8px;
    align-items: center;
    flex-wrap: wrap;
    padding: 10px 16px;
}
.bib-bulk-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 12px;
    border: 1px solid var(--border);
    border-radius: 7px;
    background: #fff;
    font-size: 13px;
    cursor: pointer;
    color: var(--text);
}
.bib-bulk-btn:hover { background: #f3f4f6; }
.bib-bulk-validar:hover { background: #dcfce7; border-color: #86efac; color: #14532d; }
.bib-bulk-descartar:hover { background: #fee2e2; border-color: #fca5a5; color: #991b1b; }
.bib-bulk-archivar:hover { background: #e5e7eb; border-color: #9ca3af; }
/* D-511: borrado masivo (destructivo) — rojo más marcado que "descartar". */
.bib-bulk-borrar { border-color: #fca5a5; color: #b91c1c; }
.bib-bulk-borrar:hover { background: #fecaca; border-color: #f87171; color: #7f1d1d; }
.bib-bulk-all { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; color: #6b7280; cursor: pointer; }
.bib-bulk-hint {
    margin-left: auto;
    font-size: 11.5px;
}

/* Grid de tarjetas */
.bib-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px;
}
.bib-card {
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: #fff;
    transition: border-color 120ms, box-shadow 120ms;
}
.bib-card:hover {
    border-color: var(--border-strong);
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.04);
}
.bib-card-img {
    position: relative;
    background: #f3f4f6;
}
.bib-card-img img {
    width: 100%;
    height: 180px;
    object-fit: cover;
    display: block;
}
.bib-card-check {
    position: absolute;
    top: 6px;
    left: 6px;
    background: rgba(255, 255, 255, 0.92);
    padding: 3px 6px;
    border-radius: 5px;
    z-index: 2;
    cursor: pointer;
}
.bib-card-check input { margin: 0; }
.bib-card-estado {
    position: absolute;
    bottom: 6px;
    left: 6px;
    padding: 3px 9px;
    border-radius: 9px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    background: #f3f4f6;
    color: var(--text);
}
.bib-card-estado-pendiente  { background: #fef3c7; color: #92400e; }
.bib-card-estado-validado   { background: #dcfce7; color: #14532d; }
.bib-card-estado-descartado { background: #fee2e2; color: #991b1b; }
.bib-card-estado-archivado  { background: #e5e7eb; color: #475569; }
/* D-436.14: privada (foto del cliente, inamovible) — azul. */
.bib-card-estado-privada    { background: #e0f2fe; color: #075985; }
.bib-card-reservada {
    position: absolute;
    top: 6px;
    right: 6px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: #7c3aed;
    color: #fff;
    padding: 4px 9px;
    border-radius: 9px;
    font-size: 11px;
    font-weight: 700;
}

.bib-card-body {
    padding: 10px 11px;
    font-size: 12px;
}
.bib-card-meta {
    display: flex;
    justify-content: space-between;
    gap: 6px;
    align-items: center;
    margin-bottom: 4px;
    color: var(--muted);
    font-size: 11px;
}
.bib-card-line {
    font-size: 11.5px;
    color: var(--text);
    margin-top: 3px;
}
.bib-card-line.muted { color: var(--muted-2); }
.bib-card-line code {
    background: #f3f4f6;
    padding: 1px 5px;
    border-radius: 4px;
    font-size: 10.5px;
}
/* D-501 T1: prompt de generación en la card (desplegable, compacto). */
.bib-card-prompt {
    margin-top: 5px;
    font-size: 11px;
}
.bib-card-prompt > summary {
    cursor: pointer;
    color: var(--muted-2);
    list-style: none;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    user-select: none;
}
.bib-card-prompt > summary:hover { color: var(--text); }
.bib-card-prompt > summary::-webkit-details-marker { display: none; }
.bib-card-prompt[open] > summary { color: var(--text); margin-bottom: 4px; }
.bib-card-prompt-txt {
    font-size: 10.5px;
    line-height: 1.4;
    color: var(--text);
    background: #f3f4f6;
    border-radius: 6px;
    padding: 6px 8px;
    max-height: 160px;
    overflow-y: auto;
    white-space: pre-wrap;
    word-break: break-word;
    user-select: all;
}
.bib-card-tags {
    margin-top: 5px;
    display: flex;
    flex-wrap: wrap;
    gap: 3px;
}
.bib-tag {
    background: #e0e7ff;
    color: #312e81;
    padding: 2px 7px;
    border-radius: 9px;
    font-size: 10.5px;
}
/* D-501.4: keywords (palabras clave) en gris neutro para distinguirlas de los
   servicios aplicables (indigo). La fila de claves se separa un pelín menos. */
.bib-card-kws { margin-top: 3px; }
.bib-tag-kw {
    background: #f1f5f9;
    color: #475569;
}
.bib-tag-mas {
    font-size: 10.5px;
    align-self: center;
}
/* D-431: línea VLM (intención + calidad) en cada card. */
.bib-card-vlm {
    display: flex;
    gap: 6px;
    align-items: center;
    flex-wrap: wrap;
    margin-top: 5px;
}
.bib-int {
    background: #f3f4f6;
    color: #1f2937;
    padding: 2px 8px;
    border-radius: 9px;
    font-size: 10.5px;
    font-weight: 600;
    text-transform: capitalize;
    letter-spacing: 0.01em;
}
.bib-int-na { background: #fef3c7; color: #92400e; font-weight: 500; }
.bib-cal {
    padding: 2px 7px;
    border-radius: 9px;
    font-size: 10.5px;
    font-weight: 700;
    font-family: ui-monospace, SFMono-Regular, monospace;
}
.bib-cal-alta  { background: #d1fae5; color: #065f46; }
.bib-cal-media { background: #fef3c7; color: #92400e; }
.bib-cal-baja  { background: #fee2e2; color: #991b1b; }
.bib-cal-na    { background: #f3f4f6; color: #6b7280; }

/* D-436.9: acordeones DENTRO de las cards (Desglose del cálculo, Análisis
   Lighthouse, Guía de este paso, Debilidades, historial, más campos...).
   Antes eran un summary de texto plano casi invisible; ahora una barra
   clicable delimitada con chevron — se ve que es interactivo. */
.acordeon { margin-top: 10px; }
.acordeon > summary {
    list-style: none;
    cursor: pointer;
    user-select: none;
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 9px 14px;
    background: var(--panel-soft);
    border: 1px solid var(--border);
    border-radius: 10px;
    font-size: 13px;
    font-weight: 600;
    color: var(--text-strong);
    transition: border-color .12s, background .12s;
}
.acordeon > summary::-webkit-details-marker { display: none; }
.acordeon > summary::marker { display: none; }
.acordeon > summary::before {
    content: '▸';
    color: var(--accent);
    font-size: 12px;
    flex-shrink: 0;
    transition: transform .15s ease;
}
.acordeon[open] > summary::before { transform: rotate(90deg); }
.acordeon > summary:hover {
    background: #eef2ff;
    border-color: #c7d2fe;
}
.acordeon[open] > summary {
    border-radius: 10px 10px 0 0;
    border-color: #c7d2fe;
    background: #eef2ff;
}
.acordeon-body {
    border: 1px solid var(--border);
    border-top: 0;
    border-radius: 0 0 10px 10px;
    padding: 14px 16px;
    background: var(--panel);
}

/* D-436: cards plegables de la ficha del lead (Datos, Equipo, Tareas,
   Actividad). El summary es el h2 entero; chevron rota al abrir. */
details.card-plegable > summary {
    list-style: none;
    cursor: pointer;
    user-select: none;
}
details.card-plegable > summary::-webkit-details-marker { display: none; }
details.card-plegable > summary h2 {
    margin: 0;
    display: flex;
    align-items: center;
    gap: 10px;
}
details.card-plegable > summary h2 > span:first-child {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
details.card-plegable > summary .plegable-meta {
    color: var(--muted);
    font-size: 13px;
    font-weight: 400;
    margin-left: auto;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 50%;
}
details.card-plegable > summary .plegable-chevron {
    color: var(--muted);
    font-size: 13px;
    transition: transform .15s ease;
    flex-shrink: 0;
}
details.card-plegable[open] > summary .plegable-chevron { transform: rotate(90deg); }
details.card-plegable[open] > summary { margin-bottom: 14px; }
details.card-plegable > summary:hover h2 { color: var(--accent-strong); }
.bib-card-acciones {
    margin-top: 8px;
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    /* D-436.12: centra verticalmente botones (en <form>) y el enlace editar
       (suelto) — antes el lápiz quedaba desalineado respecto al resto. */
    align-items: center;
}

/* Botones de acción inline (icono solo, square) */
.bib-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    padding: 0;
    /* D-436.12b: reset OBLIGATORIO del margin-top:12px de la regla global
       `button` (línea ~311) — los .bib-action que son <button> (validar/
       descartar/borrar) lo heredaban y quedaban más bajos que el lápiz
       (<a>) y la papelera deshabilitada (<span>), que no son <button>. */
    margin: 0;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #fff;
    color: var(--text);
    cursor: pointer;
    text-decoration: none;
    transition: background 120ms, border-color 120ms, color 120ms;
}
.bib-action:hover { background: #f3f4f6; border-color: var(--border-strong); }
.bib-action.btn-ok { color: #16a34a; border-color: #bbf7d0; }
.bib-action.btn-ok:hover { background: #dcfce7; }
.bib-action.btn-danger { color: var(--danger); border-color: #fca5a5; }
.bib-action.btn-danger:hover { background: #fee2e2; }
/* D-436.12: papelera deshabilitada (imagen en uso) — visible pero apagada,
   con tooltip que explica por qué no se puede eliminar. */
.bib-action-disabled { opacity: .3; cursor: not-allowed; }
.bib-action-disabled:hover { background: #fff; border-color: var(--border); }

/* Paginación */
.bib-paginacion {
    display: flex;
    gap: 8px;
    align-items: center;
    justify-content: center;
    padding: 14px;
}
.bib-page {
    padding: 6px 13px;
    border-radius: 7px;
    border: 1px solid var(--border);
    color: var(--text);
    text-decoration: none;
    font-size: 13px;
}
.bib-page:hover { background: #f3f4f6; }
.bib-page.on {
    background: var(--primary, #4f46e5);
    color: #fff;
    border-color: var(--primary, #4f46e5);
    font-weight: 700;
}

/* Editor (/biblioteca-editar.php) */
.bib-edit-layout {
    display: grid;
    grid-template-columns: 300px 1fr;
    gap: 22px;
    align-items: start;
}
/* D-501.4: sin esto, la columna 1fr tiene min-width:auto y se EXPANDE al ancho
   del contenido más ancho (p.ej. el <pre> de "Meta de origen" con el prompt del
   lote, sin wrap) → la página desbordaba en horizontal. min-width:0 deja que la
   columna encoja y el contenido ancho scrollee/envuelva dentro. */
.bib-edit-layout > * { min-width: 0; }
.bib-edit-preview {
    width: 100%;
    border: 1px solid var(--border);
    border-radius: 10px;
    display: block;
}
.bib-edit-meta {
    font-size: 11.5px;
    margin-top: 10px;
    line-height: 1.6;
}
.bib-edit-meta code {
    background: #f3f4f6;
    padding: 1px 4px;
    border-radius: 3px;
    font-size: 10px;
}
.bib-edit-link {
    font-size: 10.5px;
    margin-left: 4px;
}
.bib-edit-reservada {
    color: #7c3aed;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-top: 4px;
}
.bib-edit-h2 {
    margin: 0 0 12px;
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 15px;
}
.bib-edit-h2-ico { color: var(--primary, #4f46e5); }
.bib-edit-hint {
    font-weight: 400;
    font-size: 11px;
}
.bib-edit-submit {
    margin-top: 14px;
    display: flex;
    gap: 12px;
    align-items: center;
}
.bib-edit-acciones {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}
.bib-edit-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    font-size: 13px;
    background: #f9fafb;
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: 7px;
    cursor: pointer;
    transition: background 120ms, border-color 120ms;
}
.bib-edit-btn:hover { background: #f3f4f6; border-color: var(--border-strong); }
.bib-edit-btn-ok { color: #14532d; border-color: #bbf7d0; background: #f0fdf4; }
.bib-edit-btn-ok:hover { background: #dcfce7; border-color: #86efac; }
.bib-edit-btn-danger { color: #991b1b; border-color: #fca5a5; background: #fef2f2; }
.bib-edit-btn-danger:hover { background: #fee2e2; border-color: #f87171; }
.bib-edit-reservar {
    margin-top: 14px;
}
.bib-edit-reservar summary {
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 0;
    font-size: 12.5px;
}
.bib-edit-reservar form {
    margin-top: 10px;
    display: flex;
    gap: 8px;
    align-items: center;
}
.bib-edit-reservar input[type="number"] {
    width: 140px;
}
.bib-edit-usos { font-size: 13px; }
.bib-edit-usos code { font-size: 11px; }
.bib-edit-meta-json {
    font-size: 11px;
    background: #f9fafb;
    padding: 12px;
    border-radius: 7px;
    overflow: auto;
    border: 1px solid var(--border);
    margin: 0;
}
/* D-501 T1: prompt usado (editor) — texto largo que debe envolver y poder copiarse. */
.bib-edit-prompt-hint {
    font-size: 12px;
    margin: 0 0 8px;
}
.bib-edit-prompt {
    white-space: pre-wrap;
    word-break: break-word;
    line-height: 1.5;
    user-select: all;
}

@media (max-width: 768px) {
    .bib-edit-layout {
        grid-template-columns: 1fr;
    }
    .bib-contadores {
        gap: 8px;
    }
    .bib-contador {
        font-size: 12px;
        padding: 5px 10px;
    }
}
