/* ---------------------------------------------------------------------
   OpoReal · Blog · piezas compartidas
   ---------------------------------------------------------------------
   La tarjeta, el cartel, la línea de datos y el cierre salen en las dos
   páginas del blog —el listado y el artículo—, así que viven aquí.

   TODAS las reglas van prefijadas con `.opr-bl-seccion`, la clase que
   llevan las cinco secciones del blog. No es manía de orden: el reset del
   núcleo es `.opr *{margin:0 !important; padding:0 !important; max-width:none !important; …}`, con
   especificidad (0,1,0), y una clase suelta como `.opr-bl-carta` mide
   exactamente lo mismo. Mientras las hojas se sirvan en orden gana la
   nuestra por ir después, pero **el orden no está garantizado**: LiteSpeed
   combina y reordena los CSS. Con el prefijo subimos a (0,2,0) y ganamos
   siempre. Documento 02, punto 11.1.

   Y hay una segunda razón, más fina: `.opr img{display:block !important; max-width:100% !important}`
   mide (0,1,1) y EMPATARÍA con `.opr-bl-foto img`. Con el prefijo delante,
   (0,2,0) le gana por número de clases. Trampa nº 3 del documento 02.
   --------------------------------------------------------------------- */

/* --- la etiqueta de categoría ---
   Caja alta y baja, peso 600, tamaño normal. Nada de versalitas con las
   letras separadas: es lo que delata un diseño generado con IA y está
   prohibido en el documento 01, punto 3.4. */
.opr-bl-seccion .opr-bl-etq{margin-bottom:0 !important; font-size:.84375rem !important; font-weight:600 !important; color:var(--tenue) !important}
.opr-bl-seccion.es-noche .opr-bl-etq{color:var(--p400) !important}

/* --- fecha y minutos --- */
.opr-bl-seccion .opr-bl-meta{
  display:flex !important; align-items:center !important; flex-wrap:wrap !important; gap:9px !important;
  margin-top:16px !important; font-size:.84375rem !important; color:var(--tenue) !important;
}
.opr-bl-seccion .opr-bl-meta.es-menuda{margin-top:12px !important; font-size:.78125rem !important}
.opr-bl-seccion .opr-bl-meta i{
  width:3px !important; height:3px !important; border-radius:999px !important; background:var(--p300) !important; display:block !important; flex:none !important;
}

/* --- la imagen destacada --- */
.opr-bl-seccion .opr-bl-foto{
  width:100% !important; height:100% !important; object-fit:cover !important; display:block !important; background:var(--p100) !important;
}

/* --- el cartel: lo que se pinta cuando no hay imagen ---
   Un panel de noche con el escudo enorme detrás y la categoría delante. No
   se usa una foto de archivo: en un artículo sobre las bases de la
   convocatoria, una foto de banco no dice nada y se nota. */
.opr-bl-seccion .opr-bl-cartel{
  position:relative !important; display:block !important; width:100% !important; height:100% !important;
  background:var(--p950) !important; overflow:hidden !important;
}
.opr-bl-seccion .opr-bl-cartel-marca{
  position:absolute !important; left:50% !important; top:50% !important; transform:translate(-50%,-50%) !important;
  display:block !important; height:78% !important; width:auto !important; color:#fff !important; opacity:.13 !important; pointer-events:none !important;
}
.opr-bl-seccion .opr-bl-cartel-marca svg{height:100% !important; width:auto !important; display:block !important}
.opr-bl-seccion .opr-bl-cartel-etq{
  position:absolute !important; left:0 !important; right:0 !important; bottom:18px !important;
  display:block !important; text-align:center !important;
  font-size:.875rem !important; font-weight:700 !important; letter-spacing:-.012em !important; color:var(--p300) !important;
}

/* --- la tarjeta de la rejilla --- */
.opr-bl-seccion .opr-bl-rejilla{
  display:grid !important; grid-template-columns:repeat(3,minmax(0,1fr)) !important; gap:clamp(14px,1.8vw,22px) !important;
}
@media (max-width:900px){ .opr-bl-seccion .opr-bl-rejilla{grid-template-columns:repeat(2,minmax(0,1fr)) !important} }
@media (max-width:620px){ .opr-bl-seccion .opr-bl-rejilla{grid-template-columns:1fr !important} }

/* --- toda la tarjeta se pincha, con UN SOLO enlace ---
   El enlace de verdad es el del titular, y se estira por encima de la tarjeta
   entera con un `::after`. Es el patrón del «enlace estirado»: se puede
   pinchar en la foto, en la entradilla o en la fecha, pero un lector de
   pantalla sigue oyendo un enlace y no tres que dicen lo mismo.

   Hasta la v1.0.1 esto no estaba: la foto era un segundo enlace y el «Leer el
   artículo» era un `<span>` que no llevaba a ninguna parte. Pinchar justo ahí
   —que es donde pincha todo el mundo— no hacía nada. Un texto que dice «leer»
   y no se puede pulsar no es un detalle: es la tarjeta rota.

   `position:relative` va en la TARJETA y no en el enlace: el `::after` se
   coloca respecto al antepasado posicionado más cercano, así que si el propio
   `<a>` se posicionara, el recuadro se quedaría del tamaño del titular. */
.opr-bl-seccion .opr-bl-carta{
  position:relative !important;
  display:flex !important; flex-direction:column !important; overflow:hidden !important;
  transition:transform .18s ease, box-shadow .18s ease !important;
}
.opr-bl-seccion .opr-bl-carta-tit a::after{
  content:"" !important; position:absolute !important; inset:0 !important; z-index:1 !important;
}
.opr-bl-seccion .opr-bl-carta:hover{transform:translateY(-3px) !important; box-shadow:var(--sombra) !important}

/* --- me gusta dentro de una tarjeta ---
   Va aquí, pegado a la regla del enlace estirado de arriba, porque las dos
   se explican juntas: la tarjeta entera se pincha gracias a un `::after` con
   `z-index:1` que la cubre de lado a lado, así que cualquier cosa pulsable
   que se meta dentro tiene que levantarse por encima de él o el clic se lo
   come el enlace y en vez del me gusta se abre el artículo. De ahí el
   `position:relative` y el `z-index:2`; el `stopPropagation` del JavaScript
   solo es el segundo cinturón.
   El mismo bloque sirve para el destacado, que lleva su propio `::after` en
   `bl-lista.css`.
   Más pequeño que el del artículo: en el artículo el me gusta es el final de
   la lectura y puede pesar; en una tarjeta compite con el titular y no debe
   ganarle. */
