.casos-page{max-width:850px;margin-inline:auto}
.caso-panel{padding:1.1rem 1.3rem;margin:1.2rem 0;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-wrap:anywhere}
.caso-panel p{margin:.5rem 0;line-height:1.6}
.caso-panel summary{cursor:pointer;padding:.4rem 0}
.caso-panel form{display:grid;gap:.85rem;margin-top:.8rem}
.caso-panel label{display:grid;gap:.4rem}
.caso-panel input:not([type=checkbox]){width:100%;min-width:0;background:var(--bg);color:var(--text);padding:.7rem;border:1px solid var(--border);border-radius:.5rem;font:inherit}
.caso-panel .caso-consent{display:flex;align-items:flex-start;gap:.7rem}
.caso-consent input{flex:none;margin-top:.4rem}
.caso-panel .btn{justify-self:start;white-space:normal}
.caso-facts dt{font-weight:600;margin-top:.8rem}
.caso-facts dd{margin-left:0;color:var(--muted)}
.casos-list{list-style:none;padding:0}
.casos-list h2{font-size:1.3rem;margin:.2rem 0}
.caso-docs-save{margin-top:1rem}
@media(max-width:414px){.caso-panel{padding:1rem}.caso-panel .btn{width:100%}}
.caso-chat{margin:1.5rem 0 2rem;padding:clamp(1rem,3vw,1.6rem);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-wrap:anywhere;scroll-margin-top:6rem}
.caso-chat h2{font-family:var(--font-display);font-size:clamp(1.4rem,3vw,1.9rem);margin:.3rem 0 .8rem}
.caso-chat h3{font-size:1.05rem;margin:0 0 .7rem}
.caso-chat p{line-height:1.6;margin:.55rem 0}
.caso-chat-eyebrow,.caso-chat-speaker{font-weight:600}
.caso-chat-eyebrow,.caso-chat-footer{color:var(--muted);font-size:.9rem}
.caso-chat-turn{padding:1rem 0;border-top:1px solid var(--border);margin-top:1rem}
.caso-chat-user{padding:1rem;border:1px solid var(--border);border-radius:.6rem;background:var(--bg)}
.caso-chat-message{white-space:pre-wrap}
.caso-chat summary{cursor:pointer;padding:.7rem 0;min-height:44px}
.caso-chat blockquote{margin:.5rem 0;padding-left:.8rem;border-left:2px solid var(--muted);white-space:pre-wrap}
.caso-chat-proposal{padding:1rem;margin-top:1rem;border:1px solid var(--border);border-radius:.6rem}
.caso-chat table{border-collapse:collapse;width:100%;table-layout:fixed;margin:.7rem 0}
.caso-chat caption{text-align:left;color:var(--muted);padding-bottom:.5rem}
.caso-chat th,.caso-chat td{text-align:left;vertical-align:top;padding:.65rem .35rem;border-bottom:1px solid var(--border);font-size:.9rem;overflow-wrap:anywhere}
.caso-chat [data-chat-form]{display:grid;gap:.7rem;margin-top:1.2rem}
.caso-chat textarea{box-sizing:border-box;width:100%;min-width:0;resize:vertical;background:var(--bg);color:var(--text);padding:.85rem;border:1px solid var(--border);border-radius:.6rem;font:inherit;line-height:1.5}
.caso-chat :is(button,a,textarea,input,summary):focus-visible{outline:2px solid var(--brand);outline-offset:4px}
.caso-chat-actions{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}
.caso-chat .btn{white-space:normal}
.caso-chat-secondary{font:inherit;color:var(--text);background:transparent;border:1px solid var(--border);border-radius:.6rem;padding:.7rem 1rem;min-height:44px;cursor:pointer}
.caso-chat-consent{display:flex;align-items:flex-start;gap:.7rem;line-height:1.5}
.caso-chat-consent input{flex:none;margin-top:.4rem;width:1.15rem;height:1.15rem}
.caso-chat-note{padding:.8rem;border-left:3px solid var(--muted);background:var(--bg)}
.caso-chat button:disabled{opacity:.6;cursor:default}
.caso-chat [hidden]{display:none!important}
@media(max-width:414px){.caso-chat-actions>*{width:100%}.caso-chat-proposal{padding:.7rem}.caso-chat th,.caso-chat td{padding:.5rem .2rem}}

/* Resumen compacto del caso. Sólo tokens del sistema: hereda tema y tipografías.
   Sin movimiento: es una pieza de orientación, no una animación. */
