@troshab/slidev-theme-troshab 0.1.0

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 (168) hide show
  1. package/CLAUDE.md +537 -0
  2. package/LICENSE +134 -0
  3. package/README.md +168 -0
  4. package/SKILL.md +414 -0
  5. package/components/AnimatedCounter.vue +35 -0
  6. package/components/Background.vue +204 -0
  7. package/components/Callout.vue +135 -0
  8. package/components/Card.vue +75 -0
  9. package/components/CardGrid.vue +67 -0
  10. package/components/CaseStudy.vue +66 -0
  11. package/components/CodeDiff.vue +229 -0
  12. package/components/CodeHighlight.vue +337 -0
  13. package/components/ColorSwatch.vue +114 -0
  14. package/components/Confetti.vue +292 -0
  15. package/components/Conversation.vue +405 -0
  16. package/components/Countdown.vue +476 -0
  17. package/components/Definition.vue +59 -0
  18. package/components/DeviceMockup.vue +392 -0
  19. package/components/Funnel.vue +87 -0
  20. package/components/Icon.vue +73 -0
  21. package/components/Iframe.vue +38 -0
  22. package/components/Image.vue +69 -0
  23. package/components/ImageCompare.vue +436 -0
  24. package/components/MatrixGrid.vue +85 -0
  25. package/components/MermaidChart.vue +299 -0
  26. package/components/Metric.vue +161 -0
  27. package/components/PersonCard.vue +165 -0
  28. package/components/PricingTable.vue +144 -0
  29. package/components/Progress.vue +100 -0
  30. package/components/Pyramid.vue +81 -0
  31. package/components/QRCode.vue +137 -0
  32. package/components/QuoteBlock.vue +101 -0
  33. package/components/SpeechBubble.vue +169 -0
  34. package/components/Stepper.vue +542 -0
  35. package/components/StyledList.vue +156 -0
  36. package/components/StyledText.vue +275 -0
  37. package/components/SwotGrid.vue +99 -0
  38. package/components/Tags.vue +20 -0
  39. package/components/Testimonial.vue +243 -0
  40. package/components/Typewriter.vue +181 -0
  41. package/components_base/AnimatedCounter.vue +208 -0
  42. package/components_base/CodeHighlight.vue +364 -0
  43. package/composables/useColors.ts +101 -0
  44. package/composables/useShiki.ts +81 -0
  45. package/example_content.md +371 -0
  46. package/example_dark.md +10 -0
  47. package/example_slides/001-cover.md +15 -0
  48. package/example_slides/002-agenda.md +25 -0
  49. package/example_slides/003-section-layouts.md +14 -0
  50. package/example_slides/004-fullscreen-centered.md +7 -0
  51. package/example_slides/005-fullscreen-align-bottom.md +14 -0
  52. package/example_slides/006-fullscreen-no-padding.md +14 -0
  53. package/example_slides/007-fullscreen-bg-image-dark.md +13 -0
  54. package/example_slides/008-fullscreen-bg-image-light.md +13 -0
  55. package/example_slides/009-fullscreen-bg-gradient.md +15 -0
  56. package/example_slides/010-fullscreen-bg-color.md +13 -0
  57. package/example_slides/011-split-basic.md +17 -0
  58. package/example_slides/012-split-image-text.md +18 -0
  59. package/example_slides/013-split-contrast.md +22 -0
  60. package/example_slides/014-columns-basic.md +13 -0
  61. package/example_slides/015-columns-two.md +26 -0
  62. package/example_slides/016-columns-ratios.md +22 -0
  63. package/example_slides/017-columns-three.md +31 -0
  64. package/example_slides/018-columns-four.md +22 -0
  65. package/example_slides/019-columns-alignment.md +23 -0
  66. package/example_slides/020-columns-styled.md +21 -0
  67. package/example_slides/021-footnote-prop.md +16 -0
  68. package/example_slides/022-iframe-fullscreen.md +8 -0
  69. package/example_slides/023-iframe-split.md +18 -0
  70. package/example_slides/024-section-components.md +14 -0
  71. package/example_slides/025-styled-text.md +9 -0
  72. package/example_slides/026-styled-text.md +15 -0
  73. package/example_slides/027-text-formatting.md +28 -0
  74. package/example_slides/028-text-spoiler.md +15 -0
  75. package/example_slides/029-icon-component.md +47 -0
  76. package/example_slides/030-metric-component.md +29 -0
  77. package/example_slides/031-person-card.md +33 -0
  78. package/example_slides/032-styled-list.md +50 -0
  79. package/example_slides/033-color-swatch.md +35 -0
  80. package/example_slides/034-code-highlight.md +9 -0
  81. package/example_slides/035-iframe-component.md +9 -0
  82. package/example_slides/036-callout.md +15 -0
  83. package/example_slides/037-card-grid.md +27 -0
  84. package/example_slides/038-stepper-variants.md +18 -0
  85. package/example_slides/039-stepper-clicks.md +49 -0
  86. package/example_slides/040-stepper-interactive.md +28 -0
  87. package/example_slides/041-tags-progress.md +21 -0
  88. package/example_slides/042-speech-bubble.md +30 -0
  89. package/example_slides/043-conversation.md +13 -0
  90. package/example_slides/044-device-iphone.md +26 -0
  91. package/example_slides/045-device-browser.md +7 -0
  92. package/example_slides/046-qrcode.md +26 -0
  93. package/example_slides/047-countdown.md +14 -0
  94. package/example_slides/048-typewriter.md +8 -0
  95. package/example_slides/049-confetti.md +16 -0
  96. package/example_slides/050-image-compare.md +13 -0
  97. package/example_slides/051-code-diff.md +24 -0
  98. package/example_slides/052-quote-block.md +8 -0
  99. package/example_slides/053-testimonial.md +26 -0
  100. package/example_slides/054-testimonial-featured.md +16 -0
  101. package/example_slides/055-funnel.md +12 -0
  102. package/example_slides/056-pyramid.md +13 -0
  103. package/example_slides/057-pricing-table.md +9 -0
  104. package/example_slides/058-swot-grid.md +12 -0
  105. package/example_slides/059-matrix-grid.md +12 -0
  106. package/example_slides/060-case-study.md +11 -0
  107. package/example_slides/061-definition.md +15 -0
  108. package/example_slides/062-mermaid-intro.md +34 -0
  109. package/example_slides/063-mermaid-flowchart.md +19 -0
  110. package/example_slides/064-mermaid-sequence.md +17 -0
  111. package/example_slides/065-mermaid-xy-chart.md +16 -0
  112. package/example_slides/066-mermaid-pie.md +17 -0
  113. package/example_slides/067-mermaid-class.md +19 -0
  114. package/example_slides/068-mermaid-state.md +19 -0
  115. package/example_slides/069-mermaid-er.md +22 -0
  116. package/example_slides/070-mermaid-gantt.md +24 -0
  117. package/example_slides/071-mermaid-timeline.md +17 -0
  118. package/example_slides/072-mermaid-mindmap.md +21 -0
  119. package/example_slides/073-mermaid-gitgraph.md +20 -0
  120. package/example_slides/074-mermaid-split.md +30 -0
  121. package/example_slides/075-mermaid-columns.md +32 -0
  122. package/example_slides/076-section-addons.md +14 -0
  123. package/example_slides/077-asciinema.md +27 -0
  124. package/example_slides/078-fancyarrow.md +31 -0
  125. package/example_slides/079-fancyarrow-demo.md +23 -0
  126. package/example_slides/080-section-theme.md +14 -0
  127. package/example_slides/081-color-architecture.md +22 -0
  128. package/example_slides/082-semantic-text-colors.md +25 -0
  129. package/example_slides/083-typography.md +16 -0
  130. package/example_slides/084-typography-rationale.md +22 -0
  131. package/example_slides/085-icons.md +24 -0
  132. package/example_slides/086-tables.md +14 -0
  133. package/example_slides/087-code-blocks.md +18 -0
  134. package/example_slides/088-motion-modes.md +35 -0
  135. package/example_slides/089-slide-transitions.md +31 -0
  136. package/example_slides/090-v-click-reveals.md +40 -0
  137. package/example_slides/091-accessibility.md +27 -0
  138. package/example_slides/092-safe-zone.md +17 -0
  139. package/example_slides/093-questions.md +8 -0
  140. package/example_white.md +10 -0
  141. package/fonts/IBMPlexMono-Medium.woff2 +1449 -0
  142. package/fonts/IBMPlexMono-Regular.woff2 +1449 -0
  143. package/fonts/IBMPlexSans-Bold.woff2 +1449 -0
  144. package/fonts/IBMPlexSans-Medium.woff2 +1449 -0
  145. package/fonts/IBMPlexSans-Regular.woff2 +1449 -0
  146. package/fonts/IBMPlexSans-SemiBold.woff2 +1449 -0
  147. package/fonts/LICENSE.txt +93 -0
  148. package/layouts/slide.vue +251 -0
  149. package/package.json +62 -0
  150. package/public/avatars/alice.png +0 -0
  151. package/public/avatars/bob.png +0 -0
  152. package/public/avatars/carol.png +0 -0
  153. package/scripts/chart-audit.mjs +216 -0
  154. package/scripts/contrast-audit.mjs +299 -0
  155. package/scripts/generate-palette.mjs +395 -0
  156. package/scripts/integrity-audit.mjs +357 -0
  157. package/scripts/shared/css-utils.mjs +216 -0
  158. package/scripts/shiki-audit.mjs +300 -0
  159. package/scripts/typography-audit.mjs +300 -0
  160. package/setup/main.ts +107 -0
  161. package/setup/mermaid.ts +237 -0
  162. package/setup/shiki.ts +40 -0
  163. package/snippets/demo.ts +26 -0
  164. package/styles/base.css +1053 -0
  165. package/styles/colors.css +422 -0
  166. package/styles/index.css +12 -0
  167. package/styles/motion.css +486 -0
  168. package/uno.config.ts +67 -0
