/* ═══════════════════════════════════════════════════════════════════════════════
   acordeon-faq.css — GEMELO VANILLA del Acordeón, modo FAQ (2026-08-20)

   ⛔ POR QUÉ NACE, y no es «se quedó atrasado». Este gemelo **nunca ha existido**. La
   ficha lo declaraba sin rodeos: *«Sin gemelo vanilla: el modo FAQ no tiene espejo en
   `patrones/`»* — el que hay (`acordeon-guiado/`) es el OTRO modo. Así que esto no es
   poner al día una copia: es construir la copia que faltaba.

   Y hacía falta antes de tocar las apps: **el gemelo es lo que copian las apps**, que son
   HTML y CSS a secas. Sin él, homologar el acordeón en producción sería copiar del kit
   React traduciendo a mano — y traducir a mano es exactamente como nace un Frankenstein.

   FUENTE ÚNICA: `catalogo-cd/components/Acordeon.jsx`. Cada regla de aquí es la MISMA de
   allí, con el mismo selector, no uno equivalente. Si difieren, manda el kit.

   ⛔ LA DECISIÓN QUE DA FORMA A ESTA PIEZA (Ricardo, 2026-08-19): el modo FAQ **perdió la
   caja** — sin borde y sin sombra— y **sustituye** al anterior, no es una variante.
   Vive dentro de un cajón lateral, que es blanco: con borde *y* fondo blanco la fila tenía
   dos señales diciendo lo mismo, *y cuando dos señales dicen lo mismo, la que sobra no se
   lee como refuerzo: se lee como ruido.* Eso es lo que él llamó «plano».

   Los TRES estados, definitivos: reposo **transparente** · hover **gris** · abierto
   **gris** — y el gris es `--color-bg-subtle`, el ORIGINAL, no el oscuro de la Tabla.

   ⛔ Y LA CONSECUENCIA ES DELIBERADA: en reposo la fila **no tiene forma visible**. La
   esquina de 16 px sólo aparece al pasar por encima o al abrir. En reposo esto es una
   LISTA DE TÍTULOS; la caja aparece cuando la tocas. *La forma no se retiró: se volvió una
   respuesta.*

   ⛔ Y AL DÍA SIGUIENTE LA DECISIÓN CRECIÓ UNA CONDICIÓN — `data-marco` (Ricardo, 2026-08-20):
   *«en el caso específico del cajón, sí recupera su borde tanto en estado reposo como en
   estado desplegado. Esto porque permite separar claramente cada sección entre sí. Si no
   hubiera bordes, se vería muy plano.»*

   **No deroga lo de arriba: lo acota.** Aquello se decidió mirando el acordeón SUELTO, y ahí
   sigue siendo cierto. Con VARIAS SECCIONES APILADAS dentro de un cajón, en cambio, sin borde
   no se separan unas de otras — y él volvió a usar la palabra «plano» para el defecto
   contrario. *La misma pieza en dos sitios distintos tiene dos trabajos distintos.*
   Medido en navegador, en un cajón de 420 px con las secciones apiladas: **antes**, en reposo,
   lo que separaba una sección de la siguiente era **nada** —12 px de blanco sobre blanco,
   1,000:1—. **Después:** 1 px `#E5E7EB` → **1,238:1** en reposo, y 1 px `#D1D5DB` → **1,474:1**
   en la abierta, que además se eleva. La cifra es baja a propósito: es el borde sutil del
   canon, y su trabajo aquí es separar, no llamar la atención.

   **Sin `data-marco="ninguno"` esta hoja no dibuja el modo FAQ que conocemos**: el atributo
   es el estado por defecto de la pieza (`marco={false}` en el kit), no una opción rara. Se
   escribe en el contenedor `.exds-acc`, junto a `data-bleed`.
   ═══════════════════════════════════════════════════════════════════════════════ */

.exds-acc { display: flex; flex-direction: column; gap: 12px; font-family: var(--font-sans); }

