@vanduo-oss/framework 1.4.0 → 1.4.2

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 (89) hide show
  1. package/README.md +11 -9
  2. package/css/components/affix.css +11 -11
  3. package/css/components/alerts.css +55 -55
  4. package/css/components/avatar.css +62 -62
  5. package/css/components/badges.css +25 -25
  6. package/css/components/breadcrumbs.css +31 -31
  7. package/css/components/bubble.css +40 -40
  8. package/css/components/button-group.css +2 -2
  9. package/css/components/buttons.css +33 -33
  10. package/css/components/cards.css +76 -76
  11. package/css/components/chips.css +27 -27
  12. package/css/components/code-snippet.css +132 -132
  13. package/css/components/collapsible.css +60 -60
  14. package/css/components/collections.css +58 -58
  15. package/css/components/datepicker.css +55 -53
  16. package/css/components/doc-search.css +63 -63
  17. package/css/components/doc-tabs.css +1 -1
  18. package/css/components/draggable.css +69 -69
  19. package/css/components/dropdown.css +48 -48
  20. package/css/components/fab.css +60 -60
  21. package/css/components/flow.css +55 -55
  22. package/css/components/footer.css +52 -52
  23. package/css/components/forms.css +373 -373
  24. package/css/components/image-box.css +39 -39
  25. package/css/components/modals.css +53 -49
  26. package/css/components/music-player.css +150 -150
  27. package/css/components/navbar.css +71 -71
  28. package/css/components/pagination.css +50 -50
  29. package/css/components/preloader.css +18 -18
  30. package/css/components/progress.css +16 -16
  31. package/css/components/rating.css +18 -18
  32. package/css/components/ripple.css +10 -10
  33. package/css/components/sidenav.css +67 -67
  34. package/css/components/skeleton.css +13 -13
  35. package/css/components/spinner.css +30 -30
  36. package/css/components/spotlight.css +27 -27
  37. package/css/components/stepper.css +36 -36
  38. package/css/components/suggest.css +35 -35
  39. package/css/components/tabs.css +46 -46
  40. package/css/components/theme-customizer.css +73 -73
  41. package/css/components/timeline.css +43 -43
  42. package/css/components/timepicker.css +32 -30
  43. package/css/components/toast.css +27 -27
  44. package/css/components/tooltips.css +77 -77
  45. package/css/components/transfer.css +35 -35
  46. package/css/components/tree.css +25 -25
  47. package/css/components/waypoint.css +12 -12
  48. package/css/core/colors.css +610 -610
  49. package/css/core/grid.css +127 -127
  50. package/css/core/helpers.css +338 -338
  51. package/css/core/tokens.css +69 -81
  52. package/css/core/typography.css +91 -91
  53. package/css/effects/morph.css +17 -17
  54. package/css/effects/parallax.css +6 -6
  55. package/css/utilities/color-utilities.css +273 -273
  56. package/css/utilities/media.css +2 -2
  57. package/css/utilities/shadow.css +75 -75
  58. package/css/utilities/table.css +40 -40
  59. package/css/utilities/transitions.css +38 -38
  60. package/css/vanduo.css +1 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/vanduo.cjs.js +104 -29
  63. package/dist/vanduo.cjs.js.map +2 -2
  64. package/dist/vanduo.cjs.min.js +5 -5
  65. package/dist/vanduo.cjs.min.js.map +3 -3
  66. package/dist/vanduo.css +4042 -4133
  67. package/dist/vanduo.css.map +1 -1
  68. package/dist/vanduo.esm.js +104 -29
  69. package/dist/vanduo.esm.js.map +2 -2
  70. package/dist/vanduo.esm.min.js +5 -5
  71. package/dist/vanduo.esm.min.js.map +3 -3
  72. package/dist/vanduo.js +104 -29
  73. package/dist/vanduo.js.map +2 -2
  74. package/dist/vanduo.min.css +2 -2
  75. package/dist/vanduo.min.css.map +1 -1
  76. package/dist/vanduo.min.js +5 -5
  77. package/dist/vanduo.min.js.map +3 -3
  78. package/js/components/affix.js +2 -2
  79. package/js/components/datepicker.js +51 -4
  80. package/js/components/image-box.js +2 -2
  81. package/js/components/morph.js +1 -1
  82. package/js/components/music-player.js +11 -11
  83. package/js/components/navbar.js +1 -1
  84. package/js/components/preloader.js +1 -1
  85. package/js/components/theme-customizer.js +4 -4
  86. package/js/components/timepicker.js +48 -6
  87. package/js/components/vd-hex.js +8 -10
  88. package/package.json +1 -1
  89. package/css/core/vd-aliases.css +0 -108
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Vanduo Framework v1.4.0
1
+ # Vanduo Framework v1.4.2
2
2
 
