vanduo-framework 1.1.8-docs-update

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +216 -0
  3. package/css/components/alerts.css +224 -0
  4. package/css/components/avatar.css +275 -0
  5. package/css/components/badges.css +230 -0
  6. package/css/components/breadcrumbs.css +146 -0
  7. package/css/components/button-group.css +82 -0
  8. package/css/components/buttons.css +530 -0
  9. package/css/components/cards.css +304 -0
  10. package/css/components/chips.css +259 -0
  11. package/css/components/code-snippet.css +555 -0
  12. package/css/components/collapsible.css +267 -0
  13. package/css/components/collections.css +253 -0
  14. package/css/components/doc-search.css +464 -0
  15. package/css/components/doc-tabs.css +38 -0
  16. package/css/components/draggable.css +317 -0
  17. package/css/components/dropdown.css +266 -0
  18. package/css/components/footer.css +375 -0
  19. package/css/components/forms.css +1774 -0
  20. package/css/components/image-box.css +279 -0
  21. package/css/components/modals.css +285 -0
  22. package/css/components/navbar.css +530 -0
  23. package/css/components/pagination.css +186 -0
  24. package/css/components/preloader.css +340 -0
  25. package/css/components/progress.css +107 -0
  26. package/css/components/sidenav.css +301 -0
  27. package/css/components/skeleton.css +241 -0
  28. package/css/components/spinner.css +144 -0
  29. package/css/components/tabs.css +327 -0
  30. package/css/components/theme-customizer.css +835 -0
  31. package/css/components/toast.css +357 -0
  32. package/css/components/tooltips.css +270 -0
  33. package/css/core/colors.css +1017 -0
  34. package/css/core/fonts.css +266 -0
  35. package/css/core/grid.css +1699 -0
  36. package/css/core/helpers.css +2202 -0
  37. package/css/core/reset.css +128 -0
  38. package/css/core/tokens.css +213 -0
  39. package/css/core/typography.css +405 -0
  40. package/css/core/vd-aliases.css +47 -0
  41. package/css/effects/parallax.css +113 -0
  42. package/css/icons/icons-all.css +23 -0
  43. package/css/icons/icons.css +25 -0
  44. package/css/utilities/media.css +167 -0
  45. package/css/utilities/print.css +111 -0
  46. package/css/utilities/shadow.css +243 -0
  47. package/css/utilities/table.css +381 -0
  48. package/css/utilities/transforms.css +71 -0
  49. package/css/utilities/transitions.css +87 -0
  50. package/css/vanduo.css +80 -0
  51. package/dist/build-info.json +6 -0
  52. package/dist/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  53. package/dist/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  54. package/dist/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  55. package/dist/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  56. package/dist/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  57. package/dist/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  58. package/dist/fonts/inter/inter-bold.woff2 +0 -0
  59. package/dist/fonts/inter/inter-medium.woff2 +0 -0
  60. package/dist/fonts/inter/inter-regular.woff2 +0 -0
  61. package/dist/fonts/inter/inter-semibold.woff2 +0 -0
  62. package/dist/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  63. package/dist/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  64. package/dist/fonts/open-sans/open-sans-bold.woff2 +0 -0
  65. package/dist/fonts/open-sans/open-sans-medium.woff2 +0 -0
  66. package/dist/fonts/open-sans/open-sans-regular.woff2 +0 -0
  67. package/dist/fonts/rubik/rubik-bold.woff2 +0 -0
  68. package/dist/fonts/rubik/rubik-medium.woff2 +0 -0
  69. package/dist/fonts/rubik/rubik-regular.woff2 +0 -0
  70. package/dist/fonts/source-sans/source-sans-bold.woff2 +0 -0
  71. package/dist/fonts/source-sans/source-sans-regular.woff2 +0 -0
  72. package/dist/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  73. package/dist/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  74. package/dist/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  75. package/dist/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  76. package/dist/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  77. package/dist/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  78. package/dist/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  79. package/dist/icons/phosphor/LICENSE +21 -0
  80. package/dist/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  81. package/dist/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  82. package/dist/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  83. package/dist/icons/phosphor/bold/style.css +4627 -0
  84. package/dist/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  85. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  86. package/dist/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  87. package/dist/icons/phosphor/duotone/style.css +12115 -0
  88. package/dist/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  89. package/dist/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  90. package/dist/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  91. package/dist/icons/phosphor/fill/style.css +4627 -0
  92. package/dist/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  93. package/dist/icons/phosphor/light/Phosphor-Light.woff +0 -0
  94. package/dist/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  95. package/dist/icons/phosphor/light/style.css +4627 -0
  96. package/dist/icons/phosphor/regular/Phosphor.ttf +0 -0
  97. package/dist/icons/phosphor/regular/Phosphor.woff +0 -0
  98. package/dist/icons/phosphor/regular/Phosphor.woff2 +0 -0
  99. package/dist/icons/phosphor/regular/style.css +4627 -0
  100. package/dist/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  101. package/dist/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  102. package/dist/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  103. package/dist/icons/phosphor/thin/style.css +4627 -0
  104. package/dist/vanduo.cjs.js +5569 -0
  105. package/dist/vanduo.cjs.js.map +7 -0
  106. package/dist/vanduo.cjs.min.js +48 -0
  107. package/dist/vanduo.cjs.min.js.map +7 -0
  108. package/dist/vanduo.css +60666 -0
  109. package/dist/vanduo.css.map +1 -0
  110. package/dist/vanduo.esm.js +5548 -0
  111. package/dist/vanduo.esm.js.map +7 -0
  112. package/dist/vanduo.esm.min.js +48 -0
  113. package/dist/vanduo.esm.min.js.map +7 -0
  114. package/dist/vanduo.js +5545 -0
  115. package/dist/vanduo.js.map +7 -0
  116. package/dist/vanduo.min.css +2 -0
  117. package/dist/vanduo.min.css.map +1 -0
  118. package/dist/vanduo.min.js +48 -0
  119. package/dist/vanduo.min.js.map +7 -0
  120. package/fonts/fira-sans/fira-sans-bold.woff2 +0 -0
  121. package/fonts/fira-sans/fira-sans-medium.woff2 +0 -0
  122. package/fonts/fira-sans/fira-sans-regular.woff2 +0 -0
  123. package/fonts/ibm-plex/ibm-plex-sans-bold.woff2 +0 -0
  124. package/fonts/ibm-plex/ibm-plex-sans-medium.woff2 +0 -0
  125. package/fonts/ibm-plex/ibm-plex-sans-regular.woff2 +0 -0
  126. package/fonts/inter/inter-bold.woff2 +0 -0
  127. package/fonts/inter/inter-medium.woff2 +0 -0
  128. package/fonts/inter/inter-regular.woff2 +0 -0
  129. package/fonts/inter/inter-semibold.woff2 +0 -0
  130. package/fonts/jetbrains-mono/jetbrains-mono-bold.woff2 +0 -0
  131. package/fonts/jetbrains-mono/jetbrains-mono-regular.woff2 +0 -0
  132. package/fonts/open-sans/open-sans-bold.woff2 +0 -0
  133. package/fonts/open-sans/open-sans-medium.woff2 +0 -0
  134. package/fonts/open-sans/open-sans-regular.woff2 +0 -0
  135. package/fonts/rubik/rubik-bold.woff2 +0 -0
  136. package/fonts/rubik/rubik-medium.woff2 +0 -0
  137. package/fonts/rubik/rubik-regular.woff2 +0 -0
  138. package/fonts/source-sans/source-sans-bold.woff2 +0 -0
  139. package/fonts/source-sans/source-sans-regular.woff2 +0 -0
  140. package/fonts/source-sans/source-sans-semibold.woff2 +0 -0
  141. package/fonts/titillium-web/titillium-web-bold.woff2 +0 -0
  142. package/fonts/titillium-web/titillium-web-regular.woff2 +0 -0
  143. package/fonts/titillium-web/titillium-web-semibold.woff2 +0 -0
  144. package/fonts/ubuntu/ubuntu-bold.woff2 +0 -0
  145. package/fonts/ubuntu/ubuntu-medium.woff2 +0 -0
  146. package/fonts/ubuntu/ubuntu-regular.woff2 +0 -0
  147. package/icons/phosphor/LICENSE +21 -0
  148. package/icons/phosphor/bold/Phosphor-Bold.ttf +0 -0
  149. package/icons/phosphor/bold/Phosphor-Bold.woff +0 -0
  150. package/icons/phosphor/bold/Phosphor-Bold.woff2 +0 -0
  151. package/icons/phosphor/bold/style.css +4627 -0
  152. package/icons/phosphor/duotone/Phosphor-Duotone.ttf +0 -0
  153. package/icons/phosphor/duotone/Phosphor-Duotone.woff +0 -0
  154. package/icons/phosphor/duotone/Phosphor-Duotone.woff2 +0 -0
  155. package/icons/phosphor/duotone/style.css +12115 -0
  156. package/icons/phosphor/fill/Phosphor-Fill.ttf +0 -0
  157. package/icons/phosphor/fill/Phosphor-Fill.woff +0 -0
  158. package/icons/phosphor/fill/Phosphor-Fill.woff2 +0 -0
  159. package/icons/phosphor/fill/style.css +4627 -0
  160. package/icons/phosphor/light/Phosphor-Light.ttf +0 -0
  161. package/icons/phosphor/light/Phosphor-Light.woff +0 -0
  162. package/icons/phosphor/light/Phosphor-Light.woff2 +0 -0
  163. package/icons/phosphor/light/style.css +4627 -0
  164. package/icons/phosphor/regular/Phosphor.ttf +0 -0
  165. package/icons/phosphor/regular/Phosphor.woff +0 -0
  166. package/icons/phosphor/regular/Phosphor.woff2 +0 -0
  167. package/icons/phosphor/regular/style.css +4627 -0
  168. package/icons/phosphor/thin/Phosphor-Thin.ttf +0 -0
  169. package/icons/phosphor/thin/Phosphor-Thin.woff +0 -0
  170. package/icons/phosphor/thin/Phosphor-Thin.woff2 +0 -0
  171. package/icons/phosphor/thin/style.css +4627 -0
  172. package/js/components/code-snippet.js +639 -0
  173. package/js/components/collapsible.js +226 -0
  174. package/js/components/doc-search.js +936 -0
  175. package/js/components/draggable.js +725 -0
  176. package/js/components/dropdown.js +362 -0
  177. package/js/components/font-switcher.js +253 -0
  178. package/js/components/grid.js +279 -0
  179. package/js/components/image-box.js +372 -0
  180. package/js/components/modals.js +367 -0
  181. package/js/components/navbar.js +264 -0
  182. package/js/components/pagination.js +286 -0
  183. package/js/components/parallax.js +216 -0
  184. package/js/components/preloader.js +183 -0
  185. package/js/components/select.js +444 -0
  186. package/js/components/sidenav.js +303 -0
  187. package/js/components/tabs.js +303 -0
  188. package/js/components/theme-customizer.js +784 -0
  189. package/js/components/theme-switcher.js +183 -0
  190. package/js/components/toast.js +343 -0
  191. package/js/components/tooltips.js +306 -0
  192. package/js/index.js +52 -0
  193. package/js/utils/helpers.js +306 -0
  194. package/js/utils/lifecycle.js +135 -0
  195. package/js/vanduo.js +120 -0
  196. package/package.json +78 -0