/* LA TARJETA · SU MARCO. Estas dos reglas no estaban aquí: el gemelo nació cuando el modo FAQ
   no tenía marco en ningún caso, así que la base nunca hizo falta. Con `marco` sí — sin ellas,
   un acordeón marcado no pintaría nada y el prop sería un atributo mudo. *Un gemelo que sólo
   copia las reglas que su único caso usaba deja de servir al segundo caso.*

   ✅ **CERRADO 2026-08-23** (`gate_gemelos_conducta.js`): sube a `var(--shadow-card)`, como
   promete el párrafo de abajo — en los DOS gemelos a la vez (aquí y en `acordeon-guiado.css`).
   **El valor pintado NO cambia:** en el canon `--shadow-card: var(--shadow-none)`, así que
   `none` y `var(--shadow-card)` pintan exactamente lo mismo; sólo se cierra la divergencia de
   TEXTO entre kit y gemelos. Queda el párrafo de abajo como registro de por qué estaba así. */
   /* ⚠ Lo que decía esta nota mientras estuvo abierta: el kit pone `var(--shadow-card)` (el
   canon prohíbe teclear valores) y aquí iba `none`, que era lo que decían **el gemelo hermano**
   (`acordeon-guiado.css`) **y la copia de la app** (`app/css/cotizador.css`) — la MISMA regla,
   el MISMO selector, y no podían decir dos cosas distintas según el archivo.

   La diferencia kit↔gemelos era **anterior a este cambio** —`gate_gemelos_conducta` ya marcaba
   `acordeon-guiado` en rojo antes de tocar nada— y no se heredó a un segundo archivo por
   inercia: se arregló en los dos gemelos a la vez el día que se cerró ese gate, subiendo al
   valor del kit. *Copiar la desviación del vecino sin nombrarla es como nacen las que ya nadie
   sabe de dónde vienen; nombrarla deja el arreglo a un solo cambio de distancia.* */
.exds-acc-card { border: 1px solid var(--color-border-subtle); border-radius: var(--radius-lg);
  background: var(--color-surface); overflow: hidden; box-shadow: var(--shadow-card);
  transition: border-color var(--motion-base, 250ms) var(--ease-default), box-shadow var(--motion-base, 250ms) var(--ease-default); }
.exds-acc-card[data-open="true"] { border-color: var(--color-border-default); box-shadow: var(--shadow-md); }

/* SIN MARCO. En modo FAQ suelto la tarjeta no dibuja nada: ni borde, ni sombra, ni fondo. El
   selector conserva el `:not([data-bleed])` del kit —y no se simplifica— porque el mismo
   archivo sirve a los dos modos allí, y un gemelo que «limpia» el selector deja de poder
   compararse con su fuente. *Un gemelo se parece a su fuente también en lo que le sobra.* */
.exds-acc[data-marco="ninguno"]:not([data-bleed="true"]) .exds-acc-card { border: 0; box-shadow: none; background: none; }
.exds-acc[data-marco="ninguno"]:not([data-bleed="true"]) .exds-acc-card[data-open="true"] { border: 0; box-shadow: none; }

/* LA FILA. En modo FAQ es ella misma el <button>. Las medidas NO cambian entre modos. */
.exds-acc-h {
  display: flex; align-items: center; gap: 12px; width: 100%;
  padding: 16px 20px; border: none; background: none; text-align: left;
  font: 500 var(--fs-body, 14px) var(--font-sans); color: var(--fg1);
  box-sizing: border-box;
}
.exds-acc:not([data-bleed="true"]) .exds-acc-h { background: none; }
.exds-acc-h[data-modo="faq"] { cursor: pointer; transition: background var(--motion-fast, 120ms) var(--ease-default); }
.exds-acc-h[data-modo="faq"]:focus-visible { outline: 2px solid var(--color-border-focus); outline-offset: -2px; }

/* El hover SÓLO en la cerrada: una fila abierta ya está gris, y volver a pintarla al pasar
   el ratón haría que el hover no dijera nada. */
.exds-acc:not([data-bleed="true"]) .exds-acc-card:not([data-open="true"]) .exds-acc-h:hover { background: var(--color-bg-subtle); }
.exds-acc:not([data-bleed="true"]) .exds-acc-card[data-open="true"] .exds-acc-h { background: var(--color-bg-subtle); transition: background var(--motion-base) var(--ease-default); }