3
3
  <p align="center">
4
4
  <img src="vanduo-banner.svg" alt="Vanduo Framework Banner" width="100%">
@@ -10,7 +10,7 @@
10
10
  <a href="https://github.com/vanduo-oss/framework/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vanduo-oss/framework?style=flat-square&color=64748b" alt="License"></a>
11
11
  </p>
12
12
 
13
- Vanduo is a zero-dependency UI framework built with HTML, CSS, and vanilla JavaScript. It ships a full component bundle, scoped runtime initialization, a canonical `--vd-*` token API, and compatibility aliases for existing `1.3.x` consumers.
13
+ Vanduo is a zero-dependency UI framework built with HTML, CSS, and vanilla JavaScript. It ships a full component bundle, scoped runtime initialization, and a strict canonical `--vd-*` token API.
14
14
 
15
15
  [Browse Docs](https://vanduo.dev/#docs)
16
16
 
@@ -19,7 +19,7 @@ Vanduo is a zero-dependency UI framework built with HTML, CSS, and vanilla JavaS
19
19
  - Zero runtime dependencies
20
20
  - 47+ components across layout, navigation, overlays, search, and effects
21
21
  - Scoped runtime APIs for dynamic DOM work
22
- - Canonical semantic token API under `--vd-*`
22
+ - Strict design token API under `--vd-*`
23
23
  - Built-in dark, light, and system theming
24
24
  - Theme customizer with color, font, and radius controls
25
25
  - Playwright-based browser coverage across Chromium, Firefox, and WebKit
@@ -29,8 +29,8 @@ Vanduo is a zero-dependency UI framework built with HTML, CSS, and vanilla JavaS
29
29
  ### CDN
30
30
 
31
31
  ```html
32
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.4.0/dist/vanduo.min.css">
33
- <script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.4.0/dist/vanduo.min.js"></script>
32
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.4.2/dist/vanduo.min.css">
33
+ <script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.4.2/dist/vanduo.min.js"></script>
34
34
  <script>
35
35
  Vanduo.init();
36
36
  </script>
@@ -77,15 +77,17 @@ Vanduo.getComponent('docSearch');
77
77
 
78
78
  ## Token API
79
79
 
80
- Vanduo `1.4.0` treats `--vd-*` as the canonical semantic API:
80
+ Vanduo `1.4.1` treats `--vd-*` as the only shipped custom-property namespace:
81
81
 
82
+ - Palette: `--vd-red-*`, `--vd-primary-*`, `--vd-gray-*`, and related scales
82
83
  - Colors: `--vd-color-*`
83
84
  - Backgrounds: `--vd-bg-*`
84
85
  - Text: `--vd-text-*`
85
86
  - Borders: `--vd-border-*`
86
87
  - Shadows: `--vd-shadow-*`
88
+ - Components/effects: `--vd-btn-*`, `--vd-card-*`, `--vd-morph-*`, and related internals
87
89
 
88
- Legacy semantic aliases like `--color-*`, `--bg-*`, and `--text-*` are still supported throughout the `1.4.x` line.
90
+ Legacy unprefixed token aliases were removed in `1.4.1`; update custom themes and overrides to use the `--vd-*` equivalents.
89
91
 
90
92
  ```css
91
93
  .cta {
@@ -99,7 +101,7 @@ More detail lives in [TOKENS.md](TOKENS.md).
99
101
 
100
102
  ## CSS Bundle Notes
101
103
 
102
- - `css/vanduo.css` remains the main framework entrypoint in `1.4.0`.
104
+ - `css/vanduo.css` remains the main framework entrypoint in `1.4.1`.
103
105
  - The main bundle still includes framework-wide form defaults for native inputs and textareas.
104
106
  - New component styling should prefer `.vd-*` hooks over new raw element selectors.
105
107
 
@@ -131,7 +133,7 @@ pnpm run stats:css
131
133
 
132
134
  - Architecture notes: [ARCHITECTURE.md](ARCHITECTURE.md)
133
135
  - Token model: [TOKENS.md](TOKENS.md)
134
- - `1.4.0` migration notes: [changes-v140.md](changes-v140.md)
136
+ - `1.4.1` token migration notes: [changes-v141.md](changes-v141.md)
135
137
  - QA strategy: [QA-Automation-Strategy.md](QA-Automation-Strategy.md)
136
138
  - Contributor workflow: [CONTRIBUTING.md](CONTRIBUTING.md)
137
139
 
@@ -5,19 +5,19 @@
5
5
  */
6
6
 
7
7
  :root {
8
- --affix-top-offset: 0;
9
- --affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
10
- --affix-transition: box-shadow 0.2s ease, background-color 0.2s ease;
11
- --affix-z-index: 1020;
8
+ --vd-affix-top-offset: 0;
9
+ --vd-affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
10
+ --vd-affix-transition: box-shadow 0.2s ease, background-color 0.2s ease;
11
+ --vd-affix-z-index: 1020;
12
12
  }
13
13
 
14
14
  [data-theme="dark"] {
15
- --affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
15
+ --vd-affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
16
16
  }
17
17
 
18
18
  @media (prefers-color-scheme: dark) {
19
19
  :root:not([data-theme]) {
20
- --affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
20
+ --vd-affix-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
21
21
  }
22
22
  }
23
23
 
@@ -27,9 +27,9 @@
27
27
  .vd-sticky,
28
28
  [data-vd-affix] {
29
29
  position: sticky;
30
- top: var(--affix-top-offset);
31
- transition: var(--affix-transition);
32
- z-index: calc(var(--affix-z-index) - 1);
30
+ top: var(--vd-affix-top-offset);
31
+ transition: var(--vd-affix-transition);
32
+ z-index: calc(var(--vd-affix-z-index) - 1);
33
33
  }
34
34
 
35
35
  /* ========== Stuck State ========== */
@@ -37,8 +37,8 @@
37
37
  .vd-affix.is-stuck,
38
38
  .vd-sticky.is-stuck,
39
39
  [data-vd-affix].is-stuck {
40
- z-index: var(--affix-z-index);
41
- box-shadow: var(--affix-shadow);
40
+ z-index: var(--vd-affix-z-index);
41
+ box-shadow: var(--vd-affix-shadow);
42
42
  }
43
43
 
44
44
  /* ========== Variants ========== */
@@ -5,93 +5,93 @@
5
5
 
6
6
  :root {
7
7
  /* Alert Spacing (Fibonacci: 21px/13px, ratio ~ phi) */
8
- --alert-padding-x: 1.3125rem; /* 21px - fib */
9
- --alert-padding-y: 0.8125rem; /* 13px - fib */
10
- --alert-border-radius: var(--btn-border-radius);
11
- --alert-border-width: 1px;
8
+ --vd-alert-padding-x: 1.3125rem; /* 21px - fib */
9
+ --vd-alert-padding-y: 0.8125rem; /* 13px - fib */
10
+ --vd-alert-border-radius: var(--vd-btn-border-radius);
11
+ --vd-alert-border-width: 1px;
12
12
 
13
13
  /* Alert Colors */
14
- --alert-primary-bg: var(--vd-color-primary-alpha-10);
15
- --alert-primary-border: var(--vd-color-primary);
16
- --alert-primary-text: var(--vd-color-primary-dark);
14
+ --vd-alert-primary-bg: var(--vd-color-primary-alpha-10);
15
+ --vd-alert-primary-border: var(--vd-color-primary);
16
+ --vd-alert-primary-text: var(--vd-color-primary-dark);
17
17
 
18
- --alert-success-bg: var(--vd-color-success-alpha-10);
19
- --alert-success-border: var(--vd-color-success);
20
- --alert-success-text: var(--vd-color-success-dark);
18
+ --vd-alert-success-bg: var(--vd-color-success-alpha-10);
19
+ --vd-alert-success-border: var(--vd-color-success);
20
+ --vd-alert-success-text: var(--vd-color-success-dark);
21
21
 
22
- --alert-warning-bg: var(--vd-color-warning-alpha-10);
23
- --alert-warning-border: var(--vd-color-warning);
24
- --alert-warning-text: var(--vd-color-warning-dark);
22
+ --vd-alert-warning-bg: var(--vd-color-warning-alpha-10);
23
+ --vd-alert-warning-border: var(--vd-color-warning);
24
+ --vd-alert-warning-text: var(--vd-color-warning-dark);
25
25
 
26
- --alert-error-bg: var(--vd-color-error-alpha-10);
27
- --alert-error-border: var(--vd-color-error);
28
- --alert-error-text: var(--vd-color-error-dark);
26
+ --vd-alert-error-bg: var(--vd-color-error-alpha-10);
27
+ --vd-alert-error-border: var(--vd-color-error);
28
+ --vd-alert-error-text: var(--vd-color-error-dark);
29
29
 
30
- --alert-info-bg: var(--vd-color-info-alpha-10);
31
- --alert-info-border: var(--vd-color-info);
32
- --alert-info-text: var(--vd-color-info-dark);
30
+ --vd-alert-info-bg: var(--vd-color-info-alpha-10);
31
+ --vd-alert-info-border: var(--vd-color-info);
32
+ --vd-alert-info-text: var(--vd-color-info-dark);
33
33
  }
34
34
 
35
35
  /* Dark Theme Overrides */
36
36
  [data-theme="dark"] {
37
- --alert-primary-text: var(--vd-color-primary-light);
38
- --alert-success-text: var(--vd-color-success-light);
39
- --alert-warning-text: var(--vd-color-warning-light);
40
- --alert-error-text: var(--vd-color-error-light);
41
- --alert-info-text: var(--vd-color-info-light);
37
+ --vd-alert-primary-text: var(--vd-color-primary-light);
38
+ --vd-alert-success-text: var(--vd-color-success-light);
39
+ --vd-alert-warning-text: var(--vd-color-warning-light);
40
+ --vd-alert-error-text: var(--vd-color-error-light);
41
+ --vd-alert-info-text: var(--vd-color-info-light);
42
42
  }
43
43
 
44
44
  @media (prefers-color-scheme: dark) {
45
45
  :root:not([data-theme]) {
46
- --alert-primary-text: var(--vd-color-primary-light);
47
- --alert-success-text: var(--vd-color-success-light);
48
- --alert-warning-text: var(--vd-color-warning-light);
49
- --alert-error-text: var(--vd-color-error-light);
50
- --alert-info-text: var(--vd-color-info-light);
46
+ --vd-alert-primary-text: var(--vd-color-primary-light);
47
+ --vd-alert-success-text: var(--vd-color-success-light);
48
+ --vd-alert-warning-text: var(--vd-color-warning-light);
49
+ --vd-alert-error-text: var(--vd-color-error-light);
50
+ --vd-alert-info-text: var(--vd-color-info-light);
51
51
  }
52
52
  }
53
53
 
54
54
  /* Base Alert */
55
55
  .vd-alert {
56
56
  position: relative;
57
- padding: var(--alert-padding-y) var(--alert-padding-x);
57
+ padding: var(--vd-alert-padding-y) var(--vd-alert-padding-x);
58
58
  margin-bottom: 1rem;
59
- border: var(--alert-border-width) solid transparent;
60
- border-radius: var(--alert-border-radius);
61
- font-size: var(--font-size-base);
62
- line-height: var(--line-height-normal);
59
+ border: var(--vd-alert-border-width) solid transparent;
60
+ border-radius: var(--vd-alert-border-radius);
61
+ font-size: var(--vd-font-size-base);
62
+ line-height: var(--vd-line-height-normal);
63
63
  }
64
64
 
65
65
  /* Alert Variants */
66
66
  .vd-alert-primary {
67
- background-color: var(--alert-primary-bg);
68
- border-color: var(--alert-primary-border);
69
- color: var(--alert-primary-text);
67
+ background-color: var(--vd-alert-primary-bg);
68
+ border-color: var(--vd-alert-primary-border);
69
+ color: var(--vd-alert-primary-text);
70
70
  }
71
71
 
72
72
  .vd-alert-success {
73
- background-color: var(--alert-success-bg);
74
- border-color: var(--alert-success-border);
75
- color: var(--alert-success-text);
73
+ background-color: var(--vd-alert-success-bg);
74
+ border-color: var(--vd-alert-success-border);
75
+ color: var(--vd-alert-success-text);
76
76
  }
77
77
 
78
78
  .vd-alert-warning {
79
- background-color: var(--alert-warning-bg);
80
- border-color: var(--alert-warning-border);
81
- color: var(--alert-warning-text);
79
+ background-color: var(--vd-alert-warning-bg);
80
+ border-color: var(--vd-alert-warning-border);
81
+ color: var(--vd-alert-warning-text);
82
82
  }
83
83
 
84
84
  .vd-alert-error,
85
85
  .vd-alert-danger {
86
- background-color: var(--alert-error-bg);
87
- border-color: var(--alert-error-border);
88
- color: var(--alert-error-text);
86
+ background-color: var(--vd-alert-error-bg);
87
+ border-color: var(--vd-alert-error-border);
88
+ color: var(--vd-alert-error-text);
89
89
  }
90
90
 
91
91
  .vd-alert-info {
92
- background-color: var(--alert-info-bg);
93
- border-color: var(--alert-info-border);
94
- color: var(--alert-info-text);
92
+ background-color: var(--vd-alert-info-bg);
93
+ border-color: var(--vd-alert-info-border);
94
+ color: var(--vd-alert-info-text);
95
95
  }
96
96
 
97
97
  /* Alert with Icon */
@@ -111,7 +111,7 @@
111
111
 
112
112
  /* Alert Title */
113
113
  .vd-alert-title {
114
- font-weight: var(--font-weight-semibold);
114
+ font-weight: var(--vd-font-weight-semibold);
115
115
  margin-bottom: 0.25rem;
116
116
  }
117
117
 
@@ -129,7 +129,7 @@
129
129
  position: absolute;
130
130
  top: 0;
131
131
  right: 0;
132
- padding: var(--alert-padding-y) var(--alert-padding-x);
132
+ padding: var(--vd-alert-padding-y) var(--vd-alert-padding-x);
133
133
  background: transparent;
134
134
  border: none;
135
135
  cursor: pointer;
@@ -152,7 +152,7 @@
152
152
  /* Alert Link */
153
153
  .vd-alert a,
154
154
  .vd-alert-link {
155
- font-weight: var(--font-weight-semibold);
155
+ font-weight: var(--vd-font-weight-semibold);
156
156
  color: inherit;
157
157
  text-decoration: underline;
158
158
  }
@@ -202,18 +202,18 @@
202
202
  /* Alert Sizes */
203
203
  .vd-alert-sm {
204
204
  padding: 0.3125rem 0.5rem; /* 5px 8px - fib pair */
205
- font-size: var(--font-size-sm);
205
+ font-size: var(--vd-font-size-sm);
206
206
  }
207
207
 
208
208
  .vd-alert-lg {
209
209
  padding: 1.3125rem 2.125rem; /* 21px 34px - fib pair */
210
- font-size: var(--font-size-lg);
210
+ font-size: var(--vd-font-size-lg);
211
211
  }
212
212
 
213
213
  /* Alert with Border Left Accent */
214
214
  .vd-alert-accent {
215
215
  border-left-width: 4px;
216
- border-radius: 0 var(--alert-border-radius) var(--alert-border-radius) 0;
216
+ border-radius: 0 var(--vd-alert-border-radius) var(--vd-alert-border-radius) 0;
217
217
  }
218
218
 
219
219
  /* Reduced Motion */
@@ -5,36 +5,36 @@
5
5
 
6
6
  :root {
7
7
  /* Avatar Sizes (Fibonacci) */
8
- --avatar-size-xs: 1.3125rem; /* 21px - fib */
9
- --avatar-size-sm: 2.125rem; /* 34px - fib */
10
- --avatar-size-md: 3.4375rem; /* 55px - fib */
11
- --avatar-size: 3.4375rem; /* 55px - fib (default / md) */
12
- --avatar-size-lg: 5.5625rem; /* 89px - fib */
13
- --avatar-size-xl: 9rem; /* 144px - fib */
14
- --avatar-size-2xl: 14.5625rem;/* 233px - fib */
8
+ --vd-avatar-size-xs: 1.3125rem; /* 21px - fib */
9
+ --vd-avatar-size-sm: 2.125rem; /* 34px - fib */
10
+ --vd-avatar-size-md: 3.4375rem; /* 55px - fib */
11
+ --vd-avatar-size: 3.4375rem; /* 55px - fib (default / md) */
12
+ --vd-avatar-size-lg: 5.5625rem; /* 89px - fib */
13
+ --vd-avatar-size-xl: 9rem; /* 144px - fib */
14
+ --vd-avatar-size-2xl: 14.5625rem;/* 233px - fib */
15
15
 
16
16
  /* Avatar Colors */
17
- --avatar-bg: var(--vd-color-gray-300);
18
- --avatar-text: var(--vd-color-gray-700);
19
- --avatar-border: var(--vd-color-white);
20
- --avatar-status-online: var(--vd-color-success);
21
- --avatar-status-offline: var(--vd-color-gray-400);
22
- --avatar-status-busy: var(--vd-color-error);
23
- --avatar-status-away: var(--vd-color-warning);
17
+ --vd-avatar-bg: var(--vd-color-gray-300);
18
+ --vd-avatar-text: var(--vd-color-gray-700);
19
+ --vd-avatar-border: var(--vd-color-white);
20
+ --vd-avatar-status-online: var(--vd-color-success);
21
+ --vd-avatar-status-offline: var(--vd-color-gray-400);
22
+ --vd-avatar-status-busy: var(--vd-color-error);
23
+ --vd-avatar-status-away: var(--vd-color-warning);
24
24
  }
25
25
 
26
26
  /* Dark Theme Overrides */
27
27
  [data-theme="dark"] {
28
- --avatar-bg: var(--vd-color-gray-600);
29
- --avatar-text: var(--vd-color-gray-200);
30
- --avatar-border: var(--vd-color-gray-800);
28
+ --vd-avatar-bg: var(--vd-color-gray-600);
29
+ --vd-avatar-text: var(--vd-color-gray-200);
30
+ --vd-avatar-border: var(--vd-color-gray-800);
31
31
  }
32
32
 
33
33
  @media (prefers-color-scheme: dark) {
34
34
  :root:not([data-theme]) {
35
- --avatar-bg: var(--vd-color-gray-600);
36
- --avatar-text: var(--vd-color-gray-200);
37
- --avatar-border: var(--vd-color-gray-800);
35
+ --vd-avatar-bg: var(--vd-color-gray-600);
36
+ --vd-avatar-text: var(--vd-color-gray-200);
37
+ --vd-avatar-border: var(--vd-color-gray-800);
38
38
  }
39
39
  }
40
40
 
@@ -44,13 +44,13 @@
44
44
  display: inline-flex;
45
45
  align-items: center;
46
46
  justify-content: center;
47
- width: var(--avatar-size);
48
- height: var(--avatar-size);
47
+ width: var(--vd-avatar-size);
48
+ height: var(--vd-avatar-size);
49
49
  border-radius: 50%;
50
- background-color: var(--avatar-bg);
51
- color: var(--avatar-text);
52
- font-weight: var(--font-weight-medium);
53
- font-size: calc(var(--avatar-size) * 0.4);
50
+ background-color: var(--vd-avatar-bg);
51
+ color: var(--vd-avatar-text);
52
+ font-weight: var(--vd-font-weight-medium);
53
+ font-size: calc(var(--vd-avatar-size) * 0.4);
54
54
  line-height: 1;
55
55
  overflow: hidden;
56
56
  flex-shrink: 0;
@@ -73,44 +73,44 @@
73
73
 
74
74
  /* Avatar Sizes */
75
75
  .vd-avatar-xs {
76
- width: var(--avatar-size-xs);
77
- height: var(--avatar-size-xs);
78
- font-size: calc(var(--avatar-size-xs) * 0.4);
76
+ width: var(--vd-avatar-size-xs);
77
+ height: var(--vd-avatar-size-xs);
78
+ font-size: calc(var(--vd-avatar-size-xs) * 0.4);
79
79
  }
80
80
 
81
81
  .vd-avatar-sm {
82
- width: var(--avatar-size-sm);
83
- height: var(--avatar-size-sm);
84
- font-size: calc(var(--avatar-size-sm) * 0.4);
82
+ width: var(--vd-avatar-size-sm);
83
+ height: var(--vd-avatar-size-sm);
84
+ font-size: calc(var(--vd-avatar-size-sm) * 0.4);
85
85
  }
86
86
 
87
87
  .vd-avatar-md {
88
- width: var(--avatar-size-md);
89
- height: var(--avatar-size-md);
90
- font-size: calc(var(--avatar-size-md) * 0.4);
88
+ width: var(--vd-avatar-size-md);
89
+ height: var(--vd-avatar-size-md);
90
+ font-size: calc(var(--vd-avatar-size-md) * 0.4);
91
91
  }
92
92
 
93
93
  .vd-avatar-lg {
94
- width: var(--avatar-size-lg);
95
- height: var(--avatar-size-lg);
96
- font-size: calc(var(--avatar-size-lg) * 0.4);
94
+ width: var(--vd-avatar-size-lg);
95
+ height: var(--vd-avatar-size-lg);
96
+ font-size: calc(var(--vd-avatar-size-lg) * 0.4);
97
97
  }
98
98
 
99
99
  .vd-avatar-xl {
100
- width: var(--avatar-size-xl);
101
- height: var(--avatar-size-xl);
102
- font-size: calc(var(--avatar-size-xl) * 0.4);
100
+ width: var(--vd-avatar-size-xl);
101
+ height: var(--vd-avatar-size-xl);
102
+ font-size: calc(var(--vd-avatar-size-xl) * 0.4);
103
103
  }
104
104
 
105
105
  .vd-avatar-2xl {
106
- width: var(--avatar-size-2xl);
107
- height: var(--avatar-size-2xl);
108
- font-size: calc(var(--avatar-size-2xl) * 0.4);
106
+ width: var(--vd-avatar-size-2xl);
107
+ height: var(--vd-avatar-size-2xl);
108
+ font-size: calc(var(--vd-avatar-size-2xl) * 0.4);
109
109
  }
110
110
 
111
111
  /* Avatar Shapes */
112
112
  .vd-avatar-rounded {
113
- border-radius: var(--btn-border-radius);
113
+ border-radius: var(--vd-btn-border-radius);
114
114
  }
115
115
 
116
116
  .vd-avatar-square {
@@ -127,8 +127,8 @@
127
127
  min-width: 0.5rem;
128
128
  min-height: 0.5rem;
129
129
  border-radius: 50%;
130
- border: 2px solid var(--avatar-border);
131
- background-color: var(--avatar-status-offline);
130
+ border: 2px solid var(--vd-avatar-border);
131
+ background-color: var(--vd-avatar-status-offline);
132
132
  }
133
133
 
134
134
  .vd-avatar.vd-avatar-status-online,
@@ -151,29 +151,29 @@
151
151
  min-width: 0.5rem;
152
152
  min-height: 0.5rem;
153
153
  border-radius: 50%;
154
- border: 2px solid var(--avatar-border);
154
+ border: 2px solid var(--vd-avatar-border);
155
155
  }
156
156
 
157
- .vd-avatar.vd-avatar-status-online::after { background-color: var(--avatar-status-online); }
158
- .vd-avatar.vd-avatar-status-offline::after { background-color: var(--avatar-status-offline); }
159
- .vd-avatar.vd-avatar-status-busy::after { background-color: var(--avatar-status-busy); }
160
- .vd-avatar.vd-avatar-status-away::after { background-color: var(--avatar-status-away); }
157
+ .vd-avatar.vd-avatar-status-online::after { background-color: var(--vd-avatar-status-online); }
158
+ .vd-avatar.vd-avatar-status-offline::after { background-color: var(--vd-avatar-status-offline); }
159
+ .vd-avatar.vd-avatar-status-busy::after { background-color: var(--vd-avatar-status-busy); }
160
+ .vd-avatar.vd-avatar-status-away::after { background-color: var(--vd-avatar-status-away); }
161
161
 
162
162
  /* Avatar with Ring/Border */
163
163
  .vd-avatar-ring {
164
- box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--vd-color-primary);
164
+ box-shadow: 0 0 0 3px var(--vd-avatar-border), 0 0 0 5px var(--vd-color-primary);
165
165
  }