@@ -0,0 +1,555 @@
1
+ /**
2
+ * Vanduo Framework - Code Snippet Component
3
+ * Copyable code blocks with tabs and syntax highlighting
4
+ */
5
+
6
+ :root {
7
+ /* Code Snippet Sizing - Fibonacci */
8
+ --code-padding-x: 1.3125rem; /* 21px - fib */
9
+ --code-padding-y: 0.8125rem; /* 13px - fib */
10
+ --code-border-radius: var(--radius-fib-5, 8px);
11
+ --code-tab-gap: 0.5rem; /* 8px - fib */
12
+ --code-header-height: 2.75rem; /* 44px - touch target */
13
+ --code-line-height: 1.618; /* Golden ratio */
14
+ --code-font-size: 0.875rem; /* 14px */
15
+
16
+ /* Code Snippet Colors - Light Mode */
17
+ --code-bg: var(--color-gray-50, #f8fafc);
18
+ --code-header-bg: var(--color-gray-100, #f1f5f9);
19
+ --code-border: var(--border-color, #e2e8f0);
20
+ --code-text: var(--text-primary, #1e293b);
21
+ --code-text-muted: var(--text-secondary, #64748b);
22
+ --code-tab-text: var(--text-secondary, #64748b);
23
+ --code-tab-active: var(--color-primary, #3b82f6);
24
+ --code-tab-hover-bg: var(--color-gray-200, #e2e8f0);
25
+ --code-copy-success: var(--color-success, #22c55e);
26
+ --code-line-number: var(--text-tertiary, #94a3b8);
27
+ --code-line-highlight: rgba(59, 130, 246, 0.1);
28
+
29
+ /* Syntax Highlighting Colors - Light Mode */
30
+ --code-tag: #e11d48; /* HTML tags - rose */
31
+ --code-attr: #7c3aed; /* Attributes - violet */
32
+ --code-string: #16a34a; /* Strings - green */
33
+ --code-comment: #64748b; /* Comments - slate */
34
+ --code-selector: #e11d48; /* CSS selectors - rose */
35
+ --code-property: #2563eb; /* CSS properties - blue */
36
+ --code-value: #16a34a; /* CSS values - green */
37
+ --code-unit: #d97706; /* Units - amber */
38
+ --code-keyword: #7c3aed; /* JS keywords - violet */
39
+ --code-function: #2563eb; /* JS functions - blue */
40
+ --code-number: #d97706; /* Numbers - amber */
41
+ --code-operator: #64748b; /* Operators - slate */
42
+ --code-punctuation: #64748b; /* Punctuation - slate */
43
+ }
44
+
45
+ /* Dark Theme Overrides */
46
+ [data-theme="dark"] {
47
+ --code-bg: var(--color-gray-900, #0f172a);
48
+ --code-header-bg: var(--color-gray-800, #1e293b);
49
+ --code-border: var(--color-gray-700, #334155);
50
+ --code-tab-hover-bg: var(--color-gray-700, #334155);
51
+ --code-line-highlight: rgba(59, 130, 246, 0.15);
52
+
53
+ /* Syntax Highlighting - Dark Mode */
54
+ --code-tag: #fb7185; /* HTML tags - rose */
55
+ --code-attr: #a78bfa; /* Attributes - violet */
56
+ --code-string: #4ade80; /* Strings - green */
57
+ --code-comment: #64748b; /* Comments - slate */
58
+ --code-selector: #fb7185; /* CSS selectors - rose */
59
+ --code-property: #60a5fa; /* CSS properties - blue */
60
+ --code-value: #4ade80; /* CSS values - green */
61
+ --code-unit: #fbbf24; /* Units - amber */
62
+ --code-keyword: #a78bfa; /* JS keywords - violet */
63
+ --code-function: #60a5fa; /* JS functions - blue */
64
+ --code-number: #fbbf24; /* Numbers - amber */
65
+ --code-operator: #94a3b8; /* Operators - slate */
66
+ --code-punctuation: #94a3b8; /* Punctuation - slate */
67
+ }
68
+
69
+ @media (prefers-color-scheme: dark) {
70
+ :root:not([data-theme]) {
71
+ --code-bg: var(--color-gray-900, #0f172a);
72
+ --code-header-bg: var(--color-gray-800, #1e293b);
73
+ --code-border: var(--color-gray-700, #334155);
74
+ --code-tab-hover-bg: var(--color-gray-700, #334155);
75
+ --code-line-highlight: rgba(59, 130, 246, 0.15);
76
+
77
+ --code-tag: #fb7185;
78
+ --code-attr: #a78bfa;
79
+ --code-string: #4ade80;
80
+ --code-comment: #64748b;
81
+ --code-selector: #fb7185;
82
+ --code-property: #60a5fa;
83
+ --code-value: #4ade80;
84
+ --code-unit: #fbbf24;
85
+ --code-keyword: #a78bfa;
86
+ --code-function: #60a5fa;
87
+ --code-number: #fbbf24;
88
+ --code-operator: #94a3b8;
89
+ --code-punctuation: #94a3b8;
90
+ }
91
+ }
92
+
93
+ /* ==========================================================================
94
+ Base Code Snippet Container
95
+ ========================================================================== */
96
+
97
+ .vd-code-snippet {
98
+ position: relative;
99
+ margin: 1rem 0;
100
+ border-radius: var(--code-border-radius);
101
+ border: 1px solid var(--code-border);
102
+ background-color: var(--code-bg);
103
+ overflow: hidden;
104
+ }
105
+
106
+ /* ==========================================================================
107
+ Collapsible Toggle Button
108
+ ========================================================================== */
109
+
110
+ .vd-code-snippet-toggle {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 0.5rem;
114
+ width: 100%;
115
+ padding: var(--code-padding-y) var(--code-padding-x);
116
+ background-color: var(--code-header-bg);
117
+ border: none;
118
+ color: var(--code-text-muted);
119
+ font-size: var(--code-font-size);
120
+ font-weight: var(--font-weight-medium, 500);
121
+ cursor: pointer;
122
+ transition: color 0.15s ease, background-color 0.15s ease;
123
+ text-align: left;
124
+ }
125
+
126
+ .vd-code-snippet-toggle:hover {
127
+ color: var(--code-text);
128
+ background-color: var(--code-tab-hover-bg);
129
+ }
130
+
131
+ .vd-code-snippet-toggle:focus-visible {
132
+ outline: 2px solid var(--code-tab-active);
133
+ outline-offset: -2px;
134
+ }
135
+
136
+ /* Toggle Icon (chevron) */
137
+ .vd-code-snippet-toggle-icon {
138
+ display: inline-flex;
139
+ width: 1rem;
140
+ height: 1rem;
141
+ transition: transform 0.2s ease;
142
+ }
143
+
144
+ .vd-code-snippet-toggle-icon::before {
145
+ content: '';
146
+ width: 0.5rem;
147
+ height: 0.5rem;
148
+ border-right: 2px solid currentColor;
149
+ border-bottom: 2px solid currentColor;
150
+ transform: rotate(-45deg);
151
+ margin: auto;
152
+ }
153
+
154
+ /* Expanded state */
155
+ .vd-code-snippet[data-expanded="true"] .vd-code-snippet-toggle-icon::before {
156
+ transform: rotate(45deg);
157
+ }
158
+
159
+ .vd-code-snippet[data-expanded="true"] .vd-code-snippet-toggle {
160
+ border-bottom: 1px solid var(--code-border);
161
+ }
162
+
163
+ /* ==========================================================================
164
+ Collapsible Content
165
+ ========================================================================== */
166
+
167
+ .vd-code-snippet-content {
168
+ display: none;
169
+ }
170
+
171
+ .vd-code-snippet-content[data-visible="true"],
172
+ .vd-code-snippet:not([data-collapsible]) .vd-code-snippet-content {
173
+ display: block;
174
+ }
175
+
176
+ /* Non-collapsible variant */
177
+ .vd-code-snippet:not([data-collapsible]) .vd-code-snippet-toggle {
178
+ display: none;
179
+ }
180
+
181
+ /* ==========================================================================
182
+ Header with Tabs and Copy Button
183
+ ========================================================================== */
184
+
185
+ .vd-code-snippet-header {
186
+ display: flex;
187
+ align-items: center;
188
+ justify-content: space-between;
189
+ min-height: var(--code-header-height);
190
+ padding: 0 var(--code-padding-x);
191
+ background-color: var(--code-header-bg);
192
+ border-bottom: 1px solid var(--code-border);
193
+ }
194
+
195
+ /* ==========================================================================
196
+ Tabs
197
+ ========================================================================== */
198
+
199
+ .vd-code-snippet-tabs {
200
+ display: flex;
201
+ gap: var(--code-tab-gap);
202
+ margin: 0;
203
+ padding: 0;
204
+ list-style: none;
205
+ }
206
+
207
+ .vd-code-snippet-tab {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ padding: 0.5rem 0.75rem;
211
+ font-size: var(--code-font-size);
212
+ font-weight: var(--font-weight-medium, 500);
213
+ color: var(--code-tab-text);
214
+ background: transparent;
215
+ border: none;
216
+ border-radius: var(--code-border-radius);
217
+ cursor: pointer;
218
+ transition: color 0.15s ease, background-color 0.15s ease;
219
+ white-space: nowrap;
220
+ }
221
+
222
+ .vd-code-snippet-tab:hover {
223
+ color: var(--code-text);
224
+ background-color: var(--code-tab-hover-bg);
225
+ }
226
+
227
+ .vd-code-snippet-tab:focus-visible {
228
+ outline: 2px solid var(--code-tab-active);
229
+ outline-offset: -2px;
230
+ }
231
+
232
+ .vd-code-snippet-tab.is-active {
233
+ color: var(--code-tab-active);
234
+ background-color: var(--code-bg);
235
+ }
236
+
237
+ /* Language labels */
238
+ .vd-code-snippet-tab[data-lang="html"]::before { content: ''; }
239
+ .vd-code-snippet-tab[data-lang="css"]::before { content: ''; }
240
+ .vd-code-snippet-tab[data-lang="js"]::before { content: ''; }
241
+
242
+ /* ==========================================================================
243
+ Copy Button
244
+ ========================================================================== */
245
+
246
+ .vd-code-snippet-copy {
247
+ display: inline-flex;
248
+ align-items: center;
249
+ gap: 0.375rem;
250
+ padding: 0.375rem 0.75rem;
251
+ font-size: var(--code-font-size);
252
+ font-weight: var(--font-weight-medium, 500);
253
+ color: var(--code-tab-text);
254
+ background: transparent;
255
+ border: 1px solid var(--code-border);
256
+ border-radius: var(--code-border-radius);
257
+ cursor: pointer;
258
+ transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
259
+ }
260
+
261
+ .vd-code-snippet-copy:hover {
262
+ color: var(--code-text);
263
+ background-color: var(--code-tab-hover-bg);
264
+ }
265
+
266
+ .vd-code-snippet-copy:focus-visible {
267
+ outline: 2px solid var(--code-tab-active);
268
+ outline-offset: 2px;
269
+ }
270
+
271
+ /* Copy Icon */
272
+ .vd-code-snippet-copy-icon {
273
+ display: inline-flex;
274
+ width: 1rem;
275
+ height: 1rem;
276
+ }
277
+
278
+ .vd-code-snippet-copy-icon::before {
279
+ content: '';
280
+ width: 100%;
281
+ height: 100%;
282
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'%3E%3C/path%3E%3C/svg%3E");
283
+ background-size: contain;
284
+ background-repeat: no-repeat;
285
+ background-position: center;
286
+ }
287
+
288
+ /* Success state */
289
+ .vd-code-snippet-copy.is-copied {
290
+ color: var(--code-copy-success);
291
+ border-color: var(--code-copy-success);
292
+ }
293
+
294
+ .vd-code-snippet-copy.is-copied .vd-code-snippet-copy-icon::before {
295
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2322c55e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
296
+ }
297
+
298
+ .vd-code-snippet-copy.is-copied .vd-code-snippet-copy-text::after {
299
+ content: 'd!';
300
+ font-size: var(--code-font-size);
301
+ }
302
+
303
+ .vd-code-snippet-copy.is-copied .vd-code-snippet-copy-text {
304
+ font-size: 0;
305
+ }
306
+
307
+ .vd-code-snippet-copy.is-copied .vd-code-snippet-copy-text::before {
308
+ content: 'Copie';
309
+ font-size: var(--code-font-size);
310
+ }
311
+
312
+ /* ==========================================================================
313
+ Code Body
314
+ ========================================================================== */
315
+
316
+ .vd-code-snippet-body {
317
+ position: relative;
318
+ overflow: hidden;
319
+ }
320
+
321
+ /* ==========================================================================
322
+ Code Panes
323
+ ========================================================================== */
324
+
325
+ .vd-code-snippet-pane {
326
+ display: none;
327
+ margin: 0;
328
+ padding: var(--code-padding-y) var(--code-padding-x);
329
+ background-color: var(--code-bg);
330
+ overflow-x: auto;
331
+ -webkit-overflow-scrolling: touch;
332
+ }
333
+
334
+ .vd-code-snippet-pane.is-active {
335
+ display: block;
336
+ }
337
+
338
+ .vd-code-snippet-pane code {
339
+ display: block;
340
+ font-family: var(--font-family-mono, 'JetBrains Mono', 'Fira Code', 'Consolas', monospace);
341
+ font-size: var(--code-font-size);
342
+ line-height: var(--code-line-height);
343
+ color: var(--code-text);
344
+ white-space: pre;
345
+ tab-size: 2;
346
+ }
347
+
348
+ /* ==========================================================================
349
+ Line Numbers (Optional)
350
+ ========================================================================== */
351
+
352
+ .vd-code-snippet-pane.has-line-numbers {
353
+ padding-left: 0;
354
+ }
355
+
356
+ .vd-code-snippet-pane.has-line-numbers code {
357
+ display: flex;
358
+ }
359
+
360
+ .vd-code-snippet-line-numbers {
361
+ display: flex;
362
+ flex-direction: column;
363
+ padding: 0 var(--code-padding-x);
364
+ margin-right: var(--code-padding-x);
365
+ border-right: 1px solid var(--code-border);
366
+ color: var(--code-line-number);
367
+ text-align: right;
368
+ user-select: none;
369
+ flex-shrink: 0;
370
+ }
371
+
372
+ .vd-code-snippet-line-numbers span {
373
+ line-height: var(--code-line-height);
374
+ }
375
+
376
+ .vd-code-snippet-code {
377
+ flex: 1;
378
+ overflow-x: auto;
379
+ }
380
+
381
+ /* Line highlighting */
382
+ .code-line-highlight {
383
+ display: block;
384
+ background-color: var(--code-line-highlight);
385
+ margin: 0 calc(-1 * var(--code-padding-x));
386
+ padding: 0 var(--code-padding-x);
387
+ }
388
+
389
+ /* ==========================================================================
390
+ Syntax Highlighting Classes
391
+ ========================================================================== */
392
+
393
+ /* HTML Syntax */
394
+ .code-tag { color: var(--code-tag); }
395
+ .code-attr { color: var(--code-attr); }
396
+ .code-string { color: var(--code-string); }
397
+ .code-comment { color: var(--code-comment); font-style: italic; }
398
+
399
+ /* CSS Syntax */
400
+ .code-selector { color: var(--code-selector); }
401
+ .code-property { color: var(--code-property); }
402
+ .code-value { color: var(--code-value); }
403
+ .code-unit { color: var(--code-unit); }
404
+
405
+ /* JavaScript Syntax */
406
+ .code-keyword { color: var(--code-keyword); }
407
+ .code-function { color: var(--code-function); }
408
+ .code-number { color: var(--code-number); }
409
+ .code-operator { color: var(--code-operator); }
410
+ .code-punctuation { color: var(--code-punctuation); }
411
+
412
+ /* ==========================================================================
413
+ Single Language Variant (No Tabs)
414
+ ========================================================================== */
415
+
416
+ .vd-code-snippet-single .vd-code-snippet-header {
417
+ justify-content: flex-end;
418
+ }
419
+
420
+ .vd-code-snippet-single .vd-code-snippet-tabs {
421
+ display: none;
422
+ }
423
+
424
+ /* ==========================================================================
425
+ Inline Variant
426
+ ========================================================================== */
427
+
428
+ .vd-code-snippet-inline {
429
+ display: inline-flex;
430
+ margin: 0;
431
+ vertical-align: middle;
432
+ }
433
+
434
+ .vd-code-snippet-inline .vd-code-snippet-header {
435
+ display: none;
436
+ }
437
+
438
+ .vd-code-snippet-inline .vd-code-snippet-pane {
439
+ display: block;
440
+ padding: 0.125rem 0.375rem;
441
+ }
442
+
443
+ .vd-code-snippet-inline .vd-code-snippet-pane code {
444
+ white-space: nowrap;
445
+ }
446
+
447
+ /* ==========================================================================
448
+ Compact Variant
449
+ ========================================================================== */
450
+
451
+ .vd-code-snippet-compact .vd-code-snippet-header {
452
+ min-height: auto;
453
+ padding: 0.25rem 0.5rem;
454
+ }
455
+
456
+ .vd-code-snippet-compact .vd-code-snippet-tab {
457
+ padding: 0.25rem 0.5rem;
458
+ font-size: 0.75rem;
459
+ }
460
+
461
+ .vd-code-snippet-compact .vd-code-snippet-copy {
462
+ padding: 0.25rem 0.5rem;
463
+ font-size: 0.75rem;
464
+ }
465
+
466
+ .vd-code-snippet-compact .vd-code-snippet-pane {
467
+ padding: 0.5rem;
468
+ }
469
+
470
+ .vd-code-snippet-compact .vd-code-snippet-pane code {
471
+ font-size: 0.75rem;
472
+ }
473
+
474
+ /* ==========================================================================
475
+ Responsive Design
476
+ ========================================================================== */
477
+
478
+ @media (max-width: 640px) {
479
+ .vd-code-snippet-header {
480
+ flex-wrap: wrap;
481
+ gap: 0.5rem;
482
+ padding: 0.5rem;
483
+ }
484
+
485
+ .vd-code-snippet-tabs {
486
+ order: 2;
487
+ width: 100%;
488
+ overflow-x: auto;
489
+ -webkit-overflow-scrolling: touch;
490
+ scrollbar-width: none;
491
+ }
492
+
493
+ .vd-code-snippet-tabs::-webkit-scrollbar {
494
+ display: none;
495
+ }
496
+
497
+ .vd-code-snippet-copy {
498
+ order: 1;
499
+ margin-left: auto;
500
+ }
501
+
502
+ .vd-code-snippet-pane {
503
+ padding: 0.75rem;
504
+ }
505
+
506
+ .vd-code-snippet-pane code {
507
+ font-size: 0.8125rem;
508
+ }
509
+ }
510
+
511
+ /* ==========================================================================
512
+ Print Styles
513
+ ========================================================================== */
514
+
515
+ @media print {
516
+ .vd-code-snippet {
517
+ break-inside: avoid;
518
+ border: 1px solid #ccc;
519
+ }
520
+
521
+ .vd-code-snippet-toggle,
522
+ .vd-code-snippet-copy {
523
+ display: none !important;
524
+ }
525
+
526
+ .vd-code-snippet-content {
527
+ display: block !important;
528
+ }
529
+
530
+ .vd-code-snippet-pane {
531
+ display: block !important;
532
+ page-break-inside: avoid;
533
+ }
534
+
535
+ .vd-code-snippet-pane::before {
536
+ content: attr(data-lang) ':';
537
+ display: block;
538
+ font-weight: bold;
539
+ margin-bottom: 0.5rem;
540
+ text-transform: uppercase;
541
+ }
542
+ }
543
+
544
+ /* ==========================================================================
545
+ Reduced Motion
546
+ ========================================================================== */
547
+
548
+ @media (prefers-reduced-motion: reduce) {
549
+ .vd-code-snippet-toggle,
550
+ .vd-code-snippet-toggle-icon,
551
+ .vd-code-snippet-tab,
552
+ .vd-code-snippet-copy {
553
+ transition: none;
554
+ }
555
+ }