.caso-resumen{margin:1.2rem 0;padding:clamp(1rem,3vw,1.6rem);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-wrap:anywhere;scroll-margin-top:6rem}
.caso-resumen-eyebrow{margin:0;color:var(--muted);font-size:.9rem;font-weight:600}
.caso-resumen-title{font-family:var(--font-display);font-size:clamp(1.5rem,3.4vw,2.1rem);line-height:1.15;margin:.35rem 0 .2rem}
.caso-resumen-ayuda{margin:0 0 .2rem;line-height:1.6}
.caso-resumen-ayuda a{color:var(--text)}
.caso-resumen-alerta{margin:.9rem 0 0;padding:.75rem .85rem;border-left:3px solid var(--warn);background:var(--bg);line-height:1.55}
.caso-resumen-alerta--no{border-left-color:var(--danger)}
.caso-resumen-cifras{display:flex;flex-wrap:wrap;gap:.6rem 2.2rem;margin:1.1rem 0 0}
.caso-resumen-cifras dt{color:var(--muted);font-size:.85rem}
.caso-resumen-cifras dd{margin:.15rem 0 0;font-size:1.1rem;font-weight:600}
.caso-resumen-nota{display:block;color:var(--muted);font-size:.8rem;font-weight:400;line-height:1.35}
.caso-resumen-estado{display:flex;flex-wrap:wrap;gap:.35rem 1.4rem;list-style:none;padding:0;margin:1rem 0 0;color:var(--muted);font-size:.92rem}
.caso-resumen-estado strong{color:var(--text)}
.caso-resumen-siguiente{margin:.9rem 0 0;line-height:1.6}
.caso-resumen-ir{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.1rem;padding-top:.9rem;border-top:1px solid var(--border)}
.caso-resumen-ir a{display:inline-flex;align-items:center;min-height:44px;padding:.5rem .9rem;border:1px solid var(--border);border-radius:.6rem;color:var(--text);text-decoration:none}
.caso-resumen-ir a:hover{border-color:var(--brand)}
.caso-resumen :is(a,summary):focus-visible{outline:2px solid var(--brand);outline-offset:4px}
@media(max-width:414px){
  /* Compacto de verdad en móvil: cifras en dos columnas y saltos en fila,
     sin perder la diana táctil de 44px de cada enlace. */
  .caso-resumen-cifras{display:grid;grid-template-columns:1fr 1fr;gap:.7rem 1rem}
  .caso-resumen-cifras>div:only-child{grid-column:1/-1}
  .caso-resumen-cifras dd{font-size:1rem}
  .caso-resumen-ir a{flex:1 1 auto;justify-content:center;padding:.5rem .7rem}
}

/* Mismo eje único que el dossier (buscador.html:13, `--mbw`): los tres bloques del
   caso abrían a 1.132 px contra los 920 px de las tarjetas de la ayuda, y el salto
   caía justo en lo primero que se ve. Medido a 1366 px. */
.caso-resumen,.caso-panel,.caso-chat{max-width:var(--mbw,920px);margin-inline:auto}

/* Tabla de la propuesta: `overflow-wrap:anywhere` del contenedor partía los importes
   a mitad de dígito («290.000,50» en dos trozos a 360 px, en diez al 200 % de zoom),
   porque `table-layout:fixed` deja columnas de 90/80/66 px. En pantallas estrechas la
   tabla se dimensiona por su contenido y, si no cabe, desplaza dentro de su propia
   caja: ningún número se rompe y no se recorta ni redondea ningún dato. */
.caso-chat-tabla{overflow-x:auto}
@media(max-width:460px){
  .caso-chat-proposal table{table-layout:auto;width:auto;min-width:100%}
  .caso-chat-proposal :is(th,td){overflow-wrap:normal;word-break:normal}
  /* El importe y su moneda son un solo dato: no se separan. La etiqueta de la fila
     sigue envolviendo por palabras, que es prosa. */
  .caso-chat-proposal td{white-space:nowrap}
}

/* Decisión sobre lo que quedó a medias. Aparece junto al control que el usuario
   acaba de intentar usar, no en la cabecera de la página: el aviso anterior se
   inyectaba en el panel y quedaba fuera de la pantalla donde se estaba editando. */
