/* ═══════════════════════════════════════
   ▓ COMPONENTE · PanelListaVisor — gemelo vanilla ▓
   v1.0 · 2026-10-06. Ficha: `design-system/COMPONENTE_PANEL_LISTA_VISOR.md`
   Cosechado del patrón de pantalla de detalle (B4.e · PD-22), donde vivía como reglas del patrón: «No puede haber
   ninguna sección, patrón, pantalla o grupo de componentes sin que sus componentes estén canonizados en lo individual»
   (Ricardo, 2026-10-06; GOBIERNO.md §1-ter-bis).

   El PANEL «LISTA + VISOR»: a la izquierda una columna de lista (420 px) que se desplaza por dentro y a la derecha el visor
   de lo que la lista elige, A SANGRE. Dos columnas, una divisoria hairline entre ellas, y cómo se acomodan por dentro las tres
   piezas que aloja (CajonFila, Tabla en lectura que elige, DocViewer embebido). NO dibuja ninguna de ellas: cada una trae su hoja.
   Con cero elementos en la lista el visor no se monta y el panel queda en UNA columna.

   DECISION-FUENTE: Ricardo, 2026-10-02 — «aprobados» (visor al lado de la lista) · 2026-10-05 — «la decisión es sí, a sangre, pero los
   botones de descarga y de abrir en otra ventana van dentro del encabezado oscuro del visor» · 2026-10-05 — «b» (la sangría de lo desplegado).

   REQUISITOS DEL ANFITRIÓN:
     1. Los tokens del canon (`colors_and_type.css`) y las hojas de las piezas que aloja (cajon-lateral, tabla, visor-documento), ANTES de ésta.
     2. `box-sizing: border-box`.
     3. Un contenedor con alto definido y en columna (en el patrón de detalle, el cuerpo de la tarjeta de pestañas): el panel lo llena.
   ═══════════════════════════════════════ */

/* Hereda M-21 ENTERA: sin alto mínimo en ningún nivel; el panel llena el alto que el cuerpo tiene y la lista y el lienzo del visor se
   desplazan CADA UNO por dentro. La columna de lista mide 420 como variable PROPIA: --w-cajon es del panel lateral y prestarlo
   cambia de semántica. Ni un solo min-height con valor (H12) ni margin-top:-1: el hairline lo pinta la banda. */
.exds-pd-panel-lv { --pd-lv-lista: 420px; flex: 1 1 auto; min-width: 0; min-height: 0; display: grid; grid-template-columns: var(--pd-lv-lista) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); align-items: stretch; }
.exds-pd-panel-lv-lista { min-width: 0; min-height: 0; overflow-y: auto; border-right: 1px solid var(--color-border-subtle, #E5E7EB); }
/* EL VISOR VA A SANGRE: la columna no pone relleno ni el visor radio; toca la banda de pestañas, el borde de la lista y los bordes de la tarjeta.
   Las acciones del archivo viven en la barra oscura del propio visor (COMPONENTE_VISOR_DOCUMENTO.md). */
.exds-pd-panel-lv-visor { min-width: 0; min-height: 0; display: flex; flex-direction: column; padding: 0; }
.exds-pd-panel-lv-visor > .exds-dv { flex: 1 1 auto; min-height: 0; }
/* Con cero elementos el visor NO se monta y queda UN solo vacío: la lista, a todo el ancho y sin divisoria. */
.exds-pd-panel-lv[data-sin-visor="true"] { grid-template-columns: minmax(0, 1fr); }
.exds-pd-panel-lv[data-sin-visor="true"] > .exds-pd-panel-lv-lista { border-right: 0; }

/* ── Cómo conviven las piezas que la columna de lista aloja ──────────────────────────────────────────────────────────────────────────
   Ninguna pieza canónica se deforma: sólo se resuelve el cruce en el sitio donde se montan juntas. */
/* La Tabla de archivos va A SANGRE dentro del tipo abierto: el desplegable de la fila trae relleno propio (pensado para texto) y aquí lo cede. */
.exds-pd-panel-lv-lista .exds-cajon-desp-c { padding: 0; }
/* LA SANGRÍA DE LO DESPLEGADO: el contenido que se abre bajo un rótulo arranca UN PASO más adentro que el rótulo (lógica de viñetas).
   DECISION-FUENTE: Ricardo, 2026-10-05 — «b». Rótulo a 20 (--space-5); el texto de la primera celda de cada archivo a 32 (--space-8 = 20 + 12);
   relleno derecho 20. El fondo de la fila elegida o en hover sigue de borde a borde: sólo se mueve el texto, por eso la sangría va en la CELDA y
   no en el contenedor. Es un RECURSO, no una regla general (Ricardo, 2026-10-06): el mismo que usa el cajón lista (LAT-C9), para filas apiladas sólo separadas por una línea fina; ver design-system/README.md, Reglas duras 16. Aquí se aplica sobre la Tabla de archivos. */
.exds-pd-panel-lv-lista .exds-cajon-desp-c .exds-tr > .exds-td:first-child { padding-left: var(--space-8, 32px); }
.exds-pd-panel-lv-lista .exds-cajon-desp-c .exds-tr > .exds-td:last-child { padding-right: var(--space-5, 20px); }
/* UNA SOLA hairline entre el último archivo de un tipo abierto y la fila que sigue. Medido 2026-10-05: el último renglón de la Tabla trae su
   border-bottom de 1 px (tabla.css, lectura a sangre) y la CajonFila siguiente trae su border-top de 1 px (cajon-lateral.css): dos líneas
   apiladas = 2 px, la única divisoria gruesa de la lista. La divisoria entre tipos es la de la fila que sigue; el último renglón cede la suya. */
/* EXCEPCIÓN (v1.1, 2026-10-07 · PD-42): si la tabla de archivos va SEGUIDA de la tabla de la fila de salto del grupo de acceso directo, su último renglón CONSERVA la hairline:
   es la línea divisoria a sangre que separa el último archivo de «Ver en <módulo>». DECISION-FUENTE: Ricardo, 2026-10-07 — «A pero integra linea divisoria a sangre». La fila de
   salto es la última del grupo y cede la suya, como cualquier último renglón. */
.exds-pd-panel-lv-lista .exds-cajon-desp-c .exds-tabla:not(:has(+ .exds-tabla)) > .exds-tr:last-child { border-bottom: 0; }
/* La segunda línea de la celda de dos líneas nunca pesa más que la primera: la celda de una Tabla en lectura va a 12 y la hoja de la lista pinta su
   segunda línea a 13; dentro de este panel baja un peldaño del canon (--fs-eyebrow, 11). */
.exds-pd-panel-lv-lista .exds-tabla .exds-pl-dos-b { font-size: var(--fs-eyebrow, 11px); }

/* Primera carga: el panel se monta como esqueleto y no hay medida conocida, así que llena el techo (caso de reserva de PD-20: 100vh es mayor que
   cualquier ventana y la tarjeta lo acota; M-21). Las barras fantasma las pone quien monta el esqueleto; esta hoja sólo reserva el alto. */
.exds-pd-panel-lv[data-carga="true"] { flex: 1 1 100vh; }
