HTML del navegador sobre tokens, sin una sola librería. Es donde vive la matriz tono × énfasis, que es el eje del que cuelga todo lo demás.
Mismo enum de tonos que el botón, y eso es lo que se está comprobando aquí: si un estado se llama success en la tabla y positive en el aviso, la misma cosa acaba de dos colores según qué pantalla la pinte.
Los dos últimos llevan el MISMO texto. En monoespaciado los dígitos se alinean y 0/O y 1/l dejan de confundirse — que es lo que se le pide a un código que alguien va a teclear o comparar a ojo. Cambia la familia y no el tamaño: --text-monospace-body vale 14px y haría este chip más alto que sus hermanos en la misma fila.
Seis identidades, no seis estados: un «Epic» no es un error ni un éxito. Las seis se eligieron midiendo —cada una despeja ΔE ≥ 8 contra las otras cinco y contra la marca, que se sobrescribe por app— y su par tinta/relleno pasa AA en los dos temas.
badgeToneFor("Bug") resuelve el tono por defecto de una etiqueta de texto libre. El significado es el estándar —rojo para bug, morado para epic— verificado contra las etiquetas por defecto de GitHub y los tipos de Jira; los hexes de GitHub no se copian, porque no tienen variante para tema oscuro. Lo que no reconoce cae a neutral, que es como se veían todos hasta ahora.
| Env | URL | Estado | MFA | Cliente | Acciones |
|---|---|---|---|---|---|
DV | dv-caramelo.saas-holic.com | active | MFA ✓ | tUNqNtwh… | |
QT | qt-caramelo.saas-holic.com | inactive | MFA off | Sjp6JMZ2… | |
LAB | lab-caramelo.saas-holic.com | active | MFA off | t5JSltnz… | |
PR | pr-caramelo.saas-holic.com | active | MFA ✓ | IrMtnwsM… |
La fila entera es clicable y además lleva su propio menú: pulsa el menú y comprueba que no se abre también el detalle de la fila. Ese doble disparo era un bug real de Revoke el 2026-08-12.
Saca un bloque del margen del contenedor para que llegue al borde: una tabla a sangre, una franja de aviso. Existe para que quien legítimamente no quiere el margen tenga una salida declarada, en vez de escribirse un margen negativo a mano — que es como se llega a ocho valores distintos en 29 pantallas.
✅ El margen de página ya tiene dueño: lo pone el <main> del chasis con p-page, y Bleed sangra -mx-page — la misma variable, así que no pueden divergir. Por eso Bleed ya no lleva variante móvil: el token vale 24 px en escritorio y 16 bajo el corte, y el negativo lo hereda.
Contenido normal: respeta el margen de 24 px de la caja.
La superficie elevada. La elevación la hace el color, no una sombra: la página es neutral-50 y la tarjeta neutral-0, así que en tema oscuro la tarjeta queda más clara que el fondo — que es como se lee el relieve donde una sombra difuminada no se percibe. Cambia el tema con el conmutador de arriba y mira el borde de las tres.
| Entorno | Cliente |
|---|---|
DV | tUNqNtwh |
QT | Sjp6JMZ2 |
🔴 El relleno es una prop, no un className. El kit que esta pieza reemplaza lo dejaba pisar desde fuera, y eso solo funciona con tailwind-merge instalado. Aquí cx es un join pelado: escribir className="p-0" dejaría las dos clases vivas y ganaría el orden de la hoja de estilos, no el tuyo.