.caso-decision{margin:.7rem 0;padding:.85rem 1rem;border:1px solid var(--warn);border-radius:.6rem;background:var(--bg)}
.caso-decision-texto{margin:0 0 .7rem;line-height:1.55}
.caso-decision-acciones{display:flex;flex-wrap:wrap;gap:.6rem}
.caso-decision-btn{font:inherit;color:var(--text);background:transparent;border:1px solid var(--border);border-radius:.6rem;padding:.6rem 1rem;min-height:44px;cursor:pointer}
.caso-decision-btn:hover{border-color:var(--brand)}
.caso-decision-btn:focus-visible{outline:2px solid var(--brand);outline-offset:3px}
[data-caso-aviso]{margin:.6rem 0 0;color:var(--muted);line-height:1.5}
/* El foco tras sustituir el fragmento aterriza en este título: debe verse. */
.caso-chat h2:focus-visible{outline:2px solid var(--brand);outline-offset:4px;border-radius:.3rem}
.caso-chat-feedback{margin:.55rem 0;min-height:1.2em;color:var(--muted)}
/* Avisos de disponibilidad y de rechazo del contrato del servidor. */
.caso-chat-aviso{margin:.9rem 0;padding:.8rem .95rem;border-left:3px solid var(--warn);background:var(--bg);line-height:1.55}
.caso-chat-aviso--no{border-left-color:var(--danger)}
.caso-chat-aviso--ojo{border-left-color:var(--warn)}
.caso-chat-aviso-title{margin:0 0 .3rem;font-weight:600;color:var(--text)}
.caso-chat-aviso p{margin:.3rem 0}
.caso-chat-aviso-when{color:var(--muted);font-size:.9rem}
@media(max-width:414px){.caso-decision-acciones>*{width:100%}}
.caso-facts-detalle{color:var(--muted);font-weight:400}
.caso-facts-cita{color:var(--muted);font-size:.9rem}
.caso-resumen-responder{margin:.5rem 0 0}
.caso-resumen-cta{display:inline-flex;align-items:center;min-height:44px;padding:.55rem 1.1rem;border-radius:.6rem;background:var(--text);color:var(--bg);font-weight:600;text-decoration:none}
.caso-resumen-cta:hover{opacity:.9}
.caso-resumen-cta:focus-visible{outline:2px solid var(--brand);outline-offset:3px}
.caso-resumen-caduca{margin:.7rem 0 0;color:var(--muted);font-size:.9rem}
.caso-chat-tabla:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:.4rem}
.caso-chat-salida{display:inline-flex;align-items:center;min-height:44px;text-decoration:none}

/* Documentos del caso. Mismo eje, tokens y dianas de 44 px que el resto del caso. */
.caso-docs{max-width:var(--mbw,920px);margin:1.5rem auto 2rem;padding:clamp(1rem,3vw,1.6rem);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-wrap:anywhere;scroll-margin-top:6rem}
.caso-docs h2{font-family:var(--font-display);font-size:clamp(1.3rem,2.6vw,1.7rem);margin:.3rem 0 .6rem}
.caso-docs h2:focus-visible{outline:2px solid var(--brand);outline-offset:4px;border-radius:.3rem}
.caso-docs-eyebrow{color:var(--muted);font-weight:600;font-size:.9rem;margin:0}
.caso-docs p{line-height:1.6;margin:.55rem 0}
/* `min-width:0` en el grid y en el input: un <input type=file> trae anchura intrínseca
   y `min-width:auto`, así que la columna no encogía y la página desbordaba a 390 px.
   Es el mismo modo de fallo del formulario de presupuesto. */
