.ui-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8rpx; border: none; padding: 0 32rpx; font-weight: 600; border-radius: 48rpx; line-height: 1; box-sizing: border-box; position: relative; overflow: hidden; transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease; } .ui-btn::after { border: none; } .ui-btn:active:not(.is-disabled) { transform: scale(0.96); } .ui-btn--block { width: 100%; display: flex; } /* Sizes */ .ui-btn--sm { height: 64rpx; font-size: 26rpx; padding: 0 24rpx; } .ui-btn--md { height: 80rpx; font-size: 30rpx; } .ui-btn--lg { height: 96rpx; font-size: 34rpx; padding: 0 40rpx; } .ui-btn--xl { height: 108rpx; font-size: 36rpx; padding: 0 48rpx; } /* Variants */ .ui-btn--primary { background: linear-gradient(135deg, var(--primary), var(--primary-light)); color: #FFFFFF; box-shadow: 0 8rpx 24rpx rgba(var(--primary-rgb), 0.3); } .ui-btn--primary:active:not(.is-disabled) { box-shadow: 0 4rpx 12rpx rgba(var(--primary-rgb), 0.2); } .ui-btn--outline { background: transparent; color: var(--text-secondary); border: 2rpx solid rgba(var(--primary-rgb), 0.3); } .ui-btn--outline:active:not(.is-disabled) { background: var(--primary-bg); border-color: var(--primary); color: var(--primary); } .ui-btn--danger { background: rgba(var(--danger-rgb), 0.06); color: var(--danger); border: 2rpx solid rgba(var(--danger-rgb), 0.3); } .ui-btn--danger:active:not(.is-disabled) { background: rgba(var(--danger-rgb), 0.05); border-color: var(--danger); } .ui-btn--ghost { /* Use rgba on the theme's RGB triplet instead of --primary-bg (~5% alpha) so the soft secondary reads as colored rather than near-white. */ background: rgba(var(--primary-rgb), 0.14); color: var(--primary); border: 2rpx solid rgba(var(--primary-rgb), 0.22); } .ui-btn--ghost:active:not(.is-disabled) { background: rgba(var(--primary-rgb), 0.22); border-color: rgba(var(--primary-rgb), 0.35); } .ui-btn.is-disabled { opacity: 0.5; pointer-events: none; } .ui-btn__icon { width: 1em; height: 1em; flex-shrink: 0; } .ui-btn__text { white-space: nowrap; } /* ---- ripple effect ---- */ .ui-btn::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.35); transform: translate(-50%, -50%); transition: width 0.5s ease, height 0.5s ease, opacity 0.5s ease; opacity: 0; pointer-events: none; } .ui-btn--primary::before, .ui-btn--ghost::before { background: rgba(255, 255, 255, 0.4); } .ui-btn--outline::before, .ui-btn--danger::before { background: rgba(var(--primary-rgb, 255, 107, 53), 0.15); } .ui-btn:active::before { width: 400rpx; height: 400rpx; opacity: 1; transition: 0s; }