166
166
 
167
167
  .vd-avatar-ring-success {
168
- box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--vd-color-success);
168
+ box-shadow: 0 0 0 3px var(--vd-avatar-border), 0 0 0 5px var(--vd-color-success);
169
169
  }
170
170
 
171
171
  .vd-avatar-ring-warning {
172
- box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--vd-color-warning);
172
+ box-shadow: 0 0 0 3px var(--vd-avatar-border), 0 0 0 5px var(--vd-color-warning);
173
173
  }
174
174
 
175
175
  .vd-avatar-ring-error {
176
- box-shadow: 0 0 0 3px var(--avatar-border), 0 0 0 5px var(--vd-color-error);
176
+ box-shadow: 0 0 0 3px var(--vd-avatar-border), 0 0 0 5px var(--vd-color-error);
177
177
  }
178
178
 
179
179
  /* Avatar Group (stacked avatars) */
@@ -183,7 +183,7 @@
183
183
  }
184
184
 
185
185
  .vd-avatar-group .vd-avatar {
186
- border: 2px solid var(--avatar-border);
186
+ border: 2px solid var(--vd-avatar-border);
187
187
  margin-left: -0.75rem;
188
188
  }
189
189
 
@@ -209,14 +209,14 @@
209
209
  display: inline-flex;