.caso-docs-form{display:grid;gap:.6rem;margin:1.1rem 0 0;min-width:0}
.caso-docs-form>*{min-width:0}
.caso-docs-file{font-weight:600}
.caso-docs input[type=file]{font:inherit;color:var(--text);padding:.6rem;border:1px dashed var(--border);border-radius:.6rem;background:var(--bg);width:100%;min-width:0;box-sizing:border-box}
.caso-docs input[type=file]:focus-visible{outline:2px solid var(--brand);outline-offset:3px}
.caso-docs-actions{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.caso-docs .btn{white-space:normal}
.caso-docs .btn:disabled{opacity:.6;cursor:default}
.caso-docs-estado{min-height:1.3em;color:var(--muted)}
.caso-docs-subtitle{font-size:1.02rem;margin:1.3rem 0 .5rem}
.caso-docs-lista{list-style:none;padding:0;margin:0;display:grid;gap:.6rem}
.caso-docs-item{padding:.8rem .9rem;border:1px solid var(--border);border-radius:.6rem;background:var(--bg)}
.caso-docs-nombre{margin:0;font-weight:600;overflow-wrap:anywhere}
.caso-docs-meta{margin:.2rem 0 .6rem;color:var(--muted);font-size:.9rem}
.caso-docs-item-acciones{display:flex;flex-wrap:wrap;gap:.6rem;margin:0}
.caso-docs-item-acciones>*{min-height:44px;display:inline-flex;align-items:center;text-decoration:none}
.caso-docs-confirmar{margin-top:.7rem;padding:.75rem .85rem;border:1px solid var(--warn);border-radius:.6rem;background:var(--surface)}
.caso-docs-confirmar p{margin:0 0 .6rem}
.caso-docs-vacio{color:var(--muted)}
.caso-docs :is(a,button,summary):focus-visible{outline:2px solid var(--brand);outline-offset:3px}
@media(max-width:414px){.caso-docs-actions>*,.caso-docs-item-acciones>*{width:100%;justify-content:center}}

/* Lectura de importes junto a cada PDF. Mismos tokens y dianas que el resto del caso. El
   <li> del archivo ya es la caja: el bloque no añade otra. Un importe y su moneda son un solo
   dato: `nowrap` en el importe; la frase de origen es prosa y envuelve por palabras. Nada
   oculta un desbordamiento. */
.caso-lectura{margin:.6rem 0 .8rem;padding:.5rem 0 0;border-top:1px solid var(--border)}
.caso-lectura-titulo{font-size:1.1rem;margin:.4rem 0 .4rem}
.caso-lectura-titulo:focus-visible{outline:2px solid var(--brand);outline-offset:4px;border-radius:.3rem}
.caso-lectura p{line-height:1.55;margin:.45rem 0}
.caso-lectura-form{display:grid;gap:.6rem;margin-top:.5rem;min-width:0}
.caso-lectura-form>*{min-width:0}
/* Cada dato es un fieldset SIN el borde de navegador (partía la leyenda de dos líneas en
   móvil): la leyenda se pinta como rótulo, en muted, un peso por debajo del importe. */
/* `min-width:0`: un fieldset trae `min-inline-size:min-content` y no encogería en móvil. */
.caso-lectura-campo{margin:0;padding:.55rem 0 0;border:0;border-top:1px solid var(--border);border-radius:0;min-width:0;min-inline-size:0}
.caso-lectura-campo legend{float:left;width:100%;padding:0;margin:0 0 .15rem;font-size:.92rem;color:var(--muted)}
/* Lo que sigue a la leyenda flotada baja debajo de ella: sin `clear` la rejilla de cada
   opción se colocaba al lado, con anchura 0, y desbordaba la página. */
.caso-lectura-campo>*:not(legend){clear:both}
.caso-lectura-opcion{display:grid;grid-template-columns:auto 1fr;column-gap:.7rem;align-items:start;padding:.1rem 0;min-width:0}
/* La etiqueta es texto corrido («Usar este importe: 90.750,61 €») con .7rem arriba y abajo:
   22 px de línea + 22 px de relleno = diana de 44 px sin partir la frase en columnas. */
.caso-lectura-opcion input{width:1.15rem;height:1.15rem;margin:.85rem 0 0}
.caso-lectura-opcion label{display:block;padding:.7rem 0;line-height:1.4;cursor:pointer}
.caso-lectura-detalle{grid-column:2;margin:-.3rem 0 .3rem;color:var(--muted);font-size:.92rem}
.caso-lectura-importe{white-space:nowrap;font-weight:600;color:var(--text)}
/* Un solo protagonista por fila: el importe propuesto. El actual va en muted y peso medio. */
.caso-lectura-detalle .caso-lectura-importe,.caso-lectura-campo .caso-chat-note .caso-lectura-importe{font-weight:500;color:var(--muted)}
.caso-lectura-cita{quotes:"«" "»";overflow-wrap:anywhere}
.caso-lectura-recibo{margin:.4rem 0;padding-left:1.1rem;line-height:1.6}
.caso-lectura-estado{min-height:1.3em;color:var(--muted);margin:.5rem 0 0}
.caso-lectura-estado:empty{margin:0;min-height:0}
.caso-lectura-salidas{display:flex;flex-wrap:wrap;gap:.6rem;margin:.6rem 0 0;align-items:center}
.caso-lectura-recuperar{margin:.5rem 0 0}
.caso-lectura .caso-chat-actions{margin-top:.2rem}
.caso-lectura .caso-chat-note{margin:.3rem 0 .4rem}
.caso-lectura .btn{white-space:normal;text-decoration:none}
.caso-lectura :is(a,button,input,summary):focus-visible{outline:2px solid var(--brand);outline-offset:3px}
/* El foco aterriza en el mensaje tras una acción cuyo botón se deshabilitó o desapareció. */
.caso-lectura-estado:focus-visible,.proyecto-box h4:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:.3rem}
/* «Ver el cálculo con estos importes» aterriza aquí; sin este margen la cabecera fija lo tapa. */
.proyecto-box{scroll-margin-top:6rem}
.caso-lectura-atrasada{display:block;margin-bottom:.5rem}
/* La guarda de borradores inserta su panel tras el botón pulsado, dentro de la fila de
   acciones: pasa a ocupar su propia línea al final, sin quedar entre dos botones. */
.caso-lectura .caso-chat-actions>.caso-decision{order:10;flex-basis:100%}
.caso-lectura button:disabled{opacity:.6;cursor:default}
@media(max-width:414px){.caso-lectura-opcion{column-gap:.5rem}.caso-lectura-salidas>*,.caso-lectura .caso-chat-actions>*{width:100%;justify-content:center}}
