/* =====================================================================================================================
   PULIDO (13-oct). Fundador, viendo la dirección actual: «que se vea profesional, estilizado, suave… va en buena línea pero
   hay que subir el listón», en escritorio y en móvil por igual. Esta hoja va DESPUÉS de app.css y escena.css y no cambia la
   dirección (escena + lienzo sin fichas, paleta tonal sin verde, Schibsted en la app y Newsreader solo en lo público): la afina.

   1. TOKENS (para toda la app): movimiento (150-250 ms, curvas suaves), radios coherentes, sombras en capas finas, filetes con
      canto de luz, foco y escala tipográfica. Nombres --p-*: no pisan ningún token existente.
   2. ALCANCE. Las reglas de pantalla solo actúan donde la plantilla lo pide, para no tocar las pantallas que se rehacen en
      paralelo (Inicio, Plan, Bancos, Tesorería, Impuestos, Vigilancia, «Ver todo») ni el marco (barra lateral, cabecera,
      barra inferior):
        · pantalla entera  → su primer bloque lleva .pul-p   (Mesa, Rating, Análisis, Expediente, Avisos, Mi cuenta, Cartera,
                                                              ficha del consultor)
        · secciones sueltas → cada una lleva .pul-s           (CIRBE, cuentas bancarias y aging, dentro de Bancos)
        · páginas propias   → body.pul-admin (consola) y body.pul-pub (acceso, registro, contraseña y /verificar)
   3. Siempre con prefers-reduced-motion respetado y contraste AA.
   ===================================================================================================================== */