210
210
  align-items: center;
211
211
  justify-content: center;
212
- width: var(--avatar-size);
213
- height: var(--avatar-size);
212
+ width: var(--vd-avatar-size);
213
+ height: var(--vd-avatar-size);
214
214
  border-radius: 50%;
215
215
  background-color: var(--vd-color-gray-200);
216
216
  color: var(--vd-text-primary);
217
- font-size: var(--font-size-sm);
218
- font-weight: var(--font-weight-medium);
219
- border: 2px solid var(--avatar-border);
217
+ font-size: var(--vd-font-size-sm);
218
+ font-weight: var(--vd-font-weight-medium);
219
+ border: 2px solid var(--vd-avatar-border);
220
220
  margin-left: -0.75rem;
221
221
  }
222
222
 
@@ -5,23 +5,23 @@
5
5
 
6
6
  :root {
7
7
  /* Badge Padding (x/y ratio ~ phi) */
8
- --badge-padding-y: 0.3em;
9
- --badge-padding-x: 0.48em; /* 0.48/0.3 = 1.6 ~ phi */
10
- --badge-padding-y-sm: 0.18em;
11
- --badge-padding-x-sm: 0.3em; /* 0.3/0.18 = 1.67 ~ phi */
12
- --badge-padding-y-lg: 0.42em;
13
- --badge-padding-x-lg: 0.65em; /* 0.65/0.42 = 1.55 ~ phi */
8
+ --vd-badge-padding-y: 0.3em;
9
+ --vd-badge-padding-x: 0.48em; /* 0.48/0.3 = 1.6 ~ phi */
10
+ --vd-badge-padding-y-sm: 0.18em;
11
+ --vd-badge-padding-x-sm: 0.3em; /* 0.3/0.18 = 1.67 ~ phi */
12
+ --vd-badge-padding-y-lg: 0.42em;
13
+ --vd-badge-padding-x-lg: 0.65em; /* 0.65/0.42 = 1.55 ~ phi */
14
14
 
15
15
  /* Badge Font */
16
- --badge-font-size: 0.8125em;
17
- --badge-font-size-sm: 0.7em;
18
- --badge-font-size-lg: 0.9375em;
19
- --badge-font-weight: var(--font-weight-semibold);
20
- --badge-line-height: 1;
16
+ --vd-badge-font-size: 0.8125em;
17
+ --vd-badge-font-size-sm: 0.7em;
18
+ --vd-badge-font-size-lg: 0.9375em;
19
+ --vd-badge-font-weight: var(--vd-font-weight-semibold);
20
+ --vd-badge-line-height: 1;
21
21
 
22
22
  /* Badge Border Radius */
23
- --badge-border-radius: var(--btn-border-radius-sm);
24
- --badge-pill-border-radius: 50rem;
23
+ --vd-badge-border-radius: var(--vd-btn-border-radius-sm);
24
+ --vd-badge-pill-border-radius: 50rem;
25
25
  }
