La insignia que no tenía a dónde ir
Encontré esto de rebote, mientras verificaba una solución distinta. El cambio de la navegación móvil recién había aterrizado, y parte de verificarlo significaba revisar el header a 320px, el ancho más angosto contra el que todavía se prueba algo. El header estaba bien. Bajando a la sección de Software de la portada, no lo estaba: toda la página tenía scroll horizontal.
Cada tarjeta de proyecto tiene un título y una pequeña píldora de estado, “En desarrollo,” “Herramienta interna,” ese tipo de cosas, una al lado de la otra en una fila flex. La píldora tenía shrink-0 whitespace-nowrap, que normalmente es exactamente lo que se busca en una insignia: que no se comprima hasta convertirse en una elipsis ilegible. Sin embargo, nadie le había dicho a la fila qué hacer cuando el título y la píldora juntos no entraban. Sin flex-wrap en el contenedor, sin min-w-0 en el título. Una fila flex sin margen de maniobra en ningún lado simplemente sigue creciendo más allá de su contenedor en vez de saltar de línea, y ese crecimiento no se detiene en la tarjeta, empuja toda la página más ancha que el viewport.
La solución son dos clases: flex-wrap en la fila del encabezado, min-w-0 en el título. Ahora, cuando no hay espacio, la insignia baja a su propia línea debajo del título en vez de obligarlos a compartir un carril demasiado angosto.
Antes de publicarlo, revisé algo que el issue no pedía: la versión en español. ui.ts traduce “Internal tool” a “Herramienta interna” y “Stealth mode” a “Modo sigiloso,” ambas más largas que el inglés. Si la insignia en inglés ya era demasiado ancha a 320px, la española iba a ser peor, y no quería arreglar un idioma y dejar el otro roto en silencio. Cargué /es/ al mismo ancho y lo medí de la misma forma: cero desbordamiento, mismo comportamiento de salto de línea, etiquetas más largas y todo.
La verificación acá fue sobre todo una llamada a getBoundingClientRect() en el navegador en vez de mirarlo a ojo, comparando scrollWidth contra innerWidth a 320px (0px de diferencia, en ambos idiomas) y confirmando que el título y la insignia siguen compartiendo fila a 1024px, donde no hacía falta cambiar nada. Las capturas de pantalla sirven para detectar algo que se ve mal; la matemática exacta de píxeles es lo que realmente demuestra que un bug de desbordamiento desapareció.
Lecturas relacionadas
Un hero de dos columnas, y cuánto movió en realidad "ajustar el espaciado"
Medir el fold en vez de discutir sobre él: 1017.5px de scroll hasta la primera sección de contenido se convirtieron en 611px, y los últimos 40px salieron de exactamente una clase de padding.
Una regla CSS para unificar dos sistemas de tarjetas, y el servidor zombi que mintió al respecto
Cómo lograr que las tarjetas de entradas del paquete compartido combinaran con el estilo de la portada sin bifurcar el componente, y dos páginas que 'fallaban' pero en realidad era un proceso residual ocupando un puerto.
El prop Subheading que mentía sobre su propio color
Seis sitios de llamada pasando color="blue" a un componente que renderiza verde neón, y por qué el arreglo fue borrar el prop, no renombrarlo.