@metropolle/design-system
Version:
Sistema de design unificado para a plataforma Metropolle
333 lines (276 loc) • 7.64 kB
CSS
/* Metropolle Design System - Component Styles */
/* Button Styles */
.mds-button {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--mds-spacing-sm);
font-family: var(--mds-typography-fontFamily-brand);
font-weight: var(--mds-typography-fontWeight-medium);
text-decoration: none;
border: none;
border-radius: var(--mds-spacing-borderRadius-md);
cursor: pointer;
transition: var(--mds-effects-transition-normal);
/* Remove default button styles */
background: none;
outline: none;
/* Prevent text selection */
-moz-user-select: none;
user-select: none;
-webkit-user-select: none;
}
.mds-button:disabled,
.mds-button--disabled {
opacity: var(--mds-effects-opacity-disabled);
cursor: not-allowed;
pointer-events: none;
}
.mds-button--loading {
cursor: wait;
}
.mds-button--full-width {
width: 100%;
}
/* Button Sizes */
.mds-button--sm {
padding: var(--mds-spacing-sm) var(--mds-spacing-md);
font-size: var(--mds-typography-fontSize-sm);
min-height: 2rem;
}
.mds-button--md {
padding: var(--mds-spacing-md) var(--mds-spacing-lg);
font-size: var(--mds-typography-fontSize-base);
min-height: 2.5rem;
}
.mds-button--lg {
padding: var(--mds-spacing-lg) var(--mds-spacing-xl);
font-size: var(--mds-typography-fontSize-lg);
min-height: 3rem;
}
/* Button Variants */
.mds-button--primary {
background: var(--mds-color-brand-primary);
color: white;
box-shadow: var(--mds-spacing-shadow-md);
}
.mds-button--primary:hover:not(:disabled) {
background: #0044CC;
transform: var(--mds-effects-transform-scale-hover);
box-shadow: var(--mds-spacing-shadow-lg);
}
.mds-button--primary:active:not(:disabled) {
transform: var(--mds-effects-transform-scale-active);
}
.mds-button--secondary {
background: var(--mds-color-brand-secondary);
color: white;
box-shadow: var(--mds-spacing-shadow-md);
}
.mds-button--secondary:hover:not(:disabled) {
background: #E68A00;
transform: var(--mds-effects-transform-scale-hover);
box-shadow: var(--mds-spacing-shadow-lg);
}
.mds-button--outline {
background: transparent;
color: var(--mds-color-text-primary);
border: 2px solid var(--mds-color-border-medium);
}
.mds-button--outline:hover:not(:disabled) {
background: var(--mds-color-background-secondary);
border-color: var(--mds-color-border-strong);
}
.mds-button--ghost {
background: transparent;
color: var(--mds-color-text-primary);
}
.mds-button--ghost:hover:not(:disabled) {
background: var(--mds-color-background-secondary);
}
.mds-button--glass {
background: var(--mds-color-background-glass-light);
color: var(--mds-color-text-primary);
backdrop-filter: var(--mds-effects-backdrop-glass-filter);
-webkit-backdrop-filter: var(--mds-effects-backdrop-glass-webkitFilter);
border: 1px solid var(--mds-color-border-light);
box-shadow: var(--mds-spacing-shadow-glass-light);
}
.mds-button--glass:hover:not(:disabled) {
background: var(--mds-color-background-glass-dark);
border-color: var(--mds-color-border-medium);
transform: var(--mds-effects-transform-hoverUp);
box-shadow: var(--mds-spacing-shadow-glass-lightHover);
}
/* Button Icons */
.mds-button__icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
.mds-button__icon--left {
margin-right: calc(var(--mds-spacing-sm) * -0.5);
}
.mds-button__icon--right {
margin-left: calc(var(--mds-spacing-sm) * -0.5);
}
.mds-button__content {
display: inline-flex;
align-items: center;
}
/* Spinner Animation */
.mds-spinner {
animation: mds-spin 1s linear infinite;
}
.mds-spinner__path {
animation: mds-spinner-dash 2s ease-in-out infinite;
}
@keyframes mds-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes mds-spinner-dash {
0% {
stroke-dasharray: 1 40;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 40 40;
stroke-dashoffset: -15;
}
100% {
stroke-dasharray: 40 40;
stroke-dashoffset: -60;
}
}
/* Typography Styles */
.mds-text {
font-family: var(--mds-typography-fontFamily-brand);
color: var(--mds-color-text-primary);
margin: 0;
}
.mds-text--color-primary {
color: var(--mds-color-text-primary);
}
.mds-text--color-secondary {
color: var(--mds-color-text-secondary);
}
.mds-text--color-muted {
color: var(--mds-color-text-muted);
}
/* Font Weights */
.mds-text--weight-light {
font-weight: var(--mds-typography-fontWeight-light);
}
.mds-text--weight-normal {
font-weight: var(--mds-typography-fontWeight-normal);
}
.mds-text--weight-medium {
font-weight: var(--mds-typography-fontWeight-medium);
}
.mds-text--weight-semibold {
font-weight: var(--mds-typography-fontWeight-semibold);
}
.mds-text--weight-bold {
font-weight: var(--mds-typography-fontWeight-bold);
}
/* Font Sizes */
.mds-text--size-xs {
font-size: var(--mds-typography-fontSize-xs);
}
.mds-text--size-sm {
font-size: var(--mds-typography-fontSize-sm);
}
.mds-text--size-base {
font-size: var(--mds-typography-fontSize-base);
line-height: var(--mds-typography-lineHeight-normal);
}
.mds-text--size-lg {
font-size: var(--mds-typography-fontSize-lg);
}
.mds-text--size-xl {
font-size: var(--mds-typography-fontSize-xl);
}
.mds-text--size-2xl {
font-size: var(--mds-typography-fontSize-2xl);
line-height: var(--mds-typography-lineHeight-tight);
}
.mds-text--size-3xl {
font-size: var(--mds-typography-fontSize-3xl);
line-height: var(--mds-typography-lineHeight-tight);
}
.mds-text--size-4xl {
font-size: var(--mds-typography-fontSize-4xl);
line-height: var(--mds-typography-lineHeight-tight);
}
/* Typography Variants */
.mds-text--h1,
.mds-text--h2,
.mds-text--h3,
.mds-text--h4 {
font-weight: var(--mds-typography-fontWeight-semibold);
line-height: var(--mds-typography-lineHeight-tight);
}
.mds-text--body {
line-height: var(--mds-typography-lineHeight-normal);
}
.mds-text--caption {
font-size: var(--mds-typography-fontSize-sm);
color: var(--mds-color-text-secondary);
}
.mds-text--brand,
.mds-brand-logo {
font-size: var(--mds-typography-fontSize-4xl);
line-height: var(--mds-typography-lineHeight-tight);
letter-spacing: var(--mds-typography-letterSpacing-brand);
font-weight: var(--mds-typography-fontWeight-bold);
color: var(--mds-color-text-primary);
}
/* Logo brand class for consistent branding */
.logo-brand {
font-size: var(--mds-typography-fontSize-4xl);
color: var(--mds-color-text-primary);
letter-spacing: var(--mds-typography-letterSpacing-brand);
font-weight: var(--mds-typography-fontWeight-bold);
font-family: var(--mds-typography-fontFamily-brand);
}
/* Brand Logo Responsive */
@media (max-width: 768px) {
.mds-text--brand,
.mds-brand-logo,
.mds-brand-logo--sm,
.mds-brand-logo--md,
.mds-brand-logo--lg,
.logo-brand {
font-size: 1.8rem;
letter-spacing: var(--mds-typography-letterSpacing-tight);
}
}
/* Glass Card - Enhanced styles (complementing base tokens.css) */
.mds-glass-card--no-hover:hover {
transform: none ;
box-shadow: inherit ;
border-color: inherit ;
background: inherit ;
}
/* Utility Classes */
.mds-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.mds-focus-visible {
outline: 2px solid var(--mds-color-brand-primary);
outline-offset: 2px;
}
/* Dark mode support (future) */
@media (prefers-color-scheme: dark) {
/* Enhanced styles for dark mode when implemented */
}