.opr-bl-seccion .opr-bl-megusta-caja.es-en-tarjeta{
  position:relative !important; z-index:2 !important;
  display:flex !important; align-items:center !important; margin-top:14px !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta{
  display:inline-flex !important; align-items:center !important; gap:8px !important;
  padding:7px 13px !important; border-radius:999px !important;
  background:var(--superficie) !important; color:var(--suave) !important;
  box-shadow:inset 0 0 0 1.5px var(--borde2) !important;
  font-size:.8125rem !important; font-weight:700 !important; letter-spacing:-.012em !important; line-height:1 !important;
  transition:color .16s ease, box-shadow .16s ease !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta:hover{
  color:var(--tinta) !important; box-shadow:inset 0 0 0 1.5px var(--tinta) !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-corazon{
  width:16px !important; height:16px !important; flex:none !important;
  fill:none !important; stroke:currentColor !important; stroke-width:1.8 !important; stroke-linejoin:round !important;
  transition:fill .16s ease, transform .16s ease !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta.es-mio{
  color:var(--tinta) !important; box-shadow:inset 0 0 0 1.5px var(--tinta) !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta.es-mio .opr-bl-corazon{fill:currentColor !important}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta:active .opr-bl-corazon{transform:scale(.86) !important}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta b{font-weight:700 !important; color:var(--tenue) !important}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta.es-mio b{color:var(--tinta) !important}
/* Puesto y bloqueado NO se ve apagado: `disabled` aquí no significa «no
   disponible», significa «ya está dado». Solo se apaga mientras la petición
   está en el aire, que es el `disabled` sin `es-mio`. */
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta[disabled]{cursor:default !important}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta[disabled]:not(.es-mio){opacity:.55 !important}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta[disabled]:hover:not(.es-mio){
  color:var(--suave) !important; box-shadow:inset 0 0 0 1.5px var(--borde2) !important;
}
.opr-bl-seccion .es-en-tarjeta .opr-bl-megusta-voz{
  position:absolute !important; width:1px !important; height:1px !important; overflow:hidden !important;
  clip-path:inset(50%) !important; white-space:nowrap !important;
}
/* La tarjeta se levanta al pasar por encima; el botón no tiene por qué
   cambiar de color a la vez, que parecería que ya está pulsado. */
.opr-bl-seccion .opr-bl-carta:hover .es-en-tarjeta .opr-bl-megusta:not(:hover):not(.es-mio){
  color:var(--suave) !important;
}

.opr-bl-seccion .opr-bl-carta-media{
  display:block !important; width:100% !important; aspect-ratio:16 / 9 !important; overflow:hidden !important; background:var(--p100) !important;
}
.opr-bl-seccion .opr-bl-carta-texto{
  display:flex !important; flex-direction:column !important; flex:1 !important; padding:20px 20px 18px !important;
}
/* OJO: el titular NO lleva `position`. Se probó a ponerle `position:relative`
   para que el foco del teclado quedara encima, y con eso el recuadro estirado
   pasó a medirse contra el titular en vez de contra la tarjeta: 336 x 22 px en
   vez de la tarjeta entera, o sea que solo se podía pinchar el titular otra
   vez. `inset:0` se coloca respecto al antepasado POSICIONADO más cercano, y
   ese tiene que ser la tarjeta y nadie más. */
.opr-bl-seccion .opr-bl-carta-tit{
  margin-top:7px !important; font-size:1.0625rem !important; font-weight:700 !important;
  line-height:1.3 !important; letter-spacing:-.018em !important; text-wrap:pretty !important;
}
.opr-bl-seccion .opr-bl-carta-tit a{color:var(--tinta) !important}
.opr-bl-seccion .opr-bl-carta:hover .opr-bl-carta-tit a{color:var(--p700) !important}
.opr-bl-seccion .opr-bl-carta-sub{
  margin-top:8px !important; flex:1 !important; font-size:.90625rem !important; line-height:1.55 !important;
  color:var(--suave) !important; text-wrap:pretty !important;
}

/* --- el cierre --- */
.opr-bl-seccion.opr-bl-cierre .opr-bl-cierre-panel{
  max-width:760px !important; margin:0 auto !important; text-align:center !important;
  display:flex !important; flex-direction:column !important; align-items:center !important;
}
.opr-bl-seccion.opr-bl-cierre .opr-h2{color:#fff !important}
.opr-bl-seccion.opr-bl-cierre .opr-bl-cierre-sub{
  margin-left:auto !important; margin-right:auto !important; max-width:52ch !important;
}
.opr-bl-seccion.opr-bl-cierre .opr-bl-cierre-btns{
  display:flex !important; flex-wrap:wrap !important; gap:10px !important; justify-content:center !important; margin-top:28px !important;
}
@media (max-width:560px){
  .opr-bl-seccion.opr-bl-cierre .opr-bl-cierre-btns .opr-btn{flex:1 1 100% !important}
}

/* ---------------------------------------------------------------------
   OpoReal · Blog · el listado
   ---------------------------------------------------------------------
   Portada de noche, filtro de categorías, el último artículo a lo ancho y
   el resto en rejilla de tres. Ritmo claro/oscuro: noche · clara · noche,
   el mismo esquema de la página de Próximamente.

   Todas las reglas van prefijadas. Ver la cabecera de `bl-comun.css`.
   --------------------------------------------------------------------- */

/* --- portada ---
   No es sección de pantalla completa a propósito. Una portada de blog que
   ocupa toda la pantalla obliga a deslizar antes de ver un solo titular, y
   aquí lo que importa son los titulares. */
.opr-bl-seccion.opr-bl-portada{
  padding-top:clamp(52px,6vw,86px) !important; padding-bottom:clamp(44px,5vw,68px) !important;
}

/* El agente de la derecha, como en Convocatorias. La segunda columna es una
   FRACCION y no `auto`: asi la figura tiene sitio de sobra y se centra dentro
   en vez de pegarse al borde de la caja. El texto va centrado en vertical.

   OJO CON LA ESPECIFICIDAD, que aqui ya se cayo una vez en Convocatorias:
   `.opr img,.opr svg` fija `display:block` y `max-width:100%` con (0,1,1), y
   ese bloque va en el nucleo de CADA plugin --el de `oporeal-bloques`, que
   trae la cabecera y el pie, se carga DESPUES de esta hoja--. Por eso todo lo
   del agente va con `.opr-bl-portada img.opr-bl-agente`, (0,2,1), que gana a
   cualquier `.opr img` venga de donde venga. Con (0,1,1) el `display:none` del
   movil no haria nada. */
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-caja{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) minmax(0,0.32fr) !important;
  gap:clamp(12px,3vw,32px) !important;
  align-items:center !important;
}
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-txt{min-width:0 !important}
.opr-bl-portada img.opr-bl-agente{
  width:clamp(110px,15vw,196px) !important; height:auto !important;
  justify-self:center !important; align-self:center !important;
}
@media (max-width:640px){
  .opr-bl-portada img.opr-bl-agente{display:none !important}
  .opr-bl-seccion.opr-bl-portada .opr-bl-portada-caja{grid-template-columns:1fr !important}
}
/* v1.0.16 · En vertical la portada deja de ocupar la pantalla.
   El marcado lleva `es-portada` (del núcleo: alto mínimo de una pantalla y el
   contenido centrado). En el escritorio el texto y el agente la llenan; en un
   móvil de pie el texto mide unos 380 px de 844 y quedaba medio metro de negro
   por arriba y por abajo (Sergio, captura del 27-09-2026). Con la ventana más
   alta que ancha, alto automático y el respiro de siempre del listado.
   Va con (0,3,0) porque la regla del núcleo es (0,2,0) y ya viene blindada:
   así gana se cargue la hoja que se cargue antes. */
@media (max-aspect-ratio:1/1){
  .opr-bl-seccion.opr-bl-portada.es-portada{
    min-height:0 !important;
    padding-top:clamp(40px,7vw,72px) !important; padding-bottom:clamp(40px,6vw,60px) !important;
  }
}
.opr-bl-seccion.opr-bl-portada .opr-h1{color:#fff !important; max-width:18ch !important}
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-sub{max-width:56ch !important}
/* v1.0.17 · Bloque y no flex. Con flex, el texto era un elemento flexible
   anónimo y la cifra otro, y en un móvil de 375 px el texto se comía el ancho de
   la cifra: «14» salía partido en «1» y «4», uno encima del otro. El hueco entre
   cifra y texto ya lo pone el espacio del marcado. */
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-dato{
  margin-top:22px !important; display:block !important; color:var(--p500) !important;
}
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-dato .opr-cifra{color:var(--p300) !important; font-weight:700 !important}

/* --- el filtro de categorías ---
   Píldoras, como el segmentado del núcleo, pero con enlaces de verdad en vez
   de botones: cada categoría tiene su propia dirección. Por eso no se usa
   `.opr-seg`, que lleva `button` en el selector.

   v1.0.9 · Hasta la 1.0.8 en estrecho la fila no se partía: `flex-wrap:nowrap`
   más `overflow-x:auto` la convertían en una tira que se desplazaba. La idea
   era ahorrar alto. El resultado era otro: las píldoras se encogían por debajo
   de su texto —«Cómo estudiar» pedía 120 px y se quedaba en 88— y los rótulos
   salían cortados a media palabra. Medido a 390 px, no visto de lejos.
   Ahora la fila se parte en varias líneas y cada píldora mide lo que mide su
   texto. Dos reglas lo sostienen y ninguna sobra:
   - `flex:0 0 auto` en el `li`, para que nunca se encoja pase lo que pase.
   - en estrecho, píldora más pequeña (14 px de lado, .875rem) para que entren
     tres por línea en vez de dos. Con las cuatro categorías de hoy son dos
     líneas justas. */
.opr-bl-seccion .opr-bl-filtro{margin-bottom:clamp(28px,3.4vw,42px) !important}
.opr-bl-seccion .opr-bl-filtro ul{
  display:flex !important; gap:8px !important; flex-wrap:wrap !important; align-items:center !important;
}
.opr-bl-seccion .opr-bl-filtro li{display:block !important; flex:0 0 auto !important; min-width:0 !important}
.opr-bl-seccion .opr-bl-filtro a{
  display:block !important; padding:9px 17px !important; border-radius:999px !important;
  font-size:.9375rem !important; font-weight:600 !important; letter-spacing:-.01em !important; color:var(--suave) !important;
  background:var(--p100) !important; white-space:nowrap !important;
  transition:background .16s ease, color .16s ease, box-shadow .16s ease !important;
}
.opr-bl-seccion .opr-bl-filtro a:hover{color:var(--tinta) !important; background:var(--p200) !important}
.opr-bl-seccion .opr-bl-filtro a[aria-current="page"]{
  background:var(--p950) !important; color:#fff !important;
}
@media (max-width:640px){
  .opr-bl-seccion .opr-bl-filtro ul{gap:7px !important}
  .opr-bl-seccion .opr-bl-filtro a{padding:8px 14px !important; font-size:.875rem !important}
}

/* --- el destacado ---
   El artículo más reciente, con la foto a la izquierda y el texto a la
   derecha. La proporción 4/3 en la media es la que deja el titular y la
   entradilla centrados sin que sobre aire por debajo. */
/* El destacado entero se pincha, con el mismo enlace estirado que las
   tarjetas. Ver la explicación larga en `bl-comun.css`. */
.opr-bl-seccion .opr-bl-destacado{
  position:relative !important;
  display:grid !important; grid-template-columns:minmax(0,1.05fr) minmax(0,1fr) !important;
  gap:clamp(22px,3vw,44px) !important; align-items:center !important;
  margin-bottom:clamp(34px,4vw,54px) !important;
  padding-bottom:clamp(34px,4vw,54px) !important; border-bottom:1px solid var(--borde) !important;
}
.opr-bl-seccion .opr-bl-destacado-tit a::after{
  content:"" !important; position:absolute !important; inset:0 !important; z-index:1 !important;
}
.opr-bl-seccion .opr-bl-destacado-media{
  display:block !important; width:100% !important; aspect-ratio:4 / 3 !important; overflow:hidden !important;
  border-radius:var(--radio) !important; background:var(--p100) !important; box-shadow:var(--sombra-s) !important;
}
/* Sin `position` en el titular: ver la nota de `bl-comun.css`. */
.opr-bl-seccion .opr-bl-destacado-tit{
  margin-top:9px !important;
  font-size:clamp(1.5rem,2.9vw,2.15rem) !important; font-weight:800 !important;
  line-height:1.12 !important; letter-spacing:-.028em !important; text-wrap:balance !important;
}
.opr-bl-seccion .opr-bl-destacado-tit a{color:var(--tinta) !important}
.opr-bl-seccion .opr-bl-destacado:hover .opr-bl-destacado-tit a{color:var(--p700) !important}
.opr-bl-seccion .opr-bl-destacado-sub{
  margin-top:14px !important; max-width:52ch !important; font-size:1rem !important; line-height:1.6 !important;
  color:var(--suave) !important; text-wrap:pretty !important;
}
/* «Leer el artículo» sigue siendo un `<span>` a propósito: si fuera un enlace
   habría dos enlaces al mismo sitio dentro de la misma tarjeta. Se pincha
   porque el recuadro estirado del titular pasa por encima, y el cursor lo dice.
   Lo que NO puede volver a pasar es que se vea como pulsable y no lo sea. */
.opr-bl-seccion .opr-bl-leer{
  display:inline-flex !important; align-items:center !important; gap:8px !important; margin-top:20px !important;
  font-size:.9375rem !important; font-weight:700 !important; letter-spacing:-.012em !important; color:var(--tinta) !important;
  cursor:pointer !important;
}
.opr-bl-seccion .opr-bl-leer svg{width:15px !important; height:15px !important; transition:transform .18s ease !important}
.opr-bl-seccion .opr-bl-destacado:hover .opr-bl-leer svg{transform:translateX(3px) !important}

@media (max-width:860px){
  /* El bloque interactivo debajo del texto en estrecho, patrón del punto 9
     del documento 02: primero se cuenta qué es, después se enseña. Aquí es al
     revés porque la foto ES el gancho del destacado, así que se queda arriba
     y solo se apila. */
  .opr-bl-seccion .opr-bl-destacado{grid-template-columns:1fr !important; gap:20px !important}
  .opr-bl-seccion .opr-bl-destacado-media{aspect-ratio:16 / 9 !important}
}

/* --- paginación --- */
.opr-bl-seccion .opr-bl-paginas{
  display:flex !important; align-items:center !important; justify-content:space-between !important; gap:16px !important;
  margin-top:clamp(32px,4vw,48px) !important; padding-top:clamp(22px,2.6vw,30px) !important;
  border-top:1px solid var(--borde) !important;
}
.opr-bl-seccion .opr-bl-paginas-donde{flex:none !important; text-align:center !important}
.opr-bl-seccion .opr-bl-paginas .opr-btn{padding:12px 20px !important; font-size:.9375rem !important}
@media (max-width:560px){
  .opr-bl-seccion .opr-bl-paginas{flex-wrap:wrap !important; justify-content:center !important}
  .opr-bl-seccion .opr-bl-paginas-donde{order:3 !important; width:100% !important}
}

/* --- blog vacío ---
   No se rellena con nada. Se dice que no hay artículos, se cuenta qué va a
   haber y se manda a donde sí hay algo hoy. */
.opr-bl-seccion .opr-bl-vacio{
  display:flex !important; flex-direction:column !important; align-items:center !important; text-align:center !important;
  padding:clamp(44px,6vw,80px) clamp(20px,4vw,40px) !important;
  border-radius:var(--radio) !important; background:var(--superficie) !important;
  box-shadow:inset 0 0 0 1px var(--borde) !important;
}
.opr-bl-seccion .opr-bl-vacio-icono{
  width:46px !important; height:46px !important; border-radius:14px !important; margin-bottom:20px !important;
  display:grid !important; place-items:center !important; background:var(--p100) !important; color:var(--p600) !important;
}
.opr-bl-seccion .opr-bl-vacio-icono svg{width:22px !important; height:22px !important}
.opr-bl-seccion .opr-bl-vacio-txt{
  margin-top:12px !important; max-width:52ch !important; font-size:.96875rem !important; line-height:1.6 !important;
  color:var(--suave) !important; text-wrap:pretty !important;
}
.opr-bl-seccion .opr-bl-vacio-btns{
  display:flex !important; flex-wrap:wrap !important; gap:10px !important; justify-content:center !important; margin-top:26px !important;
}
.opr-bl-seccion .opr-bl-vacio-admin{
  margin-top:24px !important; padding:12px 16px !important; border-radius:var(--radio-s) !important;
  background:var(--av100) !important; color:var(--av900) !important; max-width:56ch !important;
}
.opr-bl-seccion .opr-bl-vacio-admin a{color:var(--av900) !important; font-weight:700 !important; text-decoration:underline !important}
@media (max-width:560px){
  .opr-bl-seccion .opr-bl-vacio-btns .opr-btn{flex:1 1 100% !important}
}

/* --- el enlace a la guía, en la portada del listado · v1.0.14 --- */
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-guia{margin-top:14px !important; font-size:.9375rem !important}
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-guia a{
  color:var(--p100) !important; font-weight:600 !important;
  text-decoration:underline !important; text-underline-offset:3px !important; text-decoration-color:var(--p500) !important;
}
.opr-bl-seccion.opr-bl-portada .opr-bl-portada-guia a:hover{text-decoration-color:var(--p100) !important}

/* ---------------------------------------------------------------------
   OpoReal · Blog · la página de artículo
   ---------------------------------------------------------------------
   Lo importante de esta hoja es `.opr-bl-cuerpo`: lo que hay dentro no lo
   escribimos nosotros, lo escribe Sergio en el editor de WordPress. Así que
   aquí se viste **todo** lo que el editor puede sacar —párrafos, listas,
   citas, tablas, imágenes, código— y no solo lo que hoy hay escrito.

   Y hay que vestirlo entero por una razón concreta: el blindaje del núcleo
   deja los descendientes de `.opr` sin márgenes, sin viñetas, sin cursiva,
   sin subrayado y sin fondo. Un `<ul>` del editor saldría sin puntos y un
   `<em>` sin cursiva. Todo lo que el reset quita, se devuelve aquí.

   Las reglas van prefijadas con `.opr-bl-articulo`, que llevan las dos
   secciones. `.opr-bl-cuerpo p` mediría (0,1,1) y empataría con
   `.opr img{display:block !important}`; con el prefijo delante sube a (0,2,1) y gana
   siempre, se sirvan las hojas en el orden que se sirvan.
   Documento 02, punto 11.1 y trampas 3 y 4.
   --------------------------------------------------------------------- */

/* --- la barra de progreso de lectura ---
   Va fija arriba del todo, por debajo de la cabecera. Tres píxeles y en
   tinta: no es un adorno de color, es cuánto queda. */
.opr.opr-bl-progreso{
  position:fixed !important; left:0 !important; right:0 !important; top:0 !important; height:3px !important; z-index:120 !important;
  background:transparent !important; pointer-events:none !important;
}
.opr.opr-bl-progreso span{
  display:block !important; height:100% !important; width:0 !important; background:var(--p950) !important;
  transition:width .08s linear !important;
}
body.admin-bar .opr.opr-bl-progreso{top:32px !important}
@media (max-width:782px){ body.admin-bar .opr.opr-bl-progreso{top:46px !important} }

/* --- la cabecera del artículo ---
   v1.0.9 · Va en oscuro, como la portada del listado. Antes era blanca y el
   artículo empezaba con el mismo fondo que el cuerpo: no había frontera entre
   «de qué va esto» y «esto es lo que hay que leer». Con la banda oscura el
   titular se sostiene solo y la foto de cabecera queda enmarcada en vez de
   flotando.
   El `es-noche` lo pone el marcado. Aquí solo van los recolorados de lo que
   esta hoja pintó pensando en fondo claro: migas, datos y la línea que los
   separa. Lo demás —fondo, `.opr-h1`, `.opr-entradilla`— ya lo resuelve el
   núcleo. */
.opr-bl-articulo.opr-bl-cabeza-art{
  padding-top:clamp(34px,4vw,56px) !important; padding-bottom:clamp(34px,3.8vw,50px) !important;
}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-titular{color:#fff !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-migas{color:var(--p400) !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-migas a{color:var(--p400) !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-migas a:hover{color:#fff !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-migas i{color:var(--p600) !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-sub{color:var(--p300) !important}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-datos{
  color:var(--p400) !important; border-top-color:var(--p800) !important;
}
.opr-bl-articulo.opr-bl-cabeza-art .opr-bl-datos i{background:var(--p600) !important}
/* El ancho de la columna de lectura. Vive en una variable porque lo usan
   tres sitios y tienen que decir el mismo número: la cabecera del artículo,
   el cuerpo y la rejilla que los alinea. Si se cambia aquí, se mueven los
   tres a la vez y el titular sigue empezando donde empieza el texto. */
.opr-bl-articulo{--columna:700px}
.opr-bl-articulo .opr-bl-columna{max-width:var(--columna) !important; margin-left:auto !important; margin-right:auto !important}

.opr-bl-articulo .opr-bl-migas{
  display:flex !important; align-items:center !important; gap:6px !important; margin-bottom:22px !important;
  font-size:.84375rem !important; color:var(--tenue) !important; flex-wrap:wrap !important;
}
.opr-bl-articulo .opr-bl-migas a{color:var(--tenue) !important}
.opr-bl-articulo .opr-bl-migas a:hover{color:var(--tinta) !important}
.opr-bl-articulo .opr-bl-migas i{display:grid !important; place-items:center !important; width:13px !important; height:13px !important; color:var(--p400) !important}
.opr-bl-articulo .opr-bl-migas svg{width:13px !important; height:13px !important}

/* El titular de un artículo no es el de una portada: vive dentro de una
   columna de 700 px, y el cuerpo del `.opr-h1` del núcleo —hasta 3,7 rem—
   lo parte en cuatro líneas. Se le baja el techo. */
.opr-bl-articulo .opr-bl-titular{
  margin-top:2px !important; font-size:clamp(1.85rem,3.4vw,2.7rem) !important; line-height:1.06 !important;
}
.opr-bl-articulo .opr-bl-sub{max-width:56ch !important; font-size:1.125rem !important}

.opr-bl-articulo .opr-bl-datos{
  display:flex !important; align-items:center !important; flex-wrap:wrap !important; gap:9px !important;
  margin-top:24px !important; padding-top:20px !important; border-top:1px solid var(--borde) !important;
  font-size:.875rem !important; color:var(--tenue) !important;
}
.opr-bl-articulo .opr-bl-datos i{
  width:3px !important; height:3px !important; border-radius:999px !important; background:var(--p300) !important; display:block !important; flex:none !important;
}

/* La imagen de cabecera no ocupa los 1180 px de la caja: a 1440 px eso son
   660 px de alto y se come la pantalla entera antes de que empiece el texto. */
.opr-bl-articulo .opr-bl-figura{
  max-width:920px !important; margin:clamp(28px,3.4vw,42px) auto 0 !important;
  border-radius:var(--radio) !important; overflow:hidden !important;
  aspect-ratio:16 / 9 !important;
}
/* Sobre fondo oscuro una sombra clara no se ve. Lo que separa la foto del
   fondo es un filo, no una sombra. */
.opr-bl-articulo.es-noche .opr-bl-figura{
  box-shadow:inset 0 0 0 1px var(--p800) !important;
}

/* --- el reparto: índice a un lado, texto al otro ---
   Tres columnas y no dos, y aquí está el porqué: con `220px 1fr` el texto se
   desplaza a la derecha y **deja de estar alineado con el titular**, que sí
   va centrado. Dos bloques del mismo artículo empezando en dos verticales
   distintas se ven como un fallo, porque lo son.

   Con `1fr [columna] 1fr` la columna de lectura queda centrada en la página
   —igual que la cabecera— y el índice se cuelga del margen izquierdo, pegado
   a ella. Es el reparto de un libro: la nota al margen no mueve el texto.

   La cuenta tiene que cuadrar: la caja mide 1180 px, la columna 700, así que
   cada margen son 240. El índice ocupa 200 y se aparta 40. Por eso el corte
   está en 1279 px y no en 1040: por debajo de 1280 la sección ya no llega a
   los 1180 de caja y el índice no cabría en su margen. */
.opr-bl-articulo .opr-bl-reparto{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) minmax(0,var(--columna)) minmax(0,1fr) !important;
  align-items:start !important;
}
.opr-bl-articulo .opr-bl-cuerpo{grid-column:2 !important}
.opr-bl-articulo .opr-bl-indice{grid-column:1 !important; justify-self:end !important; width:200px !important; margin-right:40px !important}

@media (max-width:1279px){
  .opr-bl-articulo .opr-bl-reparto{
    grid-template-columns:minmax(0,1fr) !important; max-width:var(--columna) !important; margin:0 auto !important;
  }
  .opr-bl-articulo .opr-bl-cuerpo{grid-column:1 !important}
  .opr-bl-articulo .opr-bl-indice{grid-column:1 !important; justify-self:stretch !important; width:auto !important; margin-right:0 !important}
}

/* --- me gusta ---
   En la columna del texto, no debajo del índice: la rejilla tiene tres
   columnas y la del medio es la de leer.

   SIN COLOR DE MARCA. El corazón puesto va relleno de tinta, no de rojo: el
   rojo significa fallo en todo el sitio (documento 01, punto 2.3) y un
   corazón rojo aquí querría decir otra cosa distinta en la misma página. */
.opr-bl-articulo .opr-bl-megusta-caja{
  grid-column:2 !important; display:flex !important; flex-wrap:wrap !important; align-items:center !important; gap:12px !important;
  margin-top:clamp(30px,3.4vw,44px) !important; padding-top:clamp(20px,2.4vw,28px) !important;
  border-top:1px solid var(--borde) !important;
}
@media (max-width:1279px){ .opr-bl-articulo .opr-bl-megusta-caja{grid-column:1 !important} }

.opr-bl-articulo .opr-bl-megusta{
  display:inline-flex !important; align-items:center !important; gap:10px !important;
  padding:10px 18px !important; border-radius:999px !important;
  background:transparent !important; color:var(--suave) !important;
  box-shadow:inset 0 0 0 1.5px var(--borde2) !important;
  font-size:.9375rem !important; font-weight:700 !important; letter-spacing:-.012em !important; line-height:1 !important;
  transition:color .16s ease, box-shadow .16s ease, background-color .16s ease !important;
}
.opr-bl-articulo .opr-bl-megusta:hover{color:var(--tinta) !important; box-shadow:inset 0 0 0 1.5px var(--tinta) !important}
.opr-bl-articulo .opr-bl-megusta .opr-bl-corazon{
  width:19px !important; height:19px !important; flex:none !important;
  fill:none !important; stroke:currentColor !important; stroke-width:1.7 !important; stroke-linejoin:round !important;
  transition:fill .16s ease, transform .16s ease !important;
}
.opr-bl-articulo .opr-bl-megusta.es-mio{color:var(--tinta) !important; box-shadow:inset 0 0 0 1.5px var(--tinta) !important}
.opr-bl-articulo .opr-bl-megusta.es-mio .opr-bl-corazon{fill:currentColor !important}
.opr-bl-articulo .opr-bl-megusta:active .opr-bl-corazon{transform:scale(.86) !important}
.opr-bl-articulo .opr-bl-megusta b{font-weight:700 !important; color:var(--tenue) !important}
.opr-bl-articulo .opr-bl-megusta.es-mio b{color:var(--tinta) !important}
/* Puesto y bloqueado NO se ve apagado: `disabled` aquí no significa «no
   disponible», significa «ya está dado». Solo se apaga mientras la petición
   está en el aire, que es el `disabled` sin `es-mio`. */
.opr-bl-articulo .opr-bl-megusta[disabled]{cursor:default !important}
.opr-bl-articulo .opr-bl-megusta[disabled]:not(.es-mio){opacity:.55 !important}
.opr-bl-articulo .opr-bl-megusta[disabled]:hover:not(.es-mio){
  color:var(--suave) !important; box-shadow:inset 0 0 0 1.5px var(--borde2) !important;
}

/* El aviso hablado no ocupa sitio, pero tiene que existir en el árbol para que
   el lector de pantalla lo lea: `display:none` lo callaría. */
.opr-bl-articulo .opr-bl-megusta-voz{
  position:absolute !important; width:1px !important; height:1px !important; overflow:hidden !important;
  clip-path:inset(50%) !important; white-space:nowrap !important;
}

/* --- el índice ---
   Lo construye el JavaScript con los <h2> que haya. Si el artículo no tiene
   ninguno, se queda con `hidden` y no ocupa sitio.
   OJO: el selector de atributo pesa lo mismo que una clase, así que la regla
   que lo esconde va **al final de esta hoja**, con la especificidad subida.
   Trampa nº 4 del documento 02, que ya mordió tres veces en el diccionario. */
/* El índice se queda pegado arriba, y **se desliza por su cuenta**.
   Sin `max-height` un índice de nueve apartados es más alto que la pantalla:
   se pega en `top:104px`, la parte de abajo cae fuera del borde inferior y no
   hay forma de llegar a ella —deslizar la página mueve el artículo, y el
   índice, por pegado, no se mueve—. Los últimos apartados quedan inalcanzables.
   Por eso lleva su propio alto máximo y su propio deslizamiento.

   El alto se mide **desde donde se pega**, no desde arriba del documento:
   `100dvh - 104px` es el sitio que queda por debajo del borde superior, y los
   24 px de más son aire al fondo. Medido así, la barra de administración de
   WordPress no lo descuadra —se lleva 32 px de arriba, pero el `top:104px` ya
   está por debajo de ella—, que es la trampa del documento 02, punto 14.

   `overscroll-behavior:contain` para que al llegar al final del índice no
   siga arrastrando la página: si no, deslizar sobre el índice acaba moviendo
   el artículo, que es justo lo que se quiere evitar. */
.opr-bl-articulo .opr-bl-indice{
  position:sticky !important; top:104px !important; align-self:start !important;
  padding-right:14px !important; border-right:1px solid var(--borde) !important;
  max-height:calc(100dvh - 128px) !important; overflow-y:auto !important; overscroll-behavior:contain !important;
  scrollbar-width:thin !important; scrollbar-color:var(--p300) transparent !important;
}
.opr-bl-articulo .opr-bl-indice-tit{
  font-size:.8125rem !important; font-weight:700 !important; letter-spacing:-.012em !important;
  color:var(--tenue) !important; margin-bottom:12px !important;
}
.opr-bl-articulo .opr-bl-indice ol{display:flex !important; flex-direction:column !important; gap:2px !important}
.opr-bl-articulo .opr-bl-indice li{display:block !important}
.opr-bl-articulo .opr-bl-indice a{
  display:block !important; padding:6px 0 6px 12px !important; margin-left:-1px !important;
  border-left:2px solid transparent !important;
  font-size:.84375rem !important; line-height:1.45 !important; color:var(--suave) !important;
  transition:color .16s ease, border-color .16s ease !important;
}
.opr-bl-articulo .opr-bl-indice a:hover{color:var(--tinta) !important}
.opr-bl-articulo .opr-bl-indice a.es-aqui{color:var(--tinta) !important; font-weight:700 !important; border-left-color:var(--p950) !important}

@media (max-width:1279px){
  .opr-bl-articulo .opr-bl-indice{
    position:static !important; padding:18px 20px !important; margin-bottom:32px !important;
    border-right:0 !important; border-radius:var(--radio) !important; background:var(--p100) !important;
  }
  .opr-bl-articulo .opr-bl-indice a{padding-left:0 !important; border-left:0 !important}
  .opr-bl-articulo .opr-bl-indice a.es-aqui{border-left:0 !important}
}

/* =====================================================================
   EL CUERPO DEL ARTÍCULO
   ---------------------------------------------------------------------
   Todo lo que el editor de WordPress puede escribir. Ancho de línea de 60ch:
   `ch` es el ancho del cero, no el de una letra media, así que 60ch salen
   unos 68 caracteres reales, que es lo que pide el documento 01, punto 3.3.
   ===================================================================== */

.opr-bl-articulo .opr-bl-cuerpo{
  max-width:100% !important;
  font-size:1.0625rem !important; line-height:1.72 !important; color:var(--p900) !important;
}
/* La línea de lectura, a 60ch. `ch` es el ancho del cero, no el de una letra
   media: 60ch salen unos 68 caracteres reales, que es lo que pide el
   documento 01, punto 3.3. Con 68ch salen 77 y la línea se hace larga.
   Va en los bloques de texto y NO en la caja entera, para que una tabla o
   una imagen puedan usar los 700 px de la columna. */
.opr-bl-articulo .opr-bl-cuerpo > p,
.opr-bl-articulo .opr-bl-cuerpo > ul,
.opr-bl-articulo .opr-bl-cuerpo > ol,
.opr-bl-articulo .opr-bl-cuerpo > blockquote,
.opr-bl-articulo .opr-bl-cuerpo > h2,
.opr-bl-articulo .opr-bl-cuerpo > h3,
.opr-bl-articulo .opr-bl-cuerpo > h4{max-width:60ch !important}

.opr-bl-articulo .opr-bl-cuerpo > *:first-child{margin-top:0 !important}

.opr-bl-articulo .opr-bl-cuerpo p{margin:0 0 1.15em !important; text-wrap:pretty !important}

.opr-bl-articulo .opr-bl-cuerpo h2{
  margin:2.1em 0 .5em !important; scroll-margin-top:110px !important;
  font-size:clamp(1.375rem,2.4vw,1.6rem) !important; font-weight:800 !important;
  line-height:1.2 !important; letter-spacing:-.024em !important; color:var(--tinta) !important; text-wrap:balance !important;
}
.opr-bl-articulo .opr-bl-cuerpo h3{
  margin:1.7em 0 .45em !important; scroll-margin-top:110px !important;
  font-size:1.125rem !important; font-weight:700 !important; line-height:1.32 !important;
  letter-spacing:-.018em !important; color:var(--tinta) !important; text-wrap:balance !important;
}
.opr-bl-articulo .opr-bl-cuerpo h4{
  margin:1.5em 0 .4em !important;
  font-size:1rem !important; font-weight:700 !important; line-height:1.4 !important; color:var(--tinta) !important;
}

/* Las listas: el reset del núcleo les quita la viñeta y la sangría. */
.opr-bl-articulo .opr-bl-cuerpo ul,
.opr-bl-articulo .opr-bl-cuerpo ol{margin:0 0 1.15em !important; padding-left:1.35em !important}
.opr-bl-articulo .opr-bl-cuerpo ul li{list-style:disc !important; display:list-item !important}
.opr-bl-articulo .opr-bl-cuerpo ol li{list-style:decimal !important; display:list-item !important}
.opr-bl-articulo .opr-bl-cuerpo li{margin-bottom:.45em !important; padding-left:.2em !important}
.opr-bl-articulo .opr-bl-cuerpo li::marker{color:var(--p500) !important}
.opr-bl-articulo .opr-bl-cuerpo li > ul,
.opr-bl-articulo .opr-bl-cuerpo li > ol{margin:.5em 0 0 !important}

/* Los enlaces del texto van subrayados. Un enlace dentro de un párrafo que
   solo cambia de color no se ve, y aquí los enlaces internos son la mitad
   del trabajo: llevan del artículo al tema, al diccionario y a las bases. */
.opr-bl-articulo .opr-bl-cuerpo a{
  color:var(--tinta) !important; font-weight:600 !important;
  text-decoration:underline !important; text-underline-offset:3px !important;
  text-decoration-thickness:1.5px !important; text-decoration-color:var(--p400) !important;
  transition:text-decoration-color .16s ease !important;
}
.opr-bl-articulo .opr-bl-cuerpo a:hover{text-decoration-color:var(--p950) !important}

.opr-bl-articulo .opr-bl-cuerpo strong,
.opr-bl-articulo .opr-bl-cuerpo b{font-weight:700 !important; color:var(--tinta) !important}
.opr-bl-articulo .opr-bl-cuerpo em,
.opr-bl-articulo .opr-bl-cuerpo i{font-style:italic !important}
.opr-bl-articulo .opr-bl-cuerpo sup,
.opr-bl-articulo .opr-bl-cuerpo sub{font-size:.72em !important; line-height:0 !important}

/* La cita: filete a la izquierda y nada más. Sin comillas gigantes de
   adorno ni fondo de color, que es lo que convierte una cita en un cartel. */
.opr-bl-articulo .opr-bl-cuerpo blockquote{
  margin:1.7em 0 !important; padding:2px 0 2px 20px !important;
  border-left:3px solid var(--p300) !important;
  color:var(--suave) !important; font-size:1.0625rem !important;
}
.opr-bl-articulo .opr-bl-cuerpo blockquote p:last-child{margin-bottom:0 !important}
.opr-bl-articulo .opr-bl-cuerpo blockquote cite{
  display:block !important; margin-top:10px !important; font-size:.84375rem !important;
  font-style:normal !important; color:var(--tenue) !important;
}

.opr-bl-articulo .opr-bl-cuerpo hr{
  margin:2.4em 0 !important; height:1px !important; background:var(--borde) !important; border:0 !important;
}

/* Imágenes y figuras. Se salen del ancho de lectura a los dos lados hasta
   donde da la columna: una foto encajonada en 60ch se ve pequeña y triste. */
.opr-bl-articulo .opr-bl-cuerpo img{
  display:block !important; max-width:100% !important; height:auto !important;
  border-radius:var(--radio-s) !important; background:var(--p100) !important;
}
.opr-bl-articulo .opr-bl-cuerpo figure{margin:1.9em 0 !important}
.opr-bl-articulo .opr-bl-cuerpo figcaption{
  margin-top:10px !important; font-size:.8125rem !important; line-height:1.5 !important; color:var(--tenue) !important; text-wrap:pretty !important;
}

/* Las tablas se desplazan dentro de su caja. Una tabla de baremos en un
   móvil de 390 px no cabe de ninguna manera, y lo que no puede pasar es que
   arrastre la página entera hacia la derecha. */
.opr-bl-articulo .opr-bl-cuerpo table{
  width:100% !important; margin:0 !important; border-collapse:collapse !important;
  font-size:.9375rem !important; line-height:1.5 !important;
}
.opr-bl-articulo .opr-bl-cuerpo .wp-block-table,
.opr-bl-articulo .opr-bl-cuerpo figure.wp-block-table{
  margin:1.9em 0 !important; overflow-x:auto !important; -webkit-overflow-scrolling:touch !important;
}
.opr-bl-articulo .opr-bl-cuerpo th,
.opr-bl-articulo .opr-bl-cuerpo td{
  padding:10px 13px !important; text-align:left !important; border-bottom:1px solid var(--borde) !important;
  vertical-align:top !important;
}
.opr-bl-articulo .opr-bl-cuerpo th{
  font-weight:700 !important; color:var(--tinta) !important; background:var(--p50) !important;
  border-bottom-color:var(--borde2) !important; white-space:nowrap !important;
}
.opr-bl-articulo .opr-bl-cuerpo tbody tr:last-child td{border-bottom:0 !important}

/* Código. Sin tipografía monoespaciada de adorno en el resto del sitio
   —documento 01, punto 3.4— pero dentro de un bloque de código sí: ahí la
   mono no decora, alinea. */
.opr-bl-articulo .opr-bl-cuerpo code{
  padding:2px 6px !important; border-radius:5px !important; background:var(--p100) !important;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important;
  font-size:.875em !important; color:var(--p900) !important;
}
.opr-bl-articulo .opr-bl-cuerpo pre{
  margin:1.7em 0 !important; padding:16px 18px !important; border-radius:var(--radio-s) !important;
  background:var(--p950) !important; color:var(--p100) !important; overflow-x:auto !important;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important;
  font-size:.84375rem !important; line-height:1.6 !important;
}
.opr-bl-articulo .opr-bl-cuerpo pre code{padding:0 !important; background:none !important; color:inherit !important; font-size:1em !important}

/* Los bloques del editor que traen su propia caja. */
.opr-bl-articulo .opr-bl-cuerpo .wp-block-image{margin:1.9em 0 !important}
.opr-bl-articulo .opr-bl-cuerpo .wp-block-separator{
  margin:2.4em auto !important; width:100% !important; height:1px !important; background:var(--borde) !important; border:0 !important;
}
.opr-bl-articulo .opr-bl-cuerpo .wp-block-embed,
.opr-bl-articulo .opr-bl-cuerpo .wp-block-embed__wrapper{margin:1.9em 0 !important; max-width:100% !important}
.opr-bl-articulo .opr-bl-cuerpo iframe{max-width:100% !important; border-radius:var(--radio-s) !important}
.opr-bl-articulo .opr-bl-cuerpo .aligncenter{margin-left:auto !important; margin-right:auto !important; text-align:center !important}

/* --- lo siguiente --- */
.opr-bl-articulo .opr-bl-siguientes{
  margin-top:clamp(52px,6vw,86px) !important; padding-top:clamp(32px,3.6vw,48px) !important;
  border-top:1px solid var(--borde) !important;
}
.opr-bl-articulo .opr-bl-siguientes-tit{margin-bottom:22px !important}

/* =====================================================================
   LAS HERRAMIENTAS DENTRO DEL ARTÍCULO · v1.0.14
   ---------------------------------------------------------------------
   Calculadora de sueldo, comprobador de requisitos y comprobador de IMC.
   Viven dentro de `.opr-bl-cuerpo`, así que las reglas del cuerpo —párrafos,
   listas con viñeta, enlaces subrayados, tablas con fondo en la cabecera—
   también les caen encima. Esas pesan (0,2,1); todo lo de aquí va con TRES
   clases, (0,3,0) o más, para ganarles siempre sin depender del orden.

   El color, solo cuando significa algo: verde «cumples», rojo «no cumples»,
   ámbar «depende de algo más». Lo que es información va en gris.
   ===================================================================== */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-herr{
  margin:2.2em 0 !important; padding:clamp(18px,3vw,28px) !important;
  border:1px solid var(--borde2) !important; border-radius:var(--radio) !important;
  background:var(--p50) !important; max-width:100% !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tit{
  margin:0 0 .35em !important; font-size:clamp(1.1875rem,2.2vw,1.375rem) !important; font-weight:800 !important;
  line-height:1.25 !important; letter-spacing:-.02em !important; color:var(--tinta) !important; scroll-margin-top:110px !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-ent{
  margin:0 0 18px !important; max-width:62ch !important; font-size:.9375rem !important; line-height:1.6 !important; color:var(--suave) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-form{
  display:grid !important; grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr)) !important; gap:16px 18px !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-campo{display:flex !important; flex-direction:column !important; gap:7px !important; min-width:0 !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-lab{
  font-size:.8125rem !important; font-weight:700 !important; line-height:1.35 !important; color:var(--tinta) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-ayuda{font-size:.75rem !important; line-height:1.45 !important; color:var(--tenue) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-in{
  width:100% !important; min-height:46px !important; padding:10px 12px !important;
  border:1.5px solid var(--borde2) !important; border-radius:var(--radio-s) !important;
  background:var(--superficie) !important; color:var(--tinta) !important;
  font-size:1rem !important; line-height:1.3 !important; font-variant-numeric:tabular-nums !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-in:hover{border-color:var(--p400) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-in:focus{border-color:var(--p700) !important; outline:2px solid var(--p950) !important; outline-offset:1px !important}
/* El desplegable pierde su flecha con el `appearance:none` del núcleo: se le
   devuelve una, dibujada, en el tono de la tinta suave. */
.opr-bl-articulo .opr-bl-herr select.opr-bl-herr-in{
  padding-right:38px !important; cursor:pointer !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23475362' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important; background-position:right 14px center !important; background-size:12px 8px !important;
}
/* El segmentado del núcleo, a lo ancho de su campo y con los botones
   repartidos a partes iguales. Si una opción no cabe, parte su texto en dos
   líneas dentro de su botón en vez de mandar el botón a otra fila, que es lo
   que hacía y dejaba una píldora gorda con los botones descolocados. */
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-seg{display:flex !important; flex-wrap:nowrap !important; width:100% !important; border-radius:14px !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-seg button{
  flex:1 1 0 !important; min-width:0 !important; min-height:40px !important; padding:8px 10px !important; border-radius:10px !important;
  white-space:normal !important; text-align:center !important; line-height:1.25 !important;
}

.opr-bl-articulo .opr-bl-herr .opr-bl-herr-res{
  margin-top:20px !important; padding-top:20px !important; border-top:1px solid var(--borde2) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-cifra{display:flex !important; flex-direction:column !important; gap:2px !important; margin-bottom:14px !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-cifra span{font-size:.8125rem !important; font-weight:600 !important; color:var(--tenue) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-cifra b{
  font-size:clamp(1.75rem,4.2vw,2.375rem) !important; font-weight:800 !important; line-height:1.1 !important;
  letter-spacing:-.03em !important; color:var(--tinta) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-cifra small{font-size:.8125rem !important; color:var(--suave) !important}

.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla{width:100% !important; margin:0 0 12px !important; border-collapse:collapse !important; font-size:.9375rem !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla th,
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla td{
  padding:8px 0 !important; border-bottom:1px solid var(--borde) !important; background:transparent !important;
  font-weight:500 !important; color:var(--suave) !important; white-space:normal !important; text-align:left !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla td{
  text-align:right !important; white-space:nowrap !important; padding-left:14px !important;
  font-variant-numeric:tabular-nums !important; color:var(--tinta) !important; font-weight:600 !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla tfoot th,
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-tabla tfoot td{
  /* 2 px y no 1: con `border-collapse` y dos bordes del mismo grueso gana el
     de la celda de arriba, y la raya del total salía solo en una columna. */
  border-bottom:0 !important; border-top:2px solid var(--p400) !important; font-weight:800 !important; color:var(--tinta) !important;
}

.opr-bl-articulo .opr-bl-herr .opr-bl-herr-veredicto{
  margin:0 0 12px !important; padding:12px 14px !important; border-radius:var(--radio-s) !important;
  font-size:.9375rem !important; line-height:1.5 !important; font-weight:500 !important;
  background:var(--p100) !important; color:var(--p900) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-veredicto.es-ok{background:var(--ok100) !important; color:var(--ok900) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-veredicto.es-no{background:var(--no100) !important; color:var(--no900) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-veredicto.es-aviso{background:var(--av100) !important; color:var(--av900) !important}

.opr-bl-articulo .opr-bl-herr .opr-bl-herr-reqs{margin:0 !important; padding:0 !important; display:grid !important; gap:10px !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req{
  display:grid !important; grid-template-columns:24px minmax(0,1fr) !important; gap:10px !important;
  margin:0 !important; padding:0 !important; list-style:none !important; font-size:.9375rem !important; line-height:1.5 !important;
}
/* `> div >` y no un `span` a secas: la marca redonda también es un `span`, y
   una regla más ancha le quitaba el centrado y el color. Se vio en la vista
   previa, con los signos pegados arriba a la izquierda de su círculo. */
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req > div > b{display:block !important; font-weight:700 !important; color:var(--tinta) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req > div > span{display:block !important; color:var(--suave) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-marca{
  display:flex !important; align-items:center !important; justify-content:center !important;
  width:24px !important; height:24px !important; margin-top:1px !important; border-radius:50% !important;
  font-size:.8125rem !important; font-weight:800 !important; line-height:1 !important;
  background:var(--p100) !important; color:var(--p500) !important;
}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req.es-ok .opr-bl-herr-marca{background:var(--ok100) !important; color:var(--ok600) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req.es-no .opr-bl-herr-marca{background:var(--no100) !important; color:var(--no600) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-req.es-aviso .opr-bl-herr-marca{background:var(--av100) !important; color:var(--av600) !important}

.opr-bl-articulo .opr-bl-herr .opr-bl-herr-falta{margin:0 !important; font-size:.875rem !important; line-height:1.55 !important; color:var(--suave) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-falta b{color:var(--tinta) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-nota{margin:16px 0 0 !important; font-size:.8125rem !important; line-height:1.5 !important; color:var(--suave) !important}
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-fuente{margin:6px 0 0 !important; font-size:.75rem !important; line-height:1.5 !important; color:var(--tenue) !important}

/* --- «Actualizado el» debajo del titular --- */
.opr-bl-articulo .opr-bl-datos .opr-bl-actualizado{font-weight:600 !important}

/* --- la caja que lleva a la guía, antes de «Lo siguiente» --- */
.opr-bl-articulo .opr-caja .opr-bl-guia-ir{
  display:block !important; margin-top:clamp(44px,5vw,68px) !important; padding:18px 20px !important;
  border:1px solid var(--borde) !important; border-radius:var(--radio) !important; background:var(--p100) !important;
  transition:background .16s ease, border-color .16s ease !important;
}
.opr-bl-articulo .opr-caja .opr-bl-guia-ir:hover{background:var(--superficie) !important; border-color:var(--borde2) !important}
.opr-bl-articulo .opr-caja .opr-bl-guia-ir b{display:block !important; font-size:1.0625rem !important; font-weight:700 !important; letter-spacing:-.012em !important; color:var(--tinta) !important}
.opr-bl-articulo .opr-caja .opr-bl-guia-ir span{display:block !important; margin-top:4px !important; font-size:.9375rem !important; line-height:1.55 !important; color:var(--suave) !important}


/* --- CAJONES DE DESCARGA ---------------------------------------------------
   Lo que se descarga va en un cajón, no en una frase: petición de Sergio,
   29-09-2026. Marcado dentro del cuerpo de la entrada:
     <div class="opr-bl-descargas">
       <a class="opr-bl-descarga [es-nuestra]" href="…pdf">
         <span class="opr-bl-descarga-icono"></span>
         <span class="opr-bl-descarga-texto">
           <span class="opr-bl-descarga-titulo">…</span>
           <span class="opr-bl-descarga-meta">…</span>
           <span class="opr-bl-descarga-desc">…</span>
         </span>
         <span class="opr-bl-descarga-boton">Descargar</span>
       </a>
     </div>
   Todo el cajón es el enlace. `es-nuestra` lo pone en noche: lo nuestro,
   primero y distinto. Los iconos van por máscara, así toman el color del
   texto y el cuerpo de la entrada no lleva SVG. Especificidad (0,3,1) o más:
   le gana al reset `.opr *` y a la regla de enlaces del cuerpo. */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descargas{display:grid !important; gap:12px !important; margin:1.6em 0 1.9em !important}
/* WordPress mete <br> entre cajón y cajón y a veces un <p> alrededor (wpautop):
   el <br> se quita y el <p> desaparece de la rejilla. */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descargas > br{display:none !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descargas > p{display:contents !important; margin:0 !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descargas > p:empty{display:none !important}
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga{
  display:grid !important; grid-template-columns:48px minmax(0,1fr) auto !important; align-items:center !important; gap:14px 16px !important;
  padding:16px 18px !important; border:1px solid var(--borde) !important; border-radius:var(--radio) !important;
  background:var(--superficie) !important; color:var(--tinta) !important; font-weight:400 !important;
  text-decoration:none !important; transition:border-color .16s ease, box-shadow .16s ease, transform .16s ease !important;
}
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga:hover{
  border-color:var(--borde2) !important; box-shadow:0 6px 18px -10px rgba(18,23,28,.35) !important; transform:translateY(-1px) !important;
}
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga:focus-visible{outline:2px solid var(--tinta) !important; outline-offset:3px !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-icono{
  position:relative !important; display:block !important; width:48px !important; height:48px !important; border-radius:10px !important; background:var(--p100) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-icono::before{
  content:"" !important; position:absolute !important; inset:0 !important; margin:auto !important; width:26px !important; height:26px !important; background:currentColor !important;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 3v5h5'/%3E%3Cpath d='M12 11v6'/%3E%3Cpath d='M9.5 14.5 12 17l2.5-2.5'/%3E%3C/svg%3E") center/contain no-repeat !important; mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 3v5h5'/%3E%3Cpath d='M12 11v6'/%3E%3Cpath d='M9.5 14.5 12 17l2.5-2.5'/%3E%3C/svg%3E") center/contain no-repeat !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-texto{display:block !important; min-width:0 !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-titulo{
  display:block !important; font-size:1.0625rem !important; line-height:1.3 !important; font-weight:700 !important; letter-spacing:-.012em !important; color:inherit !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-meta{
  display:block !important; margin-top:3px !important; font-size:.8125rem !important; line-height:1.45 !important; font-weight:600 !important; color:var(--suave) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-desc{
  display:block !important; margin-top:5px !important; font-size:.9375rem !important; line-height:1.5 !important; color:var(--suave) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-boton{
  display:inline-flex !important; align-items:center !important; justify-content:center !important; gap:8px !important; min-height:44px !important; padding:0 18px !important;
  border-radius:999px !important; background:var(--p950) !important; color:#FFFFFF !important; font-size:.9375rem !important; font-weight:700 !important;
  line-height:1 !important; white-space:nowrap !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-boton::before{
  content:"" !important; display:block !important; width:16px !important; height:16px !important; background:currentColor !important;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v12'/%3E%3Cpath d='m6 11 6 6 6-6'/%3E%3Cpath d='M5 20h14'/%3E%3C/svg%3E") center/contain no-repeat !important; mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v12'/%3E%3Cpath d='m6 11 6 6 6-6'/%3E%3Cpath d='M5 20h14'/%3E%3C/svg%3E") center/contain no-repeat !important;
}
/* La nuestra, en noche */
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga.es-nuestra{background:var(--p950) !important; border-color:var(--p950) !important; color:#FFFFFF !important}
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga.es-nuestra:hover{border-color:var(--p800) !important; box-shadow:0 8px 22px -10px rgba(18,23,28,.6) !important}
.opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga.es-nuestra:focus-visible{outline-color:var(--p950) !important}
.opr-bl-articulo .opr-bl-cuerpo .es-nuestra .opr-bl-descarga-icono{background:var(--p800) !important}
.opr-bl-articulo .opr-bl-cuerpo .es-nuestra .opr-bl-descarga-meta,
.opr-bl-articulo .opr-bl-cuerpo .es-nuestra .opr-bl-descarga-desc{color:var(--p300) !important}
.opr-bl-articulo .opr-bl-cuerpo .es-nuestra .opr-bl-descarga-boton{background:#FFFFFF !important; color:var(--p950) !important}
/* Móvil: el botón baja a su renglón, a lo ancho */
@media (max-width:560px){
  .opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga{grid-template-columns:44px minmax(0,1fr) !important; align-items:start !important; padding:14px 14px 16px !important; gap:12px 14px !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-icono{width:44px !important; height:44px !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-descarga-boton{grid-column:1 / -1 !important; width:100% !important}
}
@media (prefers-reduced-motion:reduce){
  .opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga{transition:none !important}
  .opr-bl-articulo .opr-bl-cuerpo a.opr-bl-descarga:hover{transform:none !important}
}

/* =====================================================================
   AL FINAL, LO QUE TIENE QUE GANAR
   ---------------------------------------------------------------------
   `[hidden]` es un selector de atributo y pesa lo mismo que una clase, así
   que `.opr-bl-articulo .opr-bl-indice[hidden]` mide (0,2,1) y le gana a
   `.opr-bl-articulo .opr-bl-indice{position:sticky … !important}`, que mide (0,2,0).
   Va al final por costumbre, no por necesidad: aquí la especificidad ya
   decide. Trampa nº 4 del documento 02.
   ===================================================================== */
.opr-bl-articulo .opr-bl-indice[hidden]{display:none !important}
/* El resultado de una herramienta nace oculto. Misma trampa del `hidden`. */
.opr-bl-articulo .opr-bl-herr .opr-bl-herr-res[hidden]{display:none !important}

/* --- también te puede interesar · v1.0.21 ---------------------------------
   Va entre la caja de la guía y «Lo siguiente». Es una LISTA y no otra rejilla
   de tarjetas a propósito: dos rejillas iguales seguidas se leen como una sola
   de seis y la segunda pierde el sentido. Cada fila: miniatura 16:9, categoría,
   titular y minutos. La fila entera se pincha con el enlace estirado del
   titular, como las tarjetas (`position:relative` en la fila, no en el enlace).
   Ancho de lectura, no el de la caja: es una lista de títulos. */
.opr-bl-articulo .opr-bl-relacionados{
  margin-top:clamp(52px,6vw,86px) !important; padding-top:clamp(32px,3.6vw,48px) !important;
  border-top:1px solid var(--borde) !important;
}
.opr-bl-articulo .opr-bl-relacionados-tit{margin-bottom:14px !important}
.opr-bl-articulo .opr-bl-rel-lista{list-style:none !important; margin:0 !important; padding:0 !important; max-width:760px !important}
.opr-bl-articulo .opr-bl-rel{
  position:relative !important; list-style:none !important; margin:0 !important; padding:16px 0 !important;
  display:flex !important; align-items:center !important; gap:18px !important;
  border-bottom:1px solid var(--borde) !important;
}
.opr-bl-articulo .opr-bl-rel:last-child{border-bottom:0 !important}
.opr-bl-articulo .opr-bl-rel::before{content:none !important; display:none !important}
.opr-bl-articulo .opr-bl-rel-media{
  flex:0 0 152px !important; width:152px !important; aspect-ratio:16 / 9 !important; overflow:hidden !important;
  border-radius:var(--radio-s) !important; background:var(--p100) !important; display:block !important;
}
.opr-bl-articulo .opr-bl-rel-media img{width:100% !important; height:100% !important; object-fit:cover !important; display:block !important; margin:0 !important; border-radius:0 !important}
.opr-bl-articulo .opr-bl-rel-media .opr-bl-cartel-etq{display:none !important}
.opr-bl-articulo .opr-bl-rel-texto{display:flex !important; flex-direction:column !important; gap:5px !important; min-width:0 !important}
.opr-bl-articulo .opr-bl-rel-texto .opr-bl-etq{align-self:flex-start !important}
.opr-bl-articulo .opr-bl-rel-tit{
  font-size:1.0625rem !important; font-weight:700 !important; line-height:1.35 !important; letter-spacing:-.012em !important;
  color:var(--tinta) !important; text-decoration:none !important; overflow-wrap:anywhere !important;
}
.opr-bl-articulo .opr-bl-rel-tit::after{content:"" !important; position:absolute !important; inset:0 !important; z-index:1 !important}
.opr-bl-articulo .opr-bl-rel:hover .opr-bl-rel-tit{text-decoration:underline !important; text-underline-offset:3px !important}
.opr-bl-articulo .opr-bl-rel-tit:focus-visible{outline:2px solid var(--tinta) !important; outline-offset:3px !important; border-radius:4px !important}
.opr-bl-articulo .opr-bl-rel-min{margin:0 !important}
@media (max-width:620px){
  .opr-bl-articulo .opr-bl-rel{gap:14px !important; padding:14px 0 !important; align-items:flex-start !important}
  .opr-bl-articulo .opr-bl-rel-media{flex-basis:104px !important; width:104px !important}
  .opr-bl-articulo .opr-bl-rel-tit{font-size:1rem !important}
}

/* =====================================================================
   PIEZAS PARA QUE EL ARTÍCULO SE LEA MEJOR · v1.0.22
   ---------------------------------------------------------------------
   Encargo de Sergio del 30 de septiembre de 2026: los artículos «parecen un
   poco sosos» y «se hacen pesados». Aprobadas tres ideas (la del test dentro
   del artículo, no): el resumen en cifras, los avisos con color que significa
   algo y la línea de tiempo y la comparativa en vez de tablas largas.
   Todo va DENTRO del cuerpo de la entrada, escrito a mano en el HTML. Reglas
   para escribirlas (están también en el documento 20):
     · cada pieza, en UNA línea: `wpautop` mete `<p>` y `<br>` en los saltos;
     · DENTRO de una pieza, lo que va antes de un `<div>` o un `<p>` tiene que
       ser también de bloque (`<div>` o `<p>`), nunca un `<span>` o un `<b>`
       suelto: `wpautop` lo cierra con un `</p>` huérfano y el navegador pinta
       un párrafo vacío. Comprobado el 30-09-2026 con un borrador en el sitio;
       por eso el título del resumen es un `<div>`, el del aviso un `<p>` y el
       rótulo de cada fila de la comparativa un `<div>`;
     · nada de `<ul>` ni `<ol>` dentro: las listas del cuerpo llevan viñeta y
       sangría, y quitárselas pesa más que usar `<div>`;
     · el color sigue el documento 01, 2.3: ámbar = aviso, rojo = fallo o lo que
       elimina, verde = acierto o lo que suma. Nunca de adorno. Los colores de
       cuerpo (rojo Ertzaintza, lima Udaltzaingoa) NO: viven solo en el hero.
   Especificidad (0,3,0) o más, para ganar al reset `.opr *` y a las reglas
   del cuerpo (`.opr-bl-cuerpo p`, `a`, `strong`).
   ===================================================================== */

/* Lo que wpautop deja entre hijos directos de cualquier pieza */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves > br,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-linea > br,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara > br,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso > br{display:none !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves > p:empty,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-linea > p:empty,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara > p:empty,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso > p:empty{display:none !important}

/* --- 1 · EN 30 SEGUNDOS: el resumen en cifras ---------------------------
   <div class="opr-bl-claves"><div class="opr-bl-claves-tit">En 30 segundos</div>
     <div class="opr-bl-clave"><b>593</b><span>plazas previstas</span></div> …
   </div>
   Entre dos y cuatro cifras. La cifra manda; el texto, debajo, en gris. Si una
   cifra no es oficial, se dice en su texto («previstas»), no con un color. */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves{
  display:grid !important; grid-template-columns:repeat(auto-fit,minmax(138px,1fr)) !important; gap:18px 22px !important;
  margin:1.5em 0 2em !important; padding:20px 22px 22px !important;
  border:1px solid var(--borde) !important; border-radius:var(--radio) !important; background:var(--p50) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves-tit{
  grid-column:1 / -1 !important; display:block !important; margin:0 0 -4px !important;
  font-size:.875rem !important; font-weight:700 !important; line-height:1.3 !important; letter-spacing:-.01em !important; color:var(--suave) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-clave{display:flex !important; flex-direction:column !important; gap:4px !important; min-width:0 !important}
/* v1.0.23 · La cifra NO se parte. En el sueldo, «8.416,21 €» salía partido en
   «8.416,2 / 1 €» y el euro bajaba de renglón (captura de Sergio, 30-09-2026):
   la letra se medía con el ancho de la VENTANA (`vw`) y no con el de la caja,
   que junto al índice del artículo es mucho más estrecha. Ahora la caja es un
   contenedor y la cifra se mide con su ancho (`cqi`), sin partirse nunca.
   La primera `font-size` es el respaldo para un navegador sin `cqi`. */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves{container-type:inline-size !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-clave > b{
  display:block !important; font-size:1.375rem !important; font-size:clamp(1.125rem,3.4cqi,1.875rem) !important; font-weight:800 !important; line-height:1.08 !important;
  letter-spacing:-.03em !important; color:var(--tinta) !important; font-variant-numeric:tabular-nums !important; white-space:nowrap !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-clave > span{
  display:block !important; font-size:.875rem !important; line-height:1.4 !important; color:var(--suave) !important; text-wrap:pretty !important;
}
@media (max-width:560px){
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-claves{grid-template-columns:repeat(2,minmax(0,1fr)) !important; padding:16px 16px 18px !important; gap:16px 16px !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-clave > b{font-size:1.25rem !important; font-size:clamp(1.0625rem,6.6cqi,1.5rem) !important}
}

/* --- 2 · LOS AVISOS: el color dice qué es ------------------------------
   <div class="opr-bl-aviso es-aviso|es-fallo|es-acierto"><p class="opr-bl-aviso-tit">No es oficial</p><p>…</p></div>
   es-aviso   (ámbar) · ojo, no está confirmado, puede cambiar
   es-fallo   (rojo)  · lo que te elimina o el error que cuesta la plaza
   es-acierto (verde) · lo que suma o lo que conviene hacer
   Fondo claro del estado, filete a la izquierda y un icono por máscara. El
   texto, en tinta: el ámbar no aguanta texto de color encima (01, 2.3). */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso{
  position:relative !important; display:block !important; max-width:60ch !important;
  margin:1.4em 0 1.7em !important; padding:15px 18px 15px 52px !important;
  border-radius:var(--radio-s) !important; border-left:4px solid var(--av500) !important; background:var(--av100) !important;
  color:var(--p900) !important; font-size:1rem !important; line-height:1.6 !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso::before{
  content:"" !important; position:absolute !important; left:18px !important; top:17px !important; width:20px !important; height:20px !important; background:var(--av600) !important;
  -webkit-mask:var(--opr-bl-aviso-icono) center/contain no-repeat !important; mask:var(--opr-bl-aviso-icono) center/contain no-repeat !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso{
  --opr-bl-aviso-icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E");
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-fallo{border-left-color:var(--no500) !important; background:var(--no100) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-fallo::before{background:var(--no600) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-fallo{
  --opr-bl-aviso-icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9.5'/%3E%3Cpath d='m15 9-6 6'/%3E%3Cpath d='m9 9 6 6'/%3E%3C/svg%3E");
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-acierto{border-left-color:var(--ok500) !important; background:var(--ok100) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-acierto::before{background:var(--ok600) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso.es-acierto{
  --opr-bl-aviso-icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9.5'/%3E%3Cpath d='m8 12.5 2.7 2.7L16.5 9.5'/%3E%3C/svg%3E");
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso-tit{
  display:block !important; margin:0 0 3px !important; font-size:1rem !important; font-weight:800 !important; line-height:1.4 !important; letter-spacing:-.012em !important; color:var(--tinta) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso p{margin:0 0 .6em !important; max-width:none !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso p:last-child{margin-bottom:0 !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso a{text-decoration-color:currentColor !important}
@media (max-width:560px){
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso{padding:13px 14px 14px 44px !important; font-size:.9688rem !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-aviso::before{left:14px !important; top:15px !important; width:18px !important; height:18px !important}
}

/* --- 3 · LA LÍNEA DE TIEMPO ------------------------------------------
   <div class="opr-bl-linea">
     <div class="opr-bl-hito es-hecho|es-previsto"><span class="opr-bl-hito-fecha">24 nov 2025</span><b class="opr-bl-hito-tit">Bases en el BOPV</b><span class="opr-bl-hito-texto">opcional</span></div> …
   </div>
   es-hecho: punto relleno y raya continua (pasó, con fecha oficial).
   es-previsto: punto hueco, raya discontinua y «previsto» junto a la fecha
   (lo pone la hoja, no hay que escribirlo). La diferencia es de forma, no de
   color: una previsión no es un aviso, y pintarla de ámbar ensuciaría todo. */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-linea{display:block !important; margin:1.5em 0 2em !important; padding:0 !important; max-width:62ch !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito{
  position:relative !important; display:block !important; margin:0 !important; padding:0 0 20px 34px !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito:last-child{padding-bottom:0 !important}
/* la raya, del punto de este hito al del siguiente */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito::before{
  content:"" !important; position:absolute !important; left:7px !important; top:18px !important; bottom:-4px !important; width:2px !important; background:var(--p300) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito:last-child::before{display:none !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito.es-previsto::before{
  background:repeating-linear-gradient(to bottom, var(--p300) 0 5px, transparent 5px 10px) !important;
}
/* el punto */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito::after{
  content:"" !important; position:absolute !important; left:0 !important; top:4px !important; width:16px !important; height:16px !important; border-radius:50% !important;
  background:var(--p950) !important; box-shadow:0 0 0 4px var(--superficie) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito.es-previsto::after{
  background:var(--superficie) !important; box-shadow:inset 0 0 0 2.5px var(--p500), 0 0 0 4px var(--superficie) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito-fecha{
  display:block !important; font-size:.8125rem !important; font-weight:700 !important; line-height:1.5 !important; color:var(--suave) !important; font-variant-numeric:tabular-nums !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito.es-previsto .opr-bl-hito-fecha::after{
  content:" · previsto" !important; font-weight:600 !important; color:var(--tenue) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito-tit{
  display:block !important; font-size:1.0625rem !important; font-weight:700 !important; line-height:1.4 !important; letter-spacing:-.012em !important; color:var(--tinta) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito.es-previsto .opr-bl-hito-tit{color:var(--p800) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-hito-texto{
  display:block !important; margin-top:2px !important; font-size:.9375rem !important; line-height:1.5 !important; color:var(--suave) !important;
}

/* --- 4 · LA COMPARATIVA ----------------------------------------------
   <div class="opr-bl-compara">
     <div class="opr-bl-compara-cab"><span></span><b>Ertzaintza</b><b>Policía Local</b></div>
     <div class="opr-bl-compara-fila"><div class="opr-bl-compara-rot">Permisos</div><div>El B</div><div>El B y, en algunos ayuntamientos, más</div></div> …
   </div>
   Tres columnas en pantalla ancha; en el móvil el rótulo de la fila sube a
   su renglón y las dos respuestas quedan lado a lado, que es lo que se
   compara. Monocromo: los colores de cuerpo son solo del hero (01, 2.4). */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara{
  display:block !important; margin:1.5em 0 2em !important; border:1px solid var(--borde) !important; border-radius:var(--radio) !important; overflow:hidden !important;
  background:var(--superficie) !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-cab,
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila{
  display:grid !important; grid-template-columns:minmax(0,.8fr) minmax(0,1fr) minmax(0,1fr) !important; gap:0 18px !important; padding:13px 18px !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-cab{background:var(--p950) !important; color:#FFFFFF !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-cab > b{
  display:block !important; font-size:.9375rem !important; font-weight:800 !important; line-height:1.3 !important; letter-spacing:-.012em !important; color:#FFFFFF !important;
}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila{border-top:1px solid var(--borde) !important; font-size:.9375rem !important; line-height:1.5 !important; color:var(--p900) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila:nth-child(odd){background:var(--p50) !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila > div{display:block !important; min-width:0 !important; overflow-wrap:anywhere !important}
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila > .opr-bl-compara-rot{font-weight:700 !important; color:var(--tinta) !important}
/* una fila en la que los dos dicen lo mismo: una sola celda que ocupa las dos */
.opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila > div.es-igual{grid-column:2 / -1 !important}
@media (max-width:620px){
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-cab,
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila{grid-template-columns:minmax(0,1fr) minmax(0,1fr) !important; gap:4px 14px !important; padding:12px 14px !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-cab > span:first-child{display:none !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila > .opr-bl-compara-rot{grid-column:1 / -1 !important}
  .opr-bl-articulo .opr-bl-cuerpo .opr-bl-compara-fila > div.es-igual{grid-column:1 / -1 !important}
}

/* =====================================================================
   OpoReal · Blog · la guía de la oposición · v1.0.14
   ---------------------------------------------------------------------
   Una página: portada de noche con el índice de capítulos, y debajo los
   capítulos con sus artículos numerados. Sin tarjetas con foto a propósito:
   es un índice, se lee de arriba abajo, y la mitad de los artículos todavía
   van con el cartel del escudo.

   Todo cuelga de `.opr-bl-guia` más otra clase: (0,2,x) como mínimo, que es
   lo que hace falta para ganar al reset del núcleo que se carga después.
   ===================================================================== */

.opr-bl-guia.opr-bl-guia-portada .opr-h1{max-width:22ch !important; text-wrap:balance !important}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-sub{margin-top:16px !important; max-width:62ch !important; color:var(--p300) !important}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-dato{margin-top:14px !important; color:var(--p400) !important}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-dato .opr-cifra{color:var(--p100) !important; font-weight:700 !important}

.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-indice{margin-top:clamp(22px,3vw,32px) !important}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-indice ol{display:flex !important; flex-wrap:wrap !important; gap:8px !important}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-indice a{
  display:inline-flex !important; align-items:center !important; min-height:40px !important; padding:8px 15px !important;
  border-radius:999px !important; box-shadow:inset 0 0 0 1px var(--p700) !important;
  font-size:.875rem !important; font-weight:600 !important; color:var(--p100) !important;
  transition:background .16s ease, box-shadow .16s ease !important;
}
.opr-bl-guia.opr-bl-guia-portada .opr-bl-guia-indice a:hover{background:var(--p900) !important; box-shadow:inset 0 0 0 1px var(--p500) !important}

.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-cap{margin-bottom:clamp(44px,5.5vw,72px) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-cap:last-of-type{margin-bottom:clamp(28px,3vw,40px) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-h2{
  font-size:clamp(1.5rem,3vw,2rem) !important; scroll-margin-top:110px !important; max-width:28ch !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-captxt{
  margin:10px 0 20px !important; max-width:62ch !important; font-size:1rem !important; line-height:1.6 !important; color:var(--suave) !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-lista{border-top:1px solid var(--borde) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-item{
  display:grid !important; grid-template-columns:40px minmax(0,1fr) !important; gap:14px !important;
  padding:18px 0 !important; border-bottom:1px solid var(--borde) !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-num{padding-top:4px !important; font-size:.875rem !important; font-weight:700 !important; color:var(--tenue) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-h3{
  font-size:clamp(1.0625rem,1.8vw,1.1875rem) !important; font-weight:700 !important; line-height:1.35 !important; letter-spacing:-.015em !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-h3 a{color:var(--tinta) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-h3 a:hover{text-decoration:underline !important; text-underline-offset:3px !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-ent{margin-top:5px !important; max-width:72ch !important; font-size:.9375rem !important; line-height:1.6 !important; color:var(--suave) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-meta{margin-top:6px !important; font-size:.8125rem !important; color:var(--tenue) !important}

.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-herr{
  display:grid !important; grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr)) !important; gap:12px !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-tarj{
  display:block !important; padding:16px 18px !important; border:1px solid var(--borde2) !important; border-radius:var(--radio) !important;
  background:var(--p50) !important; transition:border-color .16s ease, background .16s ease !important;
}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-tarj:hover{border-color:var(--p500) !important; background:var(--superficie) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-tarj b{display:block !important; font-size:1rem !important; font-weight:700 !important; color:var(--tinta) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-tarj span{display:block !important; margin-top:4px !important; font-size:.875rem !important; line-height:1.5 !important; color:var(--suave) !important}

.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-pie{margin-top:8px !important; font-size:.9375rem !important; color:var(--suave) !important}
.opr-bl-guia.opr-bl-guia-cuerpo .opr-bl-guia-pie a{color:var(--tinta) !important; font-weight:600 !important; text-decoration:underline !important; text-underline-offset:3px !important}
