veza/apps/web/src/styles/button.css

321 lines
11 KiB
CSS
Raw Normal View History

/*
BUTTON COMPONENT STYLES - FUSION DESIGN SYSTEM
6 Variants: Primary (Neon), Secondary (Outline), Gaming, Terminal, Nature, Graffiti
*/
.btn-veza {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
padding: var(--space-3) var(--space-6);
font-family: var(--font-heading);
font-size: var(--text-sm);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
border: none;
cursor: pointer;
transition: all var(--duration-fast) var(--ease-out);
overflow: hidden;
isolation: isolate;
}
.btn-veza:disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
/*
VARIANT: PRIMARY (Neon Cyber)
*/
.btn-veza--primary {
background: linear-gradient(
135deg,
var(--veza-cyan-dim) 0%,
var(--veza-cyan) 100%
);
color: var(--veza-void);
clip-path: var(--clip-manga);
box-shadow: var(--glow-cyan);
}
.btn-veza--primary::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
135deg,
transparent 0%,
rgba(255, 255, 255, 0.2) 50%,
transparent 100%
);
transform: translateX(-100%);
transition: transform var(--duration-normal) var(--ease-out);
}
.btn-veza--primary:hover {
transform: translateY(-2px);
box-shadow:
0 0 30px var(--veza-cyan),
0 0 60px rgba(0, 255, 247, 0.4);
}
.btn-veza--primary:hover::before {
transform: translateX(100%);
}
.btn-veza--primary:active {
transform: translateY(0);
}
/*
VARIANT: SECONDARY (Outline Neon)
*/
.btn-veza--secondary {
background: transparent;
color: var(--veza-magenta);
border: 2px solid var(--veza-magenta);
clip-path: var(--clip-manga);
}
.btn-veza--secondary::before {
content: '';
position: absolute;
inset: 0;
background: var(--veza-magenta);
transform: scaleX(0);
transform-origin: left;
transition: transform var(--duration-normal) var(--ease-out);
z-index: -1;
}
.btn-veza--secondary:hover {
color: var(--veza-void);
box-shadow: var(--glow-magenta);
}
.btn-veza--secondary:hover::before {
transform: scaleX(1);
}
/*
VARIANT: GAMING (XP/Achievement Style)
*/
.btn-veza--gaming {
background: linear-gradient(180deg, #2a2a2a 0%, #1a1a1a 100%);
color: var(--veza-xp-gold);
border: 2px solid var(--veza-xp-gold);
border-radius: var(--radius-sm);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -2px 0 rgba(0, 0, 0, 0.3),
0 2px 8px rgba(0, 0, 0, 0.5);
text-shadow: 0 0 10px var(--veza-xp-gold);
}
.btn-veza--gaming:hover {
background: linear-gradient(180deg, #3a3a3a 0%, #2a2a2a 100%);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -2px 0 rgba(0, 0, 0, 0.3),
0 0 20px rgba(255, 215, 0, 0.4);
}
.btn-veza--gaming:active {
transform: translateY(2px);
box-shadow:
inset 0 2px 4px rgba(0, 0, 0, 0.5),
0 1px 2px rgba(0, 0, 0, 0.3);
}
/*
VARIANT: TERMINAL (Matrix/Hacker Style)
*/
.btn-veza--terminal {
background: var(--veza-matrix);
color: var(--veza-terminal-green);
border: 1px solid var(--veza-terminal-green);
font-family: var(--font-mono);
border-radius: var(--radius-sm);
text-shadow: var(--glow-terminal);
}
.btn-veza--terminal::before {
content: '> ';
opacity: 0.7;
}
.btn-veza--terminal:hover {
background: rgba(0, 255, 0, 0.1);
box-shadow: var(--glow-terminal);
}
/*
VARIANT: NATURE (Organic/Botanical)
*/
.btn-veza--nature {
background: linear-gradient(
135deg,
var(--veza-moss) 0%,
var(--veza-leaf) 100%
);
color: var(--veza-white);
border-radius: var(--radius-2xl);
border: none;
box-shadow:
0 4px 15px rgba(45, 90, 61, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.btn-veza--nature:hover {
transform: scale(1.02);
box-shadow:
0 6px 25px rgba(45, 90, 61, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
/*
VARIANT: GRAFFITI (Spray Paint Effect)
*/
.btn-veza--graffiti {
background: var(--gradient-sunset);
color: var(--veza-white);
font-family: var(--font-display);
font-weight: 900;
letter-spacing: 0.2em;
clip-path: polygon(5% 0, 95% 5%, 100% 95%, 0% 100%);
text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3);
position: relative;
}
.btn-veza--graffiti::after {
content: '';
position: absolute;
inset: -2px;
background: inherit;
clip-path: inherit;
filter: blur(8px);
opacity: 0.5;
z-index: -1;
}
.btn-veza--graffiti:hover {
animation: graffiti-shake 0.3s ease-in-out;
}
/*
VARIANT: GHOST (Minimal)
*/
.btn-veza--ghost {
background: transparent;
color: var(--veza-text-muted);
border: 1px solid transparent;
}
.btn-veza--ghost:hover {
background: var(--veza-linen);
color: var(--veza-text);
}
.dark .btn-veza--ghost:hover {
background: var(--veza-slate);
}
/*
VARIANT: OUTLINE (Clean)
*/
.btn-veza--outline {
background: transparent;
border: 1px solid var(--veza-stone);
color: var(--veza-text);
}
.btn-veza--outline:hover {
border-color: var(--veza-sage);
background: var(--veza-mint-light);
}
/*
VARIANT: DESTRUCTIVE (Error/Delete)
*/
.btn-veza--destructive {
background: linear-gradient(
135deg,
var(--veza-error) 0%,
var(--veza-error-soft) 100%
);
color: var(--veza-white);
clip-path: var(--clip-manga);
}
.btn-veza--destructive:hover {
transform: translateY(-2px);
box-shadow: 0 0 20px rgba(255, 23, 68, 0.4);
}
/*
SIZE VARIANTS
*/
.btn-veza--sm {
padding: var(--space-2) var(--space-4);
font-size: var(--text-xs);
}
.btn-veza--md {
padding: var(--space-3) var(--space-6);
font-size: var(--text-sm);
}
.btn-veza--lg {
padding: var(--space-4) var(--space-8);
font-size: var(--text-base);
}
.btn-veza--xl {
padding: var(--space-5) var(--space-10);
font-size: var(--text-lg);
}
/*
ICON BUTTON
*/
.btn-veza--icon {
width: 44px;
height: 44px;
padding: 0;
border-radius: var(--radius-md);
background: var(--veza-slate);
color: var(--veza-grey-200);
border: 1px solid var(--veza-steel);
}
.btn-veza--icon:hover {
background: var(--veza-steel);
color: var(--veza-cyan);
border-color: var(--veza-cyan);
}
.btn-veza--icon.btn-veza--sm {
width: 36px;
height: 36px;
}
.btn-veza--icon.btn-veza--lg {
width: 52px;
height: 52px;
}