feat(portal): gradient button system (primary/secondary/ghost/danger/mint)
Five button variants under .o_fp_btn_* classes that don't fight Bootstrap. Primary uses the brand teal gradient with mint-tinted shadow; danger uses the red gradient. Focus/hover/active states included. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
// ============================================================================
|
||||
// Fusion Plating — Portal · Button system
|
||||
// Gradient primary CTA, soft secondary, ghost tertiary, gradient danger.
|
||||
// All states use class hooks under .o_fp_btn_* so they don't fight Bootstrap.
|
||||
// ============================================================================
|
||||
|
||||
.o_fp_btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: $fp-space-2;
|
||||
padding: .55rem 1.1rem;
|
||||
border-radius: $fp-radius-button;
|
||||
font-family: $fp-font;
|
||||
font-size: .85rem;
|
||||
font-weight: 600;
|
||||
line-height: 1.1;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
transition: transform .08s ease, box-shadow .15s ease;
|
||||
user-select: none;
|
||||
|
||||
&:focus-visible {
|
||||
outline: 2px solid $fp-teal;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
&:active { transform: translateY(1px); }
|
||||
&:disabled,
|
||||
&.disabled {
|
||||
opacity: .55;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
// PRIMARY — gradient teal CTA
|
||||
.o_fp_btn_primary {
|
||||
@extend .o_fp_btn;
|
||||
background: $fp-gradient-primary;
|
||||
color: #fff;
|
||||
box-shadow: $fp-shadow-button;
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, .08);
|
||||
&:hover { box-shadow: $fp-shadow-button-hover; color: #fff; }
|
||||
}
|
||||
|
||||
// SECONDARY — outlined, very subtle gradient
|
||||
.o_fp_btn_secondary {
|
||||
@extend .o_fp_btn;
|
||||
background: $fp-gradient-secondary;
|
||||
color: $fp-teal;
|
||||
border: 1px solid $fp-card-border-dark;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
|
||||
&:hover { background: $fp-section-bg; color: $fp-teal-dark; }
|
||||
}
|
||||
|
||||
// GHOST — text-only with subtle hover
|
||||
.o_fp_btn_ghost {
|
||||
@extend .o_fp_btn;
|
||||
background: transparent;
|
||||
color: $fp-teal;
|
||||
font-weight: 500;
|
||||
padding: .45rem .85rem;
|
||||
&:hover { background: rgba(46, 175, 147, .08); color: $fp-teal-dark; }
|
||||
}
|
||||
|
||||
// DANGER — gradient red
|
||||
.o_fp_btn_danger {
|
||||
@extend .o_fp_btn;
|
||||
background: $fp-gradient-danger;
|
||||
color: #fff;
|
||||
box-shadow: $fp-shadow-danger;
|
||||
&:hover { color: #fff; }
|
||||
}
|
||||
|
||||
// MINT-PILL — soft branded "view all" affordance
|
||||
.o_fp_btn_mint {
|
||||
@extend .o_fp_btn;
|
||||
background: $fp-gradient-mint;
|
||||
color: $fp-teal;
|
||||
border: 1px solid $fp-aqua;
|
||||
font-weight: 600;
|
||||
&:hover { color: $fp-teal-dark; }
|
||||
}
|
||||
|
||||
// Size modifiers
|
||||
.o_fp_btn_sm { padding: .35rem .75rem; font-size: .76rem; }
|
||||
.o_fp_btn_lg { padding: .75rem 1.4rem; font-size: .95rem; }
|
||||
Reference in New Issue
Block a user