Files
bscscore/src/components/ui/Button.module.css

134 lines
2.8 KiB
CSS

/* Use CSS custom properties from global design system */
.button {
border: none;
border-radius: var(--radius-md);
cursor: pointer;
font-weight: 600;
transition: var(--transition-base);
touch-action: manipulation;
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-sm);
text-decoration: none;
user-select: none;
font-family: inherit;
position: relative;
overflow: hidden;
}
.button::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%);
transform: translateX(-100%);
transition: transform 0.3s ease;
}
.button:hover::before {
transform: translateX(100%);
}
.button:focus-visible {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}
.button:active {
transform: translateY(1px);
}
/* Variants */
.primary {
background: var(--color-primary);
color: white;
box-shadow: var(--shadow-md);
}
.primary:hover:not(.disabled) {
background: var(--color-primary-hover);
box-shadow: var(--shadow-lg);
transform: translateY(-1px);
}
.secondary {
background: var(--color-secondary);
color: var(--color-text);
box-shadow: var(--shadow-sm);
}
.secondary:hover:not(.disabled) {
background: var(--color-secondary-hover);
box-shadow: var(--shadow-md);
transform: translateY(-1px);
}
.danger {
background: var(--color-danger);
color: white;
box-shadow: var(--shadow-md);
}
.danger:hover:not(.disabled) {
background: #ef5350;
box-shadow: var(--shadow-lg);
transform: translateY(-1px);
}
/* Sizes with improved touch targets for tablets */
.small {
padding: var(--space-sm) var(--space-md);
font-size: var(--font-size-sm);
min-height: var(--touch-target-min);
border-radius: var(--radius-sm);
}
.medium {
padding: var(--space-md) var(--space-lg);
font-size: var(--font-size-base);
min-height: var(--touch-target-comfortable);
border-radius: var(--radius-md);
}
.large {
padding: var(--space-lg) var(--space-xl);
font-size: var(--font-size-lg);
min-height: 56px;
border-radius: var(--radius-lg);
}
/* Tablet-specific size adjustments */
@media (min-width: 768px) and (max-width: 1024px) {
.small {
min-height: var(--touch-target-comfortable);
padding: var(--space-md) var(--space-lg);
font-size: var(--font-size-base);
}
.medium {
min-height: var(--touch-target-comfortable);
padding: var(--space-lg) var(--space-xl);
font-size: var(--font-size-lg);
}
.large {
min-height: 64px;
padding: var(--space-xl) var(--space-xxl);
font-size: var(--font-size-xl);
}
}
/* States */
.disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none !important;
}
.disabled:hover::before {
transform: translateX(-100%);
}