/* ---------------------------------------------------------------- 1. tokens */
body.app{
  --p-curva:cubic-bezier(.2,.75,.25,1);          /* salida suave: casi todo */
  --p-curva-io:cubic-bezier(.45,0,.25,1);         /* ida y vuelta: alturas */
  --p-t1:150ms; --p-t2:200ms; --p-t3:250ms; --p-t-entra:460ms;
  --p-r1:7px; --p-r2:10px; --p-r3:14px; --p-r4:20px;
  --p-hilo:rgba(28,35,51,.08); --p-hilo-2:rgba(28,35,51,.14); --p-luz:rgba(255,255,255,.9);
  --p-sombra-1:0 1px 2px rgba(20,28,42,.06);
  --p-sombra-2:0 0 0 1px rgba(20,28,42,.07),0 1px 2px rgba(20,28,42,.06),0 4px 10px -6px rgba(20,28,42,.2);
  --p-sombra-3:0 0 0 1px rgba(20,28,42,.06),0 2px 4px -1px rgba(20,28,42,.07),0 14px 28px -14px rgba(20,28,42,.28);
  --p-sombra-papel:0 0 0 1px rgba(20,28,42,.05),0 1px 1px rgba(20,28,42,.05),0 6px 12px -6px rgba(20,28,42,.15),
                   0 30px 52px -28px rgba(20,28,42,.42);
  --p-pozo:inset 0 1px 2px rgba(20,28,42,.1),inset 0 0 0 1px rgba(20,28,42,.08),0 1px 0 rgba(255,255,255,.9);
  --p-foco:0 0 0 3px rgba(59,90,150,.22);
  /* escala tipográfica: frase de portada · cifra clave · título de sección · cuerpo · etiqueta · nota */
  --p-fs-frase:clamp(1.38rem,1.02rem + 1.05vw,1.8rem);
  --p-fs-cifra:clamp(1.5rem,1.15rem + .95vw,2.02rem);
  --p-fs-titulo:1.04rem; --p-fs-cuerpo:.925rem; --p-fs-et:.78rem; --p-fs-nota:.76rem;
  --p-chev:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%235f687a' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}
@keyframes p-entra{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}   /* «to» explícito: la base de .escena-entra es opacity:0 */
@keyframes p-despliega{from{opacity:0;transform:translateY(-4px)}}
@keyframes p-aparece{from{opacity:0}}

/* utilidades (cualquier pantalla puede usarlas) */
.p-tabular{font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1}
.p-oculto-movil{display:revert}
@media (max-width:640px){.p-oculto-movil{display:none!important}}

/* ---------------------------------------------------------------- 2. común a mis pantallas */
/* entrada de las secciones: más corta y sin escala (la de escena.css, .75 s con zoom, se nota demasiado) */
html.escena-js body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .escena-entra.escena-vista,
html.escena-js body.app.shell .pul-s.escena-entra.escena-vista,
html.escena-js body.app.shell .app-contenido:has(>.pul-p)>.escena-entra.escena-vista{animation:p-entra var(--p-t-entra) var(--p-curva) both;
  animation-delay:var(--escena-d,0ms)}

/* la portada no recorta: las sombras de los objetos (cheque, hoja, balance) y el halo del estado respiran */
body.app.shell .app-contenido:has(>.pul-p) :is(.portada,.nivel){overflow:visible}
/* tipografía de portada: la frase, la entradilla y la línea de estado */
body.app.shell .app-contenido:has(>.pul-p) :is(.portada,.nivel) h2{font:600 var(--p-fs-frase)/1.2 var(--f-sans);letter-spacing:-.022em;
  color:var(--f-tinta);max-width:24ch;text-wrap:balance}
body.app.shell .app-contenido:has(>.pul-p) .portada-entradilla{margin-top:12px;font:400 var(--p-fs-cuerpo)/1.62 var(--f-sans);color:var(--f-suave);
  max-width:62ch;text-wrap:pretty}
body.app.shell .app-contenido:has(>.pul-p) .portada-entradilla b{font:600 1em var(--f-sans);color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p) .portada-linea{gap:4px 12px;margin:0 0 14px;font:500 var(--p-fs-et)/1.4 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .portada-linea .estado{font:600 var(--p-fs-et)/1.4 var(--f-sans)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .estado::before{width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 14%,transparent)}
body.app.shell .app-contenido:has(>.pul-p) .portada-acciones{gap:10px;margin-top:24px}

/* cifras de portada: una hoja de instrumentos; las cifras alineadas en la misma línea aunque una etiqueta ocupe dos
   (subgrid), filetes que se desvanecen en vez de rayas duras */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifras{margin-top:24px;row-gap:0;border-top:0;padding-top:1px;
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 55%,transparent) 0 0/100% 1px no-repeat,
             linear-gradient(90deg,var(--p-luz),transparent 80%) 0 1px/100% 1px no-repeat}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra{display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:0;align-content:start;
  padding:16px 20px 2px 0;margin-right:20px;border-right:0;
  background:linear-gradient(180deg,transparent,var(--p-hilo) 22%,var(--p-hilo) 78%,transparent) 100% 0/1px 100% no-repeat}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra:last-child{background:none;margin-right:0}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra>span{align-self:end;font:550 var(--p-fs-et)/1.35 var(--f-sans);letter-spacing:.003em;color:var(--f-tenue)}
/* (proporcionales: con «tnum» la Schibsted hace la coma tan ancha como un dígito, «2 , 50») */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra b{margin-top:6px;font:600 var(--p-fs-cifra)/1.05 var(--f-sans);letter-spacing:-.03em;
  color:var(--f-tinta);font-variant-numeric:lining-nums proportional-nums;text-shadow:0 1px 0 rgba(255,255,255,.9)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra b small{margin-left:.08em;font:500 .44em/1 var(--f-sans);letter-spacing:0;color:var(--f-tenue)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra b.cifra-ko,body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra b.neg{color:var(--f-ko)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra>small{margin-top:6px;font:450 var(--p-fs-nota)/1.45 var(--f-sans);color:var(--f-suave);max-width:30ch}

/* títulos de sección y su explicación */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(.seccion-cab h3,.w-cab h3,.tarjeta-cab h3){font:600 var(--p-fs-titulo)/1.3 var(--f-sans);letter-spacing:-.012em}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(.seccion-cab p,.tarjeta-cab p,.w-cab .tenue){font:450 .8rem/1.5 var(--f-sans);color:var(--f-tenue)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .seccion-cab{row-gap:2px;margin-bottom:2px}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .nota-fuente{font:450 var(--p-fs-nota)/1.55 var(--f-sans);color:var(--f-tenue)}

/* enlaces: subrayado fino que se ilumina; los «ver más», con la flecha que avanza */
/* (solo los enlaces dentro del texto; los de navegación —índices, filas, pestañas— no se subrayan) */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(p,li>small,dd,.ifp-vacia,.nota-fuente) a:not(.btn):not(.enlace-mas):not(.pista){
  text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:rgba(59,90,150,.32);
  transition:color var(--p-t1),text-decoration-color var(--p-t2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(p,li>small,dd,.ifp-vacia,.nota-fuente) a:not(.btn):not(.enlace-mas):not(.pista):hover{
  text-decoration-color:currentColor}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .enlace-mas{font:600 .84rem var(--f-sans);transition:color var(--p-t1)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .enlace-mas .ico{transition:transform var(--p-t2) var(--p-curva)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .enlace-mas:hover .ico{transform:translateX(3px)}

/* mandos: el primario con un degradado corto y un filo de luz; el secundario, una tecla clara; el fantasma, solo el filete.
   La misma altura en todos, transiciones de 150-200 ms y el foco con anillo (no el contorno cuadrado) */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn{min-height:38px;padding:8px 15px;border-radius:var(--p-r2);
  font:600 .855rem/1.2 var(--f-sans);letter-spacing:.002em;
  transition:transform var(--p-t1) var(--p-curva),box-shadow var(--p-t2) var(--p-curva),background var(--p-t2),color var(--p-t1),filter var(--p-t2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn .ico{flex:none}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn-p{color:#fff;background:linear-gradient(180deg,#5572af,#405c97);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(10,20,45,.14),0 0 0 1px rgba(38,56,98,.38),0 1px 2px rgba(20,28,42,.14),
             0 6px 14px -8px rgba(40,60,110,.55)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn-p:hover{background:linear-gradient(180deg,#5a79b8,#45629f);transform:translateY(-1px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(10,20,45,.14),0 0 0 1px rgba(38,56,98,.38),0 2px 4px rgba(20,28,42,.12),
             0 12px 22px -12px rgba(40,60,110,.6)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(.btn-sec,.btn-ghost){color:var(--f-tinta-2);background:linear-gradient(180deg,#fff,#f3f5f8);
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(20,28,42,.1),0 1px 2px rgba(20,28,42,.06),0 4px 10px -7px rgba(20,28,42,.2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn-ghost{background:rgba(255,255,255,.35);box-shadow:inset 0 0 0 1px rgba(20,28,42,.12)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(.btn-sec,.btn-ghost):hover{color:var(--f-acento);background:#fff;transform:translateY(-1px);
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(59,90,150,.28),0 2px 4px rgba(20,28,42,.06),0 8px 16px -10px rgba(20,28,42,.25)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn:active{transform:translateY(0) scale(.985);transition-duration:80ms}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(a,button,summary,label,[tabindex]):focus-visible{outline:2px solid rgba(59,90,150,.6);
  outline-offset:3px;border-radius:var(--p-r1)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn:focus-visible{outline-offset:3px;border-radius:var(--p-r2)}

/* campos: carril claro, filete que se marca al pasar y anillo suave al escribir; selector con su cheurón */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]):not([type=submit]),select,textarea){
  min-height:40px;padding:9px 12px;font:450 .9rem/1.35 var(--f-sans);color:var(--f-tinta);border-radius:var(--p-r2)!important;
  background:linear-gradient(180deg,#f3f5f8,#fbfcfd)!important;
  box-shadow:inset 0 1px 2px rgba(20,28,42,.09),inset 0 0 0 1px rgba(20,28,42,.1),0 1px 0 rgba(255,255,255,.9)!important;
  transition:box-shadow var(--p-t2) var(--p-curva),background var(--p-t2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) textarea{min-height:0;line-height:1.55}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]),select,textarea):hover{
  box-shadow:inset 0 1px 2px rgba(20,28,42,.09),inset 0 0 0 1px rgba(20,28,42,.17),0 1px 0 rgba(255,255,255,.9)!important}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]),select,textarea):focus{
  outline:0;background:#fff!important;box-shadow:inset 0 0 0 1px rgba(59,90,150,.6),var(--p-foco)!important}
/* (el «:not(#p)» sube la especificidad por encima de la regla general de campos de escena.css, que lleva !important y una
   lista de :not() que la hace muy específica; no selecciona nada distinto) */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) select:not(#p){appearance:none;-webkit-appearance:none;padding-right:34px;cursor:pointer;
  background:var(--p-chev) right 12px top 50%/12px no-repeat,linear-gradient(180deg,#f3f5f8,#fbfcfd)!important}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) select:not(#p):focus{background:var(--p-chev) right 12px top 50%/12px no-repeat,#fff!important}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) ::placeholder{color:#8a92a3;opacity:1;text-transform:none}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(input[type=checkbox],input[type=radio]){accent-color:#3b5a96;width:16px;height:16px}

/* desplegables: el contenido llega deslizando (altura animada en los navegadores que lo saben hacer; en el resto, un
   fundido corto) y el cheurón gira con la misma curva */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details>summary{transition:color var(--p-t1),background-color var(--p-t2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details>summary::after{transition:transform var(--p-t3) var(--p-curva),opacity var(--p-t2)}
@supports selector(::details-content){
  @media (prefers-reduced-motion:no-preference){
    body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details{interpolate-size:allow-keywords}
    body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details::details-content{height:0;overflow:clip;overflow-clip-margin:6px;
      transition:height var(--p-t3) var(--p-curva-io),content-visibility var(--p-t3) allow-discrete}
    body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details[open]::details-content{height:auto}
  }
}
@supports not selector(::details-content){
  @media (prefers-reduced-motion:no-preference){
    body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details[open]>:not(summary){animation:p-despliega var(--p-t3) var(--p-curva) both}
  }
}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details.pliegue{border-top:0;padding-top:14px;
  background:linear-gradient(90deg,var(--p-hilo),transparent 85%) 0 0/100% 1px no-repeat}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details.pliegue>summary{font:600 .84rem var(--f-sans)}
/* todos los desplegables con su cheurón (al de «valores y fuentes» se le había quitado) */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) details.detalle-vars>summary::after{content:""}

/* tablas: sin la banda gris de cabecera (un filete bajo los títulos), filas con aire, cifras tabulares y la fila que se
   ilumina al pasar */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dash-t th{padding:9px 12px;background:none;border-bottom:1px solid var(--p-hilo-2);
  font:550 .74rem/1.3 var(--f-sans);color:var(--f-tenue);vertical-align:bottom}
/* la primera columna solo lleva fondo (para tapar lo que pasa por debajo) cuando la tabla de verdad se desliza */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(.dash-scroll,.table-scroll) .dash-t :is(th,td):first-child{background:transparent}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .p-desborda .dash-t :is(th,td):first-child{background:#f2f4f7}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dash-t td{padding:10px 12px;border-bottom:1px solid var(--p-hilo);font-size:.86rem}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dash-t tbody tr{transition:background-color var(--p-t1)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dash-t tbody tr:hover{background:rgba(255,255,255,.62)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dash-t tbody tr:last-child td{border-bottom:0}
/* lo que se desliza en horizontal avisa de que sigue (pulido.js marca .p-desborda y si queda algo a la derecha) */
body.app.shell .p-desborda.p-desborda{-webkit-mask-image:none;mask-image:none}
body.app.shell .p-desborda.p-desborda.p-sigue{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 36px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 36px),transparent)}
/* sin tabla (escalas, gráficos, índices), también a la izquierda cuando ya se ha deslizado; con tabla no: la primera columna va fija */
body.app.shell .p-desborda.p-desborda.p-antes:not(:has(table)){-webkit-mask-image:linear-gradient(90deg,transparent,#000 36px);mask-image:linear-gradient(90deg,transparent,#000 36px)}
body.app.shell .p-desborda.p-desborda.p-antes.p-sigue:not(:has(table)){-webkit-mask-image:linear-gradient(90deg,transparent,#000 36px,#000 calc(100% - 36px),transparent);
  mask-image:linear-gradient(90deg,transparent,#000 36px,#000 calc(100% - 36px),transparent)}
.p-desborda{scrollbar-width:thin;scrollbar-color:rgba(28,35,51,.22) transparent}
@media (hover:none){.p-desborda{scrollbar-width:none}.p-desborda::-webkit-scrollbar{display:none}}

/* envío en curso (pulido.js): el botón pulsado lleva un anillo que gira junto a su texto */
@keyframes p-gira{to{transform:rotate(360deg)}}
body.app .btn.p-enviando{pointer-events:none;cursor:progress}
body.app .btn.p-enviando::after{content:"";flex:none;width:13px;height:13px;border-radius:50%;border:2px solid rgba(59,90,150,.25);border-top-color:#3b5a96;
  animation:p-gira .7s linear infinite}
body.app .btn-p.p-enviando::after{border-color:rgba(255,255,255,.35);border-top-color:#fff}
/* una sola entrada por sección: la de escena.js, más corta (la de app.js, .por-ver, duraba .8 s y se sumaba) */
body.app.shell .app-contenido:has(>.pul-p)>.por-ver{opacity:1;transform:none;transition:none}

/* estados vacíos: el icono en el acento, el texto con su medida y, si hay, la acción */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .vacio{align-items:center;gap:12px;padding:14px 0;font:450 .9rem/1.5 var(--f-sans);color:var(--f-suave)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .vacio .ico{flex:none;margin:0;color:var(--f-acento);opacity:.75}

/* franjas (avisos de la pantalla): tonales, sin el filo grueso a la izquierda */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .franja{border-radius:var(--p-r3);padding:14px 18px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),inset 0 0 0 1px rgba(20,28,42,.06)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .franja-ko{background:linear-gradient(90deg,rgba(168,73,60,.09),rgba(168,73,60,.03))}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .franja-info{background:linear-gradient(90deg,rgba(59,90,150,.08),rgba(59,90,150,.02) 70%,transparent)}
/* el enlace de cierre de una pantalla (p. ej. «Metodología completa»): una banda que responde al pasar */
body.app.shell .app-contenido:has(>.pul-p)>a.franja{align-items:center;gap:14px;padding:16px 20px;text-decoration:none;
  background:linear-gradient(90deg,rgba(59,90,150,.075),rgba(59,90,150,.02) 60%,transparent);box-shadow:inset 0 1px 0 rgba(255,255,255,.7);
  transition:background var(--p-t2),box-shadow var(--p-t2)}
body.app.shell .app-contenido:has(>.pul-p)>a.franja>.ico{flex:none;color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p)>a.franja b{font:600 .95rem var(--f-sans);color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p)>a.franja p{margin:2px 0 0;font:450 .84rem/1.5 var(--f-sans);color:var(--f-suave)}
body.app.shell .app-contenido:has(>.pul-p)>a.franja:hover{transform:none;background:linear-gradient(90deg,rgba(59,90,150,.12),rgba(59,90,150,.04) 65%,transparent);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
body.app.shell .app-contenido:has(>.pul-p)>a.franja .franja-ir{color:var(--f-acento)}

/* los objetos de papel (cheque, hoja, balance): sombra en capas finas y un canto de luz; la inclinación, contenida; al pasar,
   un brillo muy tenue sigue al puntero (escena.js da --olx/--oly a los [data-objeto]) */
body.app.shell .app-contenido:has(>.pul-p) :is(.talon,.balance-obj,.hoja-informe){transition:transform .45s var(--p-curva),box-shadow .45s var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) :is(.talon,.balance-obj,.hoja-informe)[data-objeto]>.p-brillo{position:absolute;inset:0;z-index:3;border-radius:inherit;
  pointer-events:none;opacity:0;mix-blend-mode:soft-light;transition:opacity .4s var(--p-curva);
  background:radial-gradient(240px circle at var(--olx,50%) var(--oly,20%),rgba(255,255,255,.75),rgba(255,255,255,0) 60%)}
body.app.shell .app-contenido:has(>.pul-p) :is(.talon,.balance-obj,.hoja-informe)[data-objeto]:hover>.p-brillo{opacity:1}

/* ---------------------------------------------------------------- 3. Rating */
body.app.shell .app-contenido:has(>.pul-p) .rating-portada{grid-template-columns:minmax(0,1fr) minmax(300px,360px);align-items:center;gap:20px 48px}
body.app.shell .app-contenido:has(>.pul-p) .rating-portada h2{max-width:20ch}
body.app.shell .app-contenido:has(>.pul-p) .rating-dial{position:relative;gap:14px;padding-bottom:4px}
body.app.shell .app-contenido:has(>.pul-p) .rating-dial svg{max-width:330px;
  filter:drop-shadow(0 16px 18px rgba(20,28,42,.16)) drop-shadow(0 3px 4px rgba(20,28,42,.1))}
/* el dial se apoya: una sombra de contacto elíptica bajo el instrumento */
body.app.shell .app-contenido:has(>.pul-p) .rating-dial::before{content:"";position:absolute;left:14%;right:14%;top:62%;height:34px;z-index:-1;
  border-radius:50%;background:radial-gradient(closest-side,rgba(20,28,42,.12),transparent);filter:blur(6px)}
body.app.shell .app-contenido:has(>.pul-p) .rating-dial figcaption{font:500 .76rem/1.4 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .aviso-calif{margin-top:16px;max-width:66ch}
/* escala maestra: el instrumento tal cual, con aire */
body.app.shell .app-contenido:has(>.pul-p) .maestra{padding:6px 0 0}
body.app.shell .app-contenido:has(>.pul-p) .maestra svg{display:block}
/* la IF-PYME sin pedir: el texto a su medida y las dos acciones juntas */
body.app.shell .app-contenido:has(>.pul-p) .ifp-vacia p{max-width:68ch;font:400 .92rem/1.62 var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .ifp-vacia .portada-acciones{margin-top:16px}
/* prueba de estrés: tres lecturas con un filo fino del color del resultado, que se desvanece hacia abajo */
body.app.shell .app-contenido:has(>.pul-p) .estres-filas{gap:22px 34px;margin:10px 0 12px}
body.app.shell .app-contenido:has(>.pul-p) .estres-f{position:relative;gap:4px;padding:2px 0 4px 16px;box-shadow:none}
body.app.shell .app-contenido:has(>.pul-p) .estres-f::before{content:"";position:absolute;left:0;top:2px;bottom:2px;width:2px;border-radius:2px;
  background:linear-gradient(180deg,#2d6b8a,rgba(45,107,138,.15))}
body.app.shell .app-contenido:has(>.pul-p) .estres-f.estres-warn::before{background:linear-gradient(180deg,#b07a2a,rgba(176,122,42,.15))}
body.app.shell .app-contenido:has(>.pul-p) .estres-f.estres-ko::before{background:linear-gradient(180deg,#a8493c,rgba(168,73,60,.15))}
body.app.shell .app-contenido:has(>.pul-p) .estres-f>span{font:550 .8rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .estres-f b{font:600 1.75rem/1.1 var(--f-sans);letter-spacing:-.025em}
body.app.shell .app-contenido:has(>.pul-p) .estres-f b small{font:500 .8rem var(--f-sans);letter-spacing:0;margin-left:2px}
body.app.shell .app-contenido:has(>.pul-p) .estres-f>small{font:450 .78rem/1.45 var(--f-sans);color:var(--f-suave);max-width:36ch}
/* lo que ajusta tu nota: el mismo filo fino */
body.app.shell .app-contenido:has(>.pul-p) .limites{gap:16px 34px}
body.app.shell .app-contenido:has(>.pul-p) .limites li{position:relative;gap:3px;padding:2px 0 2px 16px;box-shadow:none}
body.app.shell .app-contenido:has(>.pul-p) .limites li::before{content:"";position:absolute;left:0;top:2px;bottom:2px;width:2px;border-radius:2px;
  background:linear-gradient(180deg,rgba(28,35,51,.28),rgba(28,35,51,.06))}
body.app.shell .app-contenido:has(>.pul-p) .limites li.limite-ov::before{background:linear-gradient(180deg,#b07a2a,rgba(176,122,42,.15))}
body.app.shell .app-contenido:has(>.pul-p) .limites b{font:600 .9rem/1.35 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .limites span{font:450 .84rem/1.5 var(--f-sans);color:var(--f-suave)}
/* fortalezas, penalizaciones y palancas: listas con marca fina y su lectura debajo */
body.app.shell .app-contenido:has(>.pul-p) .sc-tres .tarjeta-cab{margin-bottom:16px}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc{gap:14px}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc li{gap:2px;padding-left:18px}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc li::before{top:.5em;width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 0%,transparent)}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc li.ok::before{background:#2d6b8a;box-shadow:0 0 0 3px rgba(45,107,138,.14)}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc li.ko::before{background:#a8493c;box-shadow:0 0 0 3px rgba(168,73,60,.13)}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc li.mas::before{background:#3b5a96;box-shadow:0 0 0 3px rgba(59,90,150,.14)}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc b{font:600 .9rem/1.38 var(--f-sans);letter-spacing:-.005em}
body.app.shell .app-contenido:has(>.pul-p) .lista-sc span{font:450 .82rem/1.45 var(--f-sans);color:var(--f-suave)}
body.app.shell .app-contenido:has(>.pul-p) .sc-proforma{font-size:.76rem;line-height:1.55;color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .rating-radar figcaption{font:500 .74rem var(--f-sans);color:var(--f-tenue);text-align:center}
/* la evolución: el gráfico a una medida legible, no estirado a todo el ancho */
body.app.shell .app-contenido:has(>.pul-p) .g-marco{max-width:860px}
body.app.shell .app-contenido:has(>.pul-p) .sector-primera{max-width:68ch;font:400 .92rem/1.65 var(--f-sans)}
@media (max-width:860px){
  body.app.shell .app-contenido:has(>.pul-p) .rating-portada{grid-template-columns:minmax(0,1fr);gap:8px}
  body.app.shell .app-contenido:has(>.pul-p) .rating-dial{order:-1;width:100%;max-width:340px;justify-self:center}
}

/* ---------------------------------------------------------------- 4. el libro de ahorro (Mesa y cartera del consultor) */
/* una libreta con papel de seguridad: guilloché muy tenue, doble filete interior, perforación, cifra grabada; la etiqueta en
   minúscula (antes, mayúsculas espaciadas) */
body.app.shell .app-contenido:has(>.pul-p) .talon{min-height:236px;padding:40px 30px 36px;gap:3px;border-radius:12px;
  background:radial-gradient(120% 70% at 50% -10%,rgba(255,255,255,.96),rgba(255,255,255,0) 62%),
    repeating-radial-gradient(circle at 104% 118%,rgba(59,90,150,.045) 0 1px,transparent 1px 8px),
    repeating-radial-gradient(circle at -6% -20%,rgba(45,107,138,.035) 0 1px,transparent 1px 11px),
    linear-gradient(168deg,#fdfdfc,#eef0f4);
  box-shadow:inset 0 1px 0 #fff,var(--p-sombra-papel)}
body.app.shell .app-contenido:has(>.pul-p) .talon[data-objeto]{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(-1deg)}
body.app.shell .app-contenido:has(>.pul-p) .talon[data-objeto]:hover{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(0deg) translateY(-3px);
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(20,28,42,.05),0 2px 3px rgba(20,28,42,.06),0 10px 18px -8px rgba(20,28,42,.18),0 40px 60px -30px rgba(20,28,42,.45)}
body.app.shell .app-contenido:has(>.pul-p) .talon::after{inset:10px;border:1px solid rgba(28,35,51,.08);border-radius:7px;
  box-shadow:inset 0 0 0 3px rgba(255,255,255,.55),inset 0 0 0 4px rgba(28,35,51,.04)}
body.app.shell .app-contenido:has(>.pul-p) .talon .talon-et{font:600 .8rem/1.3 var(--f-sans);letter-spacing:.01em;text-transform:none;color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .talon b{margin:6px 0 2px;font:600 2.85rem/1 var(--f-sans);letter-spacing:-.04em;color:var(--f-tinta);
  font-variant-numeric:lining-nums proportional-nums;text-shadow:0 1px 0 #fff,0 -1px 0 rgba(20,28,42,.06)}
body.app.shell .app-contenido:has(>.pul-p) .talon-ok b{color:#245a75}
body.app.shell .app-contenido:has(>.pul-p) .talon-per{font:500 .9rem var(--f-sans);color:var(--f-suave)}
body.app.shell .app-contenido:has(>.pul-p) .talon small{margin-top:10px;max-width:28ch;font:450 .76rem/1.5 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .talon-micro{color:rgba(59,90,150,.3);left:24px;right:24px}

/* ---------------------------------------------------------------- 5. Mesa */
body.app.shell .app-contenido:has(>.pul-p) .mesa-portada h2{max-width:22ch}
/* la regla de precios: carril hundido, tu precio objetivo como una banda de cristal con sus topes y cada oferta como un
   mando con su nombre; al pasar, el mando crece un poco */
body.app.shell .app-contenido:has(>.pul-p) .regla-precios{margin-top:4px;padding:0 10px}
body.app.shell .app-contenido:has(>.pul-p) .rp-pista{height:10px;margin:52px 0 50px;background:linear-gradient(180deg,#e0e4eb,#eef1f5);box-shadow:var(--p-pozo)}
body.app.shell .app-contenido:has(>.pul-p) .regla-precios.rp-sin .rp-pista{margin:20px 0 18px}
body.app.shell .app-contenido:has(>.pul-p) .rp-objetivo{top:-5px;bottom:-5px;border-radius:7px;
  background:linear-gradient(180deg,rgba(93,152,178,.26),rgba(45,107,138,.36));
  box-shadow:inset 0 0 0 1px rgba(45,107,138,.42),inset 0 1px 0 rgba(255,255,255,.55),0 4px 10px -6px rgba(45,107,138,.5)}
body.app.shell .app-contenido:has(>.pul-p) .rp-linea{top:-13px;bottom:-13px;width:2px}
body.app.shell .app-contenido:has(>.pul-p) .rp-tae{background:linear-gradient(180deg,rgba(50,59,78,.25),#323b4e 30%,#323b4e 70%,rgba(50,59,78,.25))}
body.app.shell .app-contenido:has(>.pul-p) .rp-hoy{background:linear-gradient(180deg,rgba(168,73,60,.25),#a8493c 30%,#a8493c 70%,rgba(168,73,60,.25))}
body.app.shell .app-contenido:has(>.pul-p) .rp-of{width:18px;height:18px;margin:-9px 0 0 -9px;z-index:2;
  background:radial-gradient(circle at 36% 30%,#fff,#e3e7ee 72%);
  box-shadow:0 0 0 1.5px #3b5690,0 2px 3px rgba(20,28,42,.22),0 6px 12px -6px rgba(20,28,42,.4);transition:transform var(--p-t2) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) .rp-of:hover{transform:scale(1.15)}
body.app.shell .app-contenido:has(>.pul-p) .rp-of.rp-mejor{background:radial-gradient(circle at 36% 30%,#79acc4,#2d6b8a 72%);
  box-shadow:0 0 0 2px #fff,0 0 0 3.5px #2d6b8a,0 3px 6px rgba(20,28,42,.28),0 8px 14px -6px rgba(45,107,138,.55)}
body.app.shell .app-contenido:has(>.pul-p) .rp-of>b{font:600 .76rem var(--f-sans);letter-spacing:-.005em}
body.app.shell .app-contenido:has(>.pul-p) .rp-of>em{font:500 .74rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .regla-precios figcaption{font:500 .74rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .rp-ley{gap:6px 18px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-tae{margin-top:2px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-ahorro{gap:4px 10px;padding:12px 16px;border-radius:var(--p-r3);
  background:linear-gradient(90deg,rgba(45,107,138,.08),rgba(45,107,138,.02) 70%,transparent);box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-ahorro .estado{font:650 1rem var(--f-sans);letter-spacing:-.01em}
/* las entidades: columnas abiertas con un filete que se desvanece (no una raya de arriba abajo) */
body.app.shell .app-contenido:has(>.pul-p) .mesa-gestiones{gap:28px 0;margin-top:6px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-g{gap:10px;padding:2px 24px 4px!important;border-left:0;
  background:linear-gradient(180deg,var(--p-hilo-2),var(--p-hilo) 55%,transparent) 0 0/1px 100% no-repeat!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-g header{align-items:center;gap:8px 10px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-g header b{font:600 1.05rem/1.3 var(--f-sans);letter-spacing:-.012em}
body.app.shell .app-contenido:has(>.pul-p) .mesa-g header small{font:550 .72rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-estado{font:600 .76rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-estado::before{width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 14%,transparent)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-fecha,body.app.shell .app-contenido:has(>.pul-p) .mesa-sin{font:450 .82rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-oferta{padding:14px 0 8px;border-top:0;background:linear-gradient(90deg,var(--p-hilo),transparent) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .mesa-oferta.mesa-mejor{margin:0 -24px 0 -24px;padding:14px 24px 10px;border-radius:0 var(--p-r3) var(--p-r3) 0;
  background:linear-gradient(90deg,rgba(45,107,138,.1),rgba(45,107,138,.03) 70%,transparent);box-shadow:inset 2px 0 0 #2d6b8a}
body.app.shell .app-contenido:has(>.pul-p) .mesa-of-cifras b{font:600 1.85rem/1 var(--f-sans);letter-spacing:-.03em;text-shadow:0 1px 0 rgba(255,255,255,.9)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-of-cifras span{font:500 .82rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-of-linea{font:450 .8rem/1.5 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-oferta .fine{margin:4px 0 0;font-size:.78rem;line-height:1.5}
body.app.shell .app-contenido:has(>.pul-p) .mesa-lecturas li{font:500 .78rem/1.45 var(--f-sans)}
/* las acciones de cada entidad: filas plegadas de la misma altura, con su icono en el acento */
body.app.shell .app-contenido:has(>.pul-p) .mesa-acciones{display:flex;flex-direction:column;margin-top:4px;
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .mesa-acciones:not(:has(details)){display:none}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar){margin:0!important;padding:0!important;border:0!important;
  background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .mesa-acciones>details:last-child{background:none}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar)>summary{display:flex;align-items:center;gap:9px;min-height:42px;
  margin:0 -8px;padding:8px 30px 8px 8px;border-radius:var(--p-r2);font:550 .84rem/1.3 var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar)>summary .ico{flex:none;color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar)>summary::after{content:"";top:50%;right:14px;margin-top:-6px}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar)>summary:hover{color:var(--f-acento);background:rgba(255,255,255,.6)}
body.app.shell .app-contenido:has(>.pul-p) :is(.mesa-acciones>details,details.mesa-aceptar)[open]>summary{color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-acciones>details>:is(form,p){margin:2px 0 14px}
body.app.shell .app-contenido:has(>.pul-p) details.mesa-aceptar{margin-top:6px!important;background:none}
body.app.shell .app-contenido:has(>.pul-p) details.mesa-aceptar>summary{color:var(--f-acento);font-weight:600}
body.app.shell .app-contenido:has(>.pul-p) .mesa-registrar .grid-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-registrar .grid-form label{font:550 .76rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-registrar .grid-form :is(.ancho,.btn){grid-column:1 / -1}
body.app.shell .app-contenido:has(>.pul-p) .mesa-estados{display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:0;margin:2px 0 14px;border:0}
body.app.shell .app-contenido:has(>.pul-p) .mesa-motivo-et{display:block;font:550 .76rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-motivo-et input{display:block;margin-top:6px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-motivo-et .tenue{font-weight:450;color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-motivo{width:100%;font-size:.86rem!important;padding:9px 12px!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-estados-botones{display:flex;flex-wrap:wrap;gap:8px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-estados .btn{min-height:34px;padding:6px 12px;font-size:.8rem}
body.app.shell .app-contenido:has(>.pul-p) .mesa-paquete form{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
body.app.shell .app-contenido:has(>.pul-p) details.mesa-aceptar form{display:flex;flex-direction:column;align-items:stretch;gap:10px;margin:2px 0 12px}
body.app.shell .app-contenido:has(>.pul-p) details.mesa-aceptar form .fine{margin:0;font-size:.8rem;line-height:1.55}
body.app.shell .app-contenido:has(>.pul-p) .mesa-paquete form .fine{margin:6px 0 0;font-size:.78rem;line-height:1.55}
body.app.shell .app-contenido:has(>.pul-p) .paquete-piezas{list-style:none;margin:4px 0 10px;padding:0;display:flex;flex-direction:column;gap:6px}
body.app.shell .app-contenido:has(>.pul-p) :is(.paquete-piezas label,.paquete-autorizo){display:flex;flex-direction:row;align-items:flex-start;gap:10px;text-align:left;
  font:450 .84rem/1.4 var(--f-sans);color:var(--f-tinta-2);cursor:pointer}
body.app.shell .app-contenido:has(>.pul-p) :is(.paquete-piezas label,.paquete-autorizo) input{flex:none;margin:1px 0 0}
body.app.shell .app-contenido:has(>.pul-p) .paquete-autorizo{margin:8px 0}
/* nueva operación: la bandeja, más clara; los campos, blancos dentro de ella */
body.app.shell .app-contenido:has(>.pul-p) .mesa-nueva{gap:24px 44px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form{padding:24px 24px 22px!important;border-radius:18px!important;
  background:linear-gradient(180deg,rgba(225,229,236,.6),rgba(236,239,244,.45))!important;
  box-shadow:inset 0 1px 3px rgba(20,28,42,.07),inset 0 0 0 1px rgba(20,28,42,.05),0 1px 0 #fff!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form .grid-form{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) minmax(0,1fr);gap:14px 16px;margin-bottom:18px}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form label{gap:6px;font:550 .78rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form :is(input,select):not(#p){
  box-shadow:inset 0 0 0 1px rgba(20,28,42,.11),0 1px 2px rgba(20,28,42,.05)!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form input:not(#p){background:#fff!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form select:not(#p){background:var(--p-chev) right 12px top 50%/12px no-repeat,#fff!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form :is(input,select):not(#p):hover{box-shadow:inset 0 0 0 1px rgba(20,28,42,.2),0 1px 2px rgba(20,28,42,.05)!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-form :is(input,select):not(#p):focus{box-shadow:inset 0 0 0 1px rgba(59,90,150,.6),var(--p-foco)!important}
body.app.shell .app-contenido:has(>.pul-p) .mesa-sugeridas h4{margin:2px 0 12px;font:600 .92rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas{border-top:0;background:linear-gradient(90deg,var(--p-hilo-2),transparent) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas>li{border-bottom:0;background:linear-gradient(90deg,var(--p-hilo),transparent) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas summary{margin:0 -8px;padding:11px 30px 11px 8px;border-radius:var(--p-r2)}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas summary:hover{background:rgba(255,255,255,.6)}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas summary::after{right:14px}
body.app.shell .app-contenido:has(>.pul-p) .sugeridas details p{padding:0 0 4px}

/* ---------------------------------------------------------------- 6. Análisis */
/* el índice de la página: pestañas con un subrayado que se desliza hasta la sección en la que estás (pulido.js); en el
   escritorio, pegado bajo la barra superior con el mismo vidrio */
body.app.shell .app-contenido:has(>.pul-p) .anclas{gap:2px;margin:0 0 4px;padding:0;border-bottom:0;box-shadow:none;
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .anclas a{position:relative;padding:12px 12px 13px;border-radius:0;background:none!important;box-shadow:none!important;
  font:550 .84rem var(--f-sans);color:var(--f-suave);text-decoration:none;transition:color var(--p-t1)}
body.app.shell .app-contenido:has(>.pul-p) .anclas a::after{content:"";position:absolute;left:12px;right:12px;bottom:0;height:2px;border-radius:2px;
  background:var(--f-acento);transform:scaleX(0);transition:transform var(--p-t3) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) .anclas a:hover{color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p) .anclas a:hover::after{transform:scaleX(.35)}
body.app.shell .app-contenido:has(>.pul-p) .anclas a.p-on{color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) .anclas a.p-on::after{transform:scaleX(1)}
@media (min-width:901px){
  body.app.shell .app-contenido>.anclas.pul-p{position:sticky;top:var(--p-tb,64px);z-index:20;margin:-10px -28px 4px;padding:0 28px;
    background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 28px 100%/calc(100% - 56px) 1px no-repeat,rgba(243,245,248,.84);
    -webkit-backdrop-filter:saturate(160%) blur(14px);backdrop-filter:saturate(160%) blur(14px)}
}
/* iPad en horizontal: el índice pegado, sin vidrio (sticky + backdrop-filter tumba el WebKit táctil al desplazar) */
@media (min-width:901px) and (hover:none){
  body.app.shell .app-contenido>.anclas.pul-p{background-color:rgba(243,245,248,.97);-webkit-backdrop-filter:none;backdrop-filter:none}
}
body.app.shell .app-contenido:has(>.pul-p) :is(#kpis,#evolucion,#estados,#flujo,#sector,#ayudas,#circular){scroll-margin-top:calc(var(--p-tb,64px) + 56px)}
/* el balance como objeto: hoja con canto de luz, masas en la paleta tonal con un filo claro arriba */
body.app.shell .app-contenido:has(>.pul-p) .balance-obj{border-radius:8px;padding:18px 20px 36px;
  background:radial-gradient(120% 60% at 50% -10%,#fff,rgba(255,255,255,0) 60%),linear-gradient(180deg,#fff,#f2f4f7);
  box-shadow:inset 0 1px 0 #fff,var(--p-sombra-papel)}
body.app.shell .app-contenido:has(>.pul-p) .balance-obj[data-objeto]{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(-1.1deg)}
body.app.shell .app-contenido:has(>.pul-p) .balance-obj[data-objeto]:hover{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(-.3deg) translateY(-3px)}
body.app.shell .app-contenido:has(>.pul-p) .balance-obj::before{border-radius:8px}
body.app.shell .app-contenido:has(>.pul-p) .balance-obj figcaption{font:600 .84rem var(--f-sans);border-bottom-color:var(--p-hilo)}
body.app.shell .app-contenido:has(>.pul-p) .bo-cols{gap:10px}
body.app.shell .app-contenido:has(>.pul-p) .bo-col{gap:3px}
body.app.shell .app-contenido:has(>.pul-p) .bo-s{padding:0 10px;border-radius:4px;box-shadow:inset 0 1px 0 rgba(255,255,255,.42),inset 0 -1px 0 rgba(20,28,42,.08)}
body.app.shell .app-contenido:has(>.pul-p) .bo-s b{font:600 .72rem/1.25 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .bo-s em{font:500 .7rem/1.25 var(--f-sans);opacity:.85}
body.app.shell .app-contenido:has(>.pul-p) .bo-anc{background:linear-gradient(180deg,#c6d0e1,#afbdd4);color:#1c2333}
body.app.shell .app-contenido:has(>.pul-p) .bo-ac{background:linear-gradient(180deg,#6781bb,#4a65a0);color:#fff}
body.app.shell .app-contenido:has(>.pul-p) .bo-pn{background:linear-gradient(180deg,#4f8ba7,#30708e);color:#fff}
body.app.shell .app-contenido:has(>.pul-p) .bo-pnc{background:linear-gradient(180deg,#ece0c3,#dfcca2);color:#2a1f0c}
body.app.shell .app-contenido:has(>.pul-p) .bo-pc{background:linear-gradient(180deg,#dcb984,#c99d5c);color:#24180a}
body.app.shell .app-contenido:has(>.pul-p) :is(.bo-ac,.bo-pn) b{text-shadow:0 1px 1px rgba(10,20,40,.25)}
/* indicadores: una rejilla de cifras con filetes que se desvanecen (no una cuadrícula de rayas) */
body.app.shell .app-contenido:has(>.pul-p) .kpi-grid{border:0;overflow:hidden}
body.app.shell .app-contenido:has(>.pul-p) .kpi{margin:0 0 -1px -1px;border:0;padding:18px 22px 16px;row-gap:4px;
  background:linear-gradient(180deg,transparent,var(--p-hilo) 18%,var(--p-hilo) 82%,transparent) 0 0/1px 100% no-repeat,
    linear-gradient(90deg,transparent,var(--p-hilo) 10%,var(--p-hilo) 90%,transparent) 0 100%/100% 1px no-repeat;
  transition:background-color var(--p-t2)}
body.app.shell .app-contenido:has(>.pul-p) .kpi:hover{background-color:rgba(255,255,255,.55)}
body.app.shell .app-contenido:has(>.pul-p) .kpi-et{font:550 var(--p-fs-et)/1.35 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .kpi-v{font:600 1.7rem/1.1 var(--f-sans);letter-spacing:-.028em}
body.app.shell .app-contenido:has(>.pul-p) .kpi-v small{font:500 .74rem var(--f-sans);letter-spacing:0}
body.app.shell .app-contenido:has(>.pul-p) .kpi-pie{font:450 .76rem var(--f-sans);gap:3px 8px}
body.app.shell .app-contenido:has(>.pul-p) .kpi-pie b{font-weight:650}
body.app.shell .app-contenido:has(>.pul-p) .kpi-pie .kpi-verde{color:#2d6b8a}
body.app.shell .app-contenido:has(>.pul-p) .kpi-sector{font:600 .72rem var(--f-sans);color:var(--f-tenue)}
/* evolución: los gráficos con su pie, la película de la PD en su pozo */
body.app.shell .app-contenido:has(>.pul-p) .g-grid{gap:22px 36px}
body.app.shell .app-contenido:has(>.pul-p) .g-fig figcaption{margin-bottom:6px;font:600 .8rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .pelicula-pd{border-radius:var(--p-r3);background:linear-gradient(180deg,#e3e7ed,#eff1f5);box-shadow:var(--p-pozo)}
/* estados financieros: cada tabla con su título como cabecera; en el móvil, plegada bajo su cifra de cierre */
body.app.shell .app-contenido:has(>.pul-p) .estados-2{gap:36px}
body.app.shell .app-contenido:has(>.pul-p) .estados-t th:first-child{font:600 .84rem var(--f-sans);color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p) .estados-t tr.total td{border-top:1px solid var(--p-hilo-2)}
body.app.shell .app-contenido:has(>.pul-p) .estados-t td.et{font-size:.84rem}
body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary{display:none}
body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue{min-width:0}
/* flujo y sector */
body.app.shell .app-contenido:has(>.pul-p) .flujo-cifras{margin-bottom:10px}
body.app.shell .app-contenido:has(>.pul-p) .sector-t td.v{white-space:nowrap}
body.app.shell .app-contenido:has(>.pul-p) .circular-fila>div{border-top:0;box-shadow:none;
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 0/100% 1px no-repeat}
@media (max-width:640px){
  body.app.shell .app-contenido:has(>.pul-p) .anclas{margin:0 -16px 2px;padding:0 16px}
  body.app.shell .app-contenido:has(>.pul-p) .anclas a{padding:11px 10px 12px}
  body.app.shell .app-contenido:has(>.pul-p) .balance-obj{max-width:300px;margin:12px auto 6px}
  body.app.shell .app-contenido:has(>.pul-p) .kpi{padding:14px 12px 12px}
  body.app.shell .app-contenido:has(>.pul-p) .kpi-v{font-size:1.4rem}
  body.app.shell .app-contenido:has(>.pul-p) .estados-2{gap:0}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue{background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 100%/100% 1px no-repeat}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary{display:flex;flex-direction:column;gap:2px;padding:14px 34px 14px 0;
    list-style:none}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary::after{top:50%;right:8px;margin-top:-6px}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary b{font:600 .95rem var(--f-sans);color:var(--f-tinta)}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary span{font:450 .82rem var(--f-sans);color:var(--f-suave)}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue>summary em{font-style:normal;font-weight:650;color:var(--f-tinta)}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue[open]>summary{padding-bottom:8px}
  body.app.shell .app-contenido:has(>.pul-p) details.estado-pliegue .table-scroll{padding-bottom:12px}
  /* la cascada de caja, a un tamaño legible: se desliza con su velo en vez de encogerse */
  body.app.shell .app-contenido:has(>.pul-p) #flujo .g-wrap svg{min-width:620px}
  /* el sector: cada ratio en dos líneas (el nombre y, debajo, tu valor, la regla de percentiles y el cuartil), sin columnas
     escondidas tras el nombre */
  body.app.shell .app-contenido:has(>.pul-p) .dash-scroll:has(>.sector-t){overflow:visible;-webkit-mask-image:none;mask-image:none}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t,body.app.shell .app-contenido:has(>.pul-p) .sector-t tbody{display:block;width:100%;min-width:0!important}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t thead{display:none}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t tr{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:4px 14px;padding:11px 0;
    background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 100%/100% 1px no-repeat}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t td{display:block;padding:0;border:0;background:none!important;position:static!important;min-width:0!important}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t td.et{grid-column:1 / -1;white-space:normal;font:500 .86rem/1.4 var(--f-sans);color:var(--f-tinta)}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t td.v{text-align:left;font-size:.84rem}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t td.v:last-child{text-align:right;color:var(--f-tenue)}
  body.app.shell .app-contenido:has(>.pul-p) .sector-t .pct-regla{width:96px}
}

/* ---------------------------------------------------------------- 7. Expediente */
body.app.shell .app-contenido:has(>.pul-p) .nivel{gap:24px 48px}
body.app.shell .app-contenido:has(>.pul-p) .nivel-anillo{position:relative}
body.app.shell .app-contenido:has(>.pul-p) .nivel-anillo::after{content:"";position:absolute;left:12%;right:12%;bottom:-10px;height:22px;z-index:-1;border-radius:50%;
  background:radial-gradient(closest-side,rgba(20,28,42,.14),transparent);filter:blur(5px)}
body.app.shell .app-contenido:has(>.pul-p) .nivel h2{max-width:20ch}
/* los tres niveles: un carril fino con los hitos como piezas con relieve */
body.app.shell .app-contenido:has(>.pul-p) .nivel-pasos::before{top:15px;height:2px;background:linear-gradient(90deg,#d9dee6,#e7eaf0)}
body.app.shell .app-contenido:has(>.pul-p) .nivel-punto{width:30px;height:30px;margin-bottom:10px;font:600 .8rem var(--f-sans);color:var(--f-tenue);
  background:linear-gradient(180deg,#fff,#eef1f5);box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(20,28,42,.1),0 2px 4px rgba(20,28,42,.08)}
body.app.shell .app-contenido:has(>.pul-p) .nivel-pasos li.hecho .nivel-punto{color:#fff;background:linear-gradient(180deg,#5f7dba,#3b5690);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 0 0 3px rgba(59,90,150,.12),0 4px 10px -4px rgba(40,60,110,.6)}
body.app.shell .app-contenido:has(>.pul-p) .nivel-pasos li.actual .nivel-punto{color:var(--f-acento);box-shadow:inset 0 1px 0 #fff,0 0 0 1.5px var(--f-acento),0 0 0 5px rgba(59,90,150,.1)}
body.app.shell .app-contenido:has(>.pul-p) .nivel-pasos b{font:600 .88rem/1.3 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .nivel-pasos small{font:450 .78rem/1.45 var(--f-sans);color:var(--f-suave)}
/* la subida única: un pozo claro con filete discontinuo fino que se ilumina al pasar o al arrastrar */
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja{border-radius:var(--p-r3);background:linear-gradient(180deg,#e7eaf0,#f1f3f6);
  box-shadow:inset 0 1px 3px rgba(20,28,42,.08),inset 0 0 0 1px rgba(20,28,42,.06),0 1px 0 #fff;
  transition:box-shadow var(--p-t2) var(--p-curva),background var(--p-t2),transform var(--p-t2) var(--p-curva)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja::before{inset:6px;border:1px dashed rgba(28,35,51,.18);border-radius:calc(var(--p-r3) - 4px);
  transition:border-color var(--p-t2)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja:is(:hover,.encima){transform:none;background:linear-gradient(180deg,#e9edf5,#f3f5f9);
  box-shadow:inset 0 1px 3px rgba(20,28,42,.08),inset 0 0 0 1px rgba(59,90,150,.22),0 0 0 4px rgba(59,90,150,.07)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja:is(:hover,.encima)::before{border-color:rgba(59,90,150,.45)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja:focus-within{box-shadow:inset 0 0 0 1px rgba(59,90,150,.55),var(--p-foco)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .dropzona-caja .ico{color:var(--f-acento)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-mini{display:flex;align-items:stretch;gap:10px}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-mini .subida-caja{min-height:46px;padding:8px 14px;font:450 .84rem var(--f-sans)}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-mini .btn{min-height:46px}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-caja.fichero{min-height:46px}
/* el catálogo de documentos: filas con su marca de estado, lo que aporta y el estado como texto; al pasar, la fila se ilumina */
body.app.shell .app-contenido:has(>.pul-p) .docs{border-top:0;background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .doc{border-bottom:0;background:linear-gradient(90deg,var(--p-hilo),var(--p-hilo) 70%,transparent) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .doc summary{grid-template-columns:14px minmax(0,1.3fr) minmax(0,1fr) 96px;gap:16px;min-height:58px;
  margin:0 -10px;padding:10px 36px 10px 10px;border-radius:var(--p-r2);transition:background-color var(--p-t2)}
body.app.shell .app-contenido:has(>.pul-p) .doc summary::after{content:"";top:50%;right:14px;margin-top:-6px}
body.app.shell .app-contenido:has(>.pul-p) .doc summary:hover,body.app.shell .app-contenido:has(>.pul-p) .doc details[open] summary{background:rgba(255,255,255,.6)}
body.app.shell .app-contenido:has(>.pul-p) .doc-marca{width:9px;height:9px}
body.app.shell .app-contenido:has(>.pul-p) :is(.doc-ok,.doc-auto) .doc-marca{background:#2d6b8a;box-shadow:0 0 0 3px rgba(45,107,138,.14)}
body.app.shell .app-contenido:has(>.pul-p) .doc-auto .doc-marca{background:#fff;box-shadow:inset 0 0 0 2px #3b5a96,0 0 0 3px rgba(59,90,150,.1)}
body.app.shell .app-contenido:has(>.pul-p) .doc-falta .doc-marca{box-shadow:inset 0 0 0 1.5px rgba(28,35,51,.3)}
body.app.shell .app-contenido:has(>.pul-p) .doc-nombre{gap:2px}
body.app.shell .app-contenido:has(>.pul-p) .doc-nombre b{font:600 .92rem/1.35 var(--f-sans);letter-spacing:-.005em}
body.app.shell .app-contenido:has(>.pul-p) .doc-nombre small{font:450 .8rem/1.4 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .doc-aporta{font:450 .76rem/1.45 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .doc-estado{font:600 .78rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) :is(.doc-ok,.doc-auto) .doc-estado{color:#245a75}
body.app.shell .app-contenido:has(>.pul-p) .doc-auto .doc-estado{color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) .doc-falta .doc-estado{color:var(--f-tenue);font-weight:550}
body.app.shell .app-contenido:has(>.pul-p) .doc-detalle{padding:6px 10px 20px 40px;gap:10px;animation:none}
body.app.shell .app-contenido:has(>.pul-p) .doc-detalle p{font:400 .88rem/1.6 var(--f-sans);color:var(--f-tinta-2);max-width:72ch}
body.app.shell .app-contenido:has(>.pul-p) .docs-grupo .seccion-cab .medidor i{width:18px;height:5px}
/* otras formas de subir: el «+» como una tecla pequeña, en el mismo tono que el resto */
body.app.shell .app-contenido:has(>.pul-p) details.otra-via>summary{gap:10px;font:550 .86rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) details.otra-via>summary::before{width:22px;height:22px;font:500 .9rem/1 var(--f-sans);color:var(--f-acento);
  transition:transform var(--p-t2) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) details.otra-via[open]>summary::before{transform:rotate(180deg)}
/* la biblioteca: el enlace de cada documento como una acción discreta */
body.app.shell .app-contenido:has(>.pul-p) .doc-abrir{padding:4px 8px;margin:-4px -8px;border-radius:8px;transition:background var(--p-t1),color var(--p-t1)}
body.app.shell .app-contenido:has(>.pul-p) .doc-abrir:hover{text-decoration:none;background:rgba(59,90,150,.08)}
body.app.shell .app-contenido:has(>.pul-p) .docs-otro{gap:10px 14px;margin-top:14px}
body.app.shell .app-contenido:has(>.pul-p) .docs-tipo{font:550 .78rem var(--f-sans);color:var(--f-tinta-2)}

/* ---------------------------------------------------------------- 8. CIRBE, cuentas bancarias y aging (secciones dentro de Bancos) */
body.app.shell .pul-s .radiografia{column-gap:36px}
body.app.shell .pul-s .radiografia .rx{border-top:0;box-shadow:none;padding:16px 2px 18px;
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 0/100% 1px no-repeat}
body.app.shell .pul-s .rx>span{font:550 var(--p-fs-et)/1.35 var(--f-sans);color:var(--f-tenue)}
body.app.shell .pul-s .rx b{display:block;margin:4px 0 4px;font:600 1.45rem/1.1 var(--f-sans);letter-spacing:-.025em;font-variant-numeric:lining-nums proportional-nums}
body.app.shell .pul-s .rx small{font:450 .76rem/1.45 var(--f-sans);color:var(--f-suave)}
/* el reparto de la deuda por entidad: la paleta tonal (azules, petróleo, pizarra y arena), sin el cian y el verde menta */
body.app.shell .pul-s .reparto-barra{height:10px;background:linear-gradient(180deg,#e0e4eb,#eef1f5);box-shadow:var(--p-pozo)}
body.app.shell .pul-s .reparto-barra i{box-shadow:inset 0 1px 0 rgba(255,255,255,.3)}
body.app.shell .pul-s .reparto-barra i+i{box-shadow:inset 0 1px 0 rgba(255,255,255,.3),inset 1px 0 0 rgba(255,255,255,.75)}
/* (lista de selectores y no :is(): un pseudo-elemento dentro de :is() invalida esa parte) */
body.app.shell .pul-s .reparto-barra i:nth-child(1),body.app.shell .pul-s .reparto-leyenda li:nth-child(1)::before{background:#2f4c87}
body.app.shell .pul-s .reparto-barra i:nth-child(2),body.app.shell .pul-s .reparto-leyenda li:nth-child(2)::before{background:#5571ab}
body.app.shell .pul-s .reparto-barra i:nth-child(3),body.app.shell .pul-s .reparto-leyenda li:nth-child(3)::before{background:#2d6b8a}
body.app.shell .pul-s .reparto-barra i:nth-child(4),body.app.shell .pul-s .reparto-leyenda li:nth-child(4)::before{background:#8fa0c0}
body.app.shell .pul-s .reparto-barra i:nth-child(5),body.app.shell .pul-s .reparto-leyenda li:nth-child(5)::before{background:#c49a52}
body.app.shell .pul-s .reparto-barra i:nth-child(6),body.app.shell .pul-s .reparto-leyenda li:nth-child(6)::before{background:#7d8597}
body.app.shell .pul-s .reparto-barra i:nth-child(n+7),body.app.shell .pul-s .reparto-leyenda li:nth-child(n+7)::before{background:#b5bccb}
body.app.shell .pul-s .reparto-barra i.otras{background:#c9ced8}
body.app.shell .pul-s .reparto-leyenda{gap:8px 26px;margin-top:14px}
body.app.shell .pul-s .reparto-leyenda li::before{width:8px;height:8px;border-radius:50%}
body.app.shell .pul-s .reparto-leyenda b{font-size:.86rem}
body.app.shell .pul-s .cambios-cirbe h4{font:600 .9rem var(--f-sans)}
/* aging: dos columnas de cifras con filetes que se desvanecen */
body.app.shell .pul-s .cartera-col h4{display:flex;align-items:baseline;gap:8px;margin:0 0 6px;font:600 .95rem var(--f-sans)}
body.app.shell .pul-s .cartera-col h4 small{font:450 .78rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .pul-s .cifras-col>div{border-bottom:0;background:linear-gradient(90deg,var(--p-hilo),var(--p-hilo) 70%,transparent) 0 100%/100% 1px no-repeat}
body.app.shell .pul-s .cifras-col dt{font:450 .86rem var(--f-sans);color:var(--f-suave)}
body.app.shell .pul-s .cifras-col dd{font-size:.95rem}
/* sin datos: la guía como texto con su acción, sin recuadro */
body.app.shell .pul-s .vacio-guia{padding:4px 0!important;background:none!important;box-shadow:none!important;gap:16px}
body.app.shell .pul-s .vacio-guia p{font:400 .92rem/1.62 var(--f-sans);max-width:70ch}

@media (max-width:640px){
  /* la esfera junto al título (no un círculo suelto encima de todo) */
  body.app.shell .app-contenido:has(>.pul-p) .nivel:has(.nivel-anillo){grid-template-columns:84px minmax(0,1fr);gap:16px 16px;align-items:start}
  body.app.shell .app-contenido:has(>.pul-p) .nivel-anillo{width:84px;margin-top:2px}
  body.app.shell .app-contenido:has(>.pul-p) .nivel-anillo svg text+text{display:none}   /* a este tamaño, solo la cifra */
  body.app.shell .app-contenido:has(>.pul-p) .nivel-anillo svg text{transform:translateY(5px)}
  body.app.shell .app-contenido:has(>.pul-p) .nivel:has(.nivel-anillo) .nivel-pasos{grid-column:1 / -1}
  body.app.shell .app-contenido:has(>.pul-p) .nivel h2{font-size:1.32rem}
  body.app.shell .app-contenido:has(>.pul-p) .nivel .portada-linea{margin-bottom:8px}
  body.app.shell .app-contenido:has(>.pul-p) .doc summary{grid-template-columns:12px minmax(0,1fr) auto;gap:12px;padding:12px 34px 12px 10px}
  body.app.shell .app-contenido:has(>.pul-p) .doc-detalle{padding:4px 4px 18px 34px}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-mini{flex-direction:column}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .subida-mini .btn{width:100%}
  body.app.shell .pul-s .rx b{font-size:1.25rem}
}

/* ---------------------------------------------------------------- 9. Avisos */
/* el informe del mes: una hoja con membrete (la marca en su letra, no en mayúsculas espaciadas de palo seco) */
body.app.shell .app-contenido:has(>.pul-p) .hoja-informe{border-radius:6px;background:radial-gradient(120% 60% at 50% -10%,#fff,rgba(255,255,255,0) 60%),linear-gradient(180deg,#fff,#f4f5f8);
  box-shadow:inset 0 1px 0 #fff,var(--p-sombra-papel)}
body.app.shell .app-contenido:has(>.pul-p) .hoja-informe[data-objeto]{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(1.6deg)}
body.app.shell .app-contenido:has(>.pul-p) .hoja-informe[data-objeto]:hover{transform:perspective(800px) rotateX(var(--orx,0deg)) rotateY(var(--ory,0deg)) rotate(.4deg) translateY(-4px)}
body.app.shell .app-contenido:has(>.pul-p) .hi-marca{font:400 .78rem/1 "Marcellus",Georgia,serif;letter-spacing:.16em;color:#4c5568;
  padding-bottom:10px;border-bottom:1px solid rgba(28,35,51,.08)}
body.app.shell .app-contenido:has(>.pul-p) .hi-tit{margin-top:12px;font:500 .76rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .hi-mes{font:600 1.3rem/1.15 var(--f-sans);letter-spacing:-.02em}
body.app.shell .app-contenido:has(>.pul-p) .hi-pdf{border-radius:8px;transition:color var(--p-t1),box-shadow var(--p-t2)}
body.app.shell .app-contenido:has(>.pul-p) .hoja-informe:hover .hi-pdf{box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(59,90,150,.28),0 2px 4px rgba(20,28,42,.12)}
/* filtro de alertas: un selector de segmentos con la tecla elegida en relieve */
body.app.shell .app-contenido:has(>.pul-p) .w-segmentos{padding:3px;border-radius:12px;background:linear-gradient(180deg,#e2e6ec,#eef1f5);box-shadow:var(--p-pozo)}
body.app.shell .app-contenido:has(>.pul-p) .w-segmentos span{padding:6px 14px;border-radius:9px;font:550 .8rem var(--f-sans);color:var(--f-suave);
  transition:background var(--p-t2) var(--p-curva),color var(--p-t1),box-shadow var(--p-t2) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) .w-segmentos label:hover span{color:var(--f-tinta)}
body.app.shell .app-contenido:has(>.pul-p) .w-segmentos input:checked+span{background:linear-gradient(180deg,#fff,#f6f7f9);color:var(--f-tinta);
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(20,28,42,.07),0 1px 2px rgba(20,28,42,.1),0 4px 8px -4px rgba(20,28,42,.18)}
body.app.shell .app-contenido:has(>.pul-p) .w-segmentos input:focus-visible+span{outline:2px solid rgba(59,90,150,.6);outline-offset:1px}
/* las alertas: grupos con su recuento; cada aviso, una línea con su fecha; los nuevos, con su punto */
body.app.shell .app-contenido:has(>.pul-p) .grupo-avisos h4{font:600 .9rem var(--f-sans);margin:10px 0 4px}
body.app.shell .app-contenido:has(>.pul-p) .grupo-avisos h4 small{font:550 .76rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .grupo-avisos[hidden]{display:none}
body.app.shell .app-contenido:has(>.pul-p) .grupo-avisos:not([hidden]){animation:p-aparece var(--p-t3) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) .aviso-items li{gap:12px;padding:11px 0;border-top:0;
  background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .aviso-items li:first-child{background:none}
body.app.shell .app-contenido:has(>.pul-p) .aviso-items p{font:450 .88rem/1.5 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .aviso-items time{font:450 .74rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .aviso-items li.nuevo .aviso-dot{background:#3b5a96;box-shadow:0 0 0 3px rgba(59,90,150,.14)}
/* lo que falta: filas que responden con la flecha que avanza */
body.app.shell .app-contenido:has(>.pul-p) .feed a{margin:0 -10px;padding:11px 10px;border-radius:var(--p-r2);transition:background var(--p-t2)}
body.app.shell .app-contenido:has(>.pul-p) .feed a:hover{background:rgba(255,255,255,.6)}
body.app.shell .app-contenido:has(>.pul-p) .feed li{border-bottom:0;background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .feed li:last-child{background:none}
body.app.shell .app-contenido:has(>.pul-p) .feed b{font:550 .88rem/1.4 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .feed small{font:450 .76rem/1.45 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .feed-punto{width:7px;height:7px;margin-top:7px}
body.app.shell .app-contenido:has(>.pul-p) .feed-punto.acento{box-shadow:0 0 0 3px rgba(59,90,150,.12)}
body.app.shell .app-contenido:has(>.pul-p) .feed-punto.warn{box-shadow:0 0 0 3px rgba(176,122,42,.14)}
/* la agenda: cada fecha, una hoja de calendario en tonos de la paleta (el mes en minúscula) */
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .agenda-lista li{padding:10px 0;border-bottom:0;
  background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .agenda-lista li:last-child{background:none}
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .ag-dia{width:42px;height:46px;border-radius:9px;background:linear-gradient(180deg,#fff,#f3f5f8);
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(20,28,42,.08),0 2px 3px rgba(20,28,42,.08),0 6px 12px -6px rgba(20,28,42,.25)}
/* el mes, en el tono de su tipo sobre una franja clara del mismo tono (blanco sobre ámbar no llegaba a AA) */
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .ag-dia small{padding:3px 0 2px;font:650 .62rem/1.2 var(--f-sans);letter-spacing:.02em;text-transform:lowercase;
  color:color-mix(in srgb,var(--c) 78%,#000);background:color-mix(in srgb,var(--c) 15%,#fff);box-shadow:inset 0 -1px 0 color-mix(in srgb,var(--c) 22%,transparent)}
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .ag-dia b{font:600 1.05rem/1 var(--f-sans);letter-spacing:-.02em}
body.app.shell .app-contenido:has(>.pul-p) .avisos-agenda .agenda-lista li>div b{font:550 .86rem/1.38 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .informes-hist{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
body.app.shell .app-contenido:has(>.pul-p) .informes-hist li{display:flex;align-items:baseline;gap:10px}
body.app.shell .app-contenido:has(>.pul-p) .informes-hist a{font:600 .88rem var(--f-sans);text-decoration:none}
body.app.shell .app-contenido:has(>.pul-p) .informes-hist a:hover{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
body.app.shell .app-contenido:has(>.pul-p) .informes-hist small{font:450 .76rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) details.informe-comentario>summary{font:600 .84rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) details.informe-comentario form{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin-top:10px;max-width:640px}
body.app.shell .app-contenido:has(>.pul-p) details.informe-comentario textarea{width:100%}

/* ---------------------------------------------------------------- 10. Mi cuenta */
/* el índice: la sección en la que estás, marcada con un filo que crece (pulido.js) */
body.app.shell .app-contenido:has(>.pul-p) .ajustes{gap:0 52px}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice{top:calc(var(--p-tb,64px) + 24px);gap:2px}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a{position:relative;padding:9px 12px;border-radius:var(--p-r2);font:550 .86rem var(--f-sans);
  transition:background var(--p-t2),color var(--p-t1)}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:2px;border-radius:2px;
  background:var(--f-acento);transform:scaleY(0);transition:transform var(--p-t3) var(--p-curva)}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.p-on{color:var(--f-acento);background:linear-gradient(90deg,rgba(59,90,150,.08),rgba(59,90,150,.02))}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.p-on::before{transform:scaleY(1)}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.p-on .ico{color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.indice-peligro.p-on{color:#8a3a2f;background:linear-gradient(90deg,rgba(168,73,60,.08),rgba(168,73,60,.02))}
body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.indice-peligro::before{background:#a8493c}
/* cada ajuste: título y explicación a un lado, los campos al otro; filetes que se desvanecen */
body.app.shell .app-contenido:has(>.pul-p) .ajuste{padding:30px 0;border-top:0;box-shadow:none;scroll-margin-top:calc(var(--p-tb,64px) + 20px);
  background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .ajuste:first-child{background:none;padding-top:6px}
body.app.shell .app-contenido:has(>.pul-p) .ajuste-cab h3{font:600 var(--p-fs-titulo)/1.3 var(--f-sans);letter-spacing:-.012em}
body.app.shell .app-contenido:has(>.pul-p) .ajuste-cab p{font:450 .84rem/1.6 var(--f-sans);color:var(--f-suave);max-width:40ch}
body.app.shell .app-contenido:has(>.pul-p) .ajuste .cuenta-form{gap:16px}
body.app.shell .app-contenido:has(>.pul-p) .ajuste label{font:550 .8rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .ruta-cnae{margin:-6px 0 0;font:450 .78rem/1.5 var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .detectado{font:600 .72rem var(--f-sans);color:var(--f-warn)}
body.app.shell .app-contenido:has(>.pul-p) pre.codigo{margin:10px 0 0;padding:14px 16px;border-radius:var(--p-r3);background:linear-gradient(180deg,#e4e8ee,#eef1f5);
  box-shadow:var(--p-pozo);font:500 .76rem/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .conectar{gap:8px;padding:18px 0 0;box-shadow:none;border-top:0;
  background:linear-gradient(90deg,var(--p-hilo),transparent 85%) 0 0/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .conectar>b .ico{color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) .clave-estado{gap:6px 12px}
body.app.shell .app-contenido:has(>.pul-p) .ajuste details.pliegue{margin-top:2px}
body.app.shell .app-contenido:has(>.pul-p) .cuenta-baja{gap:12px 14px}
body.app.shell .app-contenido:has(>.pul-p) .cuenta-baja label{display:flex;flex-direction:column;gap:6px;min-width:260px;font:550 .8rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .btn-peligro{color:#8a3a2f!important;background:linear-gradient(180deg,#fff,#fbf4f3)!important;
  box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(168,73,60,.3),0 1px 2px rgba(20,28,42,.06)!important}
body.app.shell .app-contenido:has(>.pul-p) .btn-peligro:hover{box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(168,73,60,.5),0 6px 14px -8px rgba(168,73,60,.45)!important}
body.app.shell .app-contenido:has(>.pul-p) .btn-icono-txt{min-height:32px;padding:5px 10px;font-size:.8rem}
@media (max-width:900px){
  body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice{margin:0 -16px 4px;padding:0 16px;border-bottom:0;
    background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 100%/100% 1px no-repeat}
  body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a{padding:12px 12px 13px;border-radius:0;background:none!important}
  body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a::before{left:12px;right:12px;top:auto;bottom:0;width:auto;height:2px;transform:scaleX(0)}
  body.app.shell .app-contenido:has(>.pul-p) .ajustes-indice a.p-on::before{transform:scaleX(1)}
  body.app.shell .app-contenido:has(>.pul-p) .ajuste-cab p{max-width:none}
}
@media (max-width:640px){
  body.app.shell .app-contenido:has(>.pul-p) .ajuste{padding:24px 0}
  body.app.shell .app-contenido:has(>.pul-p) .ajuste .cuenta-form>.btn,body.app.shell .app-contenido:has(>.pul-p) .ajuste .cuenta-form form .btn{width:100%}
  body.app.shell .app-contenido:has(>.pul-p) .ajuste .cuenta-form>form{align-self:stretch}
  body.app.shell .app-contenido:has(>.pul-p) .cuenta-baja{flex-direction:column;align-items:stretch}
  body.app.shell .app-contenido:has(>.pul-p) .cuenta-baja label{min-width:0}
}

/* ---------------------------------------------------------------- 11. Cartera y ficha del consultor */
body.app.shell .app-contenido:has(>.pul-p) .cartera-portada h2{max-width:22ch}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t td{vertical-align:middle}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t td.et a{color:var(--f-tinta);transition:color var(--p-t1)}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t td.et a b{font:600 .92rem/1.35 var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t tr:hover td.et a{color:var(--f-acento)}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t td.et small{font:450 .76rem var(--f-sans)}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t td small.tenue{font:450 .72rem var(--f-sans);color:var(--f-tenue)}
body.app.shell .app-contenido:has(>.pul-p) .cartera-t .renov{white-space:normal;min-width:160px;font-size:.84rem}
/* la ficha: cuatro bloques abiertos en dos columnas, listas con su punto y formularios a la medida */
body.app.shell .app-contenido:has(>.pul-p) .ficha-cons{gap:calc(var(--ritmo) + 4px) 56px}
body.app.shell .app-contenido:has(>.pul-p) .panel-ficha{gap:10px}
body.app.shell .app-contenido:has(>.pul-p) .panel-ficha .w-cab{justify-content:space-between;margin-bottom:4px}
body.app.shell .app-contenido:has(>.pul-p) .panel-ficha .feed li{padding:11px 0;border-bottom:0;background:linear-gradient(90deg,var(--p-hilo),transparent 90%) 0 100%/100% 1px no-repeat}
body.app.shell .app-contenido:has(>.pul-p) .panel-ficha .feed li:last-child{background:none}
body.app.shell .app-contenido:has(>.pul-p) .ficha-form{gap:12px}
body.app.shell .app-contenido:has(>.pul-p) .ficha-form textarea{width:100%;resize:vertical}
body.app.shell .app-contenido:has(>.pul-p) .ficha-form>.btn{align-self:flex-start}
body.app.shell .app-contenido:has(>.pul-p) .fila-form{gap:12px 14px;margin-top:8px}
body.app.shell .app-contenido:has(>.pul-p) .fila-form label{gap:6px;font:550 .8rem var(--f-sans);color:var(--f-tinta-2)}
body.app.shell .app-contenido:has(>.pul-p) .fila-form small.tenue{align-self:center;font:450 .78rem var(--f-sans);color:var(--f-tenue)}
@media (max-width:760px){
  /* la cartera en el móvil: cada empresa, una ficha de dos columnas con la etiqueta encima de cada cifra (no una tabla
     de nueve columnas que se desliza) */
  body.app.shell .app-contenido:has(>.pul-p) .table-scroll:has(>.cartera-t){overflow:visible;-webkit-mask-image:none;mask-image:none}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t,body.app.shell .app-contenido:has(>.pul-p) .cartera-t tbody{display:block;min-width:0!important;width:100%}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t thead{display:none}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 18px;padding:16px 0;
    background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 100%/100% 1px no-repeat}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t td{display:block;padding:0;border:0;background:none!important;
    position:static!important;text-align:left!important;white-space:normal;min-width:0!important;font-size:.9rem}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t td.et{grid-column:1 / -1}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t td[data-et]::before{content:attr(data-et);display:block;margin-bottom:2px;font:550 .72rem var(--f-sans);color:var(--f-tenue)}
  body.app.shell .app-contenido:has(>.pul-p) .cartera-t tbody tr:hover{background:linear-gradient(90deg,var(--p-hilo-2),var(--p-hilo) 60%,transparent) 0 100%/100% 1px no-repeat}
}
@media (max-width:640px){
  body.app.shell .app-contenido:has(>.pul-p) .ficha-form>.btn,body.app.shell .app-contenido:has(>.pul-p) .fila-form .btn{width:100%}
  body.app.shell .app-contenido:has(>.pul-p) .fila-form label{flex:1 1 100%}
  body.app.shell .app-contenido:has(>.pul-p) .fila-form input{width:100%}
}

/* ---------------------------------------------------------------- 12a. Consola de operación (body.pul-admin) */
/* (los mandos, campos, tablas, desplegables y avisos comunes ya llegan por el alcance .pul-admin .app-cuerpo) */
body.app.shell.pul-admin .app-cabecera h1{font:600 1.45rem/1.2 var(--f-sans);letter-spacing:-.02em}
body.app.shell.pul-admin .app-cabecera .fine{font:450 .8rem/1.5 var(--f-sans);color:var(--f-tenue)}
body.app.shell.pul-admin .admin-buscar input{min-height:38px}
body.app.shell.pul-admin .app-side .app-nav a{transition:background var(--p-t2),box-shadow var(--p-t2),color var(--p-t1)}
/* las cifras de la consola: rejilla con filetes que se desvanecen */
body.app.shell.pul-admin .kpi-grid{border:0!important;overflow:hidden}
body.app.shell.pul-admin .kpi{grid-template-columns:minmax(0,1fr) auto;margin:0 0 -1px -1px;border:0;padding:18px 22px 16px;
  background:linear-gradient(180deg,transparent,var(--p-hilo) 18%,var(--p-hilo) 82%,transparent) 0 0/1px 100% no-repeat,
    linear-gradient(90deg,transparent,var(--p-hilo) 10%,var(--p-hilo) 90%,transparent) 0 100%/100% 1px no-repeat}
body.app.shell.pul-admin .kpi-et{font:550 var(--p-fs-et)/1.35 var(--f-sans)}
body.app.shell.pul-admin .kpi-v{font:600 1.65rem/1.1 var(--f-sans);letter-spacing:-.025em}
body.app.shell.pul-admin .kpi-pie{font:450 .76rem/1.45 var(--f-sans)}
/* listas y tablas: el nombre de la empresa en tinta (sin el subrayado grueso), el acento al pasar */
body.app.shell.pul-admin .app-cuerpo :is(.admin-fila,.dash-t td) a:not(.btn):not(#p){color:var(--f-tinta);font-weight:600;text-decoration:none;transition:color var(--p-t1)}
body.app.shell.pul-admin .app-cuerpo :is(.admin-fila,.dash-t td) a:not(.btn):not(#p):hover{color:var(--f-acento);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
body.app.shell.pul-admin .app-cuerpo .admin-fila{margin:0;padding:8px 0;line-height:1.5;background:linear-gradient(90deg,var(--p-hilo),transparent 85%) 0 100%/100% 1px no-repeat}
body.app.shell.pul-admin .app-cuerpo .admin-fila b{font-weight:600}
body.app.shell.pul-admin .app-cuerpo .admin-fila .estado{margin-left:3px}   /* el halo del punto, sin recortar */
body.app.shell.pul-admin .app-cuerpo .resultado>h3{font:600 var(--p-fs-titulo)/1.3 var(--f-sans);letter-spacing:-.012em}
body.app.shell.pul-admin .app-cuerpo .resultado>h3 .cat{font:450 .8rem var(--f-sans);color:var(--f-tenue)}
body.app.shell.pul-admin .app-cuerpo .dash-t td.fine{font-size:.8rem}
body.app.shell.pul-admin .app-cuerpo .dash-t .btn{min-height:32px;padding:5px 11px;font-size:.8rem}
/* los mandos dentro de una fila de tabla, compactos (las filas no crecen por un selector) */
body.app.shell.pul-admin .app-cuerpo .dash-t td :is(select,input):not(#p){min-height:32px;padding:5px 10px;font-size:.8rem}
body.app.shell.pul-admin .app-cuerpo .dash-t td select:not(#p){padding-right:30px}
body.app.shell.pul-admin .app-cuerpo .dash-t td{padding-top:8px;padding-bottom:8px}
@media (max-width:860px){
  body.app.shell.pul-admin .app-side .app-nav{gap:4px}
  body.app.shell.pul-admin .app-cuerpo{padding:20px 18px 32px}
  body.app.shell.pul-admin .app-cabecera h1{font-size:1.3rem}
  body.app.shell.pul-admin .kpi{padding:14px 12px 12px}
  body.app.shell.pul-admin .kpi-v{font-size:1.4rem}
}

/* ---------------------------------------------------------------- 12. Acceso, registro, contraseña y /verificar (body.pul-pub) */
/* la lámina con sus dos columnas: el filete que las separa se desvanece; el sello flota y gira despacio */
body.app.publico.pul-pub main.auth{gap:56px;padding:56px clamp(24px,5vw,64px) 52px}
body.app.publico.pul-pub .auth-form{border-left:0;
  background:linear-gradient(180deg,transparent,rgba(28,35,51,.1) 18%,rgba(28,35,51,.1) 82%,transparent) 0 0/1px 100% no-repeat!important}
body.app.publico.pul-pub .auth-lado h2{letter-spacing:-.022em;text-wrap:balance}
body.app.publico.pul-pub .auth-sub{font-size:1.02rem;line-height:1.6;max-width:40ch}
body.app.publico.pul-pub .auth-sello{filter:drop-shadow(0 22px 26px rgba(20,28,42,.18)) drop-shadow(0 4px 6px rgba(20,28,42,.08))}
@media (prefers-reduced-motion:no-preference){
  body.app.publico.pul-pub .auth-sello{animation:obj-flota 9s ease-in-out infinite}
}
/* el formulario: campos de 46 px con el foco en anillo suave, el botón con el mismo acabado que en la app */
body.app.publico.pul-pub .auth-form h1{font:420 1.85rem/1.15 var(--f-serif);letter-spacing:-.015em}
body.app.publico.pul-pub .auth-form form{gap:18px}
body.app.publico.pul-pub .auth-form label{gap:7px;font:550 .82rem var(--f-sans);color:var(--f-tinta-2)}
body.app.publico.pul-pub .auth-form label small{font:450 .76rem var(--f-sans);color:var(--f-tenue)}
body.app.publico.pul-pub .auth-form :is(input:not([type=hidden]):not([type=file]),#huella){min-height:46px;padding:11px 14px!important;font:450 1rem var(--f-sans)!important;
  color:var(--f-tinta);box-shadow:inset 0 1px 2px rgba(20,28,42,.09),inset 0 0 0 1px rgba(20,28,42,.1),0 1px 0 #fff!important;
  transition:box-shadow var(--p-t2) var(--p-curva),background var(--p-t2)}
body.app.publico.pul-pub .auth-form input:not([type=hidden]):not([type=file]):hover{box-shadow:inset 0 1px 2px rgba(20,28,42,.09),inset 0 0 0 1px rgba(20,28,42,.18),0 1px 0 #fff!important}
body.app.publico.pul-pub .auth-form input:not([type=hidden]):not([type=file]):focus{background:#fff!important;
  box-shadow:inset 0 0 0 1px rgba(59,90,150,.6),var(--p-foco)!important}
body.app.publico.pul-pub .auth-form ::placeholder{color:#8a92a3;opacity:1}
body.app.publico.pul-pub .auth-form .btn-p{min-height:48px;border-radius:12px;font:600 .95rem var(--f-sans);
  background:linear-gradient(180deg,#5572af,#405c97);transition:transform var(--p-t1) var(--p-curva),box-shadow var(--p-t2) var(--p-curva),background var(--p-t2);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(10,20,45,.14),0 0 0 1px rgba(38,56,98,.38),0 1px 2px rgba(20,28,42,.14),0 8px 18px -10px rgba(40,60,110,.6)}
body.app.publico.pul-pub .auth-form .btn-p:hover{background:linear-gradient(180deg,#5a79b8,#45629f);transform:translateY(-1px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(10,20,45,.14),0 0 0 1px rgba(38,56,98,.38),0 2px 4px rgba(20,28,42,.12),0 14px 24px -12px rgba(40,60,110,.62)}
body.app.publico.pul-pub .auth-form .btn-p:active{transform:translateY(0) scale(.99);transition-duration:80ms}
body.app.publico.pul-pub .auth-form .btn-p .ico{transition:transform var(--p-t2) var(--p-curva)}
body.app.publico.pul-pub .auth-form .btn-p:hover .ico{transform:translateX(3px)}
body.app.publico.pul-pub :is(a,button,input,label):focus-visible{outline:2px solid rgba(59,90,150,.6);outline-offset:3px}
body.app.publico.pul-pub .auth-form input:focus-visible{outline:0}
body.app.publico.pul-pub .auth-pie{font:450 .84rem/1.6 var(--f-sans);color:var(--f-suave)}
body.app.publico.pul-pub .auth-pie a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:rgba(34,64,143,.3);
  transition:text-decoration-color var(--p-t2)}
body.app.publico.pul-pub .auth-pie a:hover{text-decoration-color:currentColor}
/* avisos del formulario: bandas tonales, sin filo grueso */
body.app.publico.pul-pub .franja{border-radius:12px;padding:12px 16px;font:450 .88rem/1.5 var(--f-sans);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),inset 0 0 0 1px rgba(20,28,42,.06)}
body.app.publico.pul-pub .franja-ko{color:#8a3a2f;background:linear-gradient(90deg,rgba(168,73,60,.09),rgba(168,73,60,.03))}
body.app.publico.pul-pub .franja-info{color:#2c4a8e;background:linear-gradient(90deg,rgba(59,90,150,.09),rgba(59,90,150,.03))}
body.app.publico.pul-pub .auth-aviso{display:block;animation:p-despliega var(--p-t3) var(--p-curva) both}
body.app.publico.pul-pub .auth-aviso::first-letter{text-transform:uppercase}   /* los mensajes del servidor llegan en minúscula */
/* los tres pasos del registro: el número en una tecla pequeña, el texto a su lado */
body.app.publico.pul-pub .auth-pasos{gap:18px}
body.app.publico.pul-pub .auth-pasos li>span{width:28px;height:28px;font:600 .8rem var(--f-sans)}
body.app.publico.pul-pub .auth-pasos b{font:600 .96rem/1.35 var(--f-sans)}
body.app.publico.pul-pub .auth-pasos small{font:450 .84rem/1.5 var(--f-sans)}
body.app.publico.pul-pub .auth-garantia{font:450 .84rem/1.5 var(--f-sans)}
body.app.publico.pul-pub .auth-garantia .ico{flex:none;color:var(--f-acento)}
/* /verificar: la zona de soltar como un pozo con su icono; el resultado, una hoja de datos */
body.app.publico.pul-verificar .ver-zona{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:26px 18px;border:0;border-radius:16px;
  background:linear-gradient(180deg,#e7eaf0,#f1f3f6);box-shadow:inset 0 1px 3px rgba(20,28,42,.08),inset 0 0 0 1px rgba(20,28,42,.06),0 1px 0 #fff;
  transition:box-shadow var(--p-t2) var(--p-curva),background var(--p-t2)}
body.app.publico.pul-verificar .ver-zona::before{content:"";position:absolute;inset:6px;border:1px dashed rgba(28,35,51,.18);border-radius:11px;pointer-events:none;
  transition:border-color var(--p-t2)}
body.app.publico.pul-verificar .ver-zona:is(:hover,.encima){background:linear-gradient(180deg,#e9edf5,#f3f5f9);
  box-shadow:inset 0 1px 3px rgba(20,28,42,.08),inset 0 0 0 1px rgba(59,90,150,.22),0 0 0 4px rgba(59,90,150,.07)}
body.app.publico.pul-verificar .ver-zona:is(:hover,.encima)::before{border-color:rgba(59,90,150,.45)}
body.app.publico.pul-verificar .ver-zona:focus-within{box-shadow:inset 0 0 0 1px rgba(59,90,150,.55),var(--p-foco)}
body.app.publico.pul-verificar .ver-ico{display:grid;place-items:center;color:var(--f-acento);margin-bottom:2px}
body.app.publico.pul-verificar .ver-zona b{margin:0;font:600 .98rem var(--f-sans);color:var(--f-tinta)}
body.app.publico.pul-verificar .ver-zona small{font:450 .78rem var(--f-sans);color:var(--f-tenue)}
body.app.publico.pul-verificar .ver-o{display:flex;align-items:center;gap:12px;margin:8px 0 6px;font:500 .8rem var(--f-sans);color:var(--f-tenue)}
body.app.publico.pul-verificar .ver-o::before,body.app.publico.pul-verificar .ver-o::after{content:"";flex:1;height:1px;background:rgba(28,35,51,.1)}
body.app.publico.pul-verificar .ver-res .franja{animation:p-despliega var(--p-t3) var(--p-curva) both}
body.app.publico.pul-verificar .ver-res dl{gap:8px 16px;font:450 .86rem/1.45 var(--f-sans)}
body.app.publico.pul-verificar .ver-res dt{font-weight:550;color:var(--f-tenue)}
body.app.publico.pul-verificar .ver-res dd{color:var(--f-tinta)}
body.app.publico.pul-verificar .ver-huella{font-size:.74rem;color:var(--f-tinta-2)}
/* el pie público: sin el filete dorado de la hoja antigua (style.css), un filete neutro que se desvanece */
body.app.publico.pul-pub footer.pub-pie{border-top:0;background:linear-gradient(90deg,transparent,rgba(28,35,51,.12) 20%,rgba(28,35,51,.12) 80%,transparent) 0 0/100% 1px no-repeat!important}
body.app.publico.pul-pub footer.pub-pie::before{display:none}
body.app.publico.pul-pub .pub-pie nav a{text-decoration:none;transition:color var(--p-t1)}
body.app.publico.pul-pub .pub-pie nav a:hover{color:var(--f-acento);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
@media (max-width:980px){
  body.app.publico.pul-pub .auth-form{padding:26px 0 0!important;
    background:linear-gradient(90deg,transparent,rgba(28,35,51,.1) 15%,rgba(28,35,51,.1) 85%,transparent) 0 0/100% 1px no-repeat!important}
}
@media (max-width:640px){
  body.app.publico.pul-pub main.auth{margin-top:8px;padding:30px 22px 30px;gap:24px}
  body.app.publico.pul-pub .auth-lado{gap:14px}
  body.app.publico.pul-pub .auth-lado h2{font-size:1.85rem}
  body.app.publico.pul-pub .auth-sub{font-size:.95rem}
  body.app.publico.pul-pub .auth-form h1{font-size:1.45rem}
  /* registro en el móvil: la promesa arriba, el formulario a mano y los pasos después */
  body.app.publico.pul-registro main.auth{display:flex;flex-direction:column}
  body.app.publico.pul-registro .auth-lado{display:contents}
  body.app.publico.pul-registro .auth-lado h2{order:1}
  body.app.publico.pul-registro .auth-form{order:2}
  body.app.publico.pul-registro .auth-pasos{order:3;margin:6px 0 0}
  body.app.publico.pul-registro .auth-garantia{order:4}
  body.app.publico.pul-registro .auth-sello{display:none}
  body.app.publico.pul-registro .auth-pasos small{font-size:.8rem}
}

@media (max-width:640px){
  /* la hoja del informe, pequeña: la acción ya está en el botón de arriba */
  body.app.shell .app-contenido:has(>.pul-p) .hoja-informe{max-width:156px;padding:14px 14px 12px;margin:4px auto 10px}
  body.app.shell .app-contenido:has(>.pul-p) .hi-marca{font-size:.62rem;padding-bottom:7px}
  body.app.shell .app-contenido:has(>.pul-p) .hi-mes{font-size:1rem}
  body.app.shell .app-contenido:has(>.pul-p) .hi-emp{font-size:.66rem}
  body.app.shell .app-contenido:has(>.pul-p) .hi-pdf{padding:4px 8px;font-size:.68rem}
}

@media (max-width:640px){
  body.app.shell .app-contenido:has(>.pul-p) .talon{min-height:190px;width:min(330px,100%);justify-self:center;padding:32px 22px 28px;margin:10px auto 4px}
  body.app.shell .app-contenido:has(>.pul-p) .talon b{font-size:2.4rem}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-g{padding:2px 0 4px 16px!important}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-oferta.mesa-mejor{margin:0 0 0 -16px;padding:14px 0 10px 16px}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-form{padding:18px 16px!important}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-form .grid-form{grid-template-columns:repeat(2,minmax(0,1fr))}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-form .grid-form label:has(select){grid-column:1 / -1}   /* sin opciones cortadas */
  body.app.shell .app-contenido:has(>.pul-p) .mesa-form .btn{width:100%}
  body.app.shell .app-contenido:has(>.pul-p) .rp-pista{margin:50px 0 52px}
  body.app.shell .app-contenido:has(>.pul-p) .mesa-ahorro{padding:12px 14px}
}

@media (max-width:640px){
  /* cabeceras de sección: título y explicación a todo el ancho; los enlaces, en una fila debajo */
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .seccion-cab{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:2px 16px}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .seccion-cab>:is(h3,p){flex-basis:100%}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .seccion-cab>.enlace-mas{margin:6px 0 0!important}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra{padding:14px 12px 4px 0;margin-right:12px}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifras-4 .cifra{padding:14px 12px 10px 0;margin-right:0}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifras-4 .cifra:nth-child(even){padding-left:14px;padding-right:0;background:none}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifras-4 .cifra:nth-child(n+3){
    box-shadow:inset 0 1px 0 var(--p-hilo)}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .cifra>small{max-width:none}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) .btn{min-height:44px}
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]),select){min-height:44px;font-size:1rem}
  body.app.shell .app-contenido:has(>.pul-p) .portada-acciones{display:grid;grid-template-columns:1fr;gap:10px}
  body.app.shell .app-contenido:has(>.pul-p) .portada-acciones .btn{width:100%}
  body.app.shell .app-contenido:has(>.pul-p) .rating-dial svg{max-width:270px}
  /* la prueba de estrés, compacta: la cifra a la izquierda y su lectura al lado */
  body.app.shell .app-contenido:has(>.pul-p) .estres-filas{gap:16px}
  body.app.shell .app-contenido:has(>.pul-p) .estres-f{display:grid;grid-template-columns:4.4rem minmax(0,1fr);grid-template-areas:"v t" "v l";
    column-gap:12px;row-gap:2px;align-items:start}
  body.app.shell .app-contenido:has(>.pul-p) .estres-f>span{grid-area:t}
  body.app.shell .app-contenido:has(>.pul-p) .estres-f b{grid-area:v;font-size:1.5rem;display:flex;flex-direction:column;line-height:1.05}
  body.app.shell .app-contenido:has(>.pul-p) .estres-f b small{margin:2px 0 0}
  body.app.shell .app-contenido:has(>.pul-p) .estres-f>small{grid-area:l;max-width:none}
}
body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) :is(small,.fine,.nota-fuente,p){text-wrap:pretty}
/* ---------------------------------------------------------------- movimiento reducido: nada se mueve, todo queda en su estado final
   (las animaciones de entrada terminan en opacidad 1: sus keyframes llevan el «to» explícito) */
@media (prefers-reduced-motion:reduce){
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo),
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) *,
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) *::before,
  body.app.shell :is(.app-contenido:has(>.pul-p),.pul-s,.pul-admin .app-cuerpo) *::after,
  body.app.shell .app-contenido:has(>.pul-p)>*,
  body.app.publico.pul-pub *,body.app.publico.pul-pub *::before,body.app.publico.pul-pub *::after{
    animation-duration:0s!important;animation-delay:0s!important;animation-iteration-count:1!important;
    transition-duration:0s!important;transition-delay:0s!important;scroll-behavior:auto!important}
  html.escena-js body.app.shell .app-contenido:has(>.pul-p) .escena-entra{opacity:1}
}
