247 lines
5.1 KiB
CSS
247 lines
5.1 KiB
CSS
:root {
|
|
/* Colors */
|
|
--btn-bg-primary: #267361;
|
|
--btn-bg-primary-hover: #267361;
|
|
--btn-bg-primary-active: #353030;
|
|
|
|
--btn-text-light: #fefcfb;
|
|
--btn-text-dark: #267361;
|
|
|
|
--btn-border-primary: #267361;
|
|
--btn-border-ghost: #e9e9e9;
|
|
--btn-border-ghost-hover: #ececec;
|
|
--btn-border-ghost-active: #e1e1e1;
|
|
|
|
--btn-bg-ghost-hover: #ececec;
|
|
--btn-bg-ghost-active: #e1e1e1;
|
|
|
|
/* Disabled */
|
|
--btn-bg-disabled: #cccccc;
|
|
--btn-text-disabled: #888888;
|
|
--btn-border-disabled: #cccccc;
|
|
|
|
/* Focus */
|
|
--btn-focus-ring: 3px solid #a9a9a9;
|
|
--btn-focus-offset: 2px;
|
|
|
|
/* Layout */
|
|
--btn-py: 12px;
|
|
--btn-px: 16px;
|
|
--btn-py-lg: 16px;
|
|
--btn-px-lg: 24px;
|
|
--btn-radius: 50px;
|
|
--btn-gap: 8px;
|
|
--btn-max-height: 52px;
|
|
--btn-icon-size: 18px;
|
|
--btn-tertiary-px: 4px;
|
|
|
|
/* Typography */
|
|
--btn-font-family: var(--font-body);
|
|
--btn-font-size: 0.889rem;
|
|
--btn-font-weight: var(--font-weight-bold);
|
|
--btn-line-height: 1;
|
|
|
|
/* Shadow */
|
|
--btn-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
--btn-shadow-none: none;
|
|
|
|
/* Motion */
|
|
--btn-transition:
|
|
background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease,
|
|
transform 0.25s ease, box-shadow 0.25s ease;
|
|
}
|
|
|
|
/* Base */
|
|
.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: var(--btn-gap);
|
|
padding: var(--btn-py) var(--btn-px);
|
|
max-height: var(--btn-max-height);
|
|
border: 2px solid transparent;
|
|
border-radius: var(--btn-radius);
|
|
font-family: var(--btn-font-family);
|
|
font-size: var(--btn-font-size);
|
|
font-weight: var(--btn-font-weight);
|
|
line-height: var(--btn-line-height);
|
|
white-space: nowrap;
|
|
text-decoration: none;
|
|
vertical-align: middle;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
transition: var(--btn-transition);
|
|
-webkit-tap-highlight-color: transparent;
|
|
z-index: 999;
|
|
}
|
|
|
|
.btn:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.btn:focus-visible {
|
|
outline: var(--btn-focus-ring);
|
|
outline-offset: var(--btn-focus-offset);
|
|
}
|
|
|
|
.btn .btn-icon {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-shrink: 0;
|
|
width: var(--btn-icon-size);
|
|
height: var(--btn-icon-size);
|
|
transition:
|
|
transform 0.25s ease,
|
|
color 0.25s ease;
|
|
}
|
|
|
|
.btn:hover .btn-icon.animate {
|
|
transform: translateX(4px);
|
|
}
|
|
|
|
/* Filled */
|
|
.btn--filled {
|
|
background-color: var(--btn-bg-primary);
|
|
color: var(--btn-text-light);
|
|
border-color: var(--btn-border-primary);
|
|
box-shadow: var(--btn-shadow);
|
|
}
|
|
|
|
.btn--filled .btn-icon {
|
|
color: currentColor;
|
|
}
|
|
|
|
.btn--filled:hover {
|
|
background-color: var(--btn-bg-primary-hover);
|
|
border-color: var(--btn-bg-primary-hover);
|
|
}
|
|
|
|
.btn--filled:active {
|
|
background-color: var(--btn-bg-primary-active);
|
|
border-color: var(--btn-bg-primary-active);
|
|
transition: none;
|
|
}
|
|
|
|
/* Outline */
|
|
.btn--outline {
|
|
background-color: transparent;
|
|
color: var(--btn-text-dark);
|
|
border-color: var(--btn-border-primary);
|
|
box-shadow: var(--btn-shadow-none);
|
|
}
|
|
|
|
.btn--outline .btn-icon {
|
|
color: currentColor;
|
|
}
|
|
|
|
.btn--outline:hover {
|
|
background-color: var(--btn-bg-primary);
|
|
border-color: var(--btn-bg-primary);
|
|
color: var(--btn-text-light);
|
|
}
|
|
|
|
.btn--outline:active {
|
|
background-color: var(--btn-bg-primary-active);
|
|
border-color: var(--btn-bg-primary-active);
|
|
color: var(--btn-text-light);
|
|
transition: none;
|
|
}
|
|
|
|
/* Ghost */
|
|
.btn--ghost {
|
|
background-color: transparent;
|
|
color: var(--btn-text-dark);
|
|
border-color: var(--btn-border-ghost);
|
|
box-shadow: var(--btn-shadow-none);
|
|
}
|
|
|
|
.btn--ghost .btn-icon {
|
|
color: currentColor;
|
|
}
|
|
|
|
.btn--ghost:hover {
|
|
background-color: var(--btn-bg-ghost-hover);
|
|
border-color: var(--btn-border-ghost-hover);
|
|
}
|
|
|
|
.btn--ghost:active {
|
|
background-color: var(--btn-bg-ghost-active);
|
|
border-color: var(--btn-border-ghost-active);
|
|
transition: none;
|
|
}
|
|
|
|
/* Tertiary */
|
|
.btn--tertiary {
|
|
background-color: transparent;
|
|
color: var(--btn-text-dark);
|
|
border-color: transparent;
|
|
box-shadow: var(--btn-shadow-none);
|
|
padding-inline: var(--btn-tertiary-px);
|
|
}
|
|
|
|
.btn--tertiary .btn-icon {
|
|
color: currentColor;
|
|
}
|
|
|
|
.btn--tertiary:hover {
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
|
|
.btn--tertiary:active {
|
|
opacity: 0.7;
|
|
transition: none;
|
|
}
|
|
|
|
/* Disabled */
|
|
.btn:disabled,
|
|
.btn[aria-disabled="true"] {
|
|
background-color: var(--btn-bg-disabled) !important;
|
|
border-color: var(--btn-border-disabled) !important;
|
|
color: var(--btn-text-disabled) !important;
|
|
box-shadow: none !important;
|
|
text-decoration: none !important;
|
|
cursor: default !important;
|
|
pointer-events: none;
|
|
transform: none !important;
|
|
}
|
|
|
|
.btn:disabled .btn-icon,
|
|
.btn[aria-disabled="true"] .btn-icon {
|
|
color: var(--btn-text-disabled) !important;
|
|
}
|
|
|
|
/* Touch */
|
|
@media (hover: none) {
|
|
.btn--filled:hover {
|
|
background-color: var(--btn-bg-primary);
|
|
border-color: var(--btn-bg-primary);
|
|
}
|
|
|
|
.btn--outline:hover {
|
|
background-color: transparent;
|
|
border-color: var(--btn-border-primary);
|
|
color: var(--btn-text-dark);
|
|
}
|
|
|
|
.btn--ghost:hover {
|
|
background-color: transparent;
|
|
border-color: var(--btn-border-ghost);
|
|
}
|
|
|
|
.btn--tertiary:hover {
|
|
text-decoration: none;
|
|
}
|
|
|
|
.btn:hover .btn-icon.animate {
|
|
transform: none;
|
|
}
|
|
}
|
|
|
|
@media (min-width: 768px) {
|
|
.btn {
|
|
padding: var(--btn-py-lg) var(--btn-px-lg);
|
|
font-size: 1rem;
|
|
}
|
|
}
|