/* EL CUERPO, en blanco y con contorno: es lo ÚNICO que necesita separarse del cajón, que
   también es blanco. La esquina inferior sigue el radio de la card.
   ⛔ VA COLGADO DE `data-marco="ninguno"`, y no puede ir suelto: con marco la tarjeta ya cierra
   la caja por los cuatro lados, así que este contorno se le sumaría y dibujaría dos líneas
   paralelas a un píxel. Con marco el cuerpo tampoco necesita fondo propio —la tarjeta ya es
   `--color-surface`— y lo que lo separa de la cabecera es el gris de ésta.
   *El contorno del cuerpo nunca fue una decoración del cuerpo: era el sustituto del marco que
   no había.* */
/* ⛔ 2026-09-01 · EL `:not([data-densidad="compacta"])` NO ES DECORACIÓN: sin él, esta
   regla le ganaba por especificidad a la de modo compacto y le devolvía al cuerpo un
   contorno y un radio de 16 que ese modo retira a propósito.
   Lo reportó Ricardo mirando el cajón de ayuda: «tiene sus secciones cuadradas, pero
   también con un borde redondo». Medido antes de tocarlo: el cuerpo abierto salía con
   `border-radius: 0 0 16px 16px` y borde de 1px mientras sus vecinos eran cuadrados y
   sin borde — porque el cajón de ayuda monta el acordeón con LOS DOS modos a la vez
   (`data-marco="ninguno" data-densidad="compacta"`, help-center.js).
   Esta regla pesa (0,6,0) y la de compacta (0,3,0): ganaba la de aquí sin que nadie
   lo decidiera. *Dos modos escritos por separado no chocan el día que se escriben:
   chocan el día que alguien los monta juntos, y para entonces el comentario de cada
   uno sigue diciendo la verdad de su mitad.*
   El razonamiento de esta regla —«el contorno del cuerpo era el sustituto del marco
   que no había»— sigue siendo correcto en su modo: sin marco Y con las filas en su
   caja, el cuerpo necesita un borde del que colgarse. En compacto NO, porque las filas
   ya van a sangre y la estructura la dan los filetes entre secciones. */
.exds-acc[data-marco="ninguno"]:not([data-bleed="true"]):not([data-densidad="compacta"]) .exds-acc-card[data-open="true"] .exds-acc-content {
  background: var(--color-surface); border: 1px solid var(--color-border-subtle); border-top: 0;
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
}

/* LA APERTURA · `grid-template-rows` de 0fr a 1fr. No es `height:auto` (que no anima) ni
   `max-height` con un número inventado (que corta el contenido largo o retrasa el cierre
   del corto). El canon prohíbe animar `height` — ver COMPONENTE_MOVIMIENTO.md. */
