component_library.css en CSS
Componentes con tema: botones, tarjetas, chips y un toast, todos movidos por tokens.
/* Componentes, todos controlados por la capa de tokens. */
.button {
--button-bg: var(--accent, #7c5cff);
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem 0.9rem;
border: 0;
border-radius: var(--radius, 0.5rem);
background: var(--button-bg);
color: #fff;
cursor: pointer;
transition: transform 150ms ease-out, filter 150ms ease-out;
}
.button:hover {
filter: brightness(1.08);
transform: translateY(-1px);
}
.button:disabled {
cursor: not-allowed;
filter: grayscale(0.6);
opacity: 0.6;
}
.button.ghost {
--button-bg: transparent;
border: 1px solid currentColor;
color: var(--accent, #7c5cff);
}
.button.danger {
--button-bg: var(--danger, #e5484d);
}
.card {
display: grid;
gap: 0.75rem;
padding: var(--pad, 1rem);
border-radius: var(--radius, 0.5rem);
background: var(--surface, #14161c);
box-shadow:
0 1px 2px rgb(0 0 0 / 20%),
0 8px 24px rgb(0 0 0 / 20%);
}
.card > .title {
font-weight: 600;
text-wrap: balance;
}
.chips {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.chip {
padding: 0.2rem 0.6rem;
border: 1px solid currentColor;
border-radius: 999px;
font-size: 0.8125rem;
}
.chip[aria-pressed="true"] {
background: var(--accent, #7c5cff);
color: #fff;
}
@keyframes toast-in {
from {
opacity: 0;
transform: translateY(0.5rem);
}
}
.toast {
position: fixed;
inset-block-end: 1.5rem;
inset-inline-end: 1.5rem;
padding: 0.75rem 1rem;
border-radius: var(--radius, 0.5rem);
background: var(--surface, #14161c);
animation: toast-in 200ms ease-out;
}
@media (prefers-reduced-motion: reduce) {
.button,
.toast {
animation-duration: 0.01ms;
transition-duration: 0.01ms;
}
}
Cómo funciona
- Cada componente lee las mismas propiedades personalizadas.
- Una variante cambia el tema sobrescribiendo una sola variable.
- El movimiento se declara una vez y se desactiva para lectores con movimiento reducido.
Palabras clave y builtins usados aquí
animationbackgroundborderbrightnesscolorcursordisplayfiltergapgrayscalegridkeyframesmediamsopacitypaddingpositionpxremrgbtransformtransitiontranslateY
El intento, en números
- Líneas
- 94
- Caracteres a escribir
- 1609
- Tokens
- 411
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 260 segundos.
Paso 1 de 1 en Bis; paso 21 de 21 en CSS responsivo y moderno.