Tachar y sustituir

Tachar y sustituir: botón en CSS. Copia las reglas, o el prompt que reproduce el resultado.

text-swapstrikethroughrectanglepricereveal

CSS
.btn-119 {
  font: 600 15px/1 system-ui,sans-serif;
  color: #fff;
  background: #16a34a;
  border: 0;
  border-radius: 8px;
  padding: 13px 22px;
  cursor: pointer;
  display: inline-flex;
  gap: 8px;
  align-items: center;
  transition: background .2s
}
.btn-119 s {
  color: #bbf7d0;
  text-decoration: none;
  position: relative
}
.btn-119 s::after {
  content: "";
  position: absolute;
  left: 0;
  right: 100%;
  top: 50%;
  height: 2px;
  background: #fff;
  transition: right .3s
}
.btn-119 b {
  max-width: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-width .3s,opacity .3s;
  font-weight: 800
}
.btn-119:hover s::after {
  right: 0
}
.btn-119:hover b {
  max-width: 60px;
  opacity: 1
}
.btn-119:hover {
  background: #15803d
}
.btn-119:focus-visible {
  outline: 2px solid #16a34a;
  outline-offset: 3px
}
.btn-119:active {
  background: #166534
}
HTML
<button class="btn-119"><s>$29</s><b>$19</b>Upgrade</button>
Prompt

Un botón verde #16a34a, radio de 8px, texto blanco de 15px semibold, padding de 13px por 22px, que muestra "$29 Upgrade" con el precio en verde pálido #bbf7d0. Al pasar el cursor una línea blanca de 2px tacha el precio antiguo de izquierda a derecha (300ms) y un "$19" en negrita se expande a su lado; fondo #15803d. Active #166534. Foco con outline verde de 2px y offset de 3px.