vanduo-framework 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +205 -0
  3. package/css/components/alerts.css +224 -0
  4. package/css/components/avatar.css +275 -0
  5. package/css/components/badges.css +230 -0
  6. package/css/components/breadcrumbs.css +146 -0
  7. package/css/components/button-group.css +82 -0
  8. package/css/components/buttons.css +530 -0
  9. package/css/components/cards.css +304 -0
  10. package/css/components/chips.css +259 -0
  11. package/css/components/code-snippet.css +555 -0
  12. package/css/components/collapsible.css +267 -0
  13. package/css/components/collections.css +253 -0
  14. package/css/components/doc-search.css +464 -0
  15. package/css/components/doc-tabs.css +38 -0
  16. package/css/components/draggable.css +317 -0
  17. package/css/components/dropdown.css +266 -0
  18. package/css/components/footer.css +375 -0
  19. package/css/components/forms.css +1774 -0
  20. package/css/components/image-box.css +279 -0
  21. package/css/components/modals.css +285 -0
  22. package/css/components/navbar.css +530 -0
  23. package/css/components/pagination.css +186 -0
  24. package/css/components/preloader.css +340 -0
  25. package/css/components/progress.css +107 -0
  26. package/css/components/sidenav.css +301 -0
  27. package/css/components/skeleton.css +241 -0
  28. package/css/components/spinner.css +144 -0
  29. package/css/components/tabs.css +327 -0
  30. package/css/components/theme-customizer.css +835 -0
  31. package/css/components/toast.css +357 -0
  32. package/css/components/tooltips.css +270 -0
  33. package/css/core/colors.css +1017 -0
  34. package/css/core/fonts.css +266 -0
  35. package/css/core/grid.css +1699 -0
  36. package/css/core/helpers.css +2202 -0
  37. package/css/core/reset.css +128 -0
  38. package/css/core/tokens.css +213 -0
  39. package/css/core/typography.css +405 -0
  40. package/css/core/vd-aliases.css +47 -0
  41. package/css/effects/parallax.css +113 -0
  42. package/css/icons/icons-all.css +23 -0
  43. package/css/icons/icons.css +25 -0
  44. package/css/utilities/media.css +167 -0
  45. package/css/utilities/print.css +111 -0
  46. package/css/utilities/shadow.css +243 -0
  47. package/css/utilities/table.css +381 -0
  48. package/css/utilities/transforms.css +71 -0
  49. package/css/utilities/transitions.css +87 -0
  50. package/css/vanduo.css +80 -0
  51. package/dist/build-info.json +6 -0
  52. package/dist/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  53. package/dist/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  54. package/dist/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  55. package/dist/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  56. package/dist/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  57. package/dist/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  58. package/dist/fonts/inter/inter-bold.woff2 +0 -0
  59. package/dist/fonts/inter/inter-medium.woff2 +0 -0
  60. package/dist/fonts/inter/inter-regular.woff2 +0 -0
  61. package/dist/fonts/inter/inter-semibold.woff2 +0 -0
  62. package/dist/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  63. package/dist/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  64. package/dist/fonts/open-sans/open-sans-bold.woff2 +0 -0
  65. package/dist/fonts/open-sans/open-sans-medium.woff2 +0 -0
  66. package/dist/fonts/open-sans/open-sans-regular.woff2 +0 -0
  67. package/dist/fonts/rubik/rubik-bold.woff2 +0 -0
  68. package/dist/fonts/rubik/rubik-medium.woff2 +0 -0
  69. package/dist/fonts/rubik/rubik-regular.woff2 +0 -0
  70. package/dist/fonts/source-sans/source-sans-bold.woff2 +0 -0
  71. package/dist/fonts/source-sans/source-sans-regular.woff2 +0 -0
  72. package/dist/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  73. package/dist/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  74. package/dist/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  75. package/dist/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  76. package/dist/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  77. package/dist/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  78. package/dist/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  79. package/dist/icons/phosphor/LICENSE +21 -0
  80. package/dist/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  81. package/dist/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  82. package/dist/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  83. package/dist/icons/phosphor/bold/style.css +4627 -0
  84. package/dist/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  85. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  86. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  87. package/dist/icons/phosphor/duotone/style.css +12115 -0
  88. package/dist/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  89. package/dist/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  90. package/dist/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  91. package/dist/icons/phosphor/fill/style.css +4627 -0
  92. package/dist/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  93. package/dist/icons/phosphor/light/Phosphor-Light.woff +0 -0
  94. package/dist/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  95. package/dist/icons/phosphor/light/style.css +4627 -0
  96. package/dist/icons/phosphor/regular/Phosphor.ttf +0 -0
  97. package/dist/icons/phosphor/regular/Phosphor.woff +0 -0
  98. package/dist/icons/phosphor/regular/Phosphor.woff2 +0 -0
  99. package/dist/icons/phosphor/regular/style.css +4627 -0
  100. package/dist/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  101. package/dist/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  102. package/dist/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  103. package/dist/icons/phosphor/thin/style.css +4627 -0
  104. package/dist/vanduo.cjs.js +5569 -0
  105. package/dist/vanduo.cjs.js.map +7 -0
  106. package/dist/vanduo.cjs.min.js +48 -0
  107. package/dist/vanduo.cjs.min.js.map +7 -0
  108. package/dist/vanduo.css +60666 -0
  109. package/dist/vanduo.css.map +1 -0
  110. package/dist/vanduo.esm.js +5548 -0
  111. package/dist/vanduo.esm.js.map +7 -0
  112. package/dist/vanduo.esm.min.js +48 -0
  113. package/dist/vanduo.esm.min.js.map +7 -0
  114. package/dist/vanduo.js +5545 -0
  115. package/dist/vanduo.js.map +7 -0
  116. package/dist/vanduo.min.css +2 -0
  117. package/dist/vanduo.min.css.map +1 -0
  118. package/dist/vanduo.min.js +48 -0
  119. package/dist/vanduo.min.js.map +7 -0
  120. package/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  121. package/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  122. package/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  123. package/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  124. package/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  125. package/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  126. package/fonts/inter/inter-bold.woff2 +0 -0
  127. package/fonts/inter/inter-medium.woff2 +0 -0
  128. package/fonts/inter/inter-regular.woff2 +0 -0
  129. package/fonts/inter/inter-semibold.woff2 +0 -0
  130. package/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  131. package/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  132. package/fonts/open-sans/open-sans-bold.woff2 +0 -0
  133. package/fonts/open-sans/open-sans-medium.woff2 +0 -0
  134. package/fonts/open-sans/open-sans-regular.woff2 +0 -0
  135. package/fonts/rubik/rubik-bold.woff2 +0 -0
  136. package/fonts/rubik/rubik-medium.woff2 +0 -0
  137. package/fonts/rubik/rubik-regular.woff2 +0 -0
  138. package/fonts/source-sans/source-sans-bold.woff2 +0 -0
  139. package/fonts/source-sans/source-sans-regular.woff2 +0 -0
  140. package/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  141. package/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  142. package/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  143. package/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  144. package/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  145. package/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  146. package/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  147. package/icons/phosphor/LICENSE +21 -0
  148. package/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  149. package/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  150. package/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  151. package/icons/phosphor/bold/style.css +4627 -0
  152. package/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  153. package/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  154. package/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  155. package/icons/phosphor/duotone/style.css +12115 -0
  156. package/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  157. package/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  158. package/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  159. package/icons/phosphor/fill/style.css +4627 -0
  160. package/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  161. package/icons/phosphor/light/Phosphor-Light.woff +0 -0
  162. package/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  163. package/icons/phosphor/light/style.css +4627 -0
  164. package/icons/phosphor/regular/Phosphor.ttf +0 -0
  165. package/icons/phosphor/regular/Phosphor.woff +0 -0
  166. package/icons/phosphor/regular/Phosphor.woff2 +0 -0
  167. package/icons/phosphor/regular/style.css +4627 -0
  168. package/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  169. package/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  170. package/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  171. package/icons/phosphor/thin/style.css +4627 -0
  172. package/js/components/code-snippet.js +639 -0
  173. package/js/components/collapsible.js +226 -0
  174. package/js/components/doc-search.js +936 -0
  175. package/js/components/draggable.js +725 -0
  176. package/js/components/dropdown.js +362 -0
  177. package/js/components/font-switcher.js +253 -0
  178. package/js/components/grid.js +279 -0
  179. package/js/components/image-box.js +372 -0
  180. package/js/components/modals.js +367 -0
  181. package/js/components/navbar.js +264 -0
  182. package/js/components/pagination.js +286 -0
  183. package/js/components/parallax.js +216 -0
  184. package/js/components/preloader.js +183 -0
  185. package/js/components/select.js +444 -0
  186. package/js/components/sidenav.js +303 -0
  187. package/js/components/tabs.js +303 -0
  188. package/js/components/theme-customizer.js +784 -0
  189. package/js/components/theme-switcher.js +183 -0
  190. package/js/components/toast.js +343 -0
  191. package/js/components/tooltips.js +306 -0
  192. package/js/index.js +52 -0
  193. package/js/utils/helpers.js +306 -0
  194. package/js/utils/lifecycle.js +135 -0
  195. package/js/vanduo.js +120 -0
  196. package/package.json +78 -0
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Vanduo Framework - Collapsible
3
+ * Collapsible/Accordion component for expandable content
4
+ */
5
+
6
+ :root {
7
+ /* Collapsible Colors */
8
+ --collapsible-border-color: var(--border-color);
9
+ --collapsible-bg: var(--color-white);
10
+ --collapsible-header-bg: var(--bg-secondary);
11
+ --collapsible-header-bg-hover: var(--bg-secondary);
12
+ --collapsible-header-bg-active: var(--bg-secondary);
13
+
14
+ /* Collapsible Spacing (Fibonacci) */
15
+ --collapsible-padding-y: 0.8125rem; /* 13px - fib */
16
+ --collapsible-padding-x: 1.3125rem; /* 21px - fib (21/13 ~ phi) */
17
+ --collapsible-body-padding: 1.3125rem; /* 21px - fib */
18
+
19
+ /* Collapsible Transitions */
20
+ --collapsible-transition: height var(--transition-duration-slow) var(--transition-ease),
21
+ opacity var(--transition-duration-base) var(--transition-ease);
22
+ }
23
+
24
+ /* Dark Theme Overrides */
25
+ [data-theme="dark"] {
26
+ --collapsible-bg: var(--bg-secondary);
27
+ --collapsible-header-bg: var(--bg-primary);
28
+ --collapsible-header-bg-hover: var(--bg-primary);
29
+ --collapsible-header-bg-active: var(--bg-primary);
30
+ }
31
+
32
+ @media (prefers-color-scheme: dark) {
33
+ :root:not([data-theme]) {
34
+ --collapsible-bg: var(--bg-secondary);
35
+ --collapsible-header-bg: var(--bg-primary);
36
+ --collapsible-header-bg-hover: var(--bg-primary);
37
+ --collapsible-header-bg-active: var(--bg-primary);
38
+ }
39
+ }
40
+
41
+ /* Base Collapsible Container */
42
+ .vd-collapsible,
43
+ .accordion {
44
+ display: flex;
45
+ flex-direction: column;
46
+ width: 100%;
47
+ }
48
+
49
+ /* Collapsible Item */
50
+ .vd-collapsible-item,
51
+ .accordion-item {
52
+ border: 1px solid var(--collapsible-border-color);
53
+ border-radius: var(--btn-border-radius);
54
+ margin-bottom: 0.5rem;
55
+ overflow: hidden;
56
+ background-color: var(--collapsible-bg);
57
+ }
58
+
59
+ .vd-collapsible-item:last-child,
60
+ .accordion-item:last-child {
61
+ margin-bottom: 0;
62
+ }
63
+
64
+ /* Collapsible Header */
65
+ .vd-collapsible-header,
66
+ .accordion-header {
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ padding: var(--collapsible-padding-y) var(--collapsible-padding-x);
71
+ background-color: var(--collapsible-header-bg);
72
+ cursor: pointer;
73
+ user-select: none;
74
+ transition: var(--transition-bg);
75
+ border: none;
76
+ width: 100%;
77
+ text-align: left;
78
+ font-family: var(--font-family-sans);
79
+ font-size: var(--font-size-base);
80
+ font-weight: var(--font-weight-medium);
81
+ color: var(--text-primary);
82
+ }
83
+
84
+ .vd-collapsible-header:hover,
85
+ .accordion-header:hover {
86
+ background-color: var(--collapsible-header-bg-hover);
87
+ }
88
+
89
+ .vd-collapsible-header:focus,
90
+ .accordion-header:focus {
91
+ outline: 2px solid var(--input-focus-border-color);
92
+ outline-offset: -2px;
93
+ }
94
+
95
+ .vd-collapsible-item.is-open .vd-collapsible-header,
96
+ .accordion-item.is-open .accordion-header {
97
+ background-color: var(--collapsible-header-bg-active);
98
+ font-weight: var(--font-weight-semibold);
99
+ }
100
+
101
+ /* Collapsible Trigger */
102
+ .vd-collapsible-trigger,
103
+ .accordion-trigger {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ width: 100%;
108
+ font-family: var(--font-family-sans);
109
+ font-size: var(--font-size-base);
110
+ font-weight: var(--font-weight-medium);
111
+ color: var(--text-primary);
112
+ text-decoration: none;
113
+ background: none;
114
+ border: none;
115
+ padding: 0;
116
+ cursor: pointer;
117
+ }
118
+
119
+ .vd-collapsible-trigger:focus,
120
+ .accordion-trigger:focus {
121
+ outline: none;
122
+ }
123
+
124
+ /* Collapsible Icon */
125
+ .vd-collapsible-icon,
126
+ .accordion-icon {
127
+ display: inline-flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ width: 1.5rem;
131
+ height: 1.5rem;
132
+ margin-left: 0.75rem;
133
+ flex-shrink: 0;
134
+ transition: transform var(--transition-duration-base) var(--transition-ease);
135
+ }
136
+
137
+ .vd-collapsible-icon::before,
138
+ .accordion-icon::before {
139
+ content: '▼';
140
+ font-size: 0.75rem;
141
+ color: var(--text-secondary);
142
+ transition: transform var(--transition-duration-base) var(--transition-ease);
143
+ }
144
+
145
+ .vd-collapsible-item.is-open .vd-collapsible-icon::before,
146
+ .accordion-item.is-open .accordion-icon::before {
147
+ transform: rotate(180deg);
148
+ }
149
+
150
+ /* Collapsible Body */
151
+ .vd-collapsible-body,
152
+ .accordion-body {
153
+ max-height: 0;
154
+ overflow: hidden;
155
+ transition: var(--collapsible-transition);
156
+ opacity: 0;
157
+ }
158
+
159
+ .vd-collapsible-item.is-open .vd-collapsible-body,
160
+ .accordion-item.is-open .accordion-body {
161
+ max-height: 5000px;
162
+ opacity: 1;
163
+ padding: var(--collapsible-body-padding);
164
+ border-top: 1px solid var(--collapsible-border-color);
165
+ }
166
+
167
+ /* Collapsible Content */
168
+ .vd-collapsible-content,
169
+ .accordion-content {
170
+ color: var(--text-primary);
171
+ line-height: var(--line-height-normal);
172
+ }
173
+
174
+ /* Collapsible States */
175
+ .vd-collapsible-item.is-active,
176
+ .accordion-item.is-active {
177
+ border-color: var(--color-primary);
178
+ }
179
+
180
+ .vd-collapsible-item.is-active .vd-collapsible-header,
181
+ .accordion-item.is-active .accordion-header {
182
+ background-color: var(--color-primary-alpha-10);
183
+ color: var(--color-primary);
184
+ }
185
+
186
+ /* Collapsible Variants - Bordered */
187
+ .vd-collapsible-bordered .vd-collapsible-item,
188
+ .accordion-bordered .accordion-item {
189
+ border: 1px solid var(--collapsible-border-color);
190
+ border-radius: 0;
191
+ margin-bottom: -1px;
192
+ }
193
+
194
+ .vd-collapsible-bordered .vd-collapsible-item:first-child,
195
+ .accordion-bordered .accordion-item:first-child {
196
+ border-top-left-radius: var(--btn-border-radius);
197
+ border-top-right-radius: var(--btn-border-radius);
198
+ }
199
+
200
+ .vd-collapsible-bordered .vd-collapsible-item:last-child,
201
+ .accordion-bordered .accordion-item:last-child {
202
+ border-bottom-left-radius: var(--btn-border-radius);
203
+ border-bottom-right-radius: var(--btn-border-radius);
204
+ margin-bottom: 0;
205
+ }
206
+
207
+ /* Collapsible Variants - Flush (no borders) */
208
+ .vd-collapsible-flush .vd-collapsible-item,
209
+ .accordion-flush .accordion-item {
210
+ border: none;
211
+ border-radius: 0;
212
+ border-bottom: 1px solid var(--collapsible-border-color);
213
+ }
214
+
215
+ .vd-collapsible-flush .vd-collapsible-item:last-child,
216
+ .accordion-flush .accordion-item:last-child {
217
+ border-bottom: none;
218
+ }
219
+
220
+ /* Collapsible Sizes */
221
+ .vd-collapsible-sm .vd-collapsible-header,
222
+ .accordion-sm .accordion-header {
223
+ padding: calc(var(--collapsible-padding-y) * 0.75) calc(var(--collapsible-padding-x) * 0.75);
224
+ font-size: var(--font-size-sm);
225
+ }
226
+
227
+ .vd-collapsible-sm .vd-collapsible-body,
228
+ .accordion-sm .accordion-body {
229
+ padding: calc(var(--collapsible-body-padding) * 0.75);
230
+ }
231
+
232
+ .vd-collapsible-lg .vd-collapsible-header,
233
+ .accordion-lg .accordion-header {
234
+ padding: calc(var(--collapsible-padding-y) * 1.25) calc(var(--collapsible-padding-x) * 1.25);
235
+ font-size: var(--font-size-lg);
236
+ }
237
+
238
+ .vd-collapsible-lg .vd-collapsible-body,
239
+ .accordion-lg .accordion-body {
240
+ padding: calc(var(--collapsible-body-padding) * 1.25);
241
+ }
242
+
243
+ /* Accordion Mode (single open) */
244
+ .accordion .accordion-item.is-open ~ .accordion-item.is-open .accordion-body {
245
+ max-height: 0;
246
+ opacity: 0;
247
+ padding: 0;
248
+ }
249
+
250
+ .accordion .accordion-item.is-open ~ .accordion-item.is-open {
251
+ border-top: 1px solid var(--collapsible-border-color);
252
+ }
253
+
254
+ /* Responsive Behavior */
255
+ @media (max-width: 575.98px) {
256
+ .vd-collapsible-header,
257
+ .accordion-header {
258
+ padding: calc(var(--collapsible-padding-y) * 0.875) var(--collapsible-padding-x);
259
+ font-size: var(--font-size-sm);
260
+ }
261
+
262
+ .vd-collapsible-body,
263
+ .accordion-body {
264
+ padding: var(--collapsible-padding-x);
265
+ }
266
+ }
267
+
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Vanduo Framework - Collections
3
+ * List/item collection component
4
+ */
5
+
6
+ :root {
7
+ /* Collection Colors */
8
+ --collection-bg: var(--color-white);
9
+ --collection-item-bg: var(--color-white);
10
+ --collection-item-bg-hover: var(--bg-secondary);
11
+ --collection-item-bg-active: var(--color-primary-alpha-10);
12
+ --collection-border-color: var(--border-color);
13
+
14
+ /* Collection Spacing (Fibonacci) */
15
+ --collection-padding-y: 0;
16
+ --collection-padding-x: 0;
17
+ --collection-item-padding-y: 0.8125rem; /* 13px - fib */
18
+ --collection-item-padding-x: 1.3125rem; /* 21px - fib */
19
+ --collection-item-padding-y-sm: 0.5rem; /* 8px - fib */
20
+ --collection-item-padding-x-sm: 0.8125rem; /* 13px - fib */
21
+ --collection-item-padding-y-lg: 1.3125rem; /* 21px - fib */
22
+ --collection-item-padding-x-lg: 2.125rem; /* 34px - fib */
23
+
24
+ /* Collection Avatar (Fibonacci) */
25
+ --collection-avatar-size: 2.125rem; /* 34px - fib */
26
+ --collection-avatar-size-sm: 1.3125rem; /* 21px - fib */
27
+ --collection-avatar-size-lg: 3.4375rem; /* 55px - fib */
28
+ }
29
+
30
+ /* Dark Theme Overrides */
31
+ [data-theme="dark"] {
32
+ --collection-bg: var(--bg-secondary);
33
+ --collection-item-bg: var(--bg-secondary);
34
+ --collection-item-bg-hover: var(--bg-primary);
35
+ }
36
+
37
+ @media (prefers-color-scheme: dark) {
38
+ :root:not([data-theme]) {
39
+ --collection-bg: var(--bg-secondary);
40
+ --collection-item-bg: var(--bg-secondary);
41
+ --collection-item-bg-hover: var(--bg-primary);
42
+ }
43
+ }
44
+
45
+ /* Base Collection */
46
+ .vd-collection {
47
+ display: flex;
48
+ flex-direction: column;
49
+ padding: var(--collection-padding-y) var(--collection-padding-x);
50
+ margin-bottom: 0;
51
+ list-style: none;
52
+ background-color: var(--collection-bg);
53
+ }
54
+
55
+ /* Collection Item */
56
+ .vd-collection-item {
57
+ display: flex;
58
+ align-items: center;
59
+ padding: var(--collection-item-padding-y) var(--collection-item-padding-x);
60
+ margin-bottom: 0;
61
+ color: var(--text-primary);
62
+ text-decoration: none;
63
+ background-color: var(--collection-item-bg);
64
+ border-bottom: 1px solid var(--collection-border-color);
65
+ transition: var(--transition-bg);
66
+ }
67
+
68
+ .vd-collection-item:last-child {
69
+ border-bottom: none;
70
+ }
71
+
72
+ .vd-collection-item:hover {
73
+ background-color: var(--collection-item-bg-hover);
74
+ text-decoration: none;
75
+ }
76
+
77
+ .vd-collection-item.active {
78
+ background-color: var(--collection-item-bg-active);
79
+ color: var(--color-primary);
80
+ font-weight: var(--font-weight-medium);
81
+ }
82
+
83
+ .vd-collection-item.disabled {
84
+ opacity: 0.6;
85
+ cursor: not-allowed;
86
+ pointer-events: none;
87
+ }
88
+
89
+ /* Collection Avatar */
90
+ .vd-collection-avatar {
91
+ flex-shrink: 0;
92
+ width: var(--collection-avatar-size);
93
+ height: var(--collection-avatar-size);
94
+ margin-right: 1rem;
95
+ border-radius: 50%;
96
+ background-color: var(--bg-secondary);
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ overflow: hidden;
101
+ }
102
+
103
+ .vd-collection-avatar img {
104
+ width: 100%;
105
+ height: 100%;
106
+ object-fit: cover;
107
+ }
108
+
109
+ .vd-collection-avatar-icon {
110
+ font-size: 1.25rem;
111
+ color: var(--text-secondary);
112
+ }
113
+
114
+ /* Collection Content */
115
+ .vd-collection-content {
116
+ flex: 1 1 auto;
117
+ min-width: 0;
118
+ }
119
+
120
+ .vd-collection-title {
121
+ margin: 0 0 0.25rem 0;
122
+ font-size: var(--font-size-base);
123
+ font-weight: var(--font-weight-medium);
124
+ line-height: var(--line-height-normal);
125
+ color: var(--text-primary);
126
+ }
127
+
128
+ .vd-collection-item.active .vd-collection-title {
129
+ color: var(--color-primary);
130
+ }
131
+
132
+ .vd-collection-text {
133
+ margin: 0;
134
+ font-size: var(--font-size-sm);
135
+ line-height: var(--line-height-normal);
136
+ color: var(--text-secondary);
137
+ }
138
+
139
+ .vd-collection-item-secondary {
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: 0.25rem;
143
+ }
144
+
145
+ .vd-collection-item-secondary .vd-collection-title {
146
+ margin-bottom: 0;
147
+ }
148
+
149
+ /* Collection Action */
150
+ .vd-collection-action {
151
+ flex-shrink: 0;
152
+ margin-left: 1rem;
153
+ display: flex;
154
+ align-items: center;
155
+ }
156
+
157
+ /* Collection Divider */
158
+ .vd-collection-divider {
159
+ height: 0;
160
+ margin: 0.5rem 0;
161
+ overflow: hidden;
162
+ border-top: 1px solid var(--collection-border-color);
163
+ }
164
+
165
+ /* Collection Header */
166
+ .vd-collection-header {
167
+ padding: var(--collection-item-padding-y) var(--collection-item-padding-x);
168
+ margin-bottom: 0;
169
+ font-size: var(--font-size-sm);
170
+ font-weight: var(--font-weight-semibold);
171
+ color: var(--text-muted);
172
+ text-transform: uppercase;
173
+ letter-spacing: 0.05em;
174
+ background-color: var(--bg-secondary);
175
+ border-bottom: 1px solid var(--collection-border-color);
176
+ }
177
+
178
+ /* Collection Variants */
179
+ .vd-collection-bordered {
180
+ border: 1px solid var(--collection-border-color);
181
+ border-radius: var(--btn-border-radius);
182
+ overflow: hidden;
183
+ }
184
+
185
+ .vd-collection-bordered .vd-collection-item {
186
+ border-bottom: 1px solid var(--collection-border-color);
187
+ }
188
+
189
+ .vd-collection-bordered .vd-collection-item:last-child {
190
+ border-bottom: none;
191
+ }
192
+
193
+ .vd-collection-stripped .vd-collection-item:nth-child(odd) {
194
+ background-color: var(--bg-secondary);
195
+ }
196
+
197
+ .vd-collection-stripped .vd-collection-item:nth-child(odd):hover {
198
+ background-color: var(--collection-item-bg-hover);
199
+ }
200
+
201
+ .vd-collection-hoverable .vd-collection-item {
202
+ cursor: pointer;
203
+ }
204
+
205
+ /* Collection Sizes */
206
+ .vd-collection-sm .vd-collection-item {
207
+ padding: var(--collection-item-padding-y-sm) var(--collection-item-padding-x-sm);
208
+ }
209
+
210
+ .vd-collection-sm .vd-collection-avatar {
211
+ width: var(--collection-avatar-size-sm);
212
+ height: var(--collection-avatar-size-sm);
213
+ }
214
+
215
+ .vd-collection-sm .vd-collection-title {
216
+ font-size: var(--font-size-sm);
217
+ }
218
+
219
+ .vd-collection-sm .vd-collection-text {
220
+ font-size: var(--font-size-xs);
221
+ }
222
+
223
+ .vd-collection-lg .vd-collection-item {
224
+ padding: var(--collection-item-padding-y-lg) var(--collection-item-padding-x-lg);
225
+ }
226
+
227
+ .vd-collection-lg .vd-collection-avatar {
228
+ width: var(--collection-avatar-size-lg);
229
+ height: var(--collection-avatar-size-lg);
230
+ }
231
+
232
+ .vd-collection-lg .vd-collection-title {
233
+ font-size: var(--font-size-lg);
234
+ }
235
+
236
+ .vd-collection-lg .vd-collection-text {
237
+ font-size: var(--font-size-base);
238
+ }
239
+
240
+ /* Responsive Behavior */
241
+ @media (max-width: 575.98px) {
242
+ .vd-collection-item {
243
+ flex-wrap: wrap;
244
+ }
245
+
246
+ .vd-collection-action {
247
+ width: 100%;
248
+ margin-left: 0;
249
+ margin-top: 0.5rem;
250
+ padding-left: calc(var(--collection-avatar-size) + 1rem);
251
+ }
252
+ }
253
+