vanduo-framework 1.1.8-docs-update

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +216 -0
  3. package/css/components/alerts.css +224 -0
  4. package/css/components/avatar.css +275 -0
  5. package/css/components/badges.css +230 -0
  6. package/css/components/breadcrumbs.css +146 -0
  7. package/css/components/button-group.css +82 -0
  8. package/css/components/buttons.css +530 -0
  9. package/css/components/cards.css +304 -0
  10. package/css/components/chips.css +259 -0
  11. package/css/components/code-snippet.css +555 -0
  12. package/css/components/collapsible.css +267 -0
  13. package/css/components/collections.css +253 -0
  14. package/css/components/doc-search.css +464 -0
  15. package/css/components/doc-tabs.css +38 -0
  16. package/css/components/draggable.css +317 -0
  17. package/css/components/dropdown.css +266 -0
  18. package/css/components/footer.css +375 -0
  19. package/css/components/forms.css +1774 -0
  20. package/css/components/image-box.css +279 -0
  21. package/css/components/modals.css +285 -0
  22. package/css/components/navbar.css +530 -0
  23. package/css/components/pagination.css +186 -0
  24. package/css/components/preloader.css +340 -0
  25. package/css/components/progress.css +107 -0
  26. package/css/components/sidenav.css +301 -0
  27. package/css/components/skeleton.css +241 -0
  28. package/css/components/spinner.css +144 -0
  29. package/css/components/tabs.css +327 -0
  30. package/css/components/theme-customizer.css +835 -0
  31. package/css/components/toast.css +357 -0
  32. package/css/components/tooltips.css +270 -0
  33. package/css/core/colors.css +1017 -0
  34. package/css/core/fonts.css +266 -0
  35. package/css/core/grid.css +1699 -0
  36. package/css/core/helpers.css +2202 -0
  37. package/css/core/reset.css +128 -0
  38. package/css/core/tokens.css +213 -0
  39. package/css/core/typography.css +405 -0
  40. package/css/core/vd-aliases.css +47 -0
  41. package/css/effects/parallax.css +113 -0
  42. package/css/icons/icons-all.css +23 -0
  43. package/css/icons/icons.css +25 -0
  44. package/css/utilities/media.css +167 -0
  45. package/css/utilities/print.css +111 -0
  46. package/css/utilities/shadow.css +243 -0
  47. package/css/utilities/table.css +381 -0
  48. package/css/utilities/transforms.css +71 -0
  49. package/css/utilities/transitions.css +87 -0
  50. package/css/vanduo.css +80 -0
  51. package/dist/build-info.json +6 -0
  52. package/dist/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  53. package/dist/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  54. package/dist/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  55. package/dist/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  56. package/dist/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  57. package/dist/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  58. package/dist/fonts/inter/inter-bold.woff2 +0 -0
  59. package/dist/fonts/inter/inter-medium.woff2 +0 -0
  60. package/dist/fonts/inter/inter-regular.woff2 +0 -0
  61. package/dist/fonts/inter/inter-semibold.woff2 +0 -0
  62. package/dist/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  63. package/dist/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  64. package/dist/fonts/open-sans/open-sans-bold.woff2 +0 -0
  65. package/dist/fonts/open-sans/open-sans-medium.woff2 +0 -0
  66. package/dist/fonts/open-sans/open-sans-regular.woff2 +0 -0
  67. package/dist/fonts/rubik/rubik-bold.woff2 +0 -0
  68. package/dist/fonts/rubik/rubik-medium.woff2 +0 -0
  69. package/dist/fonts/rubik/rubik-regular.woff2 +0 -0
  70. package/dist/fonts/source-sans/source-sans-bold.woff2 +0 -0
  71. package/dist/fonts/source-sans/source-sans-regular.woff2 +0 -0
  72. package/dist/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  73. package/dist/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  74. package/dist/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  75. package/dist/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  76. package/dist/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  77. package/dist/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  78. package/dist/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  79. package/dist/icons/phosphor/LICENSE +21 -0
  80. package/dist/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  81. package/dist/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  82. package/dist/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  83. package/dist/icons/phosphor/bold/style.css +4627 -0
  84. package/dist/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  85. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  86. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  87. package/dist/icons/phosphor/duotone/style.css +12115 -0
  88. package/dist/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  89. package/dist/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  90. package/dist/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  91. package/dist/icons/phosphor/fill/style.css +4627 -0
  92. package/dist/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  93. package/dist/icons/phosphor/light/Phosphor-Light.woff +0 -0
  94. package/dist/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  95. package/dist/icons/phosphor/light/style.css +4627 -0
  96. package/dist/icons/phosphor/regular/Phosphor.ttf +0 -0
  97. package/dist/icons/phosphor/regular/Phosphor.woff +0 -0
  98. package/dist/icons/phosphor/regular/Phosphor.woff2 +0 -0
  99. package/dist/icons/phosphor/regular/style.css +4627 -0
  100. package/dist/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  101. package/dist/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  102. package/dist/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  103. package/dist/icons/phosphor/thin/style.css +4627 -0
  104. package/dist/vanduo.cjs.js +5569 -0
  105. package/dist/vanduo.cjs.js.map +7 -0
  106. package/dist/vanduo.cjs.min.js +48 -0
  107. package/dist/vanduo.cjs.min.js.map +7 -0
  108. package/dist/vanduo.css +60666 -0
  109. package/dist/vanduo.css.map +1 -0
  110. package/dist/vanduo.esm.js +5548 -0
  111. package/dist/vanduo.esm.js.map +7 -0
  112. package/dist/vanduo.esm.min.js +48 -0
  113. package/dist/vanduo.esm.min.js.map +7 -0
  114. package/dist/vanduo.js +5545 -0
  115. package/dist/vanduo.js.map +7 -0
  116. package/dist/vanduo.min.css +2 -0
  117. package/dist/vanduo.min.css.map +1 -0
  118. package/dist/vanduo.min.js +48 -0
  119. package/dist/vanduo.min.js.map +7 -0
  120. package/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  121. package/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  122. package/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  123. package/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  124. package/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  125. package/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  126. package/fonts/inter/inter-bold.woff2 +0 -0
  127. package/fonts/inter/inter-medium.woff2 +0 -0
  128. package/fonts/inter/inter-regular.woff2 +0 -0
  129. package/fonts/inter/inter-semibold.woff2 +0 -0
  130. package/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  131. package/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  132. package/fonts/open-sans/open-sans-bold.woff2 +0 -0
  133. package/fonts/open-sans/open-sans-medium.woff2 +0 -0
  134. package/fonts/open-sans/open-sans-regular.woff2 +0 -0
  135. package/fonts/rubik/rubik-bold.woff2 +0 -0
  136. package/fonts/rubik/rubik-medium.woff2 +0 -0
  137. package/fonts/rubik/rubik-regular.woff2 +0 -0
  138. package/fonts/source-sans/source-sans-bold.woff2 +0 -0
  139. package/fonts/source-sans/source-sans-regular.woff2 +0 -0
  140. package/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  141. package/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  142. package/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  143. package/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  144. package/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  145. package/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  146. package/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  147. package/icons/phosphor/LICENSE +21 -0
  148. package/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  149. package/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  150. package/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  151. package/icons/phosphor/bold/style.css +4627 -0
  152. package/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  153. package/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  154. package/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  155. package/icons/phosphor/duotone/style.css +12115 -0
  156. package/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  157. package/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  158. package/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  159. package/icons/phosphor/fill/style.css +4627 -0
  160. package/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  161. package/icons/phosphor/light/Phosphor-Light.woff +0 -0
  162. package/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  163. package/icons/phosphor/light/style.css +4627 -0
  164. package/icons/phosphor/regular/Phosphor.ttf +0 -0
  165. package/icons/phosphor/regular/Phosphor.woff +0 -0
  166. package/icons/phosphor/regular/Phosphor.woff2 +0 -0
  167. package/icons/phosphor/regular/style.css +4627 -0
  168. package/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  169. package/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  170. package/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  171. package/icons/phosphor/thin/style.css +4627 -0
  172. package/js/components/code-snippet.js +639 -0
  173. package/js/components/collapsible.js +226 -0
  174. package/js/components/doc-search.js +936 -0
  175. package/js/components/draggable.js +725 -0
  176. package/js/components/dropdown.js +362 -0
  177. package/js/components/font-switcher.js +253 -0
  178. package/js/components/grid.js +279 -0
  179. package/js/components/image-box.js +372 -0
  180. package/js/components/modals.js +367 -0
  181. package/js/components/navbar.js +264 -0
  182. package/js/components/pagination.js +286 -0
  183. package/js/components/parallax.js +216 -0
  184. package/js/components/preloader.js +183 -0
  185. package/js/components/select.js +444 -0
  186. package/js/components/sidenav.js +303 -0
  187. package/js/components/tabs.js +303 -0
  188. package/js/components/theme-customizer.js +784 -0
  189. package/js/components/theme-switcher.js +183 -0
  190. package/js/components/toast.js +343 -0
  191. package/js/components/tooltips.js +306 -0
  192. package/js/index.js +52 -0
  193. package/js/utils/helpers.js +306 -0
  194. package/js/utils/lifecycle.js +135 -0
  195. package/js/vanduo.js +120 -0
  196. package/package.json +78 -0
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Vanduo Framework - Buttons
3
+ * Button component with variants, sizes, and states
4
+ */
5
+
6
+ :root {
7
+ /* Button Padding (Fibonacci pairs: x/y ratio ~ phi)
8
+ * sm: 13px/8px = 1.625 ~ phi
9
+ * base: 21px/13px = 1.615 ~ phi
10
+ * lg: 34px/21px = 1.619 ~ phi */
11
+ --btn-padding-x-sm: 0.8125rem;
12
+ /* 13px - fib */
13
+ --btn-padding-y-sm: 0.5rem;
14
+ /* 8px - fib */
15
+ --btn-padding-x: 1.3125rem;
16
+ /* 21px - fib */
17
+ --btn-padding-y: 0.8125rem;
18
+ /* 13px - fib */
19
+ --btn-padding-x-lg: 2.125rem;
20
+ /* 34px - fib */
21
+ --btn-padding-y-lg: 1.3125rem;
22
+ /* 21px - fib */
23
+
24
+ /* Button Font Sizes */
25
+ --btn-font-size-sm: var(--font-size-sm);
26
+ --btn-font-size: var(--font-size-base);
27
+ --btn-font-size-lg: var(--font-size-lg);
28
+
29
+ /* Button Border Radius (Fibonacci) */
30
+ --btn-border-radius: var(--radius-fib-5);
31
+ /* 5px */
32
+ --btn-border-radius-sm: var(--radius-fib-3);
33
+ /* 3px */
34
+ --btn-border-radius-lg: var(--radius-fib-8);
35
+ /* 8px */
36
+
37
+ /* Button Transitions */
38
+ --btn-transition: all 0.2s ease-in-out;
39
+ }
40
+
41
+ /* Base Button */
42
+ .vd-btn {
43
+ display: inline-block;
44
+ padding: var(--btn-padding-y) var(--btn-padding-x);
45
+ font-family: var(--font-family-sans);
46
+ font-size: var(--btn-font-size);
47
+ font-weight: var(--font-weight-medium);
48
+ line-height: var(--line-height-normal);
49
+ text-align: center;
50
+ text-decoration: none;
51
+ vertical-align: middle;
52
+ cursor: pointer;
53
+ user-select: none;
54
+ border: 1px solid transparent;
55
+ border-radius: var(--btn-border-radius);
56
+ transition: var(--btn-transition);
57
+ background-color: transparent;
58
+ color: var(--text-primary);
59
+ margin-bottom: 0.5rem;
60
+ }
61
+
62
+ /* Button spacing when adjacent */
63
+ .vd-btn+.vd-btn {
64
+ margin-left: 0.5rem;
65
+ }
66
+
67
+ /* Reset margin for vertical groups */
68
+ .vd-btn-group-vertical>.vd-btn+.vd-btn {
69
+ margin-left: 0;
70
+ margin-top: -1px;
71
+ }
72
+
73
+ /* Reset bottom margin in flush contexts */
74
+ .vd-modal-footer .vd-btn,
75
+ .vd-card-footer .vd-btn {
76
+ margin-bottom: 0;
77
+ }
78
+
79
+ .vd-btn:focus-visible {
80
+ outline: 2px solid var(--color-primary);
81
+ outline-offset: 2px;
82
+ }
83
+
84
+ .vd-btn:disabled,
85
+ .vd-btn.disabled,
86
+ .vd-btn.is-disabled {
87
+ opacity: 0.6;
88
+ cursor: not-allowed;
89
+ pointer-events: none;
90
+ }
91
+
92
+ /* Button Variants - Primary */
93
+ .vd-btn-primary {
94
+ background-color: var(--color-primary);
95
+ border-color: var(--color-primary);
96
+ color: var(--color-white);
97
+ }
98
+
99
+ .vd-btn-primary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
100
+ background-color: var(--color-primary-dark);
101
+ border-color: var(--color-primary-dark);
102
+ color: var(--color-white);
103
+ }
104
+
105
+ .vd-btn-primary:active:not(:disabled):not(.disabled):not(.is-disabled) {
106
+ background-color: var(--color-primary-dark);
107
+ border-color: var(--color-primary-dark);
108
+ transform: translateY(1px);
109
+ }
110
+
111
+ /* Button Variants - Secondary */
112
+ .vd-btn-secondary {
113
+ background-color: var(--color-secondary);
114
+ border-color: var(--color-secondary);
115
+ color: var(--color-white);
116
+ }
117
+
118
+ .vd-btn-secondary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
119
+ background-color: var(--color-secondary-dark);
120
+ border-color: var(--color-secondary-dark);
121
+ color: var(--color-white);
122
+ }
123
+
124
+ .vd-btn-secondary:active:not(:disabled):not(.disabled):not(.is-disabled) {
125
+ background-color: var(--color-secondary-dark);
126
+ border-color: var(--color-secondary-dark);
127
+ transform: translateY(1px);
128
+ }
129
+
130
+ /* Button Variants - Success */
131
+ .vd-btn-success {
132
+ background-color: var(--color-success);
133
+ border-color: var(--color-success);
134
+ color: var(--color-white);
135
+ }
136
+
137
+ .vd-btn-success:hover:not(:disabled):not(.disabled):not(.is-disabled) {
138
+ background-color: var(--color-success-dark);
139
+ border-color: var(--color-success-dark);
140
+ color: var(--color-white);
141
+ }
142
+
143
+ .vd-btn-success:active:not(:disabled):not(.disabled):not(.is-disabled) {
144
+ background-color: var(--color-success-dark);
145
+ border-color: var(--color-success-dark);
146
+ transform: translateY(1px);
147
+ }
148
+
149
+ /* Button Variants - Warning */
150
+ .vd-btn-warning {
151
+ background-color: var(--color-warning);
152
+ border-color: var(--color-warning);
153
+ color: var(--color-black);
154
+ }
155
+
156
+ .vd-btn-warning:hover:not(:disabled):not(.disabled):not(.is-disabled) {
157
+ background-color: var(--color-warning-dark);
158
+ border-color: var(--color-warning-dark);
159
+ color: var(--color-black);
160
+ }
161
+
162
+ .vd-btn-warning:active:not(:disabled):not(.disabled):not(.is-disabled) {
163
+ background-color: var(--color-warning-dark);
164
+ border-color: var(--color-warning-dark);
165
+ transform: translateY(1px);
166
+ }
167
+
168
+ /* Button Variants - Error */
169
+ .vd-btn-error {
170
+ background-color: var(--color-error);
171
+ border-color: var(--color-error);
172
+ color: var(--color-white);
173
+ }
174
+
175
+ .vd-btn-error:hover:not(:disabled):not(.disabled):not(.is-disabled) {
176
+ background-color: var(--color-error-dark);
177
+ border-color: var(--color-error-dark);
178
+ color: var(--color-white);
179
+ }
180
+
181
+ .vd-btn-error:active:not(:disabled):not(.disabled):not(.is-disabled) {
182
+ background-color: var(--color-error-dark);
183
+ border-color: var(--color-error-dark);
184
+ transform: translateY(1px);
185
+ }
186
+
187
+ /* Button Variants - Info */
188
+ .vd-btn-info {
189
+ background-color: var(--color-info);
190
+ border-color: var(--color-info);
191
+ color: var(--color-white);
192
+ }
193
+
194
+ .vd-btn-info:hover:not(:disabled):not(.disabled):not(.is-disabled) {
195
+ background-color: var(--color-info-dark);
196
+ border-color: var(--color-info-dark);
197
+ color: var(--color-white);
198
+ }
199
+
200
+ .vd-btn-info:active:not(:disabled):not(.disabled):not(.is-disabled) {
201
+ background-color: var(--color-info-dark);
202
+ border-color: var(--color-info-dark);
203
+ transform: translateY(1px);
204
+ }
205
+
206
+ /* Button Variants - Outline */
207
+ .vd-btn-outline {
208
+ background-color: transparent;
209
+ border-color: var(--color-primary);
210
+ color: var(--color-primary);
211
+ }
212
+
213
+ .vd-btn-outline:hover:not(:disabled):not(.disabled):not(.is-disabled) {
214
+ background-color: var(--color-primary);
215
+ border-color: var(--color-primary);
216
+ color: var(--color-white);
217
+ }
218
+
219
+ .vd-btn-outline-primary {
220
+ background-color: transparent;
221
+ border-color: var(--color-primary);
222
+ color: var(--color-primary);
223
+ }
224
+
225
+ .vd-btn-outline-primary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
226
+ background-color: var(--color-primary);
227
+ border-color: var(--color-primary);
228
+ color: var(--color-white);
229
+ }
230
+
231
+ .vd-btn-outline-secondary {
232
+ background-color: transparent;
233
+ border-color: var(--color-secondary);
234
+ color: var(--color-secondary);
235
+ }
236
+
237
+ .vd-btn-outline-secondary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
238
+ background-color: var(--color-secondary);
239
+ border-color: var(--color-secondary);
240
+ color: var(--color-white);
241
+ }
242
+
243
+ .vd-btn-outline-success {
244
+ background-color: transparent;
245
+ border-color: var(--color-success);
246
+ color: var(--color-success);
247
+ }
248
+
249
+ .vd-btn-outline-success:hover:not(:disabled):not(.disabled):not(.is-disabled) {
250
+ background-color: var(--color-success);
251
+ border-color: var(--color-success);
252
+ color: var(--color-white);
253
+ }
254
+
255
+ .vd-btn-outline-warning {
256
+ background-color: transparent;
257
+ border-color: var(--color-warning);
258
+ color: var(--color-warning);
259
+ }
260
+
261
+ .vd-btn-outline-warning:hover:not(:disabled):not(.disabled):not(.is-disabled) {
262
+ background-color: var(--color-warning);
263
+ border-color: var(--color-warning);
264
+ color: var(--color-black);
265
+ }
266
+
267
+ .vd-btn-outline-error {
268
+ background-color: transparent;
269
+ border-color: var(--color-error);
270
+ color: var(--color-error);
271
+ }
272
+
273
+ .vd-btn-outline-error:hover:not(:disabled):not(.disabled):not(.is-disabled) {
274
+ background-color: var(--color-error);
275
+ border-color: var(--color-error);
276
+ color: var(--color-white);
277
+ }
278
+
279
+ .vd-btn-outline-info {
280
+ background-color: transparent;
281
+ border-color: var(--color-info);
282
+ color: var(--color-info);
283
+ }
284
+
285
+ .vd-btn-outline-info:hover:not(:disabled):not(.disabled):not(.is-disabled) {
286
+ background-color: var(--color-info);
287
+ border-color: var(--color-info);
288
+ color: var(--color-white);
289
+ }
290
+
291
+ /* Button Variants - Ghost/Text */
292
+ .vd-btn-ghost {
293
+ background-color: transparent;
294
+ border-color: transparent;
295
+ color: var(--color-primary);
296
+ }
297
+
298
+ .vd-btn-ghost:hover:not(:disabled):not(.disabled):not(.is-disabled) {
299
+ background-color: var(--color-primary-alpha-10);
300
+ color: var(--color-primary-dark);
301
+ }
302
+
303
+ .vd-btn-ghost:active:not(:disabled):not(.disabled):not(.is-disabled) {
304
+ background-color: var(--color-primary-alpha-20);
305
+ transform: translateY(1px);
306
+ }
307
+
308
+ /* Ghost Button Variants */
309
+ .vd-btn-ghost-primary {
310
+ background-color: transparent;
311
+ border-color: transparent;
312
+ color: var(--color-primary);
313
+ }
314
+
315
+ .vd-btn-ghost-primary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
316
+ background-color: var(--color-primary-alpha-10);
317
+ color: var(--color-primary-dark);
318
+ }
319
+
320
+ .vd-btn-ghost-primary:active:not(:disabled):not(.disabled):not(.is-disabled) {
321
+ background-color: var(--color-primary-alpha-20);
322
+ color: var(--color-primary-active);
323
+ }
324
+
325
+ .vd-btn-ghost-secondary {
326
+ background-color: transparent;
327
+ border-color: transparent;
328
+ color: var(--color-secondary);
329
+ }
330
+
331
+ .vd-btn-ghost-secondary:hover:not(:disabled):not(.disabled):not(.is-disabled) {
332
+ background-color: var(--color-secondary-alpha-10);
333
+ color: var(--color-secondary-dark);
334
+ }
335
+
336
+ .vd-btn-ghost-secondary:active:not(:disabled):not(.disabled):not(.is-disabled) {
337
+ background-color: var(--color-secondary-alpha-20);
338
+ color: var(--color-secondary-active);
339
+ }
340
+
341
+ .vd-btn-ghost-success {
342
+ background-color: transparent;
343
+ border-color: transparent;
344
+ color: var(--color-success);
345
+ }
346
+
347
+ .vd-btn-ghost-success:hover:not(:disabled):not(.disabled):not(.is-disabled) {
348
+ background-color: var(--color-success-alpha-10);
349
+ color: var(--color-success-dark);
350
+ }
351
+
352
+ .vd-btn-ghost-success:active:not(:disabled):not(.disabled):not(.is-disabled) {
353
+ background-color: var(--color-success-alpha-20);
354
+ color: var(--color-success-active);
355
+ }
356
+
357
+ .vd-btn-ghost-warning {
358
+ background-color: transparent;
359
+ border-color: transparent;
360
+ color: var(--color-warning);
361
+ }
362
+
363
+ .vd-btn-ghost-warning:hover:not(:disabled):not(.disabled):not(.is-disabled) {
364
+ background-color: var(--color-warning-alpha-10);
365
+ color: var(--color-warning-dark);
366
+ }
367
+
368
+ .vd-btn-ghost-warning:active:not(:disabled):not(.disabled):not(.is-disabled) {
369
+ background-color: var(--color-warning-alpha-20);
370
+ color: var(--color-warning-active);
371
+ }
372
+
373
+ .vd-btn-ghost-error {
374
+ background-color: transparent;
375
+ border-color: transparent;
376
+ color: var(--color-error);
377
+ }
378
+
379
+ .vd-btn-ghost-error:hover:not(:disabled):not(.disabled):not(.is-disabled) {
380
+ background-color: var(--color-error-alpha-10);
381
+ color: var(--color-error-dark);
382
+ }
383
+
384
+ .vd-btn-ghost-error:active:not(:disabled):not(.disabled):not(.is-disabled) {
385
+ background-color: var(--color-error-alpha-20);
386
+ color: var(--color-error-active);
387
+ }
388
+
389
+ .vd-btn-ghost-info {
390
+ background-color: transparent;
391
+ border-color: transparent;
392
+ color: var(--color-info);
393
+ }
394
+
395
+ .vd-btn-ghost-info:hover:not(:disabled):not(.disabled):not(.is-disabled) {
396
+ background-color: var(--color-info-alpha-10);
397
+ color: var(--color-info-dark);
398
+ }
399
+
400
+ .vd-btn-ghost-info:active:not(:disabled):not(.disabled):not(.is-disabled) {
401
+ background-color: var(--color-info-alpha-20);
402
+ color: var(--color-info-active);
403
+ }
404
+
405
+ /* Ghost Button with Border (Subtle) */
406
+ .vd-btn-ghost-subtle {
407
+ background-color: transparent;
408
+ border: 1px solid var(--border-color);
409
+ color: var(--text-secondary);
410
+ }
411
+
412
+ .vd-btn-ghost-subtle:hover:not(:disabled):not(.disabled):not(.is-disabled) {
413
+ background-color: var(--gray-0);
414
+ border-color: var(--gray-4);
415
+ color: var(--text-primary);
416
+ }
417
+
418
+ .vd-btn-ghost-subtle:active:not(:disabled):not(.disabled):not(.is-disabled) {
419
+ background-color: var(--gray-1);
420
+ border-color: var(--gray-5);
421
+ }
422
+
423
+ /* Button Sizes - Small */
424
+ .vd-btn-sm {
425
+ padding: var(--btn-padding-y-sm) var(--btn-padding-x-sm);
426
+ font-size: var(--btn-font-size-sm);
427
+ border-radius: var(--btn-border-radius-sm);
428
+ }
429
+
430
+ /* Button Sizes - Large */
431
+ .vd-btn-lg {
432
+ padding: var(--btn-padding-y-lg) var(--btn-padding-x-lg);
433
+ font-size: var(--btn-font-size-lg);
434
+ border-radius: var(--btn-border-radius-lg);
435
+ }
436
+
437
+ /* Full Width Button */
438
+ .vd-btn-block,
439
+ .vd-btn-full {
440
+ display: block;
441
+ width: 100%;
442
+ }
443
+
444
+ /* Icon Button Support (Fibonacci squares) */
445
+ .vd-btn-icon {
446
+ display: inline-flex;
447
+ align-items: center;
448
+ justify-content: center;
449
+ padding: var(--btn-padding-y);
450
+ width: auto;
451
+ min-width: 2.125rem;
452
+ /* 34px - fib */
453
+ height: 2.125rem;
454
+ /* 34px - fib */
455
+ }
456
+
457
+ .vd-btn-icon.vd-btn-sm {
458
+ min-width: 2.125rem;
459
+ /* 34px - fib */
460
+ height: 2.125rem;
461
+ /* 34px - fib */
462
+ padding: var(--btn-padding-y-sm);
463
+ }
464
+
465
+ .vd-btn-icon.vd-btn-lg {
466
+ min-width: 3.4375rem;
467
+ /* 55px - fib */
468
+ height: 3.4375rem;
469
+ /* 55px - fib */
470
+ padding: var(--btn-padding-y-lg);
471
+ }
472
+
473
+ /* Button with Icon Spacing */
474
+ .vd-btn>*+* {
475
+ margin-left: 0.5rem;
476
+ }
477
+
478
+ .vd-btn>*:first-child {
479
+ margin-left: 0;
480
+ }
481
+
482
+ /* Link as Button */
483
+ a.vd-btn {
484
+ text-decoration: none;
485
+ }
486
+
487
+ a.vd-btn:hover {
488
+ text-decoration: none;
489
+ }
490
+
491
+ /* Loading State */
492
+ .vd-btn.is-loading {
493
+ position: relative;
494
+ color: transparent;
495
+ pointer-events: none;
496
+ }
497
+
498
+ .vd-btn.is-loading::after {
499
+ content: '';
500
+ position: absolute;
501
+ top: 50%;
502
+ left: 50%;
503
+ width: 1em;
504
+ height: 1em;
505
+ margin: -0.5em 0 0 -0.5em;
506
+ border: 2px solid currentColor;
507
+ border-right-color: transparent;
508
+ border-radius: 50%;
509
+ animation: btn-spinner 0.6s linear infinite;
510
+ }
511
+
512
+ .vd-btn-primary.is-loading::after,
513
+ .vd-btn-secondary.is-loading::after,
514
+ .vd-btn-success.is-loading::after,
515
+ .vd-btn-error.is-loading::after,
516
+ .vd-btn-info.is-loading::after {
517
+ border-color: var(--color-white);
518
+ border-right-color: transparent;
519
+ }
520
+
521
+ .vd-btn-warning.is-loading::after {
522
+ border-color: var(--color-black);
523
+ border-right-color: transparent;
524
+ }
525
+
526
+ @keyframes btn-spinner {
527
+ to {
528
+ transform: rotate(360deg);
529
+ }
530
+ }