/* Catálogo privado — capa fina sobre la hoja de la web (../css/nova-2026.css).

   La web ya define el sistema de diseño: tipografía, rejilla, filas de ficha (.nv-spec), etiquetas
   (.nv-eyebrow), formularios (.nv-field), insignias de estado (.nv-state), la barra (.nv-nav). Aquí solo
   va lo propio del catálogo, con las MISMAS variables, de modo que si la web cambia de color o de
   tipografía, el portal la sigue. La política de seguridad de /privado/ solo admite hojas del mismo
   origen y ningún estilo en línea, y la hoja de la web lo cumple (no carga nada externo). */

/* ---------- tema oscuro: se redefinen las variables de la web, no los componentes ---------- */
:root {
    color-scheme: light;
    --pv-solid-bg: var(--nv-ink); --pv-solid-fg: #fff; --pv-solid-hover: var(--nv-accent);
    --pv-err: #b42318; --pv-info: #2563eb; --pv-warn: #b98900;
    --pv-v1-bg: #d9f7f1; --pv-v1-fg: #0b6b62;               /* escala de verdes de la compatibilidad */
    --pv-v2-bg: #8ee6d6; --pv-v2-fg: #064e46;
    --pv-v3-bg: #0d9488; --pv-v3-fg: #fff;
}
/* Oscuro elegido a mano… */
:root[data-theme="dark"] {
    color-scheme: dark;
    --nv-surface: #0b0d0f; --nv-surface-alt: #14171a; --nv-line: #262a2e;
    --nv-fg: #f4f6f7; --nv-fg-soft: #b3bac0; --nv-fg-mute: #868d94; --nv-accent: #2dd4bf;
    --pv-solid-bg: #2dd4bf; --pv-solid-fg: #050505; --pv-solid-hover: #f4f6f7;
    --pv-err: #f87171; --pv-info: #7dd3fc; --pv-warn: #fbbf24;
    --pv-v1-bg: #0f2a27; --pv-v1-fg: #7be8d9;
    --pv-v2-bg: #14625a; --pv-v2-fg: #d9fff9;
    --pv-v3-bg: #2dd4bf; --pv-v3-fg: #050505;
}
/* …o por defecto si el sistema lo pide y no se ha elegido «Claro». */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        color-scheme: dark;
        --nv-surface: #0b0d0f; --nv-surface-alt: #14171a; --nv-line: #262a2e;
        --nv-fg: #f4f6f7; --nv-fg-soft: #b3bac0; --nv-fg-mute: #868d94; --nv-accent: #2dd4bf;
        --pv-solid-bg: #2dd4bf; --pv-solid-fg: #050505; --pv-solid-hover: #f4f6f7;
        --pv-err: #f87171; --pv-info: #7dd3fc; --pv-warn: #fbbf24;
        --pv-v1-bg: #0f2a27; --pv-v1-fg: #7be8d9;
        --pv-v2-bg: #14625a; --pv-v2-fg: #d9fff9;
        --pv-v3-bg: #2dd4bf; --pv-v3-fg: #050505;
    }
}

[hidden] { display: none !important; }
/* Especificidad cero: es un punto de partida, y no debe ganar a las clases de cada componente. */
:where(.pv) :is(button, select, input) { font: inherit; color: inherit; }
.pv-mute { color: var(--nv-fg-mute); }

