CSS Component Kit Generator
Pick a button, form field, card and badge (from presets, your saved favourites or a share link from each studio) and export them together as one consistent mini design system. Turn on "Make it consistent" to apply one brand color, text and surface color, corner-radius scale and font to all four. Every color, radius, shadow and font is then factored into shared custom properties such as --kit-brand and --kit-radius-md, and you can download the CSS, a Tailwind v4 theme, design tokens and a demo page in one ZIP.
Components
Make it consistent
Preview
New
We'll never share your email.
Checks
- Pass Button label contrast 6.3:1 (needs 4.5:1).
- Pass Form field border contrast 4.0:1 against its surface (needs 3:1).
- Pass Card text contrast 17.9:1 (needs 4.5:1).
- Pass The kit uses 22 color tokens and 3 radius tokens. Fewer shared values make a system easier to maintain.
Export the kit
Format
CSS (tokens + components)
/* Component kit: design tokens + components. Generated by Ali Tools Express. */
:root {
--kit-brand: #4F46E5;
--kit-ink: #0F172A;
--kit-surface: #FFFFFF;
--kit-on-brand: #FFFFFF;
--kit-radius-sm: 8px;
--kit-radius-md: 10px;
--kit-radius-lg: 16px;
--kit-font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--kit-shadow-1: 0px 1px 2px 0px rgba(0, 0, 0, 0.12);
--kit-shadow-2: 0px 1px 2px 0px rgba(0, 0, 0, 0.12), 0 10px 24px -6px rgba(79, 70, 229, 0.45), 0 12px 24px -8px rgba(79, 70, 229, 0.5);
--kit-color-1: #7B7F8A;
--kit-color-2: #6F747F;
--kit-color-3: #505564;
--kit-shadow-3: 0 0 0 3px rgba(79, 70, 229, 0.35);
--kit-color-4: #ECECEE;
--kit-color-5: #575D6A;
--kit-color-6: #DC2626;
--kit-shadow-4: 0 0 0 3px rgba(220, 38, 38, 0.3);
--kit-shadow-5: 0 4px 6px -1px rgba(15, 23, 42, 0.08), 0 10px 20px -5px rgba(15, 23, 42, 0.12);
--kit-color-7: #DDDFE1;
--kit-shadow-6: 0 20px 25px -5px rgba(15, 23, 42, 0.12), 0 40px 60px -20px rgba(15, 23, 42, 0.3);
--kit-color-8: #E6E5FB;
--kit-color-9: #E5E7EA;
--kit-color-10: #475569;
--kit-color-11: #DEEDE4;
--kit-color-12: #137337;
--kit-color-13: #F5E7DD;
--kit-color-14: #AB4F09;
--kit-color-15: #F5DFDF;
--kit-color-16: #B91C1C;
--kit-color-17: #DCEAF2;
--kit-color-18: #0369A1;
}
/* button */
.kit-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 12px 24px;
min-height: 44px;
font-family: var(--kit-font);
font-size: 16px;
font-weight: 600;
line-height: 1.2;
white-space: nowrap;
color: var(--kit-on-brand);
background: var(--kit-brand);
border: 0;
border-radius: var(--kit-radius-md);
box-shadow: var(--kit-shadow-1);
cursor: pointer;
text-decoration: none;
user-select: none;
transition: transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 180ms cubic-bezier(0.2, 0.8, 0.2, 1), background-color 180ms cubic-bezier(0.2, 0.8, 0.2, 1), background-position 180ms cubic-bezier(0.2, 0.8, 0.2, 1), color 180ms cubic-bezier(0.2, 0.8, 0.2, 1), border-color 180ms cubic-bezier(0.2, 0.8, 0.2, 1), filter 180ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 180ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.kit-button:hover:not(:disabled) {
filter: brightness(1.06);
transform: translateY(-1px) translateY(-3px);
box-shadow: var(--kit-shadow-2);
}
.kit-button:focus-visible {
outline: 3px solid var(--kit-brand);
outline-offset: 2px;
}
.kit-button:active:not(:disabled) {
filter: brightness(0.96);
transform: scale(0.98);
}
.kit-button:disabled,
.kit-button[aria-disabled="true"] {
opacity: 0.5;
cursor: not-allowed;
transform: none;
filter: none;
}
.kit-button[aria-busy="true"] {
cursor: progress;
opacity: 0.85;
}
@media (prefers-reduced-motion: reduce) {
.kit-button,
.kit-button::before,
.kit-button::after,
.kit-button * {
transition: none;
animation: none;
}
}
/* input */
.kit-field {
position: relative;
display: grid;
gap: 6px;
max-width: 360px;
color: var(--kit-ink);
font-family: var(--kit-font);
}
.kit-field__label {
font-weight: 600;
font-size: 14px;
}
.kit-field__input {
box-sizing: border-box;
width: 100%;
min-height: 44px;
padding: 0 12px;
font: inherit;
font-size: 16px;
color: var(--kit-ink);
border-radius: var(--kit-radius-md);
transition: border-color 150ms ease, box-shadow 150ms ease;
background-color: var(--kit-surface);
border: 1px solid var(--kit-color-1);
}
.kit-field__input::placeholder {
color: var(--kit-color-2);
opacity: 1;
}
.kit-field__input:hover {
border-color: var(--kit-color-3);
}
.kit-field__input:focus-visible {
outline: none;
border-color: var(--kit-brand);
box-shadow: var(--kit-shadow-3);
}
.kit-field__input:disabled {
cursor: not-allowed;
opacity: 0.6;
background-color: var(--kit-color-4);
}
.kit-field__hint {
margin: 0;
font-size: 14px;
color: var(--kit-color-5);
}
.kit-field__error {
margin: 0;
font-size: 14px;
font-weight: 600;
color: var(--kit-color-6);
}
.kit-field--error .kit-field__input {
border-color: var(--kit-color-6);
}
.kit-field--error .kit-field__input:focus-visible {
box-shadow: var(--kit-shadow-4);
}
@media (prefers-reduced-motion: reduce) {
.kit-field__input,
.kit-field__label {
transition: none;
}
}
/* card */
.kit-card {
position: relative;
display: flex;
width: min(100%, 320px);
overflow: hidden;
border-radius: var(--kit-radius-lg);
background-color: var(--kit-surface);
color: var(--kit-ink);
box-shadow: var(--kit-shadow-5);
flex-direction: column;
border: 1px solid var(--kit-color-7);
transition: transform 250ms ease, box-shadow 250ms ease, border-color 250ms ease;
font-family: var(--kit-font);
}
.kit-card__body {
display: flex;
flex-direction: column;
gap: 8px;
padding: 24px;
}
.kit-card__media {
display: block;
width: 100%;
height: auto;
aspect-ratio: 5 / 3;
object-fit: cover;
}
.kit-card__title {
margin: 0;
font-size: 1.25rem;
line-height: 1.3;
}
.kit-card__text,
.kit-card__meta {
margin: 0;
color: var(--kit-color-5);
line-height: 1.55;
}
.kit-card__button {
align-self: flex-start;
margin-top: 8px;
display: inline-flex;
align-items: center;
min-height: 44px;
padding: 0 18px;
border-radius: var(--kit-radius-lg);
background-color: var(--kit-brand);
color: var(--kit-on-brand);
font-weight: 600;
text-decoration: none;
}
.kit-card__button:focus-visible {
outline: 2px solid var(--kit-brand);
outline-offset: 3px;
}
.kit-card:hover,
.kit-card:focus-within {
transform: translateY(-4px);
box-shadow: var(--kit-shadow-6);
}
@media (prefers-reduced-motion: reduce) {
.kit-card,
.kit-card__media {
transition: none;
}
}
/* badge */
.kit-badge {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 24px;
padding: 3px 10px;
border: 1px solid var(--badge-border);
border-radius: var(--kit-radius-sm);
background: var(--badge-bg);
color: var(--badge-fg);
font-size: 13px;
font-weight: 600;
line-height: 1.2;
white-space: nowrap;
font-family: var(--kit-font);
}
.kit-badge--brand {
--badge-bg: var(--kit-color-8);
--badge-fg: var(--kit-brand);
--badge-border: var(--kit-color-8);
}
.kit-badge--neutral {
--badge-bg: var(--kit-color-9);
--badge-fg: var(--kit-color-10);
--badge-border: var(--kit-color-9);
}
.kit-badge--success {
--badge-bg: var(--kit-color-11);
--badge-fg: var(--kit-color-12);
--badge-border: var(--kit-color-11);
}
.kit-badge--warning {
--badge-bg: var(--kit-color-13);
--badge-fg: var(--kit-color-14);
--badge-border: var(--kit-color-13);
}
.kit-badge--danger {
--badge-bg: var(--kit-color-15);
--badge-fg: var(--kit-color-16);
--badge-border: var(--kit-color-15);
}
.kit-badge--info {
--badge-bg: var(--kit-color-17);
--badge-fg: var(--kit-color-18);
--badge-border: var(--kit-color-17);
}
- Colors: 22
- Radii: 3
- Shadows: 6
Runs entirely in your browser. Nothing you paste or open here is uploaded or stored.