Files
sendou.ink/app/components/elements/Button.module.css
2026-09-17 17:34:36 +03:00

177 lines
3.3 KiB
CSS

.button {
--button-bg: var(--color-text-accent);
--button-hover-bg: color-mix(
in oklch,
var(--button-bg) 85%,
var(--color-text)
);
--button-hover-border: var(--button-hover-bg);
display: flex;
width: auto;
align-items: center;
justify-content: center;
border: var(--border-style-accent);
border-radius: var(--radius-field);
appearance: none;
background: var(--button-bg);
color: var(--color-text-inverse);
cursor: pointer;
font-size: var(--font-sm);
font-weight: var(--weight-bold);
padding: 0 var(--field-padding);
user-select: none;
outline-color: var(--color-text-accent);
height: var(--field-size);
white-space: nowrap;
text-decoration: none;
transition:
background-color 0.15s,
border-color 0.15s;
&:hover:not(:disabled):not([data-pending]),
&:focus-visible {
background-color: var(--button-hover-bg);
border-color: var(--button-hover-border);
}
&:focus-visible {
outline-style: solid;
outline-width: 2px;
outline-offset: 1px;
}
&:active {
transform: translateY(1px);
}
&:disabled,
&[data-pending] {
cursor: not-allowed;
opacity: 0.5;
transform: initial;
}
}
.outlined {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
--button-hover-border: var(--color-text-accent);
color: var(--color-text-accent);
}
.outlinedSuccess {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
--button-hover-border: var(--color-success);
border-color: var(--color-success);
color: var(--color-success);
outline-color: var(--color-success);
}
.outlinedDestructive {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
--button-hover-border: var(--color-error);
border-color: var(--color-error);
color: var(--color-error);
outline-color: var(--color-error);
}
.small {
font-size: var(--font-xs);
height: var(--field-size-sm);
}
.miniscule {
font-size: var(--font-2xs);
height: var(--field-size-xs);
}
.big {
font-size: var(--font-md);
height: var(--field-size-lg);
}
.minimal {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
padding: 0 var(--s-1);
border: none;
color: var(--color-text-accent);
outline: initial;
&:focus-visible {
outline: var(--focus-ring);
}
}
.minimalSuccess {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
padding: 0 var(--s-1);
border: none;
color: var(--color-success);
outline-color: var(--color-success);
}
.success {
--button-bg: var(--color-success);
border-color: var(--color-success);
outline-color: var(--color-success);
}
.destructive {
--button-bg: var(--color-error);
border-color: var(--color-error);
color: var(--color-text-inverse);
outline-color: var(--color-error);
}
.minimalDestructive {
--button-bg: transparent;
--button-hover-bg: var(--color-bg-high);
padding: 0 var(--s-1);
border: none;
color: var(--color-error);
outline-color: var(--color-error);
}
.square {
aspect-ratio: 1 / 1;
padding: 0;
}
.circle {
border-radius: 50%;
aspect-ratio: 1 / 1;
padding: 0;
}
.buttonIcon {
min-width: 20px;
max-width: 20px;
margin-inline-end: var(--s-1-5);
&.lonely {
margin-inline-end: 0 !important;
}
}
.buttonIconSmall {
min-width: 18px;
max-width: 18px;
margin-inline-end: var(--s-1);
}
.buttonIconMiniscule {
min-width: 14px;
max-width: 14px;
margin-inline-end: var(--s-1);
}
.buttonIconBig {
min-width: 28px;
max-width: 28px;
margin-inline-end: var(--s-2);
}