/* ---------- botones ---------- */
.pv-btn {
    display: inline-flex; align-items: center; gap: 10px; padding: 12px 22px;
    border: 1px solid transparent; border-radius: 999px; background: transparent;
    font-size: 0.875rem; font-weight: 500; cursor: pointer;
    transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.pv-btn:hover { transform: translateY(-1px); }
.pv-btn:disabled { opacity: 0.55; cursor: progress; transform: none; }
.pv-btn--solid { background: var(--pv-solid-bg); color: var(--pv-solid-fg); border-color: var(--pv-solid-bg); }
.pv-btn--solid:hover:not(:disabled) { background: var(--pv-solid-hover); border-color: var(--pv-solid-hover); }
.pv-btn--ghost { border-color: var(--nv-line); color: var(--nv-fg); }
.pv-btn--ghost:hover { border-color: var(--nv-accent); color: var(--nv-accent); }
.pv-btn--mini { padding: 6px 14px; font-size: 0.75rem; }

/* ---------- controles ---------- */
.pv-filtros input, .pv-filtros select, .pv-tema {
    height: 44px; padding: 0 14px; border: 1px solid var(--nv-line); border-radius: 4px;
    background: var(--nv-surface); font-size: 0.875rem; color: var(--nv-fg);
}
.pv-filtros input:focus, .pv-filtros select:focus { border-color: var(--nv-accent); outline: none; }
.pv-tema { height: 34px; padding: 0 10px; font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.06em; }

/* ---------- barra ---------- */
.pv-nav.nv-nav {
    background: color-mix(in srgb, var(--nv-surface) 88%, transparent);
    border-bottom-color: var(--nv-line);
    color: var(--nv-fg);
}
.pv-tabs { display: flex; align-items: center; gap: 28px; }
.pv-tabs button {
    padding: 6px 0; border: 0; border-bottom: 1px solid transparent; background: none; cursor: pointer;
    font-size: 0.8125rem; letter-spacing: 0.09em; text-transform: uppercase; color: var(--nv-fg-soft);
    transition: color 0.2s ease, border-color 0.2s ease;
}
.pv-tabs button:hover { color: var(--nv-fg); }
.pv-tabs button[aria-current] { color: var(--nv-fg); border-bottom-color: var(--nv-accent); }
.pv-herr { display: flex; align-items: center; gap: 14px; }
.pv-quien { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; color: var(--nv-fg-mute); }
.pv-salir {
    padding: 7px 15px; border: 1px solid var(--nv-line); border-radius: 999px; background: none; cursor: pointer;
    font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--nv-fg-soft);
}
.pv-salir:hover { border-color: var(--nv-accent); color: var(--nv-accent); }

/* ---------- estructura: una sola pantalla, sin scroll de página ----------
   La barra arriba y, debajo, columnas que ocupan el resto de la altura. Cada columna con mucho contenido
   (lista, ficha, resultados) se desplaza por dentro; la página no. En pantallas estrechas vuelve al flujo normal. */
body.nv.pv-app { height: 100vh; height: 100dvh; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; }
.pv-app .pv-nav.nv-nav { position: relative; height: 56px; }
.pv-app main { min-height: 0; }
.pv-vista { height: 100%; min-height: 0; }
.pv-vista--cat { display: grid; grid-template-columns: 270px minmax(0, 1fr); }
.pv-vista--scroll { overflow-y: auto; padding: 32px max(var(--nv-gutter), calc((100% - 1100px) / 2)) 48px; }