26
26
 
27
27
  /* Dark Theme Overrides */
@@ -61,15 +61,15 @@
61
61
  /* Base Badge */
62
62
  .vd-badge {
63
63
  display: inline-block;
64
- padding: var(--badge-padding-y) var(--badge-padding-x);
65
- font-size: var(--badge-font-size);
66
- font-weight: var(--badge-font-weight);
67
- line-height: var(--badge-line-height);
64
+ padding: var(--vd-badge-padding-y) var(--vd-badge-padding-x);
65
+ font-size: var(--vd-badge-font-size);
66
+ font-weight: var(--vd-badge-font-weight);
67
+ line-height: var(--vd-badge-line-height);
68
68
  color: var(--vd-color-white);
69
69
  text-align: center;
70
70
  white-space: nowrap;
71
71
  vertical-align: baseline;
72
- border-radius: var(--badge-border-radius);
72
+ border-radius: var(--vd-badge-border-radius);
73
73
  background-color: var(--vd-color-secondary);
74
74
  }
75
75
 
@@ -116,20 +116,20 @@
116
116
 
117
117
  /* Badge Sizes */
118
118
  .vd-badge-sm {
119
- padding: var(--badge-padding-y-sm) var(--badge-padding-x-sm);
120
- font-size: var(--badge-font-size-sm);
119
+ padding: var(--vd-badge-padding-y-sm) var(--vd-badge-padding-x-sm);
120
+ font-size: var(--vd-badge-font-size-sm);
121
121
  }
122
122
 
123
123
  .vd-badge-lg {
124
- padding: var(--badge-padding-y-lg) var(--badge-padding-x-lg);
125
- font-size: var(--badge-font-size-lg);
124
+ padding: var(--vd-badge-padding-y-lg) var(--vd-badge-padding-x-lg);
125
+ font-size: var(--vd-badge-font-size-lg);
126
126
  }
127
127
 
128
128
  /* Badge Styles */
129
129
  .vd-badge-pill {
130
- padding-right: var(--badge-padding-x);
131
- padding-left: var(--badge-padding-x);
132
- border-radius: var(--badge-pill-border-radius);
130
+ padding-right: var(--vd-badge-padding-x);
131
+ padding-left: var(--vd-badge-padding-x);
132
+ border-radius: var(--vd-badge-pill-border-radius);
133
133
  }
134
134
 
135
135
  .vd-badge-outlined {