@vanduo-oss/framework 1.3.9 → 1.4.1

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 (124) hide show
  1. package/README.md +89 -42
  2. package/css/components/affix.css +12 -12
  3. package/css/components/alerts.css +70 -70
  4. package/css/components/avatar.css +78 -78
  5. package/css/components/badges.css +67 -67
  6. package/css/components/breadcrumbs.css +32 -32
  7. package/css/components/bubble.css +40 -40
  8. package/css/components/button-group.css +2 -2
  9. package/css/components/buttons.css +157 -157
  10. package/css/components/cards.css +79 -79
  11. package/css/components/chips.css +50 -50
  12. package/css/components/code-snippet.css +132 -132
  13. package/css/components/collapsible.css +67 -67
  14. package/css/components/collections.css +68 -68
  15. package/css/components/datepicker.css +54 -54
  16. package/css/components/doc-search.css +96 -103
  17. package/css/components/doc-tabs.css +11 -11
  18. package/css/components/draggable.css +77 -77
  19. package/css/components/dropdown.css +50 -50
  20. package/css/components/expanding-cards.css +1 -1
  21. package/css/components/fab.css +61 -61
  22. package/css/components/flow.css +55 -55
  23. package/css/components/footer.css +62 -62
  24. package/css/components/forms.css +437 -425
  25. package/css/components/image-box.css +50 -54
  26. package/css/components/modals.css +51 -51
  27. package/css/components/music-player.css +150 -150
  28. package/css/components/navbar.css +80 -80
  29. package/css/components/pagination.css +51 -51
  30. package/css/components/preloader.css +19 -19
  31. package/css/components/progress.css +20 -20
  32. package/css/components/rating.css +19 -19
  33. package/css/components/ripple.css +10 -10
  34. package/css/components/sidenav.css +72 -72
  35. package/css/components/skeleton.css +17 -16
  36. package/css/components/spinner.css +33 -33
  37. package/css/components/spotlight.css +33 -33
  38. package/css/components/stepper.css +39 -39
  39. package/css/components/suggest.css +37 -37
  40. package/css/components/tabs.css +60 -60
  41. package/css/components/theme-customizer.css +154 -154
  42. package/css/components/timeline.css +50 -50
  43. package/css/components/timepicker.css +29 -29
  44. package/css/components/toast.css +53 -53
  45. package/css/components/tooltips.css +78 -78
  46. package/css/components/transfer.css +37 -37
  47. package/css/components/tree.css +28 -28
  48. package/css/components/waypoint.css +12 -12
  49. package/css/core/colors.css +640 -640
  50. package/css/core/grid.css +127 -132
  51. package/css/core/helpers.css +349 -349
  52. package/css/core/tokens.css +133 -67
  53. package/css/core/typography.css +105 -103
  54. package/css/effects/morph.css +21 -21
  55. package/css/effects/parallax.css +6 -6
  56. package/css/utilities/color-utilities.css +273 -273
  57. package/css/utilities/media.css +4 -4
  58. package/css/utilities/shadow.css +75 -75
  59. package/css/utilities/table.css +64 -64
  60. package/css/utilities/transitions.css +53 -41
  61. package/css/vanduo.css +14 -35
  62. package/dist/build-info.json +3 -3
  63. package/dist/vanduo.cjs.js +947 -307
  64. package/dist/vanduo.cjs.js.map +3 -3
  65. package/dist/vanduo.cjs.min.js +7 -7
  66. package/dist/vanduo.cjs.min.js.map +3 -3
  67. package/dist/vanduo.css +9650 -9656
  68. package/dist/vanduo.css.map +1 -1
  69. package/dist/vanduo.esm.js +947 -307
  70. package/dist/vanduo.esm.js.map +3 -3
  71. package/dist/vanduo.esm.min.js +7 -7
  72. package/dist/vanduo.esm.min.js.map +3 -3
  73. package/dist/vanduo.js +947 -307
  74. package/dist/vanduo.js.map +3 -3
  75. package/dist/vanduo.min.css +2 -2
  76. package/dist/vanduo.min.css.map +1 -1
  77. package/dist/vanduo.min.js +7 -7
  78. package/dist/vanduo.min.js.map +3 -3
  79. package/js/components/affix.js +4 -4
  80. package/js/components/bubble.js +3 -3
  81. package/js/components/code-snippet.js +129 -5
  82. package/js/components/collapsible.js +2 -3
  83. package/js/components/datepicker.js +2 -2
  84. package/js/components/doc-search.js +69 -11
  85. package/js/components/draggable.js +4 -4
  86. package/js/components/dropdown.js +2 -3
  87. package/js/components/expanding-cards.js +2 -2
  88. package/js/components/flow.js +2 -2
  89. package/js/components/font-switcher.js +23 -13
  90. package/js/components/glass.js +2 -2
  91. package/js/components/grid.js +19 -8
  92. package/js/components/image-box.js +51 -12
  93. package/js/components/lazy-load.js +81 -9
  94. package/js/components/modals.js +28 -12
  95. package/js/components/morph.js +3 -3
  96. package/js/components/music-player.js +13 -13
  97. package/js/components/navbar.js +3 -3
  98. package/js/components/pagination.js +2 -3
  99. package/js/components/parallax.js +9 -10
  100. package/js/components/preloader.js +15 -6
  101. package/js/components/rating.js +2 -2
  102. package/js/components/ripple.js +2 -2
  103. package/js/components/select.js +2 -3
  104. package/js/components/sidenav.js +43 -14
  105. package/js/components/spotlight.js +2 -2
  106. package/js/components/stepper.js +2 -2
  107. package/js/components/suggest.js +9 -3
  108. package/js/components/tabs.js +2 -2
  109. package/js/components/theme-customizer.js +155 -25
  110. package/js/components/theme-switcher.js +27 -16
  111. package/js/components/timeline.js +41 -12
  112. package/js/components/timepicker.js +2 -2
  113. package/js/components/toast.js +1 -1
  114. package/js/components/tooltips.js +4 -4
  115. package/js/components/transfer.js +2 -2
  116. package/js/components/tree.js +2 -2
  117. package/js/components/validate.js +2 -2
  118. package/js/components/vd-hex.js +10 -6
  119. package/js/components/waypoint.js +2 -2
  120. package/js/utils/helpers.js +7 -4
  121. package/js/utils/lifecycle.js +158 -83
  122. package/js/vanduo.js +203 -34
  123. package/package.json +2 -1
  124. package/css/core/vd-aliases.css +0 -60
@@ -3,62 +3,67 @@
3
3
  * Form components: inputs, textareas, labels, and validation
4
4
  */
5
5
 
6
+ /* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
6
7
  :root {
7
8
  /* Input Padding (Fibonacci pairs: x/y ratio ~ phi)
8
9
  * sm: 8px/5px = 1.6 ~ phi
9
10
  * base: 13px/8px = 1.625 ~ phi
10
11
  * lg: 21px/13px = 1.615 ~ phi */
11
- --input-padding-x-sm: 0.5rem;
12
+ --vd-input-padding-x-sm: 0.5rem;
12
13
  /* 8px - fib */
13
- --input-padding-y-sm: 0.3125rem;
14
+ --vd-input-padding-y-sm: 0.3125rem;
14
15
  /* 5px - fib */
15
- --input-padding-x: 0.8125rem;
16
+ --vd-input-padding-x: 0.8125rem;
16
17
  /* 13px - fib */
17
- --input-padding-y: 0.5rem;
18
+ --vd-input-padding-y: 0.5rem;
18
19
  /* 8px - fib */
19
- --input-padding-x-lg: 1.3125rem;
20
+ --vd-input-padding-x-lg: 1.3125rem;
20
21
  /* 21px - fib */
21
- --input-padding-y-lg: 0.8125rem;
22
+ --vd-input-padding-y-lg: 0.8125rem;
22
23
  /* 13px - fib */
23
24
 
24
25
  /* Input Font Sizes */
25
- --input-font-size-sm: var(--font-size-sm);
26
- --input-font-size: var(--font-size-base);
27
- --input-font-size-lg: var(--font-size-lg);
26
+ --vd-input-font-size-sm: var(--vd-font-size-sm);
27
+ --vd-input-font-size: var(--vd-font-size-base);
28
+ --vd-input-font-size-lg: var(--vd-font-size-lg);
28
29
 
29
30
  /* Input Border */
30
- --input-border-width: 1px;
31
- --input-border-color: var(--border-color);
32
- --input-border-radius: var(--btn-border-radius);
33
- --input-border-radius-sm: var(--btn-border-radius-sm);
34
- --input-border-radius-lg: var(--btn-border-radius-lg);
31
+ --vd-input-border-width: 1px;
32
+ --vd-input-border-color: var(--vd-border-color);
33
+ --vd-input-border-radius: var(--vd-btn-border-radius);
34
+ --vd-input-border-radius-sm: var(--vd-btn-border-radius-sm);
35
+ --vd-input-border-radius-lg: var(--vd-btn-border-radius-lg);
35
36
 
36
37
  /* Input Background */
37
- --input-bg: var(--color-white);
38
- --input-bg-disabled: var(--bg-secondary);
38
+ --vd-input-bg: var(--vd-color-white);
39
+ --vd-input-bg-disabled: var(--vd-bg-secondary);
39
40
 
40
41
  /* Input Focus */
41
- --input-focus-border-color: var(--color-primary);
42
- --input-focus-box-shadow: 0 0 0 3px var(--color-primary-alpha-20);
42
+ --vd-input-focus-border-color: var(--vd-color-primary);
43
+ --vd-input-focus-box-shadow: 0 0 0 3px var(--vd-color-primary-alpha-20);
43
44
 
44
45
  /* Input Transitions */
45
- --input-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
46
+ --vd-input-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
46
47
  }
47
48
 
48
49
  /* Dark Theme Overrides */
49
50
  [data-theme="dark"] {
50
- --input-bg: var(--bg-secondary);
51
- --input-bg-disabled: var(--bg-tertiary);
51
+ --vd-input-bg: var(--vd-bg-secondary);
52
+ --vd-input-bg-disabled: var(--vd-bg-tertiary);
52
53
  }
53
54
 
54
55
  @media (prefers-color-scheme: dark) {
55
56
  :root:not([data-theme]) {
56
- --input-bg: var(--bg-secondary);
57
- --input-bg-disabled: var(--bg-tertiary);
57
+ --vd-input-bg: var(--vd-bg-secondary);
58
+ --vd-input-bg-disabled: var(--vd-bg-tertiary);
58
59
  }
59
60
  }
60
61
 
61
- /* Base Input */
62
+ /* Base Input
63
+ * The main bundle intentionally styles both `.vd-*` controls and native form
64
+ * elements for full-page framework usage. Keep new raw element selectors in
65
+ * reset/base layers; component-specific styling should prefer `.vd-*` hooks.
66
+ */
62
67
  .vd-input,
63
68
  input[type="text"],
64
69
  input[type="email"],
@@ -72,16 +77,16 @@ input[type="time"],
72
77
  input[type="datetime-local"] {
73
78
  display: block;
74
79
  width: 100%;
75
- padding: var(--input-padding-y) var(--input-padding-x);
76
- font-family: var(--font-family-sans);
77
- font-size: var(--input-font-size);
78
- font-weight: var(--font-weight-normal);
79
- line-height: var(--line-height-normal);
80
- color: var(--text-primary);
81
- background-color: var(--input-bg);
82
- border: var(--input-border-width) solid var(--input-border-color);
83
- border-radius: var(--input-border-radius);
84
- transition: var(--input-transition);
80
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
81
+ font-family: var(--vd-font-family-sans);
82
+ font-size: var(--vd-input-font-size);
83
+ font-weight: var(--vd-font-weight-normal);
84
+ line-height: var(--vd-line-height-normal);
85
+ color: var(--vd-text-primary);
86
+ background-color: var(--vd-input-bg);
87
+ border: var(--vd-input-border-width) solid var(--vd-input-border-color);
88
+ border-radius: var(--vd-input-border-radius);
89
+ transition: var(--vd-input-transition);
85
90
  appearance: none;
86
91
  }