/* ⛔ Y EL CUERPO CERRADO SE OCULTA DE VERDAD · `visibility` (2026-08-30).
   El defecto que corrige, MEDIDO en navegador con tabulaciones reales: con los cuatro
   paneles CERRADOS, el Tab hacía **8 paradas** — 4 cabeceras y **4 botones que viven
   dentro de un cuerpo de 0 px de alto**. En el cajón de Ayuda eran ONCE «Ver el
   artículo» invisibles; en el cotizador había 4 más por lo mismo.

   POR QUÉ NO BASTABA LO QUE HABÍA. Las tres señales de «esto está cerrado» que ya
   estaban —`grid-template-rows: 0fr`, el `overflow: hidden` del inner y el `opacity: 0`
   del contenido— son las tres VISUALES, y **ninguna de las tres saca nada del orden de
   tabulación**. Un control de alto cero, recortado y transparente sigue siendo un
   control: recibe el foco, y el usuario de teclado se queda mirando una página donde
   no pasa nada. *Ocultar a los ojos y ocultar al foco son dos trabajos distintos, y
   este patrón sólo había hecho el primero.*

   POR QUÉ AQUÍ Y NO EN LA PANTALLA QUE LO SUFRIÓ: el defecto no nace el día que Ayuda
   mete un botón dentro, nace el día que **el patrón invita a meterlo** — y el cuerpo de
   un acordeón invita. Arreglarlo en Ayuda cura al ejemplar y deja viva la clase; y desde
   que la regla 5-ter convirtió estos cajones en canon de TODOS los cajones, la clase
   tiene descendencia garantizada.

   POR QUÉ `visibility` Y NO `inert`. `inert` es más expresivo (dice «esto no participa»,
   no «esto no se ve») pero es un ATRIBUTO: obliga a que alguien lo escriba y lo borre en
   cada apertura, o sea **JavaScript en un patrón que hoy no necesita JavaScript para
   esto** — y en tres sitios a la vez (el kit, el gemelo vanilla y cada app que monte el
   marcado a mano). `visibility: hidden` saca del orden de tabulación con la misma
   eficacia, se hereda a todo el subárbol y viaja en la MISMA hoja que ya define el
   estado cerrado. *La regla que se aplica sola no se puede olvidar en la tercera copia.*

   ⛔ Y LA TRAMPA ESTÁ EN EL TIEMPO, no en el mecanismo: `visibility` no interpola, salta.
   Sin cuidado, al CERRAR el contenido se esfumaría de golpe en el fotograma 1 mientras
   la caja sigue plegándose 400 ms — el gesto se rompería a la mitad. Se resuelve con el
   RETARDO de la transición, que es asimétrico a propósito:
     al ABRIR   `visibility 0s linear 0s`     → visible desde el primer fotograma
     al CERRAR  `visibility 0s linear 400ms`  → se oculta cuando la caja ya terminó
   Es el mismo truco que el `transition-delay: 60ms` de abajo, en espejo.
   MOTION-ALLOW: 0s · CERO no es una velocidad y el canon no tiene (ni debe tener) un token
   para «nada»: es el mismo argumento que ya defiende el 0.01ms de la guarda de reducir-
   movimiento. Aquí `0s` es la DURACIÓN de una propiedad que no interpola (`visibility`
   conmuta, no transita); lo que hace el trabajo es el retraso, que SÍ va en token. */
.exds-acc-body { display: grid; grid-template-rows: 0fr; visibility: hidden;
  transition: grid-template-rows var(--motion-slow, 400ms) var(--ease-default),
              visibility 0s linear var(--motion-slow, 400ms); }
.exds-acc-card[data-open="true"] .exds-acc-body { grid-template-rows: 1fr; visibility: visible;
  transition: grid-template-rows var(--motion-slow, 400ms) var(--ease-default),
              visibility 0s linear 0s; }
.exds-acc-inner { overflow: hidden; min-height: 0; }

.exds-acc-content {
  padding: 14px 20px 18px; font-size: 13px; color: var(--fg3); line-height: 1.6;
  opacity: 0; transform: translateY(-4px);
  transition: opacity var(--motion-base, 250ms) var(--ease-default),
              transform var(--motion-base, 250ms) var(--ease-default);
}
/* El contenido entra 60 ms DESPUÉS de que la caja empiece a abrirse: si entrara a la vez,
   el texto se leería mientras su sitio todavía se está haciendo. */
.exds-acc-card[data-open="true"] .exds-acc-content { opacity: 1; transform: none; transition-delay: 60ms; }

/* EL TÍTULO se come el espacio; el resumen y el chevrón no se encogen.

   ⛔ CORREGIDO 2026-08-23 (`gate_gemelos_conducta.js`) — LA NOTA DE ABAJO ERA UN ERROR, no una
   decisión, y la prueba está en producción: `app/css/cotizador.css` —la hoja que de verdad
   sirve el FAQ del cotizador público— declara `.exds-acc-ttl`/`.exds-acc-sum` SUELTOS, sin el
   `:not([data-bleed="true"])`, con los MISMOS valores que el kit (`flex:none` en el título,
   `flex:1` en el resumen), letra por letra. **Y el porqué del error también estaba mal:** en
   FAQ, el título de este kit ni siquiera lleva la clase `.exds-acc-ttl` — usa un `<span
   style={{flex:...}}>` sin className (línea 511 de `Acordeon.jsx`); la clase `.exds-acc-ttl`
   es del renglón de MODO GUIADO (línea 570). Este archivo pensó que estaba acotando un reparto
   invertido por modo, y en realidad estaba escribiendo una regla para una clase que su propio
   modo (FAQ) nunca usa — inofensivo en teoría, pero **el `.exds-acc-sum` SÍ es la misma clase
   en los dos modos** (líneas 513 y 572), así que el resumen SÍ heredaba el `flex:none` volteado
   aquí, contradiciendo lo que la app real pinta. Se vuelve a la regla suelta, igual que el kit
   y que producción. */
