|
6 | 6 | justify-content: center; |
7 | 7 | gap: var(--space-2); |
8 | 8 | padding: clamp(0.5rem, 1vw, 0.75rem) clamp(1rem, 2vw, 1.5rem); |
| 9 | + margin: var(--space-4) auto; |
9 | 10 | font-size: clamp(0.875rem, 1vw, 1rem); |
10 | 11 | font-weight: 500; |
11 | 12 | line-height: 1.25; |
|
16 | 17 | transition: color var(--transition-colors), background-color var(--transition-colors), transform 0.2s; |
17 | 18 | background: var(--btn-bg, var(--primary)); |
18 | 19 | color: var(--btn-color, #fff); |
19 | | - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
| 20 | + box-shadow: var(--shadow-md); |
20 | 21 | overflow: hidden; |
21 | 22 | } |
22 | 23 |
|
23 | 24 | /* Hover and Active States */ |
24 | 25 | .btn:hover { |
25 | 26 | background: var(--btn-bg-hover, var(--primary-hover)); |
26 | | - box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15); |
| 27 | + box-shadow: var(--shadow-lg); |
27 | 28 | transform: translateY(-2px); |
28 | 29 | } |
29 | 30 |
|
30 | 31 | .btn:active { |
31 | 32 | transform: translateY(1px); |
32 | | - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); |
| 33 | + box-shadow: inset var(--shadow-sm); |
33 | 34 | } |
34 | 35 |
|
35 | 36 | .btn:disabled { |
|
40 | 41 | } |
41 | 42 |
|
42 | 43 | /* Animation Variants */ |
43 | | -.btn-animate-pulse:hover, .btn-animate-pulse:active { |
| 44 | +.btn[data-animate="pulse"]:hover, .btn[data-animate="pulse"]:active { |
44 | 45 | animation: btn-pulse 0.6s infinite; |
45 | 46 | } |
46 | 47 |
|
47 | 48 | @keyframes btn-pulse { |
48 | | - 0%, 100% { |
49 | | - transform: scale(1); |
50 | | - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
51 | | - } |
52 | | - 50% { |
53 | | - transform: scale(1.05); |
54 | | - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2); |
55 | | - } |
| 49 | + 0%, 100% { transform: scale(1); } |
| 50 | + 50% { transform: scale(1.05); } |
56 | 51 | } |
57 | 52 |
|
58 | | -.btn-animate-fill::before { |
| 53 | +.btn[data-animate="fill"]::before { |
59 | 54 | content: ''; |
60 | 55 | position: absolute; |
61 | 56 | top: 0; |
|
71 | 66 | opacity: 0.1; |
72 | 67 | } |
73 | 68 |
|
74 | | -.btn-animate-fill:hover::before, .btn-animate-fill:active::before { |
| 69 | +.btn[data-animate="fill"]:hover::before, .btn[data-animate="fill"]:active::before { |
75 | 70 | transform: scaleX(1); |
76 | 71 | } |
77 | 72 |
|
78 | | -.btn-animate-fill { |
79 | | - z-index: 1; |
80 | | - color: inherit; |
81 | | -} |
82 | | - |
83 | | -.btn-animate-bounce:hover, .btn-animate-bounce:active { |
| 73 | +.btn[data-animate="bounce"]:hover, .btn[data-animate="bounce"]:active { |
84 | 74 | animation: btn-bounce 0.4s; |
85 | 75 | } |
86 | 76 |
|
87 | 77 | @keyframes btn-bounce { |
88 | | - 0%, 100% { |
89 | | - transform: translateY(0); |
90 | | - } |
91 | | - 50% { |
92 | | - transform: translateY(-5px); |
93 | | - } |
| 78 | + 0%, 100% { transform: translateY(0); } |
| 79 | + 50% { transform: translateY(-5px); } |
94 | 80 | } |
95 | 81 |
|
96 | | -.btn-animate-rotate:hover { |
| 82 | +.btn[data-animate="rotate"]:hover { |
97 | 83 | animation: btn-rotate 0.5s ease-in-out; |
98 | 84 | } |
99 | 85 |
|
100 | 86 | @keyframes btn-rotate { |
101 | | - 0% { |
102 | | - transform: rotate(0deg); |
103 | | - } |
104 | | - 100% { |
105 | | - transform: rotate(360deg); |
106 | | - } |
| 87 | + 0% { transform: rotate(0deg); } |
| 88 | + 100% { transform: rotate(360deg); } |
107 | 89 | } |
108 | 90 |
|
109 | 91 | /* Button Variants */ |
110 | | -.btn-primary { |
| 92 | +.btn[data-variant="primary"] { |
111 | 93 | --btn-bg: var(--primary); |
112 | 94 | --btn-bg-hover: var(--primary-hover); |
113 | 95 | } |
114 | 96 |
|
115 | | -.btn-secondary { |
| 97 | +.btn[data-variant="secondary"] { |
116 | 98 | --btn-bg: var(--secondary); |
117 | 99 | --btn-bg-hover: var(--secondary-hover); |
118 | 100 | } |
119 | 101 |
|
120 | | -.btn-success { |
| 102 | +.btn[data-variant="success"] { |
121 | 103 | --btn-bg: var(--success); |
122 | 104 | --btn-bg-hover: var(--success-hover); |
123 | 105 | } |
124 | 106 |
|
125 | | -.btn-danger { |
| 107 | +.btn[data-variant="danger"] { |
126 | 108 | --btn-bg: var(--danger); |
127 | 109 | --btn-bg-hover: var(--danger-hover); |
128 | 110 | } |
129 | 111 |
|
130 | | -.btn-warning { |
| 112 | +.btn[data-variant="warning"] { |
131 | 113 | --btn-bg: var(--warning); |
132 | 114 | --btn-bg-hover: var(--warning-hover); |
133 | 115 | } |
134 | 116 |
|
135 | | -.btn-info { |
| 117 | +.btn[data-variant="info"] { |
136 | 118 | --btn-bg: var(--info); |
137 | 119 | --btn-bg-hover: var(--info-hover); |
138 | 120 | } |
139 | 121 |
|
140 | 122 | /* Outline Button */ |
141 | | -.btn-outline { |
| 123 | +.btn[data-variant="outline"] { |
142 | 124 | --btn-bg: transparent; |
143 | 125 | --btn-bg-hover: var(--primary); |
144 | 126 | --btn-color: var(--primary); |
|
147 | 129 | transition: box-shadow var(--transition-all), background var(--transition-colors); |
148 | 130 | } |
149 | 131 |
|
150 | | -.btn-outline:hover { |
151 | | - color: #fff; |
152 | | -} |
| 132 | +.btn[data-variant="outline"]:hover { color: #fff; } |
153 | 133 |
|
154 | 134 | /* Ghost Button */ |
155 | | -.btn-ghost { |
| 135 | +.btn[data-variant="ghost"] { |
156 | 136 | --btn-bg: transparent; |
157 | 137 | --btn-bg-hover: var(--neutral-100); |
158 | 138 | --btn-color: var(--neutral-700); |
|
161 | 141 | } |
162 | 142 |
|
163 | 143 | /* Button Sizes */ |
164 | | -.btn-sm { |
| 144 | +.btn[data-size="sm"] { |
165 | 145 | padding: clamp(0.25rem, 0.5vw, 0.5rem) clamp(0.5rem, 1vw, 1rem); |
166 | 146 | font-size: clamp(0.75rem, 0.8vw, 0.875rem); |
167 | 147 | } |
168 | 148 |
|
169 | | -.btn-lg { |
| 149 | +.btn[data-size="lg"] { |
170 | 150 | padding: clamp(0.75rem, 1.5vw, 1rem) clamp(1.5rem, 3vw, 2rem); |
171 | 151 | font-size: clamp(1rem, 1.2vw, 1.25rem); |
172 | 152 | } |
173 | 153 |
|
174 | 154 | /* Button Shapes */ |
175 | | -.btn-rounded { |
176 | | - border-radius: var(--radius-full); |
177 | | -} |
178 | | - |
179 | | -.btn-square { |
180 | | - border-radius: 0; |
181 | | -} |
| 155 | +.btn[data-shape="rounded"] { border-radius: var(--radius-full); } |
| 156 | +.btn[data-shape="square"] { border-radius: 0; } |
182 | 157 |
|
183 | 158 | /* Icon-only Buttons */ |
184 | 159 | .btn-icon-only { |
|
187 | 162 | height: clamp(2rem, 4vw, 2.5rem); |
188 | 163 | } |
189 | 164 |
|
190 | | -.btn-icon-only.btn-sm { |
191 | | - padding: clamp(0.375rem, 0.5vw, 0.5rem); |
192 | | - width: clamp(1.75rem, 3vw, 2rem); |
193 | | - height: clamp(1.75rem, 3vw, 2rem); |
194 | | -} |
195 | | - |
196 | | -.btn-icon-only.btn-lg { |
197 | | - padding: clamp(0.75rem, 1.5vw, 1rem); |
198 | | - width: clamp(2.75rem, 5vw, 3rem); |
199 | | - height: clamp(2.75rem, 5vw, 3rem); |
200 | | -} |
201 | | - |
202 | 165 | /* Loading State */ |
203 | | -.btn-loading { |
| 166 | +.btn[data-loading="true"] { |
204 | 167 | position: relative; |
205 | 168 | color: transparent !important; |
206 | 169 | } |
207 | 170 |
|
208 | | -.btn-loading::after { |
| 171 | +.btn[data-loading="true"]::after { |
209 | 172 | content: ""; |
210 | 173 | position: absolute; |
211 | 174 | width: 1rem; |
|
218 | 181 | animation: btn-spin 0.6s linear infinite; |
219 | 182 | } |
220 | 183 |
|
221 | | -@keyframes btn-spin { |
222 | | - to { |
223 | | - transform: rotate(360deg); |
224 | | - } |
225 | | -} |
| 184 | +@keyframes btn-spin { to { transform: rotate(360deg); } } |
226 | 185 |
|
227 | 186 | /* Button Group */ |
228 | 187 | .btn-group { |
229 | 188 | display: inline-flex; |
230 | 189 | align-items: center; |
231 | 190 | } |
232 | 191 |
|
233 | | -.btn-group .btn { |
234 | | - border-radius: 0; |
235 | | -} |
236 | | - |
| 192 | +.btn-group .btn { border-radius: 0; } |
237 | 193 | .btn-group .btn:first-child { |
238 | 194 | border-top-left-radius: var(--radius-lg); |
239 | 195 | border-bottom-left-radius: var(--radius-lg); |
240 | 196 | } |
241 | | - |
242 | 197 | .btn-group .btn:last-child { |
243 | 198 | border-top-right-radius: var(--radius-lg); |
244 | 199 | border-bottom-right-radius: var(--radius-lg); |
|
250 | 205 | padding: clamp(0.5rem, 2vw, 0.75rem) clamp(0.75rem, 4vw, 1.25rem); |
251 | 206 | font-size: clamp(0.75rem, 1.5vw, 0.875rem); |
252 | 207 | } |
253 | | - |
254 | | - .btn-icon-only { |
255 | | - padding: clamp(0.375rem, 1vw, 0.5rem); |
256 | | - width: clamp(1.75rem, 4vw, 2rem); |
257 | | - height: clamp(1.75rem, 4vw, 2rem); |
258 | | - } |
259 | 208 | } |
0 commit comments