@@ -0,0 +1,422 @@
1
+ /* ============================================
2
+ slidev-theme-troshab — Color System
3
+ ============================================
4
+
5
+ ARCHITECTURE (3 layers):
6
+
7
+ Layer 1 — Palette (this section)
8
+ Dracula (dark) / Alucard (light) derived shade ramps.
9
+ Generated via scripts/generate-palette.mjs (OKLCH ramps).
10
+ The ONLY place raw hex colors exist.
11
+ Palette does not change per theme.
12
+
13
+ Layer 2 — Semantic tokens (:root + .dark)
14
+ Map palette shades to purpose.
15
+ Only var() references, never hex.
16
+
17
+ Layer 3 — Usage (components)
18
+ Components use only semantic vars.
19
+
20
+ RULES:
21
+ - Tints (10-15% backgrounds) use opaque palette shades (-100/-700)
22
+ for WCAG-predictable contrast, NOT color-mix()
23
+ - color-mix() ONLY for true alpha: shadows, image overlays
24
+ - Every --color-{name} has a --color-{name}-foreground pair
25
+
26
+ FAMILIES (11):
27
+ - drac-bg : cool neutral (Dracula Background #282A36)
28
+ - drac-fg : warm neutral (Dracula Foreground #F8F8F2 / Alucard #1F1F1F)
29
+ - alu-bg : warm cream neutral (Alucard Background #FFFBEB)
30
+ - drac-comment: muted blue-grey (Dracula Comment #6272A4)
31
+ - drac-cyan : cyan/teal (Dracula Cyan #8BE9FD)
32
+ - drac-green : green (Dracula Green #50FA7B)
33
+ - drac-orange : orange (Dracula Orange #FFB86C)
34
+ - drac-pink : pink (Dracula Pink #FF79C6)
35
+ - drac-purple : purple (Dracula Purple #BD93F9)
36
+ - drac-red : red (Dracula Red #FF5555)
37
+ - drac-yellow : yellow-green (Dracula Yellow #F1FA8C)
38
+
39
+ ============================================ */
40
+
41
+ /* ============================================
42
+ 1. Palette Definitions (Dracula/Alucard)
43
+
44
+ 11 families x 11 shades + black/white.
45
+ Single :root block - palette is theme-invariant.
46
+ ============================================ */
47
+
48
+ :root {
49
+ /* --- Black & White --- */
50
+ --color-black: var(--color-drac-bg-950);
51
+ --color-white: var(--color-drac-fg-50);
52
+
53
+ /* --- drac-bg (cool neutral, from Dracula Background) --- */
54
+ --color-drac-bg-50: #f4f5f9;
55
+ --color-drac-bg-100: #e7e7ec;
56
+ --color-drac-bg-200: #d1d3e2;
57
+ --color-drac-bg-300: #b4b6c4;
58
+ --color-drac-bg-400: #9597a5;
59
+ --color-drac-bg-500: #747783;
60
+ --color-drac-bg-600: #5b5d69;
61
+ --color-drac-bg-700: #454753;
62
+ --color-drac-bg-800: #30323d;
63
+ --color-drac-bg-900: #1d1e29;
64
+ --color-drac-bg-950: #0c0d12;
65
+
66
+ /* --- drac-fg (warm neutral, from Dracula Foreground) --- */
67
+ --color-drac-fg-50: #f5f5f3;
68
+ --color-drac-fg-100: #e8e8e6;
69
+ --color-drac-fg-200: #d5d5cf;
70
+ --color-drac-fg-300: #b8b8b2;
71
+ --color-drac-fg-400: #999993;
72
+ --color-drac-fg-500: #787872;
73
+ --color-drac-fg-600: #5e5e59;
74
+ --color-drac-fg-700: #484843;
75
+ --color-drac-fg-800: #33332f;
76
+ --color-drac-fg-900: #20201b;
77
+ --color-drac-fg-950: #0d0d0b;
78
+
79
+ /* --- alu-bg (warm cream neutral, from Alucard Background) --- */
80
+ --color-alu-bg-50: #f6f5f1;
81
+ --color-alu-bg-100: #e9e8e3;
82
+ --color-alu-bg-200: #d8d4c6;
83
+ --color-alu-bg-300: #bbb8a9;
84
+ --color-alu-bg-400: #9c988b;
85
+ --color-alu-bg-500: #7b786a;
86
+ --color-alu-bg-600: #615e51;
87
+ --color-alu-bg-700: #4b483c;
88
+ --color-alu-bg-800: #363327;
89
+ --color-alu-bg-900: #221f14;
90
+ --color-alu-bg-950: #0f0d08;
91
+
92
+ /* --- drac-comment (muted blue-grey) --- */
93
+ --color-drac-comment-50: #f2f5fd;
94
+ --color-drac-comment-100: #dfe7ff;
95
+ --color-drac-comment-200: #c4d3ff;
96
+ --color-drac-comment-300: #a5b6e8;
97
+ --color-drac-comment-400: #8696c9;
98
+ --color-drac-comment-500: #6575a7;
99
+ --color-drac-comment-600: #4c5b8a;
100
+ --color-drac-comment-700: #384571;
101
+ --color-drac-comment-800: #243059;
102
+ --color-drac-comment-900: #121b41;
103
+ --color-drac-comment-950: #04082a;
104
+
105
+ /* --- drac-cyan (cyan/teal) --- */
106
+ --color-drac-cyan-50: #ebf8fb;
107
+ --color-drac-cyan-100: #bcf3ff;
108
+ --color-drac-cyan-200: #87e5f9;
109
+ --color-drac-cyan-300: #6cc7da;
110
+ --color-drac-cyan-400: #4fa7b8;
111
+ --color-drac-cyan-500: #2d8495;
112
+ --color-drac-cyan-600: #076979;
113
+ --color-drac-cyan-700: #00515e;
114
+ --color-drac-cyan-800: #003a44;
115
+ --color-drac-cyan-900: #00252c;
116
+ --color-drac-cyan-950: #001116;
117
+
118
+ /* --- drac-green (green) --- */
119
+ --color-drac-green-50: #e7fce9;
120
+ --color-drac-green-100: #adffb9;
121
+ --color-drac-green-200: #50fa7b;
122
+ --color-drac-green-300: #2bda61;
123
+ --color-drac-green-400: #00b749;
124
+ --color-drac-green-500: #009038;
125
+ --color-drac-green-600: #00722a;
126
+ --color-drac-green-700: #00581e;
127
+ --color-drac-green-800: #003f13;
128
+ --color-drac-green-900: #002808;
129
+ --color-drac-green-950: #001301;
130
+
131
+ /* --- drac-orange (orange) --- */
132
+ --color-drac-orange-50: #fef3e8;
133
+ --color-drac-orange-100: #ffe2c6;
134
+ --color-drac-orange-200: #ffc891;
135
+ --color-drac-orange-300: #eca75d;
136
+ --color-drac-orange-400: #c98940;
137
+ --color-drac-orange-500: #a4681e;
138
+ --color-drac-orange-600: #854f00;
139
+ --color-drac-orange-700: #683c00;
140
+ --color-drac-orange-800: #4b2a00;
141
+ --color-drac-orange-900: #311800;
142
+ --color-drac-orange-950: #1b0700;
143
+
144
+ /* --- drac-pink (pink) --- */
145
+ --color-drac-pink-50: #fff0f7;
146
+ --color-drac-pink-100: #ffddee;
147
+ --color-drac-pink-200: #ffbedf;
148
+ --color-drac-pink-300: #ff8acb;
149
+ --color-drac-pink-400: #e363ae;
150
+ --color-drac-pink-500: #bb428b;
151
+ --color-drac-pink-600: #9b2770;
152
+ --color-drac-pink-700: #7f0759;
153
+ --color-drac-pink-800: #5f0040;
154
+ --color-drac-pink-900: #3f0029;
155
+ --color-drac-pink-950: #230014;
156
+
157
+ /* --- drac-purple (purple) --- */
158
+ --color-drac-purple-50: #f7f3ff;
159
+ --color-drac-purple-100: #ede2ff;
160
+ --color-drac-purple-200: #ddc9ff;
161
+ --color-drac-purple-300: #c7a2ff;
162
+ --color-drac-purple-400: #a980e3;
163
+ --color-drac-purple-500: #8760bc;
164
+ --color-drac-purple-600: #6d469d;
165
+ --color-drac-purple-700: #563082;
166
+ --color-drac-purple-800: #401a68;
167
+ --color-drac-purple-900: #2c004f;
168
+ --color-drac-purple-950: #16002f;
169
+
170
+ /* --- drac-red (red) --- */
171
+ --color-drac-red-50: #fff2f0;
172
+ --color-drac-red-100: #ffdfdc;
173
+ --color-drac-red-200: #ffc3be;
174
+ --color-drac-red-300: #ff958e;
175
+ --color-drac-red-400: #fe5454;
176
+ --color-drac-red-500: #d33036;
177
+ --color-drac-red-600: #b1011d;
178
+ --color-drac-red-700: #8b0013;
179
+ --color-drac-red-800: #66000a;
180
+ --color-drac-red-900: #440003;
181
+ --color-drac-red-950: #260000;
182
+
183
+ /* --- drac-yellow (yellow-green) --- */
184
+ --color-drac-yellow-50: #f5f7e8;
185
+ --color-drac-yellow-100: #e8efac;
186
+ --color-drac-yellow-200: #d5dd73;
187
+ --color-drac-yellow-300: #b8c059;
188
+ --color-drac-yellow-400: #99a03c;
189
+ --color-drac-yellow-500: #797e17;
190
+ --color-drac-yellow-600: #5f6300;
191
+ --color-drac-yellow-700: #494c00;
192
+ --color-drac-yellow-800: #343600;
193
+ --color-drac-yellow-900: #202200;
194
+ --color-drac-yellow-950: #0e0f00;
195
+ }
196
+
197
+ /* ============================================
198
+ 2. Light Theme Semantic Tokens (Alucard)
199
+ All values are var() references to palette.
200
+ ============================================ */
201
+
202
+ :root {
203
+ /* --- Backgrounds (warm cream, Alucard) --- */
204
+ --color-bg: var(--color-alu-bg-50);
205
+ --color-bg-soft: var(--color-alu-bg-100);
206
+ --color-bg-muted: var(--color-alu-bg-200);
207
+
208
+ /* --- Text (dark warm) --- */
209
+ --color-text: var(--color-drac-fg-900);
210
+ --color-text-secondary: var(--color-drac-comment-600);
211
+ --color-text-tertiary: var(--color-drac-comment-700);
212
+
213
+ /* --- Borders (3:1 non-text contrast vs all backgrounds incl. bg-muted) --- */
214
+ --color-border: var(--color-drac-comment-500);
215
+ --color-border-strong: var(--color-drac-comment-600);
216
+
217
+ /* --- Primary (Alucard purple) --- */
218
+ --color-primary: var(--color-drac-purple-700);
219
+ --color-primary-soft: var(--color-drac-purple-50);
220
+ --color-primary-foreground: var(--color-drac-fg-50);
221
+
222
+ /* --- Semantic colors (Alucard-strength darks) --- */
223
+ --color-success: var(--color-drac-green-700);
224
+ --color-success-foreground: var(--color-drac-fg-50);
225
+ --color-warning: var(--color-drac-orange-600);
226
+ --color-warning-foreground: var(--color-drac-fg-50);
227
+ --color-danger: var(--color-drac-red-600);
228
+ --color-danger-foreground: var(--color-drac-fg-50);
229
+ --color-info: var(--color-drac-cyan-600);
230
+ --color-info-foreground: var(--color-drac-fg-50);
231
+
232
+ /* --- Secondary & Accent --- */
233
+ --color-secondary: var(--color-drac-comment-600);
234
+ --color-secondary-foreground: var(--color-drac-fg-50);
235
+ --color-accent: var(--color-drac-pink-700);
236
+ --color-accent-foreground: var(--color-drac-fg-50);
237
+
238
+ /* --- Tints: opaque palette shades for subtle backgrounds (WCAG-safe) ---
239
+ Shade 100: 1.18-1.24:1 vs code bg, tokens 6.45+:1, text 11.99+:1 */
240
+ --color-primary-tint: var(--color-drac-purple-100);
241
+ --color-success-tint: var(--color-drac-green-100);
242
+ --color-warning-tint: var(--color-drac-orange-100);
243
+ --color-danger-tint: var(--color-drac-red-100);
244
+ --color-info-tint: var(--color-drac-cyan-100);
245
+
246
+ /* --- Fade: gradient endpoints --- */
247
+ --color-primary-fade: var(--color-drac-purple-200);
248
+ --color-success-fade: var(--color-drac-green-200);
249
+ --color-warning-fade: var(--color-drac-orange-200);
250
+ --color-danger-fade: var(--color-drac-red-200);
251
+ --color-info-fade: var(--color-drac-cyan-200);
252
+ --color-accent-fade: var(--color-drac-pink-200);
253
+
254
+ /* --- Focus ring --- */
255
+ --color-ring: var(--color-primary);
256
+
257
+ /* --- Gradients (one per semantic color, 135deg color → fade) --- */
258
+ --gradient-primary: linear-gradient(135deg, var(--color-drac-purple-700) 0%, var(--color-drac-pink-700) 100%);
259
+ --gradient-success: linear-gradient(135deg, var(--color-success), var(--color-success-fade));
260
+ --gradient-warning: linear-gradient(135deg, var(--color-warning), var(--color-warning-fade));
261
+ --gradient-danger: linear-gradient(135deg, var(--color-danger), var(--color-danger-fade));
262
+ --gradient-info: linear-gradient(135deg, var(--color-info), var(--color-info-fade));
263
+ --gradient-accent: linear-gradient(135deg, var(--color-accent), var(--color-accent-fade));
264
+ --gradient-section: linear-gradient(135deg, var(--color-alu-bg-100) 0%, var(--color-alu-bg-200) 100%);
265
+
266
+ /* --- Theme Colors (Slidev integration) --- */
267
+ --slidev-theme-primary: var(--color-primary);
268
+ --slidev-theme-secondary: var(--color-secondary);
269
+ --slidev-theme-accent: var(--color-accent);
270
+
271
+ /* --- Syntax Highlighting (Shiki CSS variables) ---
272
+ Calibrated for 4.5:1+ on shiki-bg (alu-bg-200).
273
+ APCA content text (Lc 60+) for short-read code. */
274
+ --shiki-color-text: var(--color-drac-fg-900);
275
+ --shiki-color-background: var(--color-alu-bg-200);
276
+ --shiki-foreground: var(--shiki-color-text);
277
+ --shiki-background: var(--shiki-color-background);
278
+ --slidev-code-background: var(--shiki-color-background);
279
+ --slidev-code-font-size: var(--font-size-small);
280
+ --slidev-code-font-family: var(--font-mono);
281
+ --slidev-code-line-height: var(--line-height-code);
282
+ --slidev-code-radius: 0.5rem;
283
+ --slidev-code-padding: 8px;
284
+ --shiki-token-comment: var(--color-drac-comment-700);
285
+ --shiki-token-punctuation: var(--color-drac-pink-700);
286
+ --shiki-token-keyword: var(--color-drac-pink-700);
287
+ --shiki-token-string: var(--color-drac-yellow-700);
288
+ --shiki-token-string-expression: var(--color-drac-yellow-700);
289
+ --shiki-token-function: var(--color-drac-green-700);
290
+ --shiki-token-constant: var(--color-drac-purple-700);
291
+ --shiki-token-parameter: var(--color-drac-orange-700);
292
+ --shiki-token-link: var(--color-drac-cyan-700);
293
+
294
+ /* --- Chart palette (light theme) ---
295
+ 8 colors across 5 shade tiers (950/800/700/600/500) for maximum
296
+ grayscale luminance spread. Min adjacent gap 0.019. All 3:1+ vs bg & bg-soft. */
297
+ --chart-1: var(--color-drac-yellow-950);
298
+ --chart-2: var(--color-drac-orange-800);
299
+ --chart-3: var(--color-drac-purple-700);
300
+ --chart-4: var(--color-drac-red-600);
301
+ --chart-5: var(--color-drac-cyan-600);
302
+ --chart-6: var(--color-drac-pink-500);
303
+ --chart-7: var(--color-drac-comment-500);
304
+ --chart-8: var(--color-drac-green-500);
305
+ }
306
+
307
+ /* ============================================
308
+ 3. Dark Theme Semantic Tokens (Dracula)
309
+ ============================================ */
310
+
311
+ html.dark {
312
+ /* --- Backgrounds (cool dark, Dracula) --- */
313
+ --color-bg: var(--color-drac-bg-900);
314
+ --color-bg-soft: var(--color-drac-bg-800);
315
+ --color-bg-muted: var(--color-drac-bg-700);
316
+
317
+ /* --- Text (light, Dracula Foreground) --- */
318
+ --color-text: var(--color-drac-fg-50);
319
+ --color-text-secondary: var(--color-drac-comment-200);
320
+ --color-text-tertiary: var(--color-drac-comment-200);
321
+
322
+ /* --- Borders (3:1 non-text contrast vs all backgrounds) --- */
323
+ --color-border: var(--color-drac-comment-300);
324
+ --color-border-strong: var(--color-drac-comment-200);
325
+
326
+ /* --- Primary (Dracula Purple, consistent with light theme) --- */
327
+ --color-primary: var(--color-drac-purple-200);
328
+ --color-primary-soft: var(--color-drac-purple-950);
329
+ --color-primary-foreground: var(--color-drac-bg-900);
330
+
331
+ /* --- Semantic colors (Dracula brights, Lc 60+ on bg) --- */
332
+ --color-success: var(--color-drac-green-300);
333
+ --color-success-foreground: var(--color-drac-bg-900);
334
+ --color-warning: var(--color-drac-orange-300);
335
+ --color-warning-foreground: var(--color-drac-bg-900);
336
+ --color-danger: var(--color-drac-red-200);
337
+ --color-danger-foreground: var(--color-drac-bg-900);
338
+ --color-info: var(--color-drac-cyan-300);
339
+ --color-info-foreground: var(--color-drac-bg-900);
340
+
341
+ /* --- Secondary & Accent --- */
342
+ --color-secondary: var(--color-drac-comment-300);
343
+ --color-secondary-foreground: var(--color-drac-bg-900);
344
+ --color-accent: var(--color-drac-pink-200);
345
+ --color-accent-foreground: var(--color-drac-bg-900);
346
+
347
+ /* --- Tints: dark opaque palette shades (WCAG-safe) ---
348
+ Shade 700: 1.17-1.42:1 vs code bg, tokens 5.19+:1, text 7.15+:1 */
349
+ --color-primary-tint: var(--color-drac-purple-700);
350
+ --color-success-tint: var(--color-drac-green-700);
351
+ --color-warning-tint: var(--color-drac-orange-700);
352
+ --color-danger-tint: var(--color-drac-red-700);
353
+ --color-info-tint: var(--color-drac-cyan-700);
354
+
355
+ /* --- Fade: gradient endpoints --- */
356
+ --color-primary-fade: var(--color-drac-purple-800);
357
+ --color-success-fade: var(--color-drac-green-800);
358
+ --color-warning-fade: var(--color-drac-orange-800);
359
+ --color-danger-fade: var(--color-drac-red-800);
360
+ --color-info-fade: var(--color-drac-cyan-800);
361
+ --color-accent-fade: var(--color-drac-pink-800);
362
+
363
+ /* --- Focus ring --- */
364
+ --color-ring: var(--color-primary);
365
+
366
+ /* --- Gradients (one per semantic color, 135deg color → fade) --- */
367
+ --gradient-primary: linear-gradient(135deg, var(--color-drac-purple-400) 0%, var(--color-drac-pink-400) 100%);
368
+ --gradient-success: linear-gradient(135deg, var(--color-success), var(--color-success-fade));
369
+ --gradient-warning: linear-gradient(135deg, var(--color-warning), var(--color-warning-fade));
370
+ --gradient-danger: linear-gradient(135deg, var(--color-danger), var(--color-danger-fade));
371
+ --gradient-info: linear-gradient(135deg, var(--color-info), var(--color-info-fade));
372
+ --gradient-accent: linear-gradient(135deg, var(--color-accent), var(--color-accent-fade));
373
+ --gradient-section: linear-gradient(135deg, var(--color-drac-bg-900) 0%, var(--color-drac-bg-800) 100%);
374
+
375
+ /* --- Theme Colors (Slidev integration) --- */
376
+ --slidev-theme-primary: var(--color-primary);
377
+ --slidev-theme-secondary: var(--color-secondary);
378
+ --slidev-theme-accent: var(--color-accent);
379
+
380
+ /* --- Syntax Highlighting (dark, Dracula-based) ---
381
+ Calibrated for 4.5:1+ on shiki-bg (drac-bg-800).
382
+ APCA content text (Lc 60+) for short-read code. */
383
+ --shiki-color-text: var(--color-drac-fg-50);
384
+ --shiki-color-background: var(--color-drac-bg-800);
385
+ --shiki-foreground: var(--shiki-color-text);
386
+ --shiki-background: var(--shiki-color-background);
387
+ --slidev-code-background: var(--shiki-color-background);
388
+ --slidev-code-font-size: var(--font-size-small);
389
+ --slidev-code-font-family: var(--font-mono);
390
+ --slidev-code-line-height: var(--line-height-code);
391
+ --slidev-code-radius: 0.5rem;
392
+ --slidev-code-padding: 8px;
393
+ --shiki-token-comment: var(--color-drac-comment-200);
394
+ --shiki-token-punctuation: var(--color-drac-pink-200);
395
+ --shiki-token-keyword: var(--color-drac-pink-200);
396
+ --shiki-token-string: var(--color-drac-yellow-200);
397
+ --shiki-token-string-expression: var(--color-drac-yellow-200);
398
+ --shiki-token-function: var(--color-drac-green-200);
399
+ --shiki-token-constant: var(--color-drac-purple-200);
400
+ --shiki-token-parameter: var(--color-drac-orange-200);
401
+ --shiki-token-link: var(--color-drac-cyan-200);
402
+
403
+ /* --- Chart palette (dark theme) ---
404
+ 8 colors across 5 shade tiers (400/300/200/100) for maximum
405
+ grayscale luminance spread. Min adjacent gap 0.035. All 3:1+ vs bg & bg-soft. */
406
+ --chart-1: var(--color-drac-red-400);
407
+ --chart-2: var(--color-drac-yellow-400);
408
+ --chart-3: var(--color-drac-pink-300);
409
+ --chart-4: var(--color-drac-comment-300);
410
+ --chart-5: var(--color-drac-purple-200);
411
+ --chart-6: var(--color-drac-cyan-200);
412
+ --chart-7: var(--color-drac-orange-100);
413
+ --chart-8: var(--color-drac-green-100);
414
+ }
415
+
416
+ /* ============================================
417
+ 4. Contrast Verification
418
+ Run: npm run audit:contrast
419
+
420
+ All pairs verified via scripts/contrast-audit.mjs.
421
+ Targets: text 4.5:1 AA, borders 3:1 non-text, BDA 3.5x spacing.
422
+ ============================================ */
@@ -0,0 +1,12 @@
1
+ /* ============================================
2
+ slidev-theme-troshab — CSS Entry Point
3
+ ============================================
4
+
5
+ Slidev auto-detects this file (styles/index.css)
6
+ and loads all theme styles through base.css.
7
+
8
+ base.css imports colors.css via @import.
9
+ ============================================ */
10
+
11
+ @import './base.css';
12
+ @import './motion.css';