/* columna lateral: título, cifras y filtros */
.pv-lat {
    display: flex; flex-direction: column; min-height: 0; overflow-y: auto; padding: 26px 22px 18px;
    border-right: 1px solid var(--nv-line); background: var(--nv-surface-alt);
}
.pv-lat .nv-eyebrow { margin-bottom: 12px; }
.pv-titulo { margin: 0; font-size: 1.5rem; font-weight: 600; letter-spacing: -0.02em; line-height: 1.2; }
.pv-lat .pv-sub { margin: 12px 0 16px; font-size: 0.8125rem; line-height: 1.55; }
.pv-resumen { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 14px; margin: 18px 0 16px; border-top: 1px solid var(--nv-line); }
.pv-stat {
    position: relative; display: grid; gap: 1px; padding: 11px 0 9px; border: 0; border-bottom: 1px solid var(--nv-line); background: none;
    text-align: left; cursor: pointer; color: var(--nv-fg);
}
.pv-stat strong { font-size: 1.45rem; font-weight: 600; letter-spacing: -0.02em; line-height: 1.1; font-variant-numeric: tabular-nums; }
.pv-stat span { font-family: var(--nv-mono); font-size: 0.625rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
button.pv-stat::before {
    content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
    background: var(--nv-accent); transform: scaleX(0); transform-origin: left; transition: transform 0.25s ease;
}
button.pv-stat:hover::before, .pv-stat[aria-pressed="true"]::before { transform: scaleX(1); }
.pv-stat[aria-pressed="true"] strong { color: var(--nv-accent); }
.pv-stat--info { cursor: default; }

.pv-filtros { display: grid; gap: 8px; margin: 0 0 14px; }
.pv-filtros input, .pv-filtros select { width: 100%; }
.pv-filtros .pv-btn { justify-self: start; }
.pv-cuenta { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; color: var(--nv-fg-mute); }
.pv-pie { margin: auto 0 0; padding-top: 16px; font-size: 0.6875rem; line-height: 1.5; color: var(--nv-fg-mute); }
.pv-sub { max-width: 66ch; margin: 14px 0 28px; color: var(--nv-fg-soft); }
.pv-leyenda { display: grid; gap: 8px; margin: 0 0 18px; font-size: 0.8125rem; color: var(--nv-fg-soft); }
.pv-leyenda li { display: flex; align-items: center; gap: 10px; }
.pv-leyenda .pv-chip { min-width: 40px; justify-content: center; }

/* ---------- lista y ficha: dos columnas, cada una con su desplazamiento ---------- */
.pv-dos { display: grid; grid-template-columns: minmax(280px, 350px) minmax(0, 1fr); height: 100%; min-height: 0; }
.pv-lista { min-height: 0; overflow-y: auto; border-right: 1px solid var(--nv-line); }
.pv-lista li { margin: 0; }
.pv-sin { padding: 22px 18px; color: var(--nv-fg-mute); }
.pv-item {
    position: relative; width: 100%; display: grid; gap: 5px; padding: 14px 12px 14px 18px;
    border: 0; border-bottom: 1px solid var(--nv-line); background: none; text-align: left; cursor: pointer; color: var(--nv-fg);
    transition: background 0.2s ease;
}
.pv-item:hover { background: var(--nv-surface-alt); }
.pv-item[aria-current] { background: var(--nv-surface-alt); }
.pv-item[aria-current]::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--nv-accent); }
.pv-item .fila { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.pv-item strong { font-weight: 600; letter-spacing: -0.01em; }
.pv-item small { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-item .desc {
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
    font-size: 0.8125rem; line-height: 1.5; color: var(--nv-fg-soft);
}
.pv-pct { display: block; height: 3px; margin-top: 4px; background: var(--nv-line); overflow: hidden; }
.pv-pct span { display: block; height: 100%; background: var(--nv-accent); }

/* paneles de resultados (compatibilidad y huecos) */
.pv-panel { min-width: 0; min-height: 0; overflow-y: auto; padding: 26px 32px 36px; }
.pv-cab-panel { margin-bottom: 8px; }
.pv-cab-panel .pv-sub { margin: 8px 0 0; }
.pv-mini { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 16px 0 18px; }
.pv-detalle-par { max-width: 900px; }
.pv-panel--cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; padding: 0; overflow: hidden; }
.pv-col { min-height: 0; overflow-y: auto; padding: 26px 24px 28px; border-right: 1px solid var(--nv-line); }
.pv-col:last-child { border-right: 0; }
.pv-col-t { position: sticky; top: -26px; margin: -26px -24px 12px; padding: 22px 24px 12px; background: var(--nv-surface); z-index: 1;
    font: 600 0.9375rem var(--nv-font); letter-spacing: -0.01em; }
.pv-col-l li { padding: 9px 0; border-bottom: 1px solid var(--nv-line); font-size: 0.875rem; overflow-wrap: anywhere; }

/* ---------- ficha ---------- */
#ficha.pv-ficha { min-height: 0; overflow-y: auto; padding: 28px 40px 56px; }
.pv-ficha { min-width: 0; overflow-wrap: anywhere; }
.pv-ficha:focus { outline: none; }
.pv-vacio { padding: 40px 0; }
.pv-vacio p + p { margin-top: 10px; }
.pv-cab { padding-bottom: 28px; }
.pv-cab h2 { font-size: clamp(1.7rem, 2.6vw, 2.35rem); }
.pv-cab .org { margin-bottom: 14px; }
.pv-lead { max-width: 62ch; margin-top: 14px; font-size: 1.125rem; line-height: 1.5; color: var(--nv-fg-soft); }
.pv-acciones { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }
.pv-solo-movil { display: none; }
.pv-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin-top: 22px; }
.pv-completo { display: grid; grid-template-columns: auto minmax(0, 220px); gap: 14px; align-items: center; margin-top: 18px; }
.pv-completo span:first-child { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }

.pv-bloque { margin-top: 40px; margin-bottom: 18px; }
.pv-bloque:first-of-type { margin-top: 8px; }
.pv-ficha .nv-spec-row { grid-template-columns: minmax(120px, 190px) minmax(0, 1fr); gap: 24px; padding: 20px 0; }
.pv-ficha .nv-spec-val { font-size: 0.9375rem; }
.pv-ficha .nv-spec-val > * + * { margin-top: 12px; }
.pv-ficha .nv-spec-val ul li { position: relative; padding-left: 18px; margin: 5px 0; }
.pv-ficha .nv-spec-val ul li::before { content: "–"; position: absolute; left: 0; color: var(--nv-accent); }
.pv-ficha h4 { margin: 0 0 6px; font-family: var(--nv-mono); font-size: 0.6875rem; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-dos-col { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.pv-tres-col { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.pv-par { display: grid; grid-template-columns: 9rem 1fr; gap: 4px 16px; padding: 3px 0; font-size: 0.9rem; }
.pv-par dt { color: var(--nv-fg-mute); }
.pv-par dd { margin: 0; }
.pv-meta { margin-top: 24px; font-size: 0.75rem; line-height: 1.6; color: var(--nv-fg-mute); }
.pv-aviso { padding: 12px 16px; border-left: 2px solid var(--nv-accent); background: var(--nv-surface-alt); font-size: 0.875rem; color: var(--nv-fg-soft); }
.pv-nota { font-size: 0.8125rem; color: var(--nv-fg-mute); }
.pv-ficha code { padding: 1px 6px; background: var(--nv-surface-alt); font-family: var(--nv-mono); font-size: 0.82em; }
.pv-iface li { padding: 7px 0 !important; border-bottom: 1px dashed var(--nv-line); }
.pv-iface li::before { display: none; }
.pv-iface li { padding-left: 0 !important; }
.pv-rel { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 4px 20px; }
.pv-rel a { color: var(--nv-accent); }
.pv-rel a:hover { text-decoration: underline; }

/* ---------- etiquetas ---------- */
.pv-chip {
    display: inline-flex; align-items: center; padding: 4px 11px; border: 1px solid var(--nv-line); border-radius: 999px;
    font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--nv-fg-soft); white-space: nowrap;
}
.pv-chip--priv { color: var(--pv-err); border-color: var(--pv-err); }
.pv-chip--idi { color: var(--pv-info); border-color: var(--pv-info); }
.pv-chip--req { color: var(--nv-fg); border-color: var(--nv-fg-soft); }
.pv-chip--n-N1 { background: var(--pv-v1-bg); color: var(--pv-v1-fg); border-color: transparent; }
.pv-chip--n-N2 { background: var(--pv-v2-bg); color: var(--pv-v2-fg); border-color: transparent; }
.pv-chip--n-N3 { background: var(--pv-v3-bg); color: var(--pv-v3-fg); border-color: transparent; }
.pv-chip--grande { padding: 7px 18px; font-size: 1rem; font-weight: 600; letter-spacing: 0.04em; }

/* ---------- compatibilidad y huecos ---------- */
.pv-nivel { display: flex; align-items: center; gap: 18px; margin-bottom: 18px; }
.pv-mini { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 18px 0 8px; }
.pv-tile { padding: 12px 16px; border: 1px solid var(--nv-line); background: none; text-align: left; cursor: pointer; color: var(--nv-fg); transition: border-color 0.2s ease, background 0.2s ease; }
.pv-tile:hover, .pv-tile[aria-pressed="true"] { border-color: var(--nv-accent); background: var(--nv-surface-alt); }
.pv-tile strong { display: block; font-size: 1.4rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.pv-tile span { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-tile--n1 { border-left: 3px solid var(--pv-v1-fg); }
.pv-tile--n2 { border-left: 3px solid var(--pv-v2-bg); }
.pv-tile--n3 { border-left: 3px solid var(--pv-v3-bg); }
.pv-pares { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 6px; }
.pv-par-btn {
    width: 100%; display: flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--nv-line); font-size: 0.875rem;
    background: none; text-align: left; cursor: pointer; color: var(--nv-fg); transition: border-color 0.2s ease, background 0.2s ease;
}
.pv-par-btn:hover { border-color: var(--nv-accent); background: var(--nv-surface-alt); }

/* ---------- acceso ---------- */
/* `body.nv` fija el fondo con más especificidad que una sola clase: el acceso es siempre negro. */
body.nv.pv-entrada {
    position: relative; min-height: 100vh; display: grid; place-items: center; padding: 24px;
    background: var(--nv-ink); overflow: hidden;
}
/* El aro de los anillos: dieciséis trazos casi coincidentes que, apilados, se leen como uno solo. */
.pv-aro {
    position: absolute; left: 50%; top: 50%; width: min(118vmin, 880px); height: auto; aspect-ratio: 1;
    transform: translate(-50%, -50%); fill: none; stroke: #2dd4bf; stroke-width: 1; stroke-opacity: 0.2;
    filter: drop-shadow(0 0 16px rgba(45, 212, 191, 0.55)); pointer-events: none;
    animation: pv-latido 8s ease-in-out infinite;
}
@keyframes pv-latido { 50% { opacity: 0.62; } }
.pv-caja {
    position: relative; z-index: 1; width: min(460px, 100%); padding: 36px 34px 26px;
    background: var(--nv-surface); color: var(--nv-fg); border: 1px solid var(--nv-line); border-radius: 6px;
    box-shadow: 0 50px 100px -50px rgba(0, 0, 0, 0.95);
}
.pv-marca { display: flex; margin-bottom: 34px; }
.pv-caja .nv-eyebrow { margin-bottom: 14px; }
.pv-intro { margin-top: 12px; color: var(--nv-fg-soft); font-size: 0.9375rem; }
.pv-pasos { display: flex; gap: 10px; margin: 26px 0 24px; }
.pv-pasos li { flex: 1; padding-top: 9px; border-top: 2px solid var(--nv-line); counter-increment: p;
    font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-pasos { counter-reset: p; list-style: none; padding: 0; }
.pv-pasos li::before { content: counter(p) ". "; }
.pv-pasos li[aria-current] { color: var(--nv-fg); border-top-color: var(--nv-accent); }
.pv-secreto { padding: 14px; background: var(--nv-surface-alt); border-radius: 4px; text-align: center; word-break: break-all;
    font: 600 1.05rem var(--nv-mono); letter-spacing: 0.08em; }
.pv-detalle summary { cursor: pointer; font-size: 0.8125rem; color: var(--nv-fg-mute); }
.pv-uri { margin-top: 8px; font: 0.72rem var(--nv-mono); word-break: break-all; color: var(--nv-fg-soft); }
.pv-fila { display: flex; flex-wrap: wrap; gap: 10px; }
.pv-error { margin-top: 16px; font-size: 0.875rem; color: var(--pv-err); }
.pv-pie-acceso { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 30px; padding-top: 18px;
    border-top: 1px solid var(--nv-line); font-size: 0.8125rem; color: var(--nv-fg-mute); }
.pv-pie-acceso a:hover { color: var(--nv-accent); }
.pv-caja .nv-form { margin-top: 0; }

/* ---------- administración, cuenta y edición ---------- */
.pv-aviso--error { border-left-color: var(--pv-err); color: var(--nv-fg); }
.pv-aviso--ok { border-left-color: var(--nv-accent); }
.pv-estado { margin: 14px 0; }
.pv-fila--barra { margin: 22px 0 18px; align-items: center; }
a.pv-btn { text-decoration: none; }

.pv-chip--valida { color: var(--nv-accent); border-color: var(--nv-accent); }
.pv-chip--caducada { color: var(--pv-warn); border-color: var(--pv-warn); }

/* formularios de administración */
.pv-form-admin { display: grid; gap: 18px; max-width: 760px; margin: 0 0 28px; padding: 22px 24px; border: 1px solid var(--nv-line); background: var(--nv-surface-alt); }
.pv-form-fila { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.pv-orgs, .pv-grupo { margin: 0; padding: 0; border: 0; min-width: 0; }
.pv-orgs legend { padding: 0; margin-bottom: 10px; font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-check { display: inline-flex; align-items: center; gap: 8px; margin: 0 18px 8px 0; font-size: 0.9rem; cursor: pointer; }
.pv-check input { width: 16px; height: 16px; accent-color: var(--nv-accent); }
.pv-grupo { display: grid; gap: 18px; padding: 24px 0; border-top: 1px solid var(--nv-line); }
.pv-grupo legend { float: left; width: 100%; padding: 0; margin-bottom: 18px; }
.pv-grupo .nv-field textarea { min-height: 80px; resize: vertical; }
.pv-editor { max-width: 820px; }
.pv-editor .pv-sub { margin-bottom: 8px; }

/* diálogos */
.pv-dialogo { width: min(560px, calc(100vw - 32px)); padding: 0; border: 1px solid var(--nv-line); background: var(--nv-surface); color: var(--nv-fg); }
.pv-dialogo::backdrop { background: rgba(0, 0, 0, 0.62); }
.pv-dialogo .pv-form-admin { margin: 0; border: 0; max-width: none; background: none; }

/* tablas (usuarios y actividad) */
.pv-tabla-caja { overflow-x: auto; border-top: 1px solid var(--nv-line); }
.pv-tabla { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
.pv-tabla th { padding: 12px 14px 12px 0; text-align: left; font-family: var(--nv-mono); font-size: 0.6875rem; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-tabla td { padding: 14px 14px 14px 0; border-top: 1px solid var(--nv-line); vertical-align: top; }
.pv-tabla td strong { display: block; font-weight: 600; }
.pv-tabla td small { display: block; font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.06em; color: var(--nv-fg-mute); }
.pv-acciones-fila { display: flex; flex-wrap: wrap; gap: 6px; }
.pv-inactiva td { opacity: 0.55; }
.pv-inactiva td.pv-acciones-fila { opacity: 1; }
.pv-grave td:first-child { box-shadow: inset 2px 0 0 var(--pv-err); padding-left: 10px; }

/* credenciales de un solo uso */
.pv-secretos { margin: 0 0 28px; padding: 26px 28px; border: 1px solid var(--nv-accent); background: var(--nv-surface-alt); }
.pv-secretos h3 { margin: 4px 0 10px; font-size: 1.25rem; }
.pv-secretos .nv-eyebrow { margin-bottom: 10px; color: var(--nv-accent); }
.pv-secreto-linea { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; margin: 14px 0; }
.pv-secreto-etq { min-width: 90px; font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-secreto-valor { padding: 6px 12px; background: var(--nv-surface); border: 1px solid var(--nv-line); font-family: var(--nv-mono); font-size: 0.95rem; word-break: break-all; }
.pv-secreto-grande { font-size: 1.15rem; font-weight: 600; letter-spacing: 0.08em; }
.pv-codigos { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; margin: 12px 0 14px; }
.pv-codigos li { padding: 0; }
.pv-codigos code { display: block; padding: 6px 10px; background: var(--nv-surface); border: 1px solid var(--nv-line); font-family: var(--nv-mono); font-size: 0.85rem; }

/* alta del 2FA: el QR siempre sobre blanco, para que cualquier cámara lo lea, también en tema oscuro */
.pv-qr { width: min(260px, 100%); margin: 18px auto; padding: 8px; background: #fff; border: 1px solid var(--nv-line); }
.pv-qr svg { display: block; width: 100%; height: auto; }
.pv-detalle { margin: 6px 0 18px; }

/* validación e historial */
.pv-validacion { margin: 0 0 26px; padding: 20px 24px; border: 1px solid var(--nv-line); }
.pv-validacion .nv-eyebrow { margin-bottom: 10px; }
.pv-validacion-lista li { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 10px 0; border-top: 1px solid var(--nv-line); }
.pv-validacion-lista li strong { min-width: 100px; }
.pv-validacion-lista .pv-acciones-fila { margin-left: auto; }
.pv-zona-historial:not(:empty) { margin: 0 0 26px; padding: 20px 24px; border: 1px solid var(--nv-line); }
.pv-historial li { padding: 14px 0; border-top: 1px solid var(--nv-line); font-size: 0.875rem; }
.pv-cambio { display: grid; grid-template-columns: 150px minmax(0, 1fr) minmax(0, 1fr); gap: 4px 14px; margin: 8px 0 0; }
.pv-cambio-campo { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--nv-fg-mute); }
.pv-cambio-antes { color: var(--nv-fg-mute); text-decoration: line-through; }
.pv-cambio-despues { color: var(--nv-fg); }

/* ---------- adaptación ---------- */
@media (max-width: 1100px) {
    .pv-vista--cat { grid-template-columns: 230px minmax(0, 1fr); }
    .pv-dos { grid-template-columns: minmax(250px, 300px) minmax(0, 1fr); }
    #ficha.pv-ficha { padding: 24px 26px 48px; }
    .pv-tres-col { grid-template-columns: 1fr; }
    .pv-panel--cols { grid-template-columns: 1fr 1fr; }
    .pv-panel--cols .pv-col:last-child { display: none; }
}
/* Con las pestañas de administración son seis: la barra pasa a dos filas antes que la de la web. */
.pv-nav .nv-brand-name, .pv-nav .nv-nav-sub, .pv-tabs button { white-space: nowrap; }
@media (max-width: 1180px) {
    .pv-app .pv-nav.nv-nav, .pv-nav.nv-nav { height: auto; flex-wrap: wrap; gap: 10px 18px; padding-block: 12px; }
    .pv-tabs { order: 3; width: 100%; gap: 22px; overflow-x: auto; }
}
@media (max-width: 900px) {
    .pv-quien { display: none; }
    .nv-nav-sub { display: none; }
}
@media (max-width: 800px) {
    .pv-form-fila { grid-template-columns: 1fr; }
    .pv-cambio { grid-template-columns: 1fr; }
    .pv-tabla thead { display: none; }
    .pv-tabla, .pv-tabla tbody, .pv-tabla tr, .pv-tabla td { display: block; width: 100%; }
    .pv-tabla tr { padding: 14px 0; border-top: 1px solid var(--nv-line); }
    .pv-tabla td { padding: 4px 0; border: 0; }
    .pv-tabla td::before { content: attr(data-etq); display: block; font-family: var(--nv-mono); font-size: 0.625rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nv-fg-mute); }
    .pv-tabla td[data-etq="Cuenta"]::before, .pv-tabla td.pv-acciones-fila::before { display: none; }
    .pv-dos.con-ficha .pv-lista { display: none; }
    .pv-dos:not(.con-ficha) .pv-ficha { display: none; }
    .pv-solo-movil { display: inline-flex; margin-right: auto; }
    .pv-dos-col, .pv-par { grid-template-columns: 1fr; }
    .pv-ficha .nv-spec-row { grid-template-columns: 1fr; gap: 8px; }
    .pv-mini { grid-template-columns: 1fr; }
}
/* Pantallas estrechas: la página vuelve a desplazarse entera y las columnas se apilan. */
@media (max-width: 900px) {
    body.nv.pv-app { height: auto; display: block; overflow: visible; }
    .pv-app .pv-nav.nv-nav { position: sticky; }
    .pv-vista, .pv-vista--cat, .pv-dos { display: block; height: auto; }
    .pv-vista--scroll { overflow: visible; padding: 24px var(--nv-gutter) 40px; }
    .pv-lat { overflow: visible; border-right: 0; border-bottom: 1px solid var(--nv-line); padding: 22px var(--nv-gutter) 16px; }
    .pv-resumen { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .pv-lista { overflow: visible; border-right: 0; }
    #ficha.pv-ficha, .pv-panel { overflow: visible; padding: 24px var(--nv-gutter) 40px; }
    .pv-panel--cols { display: block; padding: 0; }
    .pv-panel--cols .pv-col:last-child { display: block; }
    .pv-col { overflow: visible; border-right: 0; border-bottom: 1px solid var(--nv-line); }
    .pv-col-t { position: static; margin: 0 0 8px; padding: 0; }
    .pv-pie { margin-top: 12px; }
}
@media (max-width: 520px) {
    .pv-resumen { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .pv-caja { padding: 28px 22px 22px; }
}
@media (prefers-reduced-motion: reduce) {
    .pv-aro { animation: none; }
    .pv-btn:hover { transform: none; }
}
/* En el editor, guardar y cancelar quedan a la vista mientras se recorre el formulario. */
.pv-editor > .pv-fila:last-child { position: sticky; bottom: -56px; z-index: 2; margin: 0 -40px -56px; padding: 14px 40px; background: var(--nv-surface); border-top: 1px solid var(--nv-line); }
@media (max-width: 900px) { .pv-editor > .pv-fila:last-child { position: static; margin: 0; padding: 0; border: 0; } }

/* ---------- organizaciones (administración) ---------- */
.pv-orgs-lista { margin: 0 0 18px; border-top: 1px solid var(--nv-line); }
.pv-org-item {
    position: relative; width: 100%; display: flex; align-items: center; gap: 8px; padding: 10px 6px 10px 12px; border: 0;
    border-bottom: 1px solid var(--nv-line); background: none; text-align: left; cursor: pointer; color: var(--nv-fg); font-size: 0.875rem;
}
.pv-org-item:hover, .pv-org-item[aria-current] { background: var(--nv-surface-alt); }
.pv-org-item[aria-current]::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--nv-accent); }
.pv-org-item[aria-current] .pv-org-nombre { font-weight: 600; }
.pv-org-nombre { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.pv-org-n { font-family: var(--nv-mono); font-size: 0.75rem; color: var(--nv-fg-mute); font-variant-numeric: tabular-nums; }
.pv-org-item .pv-chip { padding: 1px 7px; font-size: 0.5625rem; }
.pv-form-org { display: grid; gap: 8px; margin-top: auto; padding-top: 14px; border-top: 1px solid var(--nv-line); }
.pv-form-org .nv-eyebrow { margin-bottom: 4px; }
.pv-form-org input, .pv-form-org textarea, #org-editar-desc, #org-buscar, #org-destino {
    width: 100%; padding: 9px 12px; border: 1px solid var(--nv-line); border-radius: 4px; background: var(--nv-surface); font-size: 0.875rem; color: var(--nv-fg);
}
.pv-form-org textarea, #org-editar-desc { resize: vertical; }
.pv-form-org input:focus, .pv-form-org textarea:focus, #org-editar-desc:focus, #org-buscar:focus, #org-destino:focus { border-color: var(--nv-accent); outline: none; }
.pv-form-org .pv-btn { justify-self: start; }
#org-editar-desc { flex: 1 1 320px; width: auto; }
.pv-btn--peligro { color: var(--pv-err); border-color: var(--pv-err); }
.pv-btn--peligro:hover { background: var(--pv-err); color: var(--nv-surface); border-color: var(--pv-err); }
.pv-herr-org { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; margin: 14px 0 10px; }
.pv-herr-org #org-buscar { flex: 1 1 240px; width: auto; }
.pv-barra-org {
    display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; padding: 10px 0; border-top: 1px solid var(--nv-line); border-bottom: 1px solid var(--nv-line);
}
.pv-barra-org #org-destino { width: auto; min-width: 190px; }
#org-barra .pv-aviso { margin: 12px 0; }
#org-barra .pv-aviso p + p { margin-top: 6px; }
#org-barra .pv-fila { margin-top: 10px; }
.pv-prods-org li { margin: 0; }
.pv-prod-org { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 9px 4px; border-bottom: 1px solid var(--nv-line); }
.pv-prod-org-in { display: flex; align-items: center; gap: 12px; min-width: 0; cursor: pointer; }
.pv-prod-org-in input { width: 16px; height: 16px; flex: none; accent-color: var(--nv-accent); }
.pv-prod-org-nombre { display: grid; min-width: 0; }
.pv-prod-org-nombre strong { font-weight: 600; overflow-wrap: anywhere; }
.pv-prod-org-nombre small, .pv-prod-org-dest small { font-family: var(--nv-mono); font-size: 0.6875rem; letter-spacing: 0.04em; color: var(--nv-fg-mute); }
.pv-prod-org-dest { display: flex; align-items: center; gap: 10px; flex: none; }
@media (max-width: 900px) { .pv-prod-org { align-items: flex-start; flex-direction: column; gap: 6px; } }

/* Organizaciones: título, buscador y barra de mover quedan fijos; solo se desplaza la lista de productos. */
#org-panel { display: flex; flex-direction: column; overflow: hidden; }
#org-panel > * { flex: none; }
#org-panel > #org-lista { flex: 1 1 auto; min-height: 120px; overflow-y: auto; }
@media (max-width: 900px) {
    #org-panel { display: block; overflow: visible; }
    #org-panel > #org-lista { overflow: visible; }
}