87
92
 
@@ -97,13 +102,13 @@ input[type="date"]:focus,
97
102
  input[type="time"]:focus,
98
103
  input[type="datetime-local"]:focus {
99
104
  outline: 0;
100
- border-color: var(--input-focus-border-color);
101
- box-shadow: var(--input-focus-box-shadow);
105
+ border-color: var(--vd-input-focus-border-color);
106
+ box-shadow: var(--vd-input-focus-box-shadow);
102
107
  }
103
108
 
104
109
  .vd-input::placeholder,
105
110
  input::placeholder {
106
- color: var(--text-muted);
111
+ color: var(--vd-text-muted);
107
112
  opacity: 1;
108
113
  }
109
114
 
@@ -111,7 +116,7 @@ input::placeholder {
111
116
  input:disabled,
112
117
  .vd-input.disabled,
113
118
  input.disabled {
114
- background-color: var(--input-bg-disabled);
119
+ background-color: var(--vd-input-bg-disabled);
115
120
  opacity: 0.6;
116
121
  cursor: not-allowed;
117
122
  }
@@ -121,16 +126,16 @@ input.disabled {
121
126
  textarea {
122
127
  display: block;
123
128
  width: 100%;
124
- padding: var(--input-padding-y) var(--input-padding-x);
125
- font-family: var(--font-family-sans);
126
- font-size: var(--input-font-size);
127
- font-weight: var(--font-weight-normal);
128
- line-height: var(--line-height-normal);
129
- color: var(--text-primary);
130
- background-color: var(--input-bg);
131
- border: var(--input-border-width) solid var(--input-border-color);
132
- border-radius: var(--input-border-radius);
133
- transition: var(--input-transition);
129
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
130
+ font-family: var(--vd-font-family-sans);
131
+ font-size: var(--vd-input-font-size);
132
+ font-weight: var(--vd-font-weight-normal);
133
+ line-height: var(--vd-line-height-normal);
134
+ color: var(--vd-text-primary);
135
+ background-color: var(--vd-input-bg);
136
+ border: var(--vd-input-border-width) solid var(--vd-input-border-color);
137
+ border-radius: var(--vd-input-border-radius);
138
+ transition: var(--vd-input-transition);
134
139
  resize: vertical;
135
140
  min-height: 100px;
136
141
  }
@@ -138,13 +143,13 @@ textarea {
138
143
  .textarea:focus,
139
144
  textarea:focus {
140
145
  outline: 0;
141
- border-color: var(--input-focus-border-color);
142
- box-shadow: var(--input-focus-box-shadow);
146
+ border-color: var(--vd-input-focus-border-color);
147
+ box-shadow: var(--vd-input-focus-box-shadow);
143
148
  }
144
149
 
145
150
  .textarea::placeholder,
146
151
  textarea::placeholder {
147
- color: var(--text-muted);
152
+ color: var(--vd-text-muted);
148
153
  opacity: 1;
149
154
  }
150
155
 
@@ -152,7 +157,7 @@ textarea::placeholder {
152
157
  textarea:disabled,
153
158
  .textarea.disabled,
154
159
  textarea.disabled {
155
- background-color: var(--input-bg-disabled);
160
+ background-color: var(--vd-input-bg-disabled);
156
161
  opacity: 0.6;
157
162
  cursor: not-allowed;
158
163
  }
@@ -165,31 +170,31 @@ textarea.no-resize {
165
170
  /* Input Sizes - Small */
166
171
  .vd-input-sm,
167
172
  input.vd-input-sm {
168
- padding: var(--input-padding-y-sm) var(--input-padding-x-sm);
169
- font-size: var(--input-font-size-sm);
170
- border-radius: var(--input-border-radius-sm);
173
+ padding: var(--vd-input-padding-y-sm) var(--vd-input-padding-x-sm);
174
+ font-size: var(--vd-input-font-size-sm);
175
+ border-radius: var(--vd-input-border-radius-sm);
171
176
  }
172
177
 
173
178
  .textarea-sm,
174
179
  textarea.textarea-sm {
175
- padding: var(--input-padding-y-sm) var(--input-padding-x-sm);
176
- font-size: var(--input-font-size-sm);
177
- border-radius: var(--input-border-radius-sm);
180
+ padding: var(--vd-input-padding-y-sm) var(--vd-input-padding-x-sm);
181
+ font-size: var(--vd-input-font-size-sm);
182
+ border-radius: var(--vd-input-border-radius-sm);
178
183
  }
179
184
 
180
185
  /* Input Sizes - Large */
181
186
  .vd-input-lg,
182
187
  input.vd-input-lg {
183
- padding: var(--input-padding-y-lg) var(--input-padding-x-lg);
184
- font-size: var(--input-font-size-lg);
185
- border-radius: var(--input-border-radius-lg);
188
+ padding: var(--vd-input-padding-y-lg) var(--vd-input-padding-x-lg);
189
+ font-size: var(--vd-input-font-size-lg);
190
+ border-radius: var(--vd-input-border-radius-lg);
186
191
  }
187
192
 
188
193
  .textarea-lg,
189
194
  textarea.textarea-lg {
190
- padding: var(--input-padding-y-lg) var(--input-padding-x-lg);
191
- font-size: var(--input-font-size-lg);
192
- border-radius: var(--input-border-radius-lg);
195
+ padding: var(--vd-input-padding-y-lg) var(--vd-input-padding-x-lg);
196
+ font-size: var(--vd-input-font-size-lg);
197
+ border-radius: var(--vd-input-border-radius-lg);
193
198
  }
194
199
 
195
200
  /* Input States - Error */
@@ -197,41 +202,41 @@ textarea.textarea-lg {
197
202
  input.vd-input-error,
198
203
  .vd-input.is-error,
199
204
  input.is-error {
200
- border-color: var(--color-error);
205
+ border-color: var(--vd-color-error);
201
206
  }
202
207
 
203
208
  .vd-input-invalid,
204
209
  input.vd-input-invalid {
205
- border-color: var(--color-error);
210
+ border-color: var(--vd-color-error);
206
211
  }
207
212
 
208
213
  .vd-input-error:focus,
209
214
  input.vd-input-error:focus,
210
215
  .vd-input.is-error:focus,
211
216
  input.is-error:focus {
212
- border-color: var(--color-error);
213
- box-shadow: 0 0 0 3px var(--color-error-alpha-10);
217
+ border-color: var(--vd-color-error);
218
+ box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
214
219
  }
215
220
 
216
221
  .vd-input-invalid:focus,
217
222
  input.vd-input-invalid:focus {
218
- border-color: var(--color-error);
219
- box-shadow: 0 0 0 3px var(--color-error-alpha-10);
223
+ border-color: var(--vd-color-error);
224
+ box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
220
225
  }
221
226
 
222
227
  .textarea-error,
223
228
  textarea.textarea-error,
224
229
  .textarea.is-error,
225
230
  textarea.is-error {
226
- border-color: var(--color-error);
231
+ border-color: var(--vd-color-error);
227
232
  }
228
233
 
229
234
  .textarea-error:focus,
230
235
  textarea.textarea-error:focus,
231
236
  .textarea.is-error:focus,
232
237
  textarea.is-error:focus {
233
- border-color: var(--color-error);
234
- box-shadow: 0 0 0 3px var(--color-error-alpha-10);
238
+ border-color: var(--vd-color-error);
239
+ box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
235
240
  }
236
241
 
237
242
  /* Input States - Success */
@@ -239,41 +244,41 @@ textarea.is-error:focus {
239
244
  input.vd-input-success,
240
245
  .vd-input.is-success,
241
246
  input.is-success {
242
- border-color: var(--color-success);
247
+ border-color: var(--vd-color-success);
243
248
  }
244
249
 
245
250
  .vd-input-valid,
246
251
  input.vd-input-valid {
247
- border-color: var(--color-success);
252
+ border-color: var(--vd-color-success);
248
253
  }
249
254
 
250
255
  .vd-input-success:focus,
251
256
  input.vd-input-success:focus,
252
257
  .vd-input.is-success:focus,
253
258
  input.is-success:focus {
254
- border-color: var(--color-success);
255
- box-shadow: 0 0 0 3px var(--color-success-alpha-10);
259
+ border-color: var(--vd-color-success);
260
+ box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
256
261
  }
257
262
 
258
263
  .vd-input-valid:focus,
259
264
  input.vd-input-valid:focus {
260
- border-color: var(--color-success);
261
- box-shadow: 0 0 0 3px var(--color-success-alpha-10);
265
+ border-color: var(--vd-color-success);
266
+ box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
262
267
  }
263
268
 
264
269
  .textarea-success,
265
270
  textarea.textarea-success,
266
271
  .textarea.is-success,
267
272
  textarea.is-success {
268
- border-color: var(--color-success);
273
+ border-color: var(--vd-color-success);
269
274
  }
270
275
 
271
276
  .textarea-success:focus,
272
277
  textarea.textarea-success:focus,
273
278
  .textarea.is-success:focus,
274
279
  textarea.is-success:focus {
275
- border-color: var(--color-success);
276
- box-shadow: 0 0 0 3px var(--color-success-alpha-10);
280
+ border-color: var(--vd-color-success);
281
+ box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
277
282
  }
278
283
 
279
284
  /* Labels */
@@ -281,26 +286,26 @@ textarea.is-success:focus {
281
286
  label {
282
287
  display: inline-block;
283
288
  margin-bottom: 0.5rem;
284
- font-size: var(--font-size-sm);
285
- font-weight: var(--font-weight-medium);
286
- color: var(--text-primary);
287
- line-height: var(--line-height-normal);
289
+ font-size: var(--vd-font-size-sm);
290
+ font-weight: var(--vd-font-weight-medium);
291
+ color: var(--vd-text-primary);
292
+ line-height: var(--vd-line-height-normal);
288
293
  }
289
294
 
290
295
  .label-required::after,
291
296
  label.required::after {
292
297
  content: " *";
293
- color: var(--color-error);
298
+ color: var(--vd-color-error);
294
299
  }
295
300
 
296
301
  .label-sm,
297
302
  label.label-sm {
298
- font-size: var(--font-size-xs);
303
+ font-size: var(--vd-font-size-xs);
299
304
  }
300
305
 
301
306
  .label-lg,
302
307
  label.label-lg {
303
- font-size: var(--font-size-base);
308
+ font-size: var(--vd-font-size-base);
304
309
  }
305
310
 
306
311
  /* Form Groups */
@@ -318,38 +323,38 @@ label.label-lg {
318
323
  .error-message {
319
324
  display: block;
320
325
  margin-top: 0.5rem;
321
- font-size: var(--font-size-sm);
322
- color: var(--color-error);
326
+ font-size: var(--vd-font-size-sm);
327
+ color: var(--vd-color-error);
323
328
  }
324
329
 
325
330
  .vd-form-feedback {
326
331
  display: block;
327
332
  margin-top: 0.5rem;
328
- font-size: var(--font-size-sm);
333
+ font-size: var(--vd-font-size-sm);
329
334
  }
330
335
 
331
336
  .vd-form-feedback-invalid {
332
- color: var(--color-error);
337
+ color: var(--vd-color-error);
333
338
  }
334
339
 
335
340
  .vd-form-success,
336
341
  .success-message {
337
342
  display: block;
338
343
  margin-top: 0.5rem;
339
- font-size: var(--font-size-sm);
340
- color: var(--color-success);
344
+ font-size: var(--vd-font-size-sm);
345
+ color: var(--vd-color-success);
341
346
  }
342
347
 
343
348
  .vd-form-feedback-valid {
344
- color: var(--color-success);
349
+ color: var(--vd-color-success);
345
350
  }
346
351
 
347
352
  .vd-form-help,
348
353
  .help-text {
349
354
  display: block;
350
355
  margin-top: 0.5rem;
351
- font-size: var(--font-size-sm);
352
- color: var(--text-muted);
356
+ font-size: var(--vd-font-size-sm);
357
+ color: var(--vd-text-muted);
353
358
  }
354
359
 
355
360
  /* Input Groups (with prefix/suffix) */
@@ -384,25 +389,25 @@ label.label-lg {
384
389
  .vd-input-group-suffix {
385
390
  display: flex;
386
391
  align-items: center;
387
- padding: var(--input-padding-y) var(--input-padding-x);
388
- font-size: var(--input-font-size);
389
- font-weight: var(--font-weight-normal);
390
- line-height: var(--line-height-normal);
391
- color: var(--text-secondary);
392
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
393
+ font-size: var(--vd-input-font-size);
394
+ font-weight: var(--vd-font-weight-normal);
395
+ line-height: var(--vd-line-height-normal);
396
+ color: var(--vd-text-secondary);
392
397
  text-align: center;
393
398
  white-space: nowrap;
394
- background-color: var(--bg-secondary);
395
- border: var(--input-border-width) solid var(--input-border-color);
399
+ background-color: var(--vd-bg-secondary);
400
+ border: var(--vd-input-border-width) solid var(--vd-input-border-color);
396
401
  }
397
402
 
398
403
  .vd-input-group-prefix {
399
404
  border-right: 0;
400
- border-radius: var(--input-border-radius) 0 0 var(--input-border-radius);
405
+ border-radius: var(--vd-input-border-radius) 0 0 var(--vd-input-border-radius);
401
406
  }
402
407
 
403
408
  .vd-input-group-suffix {
404
409
  border-left: 0;
405
- border-radius: 0 var(--input-border-radius) var(--input-border-radius) 0;
410
+ border-radius: 0 var(--vd-input-border-radius) var(--vd-input-border-radius) 0;
406
411
  }
407
412
 
408
413
  .vd-input-group>.vd-input-group-prefix+.vd-input,
@@ -420,22 +425,23 @@ label.label-lg {
420
425
  ============================================ */
421
426
 
422
427
  /* Checkbox Variables */
428
+ /* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
423
429
  :root {
424
- --checkbox-size: 1.3125rem;
430
+ --vd-checkbox-size: 1.3125rem;
425
431
  /* 21px - fib */
426
- --checkbox-size-sm: 0.8125rem;
432
+ --vd-checkbox-size-sm: 0.8125rem;
427
433
  /* 13px - fib */
428
- --checkbox-size-lg: 2.125rem;
434
+ --vd-checkbox-size-lg: 2.125rem;
429
435
  /* 34px - fib */
430
- --checkbox-border-width: 2px;
436
+ --vd-checkbox-border-width: 2px;
431
437
  /* fib(2) */
432
- --checkbox-border-radius: var(--radius-fib-3);
438
+ --vd-checkbox-border-radius: var(--vd-radius-fib-3);
433
439
  /* 3px */
434
- --checkbox-check-color: var(--color-white);
435
- --checkbox-bg-checked: var(--color-primary);
436
- --checkbox-bg-indeterminate: var(--color-primary);
437
- --checkbox-border-color: var(--input-border-color);
438
- --checkbox-transition: var(--transition-base);
440
+ --vd-checkbox-check-color: var(--vd-color-white);
441
+ --vd-checkbox-bg-checked: var(--vd-color-primary);
442
+ --vd-checkbox-bg-indeterminate: var(--vd-color-primary);
443
+ --vd-checkbox-border-color: var(--vd-input-border-color);
444
+ --vd-checkbox-transition: var(--vd-transition-base);
439
445
  }
440
446
 
441
447
  /* Checkbox Wrapper */
@@ -447,9 +453,9 @@ label.label-lg {
447
453
  /* 13px - fib */
448
454
  position: relative;
449
455
  cursor: pointer;
450
- font-size: var(--input-font-size);
451
- line-height: var(--line-height-normal);
452
- color: var(--text-primary);
456
+ font-size: var(--vd-input-font-size);
457
+ line-height: var(--vd-line-height-normal);
458
+ color: var(--vd-text-primary);
453
459
  user-select: none;
454
460
  gap: 0.5rem;
455
461
  /* 8px - fib */
@@ -460,22 +466,22 @@ label.label-lg {
460
466
  .vd-form-check>input[type="checkbox"] {
461
467
  appearance: none;
462
468
  -webkit-appearance: none;
463
- width: var(--checkbox-size);
464
- height: var(--checkbox-size);
465
- border: var(--checkbox-border-width) solid var(--checkbox-border-color);
466
- border-radius: var(--checkbox-border-radius);
467
- background-color: var(--input-bg);
469
+ width: var(--vd-checkbox-size);
470
+ height: var(--vd-checkbox-size);
471
+ border: var(--vd-checkbox-border-width) solid var(--vd-checkbox-border-color);
472
+ border-radius: var(--vd-checkbox-border-radius);
473
+ background-color: var(--vd-input-bg);
468
474
  cursor: pointer;
469
475
  flex-shrink: 0;
470
476
  margin: 0;
471
477
  position: relative;
472
- transition: var(--checkbox-transition);
478
+ transition: var(--vd-checkbox-transition);
473
479
  }
474
480
 
475
481
  .checkbox>input[type="checkbox"]:checked,
476
482
  .vd-form-check>input[type="checkbox"]:checked {
477
- background-color: var(--checkbox-bg-checked);
478
- border-color: var(--checkbox-bg-checked);
483
+ background-color: var(--vd-checkbox-bg-checked);
484
+ border-color: var(--vd-checkbox-bg-checked);
479
485
  }
480
486
 
481
487
  .checkbox>input[type="checkbox"]:checked::after,
@@ -487,13 +493,13 @@ label.label-lg {
487
493
  transform: translate(-50%, -50%) rotate(45deg);
488
494
  width: 0.3rem;
489
495
  height: 0.6rem;
490
- border: solid var(--checkbox-check-color);
496
+ border: solid var(--vd-checkbox-check-color);
491
497
  border-width: 0 2px 2px 0;
492
498
  }
493
499
 
494
500
  .checkbox>input[type="checkbox"]:disabled,
495
501
  .vd-form-check>input[type="checkbox"]:disabled {
496
- background-color: var(--input-bg-disabled);
502
+ background-color: var(--vd-input-bg-disabled);
497
503
  cursor: not-allowed;
498
504
  opacity: 0.6;
499
505
  }
@@ -506,7 +512,7 @@ label.label-lg {
506
512
 
507
513
  .checkbox>input[type="checkbox"]:focus-visible,
508
514
  .vd-form-check>input[type="checkbox"]:focus-visible {
509
- outline: 2px solid var(--input-focus-border-color);
515
+ outline: 2px solid var(--vd-input-focus-border-color);
510
516
  outline-offset: 2px;
511
517
  }
512
518
 
@@ -534,13 +540,13 @@ label.label-lg {
534
540
  display: inline-flex;
535
541
  align-items: center;
536
542
  cursor: pointer;
537
- font-size: var(--input-font-size);
538
- line-height: var(--line-height-normal);
539
- color: var(--text-primary);
543
+ font-size: var(--vd-input-font-size);
544
+ line-height: var(--vd-line-height-normal);
545
+ color: var(--vd-text-primary);
540
546
  user-select: none;
541
- padding-left: calc(var(--checkbox-size) + 0.5rem);
547
+ padding-left: calc(var(--vd-checkbox-size) + 0.5rem);
542
548
  position: relative;
543
- min-height: var(--checkbox-size);
549
+ min-height: var(--vd-checkbox-size);
544
550
  }
545
551
 
546
552
  .checkbox-label::before,
@@ -550,20 +556,20 @@ label.label-lg {
550
556
  left: 0;
551
557
  top: 50%;
552
558
  transform: translateY(-50%);
553
- width: var(--checkbox-size);
554
- height: var(--checkbox-size);
555
- border: var(--checkbox-border-width) solid var(--checkbox-border-color);
556
- border-radius: var(--checkbox-border-radius);
557
- background-color: var(--input-bg);
558
- transition: var(--checkbox-transition);
559
+ width: var(--vd-checkbox-size);
560
+ height: var(--vd-checkbox-size);
561
+ border: var(--vd-checkbox-border-width) solid var(--vd-checkbox-border-color);
562
+ border-radius: var(--vd-checkbox-border-radius);
563
+ background-color: var(--vd-input-bg);
564
+ transition: var(--vd-checkbox-transition);
559
565
  flex-shrink: 0;
560
566
  }
561
567
 
562
568
  .checkbox-input:checked+.checkbox-label::before,
563
569
  .checkbox-input:checked~.checkbox-label::before,
564
570
  .vd-form-check-input:checked+.vd-form-check-label::before {
565
- background-color: var(--checkbox-bg-checked);
566
- border-color: var(--checkbox-bg-checked);
571
+ background-color: var(--vd-checkbox-bg-checked);
572
+ border-color: var(--vd-checkbox-bg-checked);
567
573
  }
568
574
 
569
575
  .checkbox-input:checked+.checkbox-label::after,
@@ -571,12 +577,12 @@ label.label-lg {
571
577
  .vd-form-check-input:checked+.vd-form-check-label::after {
572
578
  content: '';
573
579
  position: absolute;
574
- left: calc(var(--checkbox-size) / 2);
580
+ left: calc(var(--vd-checkbox-size) / 2);
575
581
  top: 50%;
576
582
  transform: translate(-50%, -60%) rotate(45deg);
577
583
  width: 0.375rem;
578
584
  height: 0.75rem;
579
- border: solid var(--checkbox-check-color);
585
+ border: solid var(--vd-checkbox-check-color);
580
586
  border-width: 0 2px 2px 0;
581
587
  opacity: 1;
582
588
  }
@@ -584,8 +590,8 @@ label.label-lg {
584
590
  .checkbox-input:indeterminate+.checkbox-label::before,
585
591
  .checkbox-input:indeterminate~.checkbox-label::before,
586
592
  .vd-form-check-input:indeterminate+.vd-form-check-label::before {
587
- background-color: var(--checkbox-bg-indeterminate);
588
- border-color: var(--checkbox-bg-indeterminate);
593
+ background-color: var(--vd-checkbox-bg-indeterminate);
594
+ border-color: var(--vd-checkbox-bg-indeterminate);
589
595
  }
590
596
 
591
597
  .checkbox-input:indeterminate+.checkbox-label::after,
@@ -593,12 +599,12 @@ label.label-lg {
593
599
  .vd-form-check-input:indeterminate+.vd-form-check-label::after {
594
600
  content: '';
595
601
  position: absolute;
596
- left: calc(var(--checkbox-size) / 2);
602
+ left: calc(var(--vd-checkbox-size) / 2);
597
603
  top: 50%;
598
604
  transform: translate(-50%, -50%);
599
605
  width: 0.5rem;
600
606
  height: 2px;
601
- background-color: var(--checkbox-check-color);
607
+ background-color: var(--vd-checkbox-check-color);
602
608
  border: none;
603
609
  opacity: 1;
604
610
  }
@@ -606,7 +612,7 @@ label.label-lg {
606
612
  .checkbox-input:focus-visible+.checkbox-label::before,
607
613
  .checkbox-input:focus-visible~.checkbox-label::before,
608
614
  .vd-form-check-input:focus-visible+.vd-form-check-label::before {
609
- outline: 2px solid var(--input-focus-border-color);
615
+ outline: 2px solid var(--vd-input-focus-border-color);
610
616
  outline-offset: 2px;
611
617
  }
612
618
 
@@ -620,8 +626,8 @@ label.label-lg {
620
626
  .checkbox-input:disabled+.checkbox-label::before,
621
627
  .checkbox-input:disabled~.checkbox-label::before,
622
628
  .vd-form-check-input:disabled+.vd-form-check-label::before {
623
- background-color: var(--input-bg-disabled);
624
- border-color: var(--checkbox-border-color);
629
+ background-color: var(--vd-input-bg-disabled);
630
+ border-color: var(--vd-checkbox-border-color);
625
631
  cursor: not-allowed;
626
632
  }
627
633
 
@@ -630,34 +636,34 @@ label.label-lg {
630
636
  .checkbox-sm .vd-form-check-label,
631
637
  .vd-form-check-sm .checkbox-label,
632
638
  .vd-form-check-sm .vd-form-check-label {
633
- font-size: var(--input-font-size-sm);
634
- padding-left: calc(var(--checkbox-size-sm) + 0.625rem);
635
- min-height: var(--checkbox-size-sm);
639
+ font-size: var(--vd-input-font-size-sm);
640
+ padding-left: calc(var(--vd-checkbox-size-sm) + 0.625rem);
641
+ min-height: var(--vd-checkbox-size-sm);
636
642
  }
637
643
 
638
644
  .checkbox-sm .checkbox-label::before,
639
645
  .checkbox-sm .vd-form-check-label::before,
640
646
  .vd-form-check-sm .checkbox-label::before,
641
647
  .vd-form-check-sm .vd-form-check-label::before {
642
- width: var(--checkbox-size-sm);
643
- height: var(--checkbox-size-sm);
648
+ width: var(--vd-checkbox-size-sm);
649
+ height: var(--vd-checkbox-size-sm);
644
650
  }
645
651
 
646
652
  .checkbox-lg .checkbox-label,
647
653
  .checkbox-lg .vd-form-check-label,
648
654
  .vd-form-check-lg .checkbox-label,
649
655
  .vd-form-check-lg .vd-form-check-label {
650
- font-size: var(--input-font-size-lg);
651
- padding-left: calc(var(--checkbox-size-lg) + 0.875rem);
652
- min-height: var(--checkbox-size-lg);
656
+ font-size: var(--vd-input-font-size-lg);
657
+ padding-left: calc(var(--vd-checkbox-size-lg) + 0.875rem);
658
+ min-height: var(--vd-checkbox-size-lg);
653
659
  }
654
660
 
655
661
  .checkbox-lg .checkbox-label::before,
656
662
  .checkbox-lg .vd-form-check-label::before,
657
663
  .vd-form-check-lg .checkbox-label::before,
658
664
  .vd-form-check-lg .vd-form-check-label::before {
659
- width: var(--checkbox-size-lg);
660
- height: var(--checkbox-size-lg);
665
+ width: var(--vd-checkbox-size-lg);
666
+ height: var(--vd-checkbox-size-lg);
661
667
  }
662
668
 
663
669
  /* Checkbox Groups */
@@ -675,24 +681,25 @@ label.label-lg {
675
681
  }
676
682
 
677
683
  /* Radio Button Variables */
684
+ /* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
678
685
  :root {
679
- --radio-size: 1.3125rem;
686
+ --vd-radio-size: 1.3125rem;
680
687
  /* 21px - fib */
681
- --radio-size-sm: 0.8125rem;
688
+ --vd-radio-size-sm: 0.8125rem;
682
689
  /* 13px - fib */
683
- --radio-size-lg: 2.125rem;
690
+ --vd-radio-size-lg: 2.125rem;
684
691
  /* 34px - fib */
685
- --radio-border-width: 2px;
692
+ --vd-radio-border-width: 2px;
686
693
  /* fib(2) */
687
- --radio-dot-size: 0.5rem;
694
+ --vd-radio-dot-size: 0.5rem;
688
695
  /* 8px - fib */
689
- --radio-dot-size-sm: 0.3125rem;
696
+ --vd-radio-dot-size-sm: 0.3125rem;
690
697
  /* 5px - fib */
691
- --radio-dot-size-lg: 0.8125rem;
698
+ --vd-radio-dot-size-lg: 0.8125rem;
692
699
  /* 13px - fib */
693
- --radio-bg-checked: var(--color-primary);
694
- --radio-border-color: var(--input-border-color);
695
- --radio-transition: var(--transition-base);
700
+ --vd-radio-bg-checked: var(--vd-color-primary);
701
+ --vd-radio-border-color: var(--vd-input-border-color);
702
+ --vd-radio-transition: var(--vd-transition-base);
696
703
  }
697
704
 
698
705
  /* Radio Wrapper */
@@ -703,9 +710,9 @@ label.label-lg {
703
710
  margin-bottom: 0.75rem;
704
711
  position: relative;
705
712
  cursor: pointer;
706
- font-size: var(--input-font-size);
707
- line-height: var(--line-height-normal);
708
- color: var(--text-primary);
713
+ font-size: var(--vd-input-font-size);
714
+ line-height: var(--vd-line-height-normal);
715
+ color: var(--vd-text-primary);
709
716
  user-select: none;
710
717
  gap: 0.5rem;
711
718
  }
@@ -715,21 +722,21 @@ label.label-lg {
715
722
  .vd-form-radio>input[type="radio"] {
716
723
  appearance: none;
717
724
  -webkit-appearance: none;
718
- width: var(--radio-size);
719
- height: var(--radio-size);
720
- border: var(--radio-border-width) solid var(--radio-border-color);
725
+ width: var(--vd-radio-size);
726
+ height: var(--vd-radio-size);
727
+ border: var(--vd-radio-border-width) solid var(--vd-radio-border-color);
721
728
  border-radius: 50%;
722
- background-color: var(--input-bg);
729
+ background-color: var(--vd-input-bg);
723
730
  cursor: pointer;
724
731
  flex-shrink: 0;
725
732
  margin: 0;
726
733
  position: relative;
727
- transition: var(--radio-transition);
734
+ transition: var(--vd-radio-transition);
728
735
  }
729
736
 
730
737
  .radio>input[type="radio"]:checked,
731
738
  .vd-form-radio>input[type="radio"]:checked {
732
- border-color: var(--radio-bg-checked);
739
+ border-color: var(--vd-radio-bg-checked);
733
740
  }
734
741
 
735
742
  .radio>input[type="radio"]:checked::after,
@@ -739,15 +746,15 @@ label.label-lg {
739
746
  left: 50%;
740
747
  top: 50%;
741
748
  transform: translate(-50%, -50%);
742
- width: var(--radio-dot-size);
743
- height: var(--radio-dot-size);
749
+ width: var(--vd-radio-dot-size);
750
+ height: var(--vd-radio-dot-size);
744
751
  border-radius: 50%;
745
- background-color: var(--radio-bg-checked);
752
+ background-color: var(--vd-radio-bg-checked);
746
753
  }
747
754
 
748
755
  .radio>input[type="radio"]:disabled,
749
756
  .vd-form-radio>input[type="radio"]:disabled {
750
- background-color: var(--input-bg-disabled);
757
+ background-color: var(--vd-input-bg-disabled);
751
758
  cursor: not-allowed;
752
759
  opacity: 0.6;
753
760
  }
@@ -760,7 +767,7 @@ label.label-lg {
760
767
 
761
768
  .radio>input[type="radio"]:focus-visible,
762
769
  .vd-form-radio>input[type="radio"]:focus-visible {
763
- outline: 2px solid var(--input-focus-border-color);
770
+ outline: 2px solid var(--vd-input-focus-border-color);
764
771
  outline-offset: 2px;
765
772
  }
766
773
 
@@ -788,13 +795,13 @@ label.label-lg {
788
795
  display: inline-flex;
789
796
  align-items: center;
790
797
  cursor: pointer;
791
- font-size: var(--input-font-size);
792
- line-height: var(--line-height-normal);
793
- color: var(--text-primary);
798
+ font-size: var(--vd-input-font-size);
799
+ line-height: var(--vd-line-height-normal);
800
+ color: var(--vd-text-primary);
794
801
  user-select: none;
795
- padding-left: calc(var(--radio-size) + 0.5rem);
802
+ padding-left: calc(var(--vd-radio-size) + 0.5rem);
796
803
  position: relative;
797
- min-height: var(--radio-size);
804
+ min-height: var(--vd-radio-size);
798
805
  }
799
806
 
800
807
  .radio-label::before,
@@ -804,19 +811,19 @@ label.label-lg {
804
811
  left: 0;
805
812
  top: 50%;
806
813
  transform: translateY(-50%);
807
- width: var(--radio-size);
808
- height: var(--radio-size);
809
- border: var(--radio-border-width) solid var(--radio-border-color);
814
+ width: var(--vd-radio-size);
815
+ height: var(--vd-radio-size);
816
+ border: var(--vd-radio-border-width) solid var(--vd-radio-border-color);
810
817
  border-radius: 50%;
811
- background-color: var(--input-bg);
812
- transition: var(--radio-transition);
818
+ background-color: var(--vd-input-bg);
819
+ transition: var(--vd-radio-transition);
813
820
  flex-shrink: 0;
814
821
  }
815
822
 
816
823
  .radio-input:checked+.radio-label::before,
817
824
  .radio-input:checked~.radio-label::before,
818
825
  .vd-form-radio-input:checked+.vd-form-radio-label::before {
819
- border-color: var(--radio-bg-checked);
826
+ border-color: var(--vd-radio-bg-checked);
820
827
  }
821
828
 
822
829
  .radio-input:checked+.radio-label::after,
@@ -824,20 +831,20 @@ label.label-lg {
824
831
  .vd-form-radio-input:checked+.vd-form-radio-label::after {
825
832
  content: '';
826
833
  position: absolute;
827
- left: calc(var(--radio-size) / 2);
834
+ left: calc(var(--vd-radio-size) / 2);
828
835
  top: 50%;
829
836
  transform: translate(-50%, -50%);
830
- width: var(--radio-dot-size);
831
- height: var(--radio-dot-size);
837
+ width: var(--vd-radio-dot-size);
838
+ height: var(--vd-radio-dot-size);
832
839
  border-radius: 50%;
833
- background-color: var(--radio-bg-checked);
840
+ background-color: var(--vd-radio-bg-checked);
834
841
  opacity: 1;
835
842
  }
836
843
 
837
844
  .radio-input:focus-visible+.radio-label::before,
838
845
  .radio-input:focus-visible~.radio-label::before,
839
846
  .vd-form-radio-input:focus-visible+.vd-form-radio-label::before {
840
- outline: 2px solid var(--input-focus-border-color);
847
+ outline: 2px solid var(--vd-input-focus-border-color);
841
848
  outline-offset: 2px;
842
849
  }
843
850
 
@@ -851,8 +858,8 @@ label.label-lg {
851
858
  .radio-input:disabled+.radio-label::before,
852
859
  .radio-input:disabled~.radio-label::before,
853
860
  .vd-form-radio-input:disabled+.vd-form-radio-label::before {
854
- background-color: var(--input-bg-disabled);
855
- border-color: var(--radio-border-color);
861
+ background-color: var(--vd-input-bg-disabled);
862
+ border-color: var(--vd-radio-border-color);
856
863
  cursor: not-allowed;
857
864
  }
858
865
 
@@ -861,50 +868,50 @@ label.label-lg {
861
868
  .radio-sm .vd-form-radio-label,
862
869
  .vd-form-radio-sm .radio-label,
863
870
  .vd-form-radio-sm .vd-form-radio-label {
864
- font-size: var(--input-font-size-sm);
865
- padding-left: calc(var(--radio-size-sm) + 0.625rem);
866
- min-height: var(--radio-size-sm);
871
+ font-size: var(--vd-input-font-size-sm);
872
+ padding-left: calc(var(--vd-radio-size-sm) + 0.625rem);
873
+ min-height: var(--vd-radio-size-sm);
867
874
  }
868
875
 
869
876
  .radio-sm .radio-label::before,
870
877
  .radio-sm .vd-form-radio-label::before,
871
878
  .vd-form-radio-sm .radio-label::before,
872
879
  .vd-form-radio-sm .vd-form-radio-label::before {
873
- width: var(--radio-size-sm);
874
- height: var(--radio-size-sm);
880
+ width: var(--vd-radio-size-sm);
881
+ height: var(--vd-radio-size-sm);
875
882
  }
876
883
 
877
884
  .radio-sm .radio-label::after,
878
885
  .radio-sm .vd-form-radio-label::after,
879
886
  .vd-form-radio-sm .radio-label::after,
880
887
  .vd-form-radio-sm .vd-form-radio-label::after {
881
- width: var(--radio-dot-size-sm);
882
- height: var(--radio-dot-size-sm);
888
+ width: var(--vd-radio-dot-size-sm);
889
+ height: var(--vd-radio-dot-size-sm);
883
890
  }
884
891
 
885
892
  .radio-lg .radio-label,
886
893
  .radio-lg .vd-form-radio-label,
887
894
  .vd-form-radio-lg .radio-label,
888
895
  .vd-form-radio-lg .vd-form-radio-label {
889
- font-size: var(--input-font-size-lg);
890
- padding-left: calc(var(--radio-size-lg) + 0.875rem);
891
- min-height: var(--radio-size-lg);
896
+ font-size: var(--vd-input-font-size-lg);
897
+ padding-left: calc(var(--vd-radio-size-lg) + 0.875rem);
898
+ min-height: var(--vd-radio-size-lg);
892
899
  }
893
900
 
894
901
  .radio-lg .radio-label::before,
895
902
  .radio-lg .vd-form-radio-label::before,
896
903
  .vd-form-radio-lg .radio-label::before,
897
904
  .vd-form-radio-lg .vd-form-radio-label::before {
898
- width: var(--radio-size-lg);
899
- height: var(--radio-size-lg);
905
+ width: var(--vd-radio-size-lg);
906
+ height: var(--vd-radio-size-lg);
900
907
  }
901
908
 
902
909
  .radio-lg .radio-label::after,
903
910
  .radio-lg .vd-form-radio-label::after,
904
911
  .vd-form-radio-lg .radio-label::after,
905
912
  .vd-form-radio-lg .vd-form-radio-label::after {
906
- width: var(--radio-dot-size-lg);
907
- height: var(--radio-dot-size-lg);
913
+ width: var(--vd-radio-dot-size-lg);
914
+ height: var(--vd-radio-dot-size-lg);
908
915
  }
909
916
 
910
917
  /* Radio Groups */
@@ -922,29 +929,31 @@ label.label-lg {
922
929
  }
923
930
 
924
931
  /* Range Variables */
932
+ /* stylelint-disable-next-line no-duplicate-selectors -- range tokens stay grouped with range control styles. */
925
933
  :root {
926
- --range-track-height: 0.5rem;
927
- --range-track-height-sm: 0.375rem;
928
- --range-track-height-lg: 0.625rem;
929
- --range-thumb-size: 1.25rem;
930
- --range-thumb-size-sm: 1rem;
931
- --range-thumb-size-lg: 1.5rem;
932
- --range-track-bg: var(--color-gray-300);
933
- --range-track-border: none;
934
- --range-track-fill: var(--color-primary);
935
- --range-thumb-bg: var(--color-primary);
936
- --range-thumb-border: 2px solid var(--color-white);
937
- --range-thumb-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
934
+ --vd-range-track-height: 0.5rem;
935
+ --vd-range-track-height-sm: 0.375rem;
936
+ --vd-range-track-height-lg: 0.625rem;
937
+ --vd-range-thumb-size: 1.25rem;
938
+ --vd-range-thumb-size-sm: 1rem;
939
+ --vd-range-thumb-size-lg: 1.5rem;
940
+ --vd-range-track-bg: var(--vd-color-gray-300);
941
+ --vd-range-track-border: none;
942
+ --vd-range-track-fill: var(--vd-color-primary);
943
+ --vd-range-thumb-bg: var(--vd-color-primary);
944
+ --vd-range-thumb-border: 2px solid var(--vd-color-white);
945
+ --vd-range-thumb-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
938
946
  }
939
947
 
940
948
  /* Dark Theme Range Overrides - more visible track */
949
+ /* stylelint-disable-next-line no-duplicate-selectors -- dark-mode token overrides stay adjacent to range styles. */
941
950
  [data-theme="dark"] {
942
- --range-track-bg: var(--color-gray-400);
951
+ --vd-range-track-bg: var(--vd-color-gray-400);
943
952
  }
944
953
 
945
954
  @media (prefers-color-scheme: dark) {
946
955
  :root:not([data-theme]) {
947
- --range-track-bg: var(--color-gray-400);
956
+ --vd-range-track-bg: var(--vd-color-gray-400);
948
957
  }
949
958
  }
950
959
 
@@ -960,7 +969,7 @@ label.label-lg {
960
969
  input[type="range"].range-input,
961
970
  input[type="range"] {
962
971
  width: 100%;
963
- height: var(--range-track-height);
972
+ height: var(--vd-range-track-height);
964
973
  -webkit-appearance: none;
965
974
  appearance: none;
966
975
  background: transparent;
@@ -977,29 +986,29 @@ input[type="range"]:focus {
977
986
 
978
987
  input[type="range"].range-input:focus::-webkit-slider-thumb,
979
988
  input[type="range"]:focus::-webkit-slider-thumb {
980
- box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--color-primary-alpha-10);
989
+ box-shadow: var(--vd-range-thumb-shadow), 0 0 0 3px var(--vd-color-primary-alpha-10);
981
990
  }
982
991
 
983
992
  input[type="range"].range-input:focus::-moz-range-thumb,
984
993
  input[type="range"]:focus::-moz-range-thumb {
985
- box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--color-primary-alpha-10);
994
+ box-shadow: var(--vd-range-thumb-shadow), 0 0 0 3px var(--vd-color-primary-alpha-10);
986
995
  }
987
996
 
988
997
  /* Range Track (Webkit - Chrome, Safari, Edge) */
989
998
  input[type="range"]::-webkit-slider-runnable-track {
990
999
  width: 100%;
991
- height: var(--range-track-height);
992
- background: var(--range-track-bg);
993
- border: var(--range-track-border);
1000
+ height: var(--vd-range-track-height);
1001
+ background: var(--vd-range-track-bg);
1002
+ border: var(--vd-range-track-border);
994
1003
  border-radius: 0.5rem;
995
1004
  cursor: pointer;
996
1005
  }
997
1006
 
998
1007
  input[type="range"].range-input::-webkit-slider-runnable-track {
999
1008
  width: 100%;
1000
- height: var(--range-track-height);
1001
- background: var(--range-track-bg);
1002
- border: var(--range-track-border);
1009
+ height: var(--vd-range-track-height);
1010
+ background: var(--vd-range-track-bg);
1011
+ border: var(--vd-range-track-border);
1003
1012
  border-radius: 0.5rem;
1004
1013
  cursor: pointer;
1005
1014
  }
@@ -1008,18 +1017,18 @@ input[type="range"].range-input::-webkit-slider-runnable-track {
1008
1017
  input[type="range"].range-input::-moz-range-track,
1009
1018
  input[type="range"]::-moz-range-track {
1010
1019
  width: 100%;
1011
- height: var(--range-track-height);
1012
- background: var(--range-track-bg);
1013
- border: var(--range-track-border);
1020
+ height: var(--vd-range-track-height);
1021
+ background: var(--vd-range-track-bg);
1022
+ border: var(--vd-range-track-border);
1014
1023
  border-radius: 0.5rem;
1015
1024
  cursor: pointer;
1016
1025
  }
1017
1026
 
1018
- /* Range Progress/Fill (Firefox) - uses --range-track-fill */
1027
+ /* Range Progress/Fill (Firefox) - uses --vd-range-track-fill */
1019
1028
  input[type="range"].range-input::-moz-range-progress,
1020
1029
  input[type="range"]::-moz-range-progress {
1021
- height: var(--range-track-height);
1022
- background: var(--range-track-fill);
1030
+ height: var(--vd-range-track-height);
1031
+ background: var(--vd-range-track-fill);
1023
1032
  border-radius: 0.5rem 0 0 0.5rem;
1024
1033
  }
1025
1034
 
@@ -1028,15 +1037,15 @@ input[type="range"].range-input::-webkit-slider-thumb,
1028
1037
  input[type="range"]::-webkit-slider-thumb {
1029
1038
  -webkit-appearance: none;
1030
1039
  appearance: none;
1031
- width: var(--range-thumb-size);
1032
- height: var(--range-thumb-size);
1033
- background: var(--range-thumb-bg);
1034
- border: var(--range-thumb-border);
1040
+ width: var(--vd-range-thumb-size);
1041
+ height: var(--vd-range-thumb-size);
1042
+ background: var(--vd-range-thumb-bg);
1043
+ border: var(--vd-range-thumb-border);
1035
1044
  border-radius: 50%;
1036
1045
  cursor: pointer;
1037
- box-shadow: var(--range-thumb-shadow);
1038
- transition: var(--transition-base);
1039
- margin-top: calc((var(--range-track-height) - var(--range-thumb-size)) / 2);
1046
+ box-shadow: var(--vd-range-thumb-shadow);
1047
+ transition: var(--vd-transition-base);
1048
+ margin-top: calc((var(--vd-range-track-height) - var(--vd-range-thumb-size)) / 2);
1040
1049
  }
1041
1050
 
1042
1051
  input[type="range"].range-input::-webkit-slider-thumb:hover,
@@ -1047,14 +1056,14 @@ input[type="range"]::-webkit-slider-thumb:hover {
1047
1056
  /* Range Thumb (Firefox) */
1048
1057
  input[type="range"].range-input::-moz-range-thumb,
1049
1058
  input[type="range"]::-moz-range-thumb {
1050
- width: var(--range-thumb-size);
1051
- height: var(--range-thumb-size);
1052
- background: var(--range-thumb-bg);
1053
- border: var(--range-thumb-border);
1059
+ width: var(--vd-range-thumb-size);
1060
+ height: var(--vd-range-thumb-size);
1061
+ background: var(--vd-range-thumb-bg);
1062
+ border: var(--vd-range-thumb-border);
1054
1063
  border-radius: 50%;
1055
1064
  cursor: pointer;
1056
- box-shadow: var(--range-thumb-shadow);
1057
- transition: var(--transition-base);
1065
+ box-shadow: var(--vd-range-thumb-shadow);
1066
+ transition: var(--vd-transition-base);
1058
1067
  }
1059
1068
 
1060
1069
  input[type="range"].range-input::-moz-range-thumb:hover,
@@ -1081,58 +1090,58 @@ input[type="range"]:disabled::-moz-range-thumb {
1081
1090
  /* Range Sizes */
1082
1091
  .range-sm input[type="range"],
1083
1092
  input[type="range"].range-sm {
1084
- height: var(--range-track-height-sm);
1093
+ height: var(--vd-range-track-height-sm);
1085
1094
  }
1086
1095
 
1087
1096
  .range-sm input[type="range"]::-webkit-slider-track,
1088
1097
  input[type="range"].range-sm::-webkit-slider-track {
1089
- height: var(--range-track-height-sm);
1098
+ height: var(--vd-range-track-height-sm);
1090
1099
  }
1091
1100
 
1092
1101
  .range-sm input[type="range"]::-moz-range-track,
1093
1102
  input[type="range"].range-sm::-moz-range-track {
1094
- height: var(--range-track-height-sm);
1103
+ height: var(--vd-range-track-height-sm);
1095
1104
  }
1096
1105
 
1097
1106
  .range-sm input[type="range"]::-webkit-slider-thumb,
1098
1107
  input[type="range"].range-sm::-webkit-slider-thumb {
1099
- width: var(--range-thumb-size-sm);
1100
- height: var(--range-thumb-size-sm);
1101
- margin-top: calc((var(--range-track-height-sm) - var(--range-thumb-size-sm)) / 2);
1108
+ width: var(--vd-range-thumb-size-sm);
1109
+ height: var(--vd-range-thumb-size-sm);
1110
+ margin-top: calc((var(--vd-range-track-height-sm) - var(--vd-range-thumb-size-sm)) / 2);
1102
1111
  }
1103
1112
 
1104
1113
  .range-sm input[type="range"]::-moz-range-thumb,
1105
1114
  input[type="range"].range-sm::-moz-range-thumb {
1106
- width: var(--range-thumb-size-sm);
1107
- height: var(--range-thumb-size-sm);
1115
+ width: var(--vd-range-thumb-size-sm);
1116
+ height: var(--vd-range-thumb-size-sm);
1108
1117
  }
1109
1118
 
1110
1119
  .range-lg input[type="range"],
1111
1120
  input[type="range"].range-lg {
1112
- height: var(--range-track-height-lg);
1121
+ height: var(--vd-range-track-height-lg);
1113
1122
  }
1114
1123
 
1115
1124
  .range-lg input[type="range"]::-webkit-slider-track,
1116
1125
  input[type="range"].range-lg::-webkit-slider-track {
1117
- height: var(--range-track-height-lg);
1126
+ height: var(--vd-range-track-height-lg);
1118
1127
  }
1119
1128
 
1120
1129
  .range-lg input[type="range"]::-moz-range-track,
1121
1130
  input[type="range"].range-lg::-moz-range-track {
1122
- height: var(--range-track-height-lg);
1131
+ height: var(--vd-range-track-height-lg);
1123
1132
  }
1124
1133
 
1125
1134
  .range-lg input[type="range"]::-webkit-slider-thumb,
1126
1135
  input[type="range"].range-lg::-webkit-slider-thumb {
1127
- width: var(--range-thumb-size-lg);
1128
- height: var(--range-thumb-size-lg);
1129
- margin-top: calc((var(--range-track-height-lg) - var(--range-thumb-size-lg)) / 2);
1136
+ width: var(--vd-range-thumb-size-lg);
1137
+ height: var(--vd-range-thumb-size-lg);
1138
+ margin-top: calc((var(--vd-range-track-height-lg) - var(--vd-range-thumb-size-lg)) / 2);
1130
1139
  }
1131
1140
 
1132
1141
  .range-lg input[type="range"]::-moz-range-thumb,
1133
1142
  input[type="range"].range-lg::-moz-range-thumb {
1134
- width: var(--range-thumb-size-lg);
1135
- height: var(--range-thumb-size-lg);
1143
+ width: var(--vd-range-thumb-size-lg);
1144
+ height: var(--vd-range-thumb-size-lg);
1136
1145
  }
1137
1146
 
1138
1147
  /* Range Value Display */
@@ -1140,11 +1149,11 @@ input[type="range"].range-lg::-moz-range-thumb {
1140
1149
  display: inline-block;
1141
1150
  margin-left: 0.5rem;
1142
1151
  padding: 0.25rem 0.5rem;
1143
- background-color: var(--bg-secondary);
1144
- border-radius: var(--btn-border-radius-sm);
1145
- font-size: var(--font-size-sm);
1146
- font-weight: var(--font-weight-medium);
1147
- color: var(--text-primary);
1152
+ background-color: var(--vd-bg-secondary);
1153
+ border-radius: var(--vd-btn-border-radius-sm);
1154
+ font-size: var(--vd-font-size-sm);
1155
+ font-weight: var(--vd-font-weight-medium);
1156
+ color: var(--vd-text-primary);
1148
1157
  min-width: 3rem;
1149
1158
  text-align: center;
1150
1159
  }
@@ -1153,59 +1162,61 @@ input[type="range"].range-lg::-moz-range-thumb {
1153
1162
  display: flex;
1154
1163
  align-items: center;
1155
1164
  margin-bottom: 0.5rem;
1156
- font-size: var(--font-size-sm);
1157
- font-weight: var(--font-weight-medium);
1158
- color: var(--text-primary);
1165
+ font-size: var(--vd-font-size-sm);
1166
+ font-weight: var(--vd-font-weight-medium);
1167
+ color: var(--vd-text-primary);
1159
1168
  }
1160
1169
 
1161
1170
  .range-min-max {
1162
1171
  display: flex;
1163
1172
  justify-content: space-between;
1164
1173
  margin-top: 0.25rem;
1165
- font-size: var(--font-size-xs);
1166
- color: var(--text-muted);
1174
+ font-size: var(--vd-font-size-xs);
1175
+ color: var(--vd-text-muted);
1167
1176
  }
1168
1177
 
1169
1178
  /* Switch Variables */
1179
+ /* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
1170
1180
  :root {
1171
1181
  /* Switch: golden rectangle (55x34 outer, 21px thumb) */
1172
- --switch-width: 3.4375rem;
1182
+ --vd-switch-width: 3.4375rem;
1173
1183
  /* 55px - fib */
1174
- --switch-width-sm: 2.125rem;
1184
+ --vd-switch-width-sm: 2.125rem;
1175
1185
  /* 34px - fib */
1176
- --switch-width-lg: 5.5625rem;
1186
+ --vd-switch-width-lg: 5.5625rem;
1177
1187
  /* 89px - fib */
1178
- --switch-height: 2.125rem;
1188
+ --vd-switch-height: 2.125rem;
1179
1189
  /* 34px - fib (55/34 ~ phi) */
1180
- --switch-height-sm: 1.3125rem;
1190
+ --vd-switch-height-sm: 1.3125rem;
1181
1191
  /* 21px - fib (34/21 ~ phi) */
1182
- --switch-height-lg: 3.4375rem;
1192
+ --vd-switch-height-lg: 3.4375rem;
1183
1193
  /* 55px - fib (89/55 ~ phi) */
1184
- --switch-thumb-size: 1.3125rem;
1194
+ --vd-switch-thumb-size: 1.3125rem;
1185
1195
  /* 21px - fib */
1186
- --switch-thumb-size-sm: 0.8125rem;
1196
+ --vd-switch-thumb-size-sm: 0.8125rem;
1187
1197
  /* 13px - fib */
1188
- --switch-thumb-size-lg: 2.125rem;
1198
+ --vd-switch-thumb-size-lg: 2.125rem;
1189
1199
  /* 34px - fib */
1190
- --switch-thumb-offset: 0.1875rem;
1200
+ --vd-switch-thumb-offset: 0.1875rem;
1191
1201
  /* 3px - fib */
1192
- --switch-bg-off: var(--color-gray-300);
1193
- --switch-bg-on: var(--color-primary);
1194
- --switch-bg-on-success: var(--color-success);
1195
- --switch-bg-on-warning: var(--color-warning);
1196
- --switch-bg-on-error: var(--color-error);
1197
- --switch-thumb-bg: var(--color-white);
1198
- --switch-transition: var(--transition-base);
1202
+ --vd-switch-bg-off: var(--vd-color-gray-300);
1203
+ --vd-switch-bg-on: var(--vd-color-primary);
1204
+ --vd-switch-bg-on-success: var(--vd-color-success);
1205
+ --vd-switch-bg-on-warning: var(--vd-color-warning);
1206
+ --vd-switch-bg-on-error: var(--vd-color-error);
1207
+ --vd-switch-thumb-bg: var(--vd-color-white);
1208
+ --vd-switch-transition: var(--vd-transition-base);
1199
1209
  }
1200
1210
 
1201
1211
  /* Dark Theme Switch Overrides */
1212
+ /* stylelint-disable-next-line no-duplicate-selectors -- dark-mode token overrides stay adjacent to switch styles. */
1202
1213
  [data-theme="dark"] {
1203
- --switch-bg-off: var(--color-gray-600);
1214
+ --vd-switch-bg-off: var(--vd-color-gray-600);
1204
1215
  }
1205
1216
 
1206
1217
  @media (prefers-color-scheme: dark) {
1207
1218
  :root:not([data-theme]) {
1208
- --switch-bg-off: var(--color-gray-600);
1219
+ --vd-switch-bg-off: var(--vd-color-gray-600);
1209
1220
  }
1210
1221
  }
1211
1222
 
@@ -1217,9 +1228,9 @@ input[type="range"].range-lg::-moz-range-thumb {
1217
1228
  margin-bottom: 0.75rem;
1218
1229
  position: relative;
1219
1230
  cursor: pointer;
1220
- font-size: var(--input-font-size);
1221
- line-height: var(--line-height-normal);
1222
- color: var(--text-primary);
1231
+ font-size: var(--vd-input-font-size);
1232
+ line-height: var(--vd-line-height-normal);
1233
+ color: var(--vd-text-primary);
1223
1234
  user-select: none;
1224
1235
  gap: 0.75rem;
1225
1236
  }
@@ -1234,38 +1245,38 @@ input[type="range"].range-lg::-moz-range-thumb {
1234
1245
 
1235
1246
  .switch-slider {
1236
1247
  position: relative;
1237
- width: var(--switch-width);
1238
- height: var(--switch-height);
1239
- background-color: var(--switch-bg-off);
1240
- border-radius: calc(var(--switch-height) / 2);
1241
- transition: var(--switch-transition);
1248
+ width: var(--vd-switch-width);
1249
+ height: var(--vd-switch-height);
1250
+ background-color: var(--vd-switch-bg-off);
1251
+ border-radius: calc(var(--vd-switch-height) / 2);
1252
+ transition: var(--vd-switch-transition);
1242
1253
  flex-shrink: 0;
1243
1254
  }
1244
1255
 
1245
1256
  .switch-slider::after {
1246
1257
  content: '';
1247
1258
  position: absolute;
1248
- left: var(--switch-thumb-offset);
1259
+ left: var(--vd-switch-thumb-offset);
1249
1260
  top: 50%;
1250
1261
  transform: translateY(-50%);
1251
- width: var(--switch-thumb-size);
1252
- height: var(--switch-thumb-size);
1253
- background-color: var(--switch-thumb-bg);
1262
+ width: var(--vd-switch-thumb-size);
1263
+ height: var(--vd-switch-thumb-size);
1264
+ background-color: var(--vd-switch-thumb-bg);
1254
1265
  border-radius: 50%;
1255
- box-shadow: var(--shadow-sm);
1256
- transition: var(--switch-transition);
1266
+ box-shadow: var(--vd-shadow-sm);
1267
+ transition: var(--vd-switch-transition);
1257
1268
  }
1258
1269
 
1259
1270
  .switch>input[type="checkbox"]:checked+.switch-slider {
1260
- background-color: var(--switch-bg-on);
1271
+ background-color: var(--vd-switch-bg-on);
1261
1272
  }
1262
1273
 
1263
1274
  .switch>input[type="checkbox"]:checked+.switch-slider::after {
1264
- left: calc(var(--switch-width) - var(--switch-thumb-size) - var(--switch-thumb-offset));
1275
+ left: calc(var(--vd-switch-width) - var(--vd-switch-thumb-size) - var(--vd-switch-thumb-offset));
1265
1276
  }
1266
1277
 
1267
1278
  .switch>input[type="checkbox"]:focus-visible+.switch-slider {
1268
- outline: 2px solid var(--input-focus-border-color);
1279
+ outline: 2px solid var(--vd-input-focus-border-color);
1269
1280
  outline-offset: 2px;
1270
1281
  }
1271
1282
 
@@ -1304,9 +1315,9 @@ input[type="range"].range-lg::-moz-range-thumb {
1304
1315
  display: flex;
1305
1316
  align-items: center;
1306
1317
  cursor: pointer;
1307
- font-size: var(--input-font-size);
1308
- line-height: var(--line-height-normal);
1309
- color: var(--text-primary);
1318
+ font-size: var(--vd-input-font-size);
1319
+ line-height: var(--vd-line-height-normal);
1320
+ color: var(--vd-text-primary);
1310
1321
  user-select: none;
1311
1322
  position: relative;
1312
1323
  }
@@ -1316,11 +1327,11 @@ input[type="range"].range-lg::-moz-range-thumb {
1316
1327
  .vd-form-switch-label::before {
1317
1328
  content: '';
1318
1329
  position: relative;
1319
- width: var(--switch-width);
1320
- height: var(--switch-height);
1321
- background-color: var(--switch-bg-off);
1322
- border-radius: calc(var(--switch-height) / 2);
1323
- transition: var(--switch-transition);
1330
+ width: var(--vd-switch-width);
1331
+ height: var(--vd-switch-height);
1332
+ background-color: var(--vd-switch-bg-off);
1333
+ border-radius: calc(var(--vd-switch-height) / 2);
1334
+ transition: var(--vd-switch-transition);
1324
1335
  flex-shrink: 0;
1325
1336
  margin-right: 0.75rem;
1326
1337
  }
@@ -1330,34 +1341,34 @@ input[type="range"].range-lg::-moz-range-thumb {
1330
1341
  .vd-form-switch-label::after {
1331
1342
  content: '';
1332
1343
  position: absolute;
1333
- left: var(--switch-thumb-offset);
1344
+ left: var(--vd-switch-thumb-offset);
1334
1345
  top: 50%;
1335
1346
  transform: translateY(-50%);
1336
- width: var(--switch-thumb-size);
1337
- height: var(--switch-thumb-size);
1338
- background-color: var(--switch-thumb-bg);
1347
+ width: var(--vd-switch-thumb-size);
1348
+ height: var(--vd-switch-thumb-size);
1349
+ background-color: var(--vd-switch-thumb-bg);
1339
1350
  border-radius: 50%;
1340
- box-shadow: var(--shadow-sm);
1341
- transition: var(--switch-transition);
1351
+ box-shadow: var(--vd-shadow-sm);
1352
+ transition: var(--vd-switch-transition);
1342
1353
  pointer-events: none;
1343
1354
  }
1344
1355
 
1345
1356
  .switch-input:checked+.switch-label::before,
1346
1357
  .switch-input:checked~.switch-label::before,
1347
1358
  .vd-form-switch-input:checked+.vd-form-switch-label::before {
1348
- background-color: var(--switch-bg-on);
1359
+ background-color: var(--vd-switch-bg-on);
1349
1360
  }
1350
1361
 
1351
1362
  .switch-input:checked+.switch-label::after,
1352
1363
  .switch-input:checked~.switch-label::after,
1353
1364
  .vd-form-switch-input:checked+.vd-form-switch-label::after {
1354
- left: calc(var(--switch-width) - var(--switch-thumb-size) - var(--switch-thumb-offset));
1365
+ left: calc(var(--vd-switch-width) - var(--vd-switch-thumb-size) - var(--vd-switch-thumb-offset));
1355
1366
  }
1356
1367
 
1357
1368
  .switch-input:focus-visible+.switch-label::before,
1358
1369
  .switch-input:focus-visible~.switch-label::before,
1359
1370
  .vd-form-switch-input:focus-visible+.vd-form-switch-label::before {
1360
- outline: 2px solid var(--input-focus-border-color);
1371
+ outline: 2px solid var(--vd-input-focus-border-color);
1361
1372
  outline-offset: 2px;
1362
1373
  }
1363
1374
 
@@ -1371,7 +1382,7 @@ input[type="range"].range-lg::-moz-range-thumb {
1371
1382
  .switch-input:disabled+.switch-label::before,
1372
1383
  .switch-input:disabled~.switch-label::before,
1373
1384
  .vd-form-switch-input:disabled+.vd-form-switch-label::before {
1374
- background-color: var(--input-bg-disabled);
1385
+ background-color: var(--vd-input-bg-disabled);
1375
1386
  cursor: not-allowed;
1376
1387
  }
1377
1388
 
@@ -1390,13 +1401,13 @@ input[type="range"].range-lg::-moz-range-thumb {
1390
1401
  .switch-label-right .switch-label::after,
1391
1402
  .switch-label-right .vd-form-switch-label::after {
1392
1403
  left: auto;
1393
- right: var(--switch-thumb-offset);
1404
+ right: var(--vd-switch-thumb-offset);
1394
1405
  }
1395
1406
 
1396
1407
  .switch-label-right .switch-input:checked+.switch-label::after,
1397
1408
  .switch-label-right .switch-input:checked~.switch-label::after,
1398
1409
  .switch-label-right .vd-form-switch-input:checked+.vd-form-switch-label::after {
1399
- right: calc(var(--switch-width) - var(--switch-thumb-size) - var(--switch-thumb-offset));
1410
+ right: calc(var(--vd-switch-width) - var(--vd-switch-thumb-size) - var(--vd-switch-thumb-offset));
1400
1411
  left: auto;
1401
1412
  }
1402
1413
 
@@ -1405,84 +1416,85 @@ input[type="range"].range-lg::-moz-range-thumb {
1405
1416
  .switch-sm .vd-form-switch-label,
1406
1417
  .vd-form-switch-sm .switch-label,
1407
1418
  .vd-form-switch-sm .vd-form-switch-label {
1408
- font-size: var(--input-font-size-sm);
1419
+ font-size: var(--vd-input-font-size-sm);
1409
1420
  }
1410
1421
 
1411
1422
  .switch-sm .switch-label::before,
1412
1423
  .switch-sm .vd-form-switch-label::before,
1413
1424
  .vd-form-switch-sm .switch-label::before,
1414
1425
  .vd-form-switch-sm .vd-form-switch-label::before {
1415
- width: var(--switch-width-sm);
1416
- height: var(--switch-height-sm);
1426
+ width: var(--vd-switch-width-sm);
1427
+ height: var(--vd-switch-height-sm);
1417
1428
  }
1418
1429
 
1419
1430
  .switch-sm .switch-label::after,
1420
1431
  .switch-sm .vd-form-switch-label::after,
1421
1432
  .vd-form-switch-sm .switch-label::after,
1422
1433
  .vd-form-switch-sm .vd-form-switch-label::after {
1423
- width: var(--switch-thumb-size-sm);
1424
- height: var(--switch-thumb-size-sm);
1434
+ width: var(--vd-switch-thumb-size-sm);
1435
+ height: var(--vd-switch-thumb-size-sm);
1425
1436
  }
1426
1437
 
1427
1438
  .switch-sm .switch-input:checked+.switch-label::after,
1428
1439
  .switch-sm .switch-input:checked~.switch-label::after,
1429
1440
  .vd-form-switch-sm .vd-form-switch-input:checked+.vd-form-switch-label::after {
1430
- left: calc(var(--switch-width-sm) - var(--switch-thumb-size-sm) - var(--switch-thumb-offset));
1441
+ left: calc(var(--vd-switch-width-sm) - var(--vd-switch-thumb-size-sm) - var(--vd-switch-thumb-offset));
1431
1442
  }
1432
1443
 
1433
1444
  .switch-lg .switch-label,
1434
1445
  .switch-lg .vd-form-switch-label,
1435
1446
  .vd-form-switch-lg .switch-label,
1436
1447
  .vd-form-switch-lg .vd-form-switch-label {
1437
- font-size: var(--input-font-size-lg);
1448
+ font-size: var(--vd-input-font-size-lg);
1438
1449
  }
1439
1450
 
1440
1451
  .switch-lg .switch-label::before,
1441
1452
  .switch-lg .vd-form-switch-label::before,
1442
1453
  .vd-form-switch-lg .switch-label::before,
1443
1454
  .vd-form-switch-lg .vd-form-switch-label::before {
1444
- width: var(--switch-width-lg);
1445
- height: var(--switch-height-lg);
1455
+ width: var(--vd-switch-width-lg);
1456
+ height: var(--vd-switch-height-lg);
1446
1457
  }
1447
1458
 
1448
1459
  .switch-lg .switch-label::after,
1449
1460
  .switch-lg .vd-form-switch-label::after,
1450
1461
  .vd-form-switch-lg .switch-label::after,
1451
1462
  .vd-form-switch-lg .vd-form-switch-label::after {
1452
- width: var(--switch-thumb-size-lg);
1453
- height: var(--switch-thumb-size-lg);
1463
+ width: var(--vd-switch-thumb-size-lg);
1464
+ height: var(--vd-switch-thumb-size-lg);
1454
1465
  }
1455
1466
 
1456
1467
  .switch-lg .switch-input:checked+.switch-label::after,
1457
1468
  .switch-lg .switch-input:checked~.switch-label::after,
1458
1469
  .vd-form-switch-lg .vd-form-switch-input:checked+.vd-form-switch-label::after {
1459
- left: calc(var(--switch-width-lg) - var(--switch-thumb-size-lg) - var(--switch-thumb-offset));
1470
+ left: calc(var(--vd-switch-width-lg) - var(--vd-switch-thumb-size-lg) - var(--vd-switch-thumb-offset));
1460
1471
  }
1461
1472
 
1462
1473
  /* Switch Variants */
1463
1474
  .switch-success .switch-input:checked+.switch-label::before,
1464
1475
  .switch-success .switch-input:checked~.switch-label::before,
1465
1476
  .vd-form-switch-success .vd-form-switch-input:checked+.vd-form-switch-label::before {
1466
- background-color: var(--switch-bg-on-success);
1477
+ background-color: var(--vd-switch-bg-on-success);
1467
1478
  }
1468
1479
 
1469
1480
  .switch-warning .switch-input:checked+.switch-label::before,
1470
1481
  .switch-warning .switch-input:checked~.switch-label::before,
1471
1482
  .vd-form-switch-warning .vd-form-switch-input:checked+.vd-form-switch-label::before {
1472
- background-color: var(--switch-bg-on-warning);
1483
+ background-color: var(--vd-switch-bg-on-warning);
1473
1484
  }
1474
1485
 
1475
1486
  .switch-error .switch-input:checked+.switch-label::before,
1476
1487
  .switch-error .switch-input:checked~.switch-label::before,
1477
1488
  .vd-form-switch-error .vd-form-switch-input:checked+.vd-form-switch-label::before {
1478
- background-color: var(--switch-bg-on-error);
1489
+ background-color: var(--vd-switch-bg-on-error);
1479
1490
  }
1480
1491
 
1481
1492
  /* Select Variables */
1493
+ /* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
1482
1494
  :root {
1483
- --select-arrow-size: 16px;
1484
- --select-arrow-color: var(--text-secondary);
1485
- --select-arrow-color-focus: var(--color-primary);
1495
+ --vd-select-arrow-size: 16px;
1496
+ --vd-select-arrow-color: var(--vd-text-secondary);
1497
+ --vd-select-arrow-color-focus: var(--vd-color-primary);
1486
1498
  }
1487
1499
 
1488
1500
  /* Select Wrapper */
@@ -1498,34 +1510,34 @@ input[type="range"].range-lg::-moz-range-thumb {
1498
1510
  .custom-select-button {
1499
1511
  display: block;
1500
1512
  width: 100%;
1501
- padding: var(--input-padding-y) var(--input-padding-x);
1502
- padding-right: calc(var(--input-padding-x) + var(--select-arrow-size) + 0.5rem);
1503
- font-family: var(--font-family-sans);
1504
- font-size: var(--input-font-size);
1505
- font-weight: var(--font-weight-normal);
1506
- line-height: var(--line-height-normal);
1507
- color: var(--text-primary);
1513
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
1514
+ padding-right: calc(var(--vd-input-padding-x) + var(--vd-select-arrow-size) + 0.5rem);
1515
+ font-family: var(--vd-font-family-sans);
1516
+ font-size: var(--vd-input-font-size);
1517
+ font-weight: var(--vd-font-weight-normal);
1518
+ line-height: var(--vd-line-height-normal);
1519
+ color: var(--vd-text-primary);
1508
1520
  text-align: left;
1509
- background-color: var(--input-bg);
1521
+ background-color: var(--vd-input-bg);
1510
1522
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23495057' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
1511
1523
  background-repeat: no-repeat;
1512
1524
  background-position: right 0.75rem center;
1513
- background-size: var(--select-arrow-size) 12px;
1514
- border: var(--input-border-width) solid var(--input-border-color);
1515
- border-radius: var(--input-border-radius);
1516
- transition: var(--input-transition);
1525
+ background-size: var(--vd-select-arrow-size) 12px;
1526
+ border: var(--vd-input-border-width) solid var(--vd-input-border-color);
1527
+ border-radius: var(--vd-input-border-radius);
1528
+ transition: var(--vd-input-transition);
1517
1529
  cursor: pointer;
1518
1530
  appearance: none;
1519
1531
  }
1520
1532
 
1521
1533
  .custom-select-button:hover {
1522
- border-color: var(--input-focus-border-color);
1534
+ border-color: var(--vd-input-focus-border-color);
1523
1535
  }
1524
1536
 
1525
1537
  .custom-select-button:focus {
1526
1538
  outline: 0;
1527
- border-color: var(--input-focus-border-color);
1528
- box-shadow: var(--input-focus-box-shadow);
1539
+ border-color: var(--vd-input-focus-border-color);
1540
+ box-shadow: var(--vd-input-focus-box-shadow);
1529
1541
  }
1530
1542
 
1531
1543
  .custom-select-wrapper select {
@@ -1543,21 +1555,21 @@ select,
1543
1555
  .custom-select-input {
1544
1556
  display: block;
1545
1557
  width: 100%;
1546
- padding: var(--input-padding-y) var(--input-padding-x);
1547
- padding-right: calc(var(--input-padding-x) + var(--select-arrow-size) + 0.5rem);
1548
- font-family: var(--font-family-sans);
1549
- font-size: var(--input-font-size);
1550
- font-weight: var(--font-weight-normal);
1551
- line-height: var(--line-height-normal);
1552
- color: var(--text-primary);
1553
- background-color: var(--input-bg);
1558
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
1559
+ padding-right: calc(var(--vd-input-padding-x) + var(--vd-select-arrow-size) + 0.5rem);
1560
+ font-family: var(--vd-font-family-sans);
1561
+ font-size: var(--vd-input-font-size);
1562
+ font-weight: var(--vd-font-weight-normal);
1563
+ line-height: var(--vd-line-height-normal);
1564
+ color: var(--vd-text-primary);
1565
+ background-color: var(--vd-input-bg);
1554
1566
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23495057' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
1555
1567
  background-repeat: no-repeat;
1556
1568
  background-position: right 0.75rem center;
1557
- background-size: var(--select-arrow-size) 12px;
1558
- border: var(--input-border-width) solid var(--input-border-color);
1559
- border-radius: var(--input-border-radius);
1560
- transition: var(--input-transition);
1569
+ background-size: var(--vd-select-arrow-size) 12px;
1570
+ border: var(--vd-input-border-width) solid var(--vd-input-border-color);
1571
+ border-radius: var(--vd-input-border-radius);
1572
+ transition: var(--vd-input-transition);
1561
1573
  appearance: none;
1562
1574
  cursor: pointer;
1563
1575
  }
@@ -1567,8 +1579,8 @@ select:focus,
1567
1579
  .select-input:focus,
1568
1580
  .custom-select-input:focus {
1569
1581
  outline: 0;
1570
- border-color: var(--input-focus-border-color);
1571
- box-shadow: var(--input-focus-box-shadow);
1582
+ border-color: var(--vd-input-focus-border-color);
1583
+ box-shadow: var(--vd-input-focus-box-shadow);
1572
1584
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%2322b8cf' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
1573
1585
  }
1574
1586
 
@@ -1576,7 +1588,7 @@ select.vd-input:disabled,
1576
1588
  select:disabled,
1577
1589
  .select-input:disabled,
1578
1590
  .custom-select-input:disabled {
1579
- background-color: var(--input-bg-disabled);
1591
+ background-color: var(--vd-input-bg-disabled);
1580
1592
  opacity: 0.6;
1581
1593
  cursor: not-allowed;
1582
1594
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23868e96' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
@@ -1587,34 +1599,34 @@ select.vd-input.vd-input-error,
1587
1599
  select.vd-input.is-error,
1588
1600
  .select-input.vd-input-error,
1589
1601
  .select-input.is-error {
1590
- border-color: var(--color-error);
1602
+ border-color: var(--vd-color-error);
1591
1603
  }
1592
1604
 
1593
1605
  select.vd-input.vd-input-success,
1594
1606
  select.vd-input.is-success,
1595
1607
  .select-input.vd-input-success,
1596
1608
  .select-input.is-success {
1597
- border-color: var(--color-success);
1609
+ border-color: var(--vd-color-success);
1598
1610
  }
1599
1611
 
1600
1612
  /* Select Sizes */
1601
1613
  select.vd-input-sm,
1602
1614
  .select-input-sm,
1603
1615
  .custom-select-sm {
1604
- padding: var(--input-padding-y-sm) var(--input-padding-x-sm);
1605
- padding-right: calc(var(--input-padding-x-sm) + var(--select-arrow-size) + 0.5rem);
1606
- font-size: var(--input-font-size-sm);
1607
- border-radius: var(--input-border-radius-sm);
1616
+ padding: var(--vd-input-padding-y-sm) var(--vd-input-padding-x-sm);
1617
+ padding-right: calc(var(--vd-input-padding-x-sm) + var(--vd-select-arrow-size) + 0.5rem);
1618
+ font-size: var(--vd-input-font-size-sm);
1619
+ border-radius: var(--vd-input-border-radius-sm);
1608
1620
  background-size: 14px 10px;
1609
1621
  }
1610
1622
 
1611
1623
  select.vd-input-lg,
1612
1624
  .select-input-lg,
1613
1625
  .custom-select-lg {
1614
- padding: var(--input-padding-y-lg) var(--input-padding-x-lg);
1615
- padding-right: calc(var(--input-padding-x-lg) + var(--select-arrow-size) + 0.5rem);
1616
- font-size: var(--input-font-size-lg);
1617
- border-radius: var(--input-border-radius-lg);
1626
+ padding: var(--vd-input-padding-y-lg) var(--vd-input-padding-x-lg);
1627
+ padding-right: calc(var(--vd-input-padding-x-lg) + var(--vd-select-arrow-size) + 0.5rem);
1628
+ font-size: var(--vd-input-font-size-lg);
1629
+ border-radius: var(--vd-input-border-radius-lg);
1618
1630
  background-size: 18px 14px;
1619
1631
  }
1620
1632
 
@@ -1623,8 +1635,8 @@ select[multiple].vd-input,
1623
1635
  select[multiple],
1624
1636
  .select-input[multiple],
1625
1637
  .custom-select-input[multiple] {
1626
- padding: var(--input-padding-y) var(--input-padding-x);
1627
- padding-right: var(--input-padding-x);
1638
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
1639
+ padding-right: var(--vd-input-padding-x);
1628
1640
  background-image: none;
1629
1641
  min-height: 120px;
1630
1642
  }
@@ -1645,10 +1657,10 @@ select[multiple] option,
1645
1657
  z-index: 1000;
1646
1658
  display: none;
1647
1659
  margin-top: 0.25rem;
1648
- background-color: var(--input-bg);
1649
- border: 1px solid var(--input-border-color);
1650
- border-radius: var(--input-border-radius);
1651
- box-shadow: var(--shadow-lg);
1660
+ background-color: var(--vd-input-bg);
1661
+ border: 1px solid var(--vd-input-border-color);
1662
+ border-radius: var(--vd-input-border-radius);
1663
+ box-shadow: var(--vd-shadow-lg);
1652
1664
  max-height: 300px;
1653
1665
  overflow-y: auto;
1654
1666
  }
@@ -1660,55 +1672,55 @@ select[multiple] option,
1660
1672
  .custom-select-option {
1661
1673
  display: block;
1662
1674
  width: 100%;
1663
- padding: var(--input-padding-y) var(--input-padding-x);
1664
- font-size: var(--input-font-size);
1665
- color: var(--text-primary);
1675
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
1676
+ font-size: var(--vd-input-font-size);
1677
+ color: var(--vd-text-primary);
1666
1678
  background-color: transparent;
1667
1679
  border: none;
1668
1680
  text-align: left;
1669
1681
  cursor: pointer;
1670
- transition: var(--transition-bg);
1682
+ transition: var(--vd-transition-bg);
1671
1683
  }
1672
1684
 
1673
1685
  .custom-select-option:hover,
1674
1686
  .custom-select-option:focus {
1675
- background-color: var(--color-primary-alpha-10);
1687
+ background-color: var(--vd-color-primary-alpha-10);
1676
1688
  outline: none;
1677
1689
  }
1678
1690
 
1679
1691
  .custom-select-option.is-selected {
1680
- background-color: var(--color-primary-alpha-10);
1681
- color: var(--color-primary);
1682
- font-weight: var(--font-weight-medium);
1692
+ background-color: var(--vd-color-primary-alpha-10);
1693
+ color: var(--vd-color-primary);
1694
+ font-weight: var(--vd-font-weight-medium);
1683
1695
  }
1684
1696
 
1685
1697
  .custom-select-option.is-disabled,
1686
1698
  .custom-select-option[data-value=""] {
1687
1699
  opacity: 0.6;
1688
1700
  cursor: not-allowed;
1689
- color: var(--text-muted);
1701
+ color: var(--vd-text-muted);
1690
1702
  }
1691
1703
 
1692
1704
  .custom-select-option-group {
1693
- padding: 0.5rem var(--input-padding-x);
1694
- font-size: var(--font-size-sm);
1695
- font-weight: var(--font-weight-semibold);
1696
- color: var(--text-muted);
1705
+ padding: 0.5rem var(--vd-input-padding-x);
1706
+ font-size: var(--vd-font-size-sm);
1707
+ font-weight: var(--vd-font-weight-semibold);
1708
+ color: var(--vd-text-muted);
1697
1709
  text-transform: uppercase;
1698
1710
  letter-spacing: 0.05em;
1699
1711
  }
1700
1712
 
1701
1713
  .custom-select-search {
1702
- padding: var(--input-padding-y) var(--input-padding-x);
1703
- border-bottom: 1px solid var(--input-border-color);
1714
+ padding: var(--vd-input-padding-y) var(--vd-input-padding-x);
1715
+ border-bottom: 1px solid var(--vd-input-border-color);
1704
1716
  }
1705
1717
 
1706
1718
  .custom-select-search input {
1707
1719
  width: 100%;
1708
1720
  padding: 0.5rem;
1709
- font-size: var(--input-font-size-sm);
1710
- border: 1px solid var(--input-border-color);
1711
- border-radius: var(--input-border-radius-sm);
1721
+ font-size: var(--vd-input-font-size-sm);
1722
+ border: 1px solid var(--vd-input-border-color);
1723
+ border-radius: var(--vd-input-border-radius-sm);
1712
1724
  }
1713
1725
 
1714
1726
  /* Dark Mode - Select Arrow Colors */