.exds-acc-ttl { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: none; }
.exds-acc-card[data-fut="true"] .exds-acc-ttl { color: var(--fg4); }
.exds-acc-sum {
  flex: 1; text-align: right; font: 400 var(--fs-body-sm, 13px) var(--font-sans);
  color: var(--fg3); font-variant-numeric: tabular-nums;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  opacity: 1; transition: opacity var(--motion-fast) var(--ease-default);
}
/* El resumen se apaga al abrir la sección —ya no hace falta, el título tiene todo el ancho—,
   salvo que la fila lo marque para CONSERVARSE (`data-keep`, p. ej. el pago inicial junto al
   botón de avance). */
.exds-acc-card[data-open="true"] .exds-acc-sum:not([data-keep="true"]) { opacity: 0; }
/* El resumen EN ERROR va en su color base, no en un tono «-deep»: se pinta sobre la card
   blanca, no sobre un tinte (COMPONENTE_SEMANTICOS §0-quater, Ricardo 2026-08-20). */
.exds-acc-sum--err { color: var(--color-error, #DA342B); font-weight: var(--fw-medium, 500); }
.exds-acc-chev { flex: none; display: flex; color: var(--fg3);
  transition: transform var(--motion-base, 250ms) var(--ease-default); }
.exds-acc-card[data-open="true"] .exds-acc-chev { transform: rotate(180deg); }

/* ▓ MÓVIL · añadido 2026-08-23 (`gate_gemelos_conducta.js`), faltaba entero. El orden en que
   ceden las tres piezas es FIJO: 1º el resumen · 2º el título (se corta con «…») · EL BOTÓN
   NUNCA — el botón es la única salida hacia adelante. Este archivo alimenta el FAQ del
   cotizador público (`app/index.html` → `app/css/cotizador.css`), que SÍ es móvil
   (CLAUDE.md §7: «el único que debe funcionar en móvil, por ahora, es el cotizador público»). */
@media (max-width: 430px) {
  .exds-acc-h { padding: 14px 14px 14px 16px; gap: 10px; }
  .exds-acc-ttl { flex: 1 1 auto; min-width: 0; }
  .exds-acc-sum { flex: 0 1 auto; }
  .exds-acc-card[data-open="true"] .exds-acc-sum:not([data-keep="true"]) { display: none; }
}

/* ⛔ REDUCIR MOVIMIENTO: se apaga el viaje, NO el cambio de estado. La fila sigue
   abriéndose y cerrándose — lo que desaparece es el recorrido. Obligatorio en el canon
   para toda pieza con movimiento (`lint_movimiento.js`). */
@media (prefers-reduced-motion: reduce) {
  .exds-acc-card,
  .exds-acc-h,
  .exds-acc-h[data-modo="faq"],
  .exds-acc-body,
  .exds-acc-content,
  .exds-acc-sum,
  .exds-acc-chev { transition-duration: 0.01ms !important; transition-delay: 0ms !important; }
  /* Añadido 2026-08-23: el kit apaga también el RETARDO con el que el contenido entra tras la
     caja (60ms) — sin esto, con movimiento reducido el texto seguía llegando con medio
     respiro después de la caja, que es justo el «viaje» que este bloque existe para quitar. */
  .exds-acc-card[data-open="true"] .exds-acc-content { transition-delay: 0ms !important; }
  /* ⛔ EL `transition-delay: 0ms !important` DE ARRIBA TAMBIÉN PISA EL RETARDO DEL
     `visibility`, Y ESO ES LO CORRECTO — se deja escrito porque parece un descuido y no lo es.
     Ese retardo existe SÓLO para no esfumar el contenido a mitad del plegado; sin plegado que
     proteger, esperar 400 ms para ocultar sería dejar el panel cerrado con sus controles
     enfocables durante casi medio segundo. Con movimiento reducido el cuerpo se oculta en el
     mismo fotograma en que se cierra, que es exactamente lo que hace falta.
     ⚠ Verificado ejecutando el 2026-08-30 con «reducir movimiento» encendido en el navegador:
     cerrado el panel, el botón de dentro sale del orden de tabulación de inmediato. *El caso
     del movimiento reducido es donde más importa que el foco salga bien, y es justo el que un
     arreglo basado en retardos se deja atrás si nadie lo mira.* */
}

/* ═══════════════════════════════════════════════════════════════════════════════════
   ▓ MODO COMPACTO · `data-densidad="compacta"` — el acordeón DENTRO DE UN CAJÓN ▓
   v0.3 · 2026-08-21.
   `DECISION-FUENTE: Ricardo, 2026-08-21 — «vamos con el acordeón»`, tras comparar el
   cajón de Facturación con `plans/design_handoff_cajones/` («me parece más eficiente en
   cuanto espacio; permite respirar mejor al texto del cuerpo»).

   ⛔ ES UN MODO, NO UNA COPIA. Se resistió la tentación de escribir estas medidas dentro
   de la pantalla de Facturación: eso habría dado DOS acordeones en el sistema con el
   mismo nombre. Ayuda, Ajustes y Notificaciones traen el mismo tratamiento en su handoff,
   así que esto es la familia, no una excepción.

   ⭐ QUÉ CAMBIA Y POR QUÉ, con la aritmética delante — porque el argumento no es de gusto:

   Con tarjeta, dentro de un cajón de 420 px, cada sección cobra un borde a cada lado y
   16 px de relleno propio, ADEMÁS de los 20 del cajón. El texto arranca en **37** y acaba
   en **383**: quedan **346 px de renglón**. En modo compacto arranca en 20 y acaba en 400:
   **380 px**. Son **34 px por línea, un 10 % más de texto**, en la superficie más estrecha
   del sistema y justo donde vive lo que hay que leer (el motivo de un aviso, la
   descripción de un concepto).

   Y hay un argumento de estructura que pesa más que los 34 px: **una tarjeta dentro de un
   cajón es un contenedor dentro de un contenedor sin que la jerarquía lo pida** — diez
   marcos anidados dentro de un marco. Es lo que el no-negociable 7-bis persigue: el peso
   de una pieza se juzga contra su contenedor, y aquí diez piezas pesaban como su casa.
   *Lo que separa dos secciones no tiene que ser una caja: basta una línea y el aire.*

   ⛔ ESTO REVOCA UNA DECISIÓN ANTERIOR, y se dice en voz alta en vez de dejar dos reglas
   conviviendo: el 2026-08-20 Ricardo decidió que «en el caso específico del cajón, sí
   recupera su borde». Aquélla se tomó comparando el acordeón CON marco contra el acordeón
   SIN NADA —que efectivamente se deshacía—; ésta compara contra el tratamiento del handoff
   de cajones, que no es «sin nada»: es plano CON filete y CON aire. *Una decisión no se
   revoca por cambiar de gusto, se revoca cuando aparece la tercera opción que no estaba
   sobre la mesa.*

   Las medidas salen del handoff (§1 «La fila»), no de aquí:
     fila     `padding: var(--space-3) var(--space-5)` = 12 / 20
     límite   `border-top: 1px solid var(--color-border-subtle)` — **a sangre**, cruza los
              420, porque separa dos ZONAS y no dos columnas (no-negociable 7 · criterio
              del filete). Por eso el modo compacto se estira con márgenes negativos.
     cuerpo   el mismo gutter de 20, y su propio `padding-top`: sin él nace pegado a la
              solapa y lo único que lo separa del título es el relleno de ÉSTA, que es aire
              del título, no del cuerpo.
   ═══════════════════════════════════════════════════════════════════════════════════ */
.exds-acc[data-densidad="compacta"] { gap: 0; }

/* Sin tarjeta: ni borde, ni radio, ni sombra, ni fondo — abierta o cerrada. */
.exds-acc[data-densidad="compacta"] .exds-acc-card {
  border: 0; border-radius: 0; box-shadow: none; background: none; overflow: visible;
}
.exds-acc[data-densidad="compacta"] .exds-acc-card[data-open="true"] {
  border: 0; box-shadow: none;
}

/* EL LÍMITE ENTRE SECCIONES · un pelo a sangre, y NO en la primera: una línea encima de la
   primera sección duplicaría el filete que ya cierra la cabecera del cajón. */
.exds-acc[data-densidad="compacta"] .exds-acc-card + .exds-acc-card {
  border-top: 1px solid var(--color-border-subtle);
}

/* A SANGRE · el margen negativo es el gutter del cajón, declarado como variable para que
   quien monte en otro ancho no tenga que tocar esta hoja. */
.exds-acc[data-densidad="compacta"] {
  --exds-acc-sangria: var(--space-5, 20px);
  margin-inline: calc(-1 * var(--exds-acc-sangria));
}
.exds-acc[data-densidad="compacta"] .exds-acc-h,
.exds-acc[data-densidad="compacta"] .exds-acc-content {
  padding-inline: var(--exds-acc-sangria);
}
.exds-acc[data-densidad="compacta"] .exds-acc-h { padding-block: var(--space-3, 12px); }

/* EL CUERPO · sin contorno propio y sin fondo: en modo compacto no hay caja de la que
   separarse. Su aire arriba es suyo, no prestado del relleno de la solapa. */
.exds-acc[data-densidad="compacta"] .exds-acc-content {
  border: 0; border-radius: 0; background: none;
  padding-top: var(--space-2-5, 10px);
  padding-bottom: var(--space-4, 16px);
}

/* La solapa abierta NO se tiñe de gris en reposo: sin tarjeta que la contenga, la franja
   gris se leería como una banda de grupo —que en esta familia significa otra cosa— y además
   cortaría el filete a sangre. Lo que dice que está abierta es el chevrón. */
.exds-acc[data-densidad="compacta"] .exds-acc-card[data-open="true"] .exds-acc-h {
  background: none;
}

/* ⛔ EL HOVER VA EN LOS DOS ESTADOS, ABIERTA Y CERRADA.
   `DECISION-FUENTE: Ricardo, 2026-08-21 — «cuando está desplegado, el encabezado debe tener
    un hover igual que cuando está plegado. Ese hover sirve para que el usuario sepa que el
    encabezado es cliqueable y que tiene la acción inversa que cuando lo abrió (colapsar).»`

   ⛔ Y CORRIGE UNA REGLA MÍA DE HACE UNAS HORAS que decía lo contrario —«el hover sólo en la
   cerrada: una fila abierta ya está gris, y volver a pintarla no diría nada»—. Ese argumento
   era CIERTO con tarjeta, donde la solapa abierta se teñía; **en modo compacto no se tiñe**,
   así que la premisa desapareció y con ella la regla. *Una regla heredada sin su premisa no
   es una regla: es una costumbre.*

   Y el argumento de Ricardo es más fuerte que el del color, porque no habla de estética
   sino de affordance: **un control que ya hizo su trabajo sigue siendo un control**, y lo
   único que anuncia que se puede volver a pulsar —para cerrar— es que responda al ratón.
   Sin hover, una sección abierta se lee como un encabezado muerto. */
.exds-acc[data-densidad="compacta"] .exds-acc-card .exds-acc-h:hover,
.exds-acc[data-densidad="compacta"] .exds-acc-card[data-open="true"] .exds-acc-h:hover {
  background: var(--color-bg-subtle);
}
/* ⛔ LOS DOS SELECTORES NO SON UN DESCUIDO: el de reposo de la abierta pesa (0,4,0) y un
   `:hover` de (0,3,0) NO le gana — el hover salía y no pintaba nada, con la regla escrita y
   correcta. *Una regla que pierde por especificidad no falla ruidosamente: no hace nada, y
   se lee como si el navegador no la tuviera.* Se empareja el peso en vez de recurrir a
   `!important`, que apagaría también al que venga después. */
